{"version":3,"names":["ViewNav","pt","Preferences","Windows","constructor","target","enable","container","viewNav","disable","eventSource","parentElement","lively","addEventListener","e","onPointerDown","window","onResize","onMouseWheel","updateDocumentGrid","documentGrid","removeEventListener","toString","eventPos","evt","clientX","clientY","onPointerMoveZoom","pos","showPoint","ctrlKey","button","targetContainer","composedPath","find","ea","tagName","eventOffset","originalPos","getPosition","get","onPointerMove","onPointerUp","preventDefault","stopPropagation","delta","subPt","setPosition","undefined","fixScrollAfterNavigation","lastScaleTime","Date","now","document","body","scale","innerWidth","outerWidth","newPos","lastPoint","scaleBy","lastScale","offset","LastEvt","bounds","getBoundingClientRect","altKey","zoom","Number","getComputedStyle","wheelDelta","style","notify","lastFixedScroll","showDocumentGridItem","color","border","w","h","parent","div","createElement","isMetaNode","backgroundColor","width","height","livelyAcceptsDrop","setAttribute","pointerEvents","classList","add","appendChild","zoomed","force","hideDocumentGrid","showDocumentGrid","setClientPosition","setExtent","innerHeight","getClientPosition","grid","x","gridSize","y","documentSquare","backgroundPos","addPt","scrollingElement","scrollLeft","scrollTop","backgroundPosition","backgroundImage","lively4url","id","querySelectorAll","forEach","remove","resetView","showError"],"sources":["viewnav.js"],"sourcesContent":["import {pt} from './graphics.js';\nimport Preferences from './preferences.js';\nimport Windows from \"src/components/widgets/lively-window.js\"\n\n\n/*\n * Implements World (html body) panning!\n */\n\nexport default class ViewNav {\n  \n  constructor(target) {\n    this.target = target\n  }\n  \n  static enable(container) {\n    \n    if (container.viewNav) {\n       container.viewNav.disable()\n    }\n    container.viewNav = new ViewNav(container)\n    container.viewNav.enable()\n  }\n  \n  enable() {\n    this.eventSource =  this.target.parentElement\n    lively.addEventListener(\"ViewNav\", this.eventSource, \"pointerdown\", e => this.onPointerDown(e))\n\n    lively.addEventListener(\"ViewNav\", window, \"resize\", e => this.onResize(e))\n    lively.addEventListener(\"ViewNav\", this.eventSource, \"mousewheel\", e => this.onMouseWheel(e))\n    lively.addEventListener(\"ViewNav\", this.eventSource, \"scroll\", () => {\n      if (this.target) {\n        ViewNav.updateDocumentGrid(this.target.documentGrid, this.target)\n      }\n    })\n\n  }\n  \n  disable() {\n    lively.removeEventListener(\"ViewNav\", this.eventSource)\n    lively.removeEventListener(\"ViewNav\", window, \"resize\")\n    lively.removeEventListener(\"ViewNav\", this.eventSource, \"mousewheel\")\n    lively.removeEventListener(\"ViewNav\", this.eventSource, \"scroll\")\n  }\n  \n  toString() {\n    return \"[ViewNav on: \" + this.target + \"]\"\n  }\n  \n  eventPos(evt) {\n    return pt(evt.clientX, evt.clientY)\n  }\n\n  onPointerMoveZoom(evt) {\n    var pos = this.eventPos(evt)\n    lively.showPoint(pos)\n  }\n  \n  onPointerDown(evt) {\n    \n    if (!evt.ctrlKey || evt.button != 0)\n      return;\n    \n    this.targetContainer = evt.composedPath().find(ea => {\n      return ea.tagName == \"LIVELY-CONTAINER\"\n    })\n  \n    this.eventOffset = this.eventPos(evt)\n  \n    \n    \n    if (this.targetContainer) {\n      this.originalPos = lively.getPosition(this.targetContainer.get(\"#container-root\"))\n    } else {\n      this.originalPos = lively.getPosition(this.target)\n    }\n      \n    lively.addEventListener(\"ViewNav\", this.eventSource, \"pointermove\", e => this.onPointerMove(e))\n    lively.addEventListener(\"ViewNav\", this.eventSource, \"pointerup\", e => this.onPointerUp(e))\n    \n    evt.preventDefault()\n    evt.stopPropagation()\n  }\n  \n  onPointerMove(evt) {\n    var delta = this.eventOffset.subPt(this.eventPos(evt))\n    \n    if (this.targetContainer) {\n      lively.setPosition(this.targetContainer.get(\"#container-root\"), this.originalPos.subPt(delta))\n    } else {\n      lively.setPosition(this.target, this.originalPos.subPt(delta))\n      // lively.notify(\"pos \" + this.originalPos.subPt(delta) + \" \" + this.target)\n      ViewNav.updateDocumentGrid(this.target.documentGrid, this.target, undefined, true) \n    }  \n    evt.stopPropagation()\n  }\n  \n  onPointerUp(evt) {\n    lively.removeEventListener(\"ViewNav\", this.eventSource, \"pointermove\")\n    lively.removeEventListener(\"ViewNav\", this.eventSource, \"pointerup\")\n    this.fixScrollAfterNavigation()\n  }\n  \n  onResize(evt) {\n    if (!this.lastScaleTime || (Date.now() - this.lastScaleTime) > 1000) {\n      return // there was no previous scale with mouse wheel\n    }\n\n    if (this.target !== document.body) {\n      return    \n    }\n  \n    // this.lastPoint = pt(LastEvt.clientX, LastEvt.clientY)\n    var scale = window.innerWidth / window.outerWidth\n    // lively.notify(\"scale \" + (scale / this.lastScale))\n\n    var newPos = this.lastPoint.scaleBy(scale / this.lastScale)\n    var offset = this.lastPoint.subPt(newPos)\n    \n    \n      lively.setPosition(this.target, lively.getPosition(this.target).subPt(offset) )\n\n      // lively.showPoint(newPos).style.backgroundColor = \"green\"\n\n      ViewNav.updateDocumentGrid(this.target.documentGrid, this.target, true)\n      \n    \n    \n  }\n  \n  onMouseWheel(evt) {\n    window.LastEvt = evt\n    \n    \n    var bounds = this.target.getBoundingClientRect()\n    // lively.notify(\"wheel bounds \" + pt(bounds.left, bounds.top))\n\n    this.lastPoint = pt(evt.clientX, evt.clientY)\n    this.lastScale = window.innerWidth / window.outerWidth\n    this.lastScaleTime = Date.now()\n    \n    // lively.showPoint(this.lastPoint).style.backgroundColor = \"blue\"\n    // lively.showPoint(pt(LastEvt.pageX, LastEvt.pageY))\n    \n    if (evt.altKey) {\n      // finder granular zoom? using non standard feature\n      var zoom = Number(getComputedStyle(this.target).zoom) + (evt.wheelDelta / 1000 / 10)\n      this.target.style.zoom= zoom\n\n      // // zoom using CSS Transform\n      // var scale = this.target._scale || 1\n      // scale = scale + (evt.wheelDelta / 1000 / 5)\n      // this.target._scale = scale\n      // this.target.style.transform= \"scale(\" + scale + \")\"\n      \n      lively.notify(\"zoom \" + zoom)\n      evt.preventDefault()\n    }\n    \n  }\n\n  fixScrollAfterNavigation() {\n   \n    if(!this.target) return;\n   \n    // #DoesNotWork\n    // if ((this.target.scrollHeight > this.target.scrollTop + window.innerHeight) ||\n    //   (this.target.scrollWidth > this.target.scrollLeft + window.innerWith))\n    //   return; // don't fix when scrolled to bottom to let users pan into the void\n    \n    // console.log(\"fix scroll \")\n\n      \n    ViewNav.lastFixedScroll = Date.now()\n    \n    return // #Bug fixScrollAfterNavigation seems to make problems... \n    \n//     var pos = lively.getClientPosition(this.target).scaleBy(-1)\n//     var topLeft = pt(0,0).minPt(pos)\n//     Windows.allWindows().forEach(ea => {\n//       topLeft = topLeft.minPt(lively.getPosition(ea))\n//     })\n    \n//     lively.setPosition(this.target, topLeft.scaleBy(-1))\n    \n//     var delta = topLeft.scaleBy(-1).subPt(pos.scaleBy(-1))\n\n//     this.target.scrollLeft = delta.x \n//     this.target.scrollTop = delta.y\n  }\n\n\n  static showDocumentGridItem(pos, color, border, w, h, parent) {\n      var div = document.createElement(\"div\")\n      div.isMetaNode = true\n      lively.setPosition(div, pos)\n      div.style.backgroundColor = color\n      div.style.border = border\n      div.style.width = w  +\"px\"\n      div.style.height = h +\"px\"\n      div.livelyAcceptsDrop = function() {}\n      div.setAttribute(\"data-lively4-donotpersist\", \"all\")\n      div.style.pointerEvents = \"none\"\n      div.classList.add(\"document-grid\")\n      parent.appendChild(div)\n      return div\n  }\n  \n  static updateDocumentGrid(documentGrid, target, zoomed, force) {\n    \n    if (!Preferences.get(\"ShowDocumentGrid\")) {\n      this.hideDocumentGrid(target);\n      return;\n    }\n\n    // console.log(\"updateDocumentGrid(\" + zoomed + \", \" + force +\")\")\n    if (!force && this.lastFixedScroll && ((Date.now() - this.lastFixedScroll) < 1000)) {\n      // console.log(\"not update document grid \" + (Date.now() -this.lastFixedScroll))\n      return\n    }\n    // console.log(\"update document grid \"  + (Date.now() - this.lastFixedScroll) )\n\n    if (!documentGrid) return;\n    \n    if (zoomed) {\n      this.hideDocumentGrid(target)\n      this.showDocumentGrid(target)\n    }\n    \n    \n    lively.setClientPosition(documentGrid, pt(0,0))\n    // we make the grid a bit bigger than the actual visible browser window, so that we can scroll into the void...\n    lively.setExtent(documentGrid, pt(window.innerWidth + 200, window.innerHeight  + 200))\n    var pos = lively.getClientPosition(target)\n    var grid = documentGrid.grid\n    lively.setPosition(grid, pt( pos.x % grid.gridSize - 100, pos.y % grid.gridSize - 100) )\n    lively.setClientPosition(documentGrid.documentSquare, pos)\n    \n    \n    var backgroundPos = lively.getClientPosition(document.body).addPt(pt(document.scrollingElement.scrollLeft, document.scrollingElement.scrollTop))\n    document.body.style.backgroundPosition = \"\" + (backgroundPos.x % 100) +\"px \" + (backgroundPos.y % 100) + \"px\" \n  }\n  \n  static showDocumentGrid(target) {\n    if (!target) return;\n    \n    document.body.style.backgroundImage= `url(${lively4url}/src/client/grid.svg)`\n    // document.body.style.backgroundImage=\"url(' data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAC1UlEQVR4Ae2dYacyQRiGp4noQ0RERB8iov//R/oQ0YeIiEhRpOxr1rursocoudjrIWefPWv27r7OzJzZ3ZltzOfzLPwRs9ns6Ter1SpcLpenfSkZj8eh3W6X+7fbbdjv92VebAwGg9Dr9Yo0HA6HsNlsyrzY6Ha7YTgcFmm4Xq9huVyWebHRarXCZDIp0vznYrEI9/v9aV9KptNpaDab5f71eh1Op1OZFxuj0Sh0Op0iDbvdLv+UO/5v9Pv9kD5FpLJSma+RykplFpG0JY2vkbQljY0E5NX414PNf+dA/N2pPNM7DgjkHZd+eIxAfmj2O6cSyDsu/fAYgfzQ7HdO1ciy7M9/e98pwGO+64A15Lt+flyaQD628LsFCOS7fn5cWkyXQwyOA7Hq2hRHXv2U2GTBmAtEIDAHYHKsITAgjfP5nD3eXILpq50cL53AkNtkCQTmAExOTA8kGBwHYtXTIRx59VNiHwJjLhCBwByAybGG0ICkxzsNjgOO1DksciU2WQKBOQCTE9OUAIPjQKyan8GRVz8l9iEw5gIRCMwBmBxrCA1ImmBpcBxwpM5hkSuxyRIIzAGYnJgm5RscB2LVCgkcefVTYh8CYy4QgcAcgMmxhtCApCWODI4DjtQ5LHIlNlkCgTkAk2MNoQGpWv8PprFWcmLVgpG1cgD2ZW2yBAJzACbHGiIQmAMwOY3b7ZY9rvgM01c7OV46gSG3DxEIzAGYnFi1oj9MY63kxKpXNtTKAdiXtQ8RCMwBmBxriEBgDsDkNI7HY/b4ziWYvtrJcaQOQ24fIhCYAzA5Mb2nz+A4IBAOi1yJfYhAYA7A5FhDBAJzACYnPr7xGKatlnIcqcOw24cIBOYATI63cGlAfMiBRcQ+hMUjCEQgMAdgcqwhNCDeT2cRcaTO4mGnDuMhEBwQp0WzkEQXDoABYclRjeMQ2N+AQAQCcwAmJzpHnUXEkTqLR/gHE2yk2eQIeIIAAAAASUVORK5CYII=')\"\n    \n    var documentGrid = document.createElement(\"div\")\n  \tdocumentGrid.style[\"z-index\"] = -200\n\n    documentGrid.isMetaNode = true\n    documentGrid.id = \"DocumentGrid\"\n    documentGrid.classList.add(\"document-grid\")\n  \tdocumentGrid.setAttribute(\"data-lively4-donotpersist\", \"all\")\n  \t// documentGrid.style.overflow = \"hidden\"\n  \tdocumentGrid.style.pointerEvents = \"none\"\n  \tdocumentGrid.livelyAcceptsDrop = function() {}\n\n    target.documentGrid = documentGrid\n    target.appendChild(documentGrid)\n    \n    var width = window.innerWidth;\n    var height = window.innerHeight\n\n    let gridSize = 100,\n      w = width + 2* gridSize,\n      h =  height + 2 *gridSize\n      \n    let grid = document.createElement(\"div\")\n    grid.gridSize = gridSize\n    grid.isMetaNode = true\n    grid.style.pointerEvents = \"none\"\n    grid.livelyAcceptsDrop = function() {}\n    \n    lively.setExtent(documentGrid, pt(width , height))\n\n    documentGrid.documentSquare = this.showDocumentGridItem(pt(0, 0), \n          \"rgba(250,250,240,0.5)\", \"0.5px solid rgb(50,50,50)\", 4000, 2000, documentGrid )\n\n    documentGrid.documentSquare.livelyAcceptsDrop = function() {}\n\n    documentGrid.grid = grid\n    documentGrid.appendChild(grid)\n    lively.setPosition(grid, pt(0,0))\n    \n    // for (var k=0; k < w; k += gridSize) {\n    //   for (var l=0; l < h; l += gridSize) {\n    //     this.showDocumentGridItem(pt(k, l), \n    //       undefined, \"0.2px dashed rgb(190,190,190)\", gridSize, gridSize, grid)\n    //   }  \n    // }\n    ViewNav.updateDocumentGrid(target.documentGrid, target)\n  }\n  \n  static hideDocumentGrid(target) {\n    if (!target) return;\n    \n    target.querySelectorAll(\".document-grid\").forEach(ea => {\n      ea.remove()\n    })\n  }\n  \n  static resetView() {\n    lively.setClientPosition(document.body, pt(0,0));\n  }\n} \n\nif (window.lively) {\n  try {\n  ViewNav.enable(document.body)\n  ViewNav.hideDocumentGrid(document.body)\n  ViewNav.showDocumentGrid(document.body)\n  } catch(e) {\n    lively.showError(e)\n  }\n}\n\n\n"],"mappings":"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"}