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); | |||
})(); | |||