Un peu de fun avec mon ami Greasemonkey, pour rebondir sur le code de Guillaume Adreani (http://userscripts.org/scripts/show/156097) qui a beaucoup de qualités, notamment conceptuelle mais qui risque de casser le DOM et de faire quirker.
A défaut de getTextNodes, un peu d’xPath, et à défaut de liste des .rcv, un scrap à la volée et des regexps.
// ==UserScript== // @name Habett Codlink // @namespace le // @include http://* // @include https://* // @version 1.3 // @grant GM_xmlhttpRequest // @grant GM_getValue // @grant GM_setValue // ==/UserScript== var noxx = document.evaluate('//body/descendant::*[contains(text(),"code") or contains(text(),"Code")]'
,document,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null);
var nodds = new Array(); for (i=0; i<noxx.snapshotLength; i++) { na = noxx.snapshotItem(i).nodeName.toLowerCase(); if ((na != 'script') && (na != 'a')) { nodds.push(noxx.snapshotItem(i)); } } var safr = new RegExp('\\W','g'); var kh = new Object(); if (GM_getValue('cli')) { kh = JSON.parse(GM_getValue('cli')); rere(); } else { GM_xmlhttpRequest({ method: "GET", url: "http://www.legifrance.gouv.fr/initRechCodeArticle.do", onload: function(response) { var cl = new DOMParser().parseFromString(response.responseText, "text/html"); var options = cl.getElementsByTagName('select')[0].getElementsByTagName('option'); for (var i=1; i<options.length; i++) { var cod = options[i].getAttribute('title').replace(safr,'.'); kh[cod]=options[i].getAttribute('value'); } GM_setValue('cli',JSON.stringify(kh)); rere(); } }); } function rere() { for (var k in kh) { var re = new RegExp('((\\d[\\d\\.\\-]{0,9})[^<>]*? du '+k+')','gi'); var rf = new RegExp('((([LRD]+)\\W*?(\\d[0-9\\.\\-]{0,9}))[^<>]*? du '+k+')','gi'); for (var j=0; j<nodds.length; j++) { nodds[j].innerHTML = nodds[j].innerHTML.replace( rf,'<a style="color: red" href="http://www.legifrance.gouv.fr/rechCodeArticle.do?champCode='
+kh[k]+'&champNumArticle=\$3$4">\$1</a>' ); nodds[j].innerHTML = nodds[j].innerHTML.replace( re,'<a style="color: red" href="http://www.legifrance.gouv.fr/rechCodeArticle.do?champCode='
+kh[k]+'&champNumArticle=\$2">\$1</a>' ); } } }
<noxx.snapshotlength; i++)="" {<br=""><options.length; i++)="" {<br=""><nodds.length; j++)="" {<br="">