الفرق بين المراجعتين لصفحة: «ميدياويكي:Gadget-organize-language-links.js»
dfghjk>Admin ط (۱ نسخه واردشده) |
ط (مراجعة واحدة) |
(لا فرق)
|
المراجعة الحالية بتاريخ ١٨:١٥، ٢ أغسطس ٢٠٢٣
/**
* Description: Adapt the focused language links to those the user in fact uses
* Maintainers: [[User:Jeblad]]
*/
/*(function(mw, $, undefined){
// only web browsers supporting local storage
if (!window.localStorage) return;
// override our default portlet language selector
var skins = {
//'modern' : '#p-lang'
};
// this is the number of entries we tries to approximate
var num = 3;
// this is the fraction of the overall calls to increase the focused items
var frac = 0.05;
// note that this is also positional dependent
var defaults = {
// we kickstart at this number of overall clicks
'all' : 21,
'langs' : {
// these are focused and very sticky
'en' : 4, 'fr' : 4, 'de' : 4, 'it' : 4,
// these are also focused but less sticky
'ar' : 2, 'tr' : 2, 'ja' : 2,
// these easilly gets focus
'nl' : 1, 'pl' : 1, 'ru' : 1, 'fi' : 1
}
}
// get the locally stored objects, clear out the objects on errors
var max = 32; // limit the number of entries, this will eventually clear obsolete entries
var language = {}; // holds the number of accesses
try {
// we try to convert what we have in local storage
language = JSON.parse( window.localStorage.getItem("sidebar-languages")) || defaults;
}
catch (e) {
// bummer, use defaults
language = defaults;
}
// locate the language links container
var ul = $(skins[skin] ? skins[skin] : '#p-lang').find('ul').first();
// worker to be run after load
$(function(){
// skin name is used to set default selector
var skin = mw.user.options.get( 'skin' );
// should we sort the list
if (!/no-sort/.test(mw.config.get('wgLanglinks'))) {
// figure out what to sort
var items = {};
ul.find('li').each(function(i, el){
if ( el.className ) {
var matches = el.className.match(/interwiki-([-\w]*)/);
if (matches && matches.length == 2) {
items[matches[1]] = this;
}
}
});
// we need a list of prefixes (yeah, there is better ways to do this in new browsers)
var prefixes = [];
for (var x in items) prefixes.push(x);
// sort the prefixes and move the items up front
for (var y in prefixes.sort().reverse()) {
var x = prefixes[y];
ul.prepend(items[x]);
}
}
// should we reorder the list
if (!/no-reorder/.test(mw.config.get('wgLanglinks'))) {
// we need a keys list (yeah, there is better ways to do this in new browsers)
var keys = [];
for (var x in language.langs) keys.push(x);
// sort out the candidates
var candidates = [];
for (var y in keys.sort(function(a,b){return language.langs[a] <= language.langs[b]})) {
var x = keys[y];
if (language.langs[x] && (frac*language.all<language.langs[x] || 0<num)) {
num--;
candidates.push(x);
}
}
// build a selector for each of the candidates
var selectors = [];
for (var x in candidates) {
selectors.push('.interwiki-' + candidates[x]);
}
// move the found lang links
var items = ul.find(selectors.join(','));
items.detach();
items.addClass('iw-focus');
ul.prepend(items);
}
// add an additional handler on all langlinks
ul.find('li a').click(function(){
// should we analyze the click behaviour
if (!/no-analyze/.test(mw.config.get('wgLanglinks'))) {
try {
var cname = $(this).parent().attr('class');
if (cname) {
// rebuild for local storage
var a = [];
var matches = cname.match(/interwiki-([-\w]*)/);
a.push('"'+matches[1]+'":'+(language.langs[matches[1]] ? language.langs[matches[1]]+1 : 1));
for (var x in language.langs) {
if (x !== matches[1]) {
a.push('"'+x+'":'+language.langs[x]);
}
}
// note that this also resets the structure if it previously croacked
window.localStorage.setItem("sidebar-languages", '{"all":'+(language.all+1)+',"langs":{'+a.join(',')+'}}' );
}
}
catch (e) {
// die silently
}
}
// continue on the link, we're done
return true;
});
});
})(mediaWiki, jQuery);*/