MediaWiki:Gadget-link-missing-label.js

Fra Wikipedia, den frie encyklopedi

Merk: Etter publisering vil det kanskje være nødvendig å slette mellomlageret i nettleseren din for å se endringene.

  • Firefox / Safari: Hold Shift mens du klikker på Oppdater, eller trykk enten Ctrl+F5 eller Ctrl+R (⌘+R på Mac)
  • Google Chrome: Trykk Ctrl+Shift+R (⌘+Shift+R på Mac)
  • Internet Explorer / Edge: Hold Ctrl mens du trykker på Oppdater eller trykk Ctrl+F5
  • Opera: Ttrykk Ctrl+F5.
// Code for gadget to generate edit links for missing labels.
// © John Erling Blad, Creative Commons by Attribution 3.0
(function(){
	var edit = '[Q?]';
	var editTitle = 'Legg til etiketter for elementer';
	var missing = 'Mangler etikett';
	var regex = /Q\d+/g;
	var $infobox = $('.infobox, .infoboks');
	$infobox.find('td').each(function () {
		var $td = $(this);
		var outerMatches = $td.text().match(regex);
		if (outerMatches && outerMatches.length > 0) {
			var ids = {};
			outerMatches.forEach(function(str, i){
				if (!ids[str]) ids[str] = 0;
				ids[str]++; // normally all of them should be only counted once
			});
			$td.find('a').each(function () {
				var $a = $(this);
				var innerMatches = $a.text().match(regex);
				if (innerMatches && innerMatches.length > 0) {
					innerMatches.forEach(function(str, i){
						if (!ids[str]) ids[str] = 0; // this should not be necessary
						ids[str]--; // decrement the number of references
					});
				}
			});
			var matches = outerMatches.filter(function(str){
				return ids[str]>0;
			});
			if (matches.length === 0) {
				return;
			}
			$td.parent().addClass('labelless');
			var $edit = $('<a>');
			$edit.attr({
				class: 'edit',
				title: editTitle
			});
			$edit.text(edit);
			$td.prepend($edit);
			var $div = $('<div>');
			$div.attr({
				class: 'missing',
				style: 'display:none;'
			});
			var $title = $('<b>').text(missing);
			$div.append($title);
			var $ul = $('<ul>');
			$div.append($ul);
			matches.forEach(function(str, i){
				var $li = $('<li>');
				var $link = $('<a>');
				$link.attr({
					href: '//wikidata.org/wiki/' + str, // the str is already filtered
					title: str // the str is already filtered
				});
				$link.text(str);
				$li.append($link);
				$ul.append($li);
			});
			$edit.append($div);
			var shown = false;
			$edit.click(
				function(){
					$div.stop( true, true ).show(200).promise().done(function(){ shown = true; });
				}
			);
			$div.mouseleave(
				function(){
					if (!shown) return;
					$div.stop( true, true ).hide(200).promise().done(function(){ shown = false; });
				}
			);
		}
	});
}());