Fix multiple links in the same text node
This commit is contained in:
parent
e4b764abd4
commit
291692f847
@ -6607,7 +6607,7 @@
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
node: function() {
|
node: function() {
|
||||||
var data, embedder, i, len, match, node, range, snapshot, _i, _j, _len, _len1, _ref, _ref1;
|
var data, embedder, i, len, node, range, snapshot, _i, _j, _len, _len1, _ref, _ref1;
|
||||||
|
|
||||||
if (this.isClone && Conf['Embedding']) {
|
if (this.isClone && Conf['Embedding']) {
|
||||||
_ref = $$('.embedder', this.nodes.comment);
|
_ref = $$('.embedder', this.nodes.comment);
|
||||||
@ -6623,8 +6623,9 @@
|
|||||||
while (++i < len) {
|
while (++i < len) {
|
||||||
node = snapshot.snapshotItem(i);
|
node = snapshot.snapshotItem(i);
|
||||||
data = node.data;
|
data = node.data;
|
||||||
if (match = data.match(Linkify.regString)) {
|
if (Linkify.regString.test(data)) {
|
||||||
Linkify.gatherLinks(match, node, this);
|
Linkify.regString.lastIndex = 0;
|
||||||
|
Linkify.gatherLinks(node, this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!(Conf['Embedding'] || Conf['Link Title'])) {
|
if (!(Conf['Embedding'] || Conf['Link Title'])) {
|
||||||
@ -6643,26 +6644,41 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
gatherLinks: function(match, node, post) {
|
gatherLinks: function(node, post) {
|
||||||
var data, i, len, len2, link, next, range, result;
|
var data, index, len, len2, len3, link, links, match, range, _i, _len, _ref;
|
||||||
|
|
||||||
i = 0;
|
|
||||||
len = match.length;
|
|
||||||
data = node.data;
|
data = node.data;
|
||||||
while ((link = match[i++]) && i > len) {
|
len = data.length;
|
||||||
|
links = [];
|
||||||
|
while ((match = Linkify.regString.exec(data))) {
|
||||||
|
index = match.index;
|
||||||
|
link = match[0];
|
||||||
|
len2 = index + link.length;
|
||||||
|
if ((len3 = len - len2) === 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
range = document.createRange();
|
range = document.createRange();
|
||||||
range.setStart(node, len2 = data.indexOf(link));
|
range.setStart(node, index);
|
||||||
range.setEnd(node, len2 + link.length);
|
range.setEnd(node, len2);
|
||||||
|
links.push(range);
|
||||||
|
}
|
||||||
|
if (match) {
|
||||||
|
Linkify.seek(match, node, post);
|
||||||
|
}
|
||||||
|
_ref = links.reverse();
|
||||||
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||||
|
range = _ref[_i];
|
||||||
Linkify.makeLink(range, post);
|
Linkify.makeLink(range, post);
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
seek: function(match, node, post) {
|
||||||
|
var data, index, link, next, range, result;
|
||||||
|
|
||||||
|
index = match.index;
|
||||||
|
link = match[0];
|
||||||
range = document.createRange();
|
range = document.createRange();
|
||||||
range.setStart(node, len = data.indexOf(link));
|
range.setStart(node, index);
|
||||||
if ((data.length - (len += link.length)) > 0) {
|
while ((next = node.nextSibling) && next.nodeName !== 'BR') {
|
||||||
range.setEnd(node, len);
|
|
||||||
Linkify.makeLink(range, post);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
while ((next = node.nextSibling) && next.nodeName.toLowerCase() !== 'br') {
|
|
||||||
node = next;
|
node = next;
|
||||||
data = node.data;
|
data = node.data;
|
||||||
if (result = /[\s'"]/.exec(data)) {
|
if (result = /[\s'"]/.exec(data)) {
|
||||||
@ -6670,12 +6686,12 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (range.collapsed) {
|
if (range.collapsed) {
|
||||||
if (node.nodeName.toLowerCase() === 'wbr') {
|
if (node.nodeName === 'WBR') {
|
||||||
node = node.previousSibling;
|
node = node.previousSibling;
|
||||||
}
|
}
|
||||||
range.setEnd(node, node.length);
|
range.setEnd(node, node.length);
|
||||||
}
|
}
|
||||||
Linkify.makeLink(range, post);
|
return Linkify.makeLink(range, post);
|
||||||
},
|
},
|
||||||
makeLink: function(range, post) {
|
makeLink: function(range, post) {
|
||||||
var a, link;
|
var a, link;
|
||||||
|
|||||||
@ -6610,7 +6610,7 @@
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
node: function() {
|
node: function() {
|
||||||
var data, embedder, i, len, match, node, range, snapshot, _i, _j, _len, _len1, _ref, _ref1;
|
var data, embedder, i, len, node, range, snapshot, _i, _j, _len, _len1, _ref, _ref1;
|
||||||
|
|
||||||
if (this.isClone && Conf['Embedding']) {
|
if (this.isClone && Conf['Embedding']) {
|
||||||
_ref = $$('.embedder', this.nodes.comment);
|
_ref = $$('.embedder', this.nodes.comment);
|
||||||
@ -6626,8 +6626,9 @@
|
|||||||
while (++i < len) {
|
while (++i < len) {
|
||||||
node = snapshot.snapshotItem(i);
|
node = snapshot.snapshotItem(i);
|
||||||
data = node.data;
|
data = node.data;
|
||||||
if (match = data.match(Linkify.regString)) {
|
if (Linkify.regString.test(data)) {
|
||||||
Linkify.gatherLinks(match, node, this);
|
Linkify.regString.lastIndex = 0;
|
||||||
|
Linkify.gatherLinks(node, this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!(Conf['Embedding'] || Conf['Link Title'])) {
|
if (!(Conf['Embedding'] || Conf['Link Title'])) {
|
||||||
@ -6646,26 +6647,41 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
gatherLinks: function(match, node, post) {
|
gatherLinks: function(node, post) {
|
||||||
var data, i, len, len2, link, next, range, result;
|
var data, index, len, len2, len3, link, links, match, range, _i, _len, _ref;
|
||||||
|
|
||||||
i = 0;
|
|
||||||
len = match.length;
|
|
||||||
data = node.data;
|
data = node.data;
|
||||||
while ((link = match[i++]) && i > len) {
|
len = data.length;
|
||||||
|
links = [];
|
||||||
|
while ((match = Linkify.regString.exec(data))) {
|
||||||
|
index = match.index;
|
||||||
|
link = match[0];
|
||||||
|
len2 = index + link.length;
|
||||||
|
if ((len3 = len - len2) === 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
range = document.createRange();
|
range = document.createRange();
|
||||||
range.setStart(node, len2 = data.indexOf(link));
|
range.setStart(node, index);
|
||||||
range.setEnd(node, len2 + link.length);
|
range.setEnd(node, len2);
|
||||||
|
links.push(range);
|
||||||
|
}
|
||||||
|
if (match) {
|
||||||
|
Linkify.seek(match, node, post);
|
||||||
|
}
|
||||||
|
_ref = links.reverse();
|
||||||
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||||
|
range = _ref[_i];
|
||||||
Linkify.makeLink(range, post);
|
Linkify.makeLink(range, post);
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
seek: function(match, node, post) {
|
||||||
|
var data, index, link, next, range, result;
|
||||||
|
|
||||||
|
index = match.index;
|
||||||
|
link = match[0];
|
||||||
range = document.createRange();
|
range = document.createRange();
|
||||||
range.setStart(node, len = data.indexOf(link));
|
range.setStart(node, index);
|
||||||
if ((data.length - (len += link.length)) > 0) {
|
while ((next = node.nextSibling) && next.nodeName !== 'BR') {
|
||||||
range.setEnd(node, len);
|
|
||||||
Linkify.makeLink(range, post);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
while ((next = node.nextSibling) && next.nodeName.toLowerCase() !== 'br') {
|
|
||||||
node = next;
|
node = next;
|
||||||
data = node.data;
|
data = node.data;
|
||||||
if (result = /[\s'"]/.exec(data)) {
|
if (result = /[\s'"]/.exec(data)) {
|
||||||
@ -6673,12 +6689,12 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (range.collapsed) {
|
if (range.collapsed) {
|
||||||
if (node.nodeName.toLowerCase() === 'wbr') {
|
if (node.nodeName === 'WBR') {
|
||||||
node = node.previousSibling;
|
node = node.previousSibling;
|
||||||
}
|
}
|
||||||
range.setEnd(node, node.length);
|
range.setEnd(node, node.length);
|
||||||
}
|
}
|
||||||
Linkify.makeLink(range, post);
|
return Linkify.makeLink(range, post);
|
||||||
},
|
},
|
||||||
makeLink: function(range, post) {
|
makeLink: function(range, post) {
|
||||||
var a, link;
|
var a, link;
|
||||||
|
|||||||
@ -46,8 +46,9 @@ Linkify =
|
|||||||
node = snapshot.snapshotItem i
|
node = snapshot.snapshotItem i
|
||||||
data = node.data
|
data = node.data
|
||||||
|
|
||||||
if match = data.match Linkify.regString
|
if Linkify.regString.test data
|
||||||
Linkify.gatherLinks match, node, @
|
Linkify.regString.lastIndex = 0
|
||||||
|
Linkify.gatherLinks node, @
|
||||||
|
|
||||||
return unless Conf['Embedding'] or Conf['Link Title']
|
return unless Conf['Embedding'] or Conf['Link Title']
|
||||||
|
|
||||||
@ -58,38 +59,49 @@ Linkify =
|
|||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
gatherLinks: (match, node, post) ->
|
gatherLinks: (node, post) ->
|
||||||
i = 0
|
{data} = node
|
||||||
len = match.length
|
len = data.length
|
||||||
data = node.data
|
links = []
|
||||||
|
|
||||||
|
while (match = Linkify.regString.exec data)
|
||||||
|
{index} = match
|
||||||
|
link = match[0]
|
||||||
|
len2 = index + link.length
|
||||||
|
|
||||||
|
break if (len3 = len - len2) is 0
|
||||||
|
|
||||||
while (link = match[i++]) and i > len
|
|
||||||
range = document.createRange();
|
range = document.createRange();
|
||||||
range.setStart node, len2 = data.indexOf link
|
range.setStart node, index
|
||||||
range.setEnd node, len2 + link.length
|
range.setEnd node, len2
|
||||||
|
links.push range
|
||||||
|
|
||||||
|
if match
|
||||||
|
Linkify.seek match, node, post
|
||||||
|
|
||||||
|
for range in links.reverse()
|
||||||
Linkify.makeLink range, post
|
Linkify.makeLink range, post
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
seek: (match, node, post) ->
|
||||||
|
{index} = match
|
||||||
|
link = match[0]
|
||||||
range = document.createRange()
|
range = document.createRange()
|
||||||
range.setStart node, len = data.indexOf link
|
range.setStart node, index
|
||||||
|
|
||||||
if (data.length - (len += link.length)) > 0
|
while (next = node.nextSibling) and next.nodeName isnt 'BR'
|
||||||
range.setEnd node, len
|
|
||||||
Linkify.makeLink range, post
|
|
||||||
return
|
|
||||||
|
|
||||||
while (next = node.nextSibling) and next.nodeName.toLowerCase() isnt 'br'
|
|
||||||
node = next
|
node = next
|
||||||
data = node.data
|
data = node.data
|
||||||
if result = /[\s'"]/.exec data
|
if result = /[\s'"]/.exec data
|
||||||
range.setEnd node, result.index
|
range.setEnd node, result.index
|
||||||
|
|
||||||
if range.collapsed
|
if range.collapsed
|
||||||
if node.nodeName.toLowerCase() is 'wbr'
|
if node.nodeName is 'WBR'
|
||||||
node = node.previousSibling
|
node = node.previousSibling
|
||||||
range.setEnd node, node.length
|
range.setEnd node, node.length
|
||||||
|
|
||||||
Linkify.makeLink range, post
|
Linkify.makeLink range, post
|
||||||
return
|
|
||||||
|
|
||||||
makeLink: (range, post) ->
|
makeLink: (range, post) ->
|
||||||
link = range.toString()
|
link = range.toString()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user