⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scriptspanel.js

📁 linux下开源浏览器WebKit的源码,市面上的很多商用浏览器都是移植自WebKit
💻 JS
📖 第 1 页 / 共 2 页
字号:
/* * 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.ScriptsPanel = function(){    WebInspector.Panel.call(this);    this.element.addStyleClass("scripts");    this.topStatusBar = document.createElement("div");    this.topStatusBar.className = "status-bar";    this.topStatusBar.id = "scripts-status-bar";    this.element.appendChild(this.topStatusBar);    this.backButton = document.createElement("button");    this.backButton.className = "status-bar-item";    this.backButton.id = "scripts-back";    this.backButton.title = WebInspector.UIString("Show the previous script resource.");    this.backButton.disabled = true;    this.backButton.appendChild(document.createElement("img"));    this.backButton.addEventListener("click", this._goBack.bind(this), false);    this.topStatusBar.appendChild(this.backButton);    this.forwardButton = document.createElement("button");    this.forwardButton.className = "status-bar-item";    this.forwardButton.id = "scripts-forward";    this.forwardButton.title = WebInspector.UIString("Show the next script resource.");    this.forwardButton.disabled = true;    this.forwardButton.appendChild(document.createElement("img"));    this.forwardButton.addEventListener("click", this._goForward.bind(this), false);    this.topStatusBar.appendChild(this.forwardButton);    this.filesSelectElement = document.createElement("select");    this.filesSelectElement.className = "status-bar-item";    this.filesSelectElement.id = "scripts-files";    this.filesSelectElement.addEventListener("change", this._changeVisibleFile.bind(this), false);    this.topStatusBar.appendChild(this.filesSelectElement);    this.functionsSelectElement = document.createElement("select");    this.functionsSelectElement.className = "status-bar-item";    this.functionsSelectElement.id = "scripts-functions";    // FIXME: append the functions select element to the top status bar when it is implemented.    // this.topStatusBar.appendChild(this.functionsSelectElement);    this.sidebarButtonsElement = document.createElement("div");    this.sidebarButtonsElement.id = "scripts-sidebar-buttons";    this.topStatusBar.appendChild(this.sidebarButtonsElement);    this.pauseButton = document.createElement("button");    this.pauseButton.className = "status-bar-item";    this.pauseButton.id = "scripts-pause";    this.pauseButton.title = WebInspector.UIString("Pause script execution.");    this.pauseButton.disabled = true;    this.pauseButton.appendChild(document.createElement("img"));    this.pauseButton.addEventListener("click", this._togglePause.bind(this), false);    this.sidebarButtonsElement.appendChild(this.pauseButton);    this.stepOverButton = document.createElement("button");    this.stepOverButton.className = "status-bar-item";    this.stepOverButton.id = "scripts-step-over";    this.stepOverButton.title = WebInspector.UIString("Step over next function call.");    this.stepOverButton.disabled = true;    this.stepOverButton.addEventListener("click", this._stepOverClicked.bind(this), false);    this.stepOverButton.appendChild(document.createElement("img"));    this.sidebarButtonsElement.appendChild(this.stepOverButton);    this.stepIntoButton = document.createElement("button");    this.stepIntoButton.className = "status-bar-item";    this.stepIntoButton.id = "scripts-step-into";    this.stepIntoButton.title = WebInspector.UIString("Step into next function call.");    this.stepIntoButton.disabled = true;    this.stepIntoButton.addEventListener("click", this._stepIntoClicked.bind(this), false);    this.stepIntoButton.appendChild(document.createElement("img"));    this.sidebarButtonsElement.appendChild(this.stepIntoButton);    this.stepOutButton = document.createElement("button");    this.stepOutButton.className = "status-bar-item";    this.stepOutButton.id = "scripts-step-out";    this.stepOutButton.title = WebInspector.UIString("Step out of current function.");    this.stepOutButton.disabled = true;    this.stepOutButton.addEventListener("click", this._stepOutClicked.bind(this), false);    this.stepOutButton.appendChild(document.createElement("img"));    this.sidebarButtonsElement.appendChild(this.stepOutButton);    this.debuggerStatusElement = document.createElement("div");    this.debuggerStatusElement.id = "scripts-debugger-status";    this.sidebarButtonsElement.appendChild(this.debuggerStatusElement);    this.viewsContainerElement = document.createElement("div");    this.viewsContainerElement.id = "script-resource-views";    this.sidebarElement = document.createElement("div");    this.sidebarElement.id = "scripts-sidebar";    this.sidebarResizeElement = document.createElement("div");    this.sidebarResizeElement.className = "sidebar-resizer-vertical";    this.sidebarResizeElement.addEventListener("mousedown", this._startSidebarResizeDrag.bind(this), false);    this.sidebarResizeWidgetElement = document.createElement("div");    this.sidebarResizeWidgetElement.id = "scripts-sidebar-resizer-widget";    this.sidebarResizeWidgetElement.addEventListener("mousedown", this._startSidebarResizeDrag.bind(this), false);    this.topStatusBar.appendChild(this.sidebarResizeWidgetElement);    this.sidebarPanes = {};    this.sidebarPanes.callstack = new WebInspector.CallStackSidebarPane();    this.sidebarPanes.scopechain = new WebInspector.ScopeChainSidebarPane();    this.sidebarPanes.breakpoints = new WebInspector.BreakpointsSidebarPane();    for (var pane in this.sidebarPanes)        this.sidebarElement.appendChild(this.sidebarPanes[pane].element);    // FIXME: remove the following line of code when the Breakpoints pane has content.    this.sidebarElement.removeChild(this.sidebarPanes.breakpoints.element);    this.sidebarPanes.callstack.expanded = true;    this.sidebarPanes.callstack.addEventListener("call frame selected", this._callFrameSelected, this);    this.sidebarPanes.scopechain.expanded = true;    var panelEnablerHeading = WebInspector.UIString("You need to enable debugging before you can use the Scripts panel.");    var panelEnablerDisclaimer = WebInspector.UIString("Enabling debugging will make scripts run slower.");    var panelEnablerButton = WebInspector.UIString("Enable Debugging");    this.panelEnablerView = new WebInspector.PanelEnablerView("scripts", panelEnablerHeading, panelEnablerDisclaimer, panelEnablerButton);    this.panelEnablerView.addEventListener("enable clicked", this._enableDebugging, this);    this.element.appendChild(this.panelEnablerView.element);    this.element.appendChild(this.viewsContainerElement);    this.element.appendChild(this.sidebarElement);    this.element.appendChild(this.sidebarResizeElement);    this.enableToggleButton = document.createElement("button");    this.enableToggleButton.className = "enable-toggle-status-bar-item status-bar-item";    this.enableToggleButton.addEventListener("click", this._toggleDebugging.bind(this), false);    this.pauseOnExceptionButton = document.createElement("button");    this.pauseOnExceptionButton.id = "scripts-pause-on-exceptions-status-bar-item";    this.pauseOnExceptionButton.className = "status-bar-item";    this.pauseOnExceptionButton.addEventListener("click", this._togglePauseOnExceptions.bind(this), false);    this._breakpointsURLMap = {};    this.reset();}WebInspector.ScriptsPanel.prototype = {    toolbarItemClass: "scripts",    get toolbarItemLabel()    {        return WebInspector.UIString("Scripts");    },    get statusBarItems()    {        return [this.enableToggleButton, this.pauseOnExceptionButton];    },    get paused()    {        return this._paused;    },    show: function()    {        WebInspector.Panel.prototype.show.call(this);        this.sidebarResizeElement.style.right = (this.sidebarElement.offsetWidth - 3) + "px";        if (this.visibleView) {            if (this.visibleView instanceof WebInspector.ResourceView)                this.visibleView.headersVisible = false;            this.visibleView.show(this.viewsContainerElement);        }        // Hide any views that are visible that are not this panel's current visible view.        // This can happen when a ResourceView is visible in the Resources panel then switched        // to the this panel.        for (var sourceID in this._sourceIDMap) {            var scriptOrResource = this._sourceIDMap[sourceID];            var view = this._sourceViewForScriptOrResource(scriptOrResource);            if (!view || view === this.visibleView)                continue;            view.visible = false;        }    },    get searchableViews()    {        var views = [];        const visibleView = this.visibleView;        if (visibleView && visibleView.performSearch) {            visibleView.alreadySearching = true;            views.push(visibleView);        }        for (var sourceID in this._sourceIDMap) {            var scriptOrResource = this._sourceIDMap[sourceID];            var view = this._sourceViewForScriptOrResource(scriptOrResource);            if (!view || !view.performSearch || view.alreadySearching)                continue;            view.alreadySearching = true;            views.push(view);        }        for (var i = 0; i < views.length; ++i)            delete views[i].alreadySearching;        return views;    },    addScript: function(sourceID, sourceURL, source, startingLine, errorLine, errorMessage)    {        var script = new WebInspector.Script(sourceID, sourceURL, source, startingLine, errorLine, errorMessage);        if (sourceURL in WebInspector.resourceURLMap) {            var resource = WebInspector.resourceURLMap[sourceURL];            resource.addScript(script);        }        if (sourceURL in this._breakpointsURLMap && sourceID) {            var breakpoints = this._breakpointsURLMap[sourceURL];            var breakpointsLength = breakpoints.length;            for (var i = 0; i < breakpointsLength; ++i) {                var breakpoint = breakpoints[i];                if (startingLine <= breakpoint.line) {                    breakpoint.sourceID = sourceID;                    if (breakpoint.enabled)                        InspectorController.addBreakpoint(breakpoint.sourceID, breakpoint.line);                }            }        }        if (sourceID)            this._sourceIDMap[sourceID] = (resource || script);        this._addScriptToFilesMenu(script);    },    addBreakpoint: function(breakpoint)    {        this.sidebarPanes.breakpoints.addBreakpoint(breakpoint);        var sourceFrame;        if (breakpoint.url) {            if (!(breakpoint.url in this._breakpointsURLMap))                this._breakpointsURLMap[breakpoint.url] = [];            this._breakpointsURLMap[breakpoint.url].unshift(breakpoint);            if (breakpoint.url in WebInspector.resourceURLMap) {                var resource = WebInspector.resourceURLMap[breakpoint.url];                sourceFrame = this._sourceFrameForScriptOrResource(resource);            }        }        if (breakpoint.sourceID && !sourceFrame) {            var object = this._sourceIDMap[breakpoint.sourceID]            sourceFrame = this._sourceFrameForScriptOrResource(object);        }        if (sourceFrame)            sourceFrame.addBreakpoint(breakpoint);    },    removeBreakpoint: function(breakpoint)    {        this.sidebarPanes.breakpoints.removeBreakpoint(breakpoint);        var sourceFrame;        if (breakpoint.url && breakpoint.url in this._breakpointsURLMap) {            var breakpoints = this._breakpointsURLMap[breakpoint.url];            breakpoints.remove(breakpoint);            if (!breakpoints.length)                delete this._breakpointsURLMap[breakpoint.url];            if (breakpoint.url in WebInspector.resourceURLMap) {                var resource = WebInspector.resourceURLMap[breakpoint.url];                sourceFrame = this._sourceFrameForScriptOrResource(resource);            }        }        if (breakpoint.sourceID && !sourceFrame) {            var object = this._sourceIDMap[breakpoint.sourceID]            sourceFrame = this._sourceFrameForScriptOrResource(object);        }        if (sourceFrame)            sourceFrame.removeBreakpoint(breakpoint);    },    evaluateInSelectedCallFrame: function(code, updateInterface)    {        var selectedCallFrame = this.sidebarPanes.callstack.selectedCallFrame;        if (!this._paused || !selectedCallFrame)            return;        if (typeof updateInterface === "undefined")            updateInterface = true;        var result = selectedCallFrame.evaluate(code);        if (updateInterface)            this.sidebarPanes.scopechain.update(selectedCallFrame);        return result;    },    variablesInScopeForSelectedCallFrame: function()    {        var selectedCallFrame = this.sidebarPanes.callstack.selectedCallFrame;        if (!this._paused || !selectedCallFrame)            return {};        var result = {};        var scopeChain = selectedCallFrame.scopeChain;        for (var i = 0; i < scopeChain.length; ++i) {            var scopeObject = scopeChain[i];            for (var property in scopeObject)                result[property] = true;        }        return result;    },    debuggerPaused: function()    {        this._paused = true;        this._waitingToPause = false;        this._stepping = false;        this._updateDebuggerButtons();        var callStackPane = this.sidebarPanes.callstack;        var currentFrame = InspectorController.currentCallFrame();        callStackPane.update(currentFrame, this._sourceIDMap);        callStackPane.selectedCallFrame = currentFrame;        WebInspector.currentPanel = this;        window.focus();    },    debuggerWasEnabled: function()    {        this.reset();    },    debuggerWasDisabled: function()    {        this.reset();    },    reset: function()    {        this.visibleView = null;        delete this.currentQuery;        this.searchCanceled();        if (!InspectorController.debuggerEnabled()) {            this._paused = false;            this._waitingToPause = false;            this._stepping = false;        }        this._clearInterface();        this._backForwardList = [];        this._currentBackForwardIndex = -1;        this._updateBackAndForwardButtons();        this._scriptsForURLsInFilesSelect = {};        this.filesSelectElement.removeChildren();        this.functionsSelectElement.removeChildren();        this.viewsContainerElement.removeChildren();        if (this._sourceIDMap) {            for (var sourceID in this._sourceIDMap) {                var object = this._sourceIDMap[sourceID];                if (object instanceof WebInspector.Resource)                    object.removeAllScripts();            }        }        this._sourceIDMap = {};    },    get visibleView()    {        return this._visibleView;    },    set visibleView(x)    {        if (this._visibleView === x)            return;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -