| Index: resources/inspector/Panel.js
|
| ===================================================================
|
| --- resources/inspector/Panel.js (revision 33840)
|
| +++ resources/inspector/Panel.js (working copy)
|
| @@ -1,347 +0,0 @@
|
| -/*
|
| - * Copyright (C) 2007, 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.
|
| - * 3. Neither the name of Apple Computer, Inc. ("Apple") 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 APPLE 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 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.Panel = function(createSidebar)
|
| -{
|
| - WebInspector.View.call(this);
|
| - if (createSidebar)
|
| - this._createSidebar();
|
| -
|
| - this.element.addStyleClass("panel");
|
| -}
|
| -
|
| -WebInspector.Panel.prototype = {
|
| - get toolbarItem()
|
| - {
|
| - if (this._toolbarItem)
|
| - return this._toolbarItem;
|
| -
|
| - // Sample toolbar item as markup:
|
| - // <button class="toolbar-item resources toggleable">
|
| - // <div class="toolbar-icon"></div>
|
| - // <div class="toolbar-label">Resources</div>
|
| - // </button>
|
| -
|
| - this._toolbarItem = document.createElement("button");
|
| - this._toolbarItem.className = "toolbar-item toggleable";
|
| - this._toolbarItem.panel = this;
|
| -
|
| - if ("toolbarItemClass" in this)
|
| - this._toolbarItem.addStyleClass(this.toolbarItemClass);
|
| -
|
| - var iconElement = document.createElement("div");
|
| - iconElement.className = "toolbar-icon";
|
| - this._toolbarItem.appendChild(iconElement);
|
| -
|
| - if ("toolbarItemLabel" in this) {
|
| - var labelElement = document.createElement("div");
|
| - labelElement.className = "toolbar-label";
|
| - labelElement.textContent = this.toolbarItemLabel;
|
| - this._toolbarItem.appendChild(labelElement);
|
| - }
|
| -
|
| - return this._toolbarItem;
|
| - },
|
| -
|
| - show: function()
|
| - {
|
| - WebInspector.View.prototype.show.call(this);
|
| -
|
| - var statusBarItems = this.statusBarItems;
|
| - if (statusBarItems) {
|
| - this._statusBarItemContainer = document.createElement("div");
|
| - for (var i = 0; i < statusBarItems.length; ++i)
|
| - this._statusBarItemContainer.appendChild(statusBarItems[i]);
|
| - document.getElementById("main-status-bar").appendChild(this._statusBarItemContainer);
|
| - }
|
| -
|
| - if ("_toolbarItem" in this)
|
| - this._toolbarItem.addStyleClass("toggled-on");
|
| -
|
| - WebInspector.currentFocusElement = document.getElementById("main-panels");
|
| - this._updateSidebarWidth();
|
| - },
|
| -
|
| - hide: function()
|
| - {
|
| - WebInspector.View.prototype.hide.call(this);
|
| -
|
| - if (this._statusBarItemContainer && this._statusBarItemContainer.parentNode)
|
| - this._statusBarItemContainer.parentNode.removeChild(this._statusBarItemContainer);
|
| - delete this._statusBarItemContainer;
|
| - if ("_toolbarItem" in this)
|
| - this._toolbarItem.removeStyleClass("toggled-on");
|
| - },
|
| -
|
| - attach: function()
|
| - {
|
| - if (!this.element.parentNode)
|
| - document.getElementById("main-panels").appendChild(this.element);
|
| - },
|
| -
|
| - searchCanceled: function(startingNewSearch)
|
| - {
|
| - if (this._searchResults) {
|
| - for (var i = 0; i < this._searchResults.length; ++i) {
|
| - var view = this._searchResults[i];
|
| - if (view.searchCanceled)
|
| - view.searchCanceled();
|
| - delete view.currentQuery;
|
| - }
|
| - }
|
| -
|
| - WebInspector.updateSearchMatchesCount(0, this);
|
| -
|
| - if (this._currentSearchChunkIntervalIdentifier) {
|
| - clearInterval(this._currentSearchChunkIntervalIdentifier);
|
| - delete this._currentSearchChunkIntervalIdentifier;
|
| - }
|
| -
|
| - this._totalSearchMatches = 0;
|
| - this._currentSearchResultIndex = 0;
|
| - this._searchResults = [];
|
| - },
|
| -
|
| - performSearch: function(query)
|
| - {
|
| - // Call searchCanceled since it will reset everything we need before doing a new search.
|
| - this.searchCanceled(true);
|
| -
|
| - var searchableViews = this.searchableViews;
|
| - if (!searchableViews || !searchableViews.length)
|
| - return;
|
| -
|
| - var parentElement = this.viewsContainerElement;
|
| - var visibleView = this.visibleView;
|
| - var sortFuction = this.searchResultsSortFunction;
|
| -
|
| - var matchesCountUpdateTimeout = null;
|
| -
|
| - function updateMatchesCount()
|
| - {
|
| - WebInspector.updateSearchMatchesCount(this._totalSearchMatches, this);
|
| - matchesCountUpdateTimeout = null;
|
| - }
|
| -
|
| - function updateMatchesCountSoon()
|
| - {
|
| - if (matchesCountUpdateTimeout)
|
| - return;
|
| - // Update the matches count every half-second so it doesn't feel twitchy.
|
| - matchesCountUpdateTimeout = setTimeout(updateMatchesCount.bind(this), 500);
|
| - }
|
| -
|
| - function finishedCallback(view, searchMatches)
|
| - {
|
| - if (!searchMatches)
|
| - return;
|
| -
|
| - this._totalSearchMatches += searchMatches;
|
| - this._searchResults.push(view);
|
| -
|
| - if (sortFuction)
|
| - this._searchResults.sort(sortFuction);
|
| -
|
| - if (this.searchMatchFound)
|
| - this.searchMatchFound(view, searchMatches);
|
| -
|
| - updateMatchesCountSoon.call(this);
|
| -
|
| - if (view === visibleView)
|
| - view.jumpToFirstSearchResult();
|
| - }
|
| -
|
| - var i = 0;
|
| - var panel = this;
|
| - var boundFinishedCallback = finishedCallback.bind(this);
|
| - var chunkIntervalIdentifier = null;
|
| -
|
| - // Split up the work into chunks so we don't block the
|
| - // UI thread while processing.
|
| -
|
| - function processChunk()
|
| - {
|
| - var view = searchableViews[i];
|
| -
|
| - if (++i >= searchableViews.length) {
|
| - if (panel._currentSearchChunkIntervalIdentifier === chunkIntervalIdentifier)
|
| - delete panel._currentSearchChunkIntervalIdentifier;
|
| - clearInterval(chunkIntervalIdentifier);
|
| - }
|
| -
|
| - if (!view)
|
| - return;
|
| -
|
| - if (view.element.parentNode !== parentElement && view.element.parentNode && parentElement)
|
| - view.detach();
|
| -
|
| - view.currentQuery = query;
|
| - view.performSearch(query, boundFinishedCallback);
|
| - }
|
| -
|
| - processChunk();
|
| -
|
| - chunkIntervalIdentifier = setInterval(processChunk, 25);
|
| - this._currentSearchChunkIntervalIdentifier = chunkIntervalIdentifier;
|
| - },
|
| -
|
| - jumpToNextSearchResult: function()
|
| - {
|
| - if (!this.showView || !this._searchResults || !this._searchResults.length)
|
| - return;
|
| -
|
| - var showFirstResult = false;
|
| -
|
| - this._currentSearchResultIndex = this._searchResults.indexOf(this.visibleView);
|
| - if (this._currentSearchResultIndex === -1) {
|
| - this._currentSearchResultIndex = 0;
|
| - showFirstResult = true;
|
| - }
|
| -
|
| - var currentView = this._searchResults[this._currentSearchResultIndex];
|
| -
|
| - if (currentView.showingLastSearchResult()) {
|
| - if (++this._currentSearchResultIndex >= this._searchResults.length)
|
| - this._currentSearchResultIndex = 0;
|
| - currentView = this._searchResults[this._currentSearchResultIndex];
|
| - showFirstResult = true;
|
| - }
|
| -
|
| - if (currentView !== this.visibleView)
|
| - this.showView(currentView);
|
| -
|
| - if (showFirstResult)
|
| - currentView.jumpToFirstSearchResult();
|
| - else
|
| - currentView.jumpToNextSearchResult();
|
| - },
|
| -
|
| - jumpToPreviousSearchResult: function()
|
| - {
|
| - if (!this.showView || !this._searchResults || !this._searchResults.length)
|
| - return;
|
| -
|
| - var showLastResult = false;
|
| -
|
| - this._currentSearchResultIndex = this._searchResults.indexOf(this.visibleView);
|
| - if (this._currentSearchResultIndex === -1) {
|
| - this._currentSearchResultIndex = 0;
|
| - showLastResult = true;
|
| - }
|
| -
|
| - var currentView = this._searchResults[this._currentSearchResultIndex];
|
| -
|
| - if (currentView.showingFirstSearchResult()) {
|
| - if (--this._currentSearchResultIndex < 0)
|
| - this._currentSearchResultIndex = (this._searchResults.length - 1);
|
| - currentView = this._searchResults[this._currentSearchResultIndex];
|
| - showLastResult = true;
|
| - }
|
| -
|
| - if (currentView !== this.visibleView)
|
| - this.showView(currentView);
|
| -
|
| - if (showLastResult)
|
| - currentView.jumpToLastSearchResult();
|
| - else
|
| - currentView.jumpToPreviousSearchResult();
|
| - },
|
| -
|
| - handleKeyEvent: function(event)
|
| - {
|
| - this.sidebarTree.handleKeyEvent(event);
|
| - },
|
| -
|
| - _createSidebar: function()
|
| - {
|
| - this.sidebarElement = document.createElement("div");
|
| - this.sidebarElement.className = "sidebar";
|
| - this.element.appendChild(this.sidebarElement);
|
| -
|
| - this.sidebarResizeElement = document.createElement("div");
|
| - this.sidebarResizeElement.className = "sidebar-resizer-vertical";
|
| - this.sidebarResizeElement.addEventListener("mousedown", this._startSidebarDragging.bind(this), false);
|
| - this.element.appendChild(this.sidebarResizeElement);
|
| -
|
| - this.sidebarTreeElement = document.createElement("ol");
|
| - this.sidebarTreeElement.className = "sidebar-tree";
|
| - this.sidebarElement.appendChild(this.sidebarTreeElement);
|
| - this.sidebarTree = new TreeOutline(this.sidebarTreeElement);
|
| - },
|
| -
|
| - _startSidebarDragging: function(event)
|
| - {
|
| - WebInspector.elementDragStart(this.sidebarResizeElement, this._sidebarDragging.bind(this), this._endSidebarDragging.bind(this), event, "col-resize");
|
| - },
|
| -
|
| - _sidebarDragging: function(event)
|
| - {
|
| - this._updateSidebarWidth(event.pageX);
|
| -
|
| - event.preventDefault();
|
| - },
|
| -
|
| - _endSidebarDragging: function(event)
|
| - {
|
| - WebInspector.elementDragEnd(event);
|
| - },
|
| -
|
| - _updateSidebarWidth: function(width)
|
| - {
|
| - if (this.sidebarElement.offsetWidth <= 0) {
|
| - // The stylesheet hasn't loaded yet or the window is closed,
|
| - // so we can't calculate what is need. Return early.
|
| - return;
|
| - }
|
| -
|
| - if (!("_currentSidebarWidth" in this))
|
| - this._currentSidebarWidth = this.sidebarElement.offsetWidth;
|
| -
|
| - if (typeof width === "undefined")
|
| - width = this._currentSidebarWidth;
|
| -
|
| - width = Number.constrain(width, Preferences.minSidebarWidth, window.innerWidth / 2);
|
| -
|
| - this._currentSidebarWidth = width;
|
| -
|
| - this.sidebarElement.style.width = width + "px";
|
| - this.setMainViewWidth(width);
|
| - this.sidebarResizeElement.style.left = (width - 3) + "px";
|
| -
|
| - var visibleView = this.visibleView;
|
| - if (visibleView && "resize" in visibleView)
|
| - visibleView.resize();
|
| - },
|
| -
|
| - setMainViewWidth: function(width)
|
| - {
|
| - // Should be implemented by ancestors.
|
| - }
|
| -}
|
| -
|
| -WebInspector.Panel.prototype.__proto__ = WebInspector.View.prototype;
|
|
|