Benutzer:Enomil/MDZURN.user.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
// ==UserScript==
// @name MDZ-URN Generator
// @namespace de.wikisource.enomil
// @description Generiert im MDZ-Reader die dazugehörige URN
// @include http://reader.digitale-sammlungen.de*
// @include http://bavarica.digitale-sammlungen.de*
// ==/UserScript==
// helpfer functions
var $ = function(id) { return document.getElementById(id); };
var $$ = function(css) { return $x('//*[contains(@class,"'+css+'")]'); }
var $x = function(exp, node) {
node = node || document;
var r = document.evaluate(exp, node, null, 0, null);
switch (r.resultType) {
case 1: return r.numberValue;
case 2: return r.stringValue;
case 3: return r.booleanValue;
case 4: {
var a = [];
while(i = r.iterateNext()) a.push(i);
return a;
}
}
}
// concordance table
function concordance(x) {
x = x.toUpperCase();
switch (x) {
case "0":return "1";
case "1":return "2";
case "2":return "3";
case "3":return "4";
case "4":return "5";
case "5":return "6";
case "6":return "7";
case "7":return "8";
case "8":return "9";
case "9":return "41";
case "A":return "18";
case "B":return "14";
case "C":return "19";
case "D":return "15";
case "E":return "16";
case "F":return "21";
case "G":return "22";
case "H":return "23";
case "I":return "24";
case "J":return "25";
case "K":return "42";
case "L":return "26";
case "M":return "27";
case "N":return "13";
case "O":return "28";
case "P":return "29";
case "Q":return "31";
case "R":return "12";
case "S":return "32";
case "T":return "33";
case "U":return "11";
case "V":return "34";
case "W":return "35";
case "X":return "36";
case "Y":return "37";
case "Z":return "38";
case "_":return "43";
case ".":return "47";
case "+":return "49";
case ":":return "17";
case "-":return "39";
case "/":return "45";
}
}
// BSB ID to URN
function IDtoURN(id) {
var numseq = "";
for (var i = 0; i < id.length; i++) {
numseq = numseq + concordance(id.charAt(i));
};
var Q = numseq.charAt(numseq.length-1);
var PS = 2605;
for (var i = 0; i < numseq.length; i++) {
PS = PS + (parseInt(numseq.charAt(i)) * (i+41));
};
var PQ = PS / Q;
if (PQ % 1 == 0) { var PZ = PQ % 10; }
else { var PZ = /(\d)\./.exec(PQ)[1]; }
return "urn:nbn:de:bvb:12-bsb" + id + PZ;
};
var bsbid = /bsb(\d*)/.exec(document.URL)[1];
var urn = IDtoURN(bsbid + "-");
var box = $$("biblStrucPanel")[0];
var link = document.createElement("a");
if (bsbid.charAt(0) == "1") { link.href = "http://www.mdz-nbn-resolving.de/urn/resolver.pl?urn=" + urn; }
else { link.href = "http://nbn-resolving.de/" + urn; }
link.style = "color: rgb(0, 43, 184);"
link.innerHTML = urn;
var div = document.createElement("div")
div.innerHTML = "<br /><b>URN:</b> ";
div.appendChild(link);
box.getElementsByTagName('div')[0].appendChild(div);