Chromium Code Reviews| Index: third_party/WebKit/Source/devtools/front_end/components/Linkifier.js |
| diff --git a/third_party/WebKit/Source/devtools/front_end/components/Linkifier.js b/third_party/WebKit/Source/devtools/front_end/components/Linkifier.js |
| index 4926fac9712de8b707479812097b27abdee2146e..6a41efe8a9fb587df05ddc4a78de9c36b2379845 100644 |
| --- a/third_party/WebKit/Source/devtools/front_end/components/Linkifier.js |
| +++ b/third_party/WebKit/Source/devtools/front_end/components/Linkifier.js |
| @@ -593,16 +593,65 @@ Components.LinkDecorator.Events = { |
| /** |
| * @param {string} string |
| * @param {function(string,string,number=,number=):!Node} linkifier |
| - * @return {!DocumentFragment} |
| + * @return {?Node} |
| */ |
| -Components.linkifyStringAsFragmentWithCustomLinkifier = function(string, linkifier) { |
| - var container = createDocumentFragment(); |
| +Components.Linkifier.getLinkNodeWithCustomLinkifier = function(string, linkifier) { |
| + var linkString = Components.Linkifier.getLinkString(string); |
| + if (!linkString || linkString[0] !== string) |
| + return null; |
| + |
| + var title = string; |
| + var realURL = (string.startsWith('www.') ? 'http://' + string : string); |
| + var splitResult = Common.ParsedURL.splitLineAndColumn(realURL); |
| + var linkNode; |
| + if (splitResult) |
| + linkNode = linkifier(title, splitResult.url, splitResult.lineNumber, splitResult.columnNumber); |
| + else |
| + linkNode = linkifier(title, realURL); |
| + |
| + return linkNode; |
| +}; |
| + |
| +/** |
| + * @param {string} string |
| + * @return {?Node} |
| + */ |
| +Components.Linkifier.getLinkNode = function(string) { |
| + /** |
| + * @param {string} title |
| + * @param {string} url |
| + * @param {number=} lineNumber |
| + * @param {number=} columnNumber |
| + * @return {!Node} |
| + */ |
| + function linkifier(title, url, lineNumber, columnNumber) { |
| + return Components.Linkifier.linkifyURL(url, title, undefined, lineNumber, columnNumber); |
| + } |
| + |
| + return Components.Linkifier.getLinkNodeWithCustomLinkifier(string, linkifier); |
| +}; |
| + |
| +/** |
| + * @param {string} string |
| + * @return {?Array|{index:number, input:string}} |
|
luoe
2016/12/13 00:08:27
This annotation looks like an Array OR an Object,
|
| + */ |
| +Components.Linkifier.getLinkString = function(string) { |
| var linkStringRegEx = |
| /(?:[a-zA-Z][a-zA-Z0-9+.-]{2,}:\/\/|data:|www\.)[\w$\-_+*'=\|\/\\(){}[\]^%@&#~,:;.!?]{2,}[\w$\-_+*=\|\/\\({^%@&#~]/; |
| var pathLineRegex = /(?:\/[\w\.-]*)+\:[\d]+/; |
| + return linkStringRegEx.exec(string) || pathLineRegex.exec(string); |
| +}; |
| + |
| +/** |
| + * @param {string} string |
| + * @param {function(string,string,number=,number=):!Node} linkifier |
| + * @return {!DocumentFragment} |
| + */ |
| +Components.linkifyStringAsFragmentWithCustomLinkifier = function(string, linkifier) { |
| + var container = createDocumentFragment(); |
| while (string && string.length < Components.Linkifier.MaxLengthToIgnoreLinkifier) { |
| - var linkString = linkStringRegEx.exec(string) || pathLineRegex.exec(string); |
| + var linkString = Components.Linkifier.getLinkString(string); |
| if (!linkString) |
| break; |
| @@ -611,14 +660,7 @@ Components.linkifyStringAsFragmentWithCustomLinkifier = function(string, linkifi |
| var nonLink = string.substring(0, linkIndex); |
| container.appendChild(createTextNode(nonLink)); |
| - var title = linkString; |
| - var realURL = (linkString.startsWith('www.') ? 'http://' + linkString : linkString); |
| - var splitResult = Common.ParsedURL.splitLineAndColumn(realURL); |
| - var linkNode; |
| - if (splitResult) |
| - linkNode = linkifier(title, splitResult.url, splitResult.lineNumber, splitResult.columnNumber); |
| - else |
| - linkNode = linkifier(title, realURL); |
| + var linkNode = Components.Linkifier.getLinkNodeWithCustomLinkifier(linkString, linkifier); |
| container.appendChild(linkNode); |
| string = string.substring(linkIndex + linkString.length, string.length); |