{"version":3,"names":["Grid","Snapping","__SystemJSRewritingHack","_export","default","setters","_srcClientGraphicsJs","pt","_srcClientStringsJs","Strings","execute","_recorder_","_src_client_morphic_snapping_js","Object","defineProperty","get","set","thisIsVererySecretVariableName","enumerable","configurable","snapAllTopLevelContent","gridSize","lively","preferences","Array","from","document","body","querySelectorAll","filter","ea","classList","contains","isWindow","forEach","pos","getPosition","setPosition","snap","x","y","value","snapSize","undefined","rest","Math","abs","snapPt","p","optSnapPosition","evt","altKey","snapTo","target","snapping","constructor","helpers","snapDistance","padding","clearHelpers","snapBounds","corner","match","snapToExtent","all","_all","parentElement","showHelpers","snapped","isHorizontal","keys","concat","map","eaElement","line","offset","getClientPosition","subPt","globalY","Number","minLeft","min","getClientBounds","left","maxRight","max","right","globalX","minTop","top","maxBottom","bottom","showPath","remove","cornerOrSide","leftRightTopOrBottom","otherLeftRightTopOrBottom","_","groupBy","round","getBounds","oldBounds","old","sortBy","delta","deltaPt","newPos","addPt","rounded","newBounds","prefixSelector","setBounds","moveBy"],"sources":["snapping.js"],"sourcesContent":["import {pt} from \"src/client/graphics.js\"\nimport Strings from 'src/client/strings.js';\n\nexport class Grid {\n  static snapAllTopLevelContent() {\n    var  gridSize = lively.preferences.get(\"GridSize\") || 100;\n    Array.from(document.body.querySelectorAll(\":scope > *\"))\n      .filter(ea => ea.classList.contains(\"lively-content\") || ea.isWindow)\n      .forEach( ea => {\n        var pos = lively.getPosition(ea)\n        lively.setPosition(ea, \n          pt(Grid.snap(pos.x, gridSize, gridSize / 2), Grid.snap(pos.y,  gridSize, gridSize / 2)))\n      })\n  }\n  \n  static snap(value, gridSize, snapSize) {\n    if (gridSize === undefined)\n      gridSize = lively.preferences.get(\"GridSize\")\n    if (snapSize === undefined)\n      snapSize = lively.preferences.get(\"SnapSize\")\n  \n  \n    // #TODO make treatment of negative numbers easier while keping the [tests](test/graphics-test.js) green\n    var rest = Math.abs(value % gridSize)\n    if (value >  0 ) {\n      if (Math.abs(gridSize - Math.abs(rest)) < snapSize) \n         return value - rest + gridSize\n      if (rest < snapSize) \n        return value - rest;\n    } else {\n      if (Math.abs(gridSize - Math.abs(rest)) < snapSize) \n         return value + rest - gridSize\n      if (rest < snapSize) \n        return value + rest;\n    }\n    return value\n  }\n\n  static snapPt(p, gridSize, snapSize) {\n    return pt(this.snap(p.x, gridSize, snapSize), this.snap(p.y, gridSize, snapSize))\n  }\n\n  static optSnapPosition(pos, evt) {\n    // snap if preference is \"on\" and 'alt' take the opposite\n    if ((lively.preferences.get(\"SnapWindowsInGrid\") && !evt.altKey) ||\n        (!lively.preferences.get(\"SnapWindowsInGrid\") && evt.altKey)) {\n      return this.snapPt(pos)\n    } else {\n      return pos\n    }\n  }\n} \n\nexport default class Snapping {\n\n  static snapTo(target) {\n    var snapping = new Snapping(target)\n    snapping.snap()\n  }\n  \n  constructor(target) {\n    this.target = target\n    this.helpers = []\n    this.snapDistance = 5\n  }\n\n  snap() {\n    var padding = lively.preferences.get(\"SnapPaddingSize\")\n    this.clearHelpers()\n    \n    this.snapTo(\"left\", \"left\")\n    this.snapTo(\"left\", \"right\")\n    this.snapTo(\"left\", \"right\", padding)\n    this.snapTo(\"left\", \"centerX\")\n    \n    this.snapTo(\"top\", \"top\")\n    this.snapTo(\"top\", \"bottom\")\n    this.snapTo(\"top\", \"bottom\", padding)\n    this.snapTo(\"top\", \"centerY\")\n    \n    this.snapTo(\"right\", \"right\")\n    this.snapTo(\"right\", \"left\")\n    this.snapTo(\"right\", \"left\", -padding)\n    this.snapTo(\"right\", \"centerX\")\n\n    this.snapTo(\"bottom\", \"bottom\")\n    this.snapTo(\"bottom\", \"top\")\n    this.snapTo(\"bottom\", \"top\", -padding)\n    this.snapTo(\"bottom\", \"centerY\")\n\n  }\n\n  snapBounds(corner) {\n    // #TODO for find an alorithm that computes all the existing paddings in the world and use them here, so that it works like in PowerPoint and others\n    var padding = lively.preferences.get(\"SnapPaddingSize\")\n    this.clearHelpers()\n\n    if (corner.match(\"Left\")) {\n      this.snapToExtent(corner, \"left\", \"left\")\n      this.snapToExtent(corner, \"left\", \"right\")\n      this.snapToExtent(corner, \"left\", \"right\", padding)\n      this.snapToExtent(corner, \"left\", \"centerX\")\n    }\n\n    if (corner.match(\"Right\")) {\n      this.snapToExtent(corner, \"right\", \"right\")\n      this.snapToExtent(corner, \"right\", \"left\")\n      this.snapToExtent(corner, \"right\", \"left\", -padding)\n      this.snapToExtent(corner, \"right\", \"centerX\")\n    }\n\n    if (corner.match(\"top\")) {\n      this.snapToExtent(corner, \"top\", \"top\")\n      this.snapToExtent(corner, \"top\", \"bottom\")\n      this.snapToExtent(corner, \"top\", \"bottom\", padding)\n      this.snapToExtent(corner, \"top\", \"centerY\")\n    }\n    \n    if (corner.match(\"bottom\")) {\n      this.snapToExtent(corner, \"bottom\", \"bottom\")\n      this.snapToExtent(corner, \"bottom\", \"top\")\n      this.snapToExtent(corner, \"bottom\", \"top\", -padding)\n      this.snapToExtent(corner, \"bottom\", \"centerY\")\n    }\n\n  }\n\n  get all() {\n    if (!this._all) {\n      this._all = Array.from(this.target.parentElement.querySelectorAll(\":scope > *\"))\n        .filter(ea => (ea !== this.target) && ea.classList.contains(\"lively-content\"));\n    }\n    return this._all\n  }\n\n  showHelpers(snap, snapped, isHorizontal) {\n    Object.keys(snap)\n      .filter(ea => ea  == snapped)\n      .forEach( ea => {\n        this.helpers = this.helpers.concat(\n          snap[ea].map(eaElement => {\n            let line = undefined,\n              offset = lively.getClientPosition(this.target).subPt(lively.getPosition(this.target))\n            if (isHorizontal) {\n              let globalY = Number(ea) + offset.y \n              let minLeft = Math.min(\n                  lively.getClientBounds(eaElement).left(),\n                  lively.getClientBounds(this.target).left())\n              let maxRight = Math.max(\n                  lively.getClientBounds(eaElement).right(),\n                  lively.getClientBounds(this.target).right()) \n              line = [pt(minLeft, globalY), pt(maxRight, globalY)]\n            } else {\n              let globalX = Number(ea) + offset.x \n              let minTop = Math.min(\n                  lively.getClientBounds(eaElement).top(),\n                  lively.getClientBounds(this.target).top())\n              let maxBottom = Math.max(\n                  lively.getClientBounds(eaElement).bottom(),\n                  lively.getClientBounds(this.target).bottom());\n              line = [pt(globalX, minTop), pt(globalX, maxBottom)]\n            }\n            return lively.showPath(line, \"rgba(80,180,80,0.8)\", false)\n          }));\n          \n        // this.helpers = this.helpers.concat(\n        //   snap[ea].map(eaElement => {\n        //     return lively.showElement(eaElement) }))\n      })\n  }\n\n  clearHelpers() {\n    if (this.helpers) {\n      this.helpers.forEach(ea => ea && ea.remove())\n    }\n    this.helpers = []\n  }\n\n  /*\n   * Snap the extent (for resizing) of target to sides of other objects\n   */\n  snapToExtent(cornerOrSide, leftRightTopOrBottom, otherLeftRightTopOrBottom, padding) {\n    if (padding === undefined) padding = 0;\n    var isHorizontal = leftRightTopOrBottom == \"top\" || leftRightTopOrBottom == \"bottom\" \n    \n    if (!otherLeftRightTopOrBottom) otherLeftRightTopOrBottom = leftRightTopOrBottom\n    var target = this.target\n    var snap  =_.groupBy(this.all, ea => \n      Math.round(lively.getBounds(ea)[otherLeftRightTopOrBottom]() + padding));\n    \n    var oldBounds = lively.getBounds(target)\n    var old = oldBounds[leftRightTopOrBottom]();\n   \n    var snapped = _.sortBy(\n      Object.keys(snap).filter(ea => Math.abs(ea - old) < this.snapDistance),\n      ea => Math.abs(ea - old))[0];\n      \n    if (snapped !== undefined) {\n      // show snapped with a helper\n      this.showHelpers(snap, snapped, isHorizontal)\n      var delta = snapped - old; \n      var deltaPt = isHorizontal ? pt(0, delta) : pt(delta, 0);\n      \n      var newPos = oldBounds[cornerOrSide]().addPt(deltaPt).rounded()\n      var newBounds = oldBounds[Strings.prefixSelector(\"with\", cornerOrSide)](newPos)\n      lively.setBounds(target, newBounds)\n    }\n  }\n\n  /*\n   * Snap the position of target to sides of other objects\n   */\n  snapTo(leftRightTopOrBottom, otherLeftRightTopOrBottom, padding) {\n    if (padding === undefined) padding = 0;\n    var isHorizontal = leftRightTopOrBottom == \"top\" || leftRightTopOrBottom == \"bottom\" \n    \n    if (!otherLeftRightTopOrBottom) otherLeftRightTopOrBottom = leftRightTopOrBottom\n    var target = this.target\n    var snap  =_.groupBy(this.all, ea => \n          Math.round(lively.getBounds(ea)[otherLeftRightTopOrBottom]() + padding));\n    var oldBounds = lively.getBounds(target);\n    var old = oldBounds[leftRightTopOrBottom]();\n    \n    var snapped = _.sortBy(\n        Object.keys(snap).filter(ea => Math.abs(ea - old) < this.snapDistance),\n        ea => Math.abs(ea - old))[0];\n      \n    if (snapped !== undefined) {\n      this.showHelpers(snap, snapped, isHorizontal)\n      var pos = lively.getPosition(target)\n      if (isHorizontal)\n        lively.moveBy(target, pt(0, snapped - old))\n      else\n        lively.moveBy(target, pt(snapped - old, 0))\n    }\n  }\n}\n"],"mappings":"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"}