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 e9376770ae072623ca3d76b6f4330e5bf6bd951d..667c23e72eaaec00cf39a5e86d8d063a1ba04d77 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/components/Linkifier.js |
+++ b/third_party/WebKit/Source/devtools/front_end/components/Linkifier.js |
@@ -27,387 +27,397 @@ |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
- |
/** |
* @interface |
*/ |
-WebInspector.LinkifierFormatter = function() |
-{ |
-}; |
+WebInspector.LinkifierFormatter = function() {}; |
WebInspector.LinkifierFormatter.prototype = { |
- /** |
- * @param {!Element} anchor |
- * @param {!WebInspector.UILocation} uiLocation |
- * @param {boolean} isBlackboxed |
- */ |
- formatLiveAnchor: function(anchor, uiLocation, isBlackboxed) { } |
+ /** |
+ * @param {!Element} anchor |
+ * @param {!WebInspector.UILocation} uiLocation |
+ * @param {boolean} isBlackboxed |
+ */ |
+ formatLiveAnchor: function(anchor, uiLocation, isBlackboxed) {} |
}; |
/** |
- * @constructor |
* @implements {WebInspector.TargetManager.Observer} |
- * @param {!WebInspector.LinkifierFormatter=} formatter |
+ * @unrestricted |
*/ |
-WebInspector.Linkifier = function(formatter) |
-{ |
- this._formatter = formatter || new WebInspector.Linkifier.DefaultFormatter(WebInspector.Linkifier.MaxLengthForDisplayedURLs); |
+WebInspector.Linkifier = class { |
+ /** |
+ * @param {!WebInspector.LinkifierFormatter=} formatter |
+ */ |
+ constructor(formatter) { |
+ this._formatter = |
+ formatter || new WebInspector.Linkifier.DefaultFormatter(WebInspector.Linkifier.MaxLengthForDisplayedURLs); |
/** @type {!Map<!WebInspector.Target, !Array<!Element>>} */ |
this._anchorsByTarget = new Map(); |
/** @type {!Map<!WebInspector.Target, !WebInspector.LiveLocationPool>} */ |
this._locationPoolByTarget = new Map(); |
WebInspector.targetManager.observeTargets(this); |
-}; |
+ } |
-/** |
- * @param {?WebInspector.Linkifier.LinkHandler} handler |
- */ |
-WebInspector.Linkifier.setLinkHandler = function(handler) |
-{ |
+ /** |
+ * @param {?WebInspector.Linkifier.LinkHandler} handler |
+ */ |
+ static setLinkHandler(handler) { |
WebInspector.Linkifier._linkHandler = handler; |
-}; |
- |
-/** |
- * @param {string} url |
- * @param {number=} lineNumber |
- * @return {boolean} |
- */ |
-WebInspector.Linkifier.handleLink = function(url, lineNumber) |
-{ |
+ } |
+ |
+ /** |
+ * @param {string} url |
+ * @param {number=} lineNumber |
+ * @return {boolean} |
+ */ |
+ static handleLink(url, lineNumber) { |
if (!WebInspector.Linkifier._linkHandler) |
- return false; |
+ return false; |
return WebInspector.Linkifier._linkHandler.handleLink(url, lineNumber); |
-}; |
- |
-/** |
- * @param {!Object} revealable |
- * @param {string} text |
- * @param {string=} fallbackHref |
- * @param {number=} fallbackLineNumber |
- * @param {string=} title |
- * @param {string=} classes |
- * @return {!Element} |
- */ |
-WebInspector.Linkifier.linkifyUsingRevealer = function(revealable, text, fallbackHref, fallbackLineNumber, title, classes) |
-{ |
- var a = createElement("a"); |
- a.className = (classes || "") + " webkit-html-resource-link"; |
+ } |
+ |
+ /** |
+ * @param {!Object} revealable |
+ * @param {string} text |
+ * @param {string=} fallbackHref |
+ * @param {number=} fallbackLineNumber |
+ * @param {string=} title |
+ * @param {string=} classes |
+ * @return {!Element} |
+ */ |
+ static linkifyUsingRevealer(revealable, text, fallbackHref, fallbackLineNumber, title, classes) { |
+ var a = createElement('a'); |
+ a.className = (classes || '') + ' webkit-html-resource-link'; |
a.textContent = text.trimMiddle(WebInspector.Linkifier.MaxLengthForDisplayedURLs); |
a.title = title || text; |
if (fallbackHref) { |
- a.href = fallbackHref; |
- a.lineNumber = fallbackLineNumber; |
+ a.href = fallbackHref; |
+ a.lineNumber = fallbackLineNumber; |
} |
/** |
* @param {!Event} event |
* @this {Object} |
*/ |
- function clickHandler(event) |
- { |
- event.stopImmediatePropagation(); |
- event.preventDefault(); |
- if (fallbackHref && WebInspector.Linkifier.handleLink(fallbackHref, fallbackLineNumber)) |
- return; |
- |
- WebInspector.Revealer.reveal(this); |
+ function clickHandler(event) { |
+ event.stopImmediatePropagation(); |
+ event.preventDefault(); |
+ if (fallbackHref && WebInspector.Linkifier.handleLink(fallbackHref, fallbackLineNumber)) |
+ return; |
+ |
+ WebInspector.Revealer.reveal(this); |
} |
- a.addEventListener("click", clickHandler.bind(revealable), false); |
+ a.addEventListener('click', clickHandler.bind(revealable), false); |
return a; |
-}; |
- |
-WebInspector.Linkifier._uiLocationSymbol = Symbol("uiLocation"); |
-WebInspector.Linkifier._fallbackAnchorSymbol = Symbol("fallbackAnchor"); |
-WebInspector.Linkifier._liveLocationSymbol = Symbol("liveLocation"); |
- |
-WebInspector.Linkifier.prototype = { |
- /** |
- * @override |
- * @param {!WebInspector.Target} target |
- */ |
- targetAdded: function(target) |
- { |
- this._anchorsByTarget.set(target, []); |
- this._locationPoolByTarget.set(target, new WebInspector.LiveLocationPool()); |
- }, |
- |
- /** |
- * @override |
- * @param {!WebInspector.Target} target |
- */ |
- targetRemoved: function(target) |
- { |
- var locationPool = /** @type {!WebInspector.LiveLocationPool} */(this._locationPoolByTarget.remove(target)); |
- locationPool.disposeAll(); |
- var anchors = this._anchorsByTarget.remove(target); |
- for (var anchor of anchors) { |
- delete anchor[WebInspector.Linkifier._liveLocationSymbol]; |
- var fallbackAnchor = anchor[WebInspector.Linkifier._fallbackAnchorSymbol]; |
- if (fallbackAnchor) { |
- anchor.href = fallbackAnchor.href; |
- anchor.lineNumber = fallbackAnchor.lineNumber; |
- anchor.title = fallbackAnchor.title; |
- anchor.className = fallbackAnchor.className; |
- anchor.textContent = fallbackAnchor.textContent; |
- delete anchor[WebInspector.Linkifier._fallbackAnchorSymbol]; |
- } |
- } |
- }, |
- |
- /** |
- * @param {?WebInspector.Target} target |
- * @param {?string} scriptId |
- * @param {string} sourceURL |
- * @param {number} lineNumber |
- * @param {number=} columnNumber |
- * @param {string=} classes |
- * @return {?Element} |
- */ |
- maybeLinkifyScriptLocation: function(target, scriptId, sourceURL, lineNumber, columnNumber, classes) |
- { |
- var fallbackAnchor = sourceURL ? WebInspector.linkifyResourceAsNode(sourceURL, lineNumber, columnNumber, classes) : null; |
- if (!target || target.isDisposed()) |
- return fallbackAnchor; |
- var debuggerModel = WebInspector.DebuggerModel.fromTarget(target); |
- if (!debuggerModel) |
- return fallbackAnchor; |
- |
- var rawLocation = |
- (scriptId ? debuggerModel.createRawLocationByScriptId(scriptId, lineNumber, columnNumber || 0) : null) || |
- debuggerModel.createRawLocationByURL(sourceURL, lineNumber, columnNumber || 0); |
- if (!rawLocation) |
- return fallbackAnchor; |
- |
- var anchor = this._createAnchor(classes); |
- var liveLocation = WebInspector.debuggerWorkspaceBinding.createLiveLocation(rawLocation, this._updateAnchor.bind(this, anchor), /** @type {!WebInspector.LiveLocationPool} */(this._locationPoolByTarget.get(rawLocation.target()))); |
- var anchors = /** @type {!Array<!Element>} */(this._anchorsByTarget.get(rawLocation.target())); |
- anchors.push(anchor); |
- anchor[WebInspector.Linkifier._liveLocationSymbol] = liveLocation; |
- anchor[WebInspector.Linkifier._fallbackAnchorSymbol] = fallbackAnchor; |
- return anchor; |
- }, |
- |
- /** |
- * @param {?WebInspector.Target} target |
- * @param {?string} scriptId |
- * @param {string} sourceURL |
- * @param {number} lineNumber |
- * @param {number=} columnNumber |
- * @param {string=} classes |
- * @return {!Element} |
- */ |
- linkifyScriptLocation: function(target, scriptId, sourceURL, lineNumber, columnNumber, classes) |
- { |
- return this.maybeLinkifyScriptLocation(target, scriptId, sourceURL, lineNumber, columnNumber, classes) |
- || WebInspector.linkifyResourceAsNode(sourceURL, lineNumber, columnNumber, classes); |
- }, |
- |
- /** |
- * @param {!WebInspector.DebuggerModel.Location} rawLocation |
- * @param {string} fallbackUrl |
- * @param {string=} classes |
- * @return {!Element} |
- */ |
- linkifyRawLocation: function(rawLocation, fallbackUrl, classes) |
- { |
- return this.linkifyScriptLocation(rawLocation.target(), rawLocation.scriptId, fallbackUrl, rawLocation.lineNumber, rawLocation.columnNumber, classes); |
- }, |
- |
- /** |
- * @param {?WebInspector.Target} target |
- * @param {!RuntimeAgent.CallFrame} callFrame |
- * @param {string=} classes |
- * @return {?Element} |
- */ |
- maybeLinkifyConsoleCallFrame: function(target, callFrame, classes) |
- { |
- return this.maybeLinkifyScriptLocation(target, callFrame.scriptId, callFrame.url, callFrame.lineNumber, callFrame.columnNumber, classes); |
- }, |
- |
- /** |
- * @param {!WebInspector.Target} target |
- * @param {!RuntimeAgent.StackTrace} stackTrace |
- * @param {string=} classes |
- * @return {!Element} |
- */ |
- linkifyStackTraceTopFrame: function(target, stackTrace, classes) |
- { |
- console.assert(stackTrace.callFrames && stackTrace.callFrames.length); |
- |
- var topFrame = stackTrace.callFrames[0]; |
- var fallbackAnchor = WebInspector.linkifyResourceAsNode(topFrame.url, topFrame.lineNumber, topFrame.columnNumber, classes); |
- if (target.isDisposed()) |
- return fallbackAnchor; |
- |
- var debuggerModel = WebInspector.DebuggerModel.fromTarget(target); |
- var rawLocations = debuggerModel.createRawLocationsByStackTrace(stackTrace); |
- if (rawLocations.length === 0) |
- return fallbackAnchor; |
- |
- var anchor = this._createAnchor(classes); |
- var liveLocation = WebInspector.debuggerWorkspaceBinding.createStackTraceTopFrameLiveLocation(rawLocations, this._updateAnchor.bind(this, anchor), /** @type {!WebInspector.LiveLocationPool} */(this._locationPoolByTarget.get(target))); |
- var anchors = /** @type {!Array<!Element>} */(this._anchorsByTarget.get(target)); |
- anchors.push(anchor); |
- anchor[WebInspector.Linkifier._liveLocationSymbol] = liveLocation; |
- anchor[WebInspector.Linkifier._fallbackAnchorSymbol] = fallbackAnchor; |
- return anchor; |
- }, |
- |
- /** |
- * @param {!WebInspector.CSSLocation} rawLocation |
- * @param {string=} classes |
- * @return {!Element} |
- */ |
- linkifyCSSLocation: function(rawLocation, classes) |
- { |
- var anchor = this._createAnchor(classes); |
- var liveLocation = WebInspector.cssWorkspaceBinding.createLiveLocation(rawLocation, this._updateAnchor.bind(this, anchor), /** @type {!WebInspector.LiveLocationPool} */(this._locationPoolByTarget.get(rawLocation.target()))); |
- var anchors = /** @type {!Array<!Element>} */(this._anchorsByTarget.get(rawLocation.target())); |
- anchors.push(anchor); |
- anchor[WebInspector.Linkifier._liveLocationSymbol] = liveLocation; |
- return anchor; |
- }, |
+ } |
- /** |
- * @param {!WebInspector.Target} target |
- * @param {!Element} anchor |
- */ |
- disposeAnchor: function(target, anchor) |
- { |
- delete anchor[WebInspector.Linkifier._uiLocationSymbol]; |
+ /** |
+ * @param {!Element} anchor |
+ * @return {?WebInspector.UILocation} uiLocation |
+ */ |
+ static uiLocationByAnchor(anchor) { |
+ return anchor[WebInspector.Linkifier._uiLocationSymbol]; |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.Target} target |
+ * @param {string} scriptId |
+ * @param {number} lineNumber |
+ * @param {number=} columnNumber |
+ * @return {string} |
+ */ |
+ static liveLocationText(target, scriptId, lineNumber, columnNumber) { |
+ var debuggerModel = WebInspector.DebuggerModel.fromTarget(target); |
+ if (!debuggerModel) |
+ return ''; |
+ var script = debuggerModel.scriptForId(scriptId); |
+ if (!script) |
+ return ''; |
+ var location = /** @type {!WebInspector.DebuggerModel.Location} */ ( |
+ debuggerModel.createRawLocation(script, lineNumber, columnNumber || 0)); |
+ var uiLocation = /** @type {!WebInspector.UILocation} */ ( |
+ WebInspector.debuggerWorkspaceBinding.rawLocationToUILocation(location)); |
+ return uiLocation.linkText(); |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {!WebInspector.Target} target |
+ */ |
+ targetAdded(target) { |
+ this._anchorsByTarget.set(target, []); |
+ this._locationPoolByTarget.set(target, new WebInspector.LiveLocationPool()); |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {!WebInspector.Target} target |
+ */ |
+ targetRemoved(target) { |
+ var locationPool = /** @type {!WebInspector.LiveLocationPool} */ (this._locationPoolByTarget.remove(target)); |
+ locationPool.disposeAll(); |
+ var anchors = this._anchorsByTarget.remove(target); |
+ for (var anchor of anchors) { |
+ delete anchor[WebInspector.Linkifier._liveLocationSymbol]; |
+ var fallbackAnchor = anchor[WebInspector.Linkifier._fallbackAnchorSymbol]; |
+ if (fallbackAnchor) { |
+ anchor.href = fallbackAnchor.href; |
+ anchor.lineNumber = fallbackAnchor.lineNumber; |
+ anchor.title = fallbackAnchor.title; |
+ anchor.className = fallbackAnchor.className; |
+ anchor.textContent = fallbackAnchor.textContent; |
delete anchor[WebInspector.Linkifier._fallbackAnchorSymbol]; |
- var liveLocation = anchor[WebInspector.Linkifier._liveLocationSymbol]; |
- if (liveLocation) |
- liveLocation.dispose(); |
- delete anchor[WebInspector.Linkifier._liveLocationSymbol]; |
- }, |
+ } |
+ } |
+ } |
+ |
+ /** |
+ * @param {?WebInspector.Target} target |
+ * @param {?string} scriptId |
+ * @param {string} sourceURL |
+ * @param {number} lineNumber |
+ * @param {number=} columnNumber |
+ * @param {string=} classes |
+ * @return {?Element} |
+ */ |
+ maybeLinkifyScriptLocation(target, scriptId, sourceURL, lineNumber, columnNumber, classes) { |
+ var fallbackAnchor = |
+ sourceURL ? WebInspector.linkifyResourceAsNode(sourceURL, lineNumber, columnNumber, classes) : null; |
+ if (!target || target.isDisposed()) |
+ return fallbackAnchor; |
+ var debuggerModel = WebInspector.DebuggerModel.fromTarget(target); |
+ if (!debuggerModel) |
+ return fallbackAnchor; |
+ |
+ var rawLocation = |
+ (scriptId ? debuggerModel.createRawLocationByScriptId(scriptId, lineNumber, columnNumber || 0) : null) || |
+ debuggerModel.createRawLocationByURL(sourceURL, lineNumber, columnNumber || 0); |
+ if (!rawLocation) |
+ return fallbackAnchor; |
+ |
+ var anchor = this._createAnchor(classes); |
+ var liveLocation = WebInspector.debuggerWorkspaceBinding.createLiveLocation( |
+ rawLocation, this._updateAnchor.bind(this, anchor), |
+ /** @type {!WebInspector.LiveLocationPool} */ (this._locationPoolByTarget.get(rawLocation.target()))); |
+ var anchors = /** @type {!Array<!Element>} */ (this._anchorsByTarget.get(rawLocation.target())); |
+ anchors.push(anchor); |
+ anchor[WebInspector.Linkifier._liveLocationSymbol] = liveLocation; |
+ anchor[WebInspector.Linkifier._fallbackAnchorSymbol] = fallbackAnchor; |
+ return anchor; |
+ } |
+ |
+ /** |
+ * @param {?WebInspector.Target} target |
+ * @param {?string} scriptId |
+ * @param {string} sourceURL |
+ * @param {number} lineNumber |
+ * @param {number=} columnNumber |
+ * @param {string=} classes |
+ * @return {!Element} |
+ */ |
+ linkifyScriptLocation(target, scriptId, sourceURL, lineNumber, columnNumber, classes) { |
+ return this.maybeLinkifyScriptLocation(target, scriptId, sourceURL, lineNumber, columnNumber, classes) || |
+ WebInspector.linkifyResourceAsNode(sourceURL, lineNumber, columnNumber, classes); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.DebuggerModel.Location} rawLocation |
+ * @param {string} fallbackUrl |
+ * @param {string=} classes |
+ * @return {!Element} |
+ */ |
+ linkifyRawLocation(rawLocation, fallbackUrl, classes) { |
+ return this.linkifyScriptLocation( |
+ rawLocation.target(), rawLocation.scriptId, fallbackUrl, rawLocation.lineNumber, rawLocation.columnNumber, |
+ classes); |
+ } |
+ |
+ /** |
+ * @param {?WebInspector.Target} target |
+ * @param {!RuntimeAgent.CallFrame} callFrame |
+ * @param {string=} classes |
+ * @return {?Element} |
+ */ |
+ maybeLinkifyConsoleCallFrame(target, callFrame, classes) { |
+ return this.maybeLinkifyScriptLocation( |
+ target, callFrame.scriptId, callFrame.url, callFrame.lineNumber, callFrame.columnNumber, classes); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.Target} target |
+ * @param {!RuntimeAgent.StackTrace} stackTrace |
+ * @param {string=} classes |
+ * @return {!Element} |
+ */ |
+ linkifyStackTraceTopFrame(target, stackTrace, classes) { |
+ console.assert(stackTrace.callFrames && stackTrace.callFrames.length); |
+ |
+ var topFrame = stackTrace.callFrames[0]; |
+ var fallbackAnchor = |
+ WebInspector.linkifyResourceAsNode(topFrame.url, topFrame.lineNumber, topFrame.columnNumber, classes); |
+ if (target.isDisposed()) |
+ return fallbackAnchor; |
- /** |
- * @param {string=} classes |
- * @return {!Element} |
- */ |
- _createAnchor: function(classes) |
- { |
- var anchor = createElement("a"); |
- anchor.className = (classes || "") + " webkit-html-resource-link"; |
- |
- /** |
- * @param {!Event} event |
- */ |
- function clickHandler(event) |
- { |
- var uiLocation = anchor[WebInspector.Linkifier._uiLocationSymbol]; |
- if (!uiLocation) |
- return; |
- |
- event.consume(true); |
- if (WebInspector.Linkifier.handleLink(uiLocation.uiSourceCode.url(), uiLocation.lineNumber)) |
- return; |
- WebInspector.Revealer.reveal(uiLocation); |
- } |
- anchor.addEventListener("click", clickHandler, false); |
- return anchor; |
- }, |
- |
- reset: function() |
- { |
- for (var target of this._anchorsByTarget.keysArray()) { |
- this.targetRemoved(target); |
- this.targetAdded(target); |
- } |
- }, |
- |
- dispose: function() |
- { |
- for (var target of this._anchorsByTarget.keysArray()) |
- this.targetRemoved(target); |
- WebInspector.targetManager.unobserveTargets(this); |
- }, |
+ var debuggerModel = WebInspector.DebuggerModel.fromTarget(target); |
+ var rawLocations = debuggerModel.createRawLocationsByStackTrace(stackTrace); |
+ if (rawLocations.length === 0) |
+ return fallbackAnchor; |
+ |
+ var anchor = this._createAnchor(classes); |
+ var liveLocation = WebInspector.debuggerWorkspaceBinding.createStackTraceTopFrameLiveLocation( |
+ rawLocations, this._updateAnchor.bind(this, anchor), |
+ /** @type {!WebInspector.LiveLocationPool} */ (this._locationPoolByTarget.get(target))); |
+ var anchors = /** @type {!Array<!Element>} */ (this._anchorsByTarget.get(target)); |
+ anchors.push(anchor); |
+ anchor[WebInspector.Linkifier._liveLocationSymbol] = liveLocation; |
+ anchor[WebInspector.Linkifier._fallbackAnchorSymbol] = fallbackAnchor; |
+ return anchor; |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.CSSLocation} rawLocation |
+ * @param {string=} classes |
+ * @return {!Element} |
+ */ |
+ linkifyCSSLocation(rawLocation, classes) { |
+ var anchor = this._createAnchor(classes); |
+ var liveLocation = WebInspector.cssWorkspaceBinding.createLiveLocation( |
+ rawLocation, this._updateAnchor.bind(this, anchor), |
+ /** @type {!WebInspector.LiveLocationPool} */ (this._locationPoolByTarget.get(rawLocation.target()))); |
+ var anchors = /** @type {!Array<!Element>} */ (this._anchorsByTarget.get(rawLocation.target())); |
+ anchors.push(anchor); |
+ anchor[WebInspector.Linkifier._liveLocationSymbol] = liveLocation; |
+ return anchor; |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.Target} target |
+ * @param {!Element} anchor |
+ */ |
+ disposeAnchor(target, anchor) { |
+ delete anchor[WebInspector.Linkifier._uiLocationSymbol]; |
+ delete anchor[WebInspector.Linkifier._fallbackAnchorSymbol]; |
+ var liveLocation = anchor[WebInspector.Linkifier._liveLocationSymbol]; |
+ if (liveLocation) |
+ liveLocation.dispose(); |
+ delete anchor[WebInspector.Linkifier._liveLocationSymbol]; |
+ } |
+ |
+ /** |
+ * @param {string=} classes |
+ * @return {!Element} |
+ */ |
+ _createAnchor(classes) { |
+ var anchor = createElement('a'); |
+ anchor.className = (classes || '') + ' webkit-html-resource-link'; |
/** |
- * @param {!Element} anchor |
- * @param {!WebInspector.LiveLocation} liveLocation |
+ * @param {!Event} event |
*/ |
- _updateAnchor: function(anchor, liveLocation) |
- { |
- var uiLocation = liveLocation.uiLocation(); |
- if (!uiLocation) |
- return; |
- anchor[WebInspector.Linkifier._uiLocationSymbol] = uiLocation; |
- this._formatter.formatLiveAnchor(anchor, uiLocation, liveLocation.isBlackboxed()); |
+ function clickHandler(event) { |
+ var uiLocation = anchor[WebInspector.Linkifier._uiLocationSymbol]; |
+ if (!uiLocation) |
+ return; |
+ |
+ event.consume(true); |
+ if (WebInspector.Linkifier.handleLink(uiLocation.uiSourceCode.url(), uiLocation.lineNumber)) |
+ return; |
+ WebInspector.Revealer.reveal(uiLocation); |
} |
-}; |
+ anchor.addEventListener('click', clickHandler, false); |
+ return anchor; |
+ } |
-/** |
- * @param {!Element} anchor |
- * @return {?WebInspector.UILocation} uiLocation |
- */ |
-WebInspector.Linkifier.uiLocationByAnchor = function(anchor) |
-{ |
- return anchor[WebInspector.Linkifier._uiLocationSymbol]; |
+ reset() { |
+ for (var target of this._anchorsByTarget.keysArray()) { |
+ this.targetRemoved(target); |
+ this.targetAdded(target); |
+ } |
+ } |
+ |
+ dispose() { |
+ for (var target of this._anchorsByTarget.keysArray()) |
+ this.targetRemoved(target); |
+ WebInspector.targetManager.unobserveTargets(this); |
+ } |
+ |
+ /** |
+ * @param {!Element} anchor |
+ * @param {!WebInspector.LiveLocation} liveLocation |
+ */ |
+ _updateAnchor(anchor, liveLocation) { |
+ var uiLocation = liveLocation.uiLocation(); |
+ if (!uiLocation) |
+ return; |
+ anchor[WebInspector.Linkifier._uiLocationSymbol] = uiLocation; |
+ this._formatter.formatLiveAnchor(anchor, uiLocation, liveLocation.isBlackboxed()); |
+ } |
}; |
+ |
+WebInspector.Linkifier._uiLocationSymbol = Symbol('uiLocation'); |
+WebInspector.Linkifier._fallbackAnchorSymbol = Symbol('fallbackAnchor'); |
+WebInspector.Linkifier._liveLocationSymbol = Symbol('liveLocation'); |
+ |
+ |
/** |
- * @constructor |
* @implements {WebInspector.LinkifierFormatter} |
- * @param {number=} maxLength |
+ * @unrestricted |
*/ |
-WebInspector.Linkifier.DefaultFormatter = function(maxLength) |
-{ |
+WebInspector.Linkifier.DefaultFormatter = class { |
+ /** |
+ * @param {number=} maxLength |
+ */ |
+ constructor(maxLength) { |
this._maxLength = maxLength; |
-}; |
- |
-WebInspector.Linkifier.DefaultFormatter.prototype = { |
- /** |
- * @override |
- * @param {!Element} anchor |
- * @param {!WebInspector.UILocation} uiLocation |
- * @param {boolean} isBlackboxed |
- */ |
- formatLiveAnchor: function(anchor, uiLocation, isBlackboxed) |
- { |
- var text = uiLocation.linkText(); |
- text = text.replace(/([a-f0-9]{7})[a-f0-9]{13}[a-f0-9]*/g, "$1\u2026"); |
- if (this._maxLength) |
- text = text.trimMiddle(this._maxLength); |
- anchor.textContent = text; |
- |
- var titleText = uiLocation.uiSourceCode.url(); |
- if (typeof uiLocation.lineNumber === "number") |
- titleText += ":" + (uiLocation.lineNumber + 1); |
- anchor.title = titleText; |
- |
- anchor.classList.toggle("webkit-html-blackbox-link", isBlackboxed); |
- } |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {!Element} anchor |
+ * @param {!WebInspector.UILocation} uiLocation |
+ * @param {boolean} isBlackboxed |
+ */ |
+ formatLiveAnchor(anchor, uiLocation, isBlackboxed) { |
+ var text = uiLocation.linkText(); |
+ text = text.replace(/([a-f0-9]{7})[a-f0-9]{13}[a-f0-9]*/g, '$1\u2026'); |
+ if (this._maxLength) |
+ text = text.trimMiddle(this._maxLength); |
+ anchor.textContent = text; |
+ |
+ var titleText = uiLocation.uiSourceCode.url(); |
+ if (typeof uiLocation.lineNumber === 'number') |
+ titleText += ':' + (uiLocation.lineNumber + 1); |
+ anchor.title = titleText; |
+ |
+ anchor.classList.toggle('webkit-html-blackbox-link', isBlackboxed); |
+ } |
}; |
/** |
- * @constructor |
- * @extends {WebInspector.Linkifier.DefaultFormatter} |
+ * @unrestricted |
*/ |
-WebInspector.Linkifier.DefaultCSSFormatter = function() |
-{ |
- WebInspector.Linkifier.DefaultFormatter.call(this, WebInspector.Linkifier.DefaultCSSFormatter.MaxLengthForDisplayedURLs); |
+WebInspector.Linkifier.DefaultCSSFormatter = class extends WebInspector.Linkifier.DefaultFormatter { |
+ constructor() { |
+ super(WebInspector.Linkifier.DefaultCSSFormatter.MaxLengthForDisplayedURLs); |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {!Element} anchor |
+ * @param {!WebInspector.UILocation} uiLocation |
+ * @param {boolean} isBlackboxed |
+ */ |
+ formatLiveAnchor(anchor, uiLocation, isBlackboxed) { |
+ super.formatLiveAnchor(anchor, uiLocation, isBlackboxed); |
+ anchor.classList.add('webkit-html-resource-link'); |
+ anchor.setAttribute('data-uncopyable', anchor.textContent); |
+ anchor.textContent = ''; |
+ } |
}; |
WebInspector.Linkifier.DefaultCSSFormatter.MaxLengthForDisplayedURLs = 30; |
-WebInspector.Linkifier.DefaultCSSFormatter.prototype = { |
- /** |
- * @override |
- * @param {!Element} anchor |
- * @param {!WebInspector.UILocation} uiLocation |
- * @param {boolean} isBlackboxed |
- */ |
- formatLiveAnchor: function(anchor, uiLocation, isBlackboxed) |
- { |
- WebInspector.Linkifier.DefaultFormatter.prototype.formatLiveAnchor.call(this, anchor, uiLocation, isBlackboxed); |
- anchor.classList.add("webkit-html-resource-link"); |
- anchor.setAttribute("data-uncopyable", anchor.textContent); |
- anchor.textContent = ""; |
- }, |
- __proto__: WebInspector.Linkifier.DefaultFormatter.prototype |
-}; |
- |
/** |
* The maximum number of characters to display in a URL. |
* @const |
@@ -425,106 +435,84 @@ WebInspector.Linkifier.MaxLengthToIgnoreLinkifier = 10000; |
/** |
* @interface |
*/ |
-WebInspector.Linkifier.LinkHandler = function() |
-{ |
-}; |
+WebInspector.Linkifier.LinkHandler = function() {}; |
WebInspector.Linkifier.LinkHandler.prototype = { |
- /** |
- * @param {string} url |
- * @param {number=} lineNumber |
- * @return {boolean} |
- */ |
- handleLink: function(url, lineNumber) {} |
+ /** |
+ * @param {string} url |
+ * @param {number=} lineNumber |
+ * @return {boolean} |
+ */ |
+ handleLink: function(url, lineNumber) {} |
}; |
-/** |
- * @param {!WebInspector.Target} target |
- * @param {string} scriptId |
- * @param {number} lineNumber |
- * @param {number=} columnNumber |
- * @return {string} |
- */ |
-WebInspector.Linkifier.liveLocationText = function(target, scriptId, lineNumber, columnNumber) |
-{ |
- var debuggerModel = WebInspector.DebuggerModel.fromTarget(target); |
- if (!debuggerModel) |
- return ""; |
- var script = debuggerModel.scriptForId(scriptId); |
- if (!script) |
- return ""; |
- var location = /** @type {!WebInspector.DebuggerModel.Location} */ (debuggerModel.createRawLocation(script, lineNumber, columnNumber || 0)); |
- var uiLocation = /** @type {!WebInspector.UILocation} */ (WebInspector.debuggerWorkspaceBinding.rawLocationToUILocation(location)); |
- return uiLocation.linkText(); |
-}; |
/** |
* @param {string} string |
* @param {function(string,string,number=,number=):!Node} linkifier |
* @return {!DocumentFragment} |
*/ |
-WebInspector.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 < WebInspector.Linkifier.MaxLengthToIgnoreLinkifier) { |
- var linkString = linkStringRegEx.exec(string) || pathLineRegex.exec(string); |
- if (!linkString) |
- break; |
- |
- linkString = linkString[0]; |
- var linkIndex = string.indexOf(linkString); |
- var nonLink = string.substring(0, linkIndex); |
- container.appendChild(createTextNode(nonLink)); |
- |
- var title = linkString; |
- var realURL = (linkString.startsWith("www.") ? "http://" + linkString : linkString); |
- var splitResult = WebInspector.ParsedURL.splitLineAndColumn(realURL); |
- var linkNode; |
- if (splitResult) |
- linkNode = linkifier(title, splitResult.url, splitResult.lineNumber, splitResult.columnNumber); |
- else |
- linkNode = linkifier(title, realURL); |
- |
- container.appendChild(linkNode); |
- string = string.substring(linkIndex + linkString.length, string.length); |
- } |
- |
- if (string) |
- container.appendChild(createTextNode(string)); |
- |
- return container; |
+WebInspector.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 < WebInspector.Linkifier.MaxLengthToIgnoreLinkifier) { |
+ var linkString = linkStringRegEx.exec(string) || pathLineRegex.exec(string); |
+ if (!linkString) |
+ break; |
+ |
+ linkString = linkString[0]; |
+ var linkIndex = string.indexOf(linkString); |
+ var nonLink = string.substring(0, linkIndex); |
+ container.appendChild(createTextNode(nonLink)); |
+ |
+ var title = linkString; |
+ var realURL = (linkString.startsWith('www.') ? 'http://' + linkString : linkString); |
+ var splitResult = WebInspector.ParsedURL.splitLineAndColumn(realURL); |
+ var linkNode; |
+ if (splitResult) |
+ linkNode = linkifier(title, splitResult.url, splitResult.lineNumber, splitResult.columnNumber); |
+ else |
+ linkNode = linkifier(title, realURL); |
+ |
+ container.appendChild(linkNode); |
+ string = string.substring(linkIndex + linkString.length, string.length); |
+ } |
+ |
+ if (string) |
+ container.appendChild(createTextNode(string)); |
+ |
+ return container; |
}; |
/** |
* @param {string} string |
* @return {!DocumentFragment} |
*/ |
-WebInspector.linkifyStringAsFragment = function(string) |
-{ |
- /** |
- * @param {string} title |
- * @param {string} url |
- * @param {number=} lineNumber |
- * @param {number=} columnNumber |
- * @return {!Node} |
- */ |
- function linkifier(title, url, lineNumber, columnNumber) |
- { |
- var isExternal = !WebInspector.resourceForURL(url) && !WebInspector.networkMapping.uiSourceCodeForURLForAnyTarget(url); |
- var urlNode = WebInspector.linkifyURLAsNode(url, title, undefined, isExternal); |
- if (typeof lineNumber !== "undefined") { |
- urlNode.lineNumber = lineNumber; |
- if (typeof columnNumber !== "undefined") |
- urlNode.columnNumber = columnNumber; |
- } |
- |
- return urlNode; |
+WebInspector.linkifyStringAsFragment = function(string) { |
+ /** |
+ * @param {string} title |
+ * @param {string} url |
+ * @param {number=} lineNumber |
+ * @param {number=} columnNumber |
+ * @return {!Node} |
+ */ |
+ function linkifier(title, url, lineNumber, columnNumber) { |
+ var isExternal = |
+ !WebInspector.resourceForURL(url) && !WebInspector.networkMapping.uiSourceCodeForURLForAnyTarget(url); |
+ var urlNode = WebInspector.linkifyURLAsNode(url, title, undefined, isExternal); |
+ if (typeof lineNumber !== 'undefined') { |
+ urlNode.lineNumber = lineNumber; |
+ if (typeof columnNumber !== 'undefined') |
+ urlNode.columnNumber = columnNumber; |
} |
- return WebInspector.linkifyStringAsFragmentWithCustomLinkifier(string, linkifier); |
+ return urlNode; |
+ } |
+ |
+ return WebInspector.linkifyStringAsFragmentWithCustomLinkifier(string, linkifier); |
}; |
/** |
@@ -536,29 +524,27 @@ WebInspector.linkifyStringAsFragment = function(string) |
* @param {string=} urlDisplayName |
* @return {!Element} |
*/ |
-WebInspector.linkifyResourceAsNode = function(url, lineNumber, columnNumber, classes, tooltipText, urlDisplayName) |
-{ |
- if (!url) { |
- var element = createElementWithClass("span", classes); |
- element.textContent = urlDisplayName || WebInspector.UIString("(unknown)"); |
- return element; |
- } |
- var linkText = urlDisplayName || WebInspector.displayNameForURL(url); |
- if (typeof lineNumber === "number") |
- linkText += ":" + (lineNumber + 1); |
- var anchor = WebInspector.linkifyURLAsNode(url, linkText, classes, false, tooltipText); |
- anchor.lineNumber = lineNumber; |
- anchor.columnNumber = columnNumber; |
- return anchor; |
+WebInspector.linkifyResourceAsNode = function(url, lineNumber, columnNumber, classes, tooltipText, urlDisplayName) { |
+ if (!url) { |
+ var element = createElementWithClass('span', classes); |
+ element.textContent = urlDisplayName || WebInspector.UIString('(unknown)'); |
+ return element; |
+ } |
+ var linkText = urlDisplayName || WebInspector.displayNameForURL(url); |
+ if (typeof lineNumber === 'number') |
+ linkText += ':' + (lineNumber + 1); |
+ var anchor = WebInspector.linkifyURLAsNode(url, linkText, classes, false, tooltipText); |
+ anchor.lineNumber = lineNumber; |
+ anchor.columnNumber = columnNumber; |
+ return anchor; |
}; |
/** |
* @param {!WebInspector.NetworkRequest} request |
* @return {!Element} |
*/ |
-WebInspector.linkifyRequestAsNode = function(request) |
-{ |
- var anchor = WebInspector.linkifyURLAsNode(request.url); |
- anchor.requestId = request.requestId; |
- return anchor; |
+WebInspector.linkifyRequestAsNode = function(request) { |
+ var anchor = WebInspector.linkifyURLAsNode(request.url); |
+ anchor.requestId = request.requestId; |
+ return anchor; |
}; |