This commit is contained in:
Jordan Bates 2013-08-13 18:20:00 -07:00
commit 5ce2c53f14
3 changed files with 55 additions and 34 deletions

View File

@ -4438,7 +4438,7 @@
}); });
}, },
node: function() { 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 (this.isClone) {
if (Conf['Embedding']) { if (Conf['Embedding']) {
@ -4483,18 +4483,14 @@
test.lastIndex = 0; test.lastIndex = 0;
} }
range = Linkify.makeRange(node, endNode, index, length); range = Linkify.makeRange(node, endNode, index, length);
if (link = Linkify.regString.exec(text = range.toString())) { if (link = Linkify.regString.exec(range.toString())) {
if ((lIndex = link.index) && (len = lIndex + index) < node.data.length) { links.push(range);
range.setStart(node, len);
}
text = text.slice(0, lIndex);
links.push([range, text]);
} }
break; break;
} else { } else {
if (link = Linkify.regString.exec(result[0])) { if (link = Linkify.regString.exec(result[0])) {
range = Linkify.makeRange(node, node, index + link.index, length + link.index); 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); range.setEnd(endNode, endOffset);
return range; return range;
}, },
makeLink: function(_arg) { makeLink: function(range) {
var a, range, text; var a, check, text;
range = _arg[0], text = _arg[1]; text = range.toString();
text; 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; text = text.contains(':') ? text : (text.contains('@') ? 'mailto:' : 'http://') + text;
a = $.el('a', { a = $.el('a', {
className: 'linkify', className: 'linkify',

View File

@ -4444,7 +4444,7 @@
}); });
}, },
node: function() { 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 (this.isClone) {
if (Conf['Embedding']) { if (Conf['Embedding']) {
@ -4489,18 +4489,14 @@
test.lastIndex = 0; test.lastIndex = 0;
} }
range = Linkify.makeRange(node, endNode, index, length); range = Linkify.makeRange(node, endNode, index, length);
if (link = Linkify.regString.exec(text = range.toString())) { if (link = Linkify.regString.exec(range.toString())) {
if ((lIndex = link.index) && (len = lIndex + index) < node.data.length) { links.push(range);
range.setStart(node, len);
}
text = text.slice(0, lIndex);
links.push([range, text]);
} }
break; break;
} else { } else {
if (link = Linkify.regString.exec(result[0])) { if (link = Linkify.regString.exec(result[0])) {
range = Linkify.makeRange(node, node, index + link.index, length + link.index); 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); range.setEnd(endNode, endOffset);
return range; return range;
}, },
makeLink: function(_arg) { makeLink: function(range) {
var a, range, text; var a, check, text;
range = _arg[0], text = _arg[1]; text = range.toString();
text; 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; text = text.contains(':') ? text : (text.contains('@') ? 'mailto:' : 'http://') + text;
a = $.el('a', { a = $.el('a', {
className: 'linkify', className: 'linkify',

View File

@ -75,17 +75,13 @@ Linkify =
test.lastIndex = 0 if length is endNode.data.length test.lastIndex = 0 if length is endNode.data.length
range = Linkify.makeRange node, endNode, index, length range = Linkify.makeRange node, endNode, index, length
if link = Linkify.regString.exec text = range.toString() links.push range if link = Linkify.regString.exec range.toString()
if (lIndex = link.index) and (len = lIndex + index) < node.data.length
range.setStart node, len
text = text[...lIndex]
links.push [range, text]
break break
else else
if link = Linkify.regString.exec result[0] if link = Linkify.regString.exec result[0]
range = Linkify.makeRange node, node, index + link.index, length + link.index range = Linkify.makeRange node, node, index + link.index, length + link.index
links.push [range, link] links.push range
for range in links.reverse() for range in links.reverse()
@nodes.links.push Linkify.makeLink range, @ @nodes.links.push Linkify.makeLink range, @
@ -103,12 +99,25 @@ Linkify =
makeRange: (startNode, endNode, startOffset, endOffset) -> makeRange: (startNode, endNode, startOffset, endOffset) ->
range = document.createRange(); range = document.createRange();
range.setStart startNode, startOffset range.setStart startNode, startOffset
range.setEnd endNode, endOffset range.setEnd endNode, endOffset
range range
makeLink: ([range, text]) -> makeLink: (range) ->
text 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 = text =
if text.contains ':' if text.contains ':'
text text