{ "version": 3, "sources": ["open_feedback_controller-6fe0e9161cfee4468d0cd19b671e2a986dda4c98afdef6b49663a78c36947dd7.js"], "sourcesContent": ["import { Controller } from \"@hotwired/stimulus\";\n\n// Connects to data-controller=\"open-feedback\"\nexport default class extends Controller {\n connect() {\n let previous = this.element.previousElementSibling;\n\n this.element.addEventListener(\"mouseenter\", () => {\n previous.classList.add(\"bg-yellow-200\");\n });\n\n this.element.addEventListener(\"mouseleave\", () => {\n previous.classList.remove(\"bg-yellow-200\");\n });\n\n let next = this.element.nextElementSibling;\n\n if (next && next.querySelector(\"textarea\")) {\n next.addEventListener(\"mouseenter\", () => {\n previous.classList.add(\"bg-yellow-200\");\n });\n \n next.addEventListener(\"mouseleave\", () => {\n previous.classList.remove(\"bg-yellow-200\");\n });\n }\n\n for (let button of this.element.querySelectorAll(\"button\")) {\n let span = button.querySelector(\"span\");\n let abbr = button.querySelector(\"abbr\");\n if (span && abbr) {\n abbr.title = span.textContent;\n let feedback = button.parentElement.dataset.value.split(\" \");\n if (feedback.includes(abbr.textContent)) {\n button.classList.add(\"selected\");\n }\n }\n\n button.addEventListener(\"click\", _event => {\n const token = document.querySelector('meta[name=\"csrf-token\"]').content;\n const score = document.querySelector(\"div[data-controller=score]\");\n\n let feedbackType = button.parentElement.classList.contains(\"good\") ? \"good\" : \n (button.parentElement.classList.contains(\"bad\") ? \"bad\" : \"value\");\n let feedbackValue = button.querySelector(\"abbr\").textContent;\n\n const feedback = {\n heat: parseInt(this.element.dataset.heat),\n slot: score.dataset.slot && parseInt(score.dataset.slot),\n [feedbackType] : feedbackValue\n };\n\n fetch(this.element.dataset.feedbackAction, {\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(feedback)\n }).then(response => response.ok ? response.text() : JSON.stringify({error: response.statusText}))\n .then(response => {\n response = JSON.parse(response);\n let error = document.querySelector(\"div[data-score-target=error]\");\n \n if (!response.error) {\n error.style.display = \"none\";\n\n let sections = button.parentElement.parentElement.children;\n for (let section of sections) {\n let feedbackType = section.classList.contains(\"good\") ? \"good\" : \n (section.classList.contains(\"bad\") ? \"bad\" : \"value\");\n let feedback = (response[feedbackType] || \"\").split(\" \");\n \n for (let button of section.querySelectorAll(\"button\")) {\n if (feedback.includes(button.querySelector(\"abbr\").textContent)) {\n button.classList.add(\"selected\");\n } else {\n button.classList.remove(\"selected\");\n }\n }\n }\n } else {\n error.textContent = response.error;\n error.style.display = \"block\";\n }\n \n return response;\n });\n });\n }\n }\n};\n"], "mappings": "AAAA,OAAS,cAAAA,MAAkB,qBAG3B,6BAA6BA,CAAW,CACtC,SAAU,CACR,IAAIC,EAAW,KAAK,QAAQ,uBAE5B,KAAK,QAAQ,iBAAiB,aAAc,IAAM,CAChDA,EAAS,UAAU,IAAI,eAAe,CACxC,CAAC,EAED,KAAK,QAAQ,iBAAiB,aAAc,IAAM,CAChDA,EAAS,UAAU,OAAO,eAAe,CAC3C,CAAC,EAED,IAAIC,EAAO,KAAK,QAAQ,mBAEpBA,GAAQA,EAAK,cAAc,UAAU,IACvCA,EAAK,iBAAiB,aAAc,IAAM,CACxCD,EAAS,UAAU,IAAI,eAAe,CACxC,CAAC,EAEDC,EAAK,iBAAiB,aAAc,IAAM,CACxCD,EAAS,UAAU,OAAO,eAAe,CAC3C,CAAC,GAGH,QAASE,KAAU,KAAK,QAAQ,iBAAiB,QAAQ,EAAG,CAC1D,IAAIC,EAAOD,EAAO,cAAc,MAAM,EAClCE,EAAOF,EAAO,cAAc,MAAM,EAClCC,GAAQC,IACVA,EAAK,MAAQD,EAAK,YACHD,EAAO,cAAc,QAAQ,MAAM,MAAM,GAAG,EAC9C,SAASE,EAAK,WAAW,GACpCF,EAAO,UAAU,IAAI,UAAU,GAInCA,EAAO,iBAAiB,QAASG,GAAU,CACzC,MAAMC,EAAQ,SAAS,cAAc,yBAAyB,EAAE,QAC1DC,EAAQ,SAAS,cAAc,4BAA4B,EAEjE,IAAIC,EAAeN,EAAO,cAAc,UAAU,SAAS,MAAM,EAAI,OAClEA,EAAO,cAAc,UAAU,SAAS,KAAK,EAAI,MAAQ,QACxDO,EAAgBP,EAAO,cAAc,MAAM,EAAE,YAEjD,MAAMQ,EAAW,CACf,KAAM,SAAS,KAAK,QAAQ,QAAQ,IAAI,EACxC,KAAMH,EAAM,QAAQ,MAAQ,SAASA,EAAM,QAAQ,IAAI,EACvD,CAACC,CAAY,EAAIC,CACnB,EAEA,MAAM,KAAK,QAAQ,QAAQ,eAAgB,CACzC,OAAQ,OACR,QAAS,OAAO,cAAc,CAC5B,eAAgBH,EAChB,eAAgB,kBAClB,CAAC,EACD,YAAa,cACb,SAAU,SACV,KAAM,KAAK,UAAUI,CAAQ,CAC/B,CAAC,EAAE,KAAKC,GAAYA,EAAS,GAAKA,EAAS,KAAK,EAAI,KAAK,UAAU,CAAC,MAAOA,EAAS,UAAU,CAAC,CAAC,EAC7F,KAAKA,GAAY,CAChBA,EAAW,KAAK,MAAMA,CAAQ,EAC9B,IAAIC,EAAQ,SAAS,cAAc,8BAA8B,EAEjE,GAAKD,EAAS,MAkBZC,EAAM,YAAcD,EAAS,MAC7BC,EAAM,MAAM,QAAU,YAnBH,CACnBA,EAAM,MAAM,QAAU,OAEtB,IAAIC,EAAWX,EAAO,cAAc,cAAc,SAClD,QAASY,KAAWD,EAAU,CAC5B,IAAIL,EAAeM,EAAQ,UAAU,SAAS,MAAM,EAAI,OACrDA,EAAQ,UAAU,SAAS,KAAK,EAAI,MAAQ,QAC3CJ,GAAYC,EAASH,CAAY,GAAK,IAAI,MAAM,GAAG,EAEvD,QAASN,KAAUY,EAAQ,iBAAiB,QAAQ,EAC9CJ,EAAS,SAASR,EAAO,cAAc,MAAM,EAAE,WAAW,EAC5DA,EAAO,UAAU,IAAI,UAAU,EAE/BA,EAAO,UAAU,OAAO,UAAU,CAGxC,CACF,CAKA,OAAOS,CACT,CAAC,CACL,CAAC,CACH,CACF,CACF", "names": ["Controller", "previous", "next", "button", "span", "abbr", "_event", "token", "score", "feedbackType", "feedbackValue", "feedback", "response", "error", "sections", "section"] }