Welcome to IOPWiki, Commander.
With the release of the new game, we encourage contributions to topics related to Girls' Frontline 2. Learn how to contribute, read the maintenance guide, and join our Discord server to discuss major changes.
If you or someone you know can help deciphering the game files, contact our administrator.

MediaWiki:Gadget-tooltip.js: Difference between revisions

Welcome to IOP Wiki. This website is maintained by the Girls' Frontline community and is free to edit by anyone.
Jump to navigation Jump to search
Changed to new pattern
Global calling?!
Line 13: Line 13:


if (!window.tooltipGadget) {
if (!window.tooltipGadget) {
var tooltipEngine = {};
window.tooltipEngine = {};


tooltipEngine._options = {
window.tooltipEngine._options = {
tooltipId: "tooltip",
tooltipId: "tooltip",
offsetDefault: 15
offsetDefault: 15
};
};


tooltipEngine._tooltips = [];
window.tooltipEngine._tooltips = [];
tooltipEngine._tooltipsTemp = null;
window.tooltipEngine._tooltipsTemp = null;


tooltipEngine._bindTooltips = function(resetTooltips) {
window.tooltipEngine._bindTooltips = function(resetTooltips) {
console.log("Booting up tooltips.");
console.log("Booting up tooltips.");
if (resetTooltips) {
if (resetTooltips) {
tooltipEngine._tooltipsTemp = tooltipEngine._tooltips.concat();
window.tooltipEngine._tooltipsTemp = window.tooltipEngine._tooltips.concat();
tooltipEngine._tooltips = [];
window.tooltipEngine._tooltips = [];
}
}
Line 46: Line 46:
var options;
var options;


if (resetTooltips && tooltipEngine._tooltipsTemp.length && tooltipEngine._tooltipsTemp[idx] && tooltipEngine._tooltipsTemp[idx].text) {
if (resetTooltips && window.tooltipEngine._tooltipsTemp.length && window.tooltipEngine._tooltipsTemp[idx] && window.tooltipEngine._tooltipsTemp[idx].text) {
if (tooltipText.length === 0) {
if (tooltipText.length === 0) {
tooltipText = _tooltipsTemp[idx].text;
tooltipText = _tooltipsTemp[idx].text;
}
}


elm.removeEventListener("mousemove", tooltipEngine._onElementMouseMove);
elm.removeEventListener("mousemove", window.tooltipEngine._onElementMouseMove);
elm.removeEventListener("mouseout", tooltipEngine._onElementMouseOut);
elm.removeEventListener("mouseout", window.tooltipEngine._onElementMouseOut);
elm.removeEventListener("mouseover", tooltipEngine._onElementMouseOver);
elm.removeEventListener("mouseover", window.tooltipEngine._onElementMouseOver);
}
}


if (tooltipText) {
if (tooltipText) {
elm.setAttribute("data-tooltip-id", idx);
elm.setAttribute("data-tooltip-id", idx);
options = tooltipEngine._parseOptions(elm.getAttribute("data-tooltip"));
options = window.tooltipEngine._parseOptions(elm.getAttribute("data-tooltip"));
tooltipEngine._tooltips[idx] = {
window.tooltipEngine._tooltips[idx] = {
text: tooltipText,
text: tooltipText,
options: options
options: options
};
};


elm.addEventListener("mousemove", tooltipEngine._onElementMouseMove);
elm.addEventListener("mousemove", window.tooltipEngine._onElementMouseMove);
elm.addEventListener("mouseout", tooltipEngine._onElementMouseOut);
elm.addEventListener("mouseout", window.tooltipEngine._onElementMouseOut);
elm.addEventListener("mouseover", tooltipEngine._onElementMouseOver);
elm.addEventListener("mouseover", window.tooltipEngine._onElementMouseOver);
}
}
});
});


if (resetTooltips) {
if (resetTooltips) {
tooltipEngine._tooltipsTemp = null;
window.tooltipEngine._tooltipsTemp = null;
}
}
};
};


tooltipEngine._createTooltip = function(text, tooltipId) {
window.tooltipEngine._createTooltip = function(text, tooltipId) {
var tooltipElm = document.createElement("div");
var tooltipElm = document.createElement("div");
var tooltipText = text;
var tooltipText = text;
var options = tooltipId && tooltipEngine._tooltips[tooltipId] && tooltipEngine._tooltips[tooltipId].options;
var options = tooltipId && window.tooltipEngine._tooltips[tooltipId] && window.tooltipEngine._tooltips[tooltipId].options;


if (options && options["class"]) {
if (options && options["class"]) {
Line 85: Line 85:
}
}


tooltipElm.setAttribute("id", tooltipEngine._options.tooltipId);
tooltipElm.setAttribute("id", window.tooltipEngine._options.tooltipId);
tooltipElm.appendChild(tooltipText);
tooltipElm.appendChild(tooltipText);


Line 91: Line 91:
};
};


tooltipEngine._getTooltipElm = function() {
window.tooltipEngine._getTooltipElm = function() {
return document.querySelector("#" + tooltipEngine._options.tooltipId);
return document.querySelector("#" + window.tooltipEngine._options.tooltipId);
};
};


tooltipEngine._onElementMouseMove = function(evt) {
window.tooltipEngine._onElementMouseMove = function(evt) {
var tooltipId = this.getAttribute("data-tooltip-id");
var tooltipId = this.getAttribute("data-tooltip-id");
var tooltipElm = _getTooltipElm();
var tooltipElm = _getTooltipElm();
var options = tooltipId && tooltipEngine._tooltips[tooltipId] && tooltipEngine._tooltips[tooltipId].options;
var options = tooltipId && window.tooltipEngine._tooltips[tooltipId] && window.tooltipEngine._tooltips[tooltipId].options;
var offset = options && options.offset || tooltipEngine._options.offsetDefault;
var offset = options && options.offset || window.tooltipEngine._options.offsetDefault;
var scrollY = window.scrollY || window.pageYOffset;
var scrollY = window.scrollY || window.pageYOffset;
var scrollX = window.scrollX || window.pageXOffset;
var scrollX = window.scrollX || window.pageXOffset;
Line 114: Line 114:
};
};


tooltipEngine._onElementMouseOut = function(evt) {
window.tooltipEngine._onElementMouseOut = function(evt) {
var tooltipElm = tooltipEngine._getTooltipElm();
var tooltipElm = window.tooltipEngine._getTooltipElm();


if (tooltipElm) {
if (tooltipElm) {
Line 122: Line 122:
};
};


tooltipEngine._onElementMouseOver = function(evt) {
window.tooltipEngine._onElementMouseOver = function(evt) {
var tooltipId = this.getAttribute("data-tooltip-id");
var tooltipId = this.getAttribute("data-tooltip-id");
var tooltipText = tooltipId && tooltipEngine._tooltips[tooltipId] && tooltipEngine._tooltips[tooltipId].text;
var tooltipText = tooltipId && window.tooltipEngine._tooltips[tooltipId] && window.tooltipEngine._tooltips[tooltipId].text;


if (tooltipText) {
if (tooltipText) {
tooltipEngine._createTooltip(tooltipText, tooltipId);
window.tooltipEngine._createTooltip(tooltipText, tooltipId);
}
}
};
};


tooltipEngine._parseOptions = function(options) {
window.tooltipEngine._parseOptions = function(options) {
var optionsObj;
var optionsObj;


Line 145: Line 145:
};
};


tooltipEngine._init = function() {
window.tooltipEngine._init = function() {
console.log("Loading tooltips...");
console.log("Loading tooltips...");
try {
try {
document.addEventListener("DOMContentLoaded", tooltipEngine._bindTooltips);
document.addEventListener("DOMContentLoaded", window.tooltipEngine._bindTooltips);
} catch(err) {
} catch(err) {
console.log(err);
console.log(err);
}
}
}
}
window.tooltipGadget = tooltipEngine;
}
}


window.tooltipGadget._init();
window.tooltipGadget._init();

Revision as of 12:41, 7 November 2019

/**
 * Tooltip.js
 * A basic script that applies a mouseover tooltip functionality to all elements of a page that have a data-tooltip attribute
 * Matthias Schuetz, http://matthiasschuetz.com
 *
 * Copyright (C) Matthias Schuetz
 * Free to use under the MIT license
 * 
 * --------
 * 
 * This is a modified version not using text but spans inside so I can display some more complex nodes.
 */

if (!window.tooltipGadget) {
	window.tooltipEngine = {};

	window.tooltipEngine._options = {
		tooltipId: "tooltip",
		offsetDefault: 15
	};

	window.tooltipEngine._tooltips = [];
	window.tooltipEngine._tooltipsTemp = null;

	window.tooltipEngine._bindTooltips = function(resetTooltips) {
		console.log("Booting up tooltips.");
		
		if (resetTooltips) {
			window.tooltipEngine._tooltipsTemp = window.tooltipEngine._tooltips.concat();
			window.tooltipEngine._tooltips = [];
		}
		
		var tooltippedElements = document.querySelectorAll("[data-tooltip]");
		console.log("Tooltip element count: ", tooltippedElements.length);

		Array.prototype.forEach.call(tooltippedElements, function(elm, idx) {
			var tooltipText = null;
			var contents = elm.getElementsByClassName("tooltip-content");
			if (contents.length > 0) {
				tooltipText = contents[0];
				elm.removeChild(contents[0]);
				console.log("Tooltip set up for", elm);
			} else {
				console.log("No content found for tooltipped element:", elm);
			}
			var options;

			if (resetTooltips && window.tooltipEngine._tooltipsTemp.length && window.tooltipEngine._tooltipsTemp[idx] && window.tooltipEngine._tooltipsTemp[idx].text) {
				if (tooltipText.length === 0) {
					tooltipText = _tooltipsTemp[idx].text;
				}

				elm.removeEventListener("mousemove", window.tooltipEngine._onElementMouseMove);
				elm.removeEventListener("mouseout", window.tooltipEngine._onElementMouseOut);
				elm.removeEventListener("mouseover", window.tooltipEngine._onElementMouseOver);
			}

			if (tooltipText) {
				elm.setAttribute("data-tooltip-id", idx);
				options = window.tooltipEngine._parseOptions(elm.getAttribute("data-tooltip"));
				
				window.tooltipEngine._tooltips[idx] = {
					text: tooltipText,
					options: options
				};

				elm.addEventListener("mousemove", window.tooltipEngine._onElementMouseMove);
				elm.addEventListener("mouseout", window.tooltipEngine._onElementMouseOut);
				elm.addEventListener("mouseover", window.tooltipEngine._onElementMouseOver);
			}
		});

		if (resetTooltips) {
			window.tooltipEngine._tooltipsTemp = null;
		}
	};

	window.tooltipEngine._createTooltip = function(text, tooltipId) {
		var tooltipElm = document.createElement("div");
		var tooltipText = text;
		var options = tooltipId && window.tooltipEngine._tooltips[tooltipId] && window.tooltipEngine._tooltips[tooltipId].options;

		if (options && options["class"]) {
			tooltipElm.setAttribute("class", options["class"]);
		}

		tooltipElm.setAttribute("id", window.tooltipEngine._options.tooltipId);
		tooltipElm.appendChild(tooltipText);

		document.querySelector("body").appendChild(tooltipElm);
	};

	window.tooltipEngine._getTooltipElm = function() {
		return document.querySelector("#" + window.tooltipEngine._options.tooltipId);
	};

	window.tooltipEngine._onElementMouseMove = function(evt) {
		var tooltipId = this.getAttribute("data-tooltip-id");
		var tooltipElm = _getTooltipElm();
		var options = tooltipId && window.tooltipEngine._tooltips[tooltipId] && window.tooltipEngine._tooltips[tooltipId].options;
		var offset = options && options.offset || window.tooltipEngine._options.offsetDefault;
		var scrollY = window.scrollY || window.pageYOffset;
		var scrollX = window.scrollX || window.pageXOffset;
		var tooltipTop = evt.pageY + offset;
		var tooltipLeft = evt.pageX + offset;

		if (tooltipElm) {
			tooltipTop = (tooltipTop - scrollY + tooltipElm.offsetHeight + 20 >= window.innerHeight ? (tooltipTop - tooltipElm.offsetHeight - 20) : tooltipTop);
			tooltipLeft = (tooltipLeft - scrollX + tooltipElm.offsetWidth + 20 >= window.innerWidth ? (tooltipLeft - tooltipElm.offsetWidth - 20) : tooltipLeft);

			tooltipElm.style.top = tooltipTop + "px";
			tooltipElm.style.left = tooltipLeft + "px";
		}
	};

	window.tooltipEngine._onElementMouseOut = function(evt) {
		var tooltipElm = window.tooltipEngine._getTooltipElm();

		if (tooltipElm) {
			document.querySelector("body").removeChild(tooltipElm);
		}
	};

	window.tooltipEngine._onElementMouseOver = function(evt) {
		var tooltipId = this.getAttribute("data-tooltip-id");
		var tooltipText = tooltipId && window.tooltipEngine._tooltips[tooltipId] && window.tooltipEngine._tooltips[tooltipId].text;

		if (tooltipText) {
			window.tooltipEngine._createTooltip(tooltipText, tooltipId);	
		}
	};

	window.tooltipEngine._parseOptions = function(options) {
		var optionsObj;

		if (options.length) {
			try {
				optionsObj = JSON.parse(options.replace(/'/ig, "\""));
			} catch(err) {
				console.log(err);
			}
		}

		return optionsObj;
	};

	window.tooltipEngine._init = function() {
		console.log("Loading tooltips...");
		try {
			document.addEventListener("DOMContentLoaded", window.tooltipEngine._bindTooltips);
		} catch(err) {
			console.log(err);
		}
	}
}

window.tooltipGadget._init();