Skip to content

Commit

Permalink
Merge pull request zotero#2068 from placardo/canlii
Browse files Browse the repository at this point in the history
Update CanLII

This solves zotero#2063.
  • Loading branch information
zuphilip authored Nov 26, 2019
2 parents 4925792 + fcbdb78 commit bffebf9
Showing 1 changed file with 103 additions and 55 deletions.
158 changes: 103 additions & 55 deletions CanLII.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,59 +9,79 @@
"inRepository": true,
"translatorType": 4,
"browserSupport": "gcsibv",
"lastUpdated": "2016-09-09 20:00:57"
"lastUpdated": "2019-11-25 22:05:12"
}

var canLiiRegexp = /https?:\/\/(?:www\.)?canlii\.org[^\/]*\/(?:en|fr)\/[^\/]+\/[^\/]+\/doc\/.+/;

/*
***** BEGIN LICENSE BLOCK *****
Copyright © 2012 Sebastian Karcher
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 <http://www.gnu.org/licenses/>.
***** END LICENSE BLOCK *****
*/


// attr()/text() v2
// eslint-disable-next-line
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;}

var canLiiRegexp = /https?:\/\/(?:www\.)?canlii\.org[^/]*\/(?:en|fr)\/[^/]+\/[^/]+\/doc\/.+/;

function detectWeb(doc, url) {
if (canLiiRegexp.test(url)) {
return "case";
} else {
}
else {
var aTags = doc.getElementsByTagName("a");
for (var i = 0; i < aTags.length; i++) {
if (canLiiRegexp.test(aTags[i].href)) {
return "multiple";
}
}
}
return false;
}


function scrape(doc, url) {

var newItem = new Zotero.Item("case");
var voliss = doc.getElementsByClassName('documentMeta-citation')[0].nextElementSibling;
voliss = ZU.trimInternal(
ZU.xpathText(voliss, './node()[not(self::script)]', null, '') // We technically only use ./text() parts, but this is less confusing
);
//Z.debug("voliss: ("+voliss+")")

var casename = voliss.match(/.+?(?=\s*,)/)[0];
newItem.caseName = newItem.title = casename;
//Z.debug("casename: ("+casename+")");

var court = voliss.match(/,\s*\d{4}\s*([A-Z]+)/);
if (court) newItem.court = court[1];
//Z.debug("court: ("+court+")");

var reportvl = voliss.match(/\]\s*(\d+)/);
if (reportvl) newItem.reporterVolume = reportvl[1];
//Z.debug("reportvl: ("+reportvl+")");

var reporter = voliss.match(/\]\s*\d+\s*([A-Z]+)/);
if (reporter) newItem.reporter = reporter[1];
//Z.debug("reporter: ("+reporter+")");

var reporterpg = voliss.match(/(?:\]\s*\d+|,\s*\d{4})\s*[A-Z]+\s*(\d+)/);
if (reporterpg) newItem.firstPage = reporterpg[1];
//Z.debug("reporterpg: ("+reporterpg+")");
// e.g. Reference re Secession of Quebec, 1998 CanLII 793 (SCC), [1998] 2 SCR 217, <http://canlii.ca/t/1fqr3>, retrieved on 2019-11-25
var citationParts = voliss.split(',');
newItem.caseName = citationParts[0];
var reporterRegex = /\[\d\d\d\d\]\s+(\d+)\s+([A-Z]+)\s+(\d+)/;
var reporterDetails = voliss.match(reporterRegex);
if (reporterDetails) {
newItem.reporterVolume = reporterDetails[1];
newItem.reporter = reporterDetails[2];
newItem.firstPage = reporterDetails[3];
}

newItem.dateDecided = ZU.xpathText(doc, '//table[contains(@class, "documentMeta")]//tr/td[contains(@class, "canlii-label") and contains(text(), "Date")]/following-sibling::td');
newItem.docketNumber = ZU.xpathText(doc, '//table[contains(@class, "documentMeta")]//tr/td[contains(@class, "canlii-label") and (contains(text(), "Docket") or contains(text(), "Dossier"))]/following-sibling::td');
var otherCitations = ZU.xpathText(doc, '//table[contains(@class, "documentMeta")]//tr/td[contains(@class, "canlii-label") and contains(text(), "Other citations")]/following-sibling::td');
newItem.court = text('#breadcrumbs span', 2);
newItem.dateDecided = ZU.xpathText(doc, '//div[@id="documentMeta"]//div[contains(text(), "Date")]/following-sibling::div');
newItem.docketNumber = ZU.xpathText(doc, '//div[@id="documentMeta"]//div[contains(text(), "File number") or contains(text(), "Numéro de dossier")]/following-sibling::div');
var otherCitations = ZU.xpathText(doc, '//div[@id="documentMeta"]//div[contains(text(), "Other citations") or contains(text(), "Autres citations")]/following-sibling::div');
if (otherCitations) {
newItem.notes.push({"note" : "Other Citations: " + ZU.trimInternal(otherCitations)});
newItem.notes.push({ note: "Other Citations: " + ZU.trimInternal(otherCitations) });
}

var shortUrl = doc.getElementsByClassName('documentStaticUrl')[0];
Expand All @@ -70,7 +90,7 @@ function scrape(doc, url) {
}

// attach link to pdf version
//Z.debug(url)
// Z.debug(url)
var pdfurl = url.replace(/\.html(?:[?#].*)?/, ".pdf");
newItem.attachments.push({
url: pdfurl,
Expand All @@ -87,11 +107,12 @@ function scrape(doc, url) {
function doWeb(doc, url) {
if (canLiiRegexp.test(url)) {
scrape(doc, url);
} else {
}
else {
var items = ZU.getItemArray(doc, doc, canLiiRegexp);
Zotero.selectItems(items, function (items) {
if (!items) {
return true;
return;
}
var articles = [];
for (var i in items) {
Expand All @@ -101,23 +122,19 @@ function doWeb(doc, url) {
});
}
}

/** BEGIN TEST CASES **/
var testCases = [
{
"type": "web",
"url": "http://canlii.org/en/ca/scc/nav/date/2010.html",
"items": "multiple"
},
{
"type": "web",
"url": "http://www.canlii.org/en/ca/scc/doc/2010/2010scc2/2010scc2.html",
"url": "https://www.canlii.org/en/ca/scc/doc/2010/2010scc2/2010scc2.html",
"items": [
{
"itemType": "case",
"caseName": "MiningWatch Canada v. Canada (Fisheries and Oceans)",
"creators": [],
"dateDecided": "2010-01-21",
"court": "SCC",
"court": "Supreme Court of Canada",
"docketNumber": "32797",
"firstPage": "6",
"reporter": "SCR",
Expand All @@ -135,7 +152,7 @@ var testCases = [
"tags": [],
"notes": [
{
"note": "Other Citations: 397 NR 232; [2010] SCJ No 2 (QL); [2010] ACS no 2"
"note": "Other Citations: 397 NR 232[2010] SCJ No 2 (QL) [2010] ACS no 2"
}
],
"seeAlso": []
Expand All @@ -144,16 +161,15 @@ var testCases = [
},
{
"type": "web",
"url": "http://www.canlii.org/en/ca/fct/doc/2011/2011fc119/2011fc119.html?searchUrlHash=AAAAAQAjU3V0dGllIHYuIENhbmFkYSAoQXR0b3JuZXkgR2VuZXJhbCkAAAAAAQ",
"url": "https://www.canlii.org/en/ca/fct/doc/2011/2011fc119/2011fc119.html?searchUrlHash=AAAAAQAjU3V0dGllIHYuIENhbmFkYSAoQXR0b3JuZXkgR2VuZXJhbCkAAAAAAQ",
"items": [
{
"itemType": "case",
"caseName": "Suttie v. Canada (Attorney General)",
"creators": [],
"dateDecided": "2011-02-02",
"court": "FC",
"court": "Federal Court",
"docketNumber": "T-1089-10",
"firstPage": "119",
"url": "http://canlii.ca/t/2flrk",
"attachments": [
{
Expand All @@ -172,19 +188,14 @@ var testCases = [
},
{
"type": "web",
"url": "http://canlii.org/fr/ca/csc/nav/date/2010.html",
"items": "multiple"
},
{
"type": "web",
"url": "http://www.canlii.org/fr/ca/csc/doc/2010/2010csc2/2010csc2.html",
"url": "https://www.canlii.org/fr/ca/csc/doc/2010/2010csc2/2010csc2.html",
"items": [
{
"itemType": "case",
"caseName": "Mines Alerte Canada c. Canada (Pêches et Océans)",
"creators": [],
"dateDecided": "2010-01-21",
"court": "CSC",
"court": "Cour suprême du Canada",
"docketNumber": "32797",
"firstPage": "6",
"reporter": "RCS",
Expand All @@ -200,23 +211,26 @@ var testCases = [
}
],
"tags": [],
"notes": [],
"notes": [
{
"note": "Other Citations: 397 NR 232 — [2010] SCJ No 2 (QL) — [2010] ACS no 2"
}
],
"seeAlso": []
}
]
},
{
"type": "web",
"url": "http://www.canlii.org/fr/ca/cfpi/doc/2011/2011cf119/2011cf119.html?searchUrlHash=AAAAAQAjU3V0dGllIHYuIENhbmFkYSAoQXR0b3JuZXkgR2VuZXJhbCkAAAAAAQ",
"url": "https://www.canlii.org/fr/ca/cfpi/doc/2011/2011cf119/2011cf119.html?searchUrlHash=AAAAAQAjU3V0dGllIHYuIENhbmFkYSAoQXR0b3JuZXkgR2VuZXJhbCkAAAAAAQ",
"items": [
{
"itemType": "case",
"caseName": "Suttie c. Canada (Procureur Général)",
"creators": [],
"dateDecided": "2011-02-02",
"court": "CF",
"court": "Cour fédérale",
"docketNumber": "T-1089-10",
"firstPage": "119",
"url": "http://canlii.ca/t/fks9z",
"attachments": [
{
Expand All @@ -232,6 +246,40 @@ var testCases = [
"seeAlso": []
}
]
},
{
"type": "web",
"url": "https://www.canlii.org/en/ca/scc/doc/2010/2010scc2/2010scc2.html",
"items": [
{
"itemType": "case",
"caseName": "MiningWatch Canada v. Canada (Fisheries and Oceans)",
"creators": [],
"dateDecided": "2010-01-21",
"court": "Supreme Court of Canada",
"docketNumber": "32797",
"firstPage": "6",
"reporter": "SCR",
"reporterVolume": "1",
"url": "http://canlii.ca/t/27jmr",
"attachments": [
{
"title": "CanLII Full Text PDF",
"mimeType": "application/pdf"
},
{
"title": "CanLII Snapshot"
}
],
"tags": [],
"notes": [
{
"note": "Other Citations: 397 NR 232 — [2010] SCJ No 2 (QL) — [2010] ACS no 2"
}
],
"seeAlso": []
}
]
}
]
/** END TEST CASES **/
/** END TEST CASES **/

0 comments on commit bffebf9

Please sign in to comment.