User:Mxn/serendipity.js

/** * Serendipity * * Endows Wikipedia with the “sense of wonder” and “serendipitous discoveries” * that proud owners of the print Encyclopædia Britannica find sorely lacking on * the Internet. Now, whenever you look up an entry in this ephemeral reference, * “lose yourself” in the alphabetically adjacent bounty of knowledge that any * self-respecting encyclopedia should offer by default. * * :-P */

if (mw.config.get("wgAction") == "view" && mw.config.get("wgNamespaceNumber") == 0) { mw.loader.using("mediawiki.api", function {        var api = new mw.Api;        /**         * Retrieves the rendered HTML content of an alphabetically adjacent         * article and passes the content to a callback function.         *          * @param forward   {boolean}   True to get the next page; false to get         *                              the previous one.         * @param ok        {function}  A callback function that takes two         *                              arguments: title, html.         */        function fetchAdjacentArticle(forward, ok) {            api.get({ list: "allpages", apfrom: mw.config.get("wgPageName"), apnamespace: 0, apfilterredir: "nonredirects", aplimit: 2, apdir: forward ? "ascending" : "descending", }).done(function (data) { var pages = data.query && data.query.allpages; var page = pages && data.query.allpages[1]; if(!page) return; $.get(mw.util.wikiScript("index"), {                   title: page.title,                    action: "render",                }, function (html) {                    if (ok) ok(page.title, html);                }, "html"); });       }        /**         * Hides content features that facilitate user contributions, multimedia         * experiences, non-linear navigation, or fact-checking.         */        function hideNewFangledFeatures {            // Links            $("#bodyContent a").unbind("click").click(function (evt) { evt.preventDefault; evt.stopPropagation; });           var extLinkHeadings = $("h2:contains('xternal link')");            extLinkHeadings.hide.nextAll("ul").hide;            if (extLinkHeadings) {                $(".toctext:contains('xternal link')").parent.hide;            }            // Cite extension            var refHeadings = $(".reflist").prev("h2:contains('eference')");            refHeadings.hide;            if (refHeadings) $(".toctext:contains('eference')").parent.hide;            // WikiMiniAtlas            wma_settings = {enabled: false};            // Stylesheets only need to be applied once.            if (hideNewFangledFeatures.stylesAdded) return;            hideNewFangledFeatures.stylesAdded = true;            // Links            mw.util.addCSS("#bodyContent a {" + "background: transparent !important; cursor: inherit;" + "color: inherit; padding-right: 0 !important;" + "text-decoration: inherit;" + "}");           // Abbreviations            mw.util.addCSS("#bodyContent abbr, #bodyContent acronym," + "#bodyContent .explain {" + "border-bottom: none; cursor: inherit;" + "}");           // Software-powered features            mw.util.addCSS("#mw-articlefeedback, #catlinks, .mw-editsection," + ".magnify, .toctoggle {display: none;}");           // Cite extension            mw.util.addCSS(".reference, .reflist {display: none;}");            // Template-powered features            mw.util.addCSS("#coordinates, img[alt='play'], .navbox, .stub" + "{display: none;}");       }        /**         * Inserts the contents of the previous article above the original one.         */        function insertPreviousArticle(title, html) {            // Stuff the main article’s title inside its body element.            $("#bodyContent").prepend($("#firstHeading"));            $("#firstHeading").css({ "font-size": 1.25 * parseFloat($("#firstHeading").css("font-size")), });           $("#bodyContent").prepend(" ")                             .prepend($(html).wrap(" "))                             .prepend("" + " " + title + " " + " ");           hideNewFangledFeatures;        };        /**         * Inserts the contents of the next article above the original one.         */        function insertNextArticle(title, html) {            $("#bodyContent").append("" + " " + title + " " + " ")                            .append($(html).wrap(" "))                             .append(" ");            hideNewFangledFeatures;        };        $(function  { fetchAdjacentArticle(false, insertPreviousArticle); fetchAdjacentArticle(true, insertNextArticle); });   }); }