diff --git a/Shacknews.js b/Shacknews.js new file mode 100644 index 0000000000..6cf43e5cf3 --- /dev/null +++ b/Shacknews.js @@ -0,0 +1,185 @@ +{ + "translatorID": "ea10f270-ab9b-4baa-b056-b74ea6da65e2", + "label": "Shacknews", + "creator": "czar", + "target": "^https?://(www\\.)shacknews\\.com", + "minVersion": "3.0", + "maxVersion": "", + "priority": 100, + "inRepository": true, + "translatorType": 4, + "browserSupport": "gcsibv", + "lastUpdated": "2018-07-08 05:01:59" +} + +/* + ***** BEGIN LICENSE BLOCK ***** + + Copyright © 2018 czar + http://en.wikipedia.org/wiki/User_talk:Czar + + This file is part of Zotero. + + Zotero is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Zotero 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 Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with Zotero. If not, see . + + ***** END LICENSE BLOCK ***** +*/ + + +// attr()/text() v2 per https://github.com/zotero/translators/issues/1277 +function attr(docOrElem,selector,attr,index){var elem=index?docOrElem.querySelectorAll(selector).item(index):docOrElem.querySelector(selector);return elem?elem.getAttribute(attr):null;}function text(docOrElem,selector,index){var elem=index?docOrElem.querySelectorAll(selector).item(index):docOrElem.querySelector(selector);return elem?elem.textContent:null;} + + +function detectWeb(doc, url) { + if (/\/article\//.test(url)) { // news, reviews, guides, and features + return "blogPost"; + } else if (getSearchResults(doc, true)) { + return "multiple"; + } +} + + +function scrape(doc, url) { + var translator = Zotero.loadTranslator('web'); + translator.setTranslator('951c027d-74ac-47d4-a107-9c3069ab7b48'); // embedded metadata (EM) + translator.setDocument(doc); + + translator.setHandler('itemDone', function (obj, item) { // corrections to EM + item.itemType = "blogPost"; + item.language = "en-US"; + item.date = text(doc,'.date.clear-fix').replace(/[\s\n]+/g," ").replace(/(\d+)\s(\w+)/,"$2 $1,"); + var authorMetadata = text(doc,'div.author'); + if (authorMetadata) { + item.creators.push(ZU.cleanAuthor(authorMetadata.replace('Written By ',''), "author")); + } + item.complete(); + }); + + translator.getTranslatorObject(function(trans) { + trans.doWeb(doc, url); + }); +} + + +function getSearchResults(doc, checkOnly) { + var items = {}; + var found = false; + var rows = doc.querySelectorAll('#feature-hero h1, .post-content h2, .gsc-webResult .gs-title a'); + var links = doc.querySelectorAll('#feature-hero a.hero-item, .post-content h2 a, .gsc-webResult .gs-title a'); + for (let i=0; i