From 8429c60d30738d673adcb6327592faf55d2bbc9a Mon Sep 17 00:00:00 2001 From: Zixaphir Date: Sat, 17 Aug 2013 02:40:00 -0700 Subject: [PATCH] Some Linkify refactoring --- LICENSE | 2 +- builds/4chan-X.user.js | 41 +++++++++++++++----------------- builds/crx/script.js | 41 +++++++++++++++----------------- src/Linkification/Linkify.coffee | 38 ++++++++++++++--------------- 4 files changed, 58 insertions(+), 64 deletions(-) diff --git a/LICENSE b/LICENSE index cb24d7f28..adf1a3246 100755 --- a/LICENSE +++ b/LICENSE @@ -1,5 +1,5 @@ /* -* 4chan X - Version 1.2.32 - 2013-08-16 +* 4chan X - Version 1.2.32 - 2013-08-17 * * Licensed under the MIT license. * https://github.com/seaweedchan/4chan-x/blob/master/LICENSE diff --git a/builds/4chan-X.user.js b/builds/4chan-X.user.js index 8cb9d7227..42d8b6f90 100644 --- a/builds/4chan-X.user.js +++ b/builds/4chan-X.user.js @@ -19,7 +19,7 @@ // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwAgMAAAAqbBEUAAAACVBMVEUAAGcAAABmzDNZt9VtAAAAAXRSTlMAQObYZgAAAHFJREFUKFOt0LENACEIBdBv4Qju4wgWanEj3D6OcIVMKaitYHEU/jwTCQj8W75kiVCSBvdQ5/AvfVHBin11BgdRq3ysBgfwBDRrj3MCIA+oAQaku/Q1cNctrAmyDl577tOThYt/Y1RBM4DgOHzM0HFTAyLukH/cmRnqAAAAAElFTkSuQmCC // ==/UserScript== /* -* 4chan X - Version 1.2.32 - 2013-08-16 +* 4chan X - Version 1.2.32 - 2013-08-17 * * Licensed under the MIT license. * https://github.com/seaweedchan/4chan-x/blob/master/LICENSE @@ -4432,7 +4432,7 @@ }); }, node: function() { - var data, el, end, endNode, i, index, items, length, link, links, node, range, result, saved, snapshot, space, test, _i, _len, _ref; + var data, el, end, endNode, i, index, items, length, link, links, node, result, saved, snapshot, space, test, word, _i, _len, _ref; if (this.isClone) { if (Conf['Embedding']) { @@ -4460,47 +4460,44 @@ while (result = test.exec(data)) { index = result.index; endNode = node; - if ((length = index + result[0].length) === data.length) { + word = result[0]; + if ((length = index + word.length) === data.length) { + test.lastIndex = 0; while ((saved = snapshot.snapshotItem(i++))) { if (saved.nodeName === 'BR') { break; } endNode = saved; - length = saved.data.length; - if (end = space.exec(saved.data)) { + data = saved.data; + word += data; + length = data.length; + if (end = space.exec(data)) { test.lastIndex = length = end.index; i--; break; } } - if (length === endNode.data.length) { - test.lastIndex = 0; - } - range = Linkify.makeRange(node, endNode, index, length); - if (link = Linkify.regString.exec(range.toString())) { - links.push(range); - } + } + if (Linkify.regString.exec(word)) { + links.push(Linkify.makeRange(node, endNode, index, length)); + } + if (!(test.lastIndex || node === endNode)) { break; - } else { - if (link = Linkify.regString.exec(result[0])) { - range = Linkify.makeRange(node, node, index, length); - links.push(range); - } } } } _ref = links.reverse(); for (_i = 0, _len = _ref.length; _i < _len; _i++) { - range = _ref[_i]; - this.nodes.links.push(Linkify.makeLink(range, this)); + link = _ref[_i]; + this.nodes.links.push(Linkify.makeLink(link, this)); } if (!(Conf['Embedding'] || Conf['Link Title'])) { return; } - items = this.nodes.links; + links = this.nodes.links; i = 0; - while (range = items[i++]) { - if (data = Linkify.services(range)) { + while (link = links[i++]) { + if (data = Linkify.services(link)) { if (Conf['Embedding']) { Linkify.embed(data); } diff --git a/builds/crx/script.js b/builds/crx/script.js index c0f0f3dd5..0827b942c 100644 --- a/builds/crx/script.js +++ b/builds/crx/script.js @@ -1,6 +1,6 @@ // Generated by CoffeeScript /* -* 4chan X - Version 1.2.32 - 2013-08-16 +* 4chan X - Version 1.2.32 - 2013-08-17 * * Licensed under the MIT license. * https://github.com/seaweedchan/4chan-x/blob/master/LICENSE @@ -4441,7 +4441,7 @@ }); }, node: function() { - var data, el, end, endNode, i, index, items, length, link, links, node, range, result, saved, snapshot, space, test, _i, _len, _ref; + var data, el, end, endNode, i, index, items, length, link, links, node, result, saved, snapshot, space, test, word, _i, _len, _ref; if (this.isClone) { if (Conf['Embedding']) { @@ -4469,47 +4469,44 @@ while (result = test.exec(data)) { index = result.index; endNode = node; - if ((length = index + result[0].length) === data.length) { + word = result[0]; + if ((length = index + word.length) === data.length) { + test.lastIndex = 0; while ((saved = snapshot.snapshotItem(i++))) { if (saved.nodeName === 'BR') { break; } endNode = saved; - length = saved.data.length; - if (end = space.exec(saved.data)) { + data = saved.data; + word += data; + length = data.length; + if (end = space.exec(data)) { test.lastIndex = length = end.index; i--; break; } } - if (length === endNode.data.length) { - test.lastIndex = 0; - } - range = Linkify.makeRange(node, endNode, index, length); - if (link = Linkify.regString.exec(range.toString())) { - links.push(range); - } + } + if (Linkify.regString.exec(word)) { + links.push(Linkify.makeRange(node, endNode, index, length)); + } + if (!(test.lastIndex || node === endNode)) { break; - } else { - if (link = Linkify.regString.exec(result[0])) { - range = Linkify.makeRange(node, node, index, length); - links.push(range); - } } } } _ref = links.reverse(); for (_i = 0, _len = _ref.length; _i < _len; _i++) { - range = _ref[_i]; - this.nodes.links.push(Linkify.makeLink(range, this)); + link = _ref[_i]; + this.nodes.links.push(Linkify.makeLink(link, this)); } if (!(Conf['Embedding'] || Conf['Link Title'])) { return; } - items = this.nodes.links; + links = this.nodes.links; i = 0; - while (range = items[i++]) { - if (data = Linkify.services(range)) { + while (link = links[i++]) { + if (data = Linkify.services(link)) { if (Conf['Embedding']) { Linkify.embed(data); } diff --git a/src/Linkification/Linkify.coffee b/src/Linkification/Linkify.coffee index 38d9380d2..fe83936ad 100755 --- a/src/Linkification/Linkify.coffee +++ b/src/Linkification/Linkify.coffee @@ -16,7 +16,7 @@ Linkify = | # IPv4 Addresses [\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3} - | + | # E-mails [-\w\d.@]+@[a-z\d.-]+\.[a-z\d] )///i @@ -55,40 +55,40 @@ Linkify = while result = test.exec data {index} = result endNode = node + word = result[0] # End of node, not necessarily end of space-delimited string - if (length = index + result[0].length) is data.length + if (length = index + word.length) is data.length + test.lastIndex = 0 while (saved = snapshot.snapshotItem i++) - break if saved.nodeName is 'BR' + if saved.nodeName is 'BR' + break - endNode = saved - {length} = saved.data + endNode = saved + {data} = saved + word += data + {length} = data - if end = space.exec saved.data + if end = space.exec data # Set our snapshot and regex to start on this node at this position when the loop resumes test.lastIndex = length = end.index i-- break - test.lastIndex = 0 if length is endNode.data.length - range = Linkify.makeRange node, endNode, index, length - links.push range if link = Linkify.regString.exec range.toString() - break + if Linkify.regString.exec word + links.push Linkify.makeRange node, endNode, index, length - else - if link = Linkify.regString.exec result[0] - range = Linkify.makeRange node, node, index, length - links.push range + break unless test.lastIndex or node is endNode - for range in links.reverse() - @nodes.links.push Linkify.makeLink range, @ + for link in links.reverse() + @nodes.links.push Linkify.makeLink link, @ return unless Conf['Embedding'] or Conf['Link Title'] - items = @nodes.links + {links} = @nodes i = 0 - while range = items[i++] - if data = Linkify.services range + while link = links[i++] + if data = Linkify.services link Linkify.embed data if Conf['Embedding'] Linkify.title data if Conf['Link Title']