MediaWiki-diskusjon:Gadget-link-missing-label.js

Siste kommentar: for 9 år siden av Jeblad i emnet Bugs

Alternativ kode

rediger

Det er en bug i denne tilleggsfunksjonen som hindrer den i å lage lenke til mer enn en oppføring. I tillegg er det ytret ønske om at den ikke skal lage lenker i de tilfellene hvor Q-idene allerede er lenket. Utlegget er også noe «prettified», men nei, den har ikke bilder av kittens.

En side som kan brukes for testing er Shinzō Abe, kun raden med ulenka Q-ider vil få en hovermeny. Det er et problem med denne måten å lage en hovermeny, og det er at raden kan inneholde lenker som vi vil dekke over. Slik vi har organisert utlegget vil dette ikke skje for normale rader.

Ekstern styling er ikke nødvendig, så MediaWiki:Gadget-link-missing-label.css kan slettes. Merk at da må MediaWiki:Gadgets-definition oppdateres, for denne viser til css-siden.

Funksjonen burde vært omorganisert, den er blitt litt dyp slik den står. Seks indenteringer (dybden er egentlig større) er way past insanity. — Jeblad 26. jul. 2015 kl. 03:33 (CEST)Svar

(function(){
	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.attr({style: 'position:relative;overflow:visible;'});
			$td.parent().attr({style: 'overflow:visible;'});
			var $div = $('<div class="missing">')
			$div.attr({
				style: 'display:none;position:absolute;right:10px;top:10px;background-color:#f6f6f6;border:1px solid #a7d7f9;padding:1em;z-index:300;white-space: nowrap;',
				title: 'Følg lenkene til Wikidata og angi korrekt etikett for bokmål og nynorsk!'
			});
			var $title = $('<b>').text('Mangler etikett');
			$div.append($title)
			$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);
			});
			$td.append($div);
			$td.hover(
				function(){ $div.stop( true, true ).show(300); },
				function(){ $div.stop( true, true ).hide(300); }
			);
		}
	});
}());

Alternativ kode II

rediger

Denne er bedre. Det er tilhørende styling på MediaWiki-diskusjon:Gadget-link-missing-label.css. — Jeblad 1. aug. 2015 kl. 21:55 (CEST)Svar

// Code for gadget to generate edit links for missing labels.
// © John Erling Blad, Creative Commons by Attribution 3.0
(function(){
	"use strict";
	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; });
				}
			);
		}
	});
}());

Bugs

rediger

Feil i selector

rediger

Linje 8 mangler et punktum. — Jeblad 2. aug. 2015 kl. 00:18 (CEST)Svar

nåværende, feil
var $infobox = $('infobox, .infoboks');
endres til, korrekt
var $infobox = $('.infobox, .infoboks');
Dette er rettet av Bruker:Cocu. — Jeblad 2. aug. 2015 kl. 01:21 (CEST)Svar

Manglende strict

rediger

Koden bør inkludere deklarasjon av strict. — Jeblad 2. aug. 2015 kl. 00:22 (CEST)Svar

legges til, korrekt
"use strict";
@Jeblad: Hvor legges denne best? Cocu (d) 2. aug. 2015 kl. 00:25 (CEST)Svar
Hadde bare tenkt å legge noen bugs i en liste så de kunne fikses siden. Vanligvis legges denne rett under funksjonsdeklarasjonen. Formålet er å få feilmeldinger på tvilsom kode. Jeg har foreløpig ikke sjekket tilleggsfunksjonen, så legges deklarasjonen til så kan det komme feilmeldinger. — Jeblad 2. aug. 2015 kl. 00:30 (CEST)Svar
(function(mw, $) {
    "use strict";
Da avventer jeg med å legge til noe. Cocu (d) 2. aug. 2015 kl. 00:34 (CEST)Svar
Kodeforslag er oppdatert, og oppdatert kode er lagt inn av Cocu i denne diffen. — Jeblad 2. aug. 2015 kl. 01:24 (CEST)Svar

mouseout/mouseleave

rediger

Det ble brukt mouseout istedenfor mouseleave. Dette er rettet i denne diffen. — Jeblad 2. aug. 2015 kl. 01:25 (CEST)Svar

Tilbake til siden «Gadget-link-missing-label.js».