リンク化

    @@ -6,43 +6,45 @@ */ -// Rangeが使えなければ意味が無いので、ここで一旦判定をしています。 -if (!document.createRange) - return window.alert("このスクリプトを実行するために必要なAPIが使用できません。"); - -var range = document.createRange(); - -(function(currentNode){ - var childs = currentNode.childNodes; - var pattern= /h?t?tp(s?:\/\/(?:[\w-]+|[^ -~。-゚]+)\.[a-zA-Z]{2,4}[^\s ]*)/g; - var regRes = []; - - for (var i = 0, l = childs.length; i < l; i++) { - var self = childs[i]; - if (self.childNodes && self.childNodes.length) { // 子ノードがいる場合は再帰 - arguments.callee(self); +(function(){ + // Rangeが使えなければ意味が無いので、ここで一旦判定をしています。 + if (!document.createRange) + return window.alert("このスクリプトを実行するために必要なAPIが使用できません。"); + + var range = document.createRange(); + + (function(currentNode){ + var childs = currentNode.childNodes; + var pattern= /h?t?tp(s?:\/\/(?:[\w-]+|[^ -~。-゚]+)\.[a-zA-Z]{2,4}[^\s ]*)/g; + var regRes = []; + + for (var i = 0, l = childs.length; i < l; i++) { + var self = childs[i]; + if (self.childNodes && self.childNodes.length) { // 子ノードがいる場合は再帰 + arguments.callee(self); + } + + if (self.nodeType !== 3) continue; // テキストノードでなければ次へ + + var matchStack = []; + + while (regRes = pattern.exec(self.textContent)) { // マッチがなくなるまでループしてスタック + matchStack.push({ + "mUrl" : "http" + regRes[1], + "pStart" : regRes.index, + "pEnd" : pattern.lastIndex + }); + } + while (matchStack.length >= 1) { // 後ろから1つずつ取り出して変更を適用 + var item = matchStack.pop(); + var a = document.createElement("a"); + a.href = item.mUrl; + range.setStart(self, item.pStart); + range.setEnd(self, item.pEnd); + range.surroundContents(a); + } } + })(document.body); - if (self.nodeType !== 3) continue; // テキストノードでなければ次へ - - var matchStack = []; - - while (regRes = pattern.exec(self.textContent)) { // マッチがなくなるまでループしてスタック - matchStack.push({ - "mUrl" : "http" + regRes[1], - "pStart" : regRes.index, - "pEnd" : pattern.lastIndex - }); - } - while (matchStack.length >= 1) { // 後ろから1つずつ取り出して変更を適用 - var item = matchStack.pop(); - var a = document.createElement("a"); - a.href = item.mUrl; - range.setStart(self, item.pStart); - range.setEnd(self, item.pEnd); - range.surroundContents(a); - } - } -})(document.body); - -range.detach(); + range.detach(); +})();
  • /*
     * @title リンク化
     * @description httpやttpやtpなリンクのないURLにリンクを付ける(どこにでもあるやつだけど、標準技術のみで実装している自己満足ver)
     * @include http://*
     * @license NYSL
     */
    
    
    (function(){
       // Rangeが使えなければ意味が無いので、ここで一旦判定をしています。
      if (!document.createRange)
        return window.alert("このスクリプトを実行するために必要なAPIが使用できません。");
    
      var range = document.createRange();
    
      (function(currentNode){
        var childs = currentNode.childNodes;
        var pattern= /h?t?tp(s?:\/\/(?:[\w-]+|[^ -~。-゚]+)\.[a-zA-Z]{2,4}[^\s ]*)/g;
        var regRes = [];
        
        for (var i = 0, l = childs.length; i < l; i++) {
          var self = childs[i];
          if (self.childNodes && self.childNodes.length) { // 子ノードがいる場合は再帰
            arguments.callee(self);
          }
    
          if (self.nodeType !== 3) continue; // テキストノードでなければ次へ
    
          var matchStack = [];
    
          while (regRes = pattern.exec(self.textContent)) { // マッチがなくなるまでループしてスタック
            matchStack.push({
              "mUrl"   : "http" + regRes[1],
              "pStart" : regRes.index,
              "pEnd"   : pattern.lastIndex
            });
          }
          while (matchStack.length >= 1) { // 後ろから1つずつ取り出して変更を適用
            var item = matchStack.pop();
            var a = document.createElement("a");
            a.href = item.mUrl;
            range.setStart(self, item.pStart);
            range.setEnd(self, item.pEnd);
            range.surroundContents(a);
          }
        }
      })(document.body);
    
      range.detach();
    })();
    
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。

History

  1. 2016/10/09 02:11:46 - 2016-10-09
  2. 2016/10/09 00:21:01 - 2016-10-09
  3. 2016/10/09 00:20:24 - 2016-10-09
  4. 2016/10/06 20:50:44 - 2016-10-06
  5. 2016/10/06 20:49:13 - 2016-10-06
  6. 2016/03/12 13:34:43 - 2016-03-12
  7. 2016/03/12 13:31:01 - 2016-03-12
  8. 2013/12/17 21:48:36 - 2013-12-17
  9. 2013/12/17 21:41:23 - 2013-12-17
  10. 2013/12/17 21:40:51 - 2013-12-17
  11. 2013/12/15 04:41:41 - 2013-12-15
  12. 2013/12/15 04:39:19 - 2013-12-15
  13. 2013/07/26 22:12:08 - 2013-07-26
  14. 2013/04/23 02:20:03 - 2013-04-23
  15. 2013/04/22 10:19:35 - 2013-04-22
  16. 2013/04/22 10:18:02 - 2013-04-22
  17. 2013/04/22 10:15:27 - 2013-04-22