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="">