Fantastic Frontier Roblox Wiki
Advertisement

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
$(function() {
    
    var tooltip = $("<div id=\"item-tooltip\"></div>");
    
    /*
    <div id="item-tooltip" style="
    left: 1040px;
    top: 450px;
">
    <div class="it-header"><img src="https://vignette.wikia.nocookie.net/fantastic-frontier-roblox/images/0/0b/RatboyHandgun.png/revision/latest/scale-to-width-down/80?cb=20190119002640"><div class="it-title">Ratboy Handgun and a really long title as a test.</div></div><div class="it-infobox it-desc">A mechanical handgun created by the Ratboy people.</div>

<div class="it-infobox">
	<div class="it-infoitem"><span class="it-infoitem-key">Type</span><span class="it-infoitem-val">Ranged</span></div>
</div>
<div class="it-infobox">
	<div class="it-infoitem"><span class="it-infoitem-key">Damage</span><span class="it-infoitem-val">500 (Basic Attack)<br>675 (Divine Shot)</span></div><div class="it-infoitem"><span class="it-infoitem-key">Special Ability</span><span class="it-infoitem-val">Divine Shot</span></div>
</div>
<div class="it-infobox">
	<div class="it-infoitem"><span class="it-infoitem-key">Price</span><span class="it-infoitem-val">25,000,000g</span></div>
    <div class="it-infoitem"><span class="it-infoitem-key">Selling Price</span><span class="it-infoitem-val">10,000,000g</span></div>
    <div class="it-infoitem"><span class="it-infoitem-key">Source(s)</span><span class="it-infoitem-val">Frog<br>Ratboy's Nightmare Dungeon</span></div>
</div>
    
</div>
    */
    
    // Cache for already-checked items, to save resources.
    var cache = {};
    
    function generateSection(sec, items) {
        for (var i = 0; i < items.length; i++) {
            var item = $("<div class=\"it-infoitem\"><span class=\"it-infoitem-key\"></span><span class=\"it-infoitem-val\"></span></div>");
            var current = $(items[i]);
            item.find(".it-infoitem-key").text(current.find(".pi-data-label").text());
            item.find(".it-infoitem-val").html(current.find(".pi-data-value").html()); // To allow for listing.
            sec.append(item);
        }
    }
    
    // Updates the DOM for our tooltip element using the found data.
    function setTooltip(data) {
        tooltip.html("<div class=\"it-header\"><img/><div class=\"it-title\">-</div></div>");
        tooltip.find(".it-title").text(data.find(".pi-title").text());
        tooltip.find(".it-header img").attr("src", data.find(".pi-image img").attr("src"));
        if (data.find(".pi-image .pi-caption").length > 0)
            tooltip.append($("<div class=\"it-infobox it-desc\"></div>").text(data.find(".pi-image .pi-caption").text()));
        var dsec = data.find("section, >.pi-data");
        for (var i = 0; i < dsec.length; i++) {
            var sec = $("<div class=\"it-infobox\"></div>");
            if (dsec.is("section"))
                generateSection(sec, dsec.find(".pi-data"));
            else
                generateSection(sec, $(dsec[i]));
            tooltip.append(sec);
        }
        tooltip.show();
    }
    
    // Checks if we have cached data on the article, and loads/sets accordingly.
    function updateTooltip(article) {
        tooltip.hide();
        if (article in cache) {
            if (cache[article] !== false) {
                setTooltip(cache[article]);
            }
        } else {
            $.get("https://fantastic-frontier-roblox.wikia.com/wiki/" + article, function(domString) {
                var dom = $(domString);
                var infobox = dom.find(".portable-infobox");
                if (infobox.length > 0) {
                    cache[article] = infobox;
                    setTooltip(infobox);
                } else {
                    // No infobox, so we'll mark this article as not having a tooltip.
                    cache[article] = false;
                }
            });
        }
    }
    
    // Assigns hover-logic for an element to display tooltips.
    function setupElement(elem) {
        var article = elem.attr("href").substr(6); // Trim away /wiki/.
        elem.hover(function() {
            updateTooltip(article);
        }, function() {
            tooltip.hide();
        });
    }
    
    // Hook up tooltips to wiki links.
    $("a[href^='/wiki/']").each(function() {
        setupElement($(this));
    });
    
    tooltip.hide();
    $(document.body).append(tooltip);
});
Advertisement