{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-drawio/src/components/widgets/lively-window.js"],"names":["Morph","pt","Grid","Preferences","Window","title","_title","val","render","isWindow","minimizedWindowWidth","minimizedWindowPadding","active","hasAttribute","isFixed","titleSpan","get","target","childNodes","window","maxButton","windowTitle","setExtent","extent","lively","dispatchEvent","CustomEvent","initialize","setup","created","isMinimized","isMaximized","displayResizeHandle","_attrObserver","MutationObserver","mutations","forEach","mutation","type","attributeChangedCallback","attributeName","oldValue","getAttribute","observe","attributes","setAttribute","attachedCallback","parentElement","document","body","classList","add","remove","attrName","newValue","reposition","bindEvents","addEventListener","evt","focus","onExtentChanged","onTitleMouseDown","onTitleDoubleClick","focusWithoutScroll","onMenuButtonClicked","onMinButtonClicked","onMaxButtonClicked","onDoubleClick","onCloseButtonClicked","onKeyUp","err","console","log","char","String","fromCharCode","keyCode","charCode","altKey","ctrlKey","preventDefault","dragging","icon","content","value","slice","innerHTML","pos","getGlobalPosition","setPosition","addPt","getScroll","minZIndex","allWindows","Array","from","querySelectorAll","filter","ea","hideTitlebar","style","display","showTitlebar","isFullscreen","thisIdx","indexOf","allWindowsButThis","splice","sort","a","b","parseInt","win","index","removeAttribute","length","bringMinimizedWindowsToFront","shiftKey","scrollingElement","scrollTop","scrollLeft","moveBy","scaleBy","getExtent","withY","innerHeight","toggleMinimize","stopPropagation","togglePined","toggleMaximize","positionBeforeMaximize","maxButtonI","querySelector","position","setGlobalPosition","x","y","width","height","overflow","bodyOverflow","bounds","getBoundingClientRect","left","top","bool","undefined","positionBeforeMinimize","minimizedPosition","getPosition","transformOrigin","transform","pointerEvents","isPinned","unsavedChanges","confirm","parentNode","removeChild","afterWindowClosed","Function","openContextMenu","offsetWindow","pageX","pageY","draggingStart","isNaN","Error","clientX","clientY","removeEventListener","documentElement","onWindowMouseMove","onWindowMouseUp","subPt","optSnapPosition","livelyMigrate","oldInstance","getAddOnRoot","shadowRoot","embedContentInParent","appendChild"],"mappings":"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","file":"lively-window.js","sourcesContent":["import Morph from 'src/components/widgets/lively-morph.js';\nimport { pt } from 'src/client/graphics.js';\nimport { Grid } from 'src/client/morphic/snapping.js';\nimport Preferences from 'src/client/preferences.js';\n\nexport default class Window extends Morph {\n\n  get title() {\n    return this._title\n  }\n  set title(val) {\n    this._title = val\n    this.render();\n  }\n  get isWindow() { return true }\n  get minimizedWindowWidth() { return 300 }\n  get minimizedWindowPadding() { return 10 }\n\n  get active() { return this.hasAttribute('active') }\n  get isFixed() { return this.hasAttribute('fixed') }\n  get titleSpan() { return this.get('.window-title span') }\n  get target() { return this.childNodes[0] }\n  get window() { return this.get('.window') }\n  get maxButton() { return this.get('.window-max') }\n  get windowTitle() { return this.get('.window-title') }\n\n  setExtent(extent) {\n    lively.setExtent(this, extent)\n    if (this.target)\n      this.target.dispatchEvent(new CustomEvent(\"extent-changed\"))\n  }\n\n  initialize() {\n    this.setup();\n\n    this.created = true;\n    this.render();\n\n    if (this.isMinimized() || this.isMaximized())\n      this.displayResizeHandle(false);\n\n    this._attrObserver = new MutationObserver(mutations => {\n\t    mutations.forEach(mutation => {\n        if(mutation.type == \"attributes\") {\n          this.attributeChangedCallback(\n            mutation.attributeName,\n            mutation.oldValue,\n            mutation.target.getAttribute(mutation.attributeName)\n          )\n        }\n      });\n    });\n    this._attrObserver.observe(this, { attributes: true });\n    \n    \n    this.setAttribute(\"tabindex\", 0)\n  }\n\n  attachedCallback() {\n    if (this.parentElement === document.body) {\n      this.classList.add(\"global\")\n    } else {\n      this.classList.remove(\"global\")\n    }\n  }\n\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    switch (attrName) {\n      case 'title':\n        this.render();\n        break;\n      case 'icon':\n        this.render();\n        break;\n      case 'fixed':\n        this.reposition();\n        break;\n      default:\n        //\n    }\n  }\n\n  bindEvents() {\n    try {\n      this.addEventListener('created', (evt) => this.focus());\n      this.addEventListener('extent-changed', (evt) => { this.onExtentChanged(); });\n      this.windowTitle.addEventListener('pointerdown', (evt) => { this.onTitleMouseDown(evt) });\n      this.windowTitle.addEventListener('dblclick', (evt) => { this.onTitleDoubleClick(evt) });\n      this.addEventListener('mousedown', (evt) => lively.focusWithoutScroll(this), true);\n      this.get('.window-menu').addEventListener('click', evt => { this.onMenuButtonClicked(evt); });\n      this.get('.window-min').addEventListener('click', evt => { this.onMinButtonClicked(evt); });\n      this.maxButton.addEventListener('click', evt => { this.onMaxButtonClicked(evt); });\n      this.addEventListener('dblclick', evt => { this.onDoubleClick(evt); });\n      this.get('.window-close').addEventListener('click', evt => { this.onCloseButtonClicked(evt); });\n      this.addEventListener('keyup', evt => { this.onKeyUp(evt); });\n    } catch (err) {\n      console.log(\"Error, binding events! Continue anyway!\", err)\n    }\n  }\n\n  onKeyUp(evt) {\n    var char = String.fromCharCode(evt.keyCode || evt.charCode);\n    if ((evt.altKey || evt.ctrlKey) && char == \"W\") {\n      this.onCloseButtonClicked(evt)\n      evt.preventDefault();\n    }\n  }\n\n  setup() {\n    this.dragging = false;\n    this.bindEvents();\n  }\n\n  /*\n   * Window methods\n   */\n  render() {\n    if (this.created) {\n      var icon = this.attributes['icon'];\n      var title = this.attributes['title'];\n      var content = '';\n      if (icon && title) {\n        content = icon.value + ' ' + title.value.slice(0, 50);\n      } else if (icon) {\n        content = icon.value;\n      } else if (title) {\n        content = title.value.slice(0, 50);\n      }\n      this.titleSpan.innerHTML = content;\n    }\n  }\n\n  reposition() {\n    let pos = lively.getGlobalPosition(this);\n    if (this.isFixed) {\n      lively.setPosition(this, pos);\n      this.classList.add('window-fixed');\n    } else {\n      lively.setPosition(this, pos.addPt(lively.getScroll()))\n      this.classList.remove('window-fixed')\n    }\n  }\n\n  get minZIndex() {\n    return 100\n  }\n\n  allWindows() {\n    return Window.allWindows()\n  }\n\n  static allWindows() {\n    return Array.from(document.querySelectorAll('*')).filter(ea => ea.isWindow);\n  }\n\n  hideTitlebar() {\n    this.get(\".window-titlebar\").style.display = \"none\"\n  }\n\n  showTitlebar() {\n    this.get(\".window-titlebar\").style.display = \"\"\n  }\n\n\n  isFullscreen() {\n    return this.get(\".window-titlebar\").style.display == \"none\"\n  }\n\n  focus(evt) {\n    let allWindows = this.allWindows();\n    let thisIdx = allWindows.indexOf(this);\n    let allWindowsButThis = allWindows;\n    allWindowsButThis.splice(thisIdx, 1);\n    allWindowsButThis.sort((a, b) => {\n      return parseInt(a.style['z-index']) - parseInt(b.style['z-index']);\n    });\n\n    allWindowsButThis.forEach((win, index) => {\n      win.style['z-index'] = this.minZIndex + index;\n      if (win.window)\n        win.window.classList.remove('focused');\n      win.removeAttribute('active');\n    });\n\n    if (this.isFullscreen()) {\n      // fullscreen and everything is in front of me...\n      this.style['z-index'] = 0;\n    } else {\n      this.style['z-index'] = this.minZIndex + allWindowsButThis.length;\n\n    }\n\n    this.window.classList.add('focused');\n    this.setAttribute('active', true);\n\n    // this.bringMinimizedWindowsToFront()\n\n    if (this.target && this.target.focus) this.target.focus()\n  }\n\n  bringMinimizedWindowsToFront() {\n    var allWindows = this.allWindows();\n    allWindows.filter(ea => ea.isMinimized()).forEach(ea => {\n      ea.style['z-index'] = this.minZIndex + allWindows.length + 1\n    });\n  }\n\n  onMinButtonClicked(evt) {\n    if (evt.shiftKey) {\n      document.scrollingElement.scrollTop = 0\n      document.scrollingElement.scrollLeft = 0\n      lively.moveBy(document.body, lively.getGlobalPosition(this).scaleBy(-1))\n      lively.setExtent(this, lively.getExtent(this).withY(window.innerHeight - 8))\n    } else {\n      this.toggleMinimize()\n    }\n    evt.stopPropagation()\n  }\n\n  onMaxButtonClicked(evt) {\n    if (evt.shiftKey) {\n      this.togglePined()\n    } else {\n      this.toggleMaximize()\n    }\n  }\n\n  toggleMaximize() {\n    if (this.positionBeforeMaximize) {\n      var maxButtonI = this.maxButton.querySelector('i')\n      maxButtonI.classList.remove('fa-compress')\n      maxButtonI.classList.add('fa-expand');\n\n      this.style.position = \"absolute\"\n      lively.setGlobalPosition(this,\n        pt(this.positionBeforeMaximize.x, this.positionBeforeMaximize.y)\n      );\n      this.setExtent(pt(this.positionBeforeMaximize.width, this.positionBeforeMaximize.height))\n      document.body.style.overflow = this.positionBeforeMaximize.bodyOverflow\n\n      this.positionBeforeMaximize = null\n    } else {\n      if (this.isMinimized()) {\n        return this.toggleMinimize()\n      }\n\n      var maxButtonI = this.maxButton.querySelector('i')\n      maxButtonI.classList.add('fa-compress')\n      maxButtonI.classList.remove('fa-expand');\n\n\n      var bounds = this.getBoundingClientRect()\n      this.positionBeforeMaximize = {\n        x: bounds.left,\n        y: bounds.top,\n        width: bounds.width,\n        height: bounds.height,\n        bodyOverflow: document.body.style.overflow\n      }\n\n      this.style.position = \"fixed\"\n      this.style.top = 0;\n      this.style.left = 0;\n      this.style.width = \"100%\";\n      this.style.height = \"100%\";\n      document.body.style.overflow = \"hidden\"\n      if (this.target)\n        this.target.dispatchEvent(new CustomEvent(\"extent-changed\"))\n    }\n    this.bringMinimizedWindowsToFront()\n    this.displayResizeHandle(!this.isMaximized())\n  }\n\n  displayResizeHandle(bool) {\n    if (bool === undefined) bool = true;\n    this.get('lively-resizer').style.display =\n      bool ? \"block\" : \"none\";\n  }\n\n  toggleMinimize() {\n    // this.style.display = this.isMinimized() ?\n    //   'block' : 'none';\n\n    // if(this.isMinimized())\n    //   this.removeAttribute('active');\n\n\n    var content = this.get('#window-content');\n    if (this.positionBeforeMinimize) {\n      this.minimizedPosition = lively.getPosition(this)\n\n\n      lively.setPosition(this, this.positionBeforeMinimize)\n      // this.setExtent(this.extentBeforeMinimize);  \n      content.style.display = \"block\";\n      this.displayResizeHandle(true)\n      this.positionBeforeMinimize = null\n\n      // this.classList.removed(\"minimized\")\n      this.style.transformOrigin = \"\"\n      this.style.transform = \"\"\n\n      content.style.pointerEvents = \"\"\n\n    } else {\n      if (this.isMaximized()) {\n        return this.toggleMaximize()\n      }\n      // this.style['z-index'] = 100\n      this.positionBeforeMinimize = lively.getPosition(this)\n      // this.extentBeforeMinimize = lively.getExtent(this)\n\n\n      if (this.minimizedPosition) {\n        lively.setPosition(this, this.minimizedPosition)\n      }\n\n      // this.style.position = \"fixed\";\n      // this.style.left = \"\";\n      // this.style.top = this.minimizedWindowPadding +\"px\";\n      // this.style.right = this.minimizedWindowPadding + \"px\";\n      // lively.setGlobalPosition()\n\n      this.style.transformOrigin = \"0 0\"\n      this.style.transform = \"scale(0.4)\"\n\n      content.style.pointerEvents = \"none\"\n\n      this.displayResizeHandle(false)\n\n    }\n    this.bringMinimizedWindowsToFront()\n  }\n\n  isMinimized() {\n    return !!this.positionBeforeMinimize\n  }\n\n  isMaximized() {\n    return !!this.positionBeforeMaximize;\n  }\n\n  togglePined() {\n    let isPinned = this.style.position == \"fixed\"\n    if (isPinned) {\n      this.removeAttribute('fixed');\n      this.style.position = \"absolute\" // does not seem to work with css? #Jens\n    } else {\n      this.setAttribute('fixed', '');\n      this.style.position = \"fixed\" // does not seem to work with css? #Jens\n    }\n  }\n\n  async onCloseButtonClicked(evt) {\n    if (this.target && this.target.unsavedChanges && this.target.unsavedChanges()) {\n      if (!await lively.confirm(\"Window contains unsaved changes, close anyway?\")) {\n        return\n      }\n    }\n    if (this.positionBeforeMaximize)\n      this.toggleMaximize()\n\n    this.parentNode.removeChild(this);\n    if (this.afterWindowClosed instanceof Function) {\n      this.afterWindowClosed();\n    }\n  }\n\n  onMenuButtonClicked(evt) {\n    lively.openContextMenu(document.body, evt, this.target);\n  }\n\n  onTitleMouseDown(evt) {\n    evt.preventDefault();\n    evt.stopPropagation();\n    lively.focusWithoutScroll(this)\n\n    if (this.positionBeforeMaximize) return; // no dragging when maximized\n\n    if (this.isFixed) {\n      let offsetWindow = this.getBoundingClientRect()\n      this.dragging = pt(evt.pageX - offsetWindow.left, evt.pageY - offsetWindow.top)\n\n    } else {\n      this.draggingStart = lively.getPosition(this)\n      if (isNaN(this.draggingStart.x) || isNaN(this.draggingStart.y)) {\n        throw new Error(\"Drag failed, because window Position is not a number\")\n      }\n      this.dragging = pt(evt.clientX, evt.clientY)\n    }\n    lively.removeEventListener('lively-window-drag', this.windowTitle)\n    \n    lively.addEventListener('lively-window-drag', document.documentElement, 'pointermove',\n      evt => this.onWindowMouseMove(evt), true);\n    lively.addEventListener('lively-window-drag', document.documentElement, 'pointerup',\n      evt => this.onWindowMouseUp(evt));\n    this.window.classList.add('dragging', true);\n  }\n\n  \n  \n  onWindowMouseMove(evt) {\n    // lively.showEvent(evt)\n\n    if (this.dragging) {\n      evt.preventDefault();\n      evt.stopPropagation();\n\n      if (this.isFixed) {\n        lively.setPosition(this, pt(evt.clientX, evt.clientY).subPt(this.dragging));\n      } else {\n        var pos = this.draggingStart.addPt(pt(evt.pageX, evt.pageY))\n          .subPt(this.dragging).subPt(lively.getScroll())\n        lively.setPosition(this, Grid.optSnapPosition(pos, evt))\n      }\n    }\n  }\n\n  onWindowMouseUp(evt) {\n    evt.preventDefault();\n    this.dragging = false;\n    // this.windowTitle.releasePointerCapture(evt.pointerId)\n    this.window.classList.remove('dragging');\n    this.window.classList.remove('resizing');\n    lively.removeEventListener('lively-window-drag',  document.documentElement)\n  }\n\n  onExtentChanged(evt) {\n    if (this.target) {\n      this.target.dispatchEvent(new CustomEvent(\"extent-changed\"));\n    }\n  }\n\n  onDoubleClick(evt) {\n    if (this.isMinimized()) {\n      this.toggleMinimize()\n    }\n  }\n\n  onTitleDoubleClick(evt) {\n    this.toggleMaximize()\n    evt.stopPropagation()\n  }\n\n  livelyMigrate(oldInstance) {\n    // this is crucial state\n    this.positionBeforeMaximize = oldInstance.positionBeforeMaximize;\n    this.positionBeforeMinimize = oldInstance.positionBeforeMinimize;\n  }\n\n  getAddOnRoot() {\n    return this.shadowRoot.querySelector(\"#window-global\")\n  }\n\n  /* embed content in parent and remove yourself */\n  embedContentInParent() {\n    var content = this.querySelector(\"*\")\n    var pos = lively.getPosition(this);\n    this.parentElement.appendChild(content);\n    lively.setPosition(content, pos);\n    this.remove()\n  }\n\n\n}\n"]}