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

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

Issue 2902273002: DevTools: convert linkifyURL params into options object (Closed)
Patch Set: Created 3 years, 6 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2012 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 /** 142 /**
143 * @param {?SDK.Target} target 143 * @param {?SDK.Target} target
144 * @param {?string} scriptId 144 * @param {?string} scriptId
145 * @param {string} sourceURL 145 * @param {string} sourceURL
146 * @param {number} lineNumber 146 * @param {number} lineNumber
147 * @param {number=} columnNumber 147 * @param {number=} columnNumber
148 * @param {string=} classes 148 * @param {string=} classes
149 * @return {?Element} 149 * @return {?Element}
150 */ 150 */
151 maybeLinkifyScriptLocation(target, scriptId, sourceURL, lineNumber, columnNumb er, classes) { 151 maybeLinkifyScriptLocation(target, scriptId, sourceURL, lineNumber, columnNumb er, classes) {
152 var fallbackAnchor = sourceURL ? 152 var fallbackAnchor = null;
153 Components.Linkifier.linkifyURL( 153 if (sourceURL) {
154 sourceURL, undefined, classes, lineNumber, columnNumber, undefined, this._maxLength) : 154 fallbackAnchor = Components.Linkifier.linkifyURL({
155 null; 155 url: sourceURL,
156 className: classes,
157 lineNumber: lineNumber,
158 columnNumber: columnNumber,
159 maxLength: this._maxLength
160 });
161 }
156 if (!target || target.isDisposed()) 162 if (!target || target.isDisposed())
157 return fallbackAnchor; 163 return fallbackAnchor;
158 var debuggerModel = target.model(SDK.DebuggerModel); 164 var debuggerModel = target.model(SDK.DebuggerModel);
159 if (!debuggerModel) 165 if (!debuggerModel)
160 return fallbackAnchor; 166 return fallbackAnchor;
161 167
162 var rawLocation = 168 var rawLocation =
163 (scriptId ? debuggerModel.createRawLocationByScriptId(scriptId, lineNumb er, columnNumber || 0) : null) || 169 (scriptId ? debuggerModel.createRawLocationByScriptId(scriptId, lineNumb er, columnNumber || 0) : null) ||
164 debuggerModel.createRawLocationByURL(sourceURL, lineNumber, columnNumber || 0); 170 debuggerModel.createRawLocationByURL(sourceURL, lineNumber, columnNumber || 0);
165 if (!rawLocation) 171 if (!rawLocation)
(...skipping 15 matching lines...) Expand all
181 /** 187 /**
182 * @param {?SDK.Target} target 188 * @param {?SDK.Target} target
183 * @param {?string} scriptId 189 * @param {?string} scriptId
184 * @param {string} sourceURL 190 * @param {string} sourceURL
185 * @param {number} lineNumber 191 * @param {number} lineNumber
186 * @param {number=} columnNumber 192 * @param {number=} columnNumber
187 * @param {string=} classes 193 * @param {string=} classes
188 * @return {!Element} 194 * @return {!Element}
189 */ 195 */
190 linkifyScriptLocation(target, scriptId, sourceURL, lineNumber, columnNumber, c lasses) { 196 linkifyScriptLocation(target, scriptId, sourceURL, lineNumber, columnNumber, c lasses) {
191 return this.maybeLinkifyScriptLocation(target, scriptId, sourceURL, lineNumb er, columnNumber, classes) || 197 var scriptLink = this.maybeLinkifyScriptLocation(target, scriptId, sourceURL , lineNumber, columnNumber, classes);
192 Components.Linkifier.linkifyURL( 198 return scriptLink || Components.Linkifier.linkifyURL({
193 sourceURL, undefined, classes, lineNumber, columnNumber, undefined, this._maxLength); 199 url: sourceURL,
200 className: classes,
201 lineNumber: lineNumber,
202 columnNumber: columnNumber,
203 maxLength: this._maxLength
204 });
194 } 205 }
195 206
196 /** 207 /**
197 * @param {!SDK.DebuggerModel.Location} rawLocation 208 * @param {!SDK.DebuggerModel.Location} rawLocation
198 * @param {string} fallbackUrl 209 * @param {string} fallbackUrl
199 * @param {string=} classes 210 * @param {string=} classes
200 * @return {!Element} 211 * @return {!Element}
201 */ 212 */
202 linkifyRawLocation(rawLocation, fallbackUrl, classes) { 213 linkifyRawLocation(rawLocation, fallbackUrl, classes) {
203 return this.linkifyScriptLocation( 214 return this.linkifyScriptLocation(
(...skipping 15 matching lines...) Expand all
219 /** 230 /**
220 * @param {!SDK.Target} target 231 * @param {!SDK.Target} target
221 * @param {!Protocol.Runtime.StackTrace} stackTrace 232 * @param {!Protocol.Runtime.StackTrace} stackTrace
222 * @param {string=} classes 233 * @param {string=} classes
223 * @return {!Element} 234 * @return {!Element}
224 */ 235 */
225 linkifyStackTraceTopFrame(target, stackTrace, classes) { 236 linkifyStackTraceTopFrame(target, stackTrace, classes) {
226 console.assert(stackTrace.callFrames && stackTrace.callFrames.length); 237 console.assert(stackTrace.callFrames && stackTrace.callFrames.length);
227 238
228 var topFrame = stackTrace.callFrames[0]; 239 var topFrame = stackTrace.callFrames[0];
229 var fallbackAnchor = Components.Linkifier.linkifyURL( 240 var fallbackAnchor = Components.Linkifier.linkifyURL({
230 topFrame.url, undefined, classes, topFrame.lineNumber, topFrame.columnNu mber, undefined, this._maxLength); 241 url: topFrame.url,
242 className: classes,
243 lineNumber: topFrame.lineNumber,
244 columnNumber: topFrame.columnNumber,
245 maxLength: this._maxLength
246 });
231 if (target.isDisposed()) 247 if (target.isDisposed())
232 return fallbackAnchor; 248 return fallbackAnchor;
233 249
234 var debuggerModel = target.model(SDK.DebuggerModel); 250 var debuggerModel = target.model(SDK.DebuggerModel);
235 var rawLocations = debuggerModel.createRawLocationsByStackTrace(stackTrace); 251 var rawLocations = debuggerModel.createRawLocationsByStackTrace(stackTrace);
236 if (rawLocations.length === 0) 252 if (rawLocations.length === 0)
237 return fallbackAnchor; 253 return fallbackAnchor;
238 254
239 var anchor = Components.Linkifier._createLink('', classes || ''); 255 var anchor = Components.Linkifier._createLink('', classes || '');
240 var info = Components.Linkifier._linkInfo(anchor); 256 var info = Components.Linkifier._linkInfo(anchor);
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
316 anchor.removeChild(info.icon); 332 anchor.removeChild(info.icon);
317 var icon = Components.Linkifier._decorator.linkIcon(info.uiLocation.uiSource Code); 333 var icon = Components.Linkifier._decorator.linkIcon(info.uiLocation.uiSource Code);
318 if (icon) { 334 if (icon) {
319 icon.style.setProperty('margin-right', '2px'); 335 icon.style.setProperty('margin-right', '2px');
320 anchor.insertBefore(icon, anchor.firstChild); 336 anchor.insertBefore(icon, anchor.firstChild);
321 } 337 }
322 info.icon = icon; 338 info.icon = icon;
323 } 339 }
324 340
325 /** 341 /**
326 * @param {string} url 342 * @param {!Components.LinkifyURLOptions} options
327 * @param {string=} text
328 * @param {string=} className
329 * @param {number=} lineNumber
330 * @param {number=} columnNumber
331 * @param {boolean=} preventClick
332 * @param {number=} maxLength
333 * @return {!Element} 343 * @return {!Element}
334 */ 344 */
335 static linkifyURL(url, text, className, lineNumber, columnNumber, preventClick , maxLength) { 345 static linkifyURL(options) {
pfeldman 2017/05/31 21:54:59 In my original review, I was suggesting to only co
luoe 2017/06/02 18:21:12 I see. Looks better to me!
346 var url = options.url;
347 var text = options.text;
348 var className = options.className || '';
349 var lineNumber = options.lineNumber;
350 var columnNumber = options.columnNumber;
351 var preventClick = options.preventClick;
352 var maxLength = maxLength || UI.MaxLengthForDisplayedURLs;
336 if (!url || url.trim().toLowerCase().startsWith('javascript:')) { 353 if (!url || url.trim().toLowerCase().startsWith('javascript:')) {
337 var element = createElementWithClass('span', className); 354 var element = createElementWithClass('span', className);
338 element.textContent = text || url || Common.UIString('(unknown)'); 355 element.textContent = text || url || Common.UIString('(unknown)');
339 return element; 356 return element;
340 } 357 }
341 358
342 var linkText = text || Bindings.displayNameForURL(url); 359 var linkText = text || Bindings.displayNameForURL(url);
343 if (typeof lineNumber === 'number' && !text) 360 if (typeof lineNumber === 'number' && !text)
344 linkText += ':' + (lineNumber + 1); 361 linkText += ':' + (lineNumber + 1);
345 var title = linkText !== url ? url : ''; 362 var title = linkText !== url ? url : '';
346 var link = Components.Linkifier._createLink( 363 var link = Components.Linkifier._createLink(linkText, className, maxLength, title, url, preventClick);
347 linkText, className || '', maxLength || UI.MaxLengthForDisplayedURLs, ti tle, url, preventClick);
348 var info = Components.Linkifier._linkInfo(link); 364 var info = Components.Linkifier._linkInfo(link);
349 if (typeof lineNumber === 'number') 365 if (typeof lineNumber === 'number')
350 info.lineNumber = lineNumber; 366 info.lineNumber = lineNumber;
351 if (typeof columnNumber === 'number') 367 if (typeof columnNumber === 'number')
352 info.columnNumber = columnNumber; 368 info.columnNumber = columnNumber;
353 return link; 369 return link;
354 } 370 }
355 371
356 /** 372 /**
357 * @param {!Object} revealable 373 * @param {!Object} revealable
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
600 * url: ?string, 616 * url: ?string,
601 * lineNumber: ?number, 617 * lineNumber: ?number,
602 * columnNumber: ?number, 618 * columnNumber: ?number,
603 * revealable: ?Object, 619 * revealable: ?Object,
604 * fallback: ?Element 620 * fallback: ?Element
605 * }} 621 * }}
606 */ 622 */
607 Components._LinkInfo; 623 Components._LinkInfo;
608 624
609 /** 625 /**
626 * @typedef {{
627 * url: string,
628 * text: (string|undefined),
629 * className: (string|undefined),
630 * lineNumber: (number|undefined),
631 * columnNumber: (number|undefined),
632 * preventClick: (boolean|undefined),
633 * maxLength: (number|undefined)
634 * }}
635 */
636 Components.LinkifyURLOptions;
637
638 /**
610 * The maximum length before strings are considered too long for finding URLs. 639 * The maximum length before strings are considered too long for finding URLs.
611 * @const 640 * @const
612 * @type {number} 641 * @type {number}
613 */ 642 */
614 Components.Linkifier.MaxLengthToIgnoreLinkifier = 10000; 643 Components.Linkifier.MaxLengthToIgnoreLinkifier = 10000;
615 644
616 /** 645 /**
617 * @typedef {function(!Common.ContentProvider, number)} 646 * @typedef {function(!Common.ContentProvider, number)}
618 */ 647 */
619 Components.Linkifier.LinkHandler; 648 Components.Linkifier.LinkHandler;
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
685 */ 714 */
686 Components.linkifyStringAsFragment = function(string) { 715 Components.linkifyStringAsFragment = function(string) {
687 /** 716 /**
688 * @param {string} title 717 * @param {string} title
689 * @param {string} url 718 * @param {string} url
690 * @param {number=} lineNumber 719 * @param {number=} lineNumber
691 * @param {number=} columnNumber 720 * @param {number=} columnNumber
692 * @return {!Node} 721 * @return {!Node}
693 */ 722 */
694 function linkifier(title, url, lineNumber, columnNumber) { 723 function linkifier(title, url, lineNumber, columnNumber) {
695 return Components.Linkifier.linkifyURL(url, title, undefined, lineNumber, co lumnNumber); 724 return Components.Linkifier.linkifyURL({url: url, text: title, lineNumber: l ineNumber, columnNumber: columnNumber});
696 } 725 }
697 726
698 return Components.linkifyStringAsFragmentWithCustomLinkifier(string, linkifier ); 727 return Components.linkifyStringAsFragmentWithCustomLinkifier(string, linkifier );
699 }; 728 };
700 729
701 /** 730 /**
702 * @implements {UI.ContextMenu.Provider} 731 * @implements {UI.ContextMenu.Provider}
703 * @unrestricted 732 * @unrestricted
704 */ 733 */
705 Components.Linkifier.LinkContextMenuProvider = class { 734 Components.Linkifier.LinkContextMenuProvider = class {
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
820 contextMenu.appendSeparator(); 849 contextMenu.appendSeparator();
821 contextMenu.appendItem(Common.UIString('Save'), save.bind(null, false)); 850 contextMenu.appendItem(Common.UIString('Save'), save.bind(null, false));
822 851
823 if (contentProvider instanceof Workspace.UISourceCode) { 852 if (contentProvider instanceof Workspace.UISourceCode) {
824 var uiSourceCode = /** @type {!Workspace.UISourceCode} */ (contentProvider ); 853 var uiSourceCode = /** @type {!Workspace.UISourceCode} */ (contentProvider );
825 if (!uiSourceCode.project().canSetFileContent()) 854 if (!uiSourceCode.project().canSetFileContent())
826 contextMenu.appendItem(Common.UIString.capitalize('Save ^as...'), save.b ind(null, true)); 855 contextMenu.appendItem(Common.UIString.capitalize('Save ^as...'), save.b ind(null, true));
827 } 856 }
828 } 857 }
829 }; 858 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698