{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-portal/src/client/viewnav.js"],"names":["pt","Preferences","Windows","ViewNav","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","setGlobalPosition","setExtent","innerHeight","getGlobalPosition","grid","x","gridSize","y","documentSquare","backgroundPos","addPt","scrollingElement","scrollLeft","scrollTop","backgroundPosition","backgroundImage","lively4url","id","querySelectorAll","forEach","remove","resetView","showError"],"mappings":"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","file":"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.getGlobalPosition(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.setGlobalPosition(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.getGlobalPosition(target)\n    var grid = documentGrid.grid\n    lively.setPosition(grid, pt( pos.x % grid.gridSize - 100, pos.y % grid.gridSize - 100) )\n    lively.setGlobalPosition(documentGrid.documentSquare, pos)\n    \n    \n    var backgroundPos = lively.getGlobalPosition(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.setGlobalPosition(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"]}