Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Unified Diff: third_party/WebKit/Source/devtools/front_end/components/Linkifier.js

Issue 2568983003: Add ability to linkify substituted string
Patch Set: Comments addressed Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 169b6692bb69d9b5c8ac15052cc4888fcc462c5d..1bb9ca30bae90c5f5e4ea9a1c8d61b8c97778b47 100644
--- a/third_party/WebKit/Source/devtools/front_end/components/Linkifier.js
+++ b/third_party/WebKit/Source/devtools/front_end/components/Linkifier.js
@@ -600,34 +600,89 @@ Components.LinkDecorator.Events = {
};
/**
+ * @param {string} url
+ * @param {string} text
+ * @param {function(string,string,number=,number=):!Node} linkifier
+ * @return {!Node}
+ */
+Components.Linkifier.createLinkNodeWithCustomLinkifier = function(url, text, linkifier) {
pfeldman 2017/01/27 19:10:07 It looks like this method is doing nothing. Linkif
karabur 2017/01/27 21:21:04 It does not, this method called with three differe
+ var realURL = (url.startsWith('www.') ? 'http://' + url : url);
+ var splitResult = Common.ParsedURL.splitLineAndColumn(realURL);
+ var linkNode;
+ if (splitResult)
+ linkNode = linkifier(text, splitResult.url, splitResult.lineNumber, splitResult.columnNumber);
+ else
+ linkNode = linkifier(text, splitResult.url);
+
+ return linkNode;
+};
+
+/**
+ * @param {string} url
+ * @param {string} text
+ * @return {!Node}
+ */
+Components.Linkifier.createLinkNode = function(url, text) {
pfeldman 2017/01/27 19:10:07 This method also does not do much.
+ /**
+ * @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.createLinkNodeWithCustomLinkifier(url, text, linkifier);
+};
+
+/**
+ * @return {!RegExp}
+ */
+Components.Linkifier.getLinkRegExp = function() {
pfeldman 2017/01/27 19:10:07 Does this need to be public? Start method with _ i
+ var linkStringRegEx =
+ /(?:[a-zA-Z][a-zA-Z0-9+.-]{2,}:\/\/|data:|www\.)[\w$\-_+*'=\|\/\\(){}[\]^%@&#~,:;.!?]{2,}[\w$\-_+*=\|\/\\({^%@&#~]/;
+ var pathLineRegex = /(?:\/[\w\.-]*)+\:[\d]+/;
+
+ return new RegExp(linkStringRegEx.source + '|' + pathLineRegex, 'g');
+};
+
+/**
+ * @param {string} string
+ * @return {!Array.<!Common.SourceRange>}
+ */
+Components.Linkifier.getLinkRanges = function(string) {
pfeldman 2017/01/27 19:10:07 Do we need this public?
+ var regExp = Components.Linkifier.getLinkRegExp();
+ var match = regExp.exec(string);
+ var ranges = [];
+ while (match) {
+ ranges.push(new Common.SourceRange(match.index, match[0].length));
+ match = regExp.exec(string);
+ }
+ return ranges;
+};
+
+/**
* @param {string} string
* @param {function(string,string,number=,number=):!Node} linkifier
* @return {!DocumentFragment}
*/
Components.linkifyStringAsFragmentWithCustomLinkifier = function(string, linkifier) {
var container = createDocumentFragment();
- var linkStringRegEx =
- /(?:[a-zA-Z][a-zA-Z0-9+.-]{2,}:\/\/|data:|www\.)[\w$\-_+*'=\|\/\\(){}[\]^%@&#~,:;.!?]{2,}[\w$\-_+*=\|\/\\({^%@&#~]/;
- var pathLineRegex = /(?:\/[\w\.-]*)+\:[\d]+/;
while (string && string.length < Components.Linkifier.MaxLengthToIgnoreLinkifier) {
- var linkString = linkStringRegEx.exec(string) || pathLineRegex.exec(string);
- if (!linkString)
+ var match = Components.Linkifier.getLinkRegExp().exec(string);
+
+ if (!match)
break;
- linkString = linkString[0];
- var linkIndex = string.indexOf(linkString);
+ var linkIndex = match.index;
+ var linkString = match[0];
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.createLinkNodeWithCustomLinkifier(linkString, linkString, linkifier);
container.appendChild(linkNode);
string = string.substring(linkIndex + linkString.length, string.length);

Powered by Google App Engine
This is Rietveld 408576698