diff options
Diffstat (limited to 'Source/WebInspectorUI/UserInterface/SourceCodeLocation.js')
-rw-r--r-- | Source/WebInspectorUI/UserInterface/SourceCodeLocation.js | 455 |
1 files changed, 0 insertions, 455 deletions
diff --git a/Source/WebInspectorUI/UserInterface/SourceCodeLocation.js b/Source/WebInspectorUI/UserInterface/SourceCodeLocation.js deleted file mode 100644 index 583e132ce..000000000 --- a/Source/WebInspectorUI/UserInterface/SourceCodeLocation.js +++ /dev/null @@ -1,455 +0,0 @@ -/* - * Copyright (C) 2013 Apple Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF - * THE POSSIBILITY OF SUCH DAMAGE. - */ - -WebInspector.SourceCodeLocation = function(sourceCode, lineNumber, columnNumber) -{ - WebInspector.Object.call(this); - - console.assert(sourceCode === null || sourceCode instanceof WebInspector.SourceCode); - console.assert(!(sourceCode instanceof WebInspector.SourceMapResource)); - console.assert(typeof lineNumber === "number" && !isNaN(lineNumber) && lineNumber >= 0); - console.assert(typeof columnNumber === "number" && !isNaN(columnNumber) && columnNumber >= 0); - - this._sourceCode = sourceCode || null; - this._lineNumber = lineNumber; - this._columnNumber = columnNumber; - this._resolveFormattedLocation(); - - if (this._sourceCode) { - this._sourceCode.addEventListener(WebInspector.SourceCode.Event.SourceMapAdded, this._sourceCodeSourceMapAdded, this); - this._sourceCode.addEventListener(WebInspector.SourceCode.Event.FormatterDidChange, this._sourceCodeFormatterDidChange, this); - } - - this._resetMappedLocation(); -}; - -WebInspector.SourceCodeLocation.DisplayLocationClassName = "display-location"; - -WebInspector.SourceCodeLocation.LargeColumnNumber = 80; - -WebInspector.SourceCodeLocation.NameStyle = { - None: "none", // File name not included. - Short: "short", // Only the file name. - Full: "full" // Full URL is used. -}; - -WebInspector.SourceCodeLocation.ColumnStyle = { - Hidden: "hidden", // column numbers are not included. - OnlyIfLarge: "only-if-large", // column numbers greater than 80 are shown. - Shown: "shown" // non-zero column numbers are shown. -}; - -WebInspector.SourceCodeLocation.Event = { - LocationChanged: "source-code-location-location-changed", - DisplayLocationChanged: "source-code-location-display-location-changed" -}; - -WebInspector.SourceCodeLocation.prototype = { - constructor: WebInspector.SourceCodeLocation, - - // Public - - isEqual: function(other) - { - if (!other) - return false; - return this._sourceCode === other._sourceCode && this._lineNumber === other._lineNumber && this._columnNumber === other._columnNumber; - }, - - get sourceCode() - { - return this._sourceCode; - }, - - set sourceCode(sourceCode) - { - console.assert((this._sourceCode === null && sourceCode instanceof WebInspector.SourceCode) || (this._sourceCode instanceof WebInspector.SourceCode && sourceCode === null)); - - if (sourceCode === this._sourceCode) - return; - - this._makeChangeAndDispatchChangeEventIfNeeded(function() { - if (this._sourceCode) { - this._sourceCode.removeEventListener(WebInspector.SourceCode.Event.SourceMapAdded, this._sourceCodeSourceMapAdded, this); - this._sourceCode.removeEventListener(WebInspector.SourceCode.Event.FormatterDidChange, this._sourceCodeFormatterDidChange, this); - } - - this._sourceCode = sourceCode; - - if (this._sourceCode) { - this._sourceCode.addEventListener(WebInspector.SourceCode.Event.SourceMapAdded, this._sourceCodeSourceMapAdded, this); - this._sourceCode.addEventListener(WebInspector.SourceCode.Event.FormatterDidChange, this._sourceCodeFormatterDidChange, this); - } - }); - }, - - // Raw line and column in the original source code. - - get lineNumber() - { - return this._lineNumber; - }, - - get columnNumber() - { - return this._columnNumber; - }, - - position: function() - { - return new WebInspector.SourceCodePosition(this.lineNumber, this.columnNumber); - }, - - // Formatted line and column if the original source code is pretty printed. - // This is the same as the raw location if there is no formatter. - - get formattedLineNumber() - { - return this._formattedLineNumber; - }, - - get formattedColumnNumber() - { - return this._formattedColumnNumber; - }, - - formattedPosition: function() - { - return new WebInspector.SourceCodePosition(this.formattedLineNumber, this.formattedColumnNumber); - }, - - // Display line and column: - // - Mapped line and column if the original source code has a source map. - // - Otherwise this is the formatted / raw line and column. - - get displaySourceCode() - { - this._resolveMappedLocation(); - return this._mappedResource || this._sourceCode; - }, - - get displayLineNumber() - { - this._resolveMappedLocation(); - return isNaN(this._mappedLineNumber) ? this._formattedLineNumber : this._mappedLineNumber; - }, - - get displayColumnNumber() - { - this._resolveMappedLocation(); - return isNaN(this._mappedColumnNumber) ? this._formattedColumnNumber : this._mappedColumnNumber; - }, - - displayPosition: function() - { - return new WebInspector.SourceCodePosition(this.displayLineNumber, this.displayColumnNumber); - }, - - // User presentable location strings: "file:lineNumber:columnNumber". - - originalLocationString: function(columnStyle, nameStyle, prefix) - { - return this._locationString(this.sourceCode, this.lineNumber, this.columnNumber, columnStyle, nameStyle, prefix); - }, - - formattedLocationString: function(columnStyle, nameStyle, prefix) - { - return this._locationString(this.sourceCode, this.formattedLineNumber, this.formattedColumn, columnStyle, nameStyle, prefix); - }, - - displayLocationString: function(columnStyle, nameStyle, prefix) - { - return this._locationString(this.displaySourceCode, this.displayLineNumber, this.displayColumnNumber, columnStyle, nameStyle, prefix); - }, - - tooltipString: function() - { - if (!this.hasDifferentDisplayLocation()) - return this.originalLocationString(WebInspector.SourceCodeLocation.ColumnStyle.Shown, WebInspector.SourceCodeLocation.NameStyle.Full); - - var tooltip = WebInspector.UIString("Located at %s").format(this.displayLocationString(WebInspector.SourceCodeLocation.ColumnStyle.Shown, WebInspector.SourceCodeLocation.NameStyle.Full)); - tooltip += "\n" + WebInspector.UIString("Originally %s").format(this.originalLocationString(WebInspector.SourceCodeLocation.ColumnStyle.Shown, WebInspector.SourceCodeLocation.NameStyle.Full)); - return tooltip; - }, - - hasMappedLocation: function() - { - this._resolveMappedLocation(); - return this._mappedResource !== null; - }, - - hasFormattedLocation: function() - { - return this._formattedLineNumber !== this._lineNumber || this._formattedColumnNumber !== this._columnNumber; - }, - - hasDifferentDisplayLocation: function() - { - return this.hasMappedLocation() || this.hasFormattedLocation(); - }, - - update: function(sourceCode, lineNumber, columnNumber) - { - console.assert(sourceCode === this._sourceCode || (this._mappedResource && sourceCode === this._mappedResource)); - console.assert(typeof lineNumber === "number" && !isNaN(lineNumber) && lineNumber >= 0); - console.assert(typeof columnNumber === "number" && !isNaN(columnNumber) && columnNumber >= 0); - - if (sourceCode === this._sourceCode && lineNumber === this._lineNumber && columnNumber === this._columnNumber) - return; - else if (this._mappedResource && sourceCode === this._mappedResource && lineNumber === this._mappedLineNumber && columnNumber === this._mappedColumnNumber) - return; - - var newSourceCodeLocation = sourceCode.createSourceCodeLocation(lineNumber, columnNumber); - console.assert(newSourceCodeLocation.sourceCode === this._sourceCode); - - this._makeChangeAndDispatchChangeEventIfNeeded(function() { - this._lineNumber = newSourceCodeLocation._lineNumber; - this._columnNumber = newSourceCodeLocation._columnNumber; - if (newSourceCodeLocation._mappedLocationIsResolved) { - this._mappedLocationIsResolved = true; - this._mappedResource = newSourceCodeLocation._mappedResource; - this._mappedLineNumber = newSourceCodeLocation._mappedLineNumber; - this._mappedColumnNumber = newSourceCodeLocation._mappedColumnNumber; - } - }); - }, - - populateLiveDisplayLocationTooltip: function(element, prefix) - { - prefix = prefix || ""; - - element.title = prefix + this.tooltipString(); - - this.addEventListener(WebInspector.SourceCodeLocation.Event.DisplayLocationChanged, function(event) { - element.title = prefix + this.tooltipString(); - }, this); - }, - - populateLiveDisplayLocationString: function(element, propertyName, columnStyle, nameStyle, prefix) - { - var currentDisplay = undefined; - - function updateDisplayString(showAlternativeLocation, forceUpdate) - { - if (!forceUpdate && currentDisplay === showAlternativeLocation) - return; - - currentDisplay = showAlternativeLocation; - - if (!showAlternativeLocation) { - element[propertyName] = this.displayLocationString(columnStyle, nameStyle, prefix); - element.classList.toggle(WebInspector.SourceCodeLocation.DisplayLocationClassName, this.hasDifferentDisplayLocation()); - } else if (this.hasDifferentDisplayLocation()) { - element[propertyName] = this.originalLocationString(columnStyle, nameStyle, prefix); - element.classList.remove(WebInspector.SourceCodeLocation.DisplayLocationClassName); - } - } - - function mouseOverOrMove(event) - { - updateDisplayString.call(this, event.metaKey && !event.altKey && !event.shiftKey); - } - - updateDisplayString.call(this, false); - - this.addEventListener(WebInspector.SourceCodeLocation.Event.DisplayLocationChanged, function(event) { - updateDisplayString.call(this, currentDisplay, true); - }, this); - - var boundMouseOverOrMove = mouseOverOrMove.bind(this); - element.addEventListener("mouseover", boundMouseOverOrMove); - element.addEventListener("mousemove", boundMouseOverOrMove); - - element.addEventListener("mouseout", function(event) { - updateDisplayString.call(this, false); - }.bind(this)); - }, - - // Private - - _locationString: function(sourceCode, lineNumber, columnNumber, columnStyle, nameStyle, prefix) - { - console.assert(sourceCode); - if (!sourceCode) - return ""; - - columnStyle = columnStyle || WebInspector.SourceCodeLocation.ColumnStyle.OnlyIfLarge; - nameStyle = nameStyle || WebInspector.SourceCodeLocation.NameStyle.Short; - prefix = prefix || ""; - - var lineString = lineNumber + 1; // The user visible line number is 1-based. - if (columnStyle === WebInspector.SourceCodeLocation.ColumnStyle.Shown && columnNumber > 0) - lineString += ":" + (columnNumber + 1); // The user visible column number is 1-based. - else if (columnStyle === WebInspector.SourceCodeLocation.ColumnStyle.OnlyIfLarge && columnNumber > WebInspector.SourceCodeLocation.LargeColumnNumber) - lineString += ":" + (columnNumber + 1); // The user visible column number is 1-based. - - switch (nameStyle) { - case WebInspector.SourceCodeLocation.NameStyle.None: - return prefix + lineString; - - case WebInspector.SourceCodeLocation.NameStyle.Short: - case WebInspector.SourceCodeLocation.NameStyle.Full: - var lineSuffix = sourceCode.url ? ":" + lineString : WebInspector.UIString(" (line %s)").format(lineString); - return prefix + (nameStyle === WebInspector.SourceCodeLocation.NameStyle.Full && sourceCode.url ? sourceCode.url : sourceCode.displayName) + lineSuffix; - - default: - console.error("Unknown nameStyle: " + nameStyle); - return prefix + lineString; - } - }, - - _resetMappedLocation: function() - { - this._mappedLocationIsResolved = false; - this._mappedResource = null; - this._mappedLineNumber = NaN; - this._mappedColumnNumber = NaN; - }, - - _setMappedLocation: function(mappedResource, mappedLineNumber, mappedColumnNumber) - { - // Called by SourceMapResource when it creates a SourceCodeLocation and already knows the resolved location. - this._mappedLocationIsResolved = true; - this._mappedResource = mappedResource; - this._mappedLineNumber = mappedLineNumber; - this._mappedColumnNumber = mappedColumnNumber; - }, - - _resolveMappedLocation: function() - { - if (this._mappedLocationIsResolved) - return; - - console.assert(this._mappedResource === null); - console.assert(isNaN(this._mappedLineNumber)); - console.assert(isNaN(this._mappedColumnNumber)); - - this._mappedLocationIsResolved = true; - - if (!this._sourceCode) - return; - - var sourceMaps = this._sourceCode.sourceMaps; - if (!sourceMaps.length) - return; - - for (var i = 0; i < sourceMaps.length; ++i) { - var sourceMap = sourceMaps[i]; - var entry = sourceMap.findEntry(this._lineNumber, this._columnNumber); - if (!entry || entry.length === 2) - continue; - console.assert(entry.length === 5); - var url = entry[2]; - var sourceMapResource = sourceMap.resourceForURL(url); - if (!sourceMapResource) - return; - this._mappedResource = sourceMapResource; - this._mappedLineNumber = entry[3]; - this._mappedColumnNumber = entry[4]; - return; - } - }, - - _resolveFormattedLocation: function() - { - if (this._sourceCode && this._sourceCode.formatterSourceMap) { - var formattedLocation = this._sourceCode.formatterSourceMap.originalToFormatted(this._lineNumber, this._columnNumber); - this._formattedLineNumber = formattedLocation.lineNumber; - this._formattedColumnNumber = formattedLocation.columnNumber; - } else { - this._formattedLineNumber = this._lineNumber; - this._formattedColumnNumber = this._columnNumber; - } - }, - - _makeChangeAndDispatchChangeEventIfNeeded: function(changeFunction) - { - var oldSourceCode = this._sourceCode; - var oldLineNumber = this._lineNumber; - var oldColumnNumber = this._columnNumber; - - var oldFormattedLineNumber = this._formattedLineNumber; - var oldFormattedColumnNumber = this._formattedColumnNumber; - - var oldDisplaySourceCode = this.displaySourceCode; - var oldDisplayLineNumber = this.displayLineNumber; - var oldDisplayColumnNumber = this.displayColumnNumber; - - this._resetMappedLocation(); - - if (changeFunction) - changeFunction.call(this); - - this._resolveMappedLocation(); - this._resolveFormattedLocation(); - - // If the display source code is non-null then the addresses are not NaN and can be compared. - var displayLocationChanged = false; - var newDisplaySourceCode = this.displaySourceCode; - if (oldDisplaySourceCode !== newDisplaySourceCode) - displayLocationChanged = true; - else if (newDisplaySourceCode && (oldDisplayLineNumber !== this.displayLineNumber || oldDisplayColumnNumber !== this.displayColumnNumber)) - displayLocationChanged = true; - - var anyLocationChanged = false; - if (displayLocationChanged) - anyLocationChanged = true; - else if (oldSourceCode !== this._sourceCode) - anyLocationChanged = true; - else if (this._sourceCode && (oldLineNumber !== this._lineNumber || oldColumnNumber !== this._columnNumber)) - anyLocationChanged = true; - else if (this._sourceCode && (oldFormattedLineNumber !== this._formattedLineNumber || oldFormattedColumnNumber !== this._formattedColumnNumber)) - anyLocationChanged = true; - - if (displayLocationChanged || anyLocationChanged) { - var oldData = { - oldSourceCode: oldSourceCode, - oldLineNumber: oldLineNumber, - oldColumnNumber: oldColumnNumber, - oldFormattedLineNumber: oldFormattedLineNumber, - oldFormattedColumnNumber: oldFormattedColumnNumber, - oldDisplaySourceCode: oldDisplaySourceCode, - oldDisplayLineNumber: oldDisplayLineNumber, - oldDisplayColumnNumber: oldDisplayColumnNumber - }; - if (displayLocationChanged) - this.dispatchEventToListeners(WebInspector.SourceCodeLocation.Event.DisplayLocationChanged, oldData); - if (anyLocationChanged) - this.dispatchEventToListeners(WebInspector.SourceCodeLocation.Event.LocationChanged, oldData); - } - }, - - _sourceCodeSourceMapAdded: function() - { - this._makeChangeAndDispatchChangeEventIfNeeded(null); - }, - - _sourceCodeFormatterDidChange: function() - { - this._makeChangeAndDispatchChangeEventIfNeeded(null); - } -}; - -WebInspector.SourceCodeLocation.prototype.__proto__ = WebInspector.Object.prototype; |