{ "translatorID": "c70055c3-a525-45db-8e37-726c6c2ad034", "label": "Wikimedia Commons", "creator": "Sebastian Karcher", "target": "^https?://commons\\.wikimedia\\.org", "minVersion": "2.1.9", "maxVersion": "", "priority": 100, "inRepository": true, "translatorType": 4, "browserSupport": "gcsibv", "lastUpdated": "2014-01-05 12:45:00" } /* FW LINE 57:6869c32952b1 */ function flatten(c){var b=new Array();for(var d in c){var e=c[d];if(e instanceof Array){b=b.concat(flatten(e))}else{b.push(e)}}return b}var FW={_scrapers:new Array()};FW._Base=function(){this.callHook=function(b,c,e,a){if(typeof this["hooks"]==="object"){var d=this["hooks"][b];if(typeof d==="function"){d(c,e,a)}}};this.evaluateThing=function(f,e,c){var b=typeof f;if(b==="object"){if(f instanceof Array){var d=this.evaluateThing;var a=f.map(function(g){return d(g,e,c)});return flatten(a)}else{return f.evaluate(e,c)}}else{if(b==="function"){return f(e,c)}else{return f}}}};FW.Scraper=function(a){FW._scrapers.push(new FW._Scraper(a))};FW._Scraper=function(a){for(x in a){this[x]=a[x]}this._singleFieldNames=["abstractNote","applicationNumber","archive","archiveLocation","artworkMedium","artworkSize","assignee","audioFileType","audioRecordingType","billNumber","blogTitle","bookTitle","callNumber","caseName","code","codeNumber","codePages","codeVolume","committee","company","conferenceName","country","court","date","dateDecided","dateEnacted","dictionaryTitle","distributor","docketNumber","documentNumber","DOI","edition","encyclopediaTitle","episodeNumber","extra","filingDate","firstPage","forumTitle","genre","history","institution","interviewMedium","ISBN","ISSN","issue","issueDate","issuingAuthority","journalAbbreviation","label","language","legalStatus","legislativeBody","letterType","libraryCatalog","manuscriptType","mapType","medium","meetingName","nameOfAct","network","number","numberOfVolumes","numPages","pages","patentNumber","place","postType","presentationType","priorityNumbers","proceedingsTitle","programTitle","programmingLanguage","publicLawNumber","publicationTitle","publisher","references","reportNumber","reportType","reporter","reporterVolume","rights","runningTime","scale","section","series","seriesNumber","seriesText","seriesTitle","session","shortTitle","studio","subject","system","thesisType","title","type","university","url","version","videoRecordingType","volume","websiteTitle","websiteType"];this._makeAttachments=function(p,b,g,t){if(g instanceof Array){g.forEach(function(k){this._makeAttachments(p,b,k,t)},this)}else{if(typeof g==="object"){var o=g.urls||g.url;var m=g.types||g.type;var f=g.titles||g.title;var q=g.snapshots||g.snapshot;var j=this.evaluateThing(o,p,b);var n=this.evaluateThing(f,p,b);var s=this.evaluateThing(m,p,b);var d=this.evaluateThing(q,p,b);if(!(j instanceof Array)){j=[j]}for(var l in j){var c=j[l];var h;var e;var r;if(s instanceof Array){h=s[l]}else{h=s}if(n instanceof Array){e=n[l]}else{e=n}if(d instanceof Array){r=d[l]}else{r=d}t.attachments.push({url:c,title:e,type:h,snapshot:r})}}}};if(this.itemTrans!==undefined){this.makeItems=this.itemTrans.makeItems}else{this.makeItems=function(o,b,m,c,l){var q=new Zotero.Item(this.itemType);q.url=b;for(var h in this._singleFieldNames){var n=this._singleFieldNames[h];if(this[n]){var g=this.evaluateThing(this[n],o,b);if(g instanceof Array){q[n]=g[0]}else{q[n]=g}}}var r=["creators","tags"];for(var f in r){var p=r[f];var d=this.evaluateThing(this[p],o,b);if(d){for(var e in d){q[p].push(d[e])}}}this._makeAttachments(o,b,this["attachments"],q);c(q,this,o,b);l([q])}}};FW._Scraper.prototype=new FW._Base;FW.MultiScraper=function(a){FW._scrapers.push(new FW._MultiScraper(a))};FW._MultiScraper=function(a){for(x in a){this[x]=a[x]}this._mkSelectItems=function(e,d){var b=new Object;for(var c in e){b[d[c]]=e[c]}return b};this._selectItems=function(d,c,e){var b=new Array();Zotero.selectItems(this._mkSelectItems(d,c),function(f){for(var g in f){b.push(g)}e(b)})};this._mkAttachments=function(g,d,f){var b=this.evaluateThing(this["attachments"],g,d);var c=new Object();if(b){for(var e in f){c[f[e]]=b[e]}}return c};this._makeChoices=function(f,p,c,d,h){if(f instanceof Array){f.forEach(function(k){this._makeTitlesUrls(k,p,c,d,h)},this)}else{if(typeof f==="object"){var m=f.urls||f.url;var e=f.titles||f.title;var n=this.evaluateThing(m,p,c);var j=this.evaluateThing(e,p,c);var l=(j instanceof Array);if(!(n instanceof Array)){n=[n]}for(var g in n){var b=n[g];var o;if(l){o=j[g]}else{o=j}h.push(b);d.push(o)}}}};this.makeItems=function(j,b,g,c,f){if(this.beforeFilter){var k=this.beforeFilter(j,b);if(k!=b){this.makeItems(j,k,g,c,f);return}}var e=[];var h=[];this._makeChoices(this["choices"],j,b,e,h);var d=this._mkAttachments(j,b,h);this._selectItems(e,h,function(m){if(!m){f([])}else{var l=[];var n=this.itemTrans;Zotero.Utilities.processDocuments(m,function(q){var p=q.documentURI;var o=n;if(o===undefined){o=FW.getScraper(q,p)}if(o===undefined){}else{o.makeItems(q,p,d[p],function(r){l.push(r);c(r,o,q,p)},function(){})}},function(){f(l)})}})}};FW._MultiScraper.prototype=new FW._Base;FW.DelegateTranslator=function(a){return new FW._DelegateTranslator(a)};FW._DelegateTranslator=function(a){for(x in a){this[x]=a[x]}this._translator=Zotero.loadTranslator(this.translatorType);this._translator.setTranslator(this.translatorId);this.makeItems=function(g,d,b,f,c){var e;Zotero.Utilities.HTTP.doGet(d,function(h){this._translator.setHandler("itemDone",function(k,j){e=j;if(b){j.attachments=b}});if(this.preProcess){h=this.preProcess(h)}this._translator.setString(h);this._translator.translate();f(e)},function(){c([e])})}};FW.DelegateTranslator.prototype=new FW._Scraper;FW._StringMagic=function(){this._filters=new Array();this.addFilter=function(a){this._filters.push(a);return this};this.split=function(a){return this.addFilter(function(b){return b.split(a).filter(function(c){return(c!="")})})};this.replace=function(c,b,a){return this.addFilter(function(d){if(d.match(c)){return d.replace(c,b,a)}else{return d}})};this.prepend=function(a){return this.replace(/^/,a)};this.append=function(a){return this.replace(/$/,a)};this.remove=function(b,a){return this.replace(b,"",a)};this.trim=function(){return this.addFilter(function(a){return Zotero.Utilities.trim(a)})};this.trimInternal=function(){return this.addFilter(function(a){return Zotero.Utilities.trimInternal(a)})};this.match=function(a,b){if(!b){b=0}return this.addFilter(function(d){var c=d.match(a);if(c===undefined||c===null){return undefined}else{return c[b]}})};this.cleanAuthor=function(b,a){return this.addFilter(function(c){return Zotero.Utilities.cleanAuthor(c,b,a)})};this.key=function(a){return this.addFilter(function(b){return b[a]})};this.capitalizeTitle=function(){if(arguments.length>0&&arguments[0]==true){return this.addFilter(function(a){return Zotero.Utilities.capitalizeTitle(a,true)})}else{return this.addFilter(function(a){return Zotero.Utilities.capitalizeTitle(a)})}};this.unescapeHTML=function(){return this.addFilter(function(a){return Zotero.Utilities.unescapeHTML(a)})};this.unescape=function(){return this.addFilter(function(a){return unescape(a)})};this._applyFilters=function(c,e){for(i in this._filters){c=flatten(c);c=c.filter(function(a){return((a!==undefined)&&(a!==null))});for(var d=0;d0&&a[0]){return f}}return undefined};FW.getScraper=function(b,a){var c=FW.detectWeb(b,a);return FW._scrapers.filter(function(d){return(d.evaluateThing(d.itemType,b,a)==c)&&(d.evaluateThing(d.detect,b,a))})[0]};FW.doWeb=function(c,a){var b=FW.getScraper(c,a);b.makeItems(c,a,[],function(f,e,g,d){e.callHook("scraperDone",f,g,d);if(!f.title){f.title=""}f.complete()},function(){Zotero.done()});Zotero.wait()}; function detectWeb(doc, url) { return FW.detectWeb(doc, url); } function doWeb(doc, url) { return FW.doWeb(doc, url); } /* Wikimedia Commons Translator Copyright (C) 2012 Sebastian Karcher This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /**Art Images*/ FW.Scraper({ itemType : 'artwork', detect : FW.Xpath('//td[@id="fileinfotpl_art_title" or @id="fileinfotpl_desc"]'), title : FW.Xpath('//td[@id="fileinfotpl_art_title" or @id="fileinfotpl_desc"]/following-sibling::td').text().trim().remove(/\n.+/g), attachments : [{ url : FW.Url(), title : "Wikimedia Snapshot", type : "text/html" }, { url : FW.Xpath('//div[@id="file"]/a/@href').text().prepend("http:"), title : "Wikimedia Image" } ], creators : FW.Xpath('//tr/td[@id="fileinfotpl_aut"]/following-sibling::td').text().remove(/\n/g).remove(/\(.+/).cleanAuthor("author"), artworkSize : FW.Xpath('//tr/td[@id="fileinfotpl_art_dimensions"]/following-sibling::td').text(), artworkMedium : FW.Xpath('//tr/td[@id="fileinfotpl_art_medium"]/following-sibling::td').text(), date : FW.Xpath('//tr/td[@id="fileinfotpl_date"]/following-sibling::td').text(), archive : FW.Xpath('//tr/td[@id="fileinfotpl_art_gallery"]/following-sibling::td').text().trim().remove(/\n.+/g), rights : FW.Xpath('//table[@class="licensetpl" or @class="layouttemplate licensetpl"]/tbody/tr/td[2]|//table[@class="licensetpl" or @class="layouttemplate licensetpl"]/tbody/tr/td/span').text(), hooks : { "scraperDone": function (item,doc, url) { if (!item.archive) item.archive = ZU.xpathText(doc, '//tr/td[@id="fileinfotpl_src"]/following-sibling::td'); item.date = item.date ? item.date : item.runningTime; item.runningTime = undefined; for (i in item.creators) { if (!item.creators[i].firstName){ item.creators[i].fieldMode=1; } }} } }); /**Photos*/ FW.Scraper({ itemType : 'artwork', detect : FW.Xpath('//span[@class="description"]'), title : FW.Xpath('//span[@class="description"]').text().trim(), attachments : [{ url : FW.Url(), title : "Wikimedia Snapshot", type : "text/html" }, { url : FW.Xpath('//div[@id="file"]/a/@href').text().prepend("http:"), title : "Wikimedia Image" } ], creators : FW.Xpath('//tr/td[@id="fileinfotpl_aut"]/following-sibling::td').text().remove(/\n/g).remove(/\(.+/).cleanAuthor("author"), date : FW.Xpath('//tr/td[@id="fileinfotpl_date"]/following-sibling::td').text(), archive : FW.Xpath('//tr/td[@id="fileinfotpl_src"]/following-sibling::td').text(), rights : FW.Xpath('//table[@class="licensetpl" or @class="layouttemplate licensetpl"]/tbody/tr/td[2]|//table[@class="licensetpl" or @class="layouttemplate licensetpl"]/tbody/tr/td/span').text(), //fix authors w/o first names to single field mode hooks : { "scraperDone": function (item,doc, url) { item.date = item.date ? item.date : item.runningTime; item.runningTime = undefined; for (i in item.creators) { if (!item.creators[i].firstName){ item.creators[i].fieldMode=1; } }} } }); /** Search results */ FW.MultiScraper({ itemType : "multiple", detect : FW.Xpath('//ul[contains(@class, "search-results")]'), choices : { titles : FW.Xpath('//ul[contains(@class, "search-results")]//a[contains(@title, "File:")]').text(), urls : FW.Xpath('//ul[contains(@class, "search-results")]//a[contains(@title, "File:")]').key('href').text() } }); /**Galleries */ FW.MultiScraper({ itemType : "multiple", detect : FW.Xpath('//ul[contains(@class, "gallery")]'), choices : { titles : FW.Xpath('//ul[contains(@class, "gallery")]//div[@class="gallerytext"]').text(), urls : FW.Xpath('//ul[contains(@class, "gallery")]//a[@class="image"]').key('href').text() } });/** BEGIN TEST CASES **/ var testCases = [ { "type": "web", "url": "http://commons.wikimedia.org/wiki/File:Boy_with_a_Basket_of_Fruit-Caravaggio_(1593).jpg", "items": [ { "itemType": "artwork", "creators": [ { "firstName": "", "lastName": "Caravaggio", "creatorType": "author", "fieldMode": 1 } ], "notes": [], "tags": [], "seeAlso": [], "attachments": [ { "title": "Wikimedia Snapshot", "type": "text/html" }, { "title": "Wikimedia Image" } ], "url": "http://commons.wikimedia.org/wiki/File:Boy_with_a_Basket_of_Fruit-Caravaggio_(1593).jpg", "archive": "Galleria Borghese", "artworkMedium": "oil on canvas", "artworkSize": "70 × 67 cm", "date": "circa 1593", "rights": "Public domain", "title": "English: Boy with a Basket of Fruit", "libraryCatalog": "Wikimedia Commons", "accessDate": "CURRENT_TIMESTAMP", "shortTitle": "English" } ] }, { "type": "web", "url": "http://commons.wikimedia.org/w/index.php?search=peron&button=&title=Special%3ASearch", "items": "multiple" }, { "type": "web", "url": "http://commons.wikimedia.org/wiki/File:Portrait_of_Ambroise_Vollard.jpg", "items": [ { "itemType": "artwork", "creators": [ { "firstName": "Paul", "lastName": "Cézanne", "creatorType": "author" } ], "notes": [], "tags": [], "seeAlso": [], "attachments": [ { "title": "Wikimedia Snapshot", "type": "text/html" }, { "title": "Wikimedia Image" } ], "url": "http://commons.wikimedia.org/wiki/File:Portrait_of_Ambroise_Vollard.jpg", "archive": "http://arthistory.about.com/od/from_exhibitions/ig/avantgarde/ambrvoll_14.htm", "date": "1899", "rights": "Public domain", "title": "English: Portrait of Ambroise Vollard. Oil on canvas, 101 x 81 cm. Petit Palais, Musée des Beaux-Arts de la Ville de Paris.", "libraryCatalog": "Wikimedia Commons", "accessDate": "CURRENT_TIMESTAMP", "shortTitle": "English" } ] }, { "type": "web", "url": "http://commons.wikimedia.org/wiki/File:Plaza_Congreso.JPG", "items": [ { "itemType": "artwork", "creators": [ { "firstName": "", "lastName": "Napoletano", "creatorType": "author", "fieldMode": 1 } ], "notes": [], "tags": [], "seeAlso": [], "attachments": [ { "title": "Wikimedia Snapshot", "type": "text/html" }, { "title": "Wikimedia Image" } ], "url": "http://commons.wikimedia.org/wiki/File:Plaza_Congreso.JPG", "archive": "Own work", "date": "28 January 2012", "rights": "Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled GNU Free Documentation License.\nhttp://www.gnu.org/copyleft/fdl.htmlGFDLGNU Free Documentation Licensetruetrue", "title": "English: Congressional Plaza, Buenos Aires, Argentina.", "libraryCatalog": "Wikimedia Commons", "accessDate": "CURRENT_TIMESTAMP", "shortTitle": "English" } ] }, { "type": "web", "url": "http://commons.wikimedia.org/wiki/Commons:Valued_images_by_topic/Science", "items": "multiple" } ] /** END TEST CASES **/