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);