Järjestelmäviesti:Gadget-Luokkaselain.js
Huomautus: Selaimen välimuisti pitää tyhjentää asetusten tallentamisen jälkeen, jotta muutokset tulisivat voimaan.
- Firefox ja Safari: Napsauta Shift-näppäin pohjassa Päivitä, tai paina Ctrl-F5 tai Ctrl-R (⌘-R Macilla)
- Google Chrome: Paina Ctrl-Shift-R (⌘-Shift-R Macilla)
- Internet Explorer ja Edge: Napsauta Ctrl-näppäin pohjassa Päivitä tai paina Ctrl-F5
- Opera: Paina Ctrl-F5.
if ( mw.config.get('wgAction') === 'view' &&
mw.config.get('wgNamespaceNumber') === 14 /* Luokka */ ) {
var colorOdd = "#ddd",
colorEven = "#eee",
colorTop = "#def";
function reverseString(string) {
return string.split("").reverse().join("");
}
function addTextbox($toc, value, reversed) {
// tekstilaatikko
$toc.children('tbody').append(
'<tr>'
+ '<td id="container" align="center">'
+ '<form class="createbox" action="/w/index.php" method="get">'
+ '</form>'
+ '</td>'
+ '</tr>'
);
var $form = $toc.find("#container form"),
$textInput = $('<input type="text" width="4" />'),
$hiddenInput = $('<input type="hidden" name="from" />');
$textInput.val(
reversed
? reverseString(value)
: value
);
var $submit = $('<input type="submit" value="Siirry" />');
// Jos ollaan käänteissanakirjassa, käännetään hakukentän teksti ennen submittia.
// Siirretään hakukentän teksti nimettyyn piilokenttään ennen tietojen lähettämistä, koska
// jos hakukenttä on nimetty ja teksti käännetään, vilahtaa käännetty teksti hakukentässä.
$submit.on('click', function (event) {
if ( reversed ) {
$hiddenInput.val(reverseString($textInput.val()));
} else {
$hiddenInput.val($textInput.val());
}
return true;
});
$form.append([
'<input type="hidden" name="title" value="' + mw.config.get("wgPageName") + '" />',
(reversed ? "Listaus alkaen kohdasta (suffiksi): " : "Listaus alkaen kohdasta: "),
$textInput,
$hiddenInput,
' ',
$submit
]);
}
function getNumberOfLevels($tr0) {
// Luetaan sivujen kokonaismäärä luokassa.
var total = (function () {
var $p = $('#mw-pages p:contains("Sivujen kokonaismäärä luokassa on")');
var num = $p.text().match(/Sivujen kokonaismäärä luokassa on (.*)\./)[1].replace(/\s/g, "");
return parseInt(num);
}());
// Kerralla näkyvien sivujen määrä.
var N_VISIBLE = 200;
// Aakkosten määrä
var n_aak = $tr0.find("a").length - 1;
// Ratkaistaan tasojen määrä epäyhtälöstä
// total / n_aak^levels < N_VISIBLE
// <=> levels = ceil ( log_(n_aak)(total/N_Visible) )
// = ceil ( log(total/N_VISIBLE) / log(n_aak) )
var levels = Math.ceil(Math.log(total/N_VISIBLE) / Math.log(n_aak));
return levels;
}
function getURL(baseURL, fromParam) {
return baseURL + "&from=" + encodeURIComponent(fromParam);
}
/**
* Poistaa from-parametrin urlista.
**/
function getBaseURL(url) {
return url.replace(/&from=.*$/, '')
.replace(/from=[^&#].*?(&|$)/, '');
}
/**
* Lisää uuden tason edellisen alle. Uudessa tasossa on yksi kirjain enemmän kuin edellisessä.
**/
function addLevel($tr0, $tr_prev, level, fromParam, baseURL, reversed) {
var color = (level % 2 === 0 ? colorEven : colorOdd);
var $tr_current = $tr0.clone();
var $elements = $tr_current.find("a, .aakkosluettelo-pseudolinkki");
var baseString = fromParam.substring(0, level);
var next = fromParam.substring(0, level + 1);
if ( level < fromParam.length ) {
fromParam.substring(0, level+1);
}
if ( level === fromParam.length ) {
color = colorTop;
}
$tr_current.css("font-size", "0.8em");
$tr_current.css("background-color", color);
$elements.each(function (index) {
var $this = $(this);
var s = baseString + $this.text().toLowerCase();
if ( $this.text() === "Alkuun" ) {
$this.text("↑");
$this.attr("href", getURL(baseURL, baseString));
} else {
if ( s === next ) {
$this.html('<strong>' + (reversed ? ("-" + reverseString(s.toLowerCase())) : s) + '</strong>');
} else {
$this.text(reversed ? ("-" + reverseString(s.toLowerCase())) : s);
}
$this.attr("href", getURL(baseURL, s));
}
});
$tr_prev.after($tr_current);
return $tr_current;
}
function getFromParam(url) {
var param = url.indexOf("?from=") > -1 || url.indexOf("&from=") > -1
? url.replace(/.*\bfrom=(.*?)(?=&|#|$).*/, "$1").replace(/#.*$/, "")
: "";
param = param.split("%0A")[0];
return decodeURIComponent(param);
}
window.jQuery(document).ready(function ($) {
var url = document.location.toString();
var fromParam = getFromParam(url);
var baseURL = getBaseURL(url);
var $toc = $('#toc');
if ( $toc.length === 0 ) {
return;
}
var reversed = $(".suffiksihakemisto").length > 0;
addTextbox($toc, fromParam, reversed);
if ( fromParam === "" ) {
return;
}
var $tr0 = $toc.find("a:first").closest("tr");
var levels = getNumberOfLevels($tr0);
$tr0.css("text-align", "center"); // TODO muuta mallineesta
if ( levels > 1 ) {
var $prevTr = $tr0;
for ( var level = 0; level < fromParam.length && level < levels; level++ ) {
$prevTr = addLevel($tr0, $prevTr, level + 1, fromParam, baseURL, reversed);
}
}
});
}