Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 }; |
| OLD | NEW |