mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-30 06:38:37 -04:00 
			
		
		
		
	* Optimize and fix autolink function (#1442) * Fix bug in autolink recursive fallback function
		
			
				
	
	
		
			46 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| (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('pre>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;
 | |
|     };
 | |
| })();
 |