מדיה ויקי:Gadget-uls.js

מתוך ויקיפדיה, האנציקלופדיה החופשית

הערה: לאחר הפרסום, ייתכן שיהיה צורך לנקות את זיכרון המטמון (cache) של הדפדפן כדי להבחין בשינויים.

  • פיירפוקס / ספארי: להחזיק את המקש Shift בעת לחיצה על טעינה מחדש (Reload) או ללחוץ על צירוף המקשים Ctrl-F5 או Ctrl-R (במחשב מק: ⌘-R).
  • גוגל כרום: ללחוץ על צירוף המקשים Ctrl-Shift-R (במחשב מק: ⌘-Shift-R).
  • אינטרנט אקספלורר / אדג': להחזיק את המקש Ctrl בעת לחיצה על רענן (Refresh) או ללחוץ על צירוף המקשים Ctrl-F5.
  • אופרה: ללחוץ על Ctrl-F5.
$(function() {
	function getrec() {
		return (rec = rec || mw.uls.getFrequentLanguageList() || ['en', 'fr', 'es', 'de']);
	}
	
	var rec, api = new mw.Api(),
		lang = mw.config.get('wgContentLanguage'),
		type = mw.config.get('wgDBname').substr(lang.length),
		userlang = mw.config.get('wgUserLanguage');
	$('.ulshere').each(function() {
		var id, cur = $(this);
		$.getJSON('//www.wikidata.org/w/api.php?callback=?', {
			action: 'wbgetentities',
			format: 'json',
			ids: (id = cur.data('id')),
			props: 'sitelinks'
		}).done(function(data) {
			var bindings;
			if (data.success && (bindings = Object.entries(data.entities[id].sitelinks)).length)
				api.loadMessagesIfMissing(['vector-language-button-label', 'massmessage-invalid-lang'], {
						//'vector-language-button-aria-label'], {
					amlang: userlang
				}).then(function() {
					var size, a, keys, itemtable = {},
						langmap = {};
					bindings.map(function(item) {
						var langcode, onelang, autonym;
						if (item[0].endsWith(type) && (onelang = $.uls.data.isRedirect(langcode =
								item[0].replace(type, '').replaceAll('_', '-')) || langcode) !==
							(autonym = $.uls.data.getAutonym(onelang))) {
							itemtable[onelang] = langcode + ':' + item[1].title;
							langmap[onelang] = autonym;
						}
					});
					if (langmap[lang]) {
						delete langmap[lang];
						if ((size = (keys = Object.keys(langmap)).length)) {
							cur//.createtooltip(mw.msg('vector-language-button-aria-label', size), 1000, 'nw')
								.prepend(a = $('<a>').addClass('uls-trigger')
								.text(mw.msg('vector-language-button-label', size)))
								.find('span').remove();
							a.uls({
								languages: langmap,
								onSelect: function(language) {
									var params = {
										action: 'expandtemplates',
										text: '{{fullurl:' + itemtable[language] + '}}',
										prop: 'wikitext',
										format: 'json'
									};
									api.get(params)
										.done(function(data) {
											window.open(data.expandtemplates.wikitext, '_ulswindow' + id);
										});
								},
								onVisible: function() {
									$('.tipsy').remove();
								},
								noResultsTemplate: function(query) {
									return $('<div>', {
										text: mw.msg('massmessage-invalid-lang', query),
										dir: 'auto'
									});
								},
								quickList: getrec().filter(function (x) {
									return keys.includes(x);
								}),
								groupByRegion: true,
								menuWidth: 'narrow'
							});
						}
					}
					else
						cur.find('span').remove();
				});
		});
	});
});