191 lines
5.2 KiB
JavaScript
191 lines
5.2 KiB
JavaScript
{
|
|
"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();
|
|
}
|