{"version":3,"file":"hero_controller-D6PtQpgH.js","sources":["../../../app/javascript/controllers/popup/step/hero_controller.js"],"sourcesContent":["import { Controller } from \"@hotwired/stimulus\"\n\nimport { useColorPickerVisibilityControls } from \"../../mixins/useColorPickerVisibilityControls\"\nimport {\n useCenterAlignment,\n useLeftAlignment,\n useRightAlignment,\n} from \"../../mixins/tools/useAlignment\"\nimport { useMoveCursorToEndOfInput } from \"../../mixins/useMoveCursorToEndOfInput\"\nimport { useURLValidations } from \"../../mixins/useURLValidations\"\n\nexport default class extends Controller {\n static values = {\n bold: { type: Boolean, default: false },\n italic: { type: Boolean, default: false },\n defaultColor: { type: String, default: \"#000000\" },\n color: { type: String, default: \"#000000\" },\n fontSizes: Object,\n alignment: { type: String, default: \"center\" },\n content: String,\n }\n\n static classes = [\"active\", \"inactive\", \"linkError\"]\n static targets = [\n \"container\",\n \"activeAlignment\",\n \"menu\",\n \"alignmentButton\",\n \"alignmentInput\",\n \"preview\",\n \"colorPickerControls\",\n \"colorInput\",\n \"boldButton\",\n \"italicButton\",\n \"linkButton\",\n \"addLinkButton\",\n \"editLinkContainer\",\n \"linkInput\",\n \"newLinkContainer\",\n \"colorButton\",\n ]\n\n initialize() {\n this.allowSync = true\n this.linkHighlighted = false\n this.colorHighlighted = false\n\n this.element.classList.add(...this.inactiveClasses)\n this.element.classList.remove(...this.activeClasses)\n\n this.linkInputListener = this.linkInputListener.bind(this)\n // Trix takes some time to load custom configuration\n // Replace content To enforce styles\n setTimeout(() => (this.trix.value = this.contentValue), 0)\n\n this.setupTrix()\n\n this.trixEditor.activateAttribute(\"foregroundColor\")\n }\n\n linkInputListener(e) {\n if (!this.linkHighlighted) {\n this.highlightSelectionAndSaveSelectionRange()\n\n this.linkHighlighted = true\n this.linkInputTarget.focus()\n }\n }\n\n changeColor({ detail }) {\n this.colorValue = detail\n this.trix.focus()\n }\n\n connect() {\n this.linkInputTarget.addEventListener(\"focus\", this.linkInputListener)\n this.colorButtonTarget\n .querySelector(\"input\")\n .addEventListener(\"focus\", () => {\n if (!this.colorHighlighted) {\n this.highlightSelectionAndSaveSelectionRange()\n this.colorButtonTarget.querySelector(\"input\").focus()\n\n this.colorHighlighted = true\n }\n })\n\n useMoveCursorToEndOfInput(this)\n useURLValidations(this)\n\n useColorPickerVisibilityControls(this, {\n pickerTarget: this.colorPickerControlsTarget,\n beforeColorPickerShow:\n this.highlightSelectionAndSaveSelectionRange.bind(this),\n onColorPickerHide: this.removeHighlightFromSelection.bind(this),\n })\n\n useLeftAlignment(this, {\n on: this.trix,\n applyClasses: [\"text-left\"],\n removeClasses: [\"text-center\", \"text-right\"],\n afterAlignment: () => this.syncAlignmentTo(\"left\"),\n })\n\n useCenterAlignment(this, {\n on: this.trix,\n applyClasses: [\"text-center\"],\n removeClasses: [\"text-left\", \"text-right\"],\n afterAlignment: () => this.syncAlignmentTo(\"center\"),\n })\n\n useRightAlignment(this, {\n on: this.trix,\n applyClasses: [\"text-right\"],\n removeClasses: [\"text-center\", \"text-left\"],\n afterAlignment: () => this.syncAlignmentTo(\"right\"),\n })\n\n this.syncAlignment()\n\n this.element.classList.add(...this.inactiveClasses)\n this.element.classList.remove(...this.activeClasses)\n }\n\n saveLinkOnEnter(e) {\n this.addingLink = true\n\n Promise.resolve()\n .then(() => {\n if (e.key === \"Enter\" && this.linkInputTarget.value.trim() !== \"0\") {\n if (this.addLinkButtonTarget.classList.contains(\"hidden\")) {\n this.saveChangesToSelectedLink()\n } else {\n this.addLink()\n }\n }\n })\n .then(() => {\n // trix also listens for Enter keypress that will enter a new line\n // which results in removing the newly linked to a url since it's within the selection\n setTimeout(() => (this.addingLink = false), 3000)\n })\n }\n\n toggleBold() {\n this.boldValue = !this.boldValue\n if (this.trixEditor.attributeIsActive(\"bold\")) {\n this.trixEditor.deactivateAttribute(\"bold\")\n } else {\n this.trixEditor.activateAttribute(\"bold\")\n }\n }\n\n toggleItalic() {\n if (this.trixEditor.attributeIsActive(\"italic\")) {\n this.trixEditor.deactivateAttribute(\"italic\")\n } else {\n this.trixEditor.activateAttribute(\"italic\")\n }\n }\n\n trixKeypressListener(e) {\n this.removeHighlightFromSelection()\n this.syncBoldButtonWithCursorLocationAttribute()\n this.syncItalicButtonWithCursorLocationAttribute()\n this.syncLinkButtonWithCursorLocationAttribute()\n this.syncColorPickerWithCursorLocationAttribute()\n\n if (this.colorPickerControlsTarget.classList.contains(\"hidden\") === false) {\n this.colorPickerControlsTarget.classList.add(\"hidden\")\n\n this.removeHighlightFromSelection()\n }\n\n // skip this pass if the link has not yet been added to the editor\n if (e.key === \"Enter\" && e.type === \"keyup\" && !this.addingLink) {\n this.trixEditor.recordUndoEntry(\"newLine\")\n this.trixEditor.insertLineBreak()\n }\n\n const defaultLabel = this.fontSizesValue.p.label\n\n const activeFontSizeFilter = Object.values(this.fontSizesValue).find(\n (valueObject) => this.trix.editor.attributeIsActive(valueObject.label)\n )\n\n this.fontSizeDropdownLabelContainer.innerText = activeFontSizeFilter\n ? activeFontSizeFilter.label.split(\"_\").join(\" \")\n : defaultLabel\n }\n\n syncSelection() {\n const range = this.trixEditor.getSelectedRange()\n\n // the OR is for cases when the cursor is within a href but has not selected anything yet.\n // example, the text \"hellotext\" is linked to www.hellotext.com and the cursor is within the text\n // i.e hell|otext. In this case the link_attachment button needs to be enabled so that business\n // can update or remove the link\n\n if (\n this.trixEditorDocument.getStringAtRange(range).toString().length > 0 ||\n this.trix.editor.attributeIsActive(\"href\")\n ) {\n this.linkButtonTarget.classList.replace(\n \"text-night-40\",\n \"hover:text-tiger\"\n )\n this.linkButtonTarget.disabled = false\n\n this.selectionRange = range\n } else {\n this.linkButtonTarget.classList.replace(\n \"hover:text-tiger\",\n \"text-night-40\"\n )\n this.linkButtonTarget.disabled = true\n }\n }\n\n toggleLinkContainer() {\n const piece = this.trixEditorDocument.getPieceAtPosition(\n this.trixEditor.getPosition()\n )\n\n if (piece.attributes.has(\"href\")) {\n this.linkInputTarget.value = piece.attributes.get(\"href\")\n this.addLinkButtonTarget.classList.add(\"hidden\")\n this.editLinkContainerTarget.classList.remove(\"hidden\")\n\n const indexOfPiece = this.trixEditorDocument\n .toString()\n .indexOf(piece.toString())\n const textRange = [indexOfPiece, indexOfPiece + piece.length]\n\n this.trixEditor.setSelectedRange(textRange)\n this.trixEditor.activateAttribute(\"frozen\")\n\n this.selectionRange = textRange\n } else {\n this.addLinkButtonTarget.classList.remove(\"hidden\")\n this.editLinkContainerTarget.classList.add(\"hidden\")\n }\n\n this.newLinkContainerTarget.classList.toggle(\"hidden\")\n\n if (this.newLinkContainerTarget.classList.contains(\"hidden\") === false) {\n this.moveCursorToEndOfInput(this.linkInputTarget, { focus: true })\n }\n }\n\n saveChangesToSelectedLink() {\n this.removeOldLink(true)\n }\n\n unlinkText() {\n this.removeOldLink()\n }\n\n changeFontSizeForElements({ currentTarget }) {\n Object.values(this.fontSizesValue).forEach((objectValue) =>\n this.trixEditor.deactivateAttribute(objectValue.label)\n )\n\n this.trixEditor.activateAttribute(\n this.fontSizesValue[currentTarget.dataset.entry].label\n )\n }\n\n replaceWithSynced({ detail }) {\n this.allowSync = false\n\n Promise.resolve()\n .then(() => {\n this.dispatch(\"color:change\", {\n target: this.colorPickerControlsTarget,\n detail: detail.color,\n })\n\n this.alignmentValue = detail.alignment\n this.syncAlignment(false)\n\n console.log(detail.trix.value)\n this.trix.value = detail.trix.value\n })\n .then(() => (this.allowSync = true))\n }\n\n syncStylesWithDropdownState() {\n setTimeout(() => {\n if (this.menuTarget.classList.contains(\"hidden\")) {\n this.element.classList.add(...this.inactiveClasses)\n this.element.classList.remove(...this.activeClasses)\n } else {\n this.element.classList.remove(...this.inactiveClasses)\n this.element.classList.add(...this.activeClasses)\n }\n }, 10)\n }\n\n toggleToolbar(e) {\n if (\n this.menuTarget.classList.contains(\"hidden\") === false &&\n this.element.contains(e.target)\n ) {\n return\n }\n\n this.menuTarget.classList.toggle(\"hidden\")\n this.syncStylesWithDropdownState()\n }\n\n hideToolbar(e) {\n if (\n this.element.contains(e.target.parentElement) === false &&\n this.menuTarget.contains(e.target.parentElement) === false &&\n this.menuTarget.classList.contains(\"hidden\") === false &&\n document.activeElement.dataset.trixId === this.trix.dataset.trixId\n ) {\n this.menuTarget.classList.add(\"hidden\")\n this.syncStylesWithDropdownState()\n\n this.allowSync = true\n this.sync()\n this.resetLinkModalContent()\n if (this.selectionRange) {\n this.removeHighlightFromSelection()\n }\n }\n }\n\n hidePicker() {\n this.colorPickerControlsTarget.classList.add(\"hidden\")\n }\n\n addLink() {\n if (this.invalidURL(this.linkInputTarget.value)) {\n this.linkInputTarget.classList.add(...this.linkErrorClasses)\n return\n } else {\n this.linkInputTarget.classList.remove(...this.linkErrorClasses)\n }\n\n if (this.selectionRange) {\n this.trixEditor.setSelectedRange(this.selectionRange)\n this.trixEditor.activateAttribute(\"href\", this.linkInputTarget.value)\n this.removeHighlightFromSelection()\n }\n\n this.linkHighlighted = false\n this.newLinkContainerTarget.classList.add(\"hidden\")\n this.linkInputTarget.value = \"https://www.\"\n this.sync()\n }\n\n // private\n\n sync() {\n if (!this.allowSync) return\n\n this.dispatch(\"sync\", {\n target: Array.from(\n document.querySelectorAll(\n `[data-hero-id='${this.element.dataset.heroId}']`\n )\n ).find((layoutSection) => layoutSection !== this.element),\n detail: this.currentState,\n })\n }\n\n syncAlignmentTo(alignment) {\n this.changeAlignmentActiveClassTo(\n this.element.querySelector(`[data-align='${alignment}']`)\n )\n this.alignmentInputTarget.value = alignment\n this.sync()\n }\n\n changeAlignmentActiveClassTo(button) {\n this.alignmentButtonTargets.forEach((alignmentButton) => {\n if (alignmentButton === button) {\n alignmentButton.classList.add(\"text-tiger\")\n } else {\n alignmentButton.classList.remove(\"text-tiger\")\n }\n })\n }\n\n colorValueChanged() {\n this.colorInputTarget.value = this.colorValue\n\n this.previewTargets.forEach((previewTarget) => {\n previewTarget.style.backgroundColor = this.colorValue\n })\n\n if (this.trix) {\n this.trixEditor.activateAttribute(\"foregroundColor\", this.colorValue)\n }\n }\n\n highlightSelectionAndSaveSelectionRange() {\n const range = this.trixEditor.getSelectedRange()\n\n if (this.trixEditorDocument.getStringAtRange(range).toString().length > 0) {\n this.trixEditor.setSelectedRange(range)\n this.trixEditor.activateAttribute(\"highlight\")\n this.selectionRange = range\n } else {\n // when there is no selection in the input. create a collapsed selection in the current cursor position\n // that will be used with the selected color from the color wheel\n const position = this.trixEditor.getPosition()\n this.trixEditor.setSelectedRange([position - 1, position + 1])\n this.selectionRange = range\n }\n }\n\n removeHighlightFromSelection() {\n if (!this.selectionRange) return\n\n this.trixEditor.setSelectedRange(this.selectionRange)\n this.trixEditor.deactivateAttribute(\"highlight\")\n\n this.selectionRange = undefined\n }\n\n setupTrix() {\n this.addFontSizeControlsToTrix(window.popupControlsz.font.base)\n this.setupForegroundColorExtension()\n\n this.trix = this.element.querySelector(\"trix-editor\")\n this.trix.classList.add(\"text-center\")\n }\n\n addFontSizeControlsToTrix(base) {\n Object.entries(this.fontSizesValue).forEach(([tagName, valueObject]) => {\n const computedFontSize = base * valueObject.size\n Trix.config.textAttributes[valueObject.label] = {\n tagName: tagName,\n parser: (element) => element.style.fontSize === `${computedFontSize}px`,\n inheritable: true,\n }\n })\n }\n\n syncBoldButtonWithCursorLocationAttribute() {\n if (this.trixEditor.attributeIsActive(\"bold\")) {\n this.boldButtonTarget.classList.add(\"text-tiger\")\n } else {\n this.boldButtonTarget.classList.remove(\"text-tiger\")\n }\n }\n\n syncItalicButtonWithCursorLocationAttribute() {\n if (this.trixEditor.attributeIsActive(\"italic\")) {\n this.italicButtonTarget.classList.add(\"text-tiger\")\n } else {\n this.italicButtonTarget.classList.remove(\"text-tiger\")\n }\n }\n\n syncLinkButtonWithCursorLocationAttribute() {\n if (this.trixEditor.attributeIsActive(\"href\")) {\n this.linkButtonTarget.classList.add(\"text-tiger\")\n this.linkButtonTarget.classList.replace(\n \"text-night-40\",\n \"hover:text-tiger\"\n )\n this.linkButtonTarget.disabled = false\n } else {\n this.linkButtonTarget.classList.remove(\"text-tiger\")\n }\n }\n\n syncColorPickerWithCursorLocationAttribute() {\n // because the color picker is displayed above the trix editor\n // we need to check that the color picker is hidden in order to update the preview targets\n // displayed under the A color icon when the user moves the cursor in inside trix.\n\n if (this.colorPickerControlsTarget.classList.contains(\"hidden\")) {\n const piece = this.trixEditorDocument.getPieceAtPosition(\n this.trixEditor.getPosition()\n )\n let color = this.defaultColorValue\n\n if (piece.attributes.has(\"foregroundColor\")) {\n color = piece.attributes.get(\"foregroundColor\")\n this.trixEditor.activateAttribute(\"foregroundColor\", color)\n }\n\n this.dispatch(\"color:change\", {\n target: this.colorPickerControlsTarget,\n detail: color,\n })\n\n this.previewTarget.style.backgroundColor = color\n }\n }\n\n removeOldLink(replaceWithNewLink = false) {\n this.trixEditor.setSelectedRange(this.selectionRange)\n this.trixEditor.deactivateAttribute(\"frozen\")\n this.trixEditor.deactivateAttribute(\"href\")\n\n if (replaceWithNewLink) {\n this.trixEditor.activateAttribute(\"href\", this.linkInputTarget.value)\n }\n\n this.selectionRange = undefined\n this.linkInputTarget.value = \"\"\n this.linkHighlighted = false\n\n this.newLinkContainerTarget.classList.add(\"hidden\")\n\n this.addLinkButtonTarget.classList.remove(\"hidden\")\n this.editLinkContainerTarget.classList.add(\"hidden\")\n\n this.sync()\n }\n\n resetLinkModalContent() {\n this.addLinkButtonTarget.classList.remove(\"hidden\")\n this.editLinkContainerTarget.classList.add(\"hidden\")\n this.linkInputTarget.value = \"https://www.\"\n this.linkInputTarget.classList.remove(...this.linkErrorClasses)\n this.newLinkContainerTarget.classList.add(\"hidden\")\n }\n\n get trixEditor() {\n return this.trix.editor\n }\n\n get trixEditorDocument() {\n return this.trix.editor.getDocument()\n }\n\n get fontSizeDropdownLabelContainer() {\n return this.element.querySelector(\n '[data-custom-dropdown-target=\"placeholderText\"]'\n )\n }\n\n syncTrix() {\n this.sync()\n }\n\n get currentState() {\n return {\n bold: this.boldValue,\n italic: this.italicValue,\n alignment: this.alignmentInputTarget.value,\n color: this.colorValue,\n trix: this.trix,\n }\n }\n\n // contains configuration option for foregroundColor\n setupForegroundColorExtension() {\n Trix.config.textAttributes.foregroundColor = {\n styleProperty: \"color\",\n inheritable: 1,\n }\n }\n\n syncAlignment(enableSyncAfterAlignment = true) {\n this.allowSync = false\n\n Promise.resolve()\n .then(() => {\n switch (this.alignmentValue) {\n case \"left\":\n this.alignToLeft({\n currentTarget: this.element.querySelector(\"[data-align='left']\"),\n })\n break\n case \"center\":\n this.alignToCenter({\n currentTarget: this.element.querySelector(\n \"[data-align='center']\"\n ),\n })\n break\n case \"right\":\n this.alignToRight({\n currentTarget: this.element.querySelector(\"[data-align='right']\"),\n })\n break\n case \"full_width\":\n this.alignToFullWidth({\n currentTarget: this.element.querySelector(\n \"[data-align='full_width']\"\n ),\n })\n break\n }\n })\n .then(() => (this.allowSync = enableSyncAfterAlignment))\n }\n}\n"],"names":["HeroController","Controller","e","detail","useMoveCursorToEndOfInput","useURLValidations","useColorPickerVisibilityControls","useLeftAlignment","useCenterAlignment","useRightAlignment","defaultLabel","activeFontSizeFilter","valueObject","range","piece","indexOfPiece","textRange","currentTarget","objectValue","layoutSection","alignment","button","alignmentButton","previewTarget","position","base","tagName","computedFontSize","element","color","replaceWithNewLink","enableSyncAfterAlignment","__publicField"],"mappings":"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"}