<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.terramonmod.com/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-tgcLinks.js</id>
	<title>MediaWiki:Gadget-tgcLinks.js - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.terramonmod.com/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-tgcLinks.js"/>
	<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=MediaWiki:Gadget-tgcLinks.js&amp;action=history"/>
	<updated>2026-07-13T05:30:23Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=MediaWiki:Gadget-tgcLinks.js&amp;diff=56&amp;oldid=prev</id>
		<title>JamzOJamz: Created page with &quot;// Change the &#039;href&#039; attributes of links that are redirects to the Terraria Wiki // to make them go directly to their destination. Add a CSS class to those links // which applies a slightly different color to them.  var cssClass = &#039;tgclink&#039;;  $(document).ready(function() {     var allRedirectLinksOnPage = collectAllRedirectLinks();     // modify the title and href attributes of a link and add the class for coloring     handleDirectInterwikiLinks(allRedirectLinksOnPage.di...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=MediaWiki:Gadget-tgcLinks.js&amp;diff=56&amp;oldid=prev"/>
		<updated>2025-11-23T20:42:12Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;// Change the &amp;#039;href&amp;#039; attributes of links that are redirects to the Terraria Wiki // to make them go directly to their destination. Add a CSS class to those links // which applies a slightly different color to them.  var cssClass = &amp;#039;tgclink&amp;#039;;  $(document).ready(function() {     var allRedirectLinksOnPage = collectAllRedirectLinks();     // modify the title and href attributes of a link and add the class for coloring     handleDirectInterwikiLinks(allRedirectLinksOnPage.di...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;// Change the &amp;#039;href&amp;#039; attributes of links that are redirects to the Terraria Wiki&lt;br /&gt;
// to make them go directly to their destination. Add a CSS class to those links&lt;br /&gt;
// which applies a slightly different color to them.&lt;br /&gt;
&lt;br /&gt;
var cssClass = &amp;#039;tgclink&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
$(document).ready(function() {&lt;br /&gt;
    var allRedirectLinksOnPage = collectAllRedirectLinks();&lt;br /&gt;
    // modify the title and href attributes of a link and add the class for coloring&lt;br /&gt;
    handleDirectInterwikiLinks(allRedirectLinksOnPage.direct);&lt;br /&gt;
    handleIndirectInterwikiLinks(allRedirectLinksOnPage.indirect);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
function makeNewHovertext(title) {&lt;br /&gt;
    return &amp;#039;Terraria Wiki: &amp;#039; + title + &amp;#039; (this link is a redirect to the main Terraria Wiki)&amp;#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function collectAllRedirectLinks() {&lt;br /&gt;
	var directInterwikiLinks = [];&lt;br /&gt;
	var indirectInterwikiLinks = [];&lt;br /&gt;
	$(&amp;#039;#mw-content-text a.mw-redirect, #mw-content-text a.extiw&amp;#039;).each(function() {&lt;br /&gt;
	    var thislink = $(this);&lt;br /&gt;
	    if (thislink.attr(&amp;#039;title&amp;#039;).slice(0, 4) === &amp;#039;tgc:&amp;#039;) {&lt;br /&gt;
	    	directInterwikiLinks.push(thislink);&lt;br /&gt;
	    } else {&lt;br /&gt;
	        indirectInterwikiLinks.push(thislink);&lt;br /&gt;
	    }&lt;br /&gt;
	});&lt;br /&gt;
	return { direct: directInterwikiLinks, indirect: indirectInterwikiLinks };&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function handleDirectInterwikiLinks(links) {&lt;br /&gt;
	$.each(links, function() {&lt;br /&gt;
		var thislink = $(this);&lt;br /&gt;
	    var newHovertext = makeNewHovertext(thislink.attr(&amp;#039;title&amp;#039;).slice(4)); // strip the &amp;#039;tgc:&amp;#039; part&lt;br /&gt;
	    thislink&lt;br /&gt;
            .attr(&amp;#039;title&amp;#039;, newHovertext)&lt;br /&gt;
            .attr(&amp;#039;target&amp;#039;, &amp;#039;_blank&amp;#039;) // open in new tab&lt;br /&gt;
            .addClass(cssClass);&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function handleIndirectInterwikiLinks(links) {&lt;br /&gt;
	var linkTargets = [];&lt;br /&gt;
	$.each(links, function() {&lt;br /&gt;
	    var linkTarget = getTargetOfLink($(this));&lt;br /&gt;
	    if ($.inArray(linkTarget, linkTargets) === -1) {&lt;br /&gt;
	        linkTargets.push(linkTarget);&lt;br /&gt;
	    }&lt;br /&gt;
	});&lt;br /&gt;
	&lt;br /&gt;
	if (linkTargets.length === 0) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
    getRedirectUrls(linkTargets).done(function(redirectUrls) {&lt;br /&gt;
        if (redirectUrls === undefined) {&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        $.each(links, function() {&lt;br /&gt;
            var thislink = $(this);&lt;br /&gt;
            var linkTarget = getTargetOfLink(thislink);&lt;br /&gt;
            var tgcUrl = redirectUrls[linkTarget];&lt;br /&gt;
            if (tgcUrl === undefined) {&lt;br /&gt;
            	return;&lt;br /&gt;
            }&lt;br /&gt;
            var hashIndex = thislink.attr(&amp;#039;href&amp;#039;).indexOf(&amp;#039;#&amp;#039;);&lt;br /&gt;
            if (hashIndex &amp;gt; -1) {&lt;br /&gt;
            	tgcUrl += thislink.attr(&amp;#039;href&amp;#039;).slice(hashIndex);&lt;br /&gt;
            }&lt;br /&gt;
            thislink&lt;br /&gt;
                .attr(&amp;#039;href&amp;#039;, tgcUrl)&lt;br /&gt;
                .attr(&amp;#039;title&amp;#039;, makeNewHovertext(linkTarget))&lt;br /&gt;
                .attr(&amp;#039;target&amp;#039;, &amp;#039;_blank&amp;#039;) // open in new tab&lt;br /&gt;
                .addClass([&amp;#039;extiw&amp;#039;, cssClass]);&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getTargetOfLink(linkElement) {&lt;br /&gt;
    return decodeURIComponent(linkElement.attr(&amp;#039;href&amp;#039;)&lt;br /&gt;
        .replace(/_/g, &amp;#039; &amp;#039;)&lt;br /&gt;
        .replace(/^\/(wiki\/|mediawiki\/index\.php\/)?/, &amp;#039;&amp;#039;)  // added index.php case&lt;br /&gt;
        .replace(/#.+$/, &amp;#039;&amp;#039;)&lt;br /&gt;
    );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getRedirectUrls(linkTargets) {&lt;br /&gt;
    var deferred = new $.Deferred();&lt;br /&gt;
    new mw.Api().post({&lt;br /&gt;
        action: &amp;#039;query&amp;#039;,&lt;br /&gt;
        format: &amp;#039;json&amp;#039;,&lt;br /&gt;
        titles: linkTargets.join(&amp;#039;|&amp;#039;),&lt;br /&gt;
        redirects: true,&lt;br /&gt;
        iwurl: true&lt;br /&gt;
    }).done(function(data) {&lt;br /&gt;
        if (data.query.redirects === undefined || data.query.interwiki === undefined) {&lt;br /&gt;
            deferred.resolve();&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        var redirectUrls = {};&lt;br /&gt;
        var redirectObjects = data.query.redirects.filter(function(r) { return r.tointerwiki === &amp;#039;tgc&amp;#039;; });&lt;br /&gt;
        redirectObjects.forEach(function(redirect) {&lt;br /&gt;
            var iwObject = data.query.interwiki.find(function (i) {&lt;br /&gt;
                return i.iw === &amp;#039;tgc&amp;#039; &amp;amp;&amp;amp; i.title === redirect.to;&lt;br /&gt;
            });&lt;br /&gt;
            if (iwObject !== undefined) {&lt;br /&gt;
                redirectUrls[redirect.from] = iwObject.url;&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
        deferred.resolve(redirectUrls);&lt;br /&gt;
    }).fail(function() {&lt;br /&gt;
        var error = arguments;&lt;br /&gt;
        if (error[0] === &amp;#039;toomanyvalues&amp;#039;) {&lt;br /&gt;
            var limit = error[1].error.limit;&lt;br /&gt;
            var deferreds = [];&lt;br /&gt;
            for (var index = 0; index &amp;lt; Math.ceil(linkTargets.length / limit); index++) {&lt;br /&gt;
                var linkTargetsSlice = linkTargets.slice(index * limit, (index + 1) * limit);&lt;br /&gt;
                deferreds.push(getRedirectUrls(linkTargetsSlice));&lt;br /&gt;
            }&lt;br /&gt;
            $.when.apply(null, deferreds).done(function() {&lt;br /&gt;
                var redirectUrls = Array.from(arguments).reduce(function(redirectUrlsCombined, redirectUrlsSlice) {&lt;br /&gt;
                    if (redirectUrlsSlice !== undefined) {&lt;br /&gt;
                        Object.keys(redirectUrlsSlice).forEach(function(key) {&lt;br /&gt;
                            redirectUrlsCombined[key] = redirectUrlsSlice[key];&lt;br /&gt;
                        });&lt;br /&gt;
                    }&lt;br /&gt;
                    return redirectUrlsCombined;&lt;br /&gt;
                }, {});&lt;br /&gt;
                deferred.resolve(redirectUrls);&lt;br /&gt;
            });&lt;br /&gt;
        } else {&lt;br /&gt;
            console.error(error);&lt;br /&gt;
            deferred.resolve();&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
    return deferred;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
</feed>