diff --git a/builds/4chan-X.user.js b/builds/4chan-X.user.js index b85a6a6f7..780029d6c 100755 --- a/builds/4chan-X.user.js +++ b/builds/4chan-X.user.js @@ -4438,7 +4438,7 @@ }); }, node: function() { - var data, el, end, endNode, i, index, items, lIndex, len, length, link, links, node, range, result, saved, snapshot, space, test, text, _i, _len, _ref; + var data, el, end, endNode, i, index, items, length, link, links, node, range, result, saved, snapshot, space, test, _i, _len, _ref; if (this.isClone) { if (Conf['Embedding']) { @@ -4483,18 +4483,14 @@ test.lastIndex = 0; } range = Linkify.makeRange(node, endNode, index, length); - if (link = Linkify.regString.exec(text = range.toString())) { - if ((lIndex = link.index) && (len = lIndex + index) < node.data.length) { - range.setStart(node, len); - } - text = text.slice(0, lIndex); - links.push([range, text]); + if (link = Linkify.regString.exec(range.toString())) { + links.push(range); } break; } else { if (link = Linkify.regString.exec(result[0])) { range = Linkify.makeRange(node, node, index + link.index, length + link.index); - links.push([range, link]); + links.push(range); } } } @@ -4528,11 +4524,21 @@ range.setEnd(endNode, endOffset); return range; }, - makeLink: function(_arg) { - var a, range, text; + makeLink: function(range) { + var a, check, text; - range = _arg[0], text = _arg[1]; - text; + text = range.toString(); + if (/[(\[{<]/.test(text.charAt(0))) { + if (check = /[\)\]}>]/.test(text.charAt(text.length - 1))) { + if (!(range.endOffset < 1)) { + range.setEnd(range.endContainer, range.endOffset - 1); + } + } + text = check ? text.slice(1, -1) : text.slice(1); + if (range.startOffset !== range.startContainer.data.length) { + range.setStart(range.startContainer, range.startOffset + 1); + } + } text = text.contains(':') ? text : (text.contains('@') ? 'mailto:' : 'http://') + text; a = $.el('a', { className: 'linkify', diff --git a/builds/crx/script.js b/builds/crx/script.js index b979e6165..60ec0a5d2 100755 --- a/builds/crx/script.js +++ b/builds/crx/script.js @@ -4444,7 +4444,7 @@ }); }, node: function() { - var data, el, end, endNode, i, index, items, lIndex, len, length, link, links, node, range, result, saved, snapshot, space, test, text, _i, _len, _ref; + var data, el, end, endNode, i, index, items, length, link, links, node, range, result, saved, snapshot, space, test, _i, _len, _ref; if (this.isClone) { if (Conf['Embedding']) { @@ -4489,18 +4489,14 @@ test.lastIndex = 0; } range = Linkify.makeRange(node, endNode, index, length); - if (link = Linkify.regString.exec(text = range.toString())) { - if ((lIndex = link.index) && (len = lIndex + index) < node.data.length) { - range.setStart(node, len); - } - text = text.slice(0, lIndex); - links.push([range, text]); + if (link = Linkify.regString.exec(range.toString())) { + links.push(range); } break; } else { if (link = Linkify.regString.exec(result[0])) { range = Linkify.makeRange(node, node, index + link.index, length + link.index); - links.push([range, link]); + links.push(range); } } } @@ -4534,11 +4530,21 @@ range.setEnd(endNode, endOffset); return range; }, - makeLink: function(_arg) { - var a, range, text; + makeLink: function(range) { + var a, check, text; - range = _arg[0], text = _arg[1]; - text; + text = range.toString(); + if (/[(\[{<]/.test(text.charAt(0))) { + if (check = /[\)\]}>]/.test(text.charAt(text.length - 1))) { + if (!(range.endOffset < 1)) { + range.setEnd(range.endContainer, range.endOffset - 1); + } + } + text = check ? text.slice(1, -1) : text.slice(1); + if (range.startOffset !== range.startContainer.data.length) { + range.setStart(range.startContainer, range.startOffset + 1); + } + } text = text.contains(':') ? text : (text.contains('@') ? 'mailto:' : 'http://') + text; a = $.el('a', { className: 'linkify', diff --git a/src/Linkification/Linkify.coffee b/src/Linkification/Linkify.coffee index ea237719e..c2819ac0e 100755 --- a/src/Linkification/Linkify.coffee +++ b/src/Linkification/Linkify.coffee @@ -75,17 +75,13 @@ Linkify = test.lastIndex = 0 if length is endNode.data.length range = Linkify.makeRange node, endNode, index, length - if link = Linkify.regString.exec text = range.toString() - if (lIndex = link.index) and (len = lIndex + index) < node.data.length - range.setStart node, len - text = text[...lIndex] - links.push [range, text] + links.push range if link = Linkify.regString.exec range.toString() break else if link = Linkify.regString.exec result[0] range = Linkify.makeRange node, node, index + link.index, length + link.index - links.push [range, link] + links.push range for range in links.reverse() @nodes.links.push Linkify.makeLink range, @ @@ -103,12 +99,25 @@ Linkify = makeRange: (startNode, endNode, startOffset, endOffset) -> range = document.createRange(); - range.setStart startNode, startOffset - range.setEnd endNode, endOffset + range.setStart startNode, startOffset + range.setEnd endNode, endOffset range - makeLink: ([range, text]) -> - text + makeLink: (range) -> + text = range.toString() + + # Clean brackets + if /[(\[{<]/.test text.charAt 0 + if check = /[\)\]}>]/.test text.charAt text.length - 1 + unless range.endOffset < 1 + range.setEnd range.endContainer, range.endOffset - 1 + text = if check + text.slice 1, -1 + else + text.slice 1 + unless range.startOffset is range.startContainer.data.length + range.setStart range.startContainer, range.startOffset + 1 + text = if text.contains ':' text