mirror of
https://github.com/fastmail/Squire.git
synced 2024-12-22 15:23:29 -05:00
Automatically wrap URLs in <a> when pasting text.
This commit is contained in:
parent
aa8527fc2c
commit
d413b1bb85
1 changed files with 40 additions and 0 deletions
|
@ -832,6 +832,45 @@
|
||||||
|
|
||||||
// --- Clean ---
|
// --- Clean ---
|
||||||
|
|
||||||
|
var urlRegExp = /\b((?:https?:\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\([^\s()<>]+\))+(?:\((?:[^\s()<>]+|(?:\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/i;
|
||||||
|
var addLinks = function ( frag ) {
|
||||||
|
var doc = frag.ownerDocument,
|
||||||
|
walker = doc.createTreeWalker( frag, SHOW_TEXT,
|
||||||
|
function ( node ) {
|
||||||
|
return node.nearest( 'A' ) ? FILTER_SKIP : FILTER_ACCEPT;
|
||||||
|
}, false ),
|
||||||
|
node, parts, i, l, text, parent, next;
|
||||||
|
while ( node = walker.nextNode() ) {
|
||||||
|
parts = node.data.split( urlRegExp );
|
||||||
|
l = parts.length;
|
||||||
|
if ( l > 1 ) {
|
||||||
|
parent = node.parentNode;
|
||||||
|
next = node.nextSibling;
|
||||||
|
for ( i = 0; i < l; i += 1 ) {
|
||||||
|
text = parts[i];
|
||||||
|
if ( i ) {
|
||||||
|
if ( i % 2 ) {
|
||||||
|
node = doc.createElement( 'A' );
|
||||||
|
node.textContent = text;
|
||||||
|
node.href = /^https?:/.test( text ) ?
|
||||||
|
text : 'http://' + text;
|
||||||
|
} else {
|
||||||
|
node = doc.createTextNode( text );
|
||||||
|
}
|
||||||
|
if ( next ) {
|
||||||
|
parent.insertBefore( node, next );
|
||||||
|
} else {
|
||||||
|
parent.appendChild( node );
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
node.data = text;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
walker.currentNode = node;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
var allowedBlock = /^A(?:DDRESS|RTICLE|SIDE)|BLOCKQUOTE|CAPTION|D(?:[DLT]|IV)|F(?:IGURE|OOTER)|H[1-6]|HEADER|L(?:ABEL|EGEND|I)|O(?:L|UTPUT)|P(?:RE)?|SECTION|T(?:ABLE|BODY|D|FOOT|H|HEAD|R)|UL$/;
|
var allowedBlock = /^A(?:DDRESS|RTICLE|SIDE)|BLOCKQUOTE|CAPTION|D(?:[DLT]|IV)|F(?:IGURE|OOTER)|H[1-6]|HEADER|L(?:ABEL|EGEND|I)|O(?:L|UTPUT)|P(?:RE)?|SECTION|T(?:ABLE|BODY|D|FOOT|H|HEAD|R)|UL$/;
|
||||||
|
|
||||||
var spanToSemantic = {
|
var spanToSemantic = {
|
||||||
|
@ -1087,6 +1126,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
frag.normalize();
|
frag.normalize();
|
||||||
|
addLinks( frag );
|
||||||
cleanTree( frag, false );
|
cleanTree( frag, false );
|
||||||
cleanupBRs( frag );
|
cleanupBRs( frag );
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue