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.
		
		
		
		
		
			
		
			
				
					104 lines
				
				2.6 KiB
			
		
		
			
		
	
	
					104 lines
				
				2.6 KiB
			| 
											3 years ago
										 | var linkifyStr = (function (linkifyjs) { | ||
|  | 	'use strict'; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 		Convert strings of text into linkable HTML text | ||
|  | 	*/ | ||
|  | 
 | ||
|  | 	function escapeText(text) { | ||
|  | 	  return text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>'); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	function escapeAttr(href) { | ||
|  | 	  return href.replace(/"/g, '"'); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	function attributesToString(attributes) { | ||
|  | 	  if (!attributes) { | ||
|  | 	    return ''; | ||
|  | 	  } | ||
|  | 
 | ||
|  | 	  var result = []; | ||
|  | 
 | ||
|  | 	  for (var attr in attributes) { | ||
|  | 	    var val = attributes[attr] + ''; | ||
|  | 	    result.push("".concat(attr, "=\"").concat(escapeAttr(val), "\"")); | ||
|  | 	  } | ||
|  | 
 | ||
|  | 	  return result.join(' '); | ||
|  | 	} | ||
|  | 	/** | ||
|  | 	 * Convert a plan text string to an HTML string with links. Expects that the | ||
|  | 	 * given strings does not contain any HTML entities. Use the linkify-html | ||
|  | 	 * interface if you need to parse HTML entities. | ||
|  | 	 * | ||
|  | 	 * @param {string} str string to linkify | ||
|  | 	 * @param {object} [opts] overridable options | ||
|  | 	 * @returns {string} | ||
|  | 	 */ | ||
|  | 
 | ||
|  | 
 | ||
|  | 	function linkifyStr(str) { | ||
|  | 	  var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | ||
|  | 	  opts = new linkifyjs.Options(opts); | ||
|  | 	  var tokens = linkifyjs.tokenize(str); | ||
|  | 	  var result = []; | ||
|  | 
 | ||
|  | 	  for (var i = 0; i < tokens.length; i++) { | ||
|  | 	    var token = tokens[i]; | ||
|  | 
 | ||
|  | 	    if (token.t === 'nl' && opts.nl2br) { | ||
|  | 	      result.push('<br>\n'); | ||
|  | 	      continue; | ||
|  | 	    } else if (!token.isLink || !opts.check(token)) { | ||
|  | 	      result.push(escapeText(token.toString())); | ||
|  | 	      continue; | ||
|  | 	    } | ||
|  | 
 | ||
|  | 	    var _opts$resolve = opts.resolve(token), | ||
|  | 	        formatted = _opts$resolve.formatted, | ||
|  | 	        formattedHref = _opts$resolve.formattedHref, | ||
|  | 	        tagName = _opts$resolve.tagName, | ||
|  | 	        className = _opts$resolve.className, | ||
|  | 	        target = _opts$resolve.target, | ||
|  | 	        rel = _opts$resolve.rel, | ||
|  | 	        attributes = _opts$resolve.attributes; | ||
|  | 
 | ||
|  | 	    var link = ["<".concat(tagName, " href=\"").concat(escapeAttr(formattedHref), "\"")]; | ||
|  | 
 | ||
|  | 	    if (className) { | ||
|  | 	      link.push(" class=\"".concat(escapeAttr(className), "\"")); | ||
|  | 	    } | ||
|  | 
 | ||
|  | 	    if (target) { | ||
|  | 	      link.push(" target=\"".concat(escapeAttr(target), "\"")); | ||
|  | 	    } | ||
|  | 
 | ||
|  | 	    if (rel) { | ||
|  | 	      link.push(" rel=\"".concat(escapeAttr(rel), "\"")); | ||
|  | 	    } | ||
|  | 
 | ||
|  | 	    if (attributes) { | ||
|  | 	      link.push(" ".concat(attributesToString(attributes))); | ||
|  | 	    } | ||
|  | 
 | ||
|  | 	    link.push(">".concat(escapeText(formatted), "</").concat(tagName, ">")); | ||
|  | 	    result.push(link.join('')); | ||
|  | 	  } | ||
|  | 
 | ||
|  | 	  return result.join(''); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	if (!String.prototype.linkify) { | ||
|  | 	  Object.defineProperty(String.prototype, 'linkify', { | ||
|  | 	    writable: false, | ||
|  | 	    value: function linkify(options) { | ||
|  | 	      return linkifyStr(this, options); | ||
|  | 	    } | ||
|  | 	  }); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	return linkifyStr; | ||
|  | 
 | ||
|  | })(linkify); |