https://www.mediawiki.org/wiki/Special:Code/MediaWiki/115076
Revision: 115076
Author: wikinaut
Date: 2012-04-28 23:27:08 +0000 (Sat, 28 Apr 2012)
Log Message:
-----------
initial bookmarklet version of the viaf script
Added Paths:
-----------
trunk/tools/viaf/viaf.js
Added: trunk/tools/viaf/viaf.js
===================================================================
--- trunk/tools/viaf/viaf.js (rev 0)
+++ trunk/tools/viaf/viaf.js 2012-04-28 23:27:08 UTC (rev 115076)
@@ -0,0 +1,503 @@
+/* shamelessly copied from
http://benalman.com/projects/run-jquery-code-bookmarklet/
+
+<a href="
+javascript:(function(){var
head=document.getElementsByTagName('head')[0],script=document.createElement('script');script.type='text/javascript';script.src='http://www.opteryx.org/viaf/viaf.js?'+Math.floor(Math.random()*99999);head.appendChild(script);})();
void 0;
+">VIAF</a>
+
+*/
+
+// ==UserScript==
+// @name viaf
+// @namespace viaf
+// @require
https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js
+// @require
http://svn.wikimedia.org/svnroot/mediawiki/trunk/tools/viaf/jquery.ba-replacetext.js
+// @description Locate VIAF, PND and GND numbers in texts and urls on web
pages and fetch available corresponding names from the Toolserver. (c)T.Gries
Version 0.402 201109251240
+// @include *
+// ==/UserScript==
+
+var VERSION = "0.50"; // bookmarklet version
+
+/***
+ * Copyright (c) 2011 T. Gries
+ *
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * 20110806 Initial version; detecting VIAF in texts
+ * 20110811 color marking of VIAF number; detecting VIAF in Urls
+ * creation of three additional links with VIAF numbers as
arguments
+ * 20110813 summary: an alert box shows detected distinct and sorted VIAF
numbers
+ * 20110814 more language specific urls; use jquery 1.6.2 from google
+ * alert box shows up to maxVIAFNumbers
+ * 20110816 wrapped into a closure
+ * 20110817 disabled the built-in update checker; it has set 1-day cookie
+ * "update" for every page by mistake.
+ * 20110823 changed viaf.org link composition
+ * 20110824 added google link
+ * imported as a new project to svn.wikimedia.org;
+ * updated the require paths to pull required javascripts from
there
+ * detection of VIAF, VIAF2 .. VIAF9
+ * 20110901 moved <span> inside <a> tag to fix the non-colouring problem
+ * in span class=plainlinks; added blank spans left and right
+ * of addedlinks for LTR/RTL pages
+ * 20110903 less blanks between added links
+ * 20110907 calling a database to fetch names for detected VIAF numbers
+ * http://www.oclc.org/developer/ may be of help (API calls)
+ * "The OCLC Developer Network is a community of developers
+ * collaborating to propose, discuss and test OCLC Web Services.
+ * This open source, code-sharing infrastructure improves the
+ * value of OCLC data for all users by encouraging new OCLC
+ * Web Service uses."
+ * 20110908 calling toolserver API to fetch all avaliable names for a VIAF
+ * the first name from the server is shown on magenta background
+ * debug parameter 0 (no debug info) .. 3 (max)
+ * 20110909 POST instead of GET avoids server
+ * "Error 414: Request-URI too large" for long queries
+ * when many VIAF are found on a page
+ * debug parameter bitwise
+ * 20110920 removed parent() and add the new links close after the place
+ * where the VIAF was found; jQuery 1.6.4
+ * 20110924 detecting and linking PND and GND numbers as well
+ * Toolserver API adapted: names now returned for VIAF, PND, GND
+ * numbers; detected GND numbers are treated as PND
+ * 20110925 summary shows VIAF, and PDN/GND numbers in a single alert box
+ * 20120426 bookmarklet version 0.403
+ * also detecting relative links ../123456 This may be too greedy,
+ * 20120428 but let's try that "Person als Relation"
+ * names from toolserver become links to it;
+ * array looping problem fixed
+ ***/
+
+// wrapper -- see http://www.mediawiki.org/wiki/JQuery
+// to avoid possible conflicts with other scripts on the current page
+
+var debug = 0;
+
+( function ( $ ) {
+
+/***
+ * 0 off
+ * bit0: 1 show what has been sent to server
+ * bit1: 2 show what has been received as server response
+ * bit2: 4 dump the response in a readible form
+ * bit3: 8 list the names space-separated
+ *
+ ***/
+
+// whether a summary box is shown at the end
+// which shows all distinct VIAF, PND/GND numbers of the current web page
+// TODO user interface to enable/disable this box per cookie or other method
+var showSummaryBox = false;
+
+var showAllNames = false;
+
+var markUrlDetectedItems = true; // if detected items in Urls will be marked
+var markUrlDetectedItemsCSS = { "borderBottom" : "1px orangered dotted" };
+var markNamesFromServer = { "background":"magenta", "color":"white",
"font-weight":"bold" };
+
+// cumulative maximum of VIAF, PND, or GND numbers which are shown in the
summary box
+var maxNumbers = 30;
+
+// utility functions
+
+// our own sort order
+function numSort( a, b ) {
+ return (a-b);
+};
+
+/**
+ *
+ * function : dump( array, depth )
+ *
+ * source:
+ * http://www.openjs.com/scripts/others/dump_function_php_print_r.php
+ *
+ * arguments: the data - array,hash(associative array),object
+ * the depth - OPTIONAL
+ *
+ * returns: the textual representation of the array
+ *
+ * This function was inspired by the PHP print_r function.
+ *
+ * This will accept some data as the argument and returns a text
+ * that will be a more readable version of the array/hash/object that is given.
+ *
+ **/
+function dump( arr, depth ) {
+ var cr = "\n";
+ // var cr = "<br/>";
+ var dumped_text = "";
+ if( !depth ) depth = 0;
+
+ // The padding pattern given at the beginning of the line
+ var depth_padding = "";
+
+ for ( var j=0; j < depth+1; j++ ) {
+ depth_padding += " ";
+ }
+
+ if ( typeof( arr ) == 'object' ) { //Array/Hashes/Objects
+ for ( var item in arr ) {
+ var value = arr[item];
+
+ if ( typeof( value ) == 'object' ) { //If it is an
array,
+ dumped_text += depth_padding + "'" + item + "'
..."+cr;
+ dumped_text += dump( value, depth+1 );
+ } else {
+ dumped_text += depth_padding + "'" + item + "'
=> \"" + value + "\""+cr;
+ }
+ }
+ } else { //Strings/Chars/Numbers etc.
+ dumped_text = "===>"+arr+"<===(" + typeof( arr ) + ")";
+ }
+ if ( dumped_text == '' ) {
+ dumped_text = "no results";
+ }
+ return dumped_text;
+}
+
+var viaf = Array();
+var pnd = Array();
+var out_js = Array();
+var output = '';
+var nbsp = "<span> </span>";
+
+// an animated "AJAX" loading wheel is shown and cleared in getPage2 when that
page is processed
+// for online loader spinner image generation
+//
http://www.google.com/search?hl=en&q=generate+animated+loading&btnG=Google+Search&aq=f&oq=
+// http://www.ajaxload.info/
+// http://preloaders.net/
+// for base64 online encoder
http://www.motobit.com/util/base64-decoder-encoder.asp
+// for inline images http://www.elf.org/essay/inline-image.html
+
+function numberToNames( items ) {
+
+ if ( items.length == 0 ) return;
+
+ // viaf-spinner-rotating-arrows-cyan-80px
+ var $spinner = $( '<img
src="data:image/x-icon;base64,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">'
);
+
+ $( $spinner )
+ .css( {
+ "position":"fixed",
+ "top":"50%",
+ "left":"50%",
+ "display":"none"
+ } )
+ .attr( "id", "spinner" );
+
+ $( "body" ).append( $spinner );
+ $( "#spinner" ).fadeIn(1000);
+
+ var items_str = JSON.stringify( items );
+ if ( debug & 1 ) output = "sent to server:\n"+items_str;
+
+ /***
+ * get names via Greasemonkey_xmlhttpRequest across domain borders
+ *
+ * example usages using "GET" requests
+ *
+ * example 1 request shows several viaf numbers for the same
persons
+ *
http://toolserver.org/~apper/pd/x.php?format=json&data=name&for=[{"viaf":["15571981"]},{"viaf":["79410188"]},{"viaf":["2878675"]},{"viaf":["122255788"]}]
+ *
+ * example 2 request and response shows mixed viaf and pnd number
for one person
+ *
http://toolserver.org/~apper/pd/x.php?format=json&data=name&for=[{"viaf":["30359946"]},{"pnd":["120155567"]}]
+ *
+ * example 2 JSON response:
+ * [{"viaf":["30359946"],"names":[{"lang":"de","name":"Sabine
Ludwig"}]},{"pnd":["120155567"],"names":[{"lang":"de","name":"Sabine Ludwig"}]}]
+ *
+ * example 2 response in array notation as produced by the
enclosed dump() function:
+ * '0' ...
+ * 'viaf' ...
+ * '0' => "30359946"
+ * 'names' ...
+ * '0' ...
+ * 'lang' => "de"
+ * 'name' => "Sabine Ludwig"
+ * '1' ...
+ * 'pnd' ...
+ * '0' => "120155567"
+ * 'names' ...
+ * '0' ...
+ * 'lang' => "de"
+ * 'name' => "Sabine Ludwig"
+ *
+ ***/
+
+ $.ajax({
+ type: "GET",
+ url: "http://toolserver.org/~apper/pd/x.php",
+ data: "callback=?&format=json&data=name&for="+items_str,
+ dataType: "jsonp",
+ success: function(data, textStatus, xhr) {
+ $( "#spinner" ).hide();
+ cb_updateFromServer(data);
+ }
+ });
+
+}
+
+// callback function
+function cb_updateFromServer( data_js ){
+ if ( debug & 2 ) output += "\n\nreceived from server:\n"+ data;
+ // var data_js = JSON.parse( data );
+ if ( debug & 4 ) output += dump( data_js );
+
+ var names,numType,number;
+
+ // for all returned viaf and pnd numbers do
+ for ( record_nr in data_js ) {
+
+ // get the first viaf or pnd number per record,
+ // as this was the one which was found on the web page.
+ //
+ // All occurences in the web page are already
+ // marked as class "viaf-<viafnr>" or "pnd-<pndnr>"
+ // when coming back here.
+ //
+ // The server may return more numbers for a person than were
+ // sent, because there are authors which have more than
+ // one viaf or pnd number in the database (i.e. doublures).
+
+ switch ( true ) {
+ case ( typeof data_js[record_nr]['viaf'] != "undefined" ):
+ numType = "viaf";
+ number = data_js[record_nr]['viaf'][0];
+ break;
+ case ( typeof data_js[record_nr]['pnd'] != "undefined" ):
+ numType = "pnd";
+ number = data_js[record_nr]['pnd'][0];
+ break;
+ default:
+ numType = "";
+ number = -1;
+ }
+
+ names = "";
+ if ( data_js[record_nr]['names'].length > 0 ) {
+
+ // for all available names for that number do
+ for ( name_j in data_js[record_nr]['names'] ) {
+ names +=
data_js[record_nr]['names'][name_j]['name']+" ";
+ }
+
+ // replace the class "viaf-<viafnr>" or "pnd-<pndnr>"
+ // with all names string or with the first name only
+ var nameString = ( showAllNames ) ? names :
data_js[record_nr]['names'][0]['name'];
+
+ $("."+numType+"-" + number )
+ .text( " " + nameString + " " )
+ .css( markNamesFromServer )
+ .after( nbsp )
+ .before( nbsp )
+ .wrap( '<a
href="http://toolserver.org/%7Eapper/pd/person/'+numType+'/'+number+'"></a>' );
+ }
+
+ }
+
+ if ( ( debug & 8 ) && ( names.length > 0 ) ) {
+ output += "\n\n" + names;
+ }
+ if ( debug & (8+2+1) ) {
+ alert( output );
+ }
+
+}
+
+
+function doAnyOtherBusiness( numberType, number ) {
+
+ // add the element only if it does not exist in list
+ if ( numberType == "viaf" ) {
+ if ( viaf.indexOf( number ) == -1 ) {
+ viaf.push( number );
+ out_js.push( { "viaf" : [number] } );
+ }
+ } else {
+ if ( pnd.indexOf( number ) == -1 ) {
+ pnd.push( number );
+ out_js.push( { "pnd" : [number] } );
+ }
+ }
+}
+
+// PASS 1
+// try to retrieve as much viaf numbers from text as possible
+// but don't look in an active textareas like mediawiki input textarea
+
+//
http://stackoverflow.com/questions/3629183/why-doesnt-indexof-work-on-an-array-ie8
+if (!Array.prototype.indexOf) {
+ Array.prototype.indexOf = function(elt /*, from*/) {
+ var len = this.length >>> 0;
+ var from = Number(arguments[1]) || 0;
+ from = (from < 0) ? Math.ceil(from) : Math.floor(from);
+ if (from < 0) {
+ from += len;
+ }
+
+ for (; from < len; from++) {
+ if (from in this && this[from] === elt) {
+ return from;
+ }
+ }
+ return -1;
+ };
+}
+
+$("span[title]").each(function(){
+ var t = $(this).attr("title");
+ $(this).removeAttr("title").text(t);
+});
+
+$("body,*:not(textarea)")
+ .replaceText(
/(viaf[1-9]?)\s*(:|\/|%2B|%3A|%2F|\s|ID:|=|%3D)+\s*(\d+)/gi, "<span class='viaf
viaf-in-text' viaf='$3'>$1$2$3</span>" )
+ .replaceText(
/([pg]nd[1-9x-]?)\s*(:|\/|%2B|%3A|%2F|\s|ID:|=|%3D)+\s*([0-9x-]+x?)/gi,
function( s0, s1, s2, s3 ){
+ s3 = s3.toUpperCase();
+ return "<span class='pnd pnd-in-text' pnd='" + s3 + "'>" + s1 +
s2 + s3 + "</span>";
+ });
+
+
+// PASS 2
+// try to retrieve viaf or pnd or gnd numbers from urls
+
+$("a").each(function(){
+ var $this = $(this);
+ if ( $this.find(".viaf").length != 0 ) return; // in PASS 2, skip all
entries which have this attribute from PASS 1
+ if ( $this.find(".pnd").length != 0 ) return; // in PASS 2, skip all
entries which have this attribute from PASS 1
+ var url = $this.attr("href");
+ /* VIAF */
+ var magicUrlRegExp = new RegExp(
/(\.\.\/\d+|http:\/\/viaf\.org\/(viaf\/)?(\d+)|http:\/\/.+\.librarything.de\/commonknowledge\/search.php?f=13&exact=1&q=VIAF%3A\d+)/gi
);
+ if ( typeof url != "undefined" && url.match( magicUrlRegExp ) ) {
+ if ( markUrlDetectedItems ) $this.css( markUrlDetectedItemsCSS
);
+ // var viaf = RegExp.$1.replace( /[^\d-]*/g, '' );
+ var viaf = RegExp.$1.match( /\d+/i );
+ $this.after( $("<span class='viaf viaf-in-url'
viaf='"+viaf+"'> "+viaf+"</span>") );
+ };
+
+ /* PND, GND */
+ var magicUrlRegExp = new RegExp(
/(http:\/\/d-nb.info\/([gp]nd\/)?[\dx-]+)/gi );
+ if ( typeof url != "undefined" && url.match( magicUrlRegExp ) ) {
+ if ( markUrlDetectedItems ) $this.css( markUrlDetectedItemsCSS
);
+ // var pnd = RegExp.$1.replace( /[^\d-]*/g, '' );
+ var pnd = RegExp.$1.match( /\d+[\dx-]+/i );
+ $this.after( $("<span class='pnd pnd-in-url'
pnd='"+pnd+"'> "+pnd+"</span>") );
+ };
+
+});
+
+// PASS 3
+// add additional predefined target links
+// after the place where VIAF numbers were detected
+
+$(".viaf").each(function(){
+ var $this = $(this);
+
+ var viaf = $this.attr( "viaf" );
+ var newLink = new Array();
+ newLink.unshift( $( "<span> </span><a
href='http://viaf.org/viaf/"+viaf+"/'><span class='addedlink viaf'
viaf='"+viaf+"'>VIAF</span></a>" ) );
+ newLink.unshift( $( "<span> </span><a
href='http://www.librarything.de/commonknowledge/search.php?f=13&exact=1&q=VIAF%3A"+viaf+"'><span
class='addedlink viaf' viaf='"+viaf+"'>LT de</span></a>" ) );
+ newLink.unshift( $( "<span> </span><a
href='http://www.librarything.com/commonknowledge/search.php?f=13&exact=1&q=VIAF%3A"+viaf+"'><span
class='addedlink viaf' viaf='"+viaf+"'>en</span></a>" ) );
+ newLink.unshift( $( "<span> </span><a
href='http://ru.librarything.com/commonknowledge/search.php?f=13&exact=1&q=VIAF%3A"+viaf+"'><span
class='addedlink viaf' viaf='"+viaf+"'>ru</span></a>" ) );
+ newLink.unshift( $( "<span> </span><a
href='http://yi.librarything.com/commonknowledge/search.php?f=13&exact=1&q=VIAF%3A"+viaf+"'><span
class='addedlink viaf' viaf='"+viaf+"'>yi</span></a>" ) );
+ newLink.unshift( $( "<span> </span><a
href='http://toolserver.org/%7Eapper/pd/person/viaf/"+viaf+"'><span
class='addedlink viaf' viaf='"+viaf+"'>TS</span></a>" ) );
+ newLink.unshift( $( "<span> </span><a
href='http://www.google.com/search?num=100&q=viaf+"+viaf+"'><span
class='addedlink viaf' viaf='"+viaf+"'>G</span></a>" ) );
+ // newLink.unshift( $( "<span> </span><label
class='show-summary'><input type='checkbox' class='show-summary-checkbox'
checked='checked'><span id='show-summary-text'></span></label>" ) );
+
+ // add a placeholder and a class for this specific viaf for the name
texts
+ // which come per xhr callback handler cb_updateFromServer
+ newLink.unshift( $( "<span class='viaf-"+viaf+"'></span>" ) );
+ for ( var i = 0; i < newLink.length; i += 1 ) {
+ $this.after( newLink[i] );
+ }
+
+ doAnyOtherBusiness( "viaf", viaf );
+});
+
+$(".pnd").each(function(){
+ var $this = $(this);
+
+ var pnd = $this.attr( "pnd" );
+ var newLink = new Array();
+
+ newLink.unshift( $( "<span> </span><a
href='http://d-nb.info/gnd/"+pnd+"/'><span class='addedlink pnd'
pnd='"+pnd+"'>DNB</span></a>" ) );
+ newLink.unshift( $( "<span> </span><a
href='http://opac.bib-bvb.de/InfoGuideClient.fasttestsis/start.do?Query=100%3D%22"+pnd+"%22'><span
class='addedlink pnd' pnd='"+pnd+"'>BVB</span></a>" ) );
+ newLink.unshift( $( "<span> </span><a
href='http://mi.librarything.com/commonknowledge/search.php?f=13&exact=1&q=VIAF%3APND%3A"+pnd+"'><span
class='addedlink pnd' pnd='"+pnd+"'>LT mi</span></a>" ) );
+ newLink.unshift( $( "<span> </span><a
href='http://toolserver.org/~apper/pd/person/pnd/"+pnd+"'><span
class='addedlink pnd' pnd='"+pnd+"'>TS</span></a>" ) );
+ // newLink.unshift( $( "<span> </span><label
class='show-summary'><input type='checkbox' class='show-summary-checkbox'
checked='checked'><span id='show-summary-text'></span></label>" ) );
+
+ // add a placeholder and a class for this specific pnd for the name
texts
+ // which come per xhr callback handler cb_updateFromServer
+ newLink.unshift( $( "<span class='pnd-"+pnd+"'></span>" ) );
+ for ( var i = 0; i < newLink.length; i += 1 ) {
+ $this.after( newLink[i] );
+ }
+
+ doAnyOtherBusiness( "pnd", pnd );
+});
+
+// style all detected numbers
+$( ".viaf" ).css( { "background":"cyan", "color":"black" } );
+$( ".pnd" ).css( { "background":"cyan", "color":"black" } );
+
+// style all detected numbers in urls
+$( ".viaf-in-url" ).css( "border-bottom", "1px dotted black" );
+$( ".pnd-in-url" ).css( "border-bottom", "1px dotted black" );
+
+// style all checkboxes
+$( ".show-summary-checkbox" )
+ .click(function(e){
+ $this=$(this);
+ if ( $this.attr("checked")=='checked' ) {
+ $( ".show-summary-checkbox" ).attr("checked", true);
+ } else {
+ $( ".show-summary-checkbox" ).removeAttr("checked");
+ }
+ });
+
+// style all added links
+$( ".addedlink" ).css( { "background":"yellow" , "color":"black" } );
+
+numberToNames( out_js );
+
+// show a summary of the collected numbers
+if ( viaf.length > 0 ) {
+
+ viaf.sort( numSort );
+ var x = "";
+ for ( var i=0; i < Math.min( viaf.length, maxNumbers ) ; i++ ) {
+ x += viaf[i]+"\n";
+ }
+
+ if ( viaf.length > maxNumbers ) x += "...\n("+maxNumbers+" of
"+viaf.length+" distinct numbers are shown.)";
+ var pluralS = ( viaf.length > 1 ) ? "s" : "";
+ var viafSummary = "The present page contains "+viaf.length+" distinct
VIAF number"+pluralS+" in text or links.\nModify the script if you want to
remove the alert box permanently.\n\n"+x ;
+
+ // comment the following line if you don't want to see the summary
(alert) box
+ // if ( showSummaryBox ) {
+ // alert( viafSummary );
+ // }
+
+}
+// show a summary of the collected numbers
+if ( pnd.length > 0 ) {
+
+ pnd.sort( numSort );
+ var x = "";
+ for ( var i=0; i < Math.min( pnd.length, maxNumbers ) ; i++ ) {
+ x += pnd[i]+"\n";
+ }
+
+ if ( pnd.length > maxNumbers ) x += "...\n("+maxNumbers+" of
"+pnd.length+" distinct numbers are shown.)";
+ var pluralS = ( pnd.length > 1 ) ? "s" : "";
+ var pndSummary = "The present page contains "+pnd.length+" distinct PND
number"+pluralS+" in text or links.\n\n"+x;
+
+ // comment the following line if you don't want to see the summary
(alert) box
+ if ( showSummaryBox ) {
+ alert( viafSummary + "\n" + pndSummary );
+ }
+
+}
+
+
+}) ( jQuery );
Property changes on: trunk/tools/viaf/viaf.js
___________________________________________________________________
Added: svn:eol-style
+ native
_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs