{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-function-completion/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","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","preventDefault","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":";;;;;;;;;AAAQA,Q,eAAAA,E;;AACDC,iB;;AACAC,a;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGP;;;;AAIe,YAAMC,OAAN,CAAc;;AAE3BC,oBAAYC,MAAZ,EAAoB;AAClB,eAAKA,MAAL,GAAcA,MAAd;AACD;;AAED,eAAOC,MAAP,CAAcC,SAAd,EAAyB;;AAEvB,cAAIA,UAAUC,OAAd,EAAuB;AACpBD,sBAAUC,OAAV,CAAkBC,OAAlB;AACF;AACDF,oBAAUC,OAAV,GAAoB,IAAIL,OAAJ,CAAYI,SAAZ,CAApB;AACAA,oBAAUC,OAAV,CAAkBF,MAAlB;AACD;;AAEDA,iBAAS;AACP,eAAKI,WAAL,GAAoB,KAAKL,MAAL,CAAYM,aAAhC;AACAC,iBAAOC,gBAAP,CAAwB,SAAxB,EAAmC,KAAKH,WAAxC,EAAqD,aAArD,EAAoEI,KAAK,KAAKC,aAAL,CAAmBD,CAAnB,CAAzE;;AAEAF,iBAAOC,gBAAP,CAAwB,SAAxB,EAAmCG,MAAnC,EAA2C,QAA3C,EAAqDF,KAAK,KAAKG,QAAL,CAAcH,CAAd,CAA1D;AACAF,iBAAOC,gBAAP,CAAwB,SAAxB,EAAmC,KAAKH,WAAxC,EAAqD,YAArD,EAAmEI,KAAK,KAAKI,YAAL,CAAkBJ,CAAlB,CAAxE;AACAF,iBAAOC,gBAAP,CAAwB,SAAxB,EAAmC,KAAKH,WAAxC,EAAqD,QAArD,EAA+D,MAAM;AACnE,gBAAI,KAAKL,MAAT,EAAiB;AACfF,sBAAQgB,kBAAR,CAA2B,KAAKd,MAAL,CAAYe,YAAvC,EAAqD,KAAKf,MAA1D;AACD;AACF,WAJD;AAMD;;AAEDI,kBAAU;AACRG,iBAAOS,mBAAP,CAA2B,SAA3B,EAAsC,KAAKX,WAA3C;AACAE,iBAAOS,mBAAP,CAA2B,SAA3B,EAAsCL,MAAtC,EAA8C,QAA9C;AACAJ,iBAAOS,mBAAP,CAA2B,SAA3B,EAAsC,KAAKX,WAA3C,EAAwD,YAAxD;AACAE,iBAAOS,mBAAP,CAA2B,SAA3B,EAAsC,KAAKX,WAA3C,EAAwD,QAAxD;AACD;;AAEDY,mBAAW;AACT,iBAAO,kBAAkB,KAAKjB,MAAvB,GAAgC,GAAvC;AACD;;AAEDkB,iBAASC,GAAT,EAAc;AACZ,iBAAOxB,GAAGwB,IAAIC,OAAP,EAAgBD,IAAIE,OAApB,CAAP;AACD;;AAEDC,0BAAkBH,GAAlB,EAAuB;AACrB,cAAII,MAAM,KAAKL,QAAL,CAAcC,GAAd,CAAV;AACAZ,iBAAOiB,SAAP,CAAiBD,GAAjB;AACD;;AAEDb,sBAAcS,GAAd,EAAmB;AACjB,cAAI,CAACA,IAAIM,OAAL,IAAgBN,IAAIO,MAAJ,IAAc,CAAlC,EACE;;AAEF,eAAKC,eAAL,GAAuBR,IAAIS,YAAJ,GAAmBC,IAAnB,CAAwBC,MAAM;AACnD,mBAAOA,GAAGC,OAAH,IAAc,kBAArB;AACD,WAFsB,CAAvB;;AAIA,eAAKC,WAAL,GAAmB,KAAKd,QAAL,CAAcC,GAAd,CAAnB;;AAIA,cAAI,KAAKQ,eAAT,EAA0B;AACxB,iBAAKM,WAAL,GAAmB1B,OAAO2B,WAAP,CAAmB,KAAKP,eAAL,CAAqBQ,GAArB,CAAyB,iBAAzB,CAAnB,CAAnB;AACD,WAFD,MAEO;AACL,iBAAKF,WAAL,GAAmB1B,OAAO2B,WAAP,CAAmB,KAAKlC,MAAxB,CAAnB;AACD;;AAEDO,iBAAOC,gBAAP,CAAwB,SAAxB,EAAmC,KAAKH,WAAxC,EAAqD,aAArD,EAAoEI,KAAK,KAAK2B,aAAL,CAAmB3B,CAAnB,CAAzE;AACAF,iBAAOC,gBAAP,CAAwB,SAAxB,EAAmC,KAAKH,WAAxC,EAAqD,WAArD,EAAkEI,KAAK,KAAK4B,WAAL,CAAiB5B,CAAjB,CAAvE;AACAU,cAAImB,eAAJ;AACD;;AAEDF,sBAAcjB,GAAd,EAAmB;AACjB,cAAIoB,QAAQ,KAAKP,WAAL,CAAiBQ,KAAjB,CAAuB,KAAKtB,QAAL,CAAcC,GAAd,CAAvB,CAAZ;;AAEA,cAAI,KAAKQ,eAAT,EAA0B;AACxBpB,mBAAOkC,WAAP,CAAmB,KAAKd,eAAL,CAAqBQ,GAArB,CAAyB,iBAAzB,CAAnB,EAAgE,KAAKF,WAAL,CAAiBO,KAAjB,CAAuBD,KAAvB,CAAhE;AACD,WAFD,MAEO;AACLhC,mBAAOkC,WAAP,CAAmB,KAAKzC,MAAxB,EAAgC,KAAKiC,WAAL,CAAiBO,KAAjB,CAAuBD,KAAvB;AAChC;AADA,cAEAzC,QAAQgB,kBAAR,CAA2B,KAAKd,MAAL,CAAYe,YAAvC,EAAqD,KAAKf,MAA1D,EAAkE0C,SAAlE,EAA6E,IAA7E;AACD;AACDvB,cAAImB,eAAJ;AACD;;AAEDD,oBAAYlB,GAAZ,EAAiB;AACfZ,iBAAOS,mBAAP,CAA2B,SAA3B,EAAsC,KAAKX,WAA3C,EAAwD,aAAxD;AACAE,iBAAOS,mBAAP,CAA2B,SAA3B,EAAsC,KAAKX,WAA3C,EAAwD,WAAxD;AACA,eAAKsC,wBAAL;AACD;;AAED/B,iBAASO,GAAT,EAAc;AACZ,cAAI,CAAC,KAAKyB,aAAN,IAAwBC,KAAKC,GAAL,KAAa,KAAKF,aAAnB,GAAoC,IAA/D,EAAqE;AACnE,mBADmE,CAC5D;AACR;;AAED,cAAI,KAAK5C,MAAL,KAAgB+C,SAASC,IAA7B,EAAmC;AACjC;AACD;;AAED;AACA,cAAIC,QAAQtC,OAAOuC,UAAP,GAAoBvC,OAAOwC,UAAvC;AACA;;AAEA,cAAIC,SAAS,KAAKC,SAAL,CAAeC,OAAf,CAAuBL,QAAQ,KAAKM,SAApC,CAAb;AACA,cAAIC,SAAS,KAAKH,SAAL,CAAeb,KAAf,CAAqBY,MAArB,CAAb;;AAGE7C,iBAAOkC,WAAP,CAAmB,KAAKzC,MAAxB,EAAgCO,OAAO2B,WAAP,CAAmB,KAAKlC,MAAxB,EAAgCwC,KAAhC,CAAsCgB,MAAtC;;AAEhC;;AAFA,YAIA1D,QAAQgB,kBAAR,CAA2B,KAAKd,MAAL,CAAYe,YAAvC,EAAqD,KAAKf,MAA1D,EAAkE,IAAlE;AAIH;;AAEDa,qBAAaM,GAAb,EAAkB;AAChBR,iBAAO8C,OAAP,GAAiBtC,GAAjB;;AAGA,cAAIuC,SAAS,KAAK1D,MAAL,CAAY2D;AACzB;;AADa,YAAb,CAGA,KAAKN,SAAL,GAAiB1D,GAAGwB,IAAIC,OAAP,EAAgBD,IAAIE,OAApB,CAAjB;AACA,eAAKkC,SAAL,GAAiB5C,OAAOuC,UAAP,GAAoBvC,OAAOwC,UAA5C;AACA,eAAKP,aAAL,GAAqBC,KAAKC;;AAE1B;AACA;;AAHqB,YAArB,CAKA,IAAI3B,IAAIyC,MAAR,EAAgB;AACd;AACA,gBAAIC,OAAOC,OAAOC,iBAAiB,KAAK/D,MAAtB,EAA8B6D,IAArC,IAA8C1C,IAAI6C,UAAJ,GAAiB,IAAjB,GAAwB,EAAjF;AACA,iBAAKhE,MAAL,CAAYiE,KAAZ,CAAkBJ,IAAlB,GAAwBA,IAAxB;;AAEA;AACA;AACA;AACA;AACA;;AAEAtD,mBAAO2D,MAAP,CAAc,UAAUL,IAAxB;AACA1C,gBAAIgD,cAAJ;AACD;AAEF;;AAEDxB,mCAA2B;;AAEzB,cAAG,CAAC,KAAK3C,MAAT,EAAiB;;AAEjB;AACA;AACA;AACA;;AAEA;;;AAGAF,kBAAQsE,eAAR,GAA0BvB,KAAKC,GAAL,EAA1B;;AAEA,iBAdyB,CAclB;;AAEX;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACG;;AAGD,eAAOuB,oBAAP,CAA4B9C,GAA5B,EAAiC+C,KAAjC,EAAwCC,MAAxC,EAAgDC,CAAhD,EAAmDC,CAAnD,EAAsDC,MAAtD,EAA8D;AAC1D,cAAIC,yBAAM5B,SAAS6B,aAAT,CAAuB,KAAvB,CAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAJ;AACAD,cAAIE,UAAJ,GAAiB,IAAjB;AACAtE,iBAAOkC,WAAP,CAAmBkC,GAAnB,EAAwBpD,GAAxB;AACAoD,cAAIV,KAAJ,CAAUa,eAAV,GAA4BR,KAA5B;AACAK,cAAIV,KAAJ,CAAUM,MAAV,GAAmBA,MAAnB;AACAI,cAAIV,KAAJ,CAAUc,KAAV,GAAkBP,IAAI,IAAtB;AACAG,cAAIV,KAAJ,CAAUe,MAAV,GAAmBP,IAAG,IAAtB;AACAE,cAAIM,iBAAJ,GAAwB,YAAW,CAAE,CAArC;AACAN,cAAIO,YAAJ,CAAiB,2BAAjB,EAA8C,KAA9C;AACAP,cAAIV,KAAJ,CAAUkB,aAAV,GAA0B,MAA1B;AACAR,cAAIS,SAAJ,CAAcC,GAAd,CAAkB,eAAlB;AACAX,iBAAOY,WAAP,CAAmBX,GAAnB;AACA,iBAAOA,GAAP;AACH;;AAED,eAAO7D,kBAAP,CAA0BC,YAA1B,EAAwCf,MAAxC,EAAgDuF,MAAhD,EAAwDC,KAAxD,EAA+D;;AAE7D,cAAI,CAAC5F,YAAYuC,GAAZ,CAAgB,kBAAhB,CAAL,EAA0C;AACxC,iBAAKsD,gBAAL,CAAsBzF,MAAtB;AACA;AACD;;AAED;AACA,cAAI,CAACwF,KAAD,IAAU,KAAKpB,eAAf,IAAoCvB,KAAKC,GAAL,KAAa,KAAKsB,eAAnB,GAAsC,IAA7E,EAAoF;AAClF;AACA;AACD;AACD;;AAEA,cAAI,CAACrD,YAAL,EAAmB;;AAEnB,cAAIwE,MAAJ,EAAY;AACV,iBAAKE,gBAAL,CAAsBzF,MAAtB;AACA,iBAAK0F,gBAAL,CAAsB1F,MAAtB;AACD;;AAGDO,iBAAOoF,iBAAP,CAAyB5E,YAAzB,EAAuCpB,GAAG,CAAH,EAAK,CAAL;AACvC;AADA,YAEAY,OAAOqF,SAAP,CAAiB7E,YAAjB,EAA+BpB,GAAGgB,OAAOuC,UAAP,GAAoB,GAAvB,EAA4BvC,OAAOkF,WAAP,GAAsB,GAAlD,CAA/B;AACA,cAAItE,MAAMhB,OAAOuF,iBAAP,CAAyB9F,MAAzB,CAAV;AACA,cAAI+F,OAAOhF,aAAagF,IAAxB;AACAxF,iBAAOkC,WAAP,CAAmBsD,IAAnB,EAAyBpG,GAAI4B,IAAIyE,CAAJ,GAAQD,KAAKE,QAAb,GAAwB,GAA5B,EAAiC1E,IAAI2E,CAAJ,GAAQH,KAAKE,QAAb,GAAwB,GAAzD,CAAzB;AACA1F,iBAAOoF,iBAAP,CAAyB5E,aAAaoF,cAAtC,EAAsD5E,GAAtD;;AAGA,cAAI6E,gBAAgB7F,OAAOuF,iBAAP,CAAyB/C,SAASC,IAAlC,EAAwCqD,KAAxC,CAA8C1G,GAAGoD,SAASuD,gBAAT,CAA0BC,UAA7B,EAAyCxD,SAASuD,gBAAT,CAA0BE,SAAnE,CAA9C,CAApB;AACAzD,mBAASC,IAAT,CAAciB,KAAd,CAAoBwC,kBAApB,GAAyC,KAAML,cAAcJ,CAAd,GAAkB,GAAxB,GAA8B,KAA9B,GAAuCI,cAAcF,CAAd,GAAkB,GAAzD,GAAgE,IAAzG;AACD;;AAED,eAAOR,gBAAP,CAAwB1F,MAAxB,EAAgC;AAC9B,cAAI,CAACA,MAAL,EAAa;;AAEb+C,mBAASC,IAAT,CAAciB,KAAd,CAAoByC,eAApB,GAAsC,OAAMC,UAAW,uBAAvD;AACA;;AAEA,cAAI5F,kCAAegC,SAAS6B,aAAT,CAAuB,KAAvB,CAAf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAJ;AACD7D,uBAAakD,KAAb,CAAmB,SAAnB,IAAgC,CAAC,GAAjC;;AAEClD,uBAAa8D,UAAb,GAA0B,IAA1B;AACA9D,uBAAa6F,EAAb,GAAkB,cAAlB;AACA7F,uBAAaqE,SAAb,CAAuBC,GAAvB,CAA2B,eAA3B;AACDtE,uBAAamE,YAAb,CAA0B,2BAA1B,EAAuD;AACvD;AADA,YAEAnE,aAAakD,KAAb,CAAmBkB,aAAnB,GAAmC,MAAnC;AACApE,uBAAakE,iBAAb,GAAiC,YAAW,CAAE,CAA9C;;AAECjF,iBAAOe,YAAP,GAAsBA,YAAtB;AACAf,iBAAOsF,WAAP,CAAmBvE,YAAnB;;AAEA,cAAIgE,QAAQpE,OAAOuC,UAAnB;AACA,cAAI8B,SAASrE,OAAOkF,WAApB;;AAEA,cAAII,WAAW,GAAf;AAAA,cACEzB,IAAIO,QAAQ,IAAGkB,QADjB;AAAA,cAEExB,IAAKO,SAAS,IAAGiB,QAFnB;;AAIA,cAAIF,0BAAOhD,SAAS6B,aAAT,CAAuB,KAAvB,CAAP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAJ;AACAmB,eAAKE,QAAL,GAAgBA,QAAhB;AACAF,eAAKlB,UAAL,GAAkB,IAAlB;AACAkB,eAAK9B,KAAL,CAAWkB,aAAX,GAA2B,MAA3B;AACAY,eAAKd,iBAAL,GAAyB,YAAW,CAAE,CAAtC;;AAEA1E,iBAAOqF,SAAP,CAAiB7E,YAAjB,EAA+BpB,GAAGoF,KAAH,EAAWC,MAAX,CAA/B;;AAEAjE,uBAAaoF,cAAb,GAA8B,KAAK9B,oBAAL,CAA0B1E,GAAG,CAAH,EAAM,CAAN,CAA1B,EACxB,uBADwB,EACC,2BADD,EAC8B,IAD9B,EACoC,IADpC,EAC0CoB,YAD1C,CAA9B;;AAGAA,uBAAaoF,cAAb,CAA4BlB,iBAA5B,GAAgD,YAAW,CAAE,CAA7D;;AAEAlE,uBAAagF,IAAb,GAAoBA,IAApB;AACAhF,uBAAauE,WAAb,CAAyBS,IAAzB;AACAxF,iBAAOkC,WAAP,CAAmBsD,IAAnB,EAAyBpG,GAAG,CAAH,EAAK,CAAL;;AAEzB;AACA;AACA;AACA;AACA;AACA;AAPA,YAQAG,QAAQgB,kBAAR,CAA2Bd,OAAOe,YAAlC,EAAgDf,MAAhD;AACD;;AAED,eAAOyF,gBAAP,CAAwBzF,MAAxB,EAAgC;AAC9B,cAAI,CAACA,MAAL,EAAa;;AAEbA,iBAAO6G,gBAAP,CAAwB,gBAAxB,EAA0CC,OAA1C,CAAkDhF,MAAM;AACtDA,eAAGiF,MAAH;AACD,WAFD;AAGD;;AAED,eAAOC,SAAP,GAAmB;AACjBzG,iBAAOoF,iBAAP,CAAyB5C,SAASC,IAAlC,EAAwCrD,GAAG,CAAH,EAAK,CAAL,CAAxC;AACD;AAtS0B;;yBAARG,O;;;;;;;;;;;;;;;;AAySrB,UAAIa,OAAOJ,MAAX,EAAmB;AACjB,YAAI;AACJT,kBAAQG,MAAR,CAAe8C,SAASC,IAAxB;AACAlD,kBAAQ2F,gBAAR,CAAyB1C,SAASC,IAAlC;AACAlD,kBAAQ4F,gBAAR,CAAyB3C,SAASC,IAAlC;AACC,SAJD,CAIE,OAAMvC,CAAN,EAAS;AACTF,iBAAO0G,SAAP,CAAiBxG,CAAjB;AACD;AACF","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    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    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"]}