Better leading and trailing character removal.

This commit is contained in:
Zixaphir 2013-08-14 03:32:07 -07:00
parent 1f011dfd02
commit 97475d6fac
3 changed files with 72 additions and 46 deletions

View File

@ -4529,27 +4529,37 @@
return range; return range;
}, },
makeLink: function(range) { makeLink: function(range) {
var a, char, text, trim; var a, char, i, text;
text = range.toString(); text = range.toString();
trim = function() { i = 0;
if (!(range.endOffset < 1)) { while (/[(\[{<>]/.test(text.charAt(i))) {
range.setEnd(range.endContainer, range.endOffset - 1); i++;
}
if (i) {
text = text.slice(i);
while (range.startOffset + i >= range.startContainer.data.length) {
i--;
} }
return text = text.slice(0, -1); if (i) {
}; range.setStart(range.startContainer, range.startOffset + i);
if (/[(\[{<]/.test(text.charAt(0))) {
text = text.slice(1);
if (range.startOffset !== range.startContainer.data.length) {
range.setStart(range.startContainer, range.startOffset + 1);
} }
} }
while (/[)\]}>.,]/.test(char = text.charAt(text.length - 1))) { i = 0;
if (/[.,]/.test(char) || (text.match(/[()\[\]{}<>]/g)).length % 2) { while (/[)\]}>.,]/.test(char = text.charAt(text.length - (1 + i)))) {
trim(); if (!(/[.,]/.test(char) || (text.match(/[()\[\]{}<>]/g)).length % 2)) {
continue; break;
}
i++;
}
if (i) {
text = text.slice(0, -i);
while (range.endOffset > i) {
i--;
}
if (i) {
range.setEnd(range.endContainer, range.endOffset - i);
} }
break;
} }
text = text.contains(':') ? text : (text.contains('@') ? 'mailto:' : 'http://') + text; text = text.contains(':') ? text : (text.contains('@') ? 'mailto:' : 'http://') + text;
a = $.el('a', { a = $.el('a', {

View File

@ -4538,27 +4538,37 @@
return range; return range;
}, },
makeLink: function(range) { makeLink: function(range) {
var a, char, text, trim; var a, char, i, text;
text = range.toString(); text = range.toString();
trim = function() { i = 0;
if (!(range.endOffset < 1)) { while (/[(\[{<>]/.test(text.charAt(i))) {
range.setEnd(range.endContainer, range.endOffset - 1); i++;
}
if (i) {
text = text.slice(i);
while (range.startOffset + i >= range.startContainer.data.length) {
i--;
} }
return text = text.slice(0, -1); if (i) {
}; range.setStart(range.startContainer, range.startOffset + i);
if (/[(\[{<]/.test(text.charAt(0))) {
text = text.slice(1);
if (range.startOffset !== range.startContainer.data.length) {
range.setStart(range.startContainer, range.startOffset + 1);
} }
} }
while (/[)\]}>.,]/.test(char = text.charAt(text.length - 1))) { i = 0;
if (/[.,]/.test(char) || (text.match(/[()\[\]{}<>]/g)).length % 2) { while (/[)\]}>.,]/.test(char = text.charAt(text.length - (1 + i)))) {
trim(); if (!(/[.,]/.test(char) || (text.match(/[()\[\]{}<>]/g)).length % 2)) {
continue; break;
}
i++;
}
if (i) {
text = text.slice(0, -i);
while (range.endOffset > i) {
i--;
}
if (i) {
range.setEnd(range.endContainer, range.endOffset - i);
} }
break;
} }
text = text.contains(':') ? text : (text.contains('@') ? 'mailto:' : 'http://') + text; text = text.contains(':') ? text : (text.contains('@') ? 'mailto:' : 'http://') + text;
a = $.el('a', { a = $.el('a', {

View File

@ -2,7 +2,7 @@ Linkify =
init: -> init: ->
return if g.VIEW is 'catalog' or not Conf['Linkify'] return if g.VIEW is 'catalog' or not Conf['Linkify']
@regString = @regString =
///( ///(
# http, magnet, ftp, etc # http, magnet, ftp, etc
(https?|mailto|git|magnet|ftp|irc):( (https?|mailto|git|magnet|ftp|irc):(
@ -105,23 +105,29 @@ Linkify =
makeLink: (range) -> makeLink: (range) ->
text = range.toString() text = range.toString()
trim = ->
range.setEnd range.endContainer, range.endOffset - 1 unless range.endOffset < 1
text = text.slice 0, -1
# Clean leading brackets # Clean leading brackets, >
if /[(\[{<]/.test text.charAt 0 i = 0
text = text.slice 1 i++ while /[(\[{<>]/.test text.charAt i
unless range.startOffset is range.startContainer.data.length
range.setStart range.startContainer, range.startOffset + 1 if i
text = text.slice i
i-- while range.startOffset + i >= range.startContainer.data.length
range.setStart range.startContainer, range.startOffset + i if i
# Clean hanging brackets, commas, periods # Clean hanging brackets, commas, periods
while /[)\]}>.,]/.test char = text.charAt text.length - 1 i = 0
if /[.,]/.test(char) or (text.match /[()\[\]{}<>]/g).length % 2 while /[)\]}>.,]/.test char = text.charAt text.length - (1 + i)
trim() break unless /[.,]/.test(char) or (text.match /[()\[\]{}<>]/g).length % 2
continue i++
break
if i
text = text.slice 0, -i
i-- while range.endOffset > i
if i
range.setEnd range.endContainer, range.endOffset - i
# This is the only piece of code left based on Anthony Lieuallen's Linkify # This is the only piece of code left based on Anthony Lieuallen's Linkify
text = text =