importScript('User:Victuallers/QRWPcode.js'); //QRWPcode on toolbar
importScript('User:Shubinator/DYKcheck.js');
// ==UserScript==
// @name Wikipedia citation from Google Books
// @description Generates {{citation}} wiki markup from Google Books links
// @namespace http://code.google.com/p/random-code/
// @require http://ecmanaut.googlecode.com/svn/trunk/lib/gm/wget.js
// @include http://books.google.tld/*
// @include http://books.google.com/*
// ==/UserScript==
//
// Copyright (c) 2009-2010, Styles
// Released under Creative Commons Attribution ShareAlike 2.5
/*
Description
From a Google Books link, generates wiki markup in the
{{citation|...}} format, suitable for inclusion on Wikipedia:
http://en.wikipedia.orghttps://wiki386.com/en/Template:Citation
For example, when at the URL:
http://books.google.com/books?id=_tnwmvHmVwMC&pg=PA5&dq=%22The+trouble+is%22
you can click "Show citation" to get
{{citation | title=Asymptotic Methods in Analysis | author1=N. G. de Bruijn | edition=3, illustrated | year=1981 | publisher=Courier Dover Publications | isbn=9780486642215 | page=5 | url=http://books.google.com/books?id=_tnwmvHmVwMC&pg=PA5&dq=%22The+trouble+is%22}}
which is in the right format for Wikipedia, more or less.
Changelog:
Earlier history trimmed as this is a variation.
2009-09-28 A number of cosmetic and bug fixes.
- Now handles multiple line titles.
- Alert box changed to editable text area with optional format buttons.
- Trim button added to give a cut down version of the book page.
- Citation format breaks name into first and last names (not 100% accurate but good for 95%+ of situations).
- Auto-naming of ref tag based on author name and year.
2009-09-29 Fixed bug with hyphenated surnames and wrong matches for nobiliary particle
2009-09-30 Added sort to bring name, year, title at the lead of citation and improve Harvard cite,
skip firstname/lastname split for foreign characters.
2009-10-06 Bugfix on Publisher using "&", surnames using "'" and Harvard citation building
-17 Add inbuilt help button
-21 Add droplist of searches
-23 Make ref button fully toggling, expand button now toggles, url button toggles,
editors button toggles, fix box width, improve search droplist
2010-01-13 Change default to editors not showing.
2010-05-09 Allow c+cedilla e+acute e+grave in author name. Change contact details. Default to no url.
*/
var version='9 May 2010';
var utitle='', uisbn='', uauthor='', uyear='', ueditors=''; // globals
var helpText='<p><b>Instructions</b></p>\
<p style=margin-top:0.75em;>The citation above is automatically populated \
based on the Google Books entry you are currently viewing (on the overview page). You can edit the text on this page \
inside the text box. For more help on the citation parameters see \
<a style="font-size:80%" href=http://en.wikipedia.orghttps://wiki386.com/en/Template:Citation target=_blank>\
]</a>. Note that Google Books listings sometimes unnecessarily duplicate \
the authors as editors, click the "No editors" button to remove them. Some other \
handy buttons available are:<\p>\
<div style=margin-left:2em;margin-top:0;>\
<input type=button value="Highlight text"> highlight all text ready for cut & paste\
<br><input type=button value="<==>"> expand the text for more easily readable layout\
<br><input type=button value="=><="> collapse the text\
<br><input type=button value=«> <input type=button value=»> decrease/increase the size of the edit text box\
<br><input type=button style=color:darkblue; value="<ref>"> wrap the citation with ref tags to \
turn it into a footnote (click again to remove the automatic name and yet again to remove tags)\
<br><input type=button style=color:red; value=Reset> undo all changes\
<br><input type=button style=color:darkblue; value=quote> add a quote (copy part of the text first, \
then paste it into the pop-up box)\
</div>\
<p style=margin-top:0.75em;><i>\
Note that some non-ascii characters in author names may be blanked out.\
</i></p>\
<p style=margin-top:0.75em;><i>\
Feedback and bug reporting can be left on the script discussion page \
<a style="font-size:80%" href=http://userscripts.org/scripts/discuss/58747 target=_blank>\
discuss</a>. \
Before you report a bug, check you have installed the latest version available on \
<a href=http://userscripts.org/scripts/show/58747 target=_blank>userscripts.org</a>.\
</i></p>\
<p style=margin-top:1.5em;color:grey;font-size:small;>Release date of this script: '+version+'</p>';
function randomString(n) {
var chars = "abcdefghiklmnopqrstuvwxyz";
var string_length = n;
var randomstring = '';
for (var i=0; i<string_length; i++) {
var rnum = Math.floor(Math.random() * chars.length);
randomstring += chars.substring(rnum,rnum+1);
}
return randomstring;
}
if(!this.gbcitation && window === window.top) {
var gbcitation = function () {
function do_doc(url, func) { wget(url, func, /*runGM=*/false, /*div=*/false); }
function assert(cond, str) { if (!cond) { throw new Error('Assertion failed: ' + str); } }
String.prototype.startsWith = function(str) { return (this.indexOf(str) === 0); };
function infoFromBook(doc) {
var s = '';
var nauthors=1;
var neditors=1;
var metadata_rows = doc.getElementById('metadata_content_table').childNodes.childNodes;
for(var ti=0;ti<metadata_rows.length;++ti) {
var mrow = metadata_rows.childNodes;
assert(mrow.length === 2);
assert(mrow.className === 'metadata_label');
assert(mrow.className === 'metadata_value');
var label = mrow.innerHTML;
if (label.startsWith('Author') ||
label.startsWith('Title') ||
label.startsWith('Compile') ||
label.startsWith('Edit') ||
label.startsWith('Publish') ||
label.startsWith('ISBN')) {} else {
GM_log('Ignoring ' + label);
continue;
}
GM_log('label is ' + label);
var values = mrow.childNodes;
var value = '';
for(var vi=0; vi<values.length; ++vi) {
if(vi%2 === 1 && !label.startsWith('Title')) {
assert(values.nodeValue === ', ', "even ones are commas");
continue;
}
value += (value==='' ? '' : ',') + values.innerHTML;
}
value = value.replace(/\/g,"]");
GM_log('value is ' + value);
if(label === 'Title') {
utitle=value.split(",,").replace(/(&|.)nbsp;/gi," ");
s += ' | title=' + utitle;
utitle=utitle.replace(//g," ").replace(/\s\s+/g," ");
continue;
}
if(label === 'Author' || label === 'Authors' || label === 'Translated by') {
var authors=value.split(',');
// u00C7 = c+cedilla
// u00E9 = e+acute
// u00E8 = e+grave
if(value.match(/|Soci.t.|Organization|Association/i)!==null) {
uauthor=authors.replace(//g," ").replace(/\s\s+/g," ");
s += ' | author='+uauthor;
} else {
for(var aj=0; aj<authors.length; ++aj) { // Attempt to get lastname, first name ordered
var myA=authors.split(' '), myS='', myF='', auLast='';
// nobiliary particles
if ((myA.match(/^von$|^van$|^de$/i)!==null) && (myA.length<5)) { // Needs expansion
myS=myA+' '+myA;
myF=myA.slice(0,myA.length-2).join(' ');
} else if (myA.length<5) {
myS=myA;
myF=myA.slice(0,myA.length-1).join(' ');
} else {myS=authors}; // Skip strangely long names, likely organizations
if(myF==''){
if(nauthors==1){s += ' | author1='+myS;uauthor=myS}; // If not first author then long names are normally organizations
} else {
if(authors.length==1){
uauthor=myS;
s += ' | first=' + myF + ' | last='+myS; // Only one author
} else {
if(nauthors==1){uauthor=myS};
s += ' | first'+nauthors+'=' + myF + ' | last'+nauthors+'='+myS;
}
}
if(label==='Translated by') { s+=' (transl.)'; }
++nauthors;
}
}
continue;
}
if(label === 'Compiled by' || label === 'Editor' || label === 'Editors') {
var editors = value.split(',');
for(var ej=0; ej<editors.length; ++ej) {
var temp=' | editor'+neditors+'='+editors;
//s += temp; blocked out due to authors tending to be duplicated as editors so defaulting to no editors
if(ueditors.search(temp.replace(/\|/g,"."))==-1){ // Get duplicates without this test
ueditors+=temp;
}
++neditors;
}
continue;
}
if(label === 'Edition') {
value=value.split(","); // Remove any superfluous details
if(value !== 'illustrated') { s += ' | edition='+value; }
continue;
}
if(label === 'Publisher') {
value=value.replace(/\&\;/g,"&");
var year = value.match(/\d+$/); //A trailing sequence of digits
if(year !== null) { // (!) Assumption that year will always be at end of publisher
s = ' | year='+year + s; uyear=year;
s += ' | publisher='+value.substring(0,value.length-year.length-2); //2 is for ', '
} else {
s += ' | publisher='+value;
}
continue;
}
if(label === 'Published') {
var pyear = value.match(/\d+$/);
if(pyear !== null) {
s = ' | year='+pyear + s;
}
continue;
}
if(label === 'ISBN') {
isbn = value.match(/\d+$/); //A trailing sequence of digits
if(isbn===null || isbn.length<1) {
uisbn='';
s='No match for trailing ISBN in "'+value+'".';
} else {
uisbn=isbn;
s += ' | isbn='+isbn;
}
continue;
}
s="Dont know what to do with "+label+": " + value +' ';
}
return s;
}
function showCitationFromInfo(info, url) {
var s = '{{citation';
s += info;
// Page number checker - not working due to page redesign?
// Only works for snippet views and takes first match only
var searchV=document.getElementById('search_v');
if(searchV!==null){
var pageV=searchV.getElementsByTagName("td");
for(var i=0;i<pageV.length-1;i++){
var sourcePage=pageV.innerHTML;
if(sourcePage.search("Page ")>-1){
s+=" | page="+sourcePage.match(/\d+/);
i=pageV.length;
}
}
}
s += ' }}'; //' | url=' + url + '}}';
// sort into preferred order
var ord=new Array("author=","first4","last4","author3","first3","last3","first2","last2",
"title=","year=","author1?=", "first1?=", "last1?="); // Reverse order
for(var i=0;i<ord.length;i++){
if(s.search(ord)>0){
var m='\\| '+ord+'+';
if(s.match(m)!==null){
var mm=s.match(m);
s=s.replace(/(\{\{citation )/,"$1"+mm);
s=s.split(mm)+mm+s.split(mm)+s.split(mm);
}
}
}
// Toggle pre-existing citation box
var test=document.getElementById('cite');
if(test!==null){
test.parentNode.parentNode.removeChild(test.parentNode);
with(document.getElementById('myCite').getElementsByTagName('button')){
style.backgroundColor=""; // default
innerHTML="Show citation";
}
} else {
with(document.getElementById('myCite').getElementsByTagName('button')){
style.backgroundColor="lightblue";
innerHTML="Hide citation";
}
// Create citation box buttons
var tb = document.getElementById('titlebar');
var cite=document.createElement('div');
var taRows=parseInt(s.length/70);
var plusRows=0; // How many rows are too long for text box
for(var i=0;i<s.split(' |').length;i++){if(s.split(' |').length>75){++plusRows}};
s.replace(/'/g,"’"); // change single quotes
var summary=document.getElementById('synopsistext');
if(summary!==null){ // tidy summary text, strip HTML
summary=summary.innerHTML.replace(//g,"/")
.replace(/=/g,"-")
.replace(/<(|\/)(i|b|em|strong)>/gi,"")
.replace(/<(|\/)(p|br)>/gi," ")
.replace(/<.*>/g,"")
.replace(/ ( )+/g," ")
.replace(/"/g,"’");
if(summary.length<6){summary=null}; // ignore trivial results
};
var sSummary=s.replace(/}}$/,(summary!==null ? " | quote="+summary+"}}" : "}}"));
var ref=s; // Generate ref name of the style "Smith1990"
ref=(ref.match(/last/)!==null ? ref.match(/last(|1)=((+) )+/).replace(/last(|1)=/,"").replace(/ /g,"") : "")+
(ref.match(/author(|1)=+/)!==null ? ref.match(/author(|1)=+/).replace(/author(|1)=/,"").replace(/ /g,"") : "")+
(ref.match(/year=/)!==null ? ref.match(/year=\d{4}/).replace(/year=/,"") : "");
if(ref.match(/^\d/)!==null){ref="auto-"+randomString(2)+"-"+ref};
// Create Harvard style template
var harvRef=s;
harvRef="{{harv"+
(harvRef.match(/last(|1)=/)!==null ?
"|"+harvRef.match(/last(|1)=((+) )+/).replace(/last(|1)=/,"").replace(/ $/,"") : "")+
(harvRef.match(/author(|1)=/)!==null ?
"|"+harvRef.match(/author(|1)=((+) )+/).replace(/author(|1)=/,"").replace(/ $/,"") : "")+
(harvRef.match(/last2/)!==null ?
"|"+harvRef.match(/last2=((+) )+/).replace(/last2=/,"").replace(/ $/,"") : "")+
(harvRef.match(/author2/)!==null ?
"|"+harvRef.match(/author2=((+) )+/).replace(/author2=/,"").replace(/ $/,"") : "")+
(harvRef.match(/last3/)!==null ?
"|"+harvRef.match(/last3=((+) )+/).replace(/last3=/,"").replace(/ $/,"") : "")+
(harvRef.match(/last4/)!==null ?
"|"+harvRef.match(/last4=((+) )+/).replace(/last4=/,"").replace(/ $/,"") : "")+
(harvRef.match(/year=/)!==null ? "|"+harvRef.match(/year=\d{4}/).replace(/year=/,"") : "")+
"}}";
var copac="http://copac.ac.uk/search?" + // Create copac link
"au="+uauthor+"&ti="+utitle+"&sort-order=ti%2C-date";
var worldcat="http://www.worldcat.org/search?q="+(uisbn.length>1 ? "bn%3A"+uisbn :
"%20ti%3A"+utitle+"%20au%3A"+uauthor+(uyear>0?"%20yr%3A"+uyear:""))+
"&qt=advanced&dblist=638";
var spacer='';
for(var i=0;i<70;i++){spacer+=' '};
cite.innerHTML = '\n<form name=cite id=cite><p style="font-size:12pt;font-weight:bold;margin-bottom:0px;">'+
'<span title="Edit and copy citation, useful additional fields include "quote" and "page"">'+
'Wikipedia citation</span> <input type="button" value="Highlight Text" title="Click to highlight all text for copying" '+
'onClick="javascript:this.form.citation.focus();this.form.citation.select();"> '+
// Database droplist
spacer+'\
<a id=golink name=golink target="_blank" style="font-size:8pt" \
href="'+worldcat+'">Go</a> \
<select name="droplist" id=droplist title="Search for "'+
utitle.split(':').replace(//g,"")+'" at selected site" \
onchange="javascript:document.getElementById("golink").href=\
this.form.droplist.options.value;" \
style="font-size:8pt;">\
<option selected="selected" VALUE="'+worldcat+'+">WorldCat</option>\
<option VALUE="'+copac+'">Copac</option>\
<option value="http://www.librarything.com/search_works.php?q='+
uauthor+' '+utitle+'&go=Go">Library Thing</option>\
<option value="http://catalogue.bl.uk/F/?func=find-b&request='+
utitle.replace(/\b\w{1,2}\b/g,"").replace(/\s/g,"+")+" "+uauthor+
'&find_code=WRD&adjacent=N">British Library</option>\
<option value="http://www.greenmetropolis.com/search.asp?book_title='+utitle+'&author_name=&'+uauthor+
'&Format=All&scope=InStock&Results=1&search.x=36&search.y=17&search=search">Greenmetropolis</option>\
<option value="http://www.amazon.com/s/ref=nb_ss?url=search-alias%3Dstripbooks&field-keywords='+
utitle+'">Amazon Books</option>\
</SELECT>\
'+
'<p style="margin-top:2px;margin-bottom:0px;">'+
// +URL button
'<input id="b_url" style="font-size:8pt" type="button" value="Add URL" '+
'onClick="javascript:var v=this.form.citation;'+
'if(this.form.citation.value.match(/\\|(| )*url(| )=/)!==null){'+
'this.form.b_url.value="Add URL";'+
'v.value=v.value.replace(/(\\n| )*\\|( )*url(| )=(| )*/," ")'+
'}else{this.form.b_url.value="Remove URL";'+
'v.value=v.value.replace(/}}$/,"| url='+url+' }}")}";> '+
// +editors button
'<input id=rmEds title="Add or remove editors; useful if the authors have been duplicated as editors" '+
'type="button" value="Editors" onClick="javascript:var v=this.form.citation;'+
'if(v.value.search(/editor1/)<0){v.value=v.value.replace(/ ?}}/,"'+ueditors+
'}}");this.form.rmEds.value="No editors"}else{'+
'v.value='+
'v.value.replace(/(\\n )*\\|( )*editor\\d ?= ?*/g,"");'+
'this.form.rmEds.value="Editors";}"> '+
// +summary button (if text exists)
(summary!==null ? '<input type="button" title="Insert quote from "Book overview"" '+
'value="Add summary" '+
'onClick="javascript:getElementById("citebox").rows+='+parseInt(summary.length/70)+
';this.form.citation.value="'+sSummary+'"";> ' : '' )+
// +ref button with smart 3 state behaviour
'<input title="Add automatically named reference tags for footnote" name="bRef" id="bRef" '+
'style="font-size:8pt;color:darkblue" type="button" value="<ref>" '+
'onClick="javascript:var v=this.form.citation,t=this.form.bRef;'+
'v.value='+
'(v.value.search(/\\<ref name\\=/)>-1 ? '+
'v.value.replace(/(\\<ref) name\\='+ref+' /,"$1")'+ //2nd click
' : (v.value.search(/\\<ref( *)>/)>-1 ? '+
'v.value.replace(/\\<ref>|<.ref>/g,"")'+ //3rd click
' : v.value.replace(/^{{|^\\*{{/,"<ref name='+ref+ //1st click
' >{{").replace(/}}$/,"}}</ref>")));'+
'if(v.value.search(/ref name=/)>0){t.title="Click to remove ref name";t.style.color="darkgreen"}'+ // Colour changer
'else if(v.value.search(/\\<ref\\>/)>-1){t.title="Click to remove ref tags";t.style.color="red"}'+
'else{t.title="Add automatically named reference tags for footnote";t.style.color="darkblue"};"> '+
// +Harvard button
'<input title="Create Harvard style cross-reference to full citation" '+
'style="color:darkblue" type="button" value="H" '+
'onClick="javascript:getElementById("citebox").rows=1;this.form.citation.value='+
'"'+harvRef+'";getElementById("addfields").style.display="none""> '+
'<input title="Bullet" style="color:darkblue" type="button" value="*" '+ // Add bullet
'onClick="javascript:this.form.citation.value='+
'this.form.citation.value.replace(/^{{/,"*{{");"> '+
// +Reset button
'<input title="Reset the citation text, wiping out changes" '+
'style="color:red;font-size:8pt" type="button" value="Reset" '+
'onClick="javascript:getElementById("citebox").rows='+taRows+
';this.form.citation.value=\''+s.replace(/'/g,"’").replace(/"/g,""")+'\';getElementById("addfields").style.display="";'+
'this.form.bRef.style.color="darkblue";'+ // Reset ref button
'this.form.b_url.value="Add URL";'+ // Reset url button
'this.form.bSqueeze.style.display="none";'+
'this.form.bExpand.style.display="";"> '+ // Reset expand button
// Text area start
'<p style="font-size:10pt;margin-top:2px;margin-bottom:2px;">'+
'<table><tr><td><textarea style="padding:6px;border-color:black;border-style:solid;border-width:1px;" rows='+taRows+
' cols=85 name=citation id=citebox>'+s+'</textarea></td>'+
// Squeeze & Expand
'<td valign=top align=center>'+
'<input id="bSqueeze" name="bSqueeze" title="Reduce size by removing some spaces" '+ // Squeeze
'type="button" style="display:none;" value="=><=" onClick="javascript:getElementById("citebox").rows='+taRows+
';this.form.citation.value='+
'this.form.citation.value.replace(/\\n*\\s* /g," ")'+
'.replace(/\\n/g,"").replace(/ = /g,"=")'+
'.replace(/\\| /g,"|").replace(/ }}/g,"}}");'+
'this.form.bSqueeze.style.display="none";'+
'this.form.bExpand.style.display="";"> '+
''+
'<input id="bExpand" name="bExpand" title="Long layout" '+ // Expand
'type="button" value="<==>" onClick="javascript:this.form.citation.value='+
'this.form.citation.value.replace(/\\n*\\s*\\|/g,"\\n |").replace(/\\n*\\s*}}/g,"\\n}}")'+
'.replace(/\\?id=/,"idxxx").replace(/(\\w)=(\\w)/g,"$1 = $2").replace(/idxxx/,"?id=");'+
'getElementById("citebox").rows=this.form.citation.value.split(/\\n/).length+'+plusRows+';'+
'this.form.bSqueeze.style.display="";'+
'this.form.bExpand.style.display="none""> '+
'<br>'+
'<input title="Take one row off textbox" '+ // Nudge -1
'type="button" value="«" onClick="javascript:'+
'var r=getElementById("citebox");if(r.rows>1){r.rows-=1};"> '+
'<input title="Add one row to textbox" '+ // Nudge +1
'type="button" value="»" onClick="javascript:'+
'getElementById("citebox").rows+=1;"> '+
'</table></p>\n'+ // Text area end
'<p style="margin-top:2px;margin-bottom:2px;font-size:8pt;">'+
// +help
'<input id=showHelp title="Show instructions" '+
'type=button value="Help" '+
'onClick="javascript:var h=getElementById("helpText"),t=this.form.showHelp;'+
'if(t.value=="Help"){'+
'h.style.display=null;'+
't.value="Hide help";t.style.color="red"}else{'+
'h.style.display="none";'+
't.value="Help";t.style.color="black"}'+
';" > '+
// Additional fields
'<span id=addfields> Add field: '+
// +page
'<input title="Add a page number to the citation (e.g. 55 displays as p.55)" '+
'style="color:darkblue" type=button value=page '+
'onClick="javascript:var p=prompt("Page number");if(p.length>0){'+
'this.form.citation.value=this.form.citation.value.replace'+
'(/}}$/," | page="+p+" }}")};" > '+
// +pages
'<input title="Add range of page numbers to the citation (eg. 23-5 displays as pp.23-5). '+
'Do not use with page=." style="color:darkblue" type=button value=pages '+
'onClick="javascript:var p=prompt("Page range");if(p.length>2){'+
'this.form.citation.value=this.form.citation.value.replace'+
'(/}}$/," | pages="+p+" }}")};" > '+
// +quotation
'<input title="Add quotation to the citation" style="color:darkblue" type=button value=quote '+
'onClick="javascript:var q=prompt("Quotation");if(q.length>3){this.form.citation.value=this.form.citation.value.replace'+
'(/}}$/," | quote="+q+" }}")};" > '+
// +OCLC
'<input title="Add OCLC (Online Computer Library Center ID number), such as 3185581 (superfluous when ISBN is given)"'+
' style="color:darkblue" type=button value=oclc '+
'onClick="javascript:var c=prompt("OCLC number");if(c.length>3){this.form.citation.value=this.form.citation.value.replace'+
'(/}}$/," | oclc="+c+" }}")};" > '+
'</p><div id="helpText" style="display:none"><p><table><tr>'+
'<td style="padding:1em;background:#C8FFC8;">'+
helpText+'</td></tr></table></p></div>'+
'</form>';
// Format citation box
with(cite.style){
backgroundColor='lightblue';
border='solid black 1px';
padding='8px';
margin='2px';
marginTop='1em';
width='760px';
}
tb.parentNode.insertBefore(cite,tb); // Insert before titlebar
}
}
function showCitationFromPage() {
var u = cleanURI();//location.href;
var book = u.split('&');
GM_log('Getting info from '+book);
do_doc(book, function(doc) {
var info = infoFromBook(doc);
showCitationFromInfo(info, u);
});
}
// Display only the basics about the book
function trimPage() {
//var bn=document.getElementById('buttons'); // Preview button
//if(bn!==null){bn.innerHTML=''};
var bookContent=document.getElementById('metadata_content_table').parentNode; // More book information
var buy=document.getElementById('menu_td');
if(buy!==null){buy.style.width='0px';buy.innerHTML=''}; // Remove left hand bar
var summary=document.getElementById('synopsistext'); // Get synopsis
var citations=document.getElementById('citations_module'); // citations to this book
if(citations!==null){citations=citations.parentNode};
var mainTable=document.getElementById('viewport_table');
mainTable.innerHTML=''; // Wipe clean
mainTable.appendChild(bookContent); // Add basic book details
if(summary!==null){ // Add book synopsis
summary.innerHTML="\n<h3 class=about_title>Book overview</h3>"+
"<div style='font-size:10pt;padding:4pt;'>"+
summary.innerHTML+"</div>";
mainTable.appendChild(summary);
}
if(citations!==null){ // References from other books
citations.className='dummy';
mainTable.appendChild(citations);
}
}
function cleanURI() {
var o = (location.href!==null ? location.href : " "); var hash = o.indexOf('#');
if(hash > -1) { o = o.substr(0,hash); }
var q = o.indexOf('?'), prefix = o.substr(0,q+1), u = o.substr(q+1), nu='';
var parts = u.split('&');
for(var i=0; i<parts.length; ++i) {
var = parts.split('='); assert(typeof e === 'undefined');
GM_log(p + ' is ' + v);
if(p!=='hl' && //language of the interface
p!=='ei' && //Some user-specific (cookie-specific?) constant
p!=='ots' && p!=='sig' && //Similar long sigs, don't know what
p!=='source' && //how you got there: gbs_hpintrst, bl(?) etc.
p!=='lr' && //restrict searches to a language
p!=='as_brr' && //as_brr=3 restricts to books with preview
p!=='printsec' && //e.g. printsec=frontcover
p!=='sa' && //e.g. sa=X
p!=='oi' && //e.g. oi=book_result
p!=='ct' && //e.g. ct=result
p!=='dq' &&
p.search('as_')<0 && //Search restrictions
p!=='vq' &&
p!=='q' && //Search within book
p!=='client' && //Name of browser
p!=='sitesec' && //Subsection listing
p!=='resnum') {
nu += (nu!=='' ? '&' : '')+p+'='+v;
}
}
nu = prefix + nu;
GM_log('new url is ' + nu);
return nu;
}
//Add a link/button to the top bar
function add_link(text, title, func, id) {
var bar = document.getElementById('titlebar');
var link = document.createElement('a');
link.title = title;
link.innerHTML = text;
link.style.textDecoration = 'none';
link.innerHTML='\n'+link.innerHTML;
link.id=id;
var dofunc = function(event) {
event.stopPropagation();
event.preventDefault();
func();
};
link.addEventListener('click', dofunc, false);
bar.parentNode.insertBefore(link, bar);
}
GM_log('Adding links to top bar');
add_link('<button style="margin-left:8px;margin-top:8px;">Clean up link</button>', 'Remove useless parameters from URI', function() { location.href = cleanURI(); }, 'myClean');
if(document.getElementById('metadata_content_table')!==null){ // Only show for suitable items (i.e. not magazines)
add_link('<button style="margin-left:2px;">Show citation</button>', 'Show a Wikipedia formatted citation for this book', showCitationFromPage,'myCite');
}
add_link('<button style="margin-left:2px;">Trim</button>', 'Only show the essential information', trimPage, 'myTrim' );
}();
}