commit 0256f5b9807880af5b9816c61d5641e87f1d9c26
parent a552bb19bd44111ccff82ebbdb6372b4cfcac9d6
Author: Avram Lyon <ajlyon@gmail.com>
Date: Fri, 14 Jan 2011 21:40:42 +0000
Trans: Add new translator for SFU's IPinCH database, contributed by Gladys Tang
Diffstat:
1 file changed, 190 insertions(+), 0 deletions(-)
diff --git a/translators/SFU IPinCH.js b/translators/SFU IPinCH.js
@@ -0,0 +1,190 @@
+{
+ "translatorID":"7448d1d7-57e4-4685-b6e4-d4d9f7046fc2",
+ "label":"SFU IPinCH",
+ "creator":"Gladys Tang",
+ "target":"^http://www\\.sfu\\.ca/kbipinch/",
+ "minVersion":"1.0",
+ "maxVersion":"",
+ "priority":100,
+ "inRepository":"1",
+ "translatorType":4,
+ "lastUpdated":"2011-01-13 10:29:52"
+}
+
+/*
+ SFU IPinCH - translator for Zotero
+ Copyright (C) 2010 Gladys Tang
+
+ 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 <http://www.gnu.org/licenses/>.
+*/
+
+function detectWeb(doc, url) {
+ if (url.match(/records\//)) {
+ var metasT = doc.evaluate('//meta', doc, null , XPathResult.ANY_TYPE, null);
+ var meta;
+ while(meta = metasT.iterateNext()){
+ //the catalog has more than 15 different item types records.
+ if(meta.name == 'itemType')
+ return meta.content;
+ }
+ }
+}
+
+function scrape(doc, url) {
+ //namespace code
+ var namespace = doc.documentElement.namespaceURI;
+ var nsResolver = namespace ? function(prefix) {
+ if (prefix == 'x') return namespace; else return null;
+ } : null;
+ var metasT = doc.evaluate('//meta', doc, null , XPathResult.ANY_TYPE, null);
+ var meta;
+ var item;
+ while(meta = metasT.iterateNext()){
+ if(meta.name == 'itemType')
+ item = meta.content;
+ }
+
+ var newItem = new Zotero.Item(item);
+
+ var items = new Object();
+ var isDateStart = 0;
+ var isDateEnd =0;
+ var isPlace = 0;
+ var dateStart ='';
+ var dateEnd = '';
+ var newspaperTitle = '';
+ newItem.url = doc.location.href;
+ var metas = doc.evaluate('//meta', doc, null , XPathResult.ANY_TYPE, null);
+ while (meta = metas.iterateNext()) {
+// Zotero.debug(meta);
+ if(meta.name !='itemType')
+ {
+ items[meta.name] = meta.content;
+ //AUTHOR case
+ if(meta.name =='author' || meta.name =='translator' || meta.name =='editor' || meta.name =='contributor' || meta.name =='reviewedAuthor' || meta.name =='interviewee'
+ || meta.name == 'interviewer' || meta.name == 'director' || meta.name == 'recipient' || meta.name == 'artist' || meta.name == 'presenter')
+ {
+ var creatorStr = meta.content;
+ var firstname, lastname;
+ var i = creatorStr.indexOf(",");
+ if(i!=-1)
+ {
+ lastname = creatorStr.slice(0, i);
+ firstname = creatorStr.slice(i +1 );
+ creatorStr = firstname +' ' + lastname;
+ }
+ newItem.creators.push(Zotero.Utilities.cleanAuthor(creatorStr, meta.name, true));
+ }
+ else
+ if(item='newspaperArticle' && meta.name == 'title')
+ {
+ if (newspaperTitle == '')
+ newspaperTitle = meta.content;
+ else
+ newspaperTitle += ', ' + meta.content
+ }
+ else
+ //Date start case
+ if(meta.name == 'dateY' || meta.name=='dateM' || meta.name=='dateD')
+ {
+ if(isDateStart ==0)
+ {
+ items['dateY'] = '';
+ items['dateM'] = '';
+ items['dateD'] = '';
+ }
+ items[meta.name] = meta.content;
+ isDateStart = 1;
+ }
+ else
+ //Date end case
+ if(meta.name == 'dateYE' || meta.name=='dateME' || meta.name=='dateDE')
+ {
+ if(isDateEnd ==0)
+ {
+ items['dateYE'] = '';
+ items['dateME'] = '';
+ items['dateDE'] = '';
+ }
+ items[meta.name] = meta.content;
+ isDateEnd = 1;
+ }
+
+ else
+ if(meta.name == 'placeCountry' || meta.name == 'placeCity')
+ {
+ if(isPlace ==0)
+ {
+ items['placeCountry'] = '';
+ items['placeCity'] = '';
+ }
+ items[meta.name] = meta.content;
+ isPlace = 1;
+ }
+ else
+ newItem[meta.name] = meta.content;
+ }
+ }
+
+ if(item='newspaperArticle')
+ {
+ newItem.title = newspaperTitle;
+ }
+ if(!newItem.title)
+ newItem.title = "No title";
+ if (isDateStart==1)
+ {
+ if(items['dateM'] == '' && items['dateD']=='')
+ dateStart = items['dateY'];
+ else
+ dateStart = items['dateM'] + '-' + items['dateD'] + '-' + items['dateY'];
+ newItem['date'] = dateStart;
+ }
+ if (isDateEnd==1)
+ {
+ if(items['dateME'] == '' && items['dateDE']=='')
+ dateEnd = items['dateYE'];
+ else
+ dateEnd =' to ' + items['dateME'] + '-' + items['dateDE'] + '-' + items['dateYE'];
+ newItem['date'] = dateStart + '-' + dateEnd;
+ }
+
+ if (isPlace==1)
+ newItem['place'] = items['placeCity'] + ' , ' + items['placeCountry'];
+
+// No such record yet.
+// if(item=='document') //special case, publication location merge to publisher.
+// {
+// newItem['publisher'] = newItem['publisher'] + ',' + newItem['place']
+// }
+
+ newItem.repository = "SFU IPinCH";
+
+ newItem.complete();
+}
+
+function doWeb(doc, url) {
+ //namespace code
+ var namespace = doc.documentElement.namespaceURI;
+ var nsResolver = namespace ? function(prefix) {
+ if (prefix == 'x') return namespace; else return null;
+ } : null;
+
+ var uris = new Array();
+
+ uris =[url];
+
+ Zotero.Utilities.processDocuments(uris, scrape, function() {Zotero.done();});
+ Zotero.wait();
+}