GM Fight

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

 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *