MediaWiki:Common.js: Difference between revisions

No edit summary
 
Add Did-you-know client-side rotator
 
Line 77: Line 77:
     });
     });
}());
}());
/* "Did you know…" rotator (Template:DYK). The template ships the whole
* weekly fact pool; server HTML is parser-cached, so each page view picks
* 4 facts at random client-side. */
(function () {
    function rotateDyk() {
        var pools = document.querySelectorAll('.kwc-dyk-pool');
        Array.prototype.forEach.call(pools, function (root) {
            if (root.getAttribute('data-kwc-rotated')) { return; }
            root.setAttribute('data-kwc-rotated', '1');
            var items = root.querySelectorAll('ul > li');
            if (items.length <= 4) { return; }
            var idx = [];
            for (var i = 0; i < items.length; i++) { idx.push(i); }
            for (var j = idx.length - 1; j > 0; j--) {
                var k = Math.floor(Math.random() * (j + 1));
                var t = idx[j]; idx[j] = idx[k]; idx[k] = t;
            }
            var keep = {};
            for (var c = 0; c < 4; c++) { keep[idx[c]] = true; }
            for (var n = 0; n < items.length; n++) {
                if (!keep[n]) { items[n].style.display = 'none'; }
            }
        });
    }
    mw.hook('wikipage.content').add(rotateDyk);
})();