MediaWiki:Gadget-link-missing-label.js
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; });
}
);
}
});
}());