<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.geministation.com/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-QuickDiff.js</id>
	<title>MediaWiki:Gadget-QuickDiff.js - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.geministation.com/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-QuickDiff.js"/>
	<link rel="alternate" type="text/html" href="https://wiki.geministation.com/index.php?title=MediaWiki:Gadget-QuickDiff.js&amp;action=history"/>
	<updated>2026-06-04T03:19:29Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki.geministation.com/index.php?title=MediaWiki:Gadget-QuickDiff.js&amp;diff=4255&amp;oldid=prev</id>
		<title>Banri: Created page with &quot;/* &lt;nowiki&gt;     QuickDiff - quickly view any diff link     Modified to remove Wikia-specific i18n code, relies on MediaWiki:Gadget-QDmodal.js      @author OneTwoThreeFall...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.geministation.com/index.php?title=MediaWiki:Gadget-QuickDiff.js&amp;diff=4255&amp;oldid=prev"/>
		<updated>2020-06-02T18:52:16Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;/* &amp;lt;nowiki&amp;gt;     QuickDiff - quickly view any diff link     Modified to remove Wikia-specific i18n code, relies on &lt;a href=&quot;/index.php?title=MediaWiki:Gadget-QDmodal.js&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;MediaWiki:Gadget-QDmodal.js (page does not exist)&quot;&gt;MediaWiki:Gadget-QDmodal.js&lt;/a&gt;      @author OneTwoThreeFall...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/* &amp;lt;nowiki&amp;gt;&lt;br /&gt;
    QuickDiff - quickly view any diff link&lt;br /&gt;
    Modified to remove Wikia-specific i18n code, relies on [[MediaWiki:Gadget-QDmodal.js]]&lt;br /&gt;
&lt;br /&gt;
    @author OneTwoThreeFall&lt;br /&gt;
    @source &amp;lt;https://dev.fandom.com/wiki/QuickDiff&amp;gt;&lt;br /&gt;
    @source &amp;lt;https://dev.fandom.com/wiki/MediaWiki:QuickDiff/code.js&amp;gt;&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
/*jslint browser, long */&lt;br /&gt;
/*global jQuery, mediaWiki, dev */&lt;br /&gt;
&lt;br /&gt;
(function ($, mw) {&lt;br /&gt;
    &amp;quot;use strict&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    // double-run protection&lt;br /&gt;
    if (window.quickDiffLoaded) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    window.quickDiffLoaded = true;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    var diffStylesModule = &amp;quot;mediawiki.action.history.diff&amp;quot;;&lt;br /&gt;
    var modal;&lt;br /&gt;
    var special = {};&lt;br /&gt;
&lt;br /&gt;
    // &amp;quot;Special:Diff/12345&amp;quot; and &amp;quot;Special:ComparePages&amp;quot; link detection&lt;br /&gt;
    function initSpecialPageStrings() {&lt;br /&gt;
        special.diffDefault = mw.util.getUrl(&amp;quot;Special:Diff/&amp;quot;);&lt;br /&gt;
        special.compareDefault = mw.util.getUrl(&amp;quot;Special:ComparePages&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        var wiki = mw.config.get(&amp;quot;wgDBname&amp;quot;);&lt;br /&gt;
        var storageKeyDiff = &amp;quot;QuickDiff-specialdiff_&amp;quot; + wiki;&lt;br /&gt;
        var storageKeyCompare = &amp;quot;QuickDiff-specialcompare_&amp;quot; + wiki;&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            special.diff = localStorage.getItem(storageKeyDiff);&lt;br /&gt;
            special.compare = localStorage.getItem(storageKeyCompare);&lt;br /&gt;
        } catch (ignore) {}&lt;br /&gt;
&lt;br /&gt;
        if (special.diff &amp;amp;&amp;amp; special.compare) {&lt;br /&gt;
            // using stored values - no need for api request&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        $.getJSON(mw.util.wikiScript(&amp;quot;api&amp;quot;), {&lt;br /&gt;
            action: &amp;quot;parse&amp;quot;,&lt;br /&gt;
            format: &amp;quot;json&amp;quot;,&lt;br /&gt;
            prop: &amp;quot;text&amp;quot;,&lt;br /&gt;
            text: &amp;quot;&amp;lt;span class=&amp;#039;diff&amp;#039;&amp;gt;[[Special:Diff/]]&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;#039;compare&amp;#039;&amp;gt;[[Special:ComparePages]]&amp;lt;/span&amp;gt;&amp;quot;,&lt;br /&gt;
            disablepp: &amp;quot;&amp;quot; // note: deprecated in MW 1.26, but needed for older versions&lt;br /&gt;
        }).done(function (data) {&lt;br /&gt;
            var $parsed = $(data.parse.text[&amp;quot;*&amp;quot;]);&lt;br /&gt;
&lt;br /&gt;
            special.diff = $parsed.find(&amp;quot;.diff &amp;gt; a&amp;quot;).attr(&amp;quot;href&amp;quot;);&lt;br /&gt;
            special.compare = $parsed.find(&amp;quot;.compare &amp;gt; a&amp;quot;).attr(&amp;quot;href&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
            try {&lt;br /&gt;
                localStorage.setItem(storageKeyDiff, special.diff);&lt;br /&gt;
                localStorage.setItem(storageKeyCompare, special.compare);&lt;br /&gt;
            } catch (ignore) {}&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function getDiffTitle($diff) {&lt;br /&gt;
        var prevTitle = $diff.find(&amp;quot;#mw-diff-otitle1 a&amp;quot;).attr(&amp;quot;title&amp;quot;);&lt;br /&gt;
        var currTitle = $diff.find(&amp;quot;#mw-diff-ntitle1 a&amp;quot;).attr(&amp;quot;title&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        if (prevTitle &amp;amp;&amp;amp; prevTitle !== currTitle) {&lt;br /&gt;
            return &amp;quot;Differences between &amp;quot; + prevTitle + &amp;quot; and &amp;quot; + currTitle;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return &amp;quot;Differences: &amp;quot; + currTitle;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function loadDiff(url) {&lt;br /&gt;
        modal.show({&lt;br /&gt;
            loading: true,&lt;br /&gt;
            title: !modal.visible &amp;amp;&amp;amp; &amp;quot;Loading...&amp;quot;&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        // add &amp;#039;action=render&amp;#039; and &amp;#039;diffonly&amp;#039; params to save some bytes on each request&lt;br /&gt;
        url.extend({&lt;br /&gt;
            action: &amp;quot;render&amp;quot;,&lt;br /&gt;
            diffonly: &amp;quot;1&amp;quot;&lt;br /&gt;
        });&lt;br /&gt;
&lt;br /&gt;
        // pass through &amp;#039;bot&amp;#039; param for rollback links if it&amp;#039;s in use on the current page&lt;br /&gt;
        if (mw.util.getParamValue(&amp;quot;bot&amp;quot;)) {&lt;br /&gt;
            url.extend({bot: &amp;quot;1&amp;quot;});&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        $.when(&lt;br /&gt;
            $.get(url.getRelativePath()),&lt;br /&gt;
            mw.loader.using(diffStylesModule)&lt;br /&gt;
        ).always(function (response) {&lt;br /&gt;
            delete url.query.action;&lt;br /&gt;
            delete url.query.diffonly;&lt;br /&gt;
            delete url.query.bot;&lt;br /&gt;
&lt;br /&gt;
            var data = {&lt;br /&gt;
                buttons: [{&lt;br /&gt;
                    text: &amp;quot;open link&amp;quot;,&lt;br /&gt;
                    href: url.toString(),&lt;br /&gt;
                    attr: {&amp;quot;data-disable-quickdiff&amp;quot;: &amp;quot;&amp;quot;}&lt;br /&gt;
                }]&lt;br /&gt;
            };&lt;br /&gt;
            var $diff;&lt;br /&gt;
&lt;br /&gt;
            if (typeof response[0] === &amp;quot;string&amp;quot;) {&lt;br /&gt;
                var $content = $(response[0]);&lt;br /&gt;
                $diff = $content.filter(&amp;quot;table.diff, #mw-rev-deleted-no-diff&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
                if (!$diff.length) {&lt;br /&gt;
                    // $content is a complete page - see if a diff can be found&lt;br /&gt;
                    // needed for diffs from special pages as they ignore action=render URL parameter&lt;br /&gt;
                    $diff = $content.find(&amp;quot;table.diff&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            if ($diff &amp;amp;&amp;amp; $diff.length) {&lt;br /&gt;
                data.content = $diff;&lt;br /&gt;
                data.hook = &amp;quot;quickdiff.ready&amp;quot;;&lt;br /&gt;
                data.title = getDiffTitle($diff);&lt;br /&gt;
            } else {&lt;br /&gt;
                data.content = &amp;quot;Something went wrong while getting the page at &amp;quot; + url.toString() + &amp;quot;.&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            modal.show(data);&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function linkClickHandler(event) {&lt;br /&gt;
        // ignore clicks with modifier keys to avoid overriding browser features&lt;br /&gt;
        if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // ignore click if link has &amp;quot;data-disable-quickdiff&amp;quot; attribute set&lt;br /&gt;
        if (event.currentTarget.dataset.disableQuickdiff !== undefined) {&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var url = event.currentTarget.href;&lt;br /&gt;
&lt;br /&gt;
        try {&lt;br /&gt;
            url = new mw.Uri(url);&lt;br /&gt;
        } catch (ignore) {&lt;br /&gt;
            // quit if url couldn&amp;#039;t be parsed&lt;br /&gt;
            // it wouldn&amp;#039;t be a link QuickDiff could handle anyway&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // cross-domain requests not supported&lt;br /&gt;
        if (url.host !== location.hostname) {&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // no fragment check is to ensure section links/collapsible trigger links on diff pages are ignored&lt;br /&gt;
        var hasDiffParam = url.query.diff !== undefined&lt;br /&gt;
                &amp;amp;&amp;amp; url.fragment === undefined;&lt;br /&gt;
        var isSpecialDiffLink = url.path.indexOf(special.diff) === 0&lt;br /&gt;
                || url.path.indexOf(special.diffDefault) === 0;&lt;br /&gt;
        var isSpecialCompareLink = url.path.indexOf(special.compare) === 0&lt;br /&gt;
                || url.path.indexOf(special.compareDefault) === 0;&lt;br /&gt;
&lt;br /&gt;
        if (hasDiffParam || isSpecialDiffLink || isSpecialCompareLink) {&lt;br /&gt;
            event.preventDefault();&lt;br /&gt;
            loadDiff(url);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function init() {&lt;br /&gt;
        modal = new mw.libs.QDmodal(&amp;quot;quickdiff-modal&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        // full screen modal&lt;br /&gt;
        mw.util.addCSS(&amp;quot;#quickdiff-modal { height: 100%; width: 100% }&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        // diff styles module was renamed in MW 1.28&lt;br /&gt;
        if (mw.loader.getState(&amp;quot;mediawiki.diff.styles&amp;quot;)) {&lt;br /&gt;
            diffStylesModule = &amp;quot;mediawiki.diff.styles&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // attach to body for compatibility with ajax-loaded content&lt;br /&gt;
        // also, one attached event handler is better than hundreds!&lt;br /&gt;
        $(document.body).on(&amp;quot;click.quickdiff&amp;quot;, &amp;quot;a[href]&amp;quot;, linkClickHandler);&lt;br /&gt;
&lt;br /&gt;
        initSpecialPageStrings();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function initDependencies() {&lt;br /&gt;
        var waitFor = [&lt;br /&gt;
            mw.loader.using([&amp;quot;mediawiki.Uri&amp;quot;, &amp;quot;mediawiki.util&amp;quot;])&lt;br /&gt;
        ];&lt;br /&gt;
&lt;br /&gt;
        if (!(mw.libs.QDmodal &amp;amp;&amp;amp; mw.libs.QDmodal.version &amp;gt;= 20180212)) {&lt;br /&gt;
            waitFor.push($.ajax({&lt;br /&gt;
                cache: true,&lt;br /&gt;
                dataType: &amp;quot;script&amp;quot;,&lt;br /&gt;
                url: &amp;quot;//runescape.wiki/w/MediaWiki:Gadget-QDmodal.js?action=raw&amp;amp;ctype=text/javascript&amp;quot;&lt;br /&gt;
            }));&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        $.when.apply($, waitFor).done(init);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    initDependencies();&lt;br /&gt;
&lt;br /&gt;
    // collect action links (edit, undo, rollback, patrol) and add them to footer&lt;br /&gt;
    mw.hook(&amp;quot;quickdiff.ready&amp;quot;).add(function (modal) {&lt;br /&gt;
        // edit/undo links use &amp;quot;mw-rev-head-action&amp;quot; class on Wikia,&lt;br /&gt;
        // and &amp;quot;mw-diff-edit&amp;quot; or &amp;quot;-undo&amp;quot; class on MW 1.24+&lt;br /&gt;
        var $buttons = modal.$content.find(&amp;quot;.diff-ntitle&amp;quot;).find(&lt;br /&gt;
            &amp;quot;.mw-rev-head-action, .mw-diff-edit, .mw-diff-undo, .mw-rollback-link, .patrollink&amp;quot;&lt;br /&gt;
        ).clone();&lt;br /&gt;
&lt;br /&gt;
        // remove text nodes (the brackets around each link)&lt;br /&gt;
        $buttons.contents().filter(function (ignore, element) {&lt;br /&gt;
            return element.nodeType === 3;&lt;br /&gt;
        }).remove();&lt;br /&gt;
&lt;br /&gt;
        $buttons.find(&amp;quot;a&amp;quot;)&lt;br /&gt;
            .addClass(&amp;quot;qdmodal-button&amp;quot;)&lt;br /&gt;
            .attr(&amp;quot;target&amp;quot;, &amp;quot;_blank&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        modal.$footer.append($buttons);&lt;br /&gt;
    });&lt;br /&gt;
}(jQuery, mediaWiki));&lt;/div&gt;</summary>
		<author><name>Banri</name></author>
	</entry>
</feed>