|
|
- (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;
- };
- })();
|