Перейти к содержанию

Участник:Lingüista/navigation.js

Материал из Викисловаря

Замечание: Возможно, после публикации вам придётся очистить кэш своего браузера, чтобы увидеть изменения.

  • Firefox / Safari: Удерживая клавишу Shift, нажмите на панели инструментов Обновить либо нажмите Ctrl+F5 или Ctrl+R (⌘+R на Mac)
  • Google Chrome: Нажмите Ctrl+Shift+R (⌘+Shift+R на Mac)
  • Edge: Удерживая Ctrl, нажмите Обновить либо нажмите Ctrl+F5
  • Opera: Нажмите Ctrl+F5.
/*
Скрипт для навигации по алфавиту для различных языков.
Автор : [[User:Lingvist200]]
*/

processed = [];
function showBefore (word, category, h1) {
	$.get("/w/api.php", {
		action:'query',
		list:'categorymembers',
		format:'json',
		cmtitle:'Категория:' + category,
		cmprop:'ids|title',
		cmnamespace:0,
		cmtype:'page',
		cmlimit:3,
		cmsort:'sortkey',
		cmdir:'desc',
		cmstartsortkeyprefix:word + '<>'
	}, function (data) {
		title = data['query']['categorymembers'][1]['title'];
		if(title == wgTitle) title = data['query']['categorymembers'][2]['title'];
		if(data['query']['categorymembers'][0]) Handle('Before',title,h1);
		else $("#navi" + h1.toString() + " .previous").html(wgTitle);
	});
}
function showAfter (word, category, h1) {
	$.get("/w/api.php", {
		action:'query',
		list:'categorymembers',
		format:'json',
		cmtitle:'Категория:' + category,
		cmprop:'ids|title',
		cmnamespace:0,
		cmtype:'page',
		cmlimit:3,
		cmsort:'sortkey',
		cmdir:'asc',
		cmstartsortkeyprefix:word
	}, function(data){
		if(data['query']['categorymembers'][1]) { 
			if(data['query']['categorymembers'][1]['title'] != wgTitle) Handle('After',data['query']['categorymembers'][1]['title'],h1);
			else Handle('After',data['query']['categorymembers'][2]['title'],h1);
		}
	});
}
function protoSlavic(word, category, h1) {
	$.get("/w/api.php", {
		action:'query',
		list:'categorymembers',
		format:'json',
		cmtitle:'Категория:' + category,
		cmprop:'ids|title',
		cmnamespace:0,
		cmtype:'page',
		cmlimit:90,
		cmstartsortkeyprefix:word
	}, function(data){
		t = [];
		for ( var i in data['query']['categorymembers'] ) {
		  t.push(data['query']['categorymembers'][i]['title']);
		}
		Handle('Before', t[t.indexOf(wgTitle) - 1], h1);
		Handle('After', t[t.indexOf(wgTitle) + 1], h1);
	});
}
function set_pos () {
	pos = $("#tabstable caption .mw-editsection.editlangsection").position();
	$('[id*="navi"]').css(pos);
	$('[id*="navi"]').css({right:'10%',left:''});
}
function Handle(p, w, h1){
	if(p == "Before"){
			if ( w !== undefined ) {
				$("#navi" + h1.toString() + " .previous")[0].innerHTML = '<a href="//ru.wiktionary.org/wiki/'+w+'">'+w+'</a> ← '+wgTitle;
			} else {
				$("#navi" + h1.toString() + " .previous")[0].innerHTML = wgTitle;
			}
		}
	if(p == "After" && w !== undefined ){
		$("#navi" + h1.toString()+ " .next")[0].innerHTML = ' → <a href="//ru.wiktionary.org/wiki/'+w+'">'+w+'</a>';
	}
	if ( tl_using === true ) set_pos();
}
if(wgAction == "view" && wgNamespaceNumber == 0) {
	lang_tabs = $("h1 .mw-headline");
	tl_using = false;
	if( lang_tabs.length < 1 ) { 
		lang_tabs = $(".selectedTab a,.unselectedTab a");
		tl_using = true;
	}
	for(var i in lang_tabs){
		h1 = i;
		lang = lang_tabs[h1].innerHTML;
		try {
			language = (lang != 'Словио' ? (lang.match(/[уеаоиюыё]й$/g) ? lang + ' язык' : lang) : 'Словио (кириллица)');
		} catch (e) { break; }
		if(lang !== undefined && processed.indexOf(lang) == -1){
			navi_table_st='<font id="navi'+h1+'" size="5" style="float: right;"><font class="previous"><img height="40" src="//upload.wikimedia.org/wikipedia/commons/b/b4/Loading_Animation.gif"></font><font class="next"></font></font>';
			navi_table_al='<font id="navi'+h1+'" style="float: right; font-weight: normal; color:black;font-size: 12px; position: absolute; top: 19.70001px; right: 8.4%;" class="editlangsection"><font class="previous"></font><font class="next"></font></font>';
			if (!tl_using) lang_tabs[h1].innerHTML += navi_table_st;
			else {
				try {
					$('#' + lang + 'container h3')[0].innerHTML = navi_table_al + $('#' + lang + 'container h3')[0].innerHTML;
				} catch (e) {}
			}
			if ( language != 'Праславянский язык') {
				showBefore(wgTitle,language, h1);
				showAfter(wgTitle,language, h1);
			} else protoSlavic(wgTitle,language, h1);
			processed.push(lang);
		}
	}
	// Красивая ссылка на Википедию
	mms = '.metadata.mbox-small tbody tr td a.image[href*=Wikipedia]';
	if ( $(mms).length > 0 && $('font#navi0')[0].style.position == 'absolute' ) {
	  $(mms).parents(4)[3].style.display = 'none';
	  set_pos();
	  wpaa = $(mms).parent().parent().find('.mbox-text a');
	  wp_art = wpaa[wpaa.length - 1].href.replace(/(http|https):/,'');
	  img_src = '//upload.wikimedia.org/wikipedia/commons/thumb/6/63/Wikipedia-logo.png/24px-Wikipedia-logo.png';
	  $('font[id*="navi"]').prepend('<a href="'+wp_art+'" class="image">\
	  <img src="'+img_src+'" style="position:absolute;right:101%;bottom:-30%;"></a>');
	}
	setInterval(function () {
		set_pos();
	}, 50);
}