{"version":3,"names":["Grid","Snapping","pt","Strings","snapAllTopLevelContent","gridSize","lively","preferences","get","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","Object","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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"}