10bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/* 20bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. 30bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Copyright (C) 2009 Joseph Pecoraro 40bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * 50bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Redistribution and use in source and binary forms, with or without 60bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * modification, are permitted provided that the following conditions 70bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * are met: 80bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * 90bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * 1. Redistributions of source code must retain the above copyright 10643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * notice, this list of conditions and the following disclaimer. 110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * 2. Redistributions in binary form must reproduce the above copyright 120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * notice, this list of conditions and the following disclaimer in the 13643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * documentation and/or other materials provided with the distribution. 140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * its contributors may be used to endorse or promote products derived 16643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * from this software without specific prior written permission. 170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * 180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch */ 290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochWebInspector.Drawer = function() 310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch WebInspector.View.call(this, document.getElementById("drawer")); 330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 34643ca7872b450ea4efacab6188849e5aac2ba161Steve Block this._savedHeight = 200; // Default. 35643ca7872b450ea4efacab6188849e5aac2ba161Steve Block this.state = WebInspector.Drawer.State.Hidden; 36643ca7872b450ea4efacab6188849e5aac2ba161Steve Block this.fullPanel = false; 37643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 382fc2651226baac27029e38c9d6ef883fa32084dbSteve Block this._mainElement = document.getElementById("main"); 392fc2651226baac27029e38c9d6ef883fa32084dbSteve Block this._toolbarElement = document.getElementById("toolbar"); 402fc2651226baac27029e38c9d6ef883fa32084dbSteve Block this._mainStatusBar = document.getElementById("main-status-bar"); 412fc2651226baac27029e38c9d6ef883fa32084dbSteve Block this._mainStatusBar.addEventListener("mousedown", this._startStatusBarDragging.bind(this), true); 422fc2651226baac27029e38c9d6ef883fa32084dbSteve Block this._viewStatusBar = document.getElementById("other-drawer-status-bar-items"); 435af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke this._counters = document.getElementById("counters"); 445af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke this._drawerStatusBar = document.getElementById("drawer-status-bar"); 450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochWebInspector.Drawer.prototype = { 480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch get visibleView() 490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return this._visibleView; 510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch }, 520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch set visibleView(x) 540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (this._visibleView === x) { 56643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (this.visible && this.fullPanel) 57643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return; 580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch this.visible = !this.visible; 590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch var firstTime = !this._visibleView; 630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (this._visibleView) 640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch this._visibleView.hide(); 650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch this._visibleView = x; 670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (x && !firstTime) { 690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch this._safelyRemoveChildren(); 702fc2651226baac27029e38c9d6ef883fa32084dbSteve Block this._viewStatusBar.removeChildren(); // optimize this? call old.detach() 712fc2651226baac27029e38c9d6ef883fa32084dbSteve Block x.attach(this.element, this._viewStatusBar); 720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch x.show(); 730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch this.visible = true; 740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch }, 760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 77643ca7872b450ea4efacab6188849e5aac2ba161Steve Block get savedHeight() 78643ca7872b450ea4efacab6188849e5aac2ba161Steve Block { 79643ca7872b450ea4efacab6188849e5aac2ba161Steve Block var height = this._savedHeight || this.element.offsetHeight; 802fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return Number.constrain(height, Preferences.minConsoleHeight, window.innerHeight - this._mainElement.totalOffsetTop - Preferences.minConsoleHeight); 81643ca7872b450ea4efacab6188849e5aac2ba161Steve Block }, 82643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 83231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block showView: function(view) 84231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block { 85231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (!this.visible || this.visibleView !== view) 86231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block this.visibleView = view; 87231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block }, 88231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch show: function() 900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (this._animating || this.visible) 920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (this.visibleView) 950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch this.visibleView.show(); 960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch WebInspector.View.prototype.show.call(this); 980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch this._animating = true; 1000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch document.body.addStyleClass("drawer-visible"); 1020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch var anchoredItems = document.getElementById("anchored-status-bar-items"); 1042fc2651226baac27029e38c9d6ef883fa32084dbSteve Block var height = (this.fullPanel ? window.innerHeight - this._toolbarElement.offsetHeight : this.savedHeight); 1050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch var animations = [ 106643ca7872b450ea4efacab6188849e5aac2ba161Steve Block {element: this.element, end: {height: height}}, 1072fc2651226baac27029e38c9d6ef883fa32084dbSteve Block {element: this._mainElement, end: {bottom: height}}, 1082fc2651226baac27029e38c9d6ef883fa32084dbSteve Block {element: this._mainStatusBar, start: {"padding-left": anchoredItems.offsetWidth - 1}, end: {"padding-left": 0}}, 1092fc2651226baac27029e38c9d6ef883fa32084dbSteve Block {element: this._viewStatusBar, start: {opacity: 0}, end: {opacity: 1}} 1100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ]; 1110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1122fc2651226baac27029e38c9d6ef883fa32084dbSteve Block this._drawerStatusBar.insertBefore(anchoredItems, this._drawerStatusBar.firstChild); 1130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1145af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke if (this._currentPanelCounters) { 1155af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke var oldRight = this._drawerStatusBar.clientWidth - (this._counters.offsetLeft + this._currentPanelCounters.offsetWidth); 1165af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke var newRight = WebInspector.Panel.counterRightMargin; 1175af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke var rightPadding = (oldRight - newRight); 1185af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke animations.push({element: this._currentPanelCounters, start: {"padding-right": rightPadding}, end: {"padding-right": 0}}); 1195af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke this._currentPanelCounters.parentNode.removeChild(this._currentPanelCounters); 1202fc2651226baac27029e38c9d6ef883fa32084dbSteve Block this._mainStatusBar.appendChild(this._currentPanelCounters); 1215af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke } 1225af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke 1230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch function animationFinished() 1240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 1250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if ("updateStatusBarItems" in WebInspector.currentPanel) 1260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch WebInspector.currentPanel.updateStatusBarItems(); 1270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (this.visibleView.afterShow) 1280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch this.visibleView.afterShow(); 1290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch delete this._animating; 1302fc2651226baac27029e38c9d6ef883fa32084dbSteve Block delete this._currentAnimation; 131643ca7872b450ea4efacab6188849e5aac2ba161Steve Block this.state = (this.fullPanel ? WebInspector.Drawer.State.Full : WebInspector.Drawer.State.Variable); 1325af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke if (this._currentPanelCounters) 1335af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke this._currentPanelCounters.removeAttribute("style"); 1340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 1350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1362fc2651226baac27029e38c9d6ef883fa32084dbSteve Block this._currentAnimation = WebInspector.animateStyle(animations, this._animationDuration(), animationFinished.bind(this)); 1370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch }, 1380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch hide: function() 1400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 1410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (this._animating || !this.visible) 1420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 1430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch WebInspector.View.prototype.hide.call(this); 145643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (this.visibleView) 1470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch this.visibleView.hide(); 1480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch this._animating = true; 1500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 151643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (!this.fullPanel) 152643ca7872b450ea4efacab6188849e5aac2ba161Steve Block this._savedHeight = this.element.offsetHeight; 153643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (this.element === WebInspector.currentFocusElement || this.element.isAncestor(WebInspector.currentFocusElement)) 1550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch WebInspector.currentFocusElement = WebInspector.previousFocusElement; 1560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch var anchoredItems = document.getElementById("anchored-status-bar-items"); 1580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 159643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // Temporarily set properties and classes to mimic the post-animation values so panels 1600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // like Elements in their updateStatusBarItems call will size things to fit the final location. 1612fc2651226baac27029e38c9d6ef883fa32084dbSteve Block this._mainStatusBar.style.setProperty("padding-left", (anchoredItems.offsetWidth - 1) + "px"); 1620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch document.body.removeStyleClass("drawer-visible"); 1630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if ("updateStatusBarItems" in WebInspector.currentPanel) 1640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch WebInspector.currentPanel.updateStatusBarItems(); 1650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch document.body.addStyleClass("drawer-visible"); 1660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch var animations = [ 1682fc2651226baac27029e38c9d6ef883fa32084dbSteve Block {element: this._mainElement, end: {bottom: 0}}, 1692fc2651226baac27029e38c9d6ef883fa32084dbSteve Block {element: this._mainStatusBar, start: {"padding-left": 0}, end: {"padding-left": anchoredItems.offsetWidth - 1}}, 1702fc2651226baac27029e38c9d6ef883fa32084dbSteve Block {element: this._viewStatusBar, start: {opacity: 1}, end: {opacity: 0}} 1710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ]; 1720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1735af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke if (this._currentPanelCounters) { 1745af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke var newRight = this._drawerStatusBar.clientWidth - this._counters.offsetLeft; 1752fc2651226baac27029e38c9d6ef883fa32084dbSteve Block var oldRight = this._mainStatusBar.clientWidth - (this._currentPanelCounters.offsetLeft + this._currentPanelCounters.offsetWidth); 1765af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke var rightPadding = (newRight - oldRight); 1775af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke animations.push({element: this._currentPanelCounters, start: {"padding-right": 0}, end: {"padding-right": rightPadding}}); 1785af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke } 1795af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke 1800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch function animationFinished() 1810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 182d0825bca7fe65beaee391d30da42e937db621564Steve Block WebInspector.currentPanel.resize(); 1832fc2651226baac27029e38c9d6ef883fa32084dbSteve Block this._mainStatusBar.insertBefore(anchoredItems, this._mainStatusBar.firstChild); 1842fc2651226baac27029e38c9d6ef883fa32084dbSteve Block this._mainStatusBar.style.removeProperty("padding-left"); 1855af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke 1865af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke if (this._currentPanelCounters) { 1875af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke this._currentPanelCounters.setAttribute("style", null); 1885af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke this._currentPanelCounters.parentNode.removeChild(this._currentPanelCounters); 1895af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke this._counters.insertBefore(this._currentPanelCounters, this._counters.firstChild); 1905af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke } 1915af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke 1920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch document.body.removeStyleClass("drawer-visible"); 1930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch delete this._animating; 1942fc2651226baac27029e38c9d6ef883fa32084dbSteve Block delete this._currentAnimation; 195643ca7872b450ea4efacab6188849e5aac2ba161Steve Block this.state = WebInspector.Drawer.State.Hidden; 196643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 197643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1982fc2651226baac27029e38c9d6ef883fa32084dbSteve Block this._currentAnimation = WebInspector.animateStyle(animations, this._animationDuration(), animationFinished.bind(this)); 199643ca7872b450ea4efacab6188849e5aac2ba161Steve Block }, 200643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 201643ca7872b450ea4efacab6188849e5aac2ba161Steve Block resize: function() 202643ca7872b450ea4efacab6188849e5aac2ba161Steve Block { 203643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (this.state === WebInspector.Drawer.State.Hidden) 204643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return; 205643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 206643ca7872b450ea4efacab6188849e5aac2ba161Steve Block var height; 207643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (this.state === WebInspector.Drawer.State.Variable) { 208643ca7872b450ea4efacab6188849e5aac2ba161Steve Block height = parseInt(this.element.style.height); 2092fc2651226baac27029e38c9d6ef883fa32084dbSteve Block height = Number.constrain(height, Preferences.minConsoleHeight, window.innerHeight - this._mainElement.totalOffsetTop - Preferences.minConsoleHeight); 210643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } else 2112fc2651226baac27029e38c9d6ef883fa32084dbSteve Block height = window.innerHeight - this._toolbarElement.offsetHeight; 212643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2132fc2651226baac27029e38c9d6ef883fa32084dbSteve Block this._mainElement.style.bottom = height + "px"; 214643ca7872b450ea4efacab6188849e5aac2ba161Steve Block this.element.style.height = height + "px"; 215643ca7872b450ea4efacab6188849e5aac2ba161Steve Block }, 216643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 217643ca7872b450ea4efacab6188849e5aac2ba161Steve Block enterPanelMode: function() 218643ca7872b450ea4efacab6188849e5aac2ba161Steve Block { 219643ca7872b450ea4efacab6188849e5aac2ba161Steve Block this._cancelAnimationIfNeeded(); 220643ca7872b450ea4efacab6188849e5aac2ba161Steve Block this.fullPanel = true; 221643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 222643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (this.visible) { 223643ca7872b450ea4efacab6188849e5aac2ba161Steve Block this._savedHeight = this.element.offsetHeight; 2242fc2651226baac27029e38c9d6ef883fa32084dbSteve Block var height = window.innerHeight - this._toolbarElement.offsetHeight; 225643ca7872b450ea4efacab6188849e5aac2ba161Steve Block this._animateDrawerHeight(height, WebInspector.Drawer.State.Full); 226643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 227643ca7872b450ea4efacab6188849e5aac2ba161Steve Block }, 228643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 229643ca7872b450ea4efacab6188849e5aac2ba161Steve Block exitPanelMode: function() 230643ca7872b450ea4efacab6188849e5aac2ba161Steve Block { 231643ca7872b450ea4efacab6188849e5aac2ba161Steve Block this._cancelAnimationIfNeeded(); 232643ca7872b450ea4efacab6188849e5aac2ba161Steve Block this.fullPanel = false; 233643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 234643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (this.visible) { 235643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // If this animation gets cancelled, we want the state of the drawer to be Variable, 236643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // so that the new animation can't do an immediate transition between Hidden/Full states. 237643ca7872b450ea4efacab6188849e5aac2ba161Steve Block this.state = WebInspector.Drawer.State.Variable; 238643ca7872b450ea4efacab6188849e5aac2ba161Steve Block var height = this.savedHeight; 239643ca7872b450ea4efacab6188849e5aac2ba161Steve Block this._animateDrawerHeight(height, WebInspector.Drawer.State.Variable); 240643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 241643ca7872b450ea4efacab6188849e5aac2ba161Steve Block }, 242643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 243643ca7872b450ea4efacab6188849e5aac2ba161Steve Block immediatelyExitPanelMode: function() 244643ca7872b450ea4efacab6188849e5aac2ba161Steve Block { 245643ca7872b450ea4efacab6188849e5aac2ba161Steve Block this.visible = false; 246643ca7872b450ea4efacab6188849e5aac2ba161Steve Block this.fullPanel = false; 247643ca7872b450ea4efacab6188849e5aac2ba161Steve Block }, 248643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2492fc2651226baac27029e38c9d6ef883fa32084dbSteve Block immediatelyFinishAnimation: function() 2502fc2651226baac27029e38c9d6ef883fa32084dbSteve Block { 2512fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (this._currentAnimation) 2522fc2651226baac27029e38c9d6ef883fa32084dbSteve Block this._currentAnimation.forceComplete(); 2532fc2651226baac27029e38c9d6ef883fa32084dbSteve Block }, 2542fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 2555af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke set currentPanelCounters(x) 2565af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke { 2575af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke if (!x) { 2585af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke if (this._currentPanelCounters) 2595af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke this._currentPanelCounters.parentElement.removeChild(this._currentPanelCounters); 2605af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke delete this._currentPanelCounters; 2615af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke return; 2625af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke } 2635af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke 2645af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke this._currentPanelCounters = x; 2655af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke if (this.visible) 2662fc2651226baac27029e38c9d6ef883fa32084dbSteve Block this._mainStatusBar.appendChild(x); 2675af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke else 2685af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke this._counters.insertBefore(x, this._counters.firstChild); 2695af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke }, 2705af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke 271643ca7872b450ea4efacab6188849e5aac2ba161Steve Block _cancelAnimationIfNeeded: function() 272643ca7872b450ea4efacab6188849e5aac2ba161Steve Block { 273643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (this._animating) { 2742fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (this._currentAnimation) 2752fc2651226baac27029e38c9d6ef883fa32084dbSteve Block this._currentAnimation.cancel(); 276643ca7872b450ea4efacab6188849e5aac2ba161Steve Block delete this._animating; 2772fc2651226baac27029e38c9d6ef883fa32084dbSteve Block delete this._currentAnimation; 278643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 279643ca7872b450ea4efacab6188849e5aac2ba161Steve Block }, 280643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 281643ca7872b450ea4efacab6188849e5aac2ba161Steve Block _animateDrawerHeight: function(height, finalState) 282643ca7872b450ea4efacab6188849e5aac2ba161Steve Block { 283643ca7872b450ea4efacab6188849e5aac2ba161Steve Block this._animating = true; 284643ca7872b450ea4efacab6188849e5aac2ba161Steve Block var animations = [ 285643ca7872b450ea4efacab6188849e5aac2ba161Steve Block {element: this.element, end: {height: height}}, 2862fc2651226baac27029e38c9d6ef883fa32084dbSteve Block {element: this._mainElement, end: {bottom: height}} 287643ca7872b450ea4efacab6188849e5aac2ba161Steve Block ]; 288643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 289643ca7872b450ea4efacab6188849e5aac2ba161Steve Block function animationFinished() 290643ca7872b450ea4efacab6188849e5aac2ba161Steve Block { 291643ca7872b450ea4efacab6188849e5aac2ba161Steve Block delete this._animating; 2922fc2651226baac27029e38c9d6ef883fa32084dbSteve Block delete this._currentAnimation; 293643ca7872b450ea4efacab6188849e5aac2ba161Steve Block this.state = finalState; 2940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 2950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 2962fc2651226baac27029e38c9d6ef883fa32084dbSteve Block this._currentAnimation = WebInspector.animateStyle(animations, this._animationDuration(), animationFinished.bind(this)); 297643ca7872b450ea4efacab6188849e5aac2ba161Steve Block }, 298643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 299643ca7872b450ea4efacab6188849e5aac2ba161Steve Block _animationDuration: function() 300643ca7872b450ea4efacab6188849e5aac2ba161Steve Block { 301643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // Immediate if going between Hidden and Full in full panel mode 302643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (this.fullPanel && (this.state === WebInspector.Drawer.State.Hidden || this.state === WebInspector.Drawer.State.Full)) 303643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return 0; 304643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 305643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return (window.event && window.event.shiftKey ? 2000 : 250); 3060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch }, 3070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch _safelyRemoveChildren: function() 3090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 3100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch var child = this.element.firstChild; 3110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch while (child) { 3120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (child.id !== "drawer-status-bar") { 3130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch var moveTo = child.nextSibling; 3140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch this.element.removeChild(child); 3150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch child = moveTo; 3160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } else 3170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch child = child.nextSibling; 3180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 3190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch }, 3200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch _startStatusBarDragging: function(event) 3220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 3232fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (!this.visible || event.target !== this._mainStatusBar) 3240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 3250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3262fc2651226baac27029e38c9d6ef883fa32084dbSteve Block WebInspector.elementDragStart(this._mainStatusBar, this._statusBarDragging.bind(this), this._endStatusBarDragging.bind(this), event, "row-resize"); 3270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch this._statusBarDragOffset = event.pageY - this.element.totalOffsetTop; 3290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch event.stopPropagation(); 3310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch }, 3320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch _statusBarDragging: function(event) 3340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 3350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch var height = window.innerHeight - event.pageY + this._statusBarDragOffset; 3362fc2651226baac27029e38c9d6ef883fa32084dbSteve Block height = Number.constrain(height, Preferences.minConsoleHeight, window.innerHeight - this._mainElement.totalOffsetTop - Preferences.minConsoleHeight); 3370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3382fc2651226baac27029e38c9d6ef883fa32084dbSteve Block this._mainElement.style.bottom = height + "px"; 3390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch this.element.style.height = height + "px"; 3400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch event.preventDefault(); 3420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch event.stopPropagation(); 3430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch }, 3440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch _endStatusBarDragging: function(event) 3460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 3470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch WebInspector.elementDragEnd(event); 3480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 349643ca7872b450ea4efacab6188849e5aac2ba161Steve Block this._savedHeight = this.element.offsetHeight; 3500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch delete this._statusBarDragOffset; 3510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch event.stopPropagation(); 3530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 3540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 3550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochWebInspector.Drawer.prototype.__proto__ = WebInspector.View.prototype; 357643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 358643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockWebInspector.Drawer.State = { 359643ca7872b450ea4efacab6188849e5aac2ba161Steve Block Hidden: 0, 360643ca7872b450ea4efacab6188849e5aac2ba161Steve Block Variable: 1, 361643ca7872b450ea4efacab6188849e5aac2ba161Steve Block Full: 2 362643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}; 363