| /* |
| * Copyright (C) 2008 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. ``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 |
| * 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.Script = function(sourceID, sourceURL, source, lineOffset, columnOffset, length, errorLine, errorMessage, worldType) |
| { |
| this.sourceID = sourceID; |
| this.sourceURL = sourceURL; |
| this._source = source; |
| this.lineOffset = lineOffset; |
| this.columnOffset = columnOffset; |
| this.length = length; |
| this.errorLine = errorLine; |
| this.errorMessage = errorMessage; |
| this.worldType = worldType; |
| |
| // if no URL, look for "//@ sourceURL=" decorator |
| // note that this sourceURL comment decorator is behavior that FireBug added |
| // in it's 1.1 release as noted in the release notes: |
| // http://fbug.googlecode.com/svn/branches/firebug1.1/docs/ReleaseNotes_1.1.txt |
| if (!sourceURL) { |
| // use of [ \t] rather than \s is to prevent \n from matching |
| var pattern = /^\s*\/\/[ \t]*@[ \t]*sourceURL[ \t]*=[ \t]*(\S+).*$/m; |
| var match = pattern.exec(source); |
| |
| if (match) |
| this.sourceURL = match[1]; |
| } |
| } |
| |
| WebInspector.Script.WorldType = { |
| MAIN_WORLD: 0, |
| EXTENSIONS_WORLD: 1 |
| } |
| |
| WebInspector.Script.WorldType = { |
| MAIN_WORLD: 0, |
| EXTENSIONS_WORLD: 1 |
| } |
| |
| WebInspector.Script.prototype = { |
| get startingLine() |
| { |
| return this.lineOffset + 1; |
| }, |
| |
| get linesCount() |
| { |
| if (!this.source) |
| return 0; |
| if (!this._lineEndings) |
| this._lineEndings = this._source.findAll("\n"); |
| return this._lineEndings.length + 1; |
| }, |
| |
| sourceLine: function(lineNumber, callback) |
| { |
| function extractSourceLine() |
| { |
| lineNumber -= this.lineOffset; |
| callback(this._source.substring(this._lineEndings[lineNumber - 1], this._lineEndings[lineNumber])); |
| } |
| |
| if (this._lineEndings) { |
| extractSourceLine.call(this); |
| return; |
| } |
| |
| function didRequestSource() |
| { |
| this._lineEndings = this._source.findAll("\n"); |
| extractSourceLine.call(this); |
| } |
| this.requestSource(didRequestSource.bind(this)); |
| }, |
| |
| get source() |
| { |
| if (!this._source && this.resource) |
| this._source = this.resource.content; |
| return this._source; |
| }, |
| |
| set source(source) |
| { |
| this._source = source; |
| delete this._lineEndings; |
| }, |
| |
| requestSource: function(callback) |
| { |
| if (this._source) { |
| callback(this._source); |
| return; |
| } |
| |
| function didGetScriptSource(source) |
| { |
| this._source = source; |
| callback(this._source); |
| } |
| InspectorBackend.getScriptSource(this.sourceID, didGetScriptSource.bind(this)); |
| } |
| } |