{ "translatorID": "92d4ed84-8d0-4d3c-941f-d4b9124cfbb", "label": "IEEE Xplore", "creator": "Simon Kornblith, Michael Berkowitz, Bastian Koenings, and Avram Lyon", "target": "^https?://[^/]*ieeexplore\\.ieee\\.org[^/]*/(?:[^\\?]+\\?(?:|.*&)arnumber=[0-9]+|search/(?:searchresult.jsp|selected.jsp)|xpl\\/(mostRecentIssue|tocresult).jsp\\?)", "minVersion": "2.1", "maxVersion": "", "priority": 100, "inRepository": true, "translatorType": 4, "browserSupport": "gcsibv", "lastUpdated": "2014-04-29 22:35:22" } function detectWeb(doc, url) { if(doc.defaultView !== doc.defaultView.top) return false; var articleRe = /[?&]ar(N|n)umber=([0-9]+)/; var m = articleRe.exec(url); if (m) { return "journalArticle"; } else { return "multiple"; } return false; } function doWeb(doc, url) { var hostRe = new RegExp("^(https?://[^/]+)/"); var hostMatch = hostRe.exec(url); var articleRe = /[?&]ar(?:N|n)umber=([0-9]+)/; var m = articleRe.exec(url); if (detectWeb(doc, url) == "multiple") { // search page var items = new Object(); var xPathRows = '//ul[@class="Results"]/li[@class="noAbstract"]/div[@class="header"]'; if (ZU.xpath(doc, xPathRows).length<1){ var xPathRows = '//ul[@class="results"]/li/div[@class="txt"]' } var tableRows = doc.evaluate(xPathRows, doc, null, XPathResult.ANY_TYPE, null); var tableRow; while (tableRow = tableRows.iterateNext()) { var linknode = doc.evaluate('.//h3/a', tableRow, null, XPathResult.ANY_TYPE, null).iterateNext(); if (!linknode) { // There are things like tables of contents that don't have item pages, so we'll just skip them continue; } var link = linknode.href; var title = ""; var strongs = tableRow.getElementsByTagName("h3"); for each(var strong in strongs) { if (strong.textContent) { title += strong.textContent + " "; } } items[link] = Zotero.Utilities.trimInternal(title); } Zotero.selectItems(items, function (items) { if (!items) { return true; } var urls = new Array(); for (var i in items) { // Some pages don't show the metadata we need (http://forums.zotero.org/discussion/16283) // No data: http://ieeexplore.ieee.org/search/srchabstract.jsp?tp=&arnumber=1397982 // No data: http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=1397982 // Data: http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=1397982 var arnumber = i.match(/arnumber=(\d+)/)[1]; i = i.replace(/\/(?:search|stamp)\/.*$/, "/xpls/abs_all.jsp?arnumber=" + arnumber); urls.push(i); } Zotero.Utilities.processDocuments(urls, scrape); }); } else { if (url.indexOf("/search/") !== -1 || url.indexOf("/stamp/") !== -1 || url.indexOf("/ielx4/") !== -1 || url.indexOf("/ielx5/") !== -1) { // Address the same missing metadata problem as above // Also address issue of saving from PDF itself, I hope // URL like http://ieeexplore.ieee.org/ielx4/78/2655/00080767.pdf?tp=&arnumber=80767&isnumber=2655 // Or: http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=1575188&tag=1 var arnumber = url.match(/arnumber=(\d+)/)[1]; url = url.replace(/\/(?:search|stamp|ielx[45])\/.*$/, "/xpls/abs_all.jsp?arnumber=" + arnumber); Zotero.Utilities.processDocuments([url], scrape); Zotero.wait(); } else { scrape(doc, url); } } } function scrape (doc, url) { var arnumber = url.match(/arnumber=\d+/)[0].replace(/arnumber=/, ""); var pdf; pdf = ZU.xpathText(doc, '//span[contains(@class, "button")]/a[@class="pdf"]/@href') Z.debug(pdf) Z.debug(arnumber) var get = 'http://ieeexplore.ieee.org/xpl/downloadCitations'; var post = "recordIds=" + arnumber + "&fromPage=&citations-format=citation-abstract&download-format=download-bibtex"; Zotero.Utilities.HTTP.doPost(get, post, function(text) { text = ZU.unescapeHTML(text.replace(/(&[^\s;]+) and/g, '$1;')); //remove empty tag - we can take this out once empty tags are ignored text = text.replace(/(keywords=\{.+);\}/, "$1}"); var earlyaccess = false; if (text.search(/^@null/)!=-1){ earlyaccess=true; text = text.replace(/^@null/, "@article"); } var translator = Zotero.loadTranslator("import"); // Calling the BibTeX translator translator.setTranslator("9cb70025-a888-4a29-a210-93ec52da40d4"); translator.setString(text); translator.setHandler("itemDone", function(obj, item) { item.notes = []; var res; // Rearrange titles, per http://forums.zotero.org/discussion/8056 // If something has a comma or a period, and the text after comma ends with //"of", "IEEE", or the like, then we switch the parts. Prefer periods. if (res = (item.publicationTitle.indexOf(".") !== -1) ? item.publicationTitle.trim().match(/^(.*)\.(.*(?:of|on|IEE|IEEE|IET|IRE))$/) : item.publicationTitle.trim().match(/^(.*),(.*(?:of|on|IEE|IEEE|IET|IRE))$/)) item.publicationTitle = res[2]+" "+res[1]; item.proceedingsTitle = item.conferenceName = item.publicationTitle; if (earlyaccess){ item.volume = "Early Access Online"; item.issue = ""; item.pages = ""; } if (pdf) { Zotero.Utilities.doGet(pdf, function (src) { var m = /