مدیاویکی:InterWikiTransclusion.js

از ویکی‌نبشته

نکته: پس از انتشار ممکن است برای دیدن تغییرات نیاز باشد که حافظهٔ نهانی مرورگر خود را پاک کنید.

  • فایرفاکس / سافاری: کلید Shift را نگه دارید و روی دکمهٔ Reload کلیک کنید، یا کلید‌های Ctrl-F5 یا Ctrl-R را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ⌘-R)
  • گوگل کروم: کلیدهای Ctrl+Shift+R را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ⌘-Shift-R)
  • اینترنت اکسپلورر/ Edge: کلید Ctrl را نگه‌دارید و روی دکمهٔ Refresh کلیک کنید، یا کلید‌های Ctrl-F5 را با هم فشار دهید
  • اپرا: Ctrl-F5 را بفشارید.
var page_ns_prefixes= {
	'en':'Page',
        'eo':'Paĝo',
        'fa':'برگ',
	'fr':'Page',
	'de':'Seite',
	'it':'Pagina',
	'la':'Pagina',
	'no':'Side',
	'es':'Página',
	'pt':'Página',
	'sv':'Sida',
	'pl':'Strona',
	'hy':'Էջ',
	'ru':'Страница',
	'hr':'Stranica',
	'hu':'Oldal',
	'ca':'Pàgina',
	'vi':'Trang',
	'sl':'Stran',
	'zh':'Page',
	'old':'Page',
        'vec':'Pagina',
        'br':'Pajenn'
}

/* cross-domain transclusions through the API */

function api_url(lang) {
	if (lang == "old") {
		return '//wikisource.org/w/api.php'
	} else {
		return '//'+lang+'.wikisource.org/w/api.php';
	}
}

function iw_trans_callback(res){
	var txt = res.parse.text['*'];
	var target = res.requestid;
	var spans = jQuery('span.iwtrans');

	for (var i = 0; i<spans.length; i++) {
		var item = spans[i];

		var m = item.title.split("|");
		lang=m[0];

		if (item.title == target) {
			/* transform all href from relative to absolute, so that they still point to the right place */
			item.innerHTML = txt.replace(/href="\/wiki/g, 'href="//'+lang+'.wikisource.org/wiki');
		}
	}
}

function iw_trans() {
	var spans = jQuery( 'span.iwtrans' ) ;
	for(var i = 0; i<spans.length; i++) {
		var item = spans[i];
		var m = item.title.split("|");
		lang=m[0];
		title=m[1];

		var url = api_url(lang) + '?format=json&requestid='+item.title+'&action=parse&text={{:'+title+'}}<references/>&callback=iw_trans_callback&title='+title;
			mw.loader.load(url);
	}
}
jQuery(document).ready(iw_trans);

function iw_pages_callback(res) {
	var txt = res.parse.text['*'];
	var target = res.requestid;
	var spans = jQuery('span');
 
	/* fix for it.wikisource */
	txt = txt.replace(/class=\"SAL\"/g, "class=\"hiddenStructure\"")

	for(var i = 0; i<spans.length; i++) {
		var item = spans[i];
 
		var m = item.title.split("|");
		lang=m[0];
 
		if( (item.className == "iwpages" || item.className == "iwpage") && item.title == target ) {
			/* transform all href from relative to absolute, so that they still point to the right place */
			item.innerHTML = txt.replace(/href="\/wiki/g, 'href="//'+lang+'.wikisource.org/wiki');
		}
	}
}

function iw_pages() {
        /* if(wgCanonicalNamespace != page_ns_prefixes[wgContentLanguage]) return; */

	var spans = jQuery( 'span.iwpages' ) ;
	for(var i = 0; i<spans.length; i++) {
		var item = spans[i];

		var m = item.title.split("|");
		lang=m[0]; title=m[1]; from=m[2]; to=m[3];
	        url = api_url(lang) + '?format=json&requestid='+item.title+'&action=parse&callback=iw_pages_callback&text=<pages index="'+title+'" from='+from+' to='+to+' /><references/>&title='+title;
			mw.loader.load(url);
	}
	var count = 0;
	var spans = jQuery( 'span.iwpage' ) ;
	for(var i = 0; i<spans.length; i++) {
		var item = spans[i];
		var m = item.title.split("|");
		lang = m[0];
		count = count + 1;
		title = page_ns_prefixes[lang]+":"+m[1];
		if(m.length>2) section=m[2]; else section=false;
		if(section) section_title='lst\|'+title+'\|'+section; else section_title = title;
		url = api_url(lang) + '?format=json&requestid='+item.title+'&action=parse&callback=iw_pages_callback&text={{'+section_title+'}}<references/>&title='+title;
			mw.loader.load(url);
	}
	cs = document.getElementById("corr-info");
	if(cs && count) {
		if(count==1) {
			if (lang=="old") lang=""; else lang=lang+".";
			cs.innerHTML = ' ' + ws_msg('iwtrans') + ' <a href="http://'+lang+'wikisource.org/w/index.php?title='+title+'">'+lang+'wikisource.org</a>.';
		} else {
			cs.innerHTML = ws_msg('iwtrans2');
		}
	}
}

jQuery(document).ready(iw_pages);