Commit 98c4f5a5 authored by podivilov@chromium.org's avatar podivilov@chromium.org
Browse files

2011-01-11 Pavel Podivilov <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: implement script beautifier prototype.
        https://bugs.webkit.org/show_bug.cgi?id=51588

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/ScriptFormatter.js: Added.
        (WebInspector.ScriptFormatter): Implements JavaScript source beautification and conversion between original and
        formatted line numbers
        (WebInspector.ScriptFormatter.findLineEndings):
        (WebInspector.ScriptFormatter.locationToPosition):
        (WebInspector.ScriptFormatter.positionToLocation):
        (WebInspector.ScriptFormatter.upperBound):
        (WebInspector.ScriptFormatter.prototype.format):
        (WebInspector.ScriptFormatter.prototype.originalLineNumberToFormattedLineNumber):
        (WebInspector.ScriptFormatter.prototype.formattedLineNumberToOriginalLineNumber):
        (WebInspector.ScriptFormatter.prototype.originalPositionToFormattedLineNumber):
        (WebInspector.ScriptFormatter.prototype.formattedLineNumberToOriginalPosition):
        (WebInspector.ScriptFormatter.prototype._convertPosition):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._clearCurrentExecutionLine):
        (WebInspector.ScriptsPanel.prototype._callFrameSelected):
        (WebInspector.ScriptsPanel.prototype._formatScript):
        * inspector/front-end/SourceFrame.js: Convert original line numbers to UI line numbers and vice versa
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@76009 268f45cc-cd09-0410-ab3c-d52691b4dbfc
parent 97067a4b
2011-01-11 Pavel Podivilov <podivilov@chromium.org>
Reviewed by Pavel Feldman.
Web Inspector: implement script beautifier prototype.
https://bugs.webkit.org/show_bug.cgi?id=51588
* WebCore.gypi:
* WebCore.vcproj/WebCore.vcproj:
* inspector/front-end/ScriptFormatter.js: Added.
(WebInspector.ScriptFormatter): Implements JavaScript source beautification and conversion between original and
formatted line numbers
(WebInspector.ScriptFormatter.findLineEndings):
(WebInspector.ScriptFormatter.locationToPosition):
(WebInspector.ScriptFormatter.positionToLocation):
(WebInspector.ScriptFormatter.upperBound):
(WebInspector.ScriptFormatter.prototype.format):
(WebInspector.ScriptFormatter.prototype.originalLineNumberToFormattedLineNumber):
(WebInspector.ScriptFormatter.prototype.formattedLineNumberToOriginalLineNumber):
(WebInspector.ScriptFormatter.prototype.originalPositionToFormattedLineNumber):
(WebInspector.ScriptFormatter.prototype.formattedLineNumberToOriginalPosition):
(WebInspector.ScriptFormatter.prototype._convertPosition):
* inspector/front-end/ScriptsPanel.js:
(WebInspector.ScriptsPanel):
(WebInspector.ScriptsPanel.prototype._clearCurrentExecutionLine):
(WebInspector.ScriptsPanel.prototype._callFrameSelected):
(WebInspector.ScriptsPanel.prototype._formatScript):
* inspector/front-end/SourceFrame.js: Convert original line numbers to UI line numbers and vice versa
* inspector/front-end/WebKit.qrc:
* inspector/front-end/inspector.html:
2011-01-18 Philippe Normand <pnormand@igalia.com>
 
Unreviewed, GTK build fix as follow-up of r76004.
......@@ -4677,6 +4677,7 @@
'inspector/front-end/ResourcesPanel.js',
'inspector/front-end/ScopeChainSidebarPane.js',
'inspector/front-end/Script.js',
'inspector/front-end/ScriptFormatter.js',
'inspector/front-end/ScriptsPanel.js',
'inspector/front-end/ScriptView.js',
'inspector/front-end/ShortcutsHelp.js',
......
......@@ -65596,6 +65596,10 @@
RelativePath="..\inspector\front-end\Script.js"
>
</File>
<File
RelativePath="..\inspector\front-end\ScriptFormatter.js"
>
</File>
<File
RelativePath="..\inspector\front-end\ScriptsPanel.js"
>
/*
* Copyright (C) 2011 Google 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:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * 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.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 THE COPYRIGHT
* OWNER 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.ScriptFormatter = function(source)
{
this._originalSource = source;
this._originalLineEndings = source.findAll("\n");
this._originalLineEndings.push(source.length);
}
WebInspector.ScriptFormatter.locationToPosition = function(lineEndings, location)
{
var position = location.line ? lineEndings[location.line - 1] + 1 : 0;
return position + location.column;
}
WebInspector.ScriptFormatter.positionToLocation = function(lineEndings, position)
{
var location = {};
location.line = WebInspector.ScriptFormatter.upperBound(lineEndings, position - 1);
if (!location.line)
location.column = position;
else
location.column = position - lineEndings[location.line - 1] - 1;
return location;
}
WebInspector.ScriptFormatter.upperBound = function(array, number)
{
var first = 0;
var count = array.length;
while (count > 0) {
var step = count >> 1;
var middle = first + step;
if (number >= array[middle]) {
first = middle + 1;
count -= step + 1;
} else
count = step;
}
return first;
}
WebInspector.ScriptFormatter.prototype = {
format: function()
{
this._formatted = true;
this._formattedSource = this._originalSource.replace(/;/g, ";\n");
this._formattedLineEndings = this._formattedSource.findAll("\n");
this._formattedLineEndings.push(this._formattedSource.length);
this._originalSymbolPositions = [];
this._formattedSymbolPositions = [];
var lastCodePosition = 0;
var regexp = /[\$\.\w]+|{|}|;/g;
while (true) {
var match = regexp.exec(this._formattedSource);
if (!match)
break;
var position = this._originalSource.indexOf(match[0], lastCodePosition);
if (position === -1)
continue;
this._originalSymbolPositions.push(position);
this._formattedSymbolPositions.push(match.index);
lastCodePosition = position + match[0].length;
}
this._originalSymbolPositions.push(this._originalSource.length);
this._formattedSymbolPositions.push(this._formattedSource.length);
return this._formattedSource;
},
originalLineNumberToFormattedLineNumber: function(originalLineNumber)
{
if (!this._formatted)
return originalLineNumber;
var originalPosition = WebInspector.ScriptFormatter.locationToPosition(this._originalLineEndings, { line: originalLineNumber, column: 0 });
return this.originalPositionToFormattedLineNumber(originalPosition);
},
formattedLineNumberToOriginalLineNumber: function(formattedLineNumber)
{
if (!this._formatted)
return formattedLineNumber;
var originalPosition = this.formattedLineNumberToOriginalPosition(formattedLineNumber);
return WebInspector.ScriptFormatter.positionToLocation(this._originalLineEndings, originalPosition).line;
},
originalPositionToFormattedLineNumber: function(originalPosition)
{
var lineEndings = this._formatted ? this._formattedLineEndings : this._originalLineEndings;
if (this._formatted)
formattedPosition = this._convertPosition(this._originalSymbolPositions, this._formattedSymbolPositions, originalPosition);
return WebInspector.ScriptFormatter.positionToLocation(lineEndings, formattedPosition).line;
},
formattedLineNumberToOriginalPosition: function(formattedLineNumber)
{
var lineEndings = this._formatted ? this._formattedLineEndings : this._originalLineEndings;
var formattedPosition = WebInspector.ScriptFormatter.locationToPosition(lineEndings, { line: formattedLineNumber, column: 0 });
if (!this._formatted)
return formattedPosition;
return this._convertPosition(this._formattedSymbolPositions, this._originalSymbolPositions, formattedPosition);
},
_convertPosition: function(symbolPositions1, symbolPositions2, position)
{
var index = WebInspector.ScriptFormatter.upperBound(symbolPositions1, position);
if (index === symbolPositions2.length - 1)
return symbolPositions2[index] - 1;
return symbolPositions2[index];
}
}
......@@ -63,6 +63,15 @@ WebInspector.ScriptsPanel = function()
// FIXME: append the functions select element to the top status bar when it is implemented.
// this.topStatusBar.appendChild(this.functionsSelectElement);
this.formatButton = document.createElement("button");
this.formatButton.className = "status-bar-item";
this.formatButton.id = "format-script";
this.formatButton.title = WebInspector.UIString("Format script.");
this.formatButton.appendChild(document.createElement("img"));
this.formatButton.addEventListener("click", this._formatScript.bind(this), false);
if (Preferences.debugMode)
this.topStatusBar.appendChild(this.formatButton);
this.sidebarButtonsElement = document.createElement("div");
this.sidebarButtonsElement.id = "scripts-sidebar-buttons";
this.topStatusBar.appendChild(this.sidebarButtonsElement);
......@@ -677,7 +686,7 @@ WebInspector.ScriptsPanel.prototype = {
_clearCurrentExecutionLine: function()
{
if (this._executionSourceFrame)
this._executionSourceFrame.executionLine = 0;
this._executionSourceFrame.clearExecutionLine();
delete this._executionSourceFrame;
},
......@@ -699,7 +708,7 @@ WebInspector.ScriptsPanel.prototype = {
this._executionSourceFrame = this._sourceFrameForScriptOrResource(scriptOrResource);
if (this._executionSourceFrame)
this._executionSourceFrame.executionLine = currentFrame.line;
this._executionSourceFrame.setExecutionLine(currentFrame.line);
},
_changeVisibleFile: function(event)
......@@ -833,6 +842,12 @@ WebInspector.ScriptsPanel.prototype = {
this._updateBackAndForwardButtons();
},
_formatScript: function()
{
if (this.visibleView && this.visibleView.sourceFrame)
this.visibleView.sourceFrame.formatSource();
},
_enableDebugging: function()
{
if (this._debuggerEnabled)
......
......@@ -71,23 +71,6 @@ WebInspector.SourceFrame.prototype = {
}
},
get executionLine()
{
return this._executionLine;
},
set executionLine(x)
{
if (this._executionLine === x)
return;
var previousLine = this._executionLine;
this._executionLine = x;
if (this._textViewer)
this._updateExecutionLine(previousLine);
},
markDiff: function(diffData)
{
if (this._diffLines && this._textViewer)
......@@ -172,6 +155,7 @@ WebInspector.SourceFrame.prototype = {
{
this._content = content;
this._textModel.setText(null, content);
this._formatter = new WebInspector.ScriptFormatter(content);
this._textViewer = new WebInspector.TextViewer(this._textModel, WebInspector.platform, this._url);
var element = this._textViewer.element;
......@@ -184,10 +168,7 @@ WebInspector.SourceFrame.prototype = {
this._textViewer.beginUpdates();
this._textViewer.mimeType = mimeType;
this._addExistingMessagesToSource();
this._updateExecutionLine();
this._updateDiffDecorations();
this._textViewer.resize();
this._setTextViewerDecorations();
if (this._lineNumberToReveal) {
this.revealLine(this._lineNumberToReveal);
......@@ -210,15 +191,34 @@ WebInspector.SourceFrame.prototype = {
delete this._delayedFindSearchMatches;
}
this._textViewer.endUpdates();
WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.BreakpointAdded, this._breakpointAdded, this);
if (this._canEditScripts)
this._textViewer.editCallback = this._editLine.bind(this);
},
_setTextViewerDecorations: function()
{
this._rowMessages = {};
this._messageBubbles = {};
this._textViewer.beginUpdates();
this._addExistingMessagesToSource();
this._updateDiffDecorations();
if (this._executionLine)
this.setExecutionLine(this._executionLine);
var breakpoints = this._breakpoints();
for (var i = 0; i < breakpoints.length; ++i)
this._addBreakpoint(breakpoints[i]);
WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.BreakpointAdded, this._breakpointAdded, this);
this._textViewer.endUpdates();
this._textViewer.resize();
if (this._canEditScripts)
this._textViewer.editCallback = this._editLine.bind(this);
this._textViewer.endUpdates();
},
findSearchMatches: function(query, finishedCallback)
......@@ -300,18 +300,22 @@ WebInspector.SourceFrame.prototype = {
msg._resourceMessageRepeatCountElement.textContent = WebInspector.UIString(" (repeated %d times)", msg.repeatCount);
},
_updateExecutionLine: function(previousLine)
setExecutionLine: function(lineNumber)
{
if (previousLine) {
if (previousLine - 1 < this._textModel.linesCount)
this._textViewer.removeDecoration(previousLine - 1, "webkit-execution-line");
}
if (!this._executionLine)
this._executionLine = lineNumber;
if (!this._textViewer)
return;
var textViewerLineNumber = this._formatter.originalLineNumberToFormattedLineNumber(this._executionLine - 1);
this._textViewer.addDecoration(textViewerLineNumber, "webkit-execution-line");
},
if (this._executionLine < this._textModel.linesCount)
this._textViewer.addDecoration(this._executionLine - 1, "webkit-execution-line");
clearExecutionLine: function()
{
if (!this._textViewer)
return;
var textViewerLineNumber = this._formatter.originalLineNumberToFormattedLineNumber(this._executionLine - 1);
this._textViewer.removeDecoration(textViewerLineNumber, "webkit-execution-line");
delete this._executionLine;
},
_updateDiffDecorations: function()
......@@ -412,14 +416,15 @@ WebInspector.SourceFrame.prototype = {
_addBreakpoint: function(breakpoint)
{
if (breakpoint.line > this._textModel.linesCount)
var textViewerLineNumber = this._formatter.originalLineNumberToFormattedLineNumber(breakpoint.line - 1);
if (textViewerLineNumber >= this._textModel.linesCount)
return;
breakpoint.addEventListener("enable-changed", this._breakpointChanged, this);
breakpoint.addEventListener("condition-changed", this._breakpointChanged, this);
breakpoint.addEventListener("removed", this._breakpointRemoved, this);
this._setBreakpointDecoration(breakpoint.line, breakpoint.enabled, !!breakpoint.condition);
this._setBreakpointDecoration(textViewerLineNumber, breakpoint.enabled, !!breakpoint.condition);
},
_breakpointRemoved: function(event)
......@@ -430,18 +435,19 @@ WebInspector.SourceFrame.prototype = {
breakpoint.removeEventListener("condition-changed", null, this);
breakpoint.removeEventListener("removed", null, this);
this._removeBreakpointDecoration(breakpoint.line);
var textViewerLineNumber = this._formatter.originalLineNumberToFormattedLineNumber(breakpoint.line - 1);
this._removeBreakpointDecoration(textViewerLineNumber);
},
_breakpointChanged: function(event)
{
var breakpoint = event.target;
this._setBreakpointDecoration(breakpoint.line, breakpoint.enabled, !!breakpoint.condition);
var textViewerLineNumber = this._formatter.originalLineNumberToFormattedLineNumber(breakpoint.line - 1);
this._setBreakpointDecoration(textViewerLineNumber, breakpoint.enabled, !!breakpoint.condition);
},
_setBreakpointDecoration: function(lineNumber, enabled, hasCondition)
{
lineNumber -= 1;
this._textViewer.beginUpdates();
this._textViewer.addDecoration(lineNumber, "webkit-breakpoint");
if (enabled)
......@@ -457,7 +463,6 @@ WebInspector.SourceFrame.prototype = {
_removeBreakpointDecoration: function(lineNumber)
{
lineNumber -= 1;
this._textViewer.beginUpdates();
this._textViewer.removeDecoration(lineNumber, "webkit-breakpoint");
this._textViewer.removeDecoration(lineNumber, "webkit-breakpoint-disabled");
......@@ -473,27 +478,28 @@ WebInspector.SourceFrame.prototype = {
var target = event.target.enclosingNodeOrSelfWithClass("webkit-line-number");
if (!target)
return;
var lineNumber = target.parentElement.lineNumber + 1;
var textViewerLineNumber = target.parentElement.lineNumber;
var originalLineNumber = this._formatter.formattedLineNumberToOriginalLineNumber(textViewerLineNumber);
var contextMenu = new WebInspector.ContextMenu();
contextMenu.appendItem(WebInspector.UIString("Continue to Here"), this._continueToLine.bind(this, lineNumber));
contextMenu.appendItem(WebInspector.UIString("Continue to Here"), this._continueToLine.bind(this, originalLineNumber));
var breakpoint = this._findBreakpoint(lineNumber);
var breakpoint = this._findBreakpoint(originalLineNumber);
if (!breakpoint) {
// This row doesn't have a breakpoint: We want to show Add Breakpoint and Add and Edit Breakpoint.
contextMenu.appendItem(WebInspector.UIString("Add Breakpoint"), this._setBreakpoint.bind(this, lineNumber, "", true));
contextMenu.appendItem(WebInspector.UIString("Add Breakpoint"), this._setBreakpoint.bind(this, originalLineNumber, "", true));
function addConditionalBreakpoint()
{
this._setBreakpointDecoration(lineNumber, true, true);
this._setBreakpointDecoration(textViewerLineNumber, true, true);
function didEditBreakpointCondition(committed, condition)
{
this._removeBreakpointDecoration(lineNumber);
this._removeBreakpointDecoration(textViewerLineNumber);
if (committed)
this._setBreakpoint(lineNumber, true, condition);
this._setBreakpoint(originalLineNumber, true, condition);
}
this._editBreakpointCondition(lineNumber, "", didEditBreakpointCondition.bind(this));
this._editBreakpointCondition(textViewerLineNumber, "", didEditBreakpointCondition.bind(this));
}
contextMenu.appendItem(WebInspector.UIString("Add Conditional Breakpoint…"), addConditionalBreakpoint.bind(this));
} else {
......@@ -505,16 +511,16 @@ WebInspector.SourceFrame.prototype = {
{
if (committed) {
breakpoint.remove();
this._setBreakpoint(breakpoint.line, breakpoint.enabled, condition);
this._setBreakpoint(originalLineNumber, breakpoint.enabled, condition);
}
}
this._editBreakpointCondition(lineNumber, breakpoint.condition, didEditBreakpointCondition.bind(this));
this._editBreakpointCondition(textViewerLineNumber, breakpoint.condition, didEditBreakpointCondition.bind(this));
}
contextMenu.appendItem(WebInspector.UIString("Edit Breakpoint…"), editBreakpointCondition.bind(this));
function setBreakpointEnabled(enabled)
{
breakpoint.remove();
this._setBreakpoint(breakpoint.line, enabled, breakpoint.condition);
this._setBreakpoint(originalLineNumber, enabled, breakpoint.condition);
}
if (breakpoint.enabled)
contextMenu.appendItem(WebInspector.UIString("Disable Breakpoint"), setBreakpointEnabled.bind(this, false));
......@@ -538,15 +544,15 @@ WebInspector.SourceFrame.prototype = {
var target = event.target.enclosingNodeOrSelfWithClass("webkit-line-number");
if (!target)
return;
var lineNumber = target.parentElement.lineNumber + 1;
var originalLineNumber = this._formatter.formattedLineNumberToOriginalLineNumber(target.parentElement.lineNumber);
var breakpoint = this._findBreakpoint(lineNumber);
var breakpoint = this._findBreakpoint(originalLineNumber);
if (breakpoint) {
breakpoint.remove();
if (event.shiftKey)
this._setBreakpoint(breakpoint.line, !breakpoint.enabled, breakpoint.condition);
this._setBreakpoint(originalLineNumber, !breakpoint.enabled, breakpoint.condition);
} else
this._setBreakpoint(lineNumber, true, "");
this._setBreakpoint(originalLineNumber, true, "");
event.preventDefault();
},
......@@ -710,7 +716,6 @@ WebInspector.SourceFrame.prototype = {
_editBreakpointCondition: function(lineNumber, condition, callback)
{
lineNumber -= 1;
this._conditionElement = this._createConditionElement(lineNumber);
this._textViewer.addDecoration(lineNumber, this._conditionElement);
......@@ -776,22 +781,29 @@ WebInspector.SourceFrame.prototype = {
this._textViewer.resize();
},
formatSource: function()
{
if (!this._formatter)
return;
this._textModel.setText(null, this._formatter.format());
this._setTextViewerDecorations();
},
_continueToLine: function(lineNumber)
{
var sourceID = this._sourceIDForLine(lineNumber);
if (!sourceID)
return;
WebInspector.debuggerModel.continueToLine(sourceID, lineNumber);
WebInspector.debuggerModel.continueToLine(sourceID, lineNumber + 1);
},
_editLine: function(lineNumber, newContent, cancelEditingCallback)
{
lineNumber += 1;
var lines = [];
var oldLines = this._content.split('\n');
for (var i = 0; i < oldLines.length; ++i) {
if (i === lineNumber - 1)
if (i === lineNumber)
lines.push(newContent);
else
lines.push(oldLines[i]);
......@@ -800,7 +812,7 @@ WebInspector.SourceFrame.prototype = {
var editData = {};
editData.sourceID = this._sourceIDForLine(lineNumber);
editData.content = lines.join("\n");
editData.line = lineNumber;
editData.line = lineNumber + 1;
editData.linesCountToShift = newContent.split("\n").length - 1;
this._doEditLine(editData, cancelEditingCallback);
},
......@@ -826,7 +838,7 @@ WebInspector.SourceFrame.prototype = {
var sourceID = this._sourceIDForLine(lineNumber);
if (!sourceID)
return;
WebInspector.debuggerModel.setBreakpoint(sourceID, lineNumber, enabled, condition);
WebInspector.debuggerModel.setBreakpoint(sourceID, lineNumber + 1, enabled, condition);
if (!WebInspector.panels.scripts.breakpointsActivated)
WebInspector.panels.scripts.toggleBreakpointsClicked();
},
......@@ -840,7 +852,7 @@ WebInspector.SourceFrame.prototype = {
_findBreakpoint: function(lineNumber)
{
var sourceID = this._sourceIDForLine(lineNumber);
return WebInspector.debuggerModel.findBreakpoint(sourceID, lineNumber);
return WebInspector.debuggerModel.findBreakpoint(sourceID, lineNumber + 1);
},
_sourceIDForLine: function(lineNumber)
......@@ -849,9 +861,9 @@ WebInspector.SourceFrame.prototype = {
var closestStartingLine = 0;
var scripts = this._contentProvider.scripts();
for (var i = 0; i < scripts.length; ++i) {
var startingLine = scripts[i].startingLine;
if (startingLine <= lineNumber && startingLine >= closestStartingLine) {
closestStartingLine = startingLine;
var lineOffset = scripts[i].lineOffset;
if (lineOffset <= lineNumber && lineOffset >= closestStartingLine) {
closestStartingLine = lineOffset;
sourceIDForLine = scripts[i].sourceID;
}
}
......
......@@ -81,6 +81,7 @@
<file>ResourcesPanel.js</file>
<file>ScopeChainSidebarPane.js</file>
<file>Script.js</file>
<file>ScriptFormatter.js</file>
<file>ScriptsPanel.js</file>
<file>ScriptView.js</file>
<file>Section.js</file>
......
......@@ -121,6 +121,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
<script type="text/javascript" src="NetworkItemView.js"></script>
<script type="text/javascript" src="ResourceView.js"></script>
<script type="text/javascript" src="SourceFrame.js"></script>
<script type="text/javascript" src="ScriptFormatter.js"></script>
<script type="text/javascript" src="DOMSyntaxHighlighter.js"></script>
<script type="text/javascript" src="TextEditorModel.js"></script>
<script type="text/javascript" src="TextEditorHighlighter.js"></script>
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment