Uncategorized

Das Ausleihsystem der Stabi – Herr, wirf usability vom Himmel!

Zur Abwechslung mal ein “Posting” auf Deutsch, und eines, was sich stärker mit Wissenschaft beschäftigt (das ist auf diesem Blog bisher ja viel zu kurz gekommen!) und meinem Lieblingsthema, der computergestützten Verwaltung bibliographischer Daten. Wer das Ausleihsystem der Staatsbibliothek Berlin besucht, fühlt sich nicht nur gestalterisch in die Mitte der 1990er Jahre versetzt – auch die Benutzerfreundlichkeit ist eher bescheiden.

Der Gipfel der Umständlichkeit ist aber, dass alle Signaturen, die im Ausleihsystem angezeigt werden, nicht mit dem Katalog verlinkt sind. Das heißt, man muss per Copy & Paste die Signatur in den Bibliothekskatalog übertragen und dort nach der Signatur suchen. Und das, wo ein einfacher Link im HTML-Text genügen würde.

Zum Glück gibt es Greasemonkey, zumindest wenn man Firefox verwendet. Das folgende Userscript erledigt die Arbeit für Euch, indem es Signaturen auf den Seiten des Ausleihsystems automatisch in Links verwandelt:

// ==UserScript==
// @name           Stabi-Ausleihsystem
// @namespace      panyasan
// @description    Fügt den Signaturen http://ausleihe.staatsbibliothek-berlin.de/ einen Link zu den Einträgen im Katalog hinzu
// @include        http://ausleihe.staatsbibliothek-berlin.de/opac/
// ==/UserScript==

// Slightly modified code from http://userscripts.org/scripts/review/1295 

(function () {
    const urlRegex = /\b(([0-9]A|[0-9]B|Ser\.|[0-9]Per)([0-9\-]+))/ig;
    var allowedParents = [ "td" ]; // tags we will scan
    var xpath = "//text()[(parent::" + allowedParents.join(" or parent::") + ")]";
    var prefix = "http://stabikat.sbb.spk-berlin.de/DB=1/CMD?ACT=SRCHA&IKT=54&SRT=YOP&TRM=";
    var candidates = document.evaluate(xpath, document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
    for (var cand = null, i = 0; (cand = candidates.snapshotItem(i)); i++) {
        if (urlRegex.test(cand.nodeValue)) {
            var span = document.createElement("span");
            var source = cand.nodeValue;
            cand.parentNode.replaceChild(span, cand);
            urlRegex.lastIndex = 0;
            for (var match = null, lastLastIndex = 0; (match = urlRegex.exec(source)); ) {
                span.appendChild(document.createTextNode(source.substring(lastLastIndex, match.index)));
                var a = document.createElement("a");
                a.setAttribute("href", prefix+ match[0]);
                a.appendChild(document.createTextNode(match[0]));
                span.appendChild(a);
                lastLastIndex = urlRegex.lastIndex;
            }
            span.appendChild(document.createTextNode(source.substring(lastLastIndex)));
            span.normalize();
        }
    }
})();
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s