DockController.js 3.4 KB

12345678910111213141516171819
  1. export default class DockController extends Common.Object{constructor(canDock){super();this._canDock=canDock;this._closeButton=new UI.ToolbarButton(Common.UIString('Close'),'largeicon-delete');this._closeButton.addEventListener(UI.ToolbarButton.Events.Click,Host.InspectorFrontendHost.closeWindow.bind(Host.InspectorFrontendHost));if(!canDock){this._dockSide=State.Undocked;this._closeButton.setVisible(false);return;}
  2. this._states=[State.DockedToRight,State.DockedToBottom,State.DockedToLeft,State.Undocked];this._currentDockStateSetting=Common.settings.moduleSetting('currentDockState');this._currentDockStateSetting.addChangeListener(this._dockSideChanged,this);this._lastDockStateSetting=Common.settings.createSetting('lastDockState','bottom');if(this._states.indexOf(this._currentDockStateSetting.get())===-1){this._currentDockStateSetting.set('right');}
  3. if(this._states.indexOf(this._lastDockStateSetting.get())===-1){this._currentDockStateSetting.set('bottom');}}
  4. initialize(){if(!this._canDock){return;}
  5. this._titles=[Common.UIString('Dock to right'),Common.UIString('Dock to bottom'),Common.UIString('Dock to left'),Common.UIString('Undock into separate window')];this._dockSideChanged();}
  6. _dockSideChanged(){this.setDockSide(this._currentDockStateSetting.get());}
  7. dockSide(){return this._dockSide;}
  8. canDock(){return this._canDock;}
  9. isVertical(){return this._dockSide===State.DockedToRight||this._dockSide===State.DockedToLeft;}
  10. setDockSide(dockSide){if(this._states.indexOf(dockSide)===-1){dockSide=this._states[0];}
  11. if(this._dockSide===dockSide){return;}
  12. if(this._dockSide){this._lastDockStateSetting.set(this._dockSide);}
  13. this._savedFocus=document.deepActiveElement();const eventData={from:this._dockSide,to:dockSide};this.dispatchEventToListeners(Events.BeforeDockSideChanged,eventData);console.timeStamp('DockController.setIsDocked');this._dockSide=dockSide;this._currentDockStateSetting.set(dockSide);Host.InspectorFrontendHost.setIsDocked(dockSide!==State.Undocked,this._setIsDockedResponse.bind(this,eventData));this._closeButton.setVisible(this._dockSide!==State.Undocked);this.dispatchEventToListeners(Events.DockSideChanged,eventData);}
  14. _setIsDockedResponse(eventData){this.dispatchEventToListeners(Events.AfterDockSideChanged,eventData);if(this._savedFocus){this._savedFocus.focus();this._savedFocus=null;}}
  15. _toggleDockSide(){if(this._lastDockStateSetting.get()===this._currentDockStateSetting.get()){const index=this._states.indexOf(this._currentDockStateSetting.get())||0;this._lastDockStateSetting.set(this._states[(index+1)%this._states.length]);}
  16. this.setDockSide(this._lastDockStateSetting.get());}}
  17. export const State={DockedToBottom:'bottom',DockedToRight:'right',DockedToLeft:'left',Undocked:'undocked'};export const Events={BeforeDockSideChanged:Symbol('BeforeDockSideChanged'),DockSideChanged:Symbol('DockSideChanged'),AfterDockSideChanged:Symbol('AfterDockSideChanged')};export class ToggleDockActionDelegate{handleAction(context,actionId){Components.dockController._toggleDockSide();return true;}}
  18. export class CloseButtonProvider{item(){return Components.dockController._closeButton;}}
  19. self.Components=self.Components||{};Components=Components||{};Components.DockController=DockController;Components.DockController.State=State;Components.DockController.Events=Events;Components.DockController.ToggleDockActionDelegate=ToggleDockActionDelegate;Components.DockController.CloseButtonProvider=CloseButtonProvider;Components.dockController;