Платформа ЦРНП "Мирокод" для разработки проектов
https://git.mirocod.ru
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.6 KiB
45 lines
1.6 KiB
(function () { |
|
var re = /((([A-Za-z]{3,9}:(?:\/\/)?)(?:[\-;:&=\+\$,\w]+@)?[A-Za-z0-9\.\-]+|(?:www\.|[\-;:&=\+\$,\w]+@)[A-Za-z0-9\.\-]+)((?:\/[\+~%\/\.\w\-]*)?\??(?:[\-\+:=&;%@\.\w]*)#?(?:[\.\!\/\\\w]*))?)/g; |
|
function textNodesUnder(node) { |
|
var textNodes = []; |
|
if(typeof document.createTreeWalker === 'function') { |
|
// Efficient TreeWalker |
|
var currentNode, walker; |
|
walker = document.createTreeWalker(node, NodeFilter.SHOW_TEXT, null, false); |
|
while(currentNode = walker.nextNode()) { |
|
textNodes.push(currentNode); |
|
} |
|
} else { |
|
// Less efficient recursive function |
|
for(node = node.firstChild; node; node = node.nextSibling) { |
|
if(node.nodeType === 3) { |
|
textNodes.push(node); |
|
} else { |
|
textNodes = textNodes.concat(textNodesUnder(node)); |
|
} |
|
} |
|
} |
|
return textNodes; |
|
} |
|
|
|
function processNode(node) { |
|
re.lastIndex = 0; |
|
var results = re.exec(node.textContent); |
|
if(results !== null) { |
|
if($(node).parents().filter('code').length === 0) { |
|
$(node).replaceWith( |
|
$('<span />').html( |
|
node.nodeValue.replace(re, '<a href="$1">$1</a>') |
|
) |
|
); |
|
} |
|
} |
|
} |
|
|
|
jQuery.fn.autolink = function () { |
|
this.each(function () { |
|
textNodesUnder(this).forEach(processNode); |
|
}); |
|
return this; |
|
}; |
|
})();
|
|
|