{ "version": 3, "sources": ["form_builder_controller-c6ffe57b39c41abc6fefe694b4fe59a940cfefcb73abc7b21a4154b9f7875df1.js"], "sourcesContent": ["import { Controller } from \"@hotwired/stimulus\";\n\n// Connects to data-controller=\"form-builder\"\nexport default class extends Controller {\n connect() {\n this.columns = document.getElementById(\"columns\");\n this.dances = document.getElementById(\"dances\");\n this.columns.addEventListener(\"change\", _event => {\n this.reflow();\n this.dances.style.gridTemplateColumns = `repeat(${this.columns.value}, 1fr)`;\n });\n\n for (let child of this.dances.children) {\n if (child.draggable) {\n child.addEventListener(\"dragstart\", event => {\n event.dataTransfer.setData(\"application/drag-id\", child.dataset.id);\n event.dataTransfer.effectAllowed = \"move\";\n child.style.opacity = 0.4;\n });\n\n child.addEventListener(\"dragend\", _event => {\n child.style.opacity = 1;\n child.style.cursor = \"default\";\n });\n\n child.addEventListener(\"dragover\", event => {\n event.dataTransfer.dropEffect = \"move\";\n event.preventDefault();\n return true;\n });\n\n child.addEventListener(\"drop\", this.drop);\n }\n }\n\n this.reflow();\n\n document.getElementById(\"save\").addEventListener(\"click\", this.save);\n }\n\n reflow() {\n let columns = parseInt(this.columns.value);\n\n for (let div of [...this.dances.children]) {\n if (!div.draggable) div.remove();\n }\n\n let rows = Math.floor((this.dances.childElementCount + columns - 1) / columns);\n for (let child of this.dances.children) {\n if (child.style.gridRow && child.style.gridRow > rows) {\n rows = parseInt(child.style.gridRow);\n }\n }\n\n rows+=2;\n\n for (let i=this.dances.childElementCount; i < columns * rows; i++) {\n let div = document.createElement(\"div\");\n div.textContent = \"\\xA0\";\n div.addEventListener(\"drop\", this.drop);\n\n div.addEventListener(\"dragover\", event => {\n event.dataTransfer.dropEffect = \"move\";\n event.preventDefault();\n return true;\n });\n\n this.dances.appendChild(div);\n } \n\n let dances = [...this.dances.children];\n\n for (let dance of dances) {\n if (dance.style.gridRow != \"\" && dance.style.gridColumn != \"\") {\n if (parseInt(dance.style.gridColumn) <= columns) continue;\n }\n\n let found = false;\n for (let row=1; !found; row++) {\n for (let col=1; col <= columns; col++) {\n if (!dances.some(div => (div != dance && parseInt(div.style.gridRow || 0) == row && parseInt(div.style.gridColumn || 0) == col))) {\n dance.style.gridRow = row;\n dance.style.gridColumn = col;\n found = true;\n break;\n }\n }\n }\n }\n }\n\n drop = event => {\n let source = event.dataTransfer.getData(\"application/drag-id\");\n source = this.dances.querySelector(`div[data-id=\"${source}\"]`);\n let target = event.target;\n\n [source.style.gridRow, target.style.gridRow] =\n [target.style.gridRow, source.style.gridRow];\n [source.style.gridColumn, target.style.gridColumn] =\n [target.style.gridColumn, source.style.gridColumn];\n\n document.getElementById(\"notice\").textContent = \"\";\n\n this.reflow();\n\n event.preventDefault();\n };\n\n save = () => {\n const token = document.querySelector('meta[name=\"csrf-token\"]').content;\n\n let positions = {};\n for (let dance of this.dances.children) {\n let id = dance.dataset.id;\n if (!id) continue;\n positions[id] = {row: dance.style.gridRow, col: dance.style.gridColumn};\n }\n\n fetch(this.element.action, {\n method: \"POST\",\n headers: window.inject_region({\n \"X-CSRF-Token\": token,\n \"Content-Type\": \"application/json\"\n }),\n credentials: \"same-origin\",\n redirect: \"follow\",\n body: JSON.stringify({dance: positions})\n }).then (response => response.text())\n .then(text => {document.getElementById(\"notice\").textContent = text;});\n\n event.preventDefault();\n };\n};\n"], "mappings": "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", "names": ["Controller", "__publicField", "event", "source", "target", "token", "positions", "dance", "id", "response", "text", "_event", "child", "columns", "div", "rows", "i", "dances", "found", "row", "col"] }