monaca-lib
Version:
Monaca cloud API bindings for JavaScript
237 lines (208 loc) • 6.78 kB
JavaScript
/*
* Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
* Copyright (C) 2009 Joseph Pecoraro
*
* 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.
*/
/**
* @constructor
* @extends {WebInspector.VBox}
* @param {!WebInspector.SplitView} splitView
*/
WebInspector.Drawer = function(splitView)
{
WebInspector.VBox.call(this);
this.element.id = "drawer-contents";
this._splitView = splitView;
splitView.hideDefaultResizer();
splitView.setSidebarView(this);
this._toggleDrawerButton = new WebInspector.StatusBarButton(WebInspector.UIString("Show drawer."), "console-status-bar-item");
this._toggleDrawerButton.addEventListener("click", this.toggle, this);
this._tabbedPane = new WebInspector.TabbedPane();
this._tabbedPane.element.id = "drawer-tabbed-pane";
this._tabbedPane.setCloseableTabs(false);
this._tabbedPane.addEventListener(WebInspector.TabbedPane.EventTypes.TabSelected, this._tabSelected, this);
new WebInspector.ExtensibleTabbedPaneController(this._tabbedPane, "drawer-view");
splitView.installResizer(this._tabbedPane.headerElement());
this._lastSelectedViewSetting = WebInspector.settings.createSetting("WebInspector.Drawer.lastSelectedView", "console");
this._tabbedPane.show(this.element);
}
WebInspector.Drawer.prototype = {
/**
* @return {!WebInspector.StatusBarButton}
*/
toggleButton: function()
{
return this._toggleDrawerButton;
},
/**
* @param {string} id
*/
closeView: function(id)
{
this._tabbedPane.closeTab(id);
},
/**
* @param {string} id
* @param {boolean=} immediate
*/
showView: function(id, immediate)
{
if (!this._tabbedPane.hasTab(id)) {
// Hidden tab.
this._innerShow(immediate);
return;
}
this._innerShow(immediate);
this._tabbedPane.selectTab(id, true);
// In case this id is already selected, anyways persist it as the last saved value.
this._lastSelectedViewSetting.set(id);
},
/**
* @param {string} id
* @param {string} title
* @param {!WebInspector.View} view
*/
showCloseableView: function(id, title, view)
{
if (!this._tabbedPane.hasTab(id)) {
this._tabbedPane.appendTab(id, title, view, undefined, false, true);
} else {
this._tabbedPane.changeTabView(id, view);
this._tabbedPane.changeTabTitle(id, title);
}
this._innerShow();
this._tabbedPane.selectTab(id, true);
},
showDrawer: function()
{
this.showView(this._lastSelectedViewSetting.get());
},
wasShown: function()
{
this.showView(this._lastSelectedViewSetting.get());
this._toggleDrawerButton.setToggled(true);
this._toggleDrawerButton.setTitle(WebInspector.UIString("Hide drawer."));
},
willHide: function()
{
this._toggleDrawerButton.setToggled(false);
this._toggleDrawerButton.setTitle(WebInspector.UIString("Show drawer."));
},
/**
* @param {boolean=} immediate
*/
_innerShow: function(immediate)
{
if (this.isShowing())
return;
this._splitView.showBoth(!immediate);
if (this._visibleView())
this._visibleView().focus();
},
closeDrawer: function()
{
if (!this.isShowing())
return;
WebInspector.restoreFocusFromElement(this.element);
this._splitView.hideSidebar(true);
},
/**
* @return {?WebInspector.View} view
*/
_visibleView: function()
{
return this._tabbedPane.visibleView;
},
/**
* @param {!WebInspector.Event} event
*/
_tabSelected: function(event)
{
var tabId = this._tabbedPane.selectedTabId;
if (tabId && event.data["isUserGesture"] && !this._tabbedPane.isTabCloseable(tabId))
this._lastSelectedViewSetting.set(tabId);
},
toggle: function()
{
if (this._toggleDrawerButton.toggled())
this.closeDrawer();
else
this.showDrawer();
},
/**
* @return {boolean}
*/
visible: function()
{
return this._toggleDrawerButton.toggled();
},
/**
* @return {?string}
*/
selectedViewId: function()
{
return this._tabbedPane.selectedTabId;
},
initialPanelShown: function()
{
this._initialPanelWasShown = true;
},
__proto__: WebInspector.VBox.prototype
}
/**
* @interface
*/
WebInspector.Drawer.ViewFactory = function()
{
}
WebInspector.Drawer.ViewFactory.prototype = {
/**
* @return {!WebInspector.View}
*/
createView: function() {}
}
/**
* @constructor
* @implements {WebInspector.Drawer.ViewFactory}
* @param {function(new:T)} constructor
* @template T
*/
WebInspector.Drawer.SingletonViewFactory = function(constructor)
{
this._constructor = constructor;
}
WebInspector.Drawer.SingletonViewFactory.prototype = {
/**
* @override
* @return {!WebInspector.View}
*/
createView: function()
{
if (!this._instance)
this._instance = /** @type {!WebInspector.View} */(new this._constructor());
return this._instance;
}
}