Some Linkify refactoring

This commit is contained in:
Zixaphir 2013-08-17 02:40:00 -07:00
parent 36b2c78281
commit 8429c60d30
4 changed files with 58 additions and 64 deletions

View File

@ -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. * Licensed under the MIT license.
* https://github.com/seaweedchan/4chan-x/blob/master/LICENSE * https://github.com/seaweedchan/4chan-x/blob/master/LICENSE

View File

@ -19,7 +19,7 @@
// @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwAgMAAAAqbBEUAAAACVBMVEUAAGcAAABmzDNZt9VtAAAAAXRSTlMAQObYZgAAAHFJREFUKFOt0LENACEIBdBv4Qju4wgWanEj3D6OcIVMKaitYHEU/jwTCQj8W75kiVCSBvdQ5/AvfVHBin11BgdRq3ysBgfwBDRrj3MCIA+oAQaku/Q1cNctrAmyDl577tOThYt/Y1RBM4DgOHzM0HFTAyLukH/cmRnqAAAAAElFTkSuQmCC // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwAgMAAAAqbBEUAAAACVBMVEUAAGcAAABmzDNZt9VtAAAAAXRSTlMAQObYZgAAAHFJREFUKFOt0LENACEIBdBv4Qju4wgWanEj3D6OcIVMKaitYHEU/jwTCQj8W75kiVCSBvdQ5/AvfVHBin11BgdRq3ysBgfwBDRrj3MCIA+oAQaku/Q1cNctrAmyDl577tOThYt/Y1RBM4DgOHzM0HFTAyLukH/cmRnqAAAAAElFTkSuQmCC
// ==/UserScript== // ==/UserScript==
/* /*
* 4chan X - Version 1.2.32 - 2013-08-16 * 4chan X - Version 1.2.32 - 2013-08-17
* *
* Licensed under the MIT license. * Licensed under the MIT license.
* https://github.com/seaweedchan/4chan-x/blob/master/LICENSE * https://github.com/seaweedchan/4chan-x/blob/master/LICENSE
@ -4432,7 +4432,7 @@
}); });
}, },
node: function() { 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 (this.isClone) {
if (Conf['Embedding']) { if (Conf['Embedding']) {
@ -4460,47 +4460,44 @@
while (result = test.exec(data)) { while (result = test.exec(data)) {
index = result.index; index = result.index;
endNode = node; 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++))) { while ((saved = snapshot.snapshotItem(i++))) {
if (saved.nodeName === 'BR') { if (saved.nodeName === 'BR') {
break; break;
} }
endNode = saved; endNode = saved;
length = saved.data.length; data = saved.data;
if (end = space.exec(saved.data)) { word += data;
length = data.length;
if (end = space.exec(data)) {
test.lastIndex = length = end.index; test.lastIndex = length = end.index;
i--; i--;
break; break;
} }
} }
if (length === endNode.data.length) { }
test.lastIndex = 0; if (Linkify.regString.exec(word)) {
} links.push(Linkify.makeRange(node, endNode, index, length));
range = Linkify.makeRange(node, endNode, index, length); }
if (link = Linkify.regString.exec(range.toString())) { if (!(test.lastIndex || node === endNode)) {
links.push(range);
}
break; break;
} else {
if (link = Linkify.regString.exec(result[0])) {
range = Linkify.makeRange(node, node, index, length);
links.push(range);
}
} }
} }
} }
_ref = links.reverse(); _ref = links.reverse();
for (_i = 0, _len = _ref.length; _i < _len; _i++) { for (_i = 0, _len = _ref.length; _i < _len; _i++) {
range = _ref[_i]; link = _ref[_i];
this.nodes.links.push(Linkify.makeLink(range, this)); this.nodes.links.push(Linkify.makeLink(link, this));
} }
if (!(Conf['Embedding'] || Conf['Link Title'])) { if (!(Conf['Embedding'] || Conf['Link Title'])) {
return; return;
} }
items = this.nodes.links; links = this.nodes.links;
i = 0; i = 0;
while (range = items[i++]) { while (link = links[i++]) {
if (data = Linkify.services(range)) { if (data = Linkify.services(link)) {
if (Conf['Embedding']) { if (Conf['Embedding']) {
Linkify.embed(data); Linkify.embed(data);
} }

View File

@ -1,6 +1,6 @@
// Generated by CoffeeScript // 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. * Licensed under the MIT license.
* https://github.com/seaweedchan/4chan-x/blob/master/LICENSE * https://github.com/seaweedchan/4chan-x/blob/master/LICENSE
@ -4441,7 +4441,7 @@
}); });
}, },
node: function() { 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 (this.isClone) {
if (Conf['Embedding']) { if (Conf['Embedding']) {
@ -4469,47 +4469,44 @@
while (result = test.exec(data)) { while (result = test.exec(data)) {
index = result.index; index = result.index;
endNode = node; 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++))) { while ((saved = snapshot.snapshotItem(i++))) {
if (saved.nodeName === 'BR') { if (saved.nodeName === 'BR') {
break; break;
} }
endNode = saved; endNode = saved;
length = saved.data.length; data = saved.data;
if (end = space.exec(saved.data)) { word += data;
length = data.length;
if (end = space.exec(data)) {
test.lastIndex = length = end.index; test.lastIndex = length = end.index;
i--; i--;
break; break;
} }
} }
if (length === endNode.data.length) { }
test.lastIndex = 0; if (Linkify.regString.exec(word)) {
} links.push(Linkify.makeRange(node, endNode, index, length));
range = Linkify.makeRange(node, endNode, index, length); }
if (link = Linkify.regString.exec(range.toString())) { if (!(test.lastIndex || node === endNode)) {
links.push(range);
}
break; break;
} else {
if (link = Linkify.regString.exec(result[0])) {
range = Linkify.makeRange(node, node, index, length);
links.push(range);
}
} }
} }
} }
_ref = links.reverse(); _ref = links.reverse();
for (_i = 0, _len = _ref.length; _i < _len; _i++) { for (_i = 0, _len = _ref.length; _i < _len; _i++) {
range = _ref[_i]; link = _ref[_i];
this.nodes.links.push(Linkify.makeLink(range, this)); this.nodes.links.push(Linkify.makeLink(link, this));
} }
if (!(Conf['Embedding'] || Conf['Link Title'])) { if (!(Conf['Embedding'] || Conf['Link Title'])) {
return; return;
} }
items = this.nodes.links; links = this.nodes.links;
i = 0; i = 0;
while (range = items[i++]) { while (link = links[i++]) {
if (data = Linkify.services(range)) { if (data = Linkify.services(link)) {
if (Conf['Embedding']) { if (Conf['Embedding']) {
Linkify.embed(data); Linkify.embed(data);
} }

View File

@ -16,7 +16,7 @@ Linkify =
| |
# IPv4 Addresses # IPv4 Addresses
[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3} [\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}
| |
# E-mails # E-mails
[-\w\d.@]+@[a-z\d.-]+\.[a-z\d] [-\w\d.@]+@[a-z\d.-]+\.[a-z\d]
)///i )///i
@ -55,40 +55,40 @@ Linkify =
while result = test.exec data while result = test.exec data
{index} = result {index} = result
endNode = node endNode = node
word = result[0]
# End of node, not necessarily end of space-delimited string # 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++) while (saved = snapshot.snapshotItem i++)
break if saved.nodeName is 'BR' if saved.nodeName is 'BR'
break
endNode = saved endNode = saved
{length} = saved.data {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 # Set our snapshot and regex to start on this node at this position when the loop resumes
test.lastIndex = length = end.index test.lastIndex = length = end.index
i-- i--
break break
test.lastIndex = 0 if length is endNode.data.length if Linkify.regString.exec word
range = Linkify.makeRange node, endNode, index, length links.push Linkify.makeRange node, endNode, index, length
links.push range if link = Linkify.regString.exec range.toString()
break
else break unless test.lastIndex or node is endNode
if link = Linkify.regString.exec result[0]
range = Linkify.makeRange node, node, index, length
links.push range
for range in links.reverse() for link in links.reverse()
@nodes.links.push Linkify.makeLink range, @ @nodes.links.push Linkify.makeLink link, @
return unless Conf['Embedding'] or Conf['Link Title'] return unless Conf['Embedding'] or Conf['Link Title']
items = @nodes.links {links} = @nodes
i = 0 i = 0
while range = items[i++] while link = links[i++]
if data = Linkify.services range if data = Linkify.services link
Linkify.embed data if Conf['Embedding'] Linkify.embed data if Conf['Embedding']
Linkify.title data if Conf['Link Title'] Linkify.title data if Conf['Link Title']