{ "translatorID": "2dc0b23d-64d8-4933-b629-5c003451ccf7", "label": "Légifrance", "creator": "Guillaume Adreani", "target": "^https?://(www\\.)?legifrance\\.gouv\\.fr/", "minVersion": "2.1.9", "maxVersion": "", "priority": 100, "inRepository": true, "translatorType": 4, "browserSupport": "gcsibv", "lastUpdated": "2023-06-16 11:01:10" } /* ***** BEGIN LICENSE BLOCK ***** Copyright © 2013 Guillaume Adreani (guillaume.adreani@gmail.com @adreagui] for Droit.org 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 ***** */ /* Thanks to Sebastian Karcher and Aurimas Vinckevicius */ function detectWeb(doc, url) { // eslint-disable-line no-unused-vars let path = (new URL(url)).pathname; if (/(?:CETATEXT|CONSTEXT|JURITEXT)/.test(url)) { // Détection jurisprudence return "case"; } else if (/LEGIARTI|affichCodeArticle|affichTexteArticle|KALICONT|JORFTEXT|CNILTEXT/.test(url)) { // Détection textes législatifs return "statute"; // Détection lois et codes } else if (/^\/search\//.test(path)) { // Détection occurences multiples uniquement pour la jurisprudence return "multiple"; // occurences multiples } else return false; } function getSearchResults(doc, checkOnly) { var items = {}; var found = false; var rows = doc.querySelectorAll('.title-result-item'); for (let row of rows) { let href = attr(row, "a", "href"); let title = ZU.trimInternal(row.textContent); if (!href || !title) continue; if (checkOnly) return true; found = true; items[href] = title; } return found ? items : false; } async function doWeb(doc, url) { if (detectWeb(doc, url) == 'multiple') { let items = await Zotero.selectItems(getSearchResults(doc, false)); if (!items) return; for (let url of Object.keys(items)) { scrape(await requestDocument(url)); } } else { scrape(doc, url); } } function scrape(doc, url = doc.location.href) { switch (detectWeb(doc, url)) { case "case": { scrapeCase(doc, url); break; } case "statute": { scrapeLegislation(doc, url); break; } } } function scrapeCase(doc, url) { // Jurisprudence var newItem = new Zotero.Item("case"); // Paramètres communs var title = ZU.xpathText(doc, '//h1[@class="main-title"]'); title = ZU.trimInternal(title); newItem.title = title; newItem.url = url; // NOTE: RTF may have gone (2023-06); the site now only shows "print" and // "copy text to clipboard". var rtfurl = ZU.xpathText(doc, '//a[contains(text(), "Télécharger")]/@href'); if (rtfurl) { newItem.attachments = [{ url: "http://www.legifrance.gouv.fr/" + rtfurl, title: "Document en RTF", mimeType: "application/rtf" }]; } // Situation selon les juridictions let matchInfo; if ((matchInfo = title.match(/(.*) - (.*) - (.*) - (.*)/))) { // Conseil constitutionnel let [, numero, date, texteParties,] = matchInfo; newItem.court = 'Conseil constitutionnel'; newItem.docketNumber = numero; newItem.date = date; newItem.extra = texteParties; } else if ((matchInfo = title.match(/(Conseil d'État), (.*), ([0-9/]+), ([0-9]+), (.+Lebon)/i))) { // Conseil d'État avec indication de publication let [, cour, formation, date, numero, publication] = matchInfo; newItem.court = cour; newItem.extra = formation; newItem.date = date; newItem.docketNumber = numero; newItem.reporter = publication; } else if ((matchInfo = title.match(/(Conseil d'État), (.*), ([0-9/]+), ([0-9]+)/i))) { // Conseil d'État sans indication de publication let [, , formation, date, numero] = matchInfo; newItem.court = "Conseil d'État"; newItem.extra = formation; newItem.date = date; newItem.docketNumber = numero; } else if ((matchInfo = title.match(/(Tribunal des Conflits), , ([0-9/]+), (.*)/i))) { // Tribunal des conflits (jp administrative) let [, , date, numero] = matchInfo; newItem.court = 'Tribunal des Conflits'; newItem.date = date; newItem.docketNumber = numero; } else if ((matchInfo = title.match(/(Cour administrative.*?), (.+?), ([0-9/]+), (.+?)(?:$|, (.+Lebon)$)/i))) { // Cours administratives d'appel avec publication // très rares cas sans publication let [, cour, formation, date, numero, publication] = matchInfo; newItem.court = cour; newItem.extra = formation; newItem.date = date; newItem.docketNumber = numero; if (publication) { newItem.reporter = publication; } } else if ((matchInfo = title.match(/(Tribunal Administratif.*), (.*chambre), ([0-9/]+), ([0-9]+)/i))) { // tribunaux administratifs avec chambre let [, cour, formation, date, numero] = matchInfo; newItem.court = cour; newItem.date = date; newItem.extra = formation; newItem.docketNumber = numero; } else if ((matchInfo = title.match(/(Tribunal Administratif|administratif.*), du (.*), ([0-9-]+), (.+Lebon)/))) { // tribunaux administratifs sans chambre avec publication let [, cour, date, numero, publication] = matchInfo; newItem.court = cour; newItem.date = date; newItem.docketNumber = numero; newItem.reporter = publication; } else if ((matchInfo = title.match(/(Cour de cassation), (.*), (.*), ([0-9-. ]+), (.*)/))) { // Note : présence d'autres cas pour les TA // Cour de cassation let [, nature, formation, date, numero, publication] = matchInfo; newItem.court = 'Cour de cassation'; if (nature) newItem.tags.push(nature); newItem.extra = formation; newItem.date = date; newItem.docketNumber = numero; newItem.reporter = publication; } else if ((matchInfo = title.match(/(Cour d'appel.*|Tribunal.*|Conseil.*|Chambre.*|Juridiction.*|Commission.*|Cour d'assises.*) de (.*), (.*), ([0-9/]+)/i))) { // cours d'appel et tribunaux // XXX Why take apart the court and location only to put them together? // Also this duplicates with the Tribunal Administratif... case. let [, cour, lieu, date, numero] = matchInfo; newItem.court = cour + ' de ' + lieu; newItem.date = date; newItem.docketNumber = numero; } else if ((matchInfo = title.match(/(Tribunal des conflits), (.*), (.*), ([0-9-. ]+), (.*)/i))) { // Tribunal des conflits - Base CASS let [, , nature, date, numero, publication] = matchInfo; newItem.court = 'Tribunal des conflits'; if (nature) newItem.tags.push(nature); newItem.date = date; newItem.docketNumber = numero; newItem.reporter = publication; } newItem.complete(); } function scrapeLegislation(doc, url) { var newItem = new Zotero.Item("statute"); var title = ZU.trimInternal(text(doc, '.chronolegi-label')).replace(/(?:«\s+)([^»]+)(?:\s+»)/, "$1"); if (!title) { title = ZU.trimInternal(text(doc, '.main-title, .main-title-light')); } Z.debug(title); newItem.title = title; newItem.url = url; let matchInfo; if ((matchInfo = title.match(/Article (\S+) - (Code.+)/i))) { // Codes let [, codeNumber, code] = matchInfo; newItem.code = code; newItem.codeNumber = codeNumber; } else if ((matchInfo = title.match(/(LOI|Décret)(?: n[o°](\s*[0-9-]+))? du (([0-9]+) (janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre) ([0-9z]+))/i))) { // Lois let [, , code, date] = matchInfo; newItem.code = code; // publicLawNumber non défini newItem.date = date; } else if ((matchInfo = title.match(/(Délibération) ([0-9-]+) du (([0-9]+) (.*) ([0-9]+))/i))) { // CNIL let [, nameOfAct, code, date] = matchInfo; newItem.nameOfAct = nameOfAct + ' de la Commission Nationale de l\'Informatique et des Libertés'; newItem.code = code; newItem.date = date; } newItem.complete(); } /** BEGIN TEST CASES **/ var testCases = [ { "type": "web", "url": "http://www.legifrance.gouv.fr/affichJuriConst.do?oldAction=rechJuriConst&idTexte=CONSTEXT000026458384&fastReqId=79382296&fastPos=1", "items": [ { "itemType": "case", "title": "Décision 2012-274 QPC - 28 septembre 2012 - Consorts G. [Calcul de l'indemnité de réduction due par le donataire ou le légataire d'une exploitation agricole en Alsace-Moselle] - Conformité", "creators": [], "date": "28 septembre 2012", "accessDate": "CURRENT_TIMESTAMP", "court": "Conseil constitutionnel", "docketNumber": "Décision 2012-274 QPC", "extra": "Consorts G. [Calcul de l'indemnité de réduction due par le donataire ou le légataire d'une exploitation agricole en Alsace-Moselle]", "libraryCatalog": "Légifrance", "url": "http://www.legifrance.gouv.fr/affichJuriConst.do?oldAction=rechJuriConst&idTexte=CONSTEXT000026458384&fastReqId=79382296&fastPos=1", "attachments": [ { "title": "Document en RTF", "mimeType": "application/rtf" } ], "tags": [], "notes": [], "seeAlso": [] } ] }, { "type": "web", "url": "http://www.legifrance.gouv.fr/affichJuriAdmin.do?oldAction=rechJuriAdmin&idTexte=CETATEXT000026845833&fastReqId=1276712822&fastPos=1", "items": [ { "itemType": "case", "title": "Tribunal des Conflits, , 17/12/2012, C3871", "creators": [], "date": "17/12/2012", "accessDate": "CURRENT_TIMESTAMP", "court": "Tribunal des Conflits", "docketNumber": "C3871", "libraryCatalog": "Légifrance", "url": "http://www.legifrance.gouv.fr/affichJuriAdmin.do?oldAction=rechJuriAdmin&idTexte=CETATEXT000026845833&fastReqId=1276712822&fastPos=1", "attachments": [ { "title": "Document en RTF", "mimeType": "application/rtf" } ], "tags": [], "notes": [], "seeAlso": [] } ] }, { "type": "web", "url": "http://www.legifrance.gouv.fr/affichJuriAdmin.do?oldAction=rechJuriAdmin&idTexte=CETATEXT000021750743&fastReqId=754258727&fastPos=1", "items": [ { "itemType": "case", "title": "Tribunal Administratif de Nantes, 5ème chambre, 17/12/2009, 0802183", "creators": [], "date": "17/12/2009", "accessDate": "CURRENT_TIMESTAMP", "court": "Tribunal Administratif de Nantes, 5ème chambre", "docketNumber": "0802183", "libraryCatalog": "Légifrance", "url": "http://www.legifrance.gouv.fr/affichJuriAdmin.do?oldAction=rechJuriAdmin&idTexte=CETATEXT000021750743&fastReqId=754258727&fastPos=1", "attachments": [ { "title": "Document en RTF", "mimeType": "application/rtf" } ], "tags": [], "notes": [], "seeAlso": [] } ] }, { "type": "web", "url": "http://www.legifrance.gouv.fr/affichJuriAdmin.do?oldAction=rechJuriAdmin&idTexte=CETATEXT000026925589&fastReqId=1836722737&fastPos=1", "items": [ { "itemType": "case", "title": "Cour administrative d'appel de Bordeaux, 2ème chambre (formation à 3), 08/01/2013, 11BX01796, Inédit au recueil Lebon", "creators": [], "date": "08/01/2013", "accessDate": "CURRENT_TIMESTAMP", "court": "Cour administrative d'appel de Bordeaux", "docketNumber": "11BX01796", "extra": "2ème chambre (formation à 3)", "libraryCatalog": "Légifrance", "reporter": "Inédit au recueil Lebon", "url": "http://www.legifrance.gouv.fr/affichJuriAdmin.do?oldAction=rechJuriAdmin&idTexte=CETATEXT000026925589&fastReqId=1836722737&fastPos=1", "attachments": [ { "title": "Document en RTF", "mimeType": "application/rtf" } ], "tags": [], "notes": [], "seeAlso": [] } ] }, { "type": "web", "url": "http://www.legifrance.gouv.fr/affichJuriJudi.do?oldAction=rechJuriJudi&idTexte=JURITEXT000026815591&fastReqId=673705389&fastPos=2", "items": [ { "itemType": "case", "title": "Cour de cassation, Chambre mixte, 21 décembre 2012, 12-15.063, Publié au bulletin", "creators": [], "date": "21 décembre 2012", "accessDate": "CURRENT_TIMESTAMP", "court": "Cour de cassation", "docketNumber": "12-15.063", "extra": "Chambre mixte", "libraryCatalog": "Légifrance", "reporter": "Publié au bulletin", "url": "http://www.legifrance.gouv.fr/affichJuriJudi.do?oldAction=rechJuriJudi&idTexte=JURITEXT000026815591&fastReqId=673705389&fastPos=2", "attachments": [ { "title": "Document en RTF", "mimeType": "application/rtf" } ], "tags": [ "Cour de cassation" ], "notes": [], "seeAlso": [] } ] }, { "type": "web", "url": "http://www.legifrance.gouv.fr/affichJuriJudi.do?oldAction=rechJuriJudi&idTexte=JURITEXT000026870360&fastReqId=1277546473&fastPos=1", "items": [ { "itemType": "case", "title": "Cour d'appel de Limoges, 27 décembre 2012, 11/01637", "creators": [], "date": "27 décembre 2012", "accessDate": "CURRENT_TIMESTAMP", "court": "Cour d'appel de Limoges", "docketNumber": "11/01637", "libraryCatalog": "Légifrance", "url": "http://www.legifrance.gouv.fr/affichJuriJudi.do?oldAction=rechJuriJudi&idTexte=JURITEXT000026870360&fastReqId=1277546473&fastPos=1", "attachments": [ { "title": "Document en RTF", "mimeType": "application/rtf" } ], "tags": [], "notes": [], "seeAlso": [] } ] }, { "type": "web", "url": "http://www.legifrance.gouv.fr/affichJuriJudi.do?oldAction=rechJuriJudi&idTexte=JURITEXT000020391875&fastReqId=1321603064&fastPos=9", "items": [ { "itemType": "case", "title": "Conseil de prud'hommes de Bordeaux, 13 janvier 2009, 04/00973", "creators": [], "date": "13 janvier 2009", "accessDate": "CURRENT_TIMESTAMP", "court": "Conseil de prud'hommes de Bordeaux", "docketNumber": "04/00973", "libraryCatalog": "Légifrance", "url": "http://www.legifrance.gouv.fr/affichJuriJudi.do?oldAction=rechJuriJudi&idTexte=JURITEXT000020391875&fastReqId=1321603064&fastPos=9", "attachments": [ { "title": "Document en RTF", "mimeType": "application/rtf" } ], "tags": [], "notes": [], "seeAlso": [] } ] }, { "type": "web", "url": "http://www.legifrance.gouv.fr/affichJuriJudi.do?oldAction=rechJuriJudi&idTexte=JURITEXT000026304473&fastReqId=2146436360&fastPos=11", "items": [ { "itemType": "case", "title": "Tribunal des conflits, civile, 14 mai 2012, 12-03.836, Publié au bulletin", "creators": [], "date": "14 mai 2012", "accessDate": "CURRENT_TIMESTAMP", "court": "Tribunal des conflits", "docketNumber": "12-03.836", "libraryCatalog": "Légifrance", "reporter": "Publié au bulletin", "url": "http://www.legifrance.gouv.fr/affichJuriJudi.do?oldAction=rechJuriJudi&idTexte=JURITEXT000026304473&fastReqId=2146436360&fastPos=11", "attachments": [ { "title": "Document en RTF", "mimeType": "application/rtf" } ], "tags": [ "civile" ], "notes": [], "seeAlso": [] } ] }, { "type": "web", "url": "http://www.legifrance.gouv.fr/affichCodeArticle.do?idArticle=LEGIARTI000006419320&cidTexte=LEGITEXT000006070721&dateTexte=20130114&fastPos=2&fastReqId=490815339&oldAction=rechCodeArticle", "items": [ { "itemType": "statute", "title": "Code civil - Article 16", "creators": [], "accessDate": "CURRENT_TIMESTAMP", "code": "Code civil", "codeNumber": "16", "libraryCatalog": "Légifrance", "attachments": [], "tags": [], "notes": [], "seeAlso": [] } ] }, { "type": "web", "url": "http://www.legifrance.gouv.fr/affichCnil.do?oldAction=rechExpCnil&id=CNILTEXT000017653865&fastReqId=131680152&fastPos=1", "items": [ { "itemType": "statute", "title": "Délibération de la Commission Nationale de l'Informatique et des Libertés", "nameOfAct": "Délibération de la Commission Nationale de l'Informatique et des Libertés", "creators": [], "date": "04 février 1997", "accessDate": "CURRENT_TIMESTAMP", "code": "97-008", "libraryCatalog": "Légifrance", "attachments": [], "tags": [], "notes": [], "seeAlso": [] } ] }, { "type": "web", "url": "http://www.legifrance.gouv.fr/affichJuriAdmin.do?oldAction=rechJuriAdmin&idTexte=CETATEXT000026910036&fastReqId=1849242527&fastPos=10", "items": [ { "itemType": "case", "title": "Conseil d'État, 1ère et 6ème sous-sections réunies, 07/01/2013, 343126", "creators": [], "date": "07/01/2013", "accessDate": "CURRENT_TIMESTAMP", "court": "Conseil d'État", "docketNumber": "343126", "extra": "1ère et 6ème sous-sections réunies", "libraryCatalog": "Légifrance", "url": "http://www.legifrance.gouv.fr/affichJuriAdmin.do?oldAction=rechJuriAdmin&idTexte=CETATEXT000026910036&fastReqId=1849242527&fastPos=10", "attachments": [ { "title": "Document en RTF", "mimeType": "application/rtf" } ], "tags": [], "notes": [], "seeAlso": [] } ] }, { "type": "web", "url": "http://www.legifrance.gouv.fr/affichJuriAdmin.do?oldAction=rechJuriAdmin&idTexte=CETATEXT000026910028&fastReqId=726489675&fastPos=15", "items": [ { "itemType": "case", "title": "Conseil d'État, 10ème sous-section jugeant seule, 28/12/2012, 331405, Inédit au recueil Lebon", "creators": [], "date": "28/12/2012", "accessDate": "CURRENT_TIMESTAMP", "court": "Conseil d'État", "docketNumber": "331405", "extra": "10ème sous-section jugeant seule", "libraryCatalog": "Légifrance", "reporter": "Inédit au recueil Lebon", "url": "http://www.legifrance.gouv.fr/affichJuriAdmin.do?oldAction=rechJuriAdmin&idTexte=CETATEXT000026910028&fastReqId=726489675&fastPos=15", "attachments": [ { "title": "Document en RTF", "mimeType": "application/rtf" } ], "tags": [], "notes": [], "seeAlso": [] } ] }, { "type": "web", "url": "http://www.legifrance.gouv.fr/affichTexte.do?cidTexte=JORFTEXT000026871286&fastPos=1&fastReqId=217867052&categorieLien=id&oldAction=rechTexte", "items": [ { "itemType": "statute", "title": "LOI n° 2012-1561 du 31 décembre 2012 relative à la représentation communale dans les communautés de communes et d'agglomération", "creators": [], "date": "31 décembre 2012", "accessDate": "CURRENT_TIMESTAMP", "code": "2012-1561", "libraryCatalog": "Légifrance", "attachments": [], "tags": [], "notes": [], "seeAlso": [] } ] }, { "type": "web", "url": "http://www.legifrance.gouv.fr/affichTexte.do?cidTexte=JORFTEXT000000320901&fastPos=4&fastReqId=702580559&categorieLien=id&oldAction=rechTexte", "items": [ { "itemType": "statute", "title": "Loi n°85-1483 du 31 décembre 1985 AUTORISANT L'APPROBATION D'UN ACCORD DE COOPERATION EN MATIERE ECONOMIQUE ET FINANCIERE ENTRE LE GOUVERNEMENT DE LA REPUBLIQUE FRANCAISE ET LE GOUVERNEMENT DE LA REPUBLIQUE GABONAISE,SIGNE A PARIS LE 14-04-1983", "creators": [], "date": "31 décembre 1985", "accessDate": "CURRENT_TIMESTAMP", "code": "85-1483", "libraryCatalog": "Légifrance", "attachments": [], "tags": [], "notes": [], "seeAlso": [] } ] }, { "type": "web", "url": "https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000042338158", "items": [ { "itemType": "statute", "nameOfAct": "Article L511-18 - Code de la construction et de l'habitation", "creators": [], "code": "Code de la construction et de l'habitation", "codeNumber": "L511-18", "url": "https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000042338158", "attachments": [], "tags": [], "notes": [], "seeAlso": [] } ] }, { "type": "web", "url": "https://www.legifrance.gouv.fr/search/all?tab_selection=all&searchField=ALL&query=corps&page=1&init=true", "items": "multiple" } ] /** END TEST CASES **/