www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

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:
Atranslators/SFU IPinCH.js | 190+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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(); +}