Benutzer:Karl Gruber/virtuelleEinzelnachweise.js
Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.
- Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
- Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
- Internet Explorer/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
- Opera: Strg+F5
//Dokumentation unter [[Benutzer:Karl Gruber/js/virtuelleEinzelnachweise]] <nowiki>
/*global mediaWiki*/
(function($, mw){
"use strict";
function getMissingRefs ($preview) {
var missing = [];
$preview.find('sup.reference a').each(function () {
var id = this.href.replace(/.*#/, '');
if (!document.getElementById(id) && $.inArray(id, missing) === -1) {
missing.push(id);
}
});
return missing;
}
function parseAllRefs (callback) {
$.post(mw.util.wikiScript('api'), {
action: 'parse',
title: mw.config.get('wgPageName'),
text: $('#wpTextbox1').val() + '\n\n<div id="virtuelleEinzelnachweiseHilfstext">{{:{{PAGENAME}}}}</div>',
prop: 'text',
format: 'json'
}, function (json) {
if (json && json.parse && json.parse.text) {
callback($.parseHTML('<div style="display:none;">' + json.parse.text['*'] + '</div>'));
}
});
}
function filterBacklinks () {
/*jshint validthis: true*///expliziter Kontext durch $.fn.filter
return $(document.getElementById(
$(this).attr('href').replace(/.*#/, '')
)).is('#virtuelleEinzelnachweiseHilfstext *');
}
function extractMissingRefs (content, missing) {
var i, html = [], ref, $content = $(content);
$('body').prepend($content);
for (i = 0; i < missing.length; i++) {
ref = document.getElementById(missing[i]);
if (ref) {
$(ref).find('.mw-cite-backlink a').filter(filterBacklinks).remove();
}
html.push(mw.html.element('li', {id: missing[i]}, new mw.html.Raw(
ref ? ref.innerHTML : mw.html.element('span', {'class': 'error'}, mw.msg('schnark-virt-refs-error'))
)));
}
$content.remove();
return html.join('');
}
function addVirtualRefs ($preview) {
var missing = getMissingRefs($preview);
if (missing.length === 0) {
return;
}
parseAllRefs(function (content) {
var $virtRefs = $(mw.html.element('ol', {'class': 'references', style: 'background-color: #DDD;'}, new mw.html.Raw(
extractMissingRefs(content, missing)
)));
mw.hook('wikipage.content').fire($virtRefs);
$preview.append($virtRefs);
});
}
function initL10N (l10n) {
var i, chain = mw.language.getFallbackLanguageChain();
for (i = chain.length - 1; i >= 0; i--) {
if (chain[i] in l10n) {
mw.messages.set(l10n[chain[i]]);
}
}
}
function init ($content) {
if ($content.find('#wikiPreview').length === 1) {
$content = $content.find('#wikiPreview');
}
addVirtualRefs($content);
}
if ($.inArray(mw.config.get('wgAction'), ['edit', 'submit']) > -1) {
mw.loader.using(['mediawiki.util', 'mediawiki.language'], function () {
initL10N({
en: {
'schnark-virt-refs-error': 'Reference error!'
},
de: {
'schnark-virt-refs-error': 'Einzelnachweisfehler!'
}
});
mw.hook('wikipage.content').add(init);
});
}
})(jQuery, mediaWiki);
//</nowiki>