{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-leo/src/components/widgets/lively-window.js"],"names":["Morph","pt","Grid","Preferences","setPointToAttribute","getPointFromAttribute","element","attrX","attrY","x","getAttribute","y","parseFloat","p","setAttribute","Window","allWindows","Array","from","document","querySelectorAll","filter","ea","isWindow","title","_title","val","render","minimizedWindowWidth","minimizedWindowPadding","active","hasAttribute","isFixed","titleSpan","get","target","childNodes","window","maxButton","windowTitle","minZIndex","setExtent","extent","lively","dispatchEvent","CustomEvent","initialize","setup","created","isMinimized","isMaximized","displayResizeHandle","_attrObserver","MutationObserver","mutations","forEach","mutation","type","attributeChangedCallback","attributeName","oldValue","observe","attributes","attachedCallback","parentElement","body","classList","add","remove","attrName","newValue","reposition","bindEvents","addEventListener","evt","focus","onExtentChanged","onTitleMouseDown","onTitleDoubleClick","focusWithoutScroll","onMenuButtonClicked","onMinButtonClicked","onMaxButtonClicked","onDoubleClick","onCloseButtonClicked","onKeyUp","err","console","log","dragging","isFullscreen","style","display","contains","icon","content","value","slice","innerHTML","pos","getGlobalPosition","setPosition","addPt","getScroll","hideTitlebar","showTitlebar","thisIdx","indexOf","allWindowsButThis","splice","sort","a","b","parseInt","win","index","removeAttribute","length","bringMinimizedWindowsToFront","getAddOnRoot","shadowRoot","querySelector","embedContentInParent","getPosition","appendChild","detachedCallback","overflow","toggleMaximize","maxButtonI","restoreExtentAndPosition","toggleMinimize","storeExtentAndPosition","position","top","left","width","height","bool","undefined","getAllSubmorphs","getExtent","pointerEvents","minTitle","livelyMinimizedTitle","titleExtent","togglePined","isPinned","shiftKey","scrollingElement","scrollTop","scrollLeft","moveBy","scaleBy","withY","innerHeight","stopPropagation","openContextMenu","preventDefault","positionBeforeMaximize","offsetWindow","getBoundingClientRect","pageX","pageY","draggingStart","isNaN","Error","clientX","clientY","removeEventListener","documentElement","onWindowMouseMove","onWindowMouseUp","unsavedChanges","confirm","parentNode","removeChild","afterWindowClosed","Function","last","first","subPt","optSnapPosition","char","String","fromCharCode","keyCode","charCode","altKey","livelyMigrate","oldInstance"],"mappings":"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","file":"lively-window.js","sourcesContent":["/*MD # Window\n\n![](lively-window.png){height=200}\n\nMD*/\n\n\nimport 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\n// #TODO extract\nfunction getPointFromAttribute(element, attrX, attrY) {\n  var x = element.getAttribute(attrX)\n  var y = element.getAttribute(attrY)\n  return pt(parseFloat(x), parseFloat(y))\n}\n\nfunction setPointToAttribute(element, attrX, attrY,  p) {\n  element.setAttribute(attrX, p.x)\n  element.setAttribute(attrY, p.y)\n}\n\nexport default class Window extends Morph {\n  \n  static allWindows() {\n    return Array.from(document.querySelectorAll('*')).filter(ea => ea.isWindow);\n  }\n  /*MD ## Getter / Setter MD*/\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  get minZIndex() {\n    return 100\n  }\n  \n  setExtent(extent) {\n    lively.setExtent(this, extent)\n    if (this.target)\n      this.target.dispatchEvent(new CustomEvent(\"extent-changed\"))\n  }\n  /*MD ## Setup MD*/\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    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.get('.window-unmin').addEventListener('click', evt => { this.onMinButtonClicked(evt); });\n\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\n\n  setup() {\n    this.dragging = false;\n    this.bindEvents();\n  }\n\n \n  /*MD ## Window MD*/\n  \n  isFullscreen() {\n    return this.get(\".window-titlebar\").style.display == \"none\"\n  }\n\n  isMinimized() {\n    return this.classList.contains(\"minimized\")\n  }\n\n  isMaximized() {\n    return this.classList.contains(\"maximized\")\n  }\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\n  allWindows() {\n    return Window.allWindows()\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  focus() {\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  \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  detachedCallback() {\n    if (this.isMaximized()) {\n      document.body.style.overflow = this.getAttribute(\"prev-overflow\")\n    }\n  }\n  \n  /*MD ## Maximize/Minimize MD*/\n\n  // #important\n  toggleMaximize() {\n    var content = this.get('#window-content');\n    var maxButtonI = this.maxButton.querySelector('i')\n    if (this.isMaximized()) {\n      this.restoreExtentAndPosition()\n      \n      maxButtonI.classList.remove('fa-compress')\n      maxButtonI.classList.add('fa-expand');\n      \n      content.style.display = \"block\";\n      document.body.style.overflow = this.getAttribute(\"prev-overflow\")\n      this.classList.remove(\"maximized\")\n    } else {\n      if (this.isMinimized()) {\n        return this.toggleMinimize()\n      }\n\n      maxButtonI.classList.add('fa-compress')\n      maxButtonI.classList.remove('fa-expand');\n\n      \n      this.storeExtentAndPosition()\n      this.setAttribute(\"prev-overflow\", document.body.style.overflow)\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.classList.add(\"maximized\")\n    }\n    this.bringMinimizedWindowsToFront()\n    this.displayResizeHandle(!this.isMaximized())\n  }\n\n  displayResizeHandle(bool) {\n    if (bool === undefined) bool = true;\n    this.getAllSubmorphs('lively-resizer').forEach(ea => {\n      ea.style.display = bool ? \"block\" : \"none\";\n    })\n  }\n  \n  \n  storeExtentAndPosition() {\n    setPointToAttribute(this, \"prev-left\", \"prev-top\", lively.getPosition(this))\n    setPointToAttribute(this, \"prev-width\", \"prev-height\", lively.getExtent(this))\n  }\n  \n\n  restoreExtentAndPosition() {\n    lively.setPosition(this, getPointFromAttribute(this, \"prev-left\", \"prev-top\"))\n    lively.setExtent(this, getPointFromAttribute(this, \"prev-width\", \"prev-height\"))            \n  }\n\n  // #important\n  toggleMinimize() {\n\n    var content = this.get('#window-content');\n    if (this.classList.contains(\"minimized\")) {\n      \n      // min -> normal\n      \n      this.displayResizeHandle(true)\n      \n      setPointToAttribute(this, \"prev-min-left\", \"prev-min-top\", lively.getPosition(this))\n      this.restoreExtentAndPosition()\n      \n      this.classList.remove(\"minimized\")\n\n      content.style.display = \"block\";\n      // restore title\n      this.setAttribute(\"title\", this.getAttribute(\"prev-title\"))\n      \n      this.target.style.display = \"\"\n      content.style.pointerEvents = \"\"\n\n    } else {\n      if (this.isMaximized()) {\n        return this.toggleMaximize()\n      }\n      \n      // normal -> min\n      \n      this.storeExtentAndPosition()\n      lively.setPosition(this, getPointFromAttribute(this, \"prev-min-left\", \"prev-min-top\"))\n      \n      this.setAttribute(\"prev-title\", this.getAttribute(\"title\"))\n\n      // update title\n      var minTitle = this.getAttribute(\"title\") + \" (minimized)\"      \n      if (this.target.livelyMinimizedTitle) {\n        minTitle = this.target.livelyMinimizedTitle()\n      }\n      this.setAttribute(\"title\",  minTitle )\n      var titleExtent = lively.getExtent(this.get(\".window-titlebar\"))\n      lively.setExtent(this, pt(400, titleExtent.y + 4))\n      \n      this.classList.add(\"minimized\")\n      this.target.style.display = \"none\"\n      content.style.pointerEvents = \"none\"\n      this.displayResizeHandle(false)\n    }\n    this.bringMinimizedWindowsToFront()\n  }\n  \n\n\n  \n  // #depricated #notused \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  /*MD ## Events MD*/\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  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  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    var last = this.allWindows().first\n    if (last) {\n      lively.focusWithoutScroll(last)\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  \n  onKeyUp(evt) {\n    var char = String.fromCharCode(evt.keyCode || evt.charCode);\n    if ((evt.altKey) && char == \"W\") { // is this  \"evt.ctrlKey\" used unter Mac? , it makes problems under Windows\n      this.onCloseButtonClicked(evt)\n      evt.preventDefault();\n    }\n  }\n  \n  /*MD ## Hooks MD*/\n  \n  livelyMigrate(oldInstance) {\n    // this is crucial state\n  }\n\n\n}\n"]}