{"version":3,"file":"js/1092-b1f8b5e447eb130d03d3.js","mappings":"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","sources":["webpack://app/../usr/local/bundle/bundler/gems/decidim-module-decidim_awesome-afa824a79faa/app/packs/src/decidim/decidim_awesome/editors/editor.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-module-decidim_awesome-afa824a79faa/app/packs/src/decidim/decidim_awesome/forms/rich_text_plugin.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-module-decidim_awesome-afa824a79faa/app/packs/src/decidim/decidim_awesome/forms/custom_fields_renderer.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-module-decidim_awesome-afa824a79faa/app/packs/src/decidim/decidim_awesome/proposals/custom_fields.js"],"sourcesContent":["/* eslint-disable require-jsdoc, func-style */\n\n/*\n* Since version 0.25 we follow a different strategy and opt to destroy and override completely the original editor\n* That's because editors are instantiated directly instead of creating a global function to instantiate them\n*/\n\nimport lineBreakButtonHandler from \"src/decidim/editor/linebreak_module\"\nimport InscrybMDE from \"inscrybmde\"\nimport Europa from \"europa\"\nimport \"inline-attachment/src/inline-attachment\";\nimport \"inline-attachment/src/codemirror-4.inline-attachment\";\nimport \"inline-attachment/src/jquery.inline-attachment\";\nimport hljs from \"highlight.js\";\nimport \"highlight.js/styles/github.css\";\nimport \"src/decidim/editor/clipboard_override\"\nimport \"src/decidim/vendor/image-resize.min\"\nimport \"src/decidim/vendor/image-upload.min\"\n\nconst DecidimAwesome = window.DecidimAwesome || {};\nconst quillFormats = [\"bold\", \"italic\", \"link\", \"underline\", \"header\", \"list\", \"video\", \"image\", \"alt\", \"break\", \"width\", \"style\", \"code\", \"blockquote\", \"indent\"];\n\n// A tricky way to destroy the quill editor\nexport function destroyQuillEditor(container) {\n  if (container) {\n    const content = $(container).find(\".ql-editor\").html();\n    $(container).html(content);\n    $(container).siblings(\".ql-toolbar\").remove();\n    $(container).find(\"*[class*='ql-']\").removeClass((index, className) => (className.match(/(^|\\s)ql-\\S+/g) || []).join(\" \"));\n    $(container).removeClass((index, className) => (className.match(/(^|\\s)ql-\\S+/g) || []).join(\" \"));\n    if ($(container).next().is(\"p.help-text\")) {\n      $(container).next().remove();\n    }\n  }\n  else {\n    console.error(`editor [${container}] not exists`);\n  }\n}\n\nexport function createQuillEditor(container) {\n  const toolbar = $(container).data(\"toolbar\");\n  const disabled = $(container).data(\"disabled\");\n  const allowedEmptyContentSelector = \"iframe\";\n\n  let quillToolbar = [\n    [\"bold\", \"italic\", \"underline\", \"linebreak\"],\n    [{ list: \"ordered\" }, { list: \"bullet\" }],\n    [\"link\", \"clean\"],\n    [\"code\", \"blockquote\"],\n    [{ \"indent\": \"-1\"}, { \"indent\": \"+1\" }]\n  ];\n\n  let addImage = false;\n\n  if (toolbar === \"full\") {\n    quillToolbar = [\n      [{ header: [2, 3, 4, 5, 6, false] }],\n      ...quillToolbar\n    ];\n    if (DecidimAwesome.allow_images_in_full_editor) {\n      quillToolbar.push([\"video\", \"image\"]);\n      addImage = true;\n    } else {\n      quillToolbar.push([\"video\"]);\n    }\n  } else if (toolbar === \"basic\") {\n    if (DecidimAwesome.allow_images_in_small_editor) {\n      quillToolbar.push([\"video\", \"image\"]);\n      addImage = true;\n    } else {\n      quillToolbar.push([\"video\"]);\n    }\n  } else if (DecidimAwesome.allow_images_in_small_editor) {\n    quillToolbar.push([\"image\"]);\n    addImage = true;\n  }\n\n  let modules = {\n    linebreak: {},\n    toolbar: {\n      container: quillToolbar,\n      handlers: {\n        \"linebreak\": lineBreakButtonHandler\n      }\n    }\n  };\n\n  const $input = $(container).siblings('input[type=\"hidden\"]');\n  container.innerHTML = $input.val() || \"\";\n  const token = $('meta[name=\"csrf-token\"]').attr(\"content\");\n  if (addImage) {\n    modules.imageResize = {\n      modules: [\"Resize\", \"DisplaySize\"]\n    }\n    modules.imageUpload = {\n      url: DecidimAwesome.editor_uploader_path,\n      method: \"POST\",\n      name: \"image\",\n      withCredentials: false,\n      headers: { \"X-CSRF-Token\": token },\n      callbackOK: (serverResponse, next) => {\n        $(\"div.ql-toolbar\").last().removeClass(\"editor-loading\")\n        next(serverResponse.url);\n      },\n      callbackKO: (serverError) => {\n        $(\"div.ql-toolbar\").last().removeClass(\"editor-loading\")\n        let msg = serverError && serverError.body;\n        try { \n          msg = JSON.parse(msg).message; \n        } catch (evt) { console.error(\"Parsing error\", evt); }\n        console.error(`Image upload error: ${msg}`);\n        let $p = $(`<p class=\"text-alert help-text\">${msg}</p>`);\n        $(container).after($p)\n        setTimeout(() => {\n          $p.fadeOut(1000, () => { \n            $p.destroy();\n          });\n        }, 3000);\n      },\n      checkBeforeSend: (file, next) => {\n        $(\"div.ql-toolbar\").last().addClass(\"editor-loading\")\n        next(file);\n      }\n    }\n  }\n  const quill = new Quill(container, {\n    modules: modules,\n    formats: quillFormats,\n    theme: \"snow\"\n  });\n\n  if (disabled) {\n    quill.disable();\n  }\n\n  quill.on(\"text-change\", () => {\n    const text = quill.getText();\n\n    // Triggers CustomEvent with the cursor position\n    // It is required in input_mentions.js\n    let event = new CustomEvent(\"quill-position\", {\n      detail: quill.getSelection()\n    });\n    container.dispatchEvent(event);\n\n    if (text === \"\\n\" || text === \"\\n\\n\") {\n      $input.val(\"\");\n    } else {\n      $input.val(quill.root.innerHTML);\n    }\n    if ((text === \"\\n\" || text === \"\\n\\n\") && quill.root.querySelectorAll(allowedEmptyContentSelector).length === 0) {\n      $input.val(\"\");\n    } else {\n      const emptyParagraph = \"<p><br></p>\";\n      const cleanHTML = quill.root.innerHTML.replace(\n        new RegExp(`^${emptyParagraph}|${emptyParagraph}$`, \"g\"),\n        \"\"\n      );\n      $input.val(cleanHTML);\n    }\n  });\n  // After editor is ready, linebreak_module deletes two extraneous new lines\n  quill.emitter.emit(\"editor-ready\");\n\n  if (addImage) {\n    const text = $(container).data(\"dragAndDropHelpText\") || DecidimAwesome.texts.drag_and_drop_image;\n    $(container).after(`<p class=\"help-text\" style=\"margin-top:-1.5rem;\">${text}</p>`);\n  }\n\n  // After editor is ready, linebreak_module deletes two extraneous new lines\n  quill.emitter.emit(\"editor-ready\");\n\n  return quill;\n}\n\nexport function createMarkdownEditor(container) {\n  const text = DecidimAwesome.texts.drag_and_drop_image;\n  const token = $('meta[name=\"csrf-token\"]').attr(\"content\");\n  const $input = $(container).siblings('input[type=\"hidden\"]');\n  const $faker = $('<textarea name=\"faker-inscrybmde\"/>');\n  const $form = $(container).closest(\"form\");\n  const europa = new Europa();\n  $faker.val(europa.convert($input.val()));\n  $faker.insertBefore($(container));\n  $(container).hide();\n  const inscrybmde = new InscrybMDE({\n    element: $faker[0],\n    spellChecker: false,\n    renderingConfig: {\n      codeSyntaxHighlighting: true,\n      hljs: hljs\n    }\n  });\n  $faker[0].InscrybMDE = inscrybmde;\n\n  // Allow image upload\n  if (DecidimAwesome.allow_images_in_markdown_editor) {\n    $(inscrybmde.gui.statusbar).prepend(`<span class=\"help-text\" style=\"float:left;margin:0;text-align:left;\">${text}</span>`);\n    window.inlineAttachment.editors.codemirror4.attach(inscrybmde.codemirror, {\n      uploadUrl: DecidimAwesome.editor_uploader_path,\n      uploadFieldName: \"image\",\n      jsonFieldName: \"url\",\n      extraHeaders: { \"X-CSRF-Token\": token }\n    });\n  }\n\n  // convert to html on submit\n  $form.on(\"submit\", () => {\n    // e.preventDefault();\n    $input.val(inscrybmde.markdown(inscrybmde.value()));\n  });\n}\n","/**\n * Decidim rich text editor control plugin\n * Renders standard Decidim WYSIWYG editor\n *\n * Registers Decidim Richtext as a subtype for the textarea control\n */\nimport {createQuillEditor} from \"src/decidim/decidim_awesome/editors/editor\"\n\n// configure the class for runtime loading\nif (!window.fbControls) {\n  window.fbControls = []\n}\nwindow.fbControls.push(function(controlClass, allControlClasses) {\n  const controlTextarea = allControlClasses.textarea\n\n  /**\n   * DecidimRichtext control class\n   *\n   * NOTE: I haven't found a way to set the userData value using this plugin\n   *       For this reason the value of the field must be collected manually\n   *       from the hidden input name same as the field with the suffix '-input'\n   */\n  class controlRichtext extends controlTextarea {\n\n    /**\n     * Class configuration - return the icons & label related to this control\n     * @return {JSON} definition object\n     */\n    static get definition() {\n      return {\n        icon: \"📝\",\n        i18n: {\n          default: \"Rich Text Editor\"\n        }\n      }\n    }\n\n    /**\n     * configure the richtext editor requirements\n     * @return {void}\n     */\n    configure() {\n      window.fbEditors.richtext = {};\n    }\n\n    /**\n     * build a div DOM element & convert to a richtext editor\n     * @return {DOMElement} DOM Element to be injected into the form.\n     */\n    build() {\n      const { value, userData, ...attrs } = this.config;\n\n      // hidden input for storing the current HTML value of the div\n      this.inputId = `${this.id}-input`;\n      // console.log(\"build plugin: this\",this)\n      this.input = this.markup(\"input\", null, {\n        name: name,\n        id: this.inputId,\n        type: \"hidden\",\n        value: (userData && userData[0]) || value || \"\"\n      });\n\n      const css = this.markup(\n        \"style\",\n        `\n        #${attrs.id} { height: auto; min-height: 6rem; padding-left: 0; padding-right: 0; }\n        #${attrs.id} div.ql-container { height: ${attrs.rows || 1}rem; }\n        #${attrs.id} p.help-text { margin-top: .5rem; }\n        `,\n        { type: \"text/css\" }\n      );\n      const wrapperAttrs = {...attrs, \"data-toolbar\": \"full\" };\n      // console.log(\"build value\", value, \"userData\", userData, \"attrs\", attrs, attrs.id, \"wrapperAttrs\", wrapperAttrs);\n      this.wrapper = this.markup(\"div\", null, wrapperAttrs);\n      return this.markup(\"div\", [css, this.input, this.wrapper], attrs);\n    }\n\n    /**\n     * When the element is rendered into the DOM, execute the following code to initialise it\n     * @param {Object} evt - event\n     * @return {Object} evt - event\n     */\n    onRender(evt) {\n      // const value = this.config.value || '';\n      if (window.fbEditors.richtext[this.id]) {\n        // console.log(\"todo destroy\", window.fbEditors.richtext[this.id]);\n        // window.fbEditors.richtext[this.id].richtext('destroy')\n      }\n\n      window.fbEditors.quill[this.id] = {};\n      const editor = window.fbEditors.quill[this.id];\n      // createQuillEditor does all the job to update the hidden input wrapper\n      editor.instance = createQuillEditor(this.wrapper);\n      // editor.data = new Delta();\n      // if (value) {\n      //   editor.instance.setContents(window.JSON.parse(this.parsedHtml(value)));\n      // }\n      // editor.instance.on('text-change', function(delta) {\n      //   console.log(\"text-change\", \"delta\", delta, \"editor\", editor);\n      // //   // editor.data = editor.data.compose(delta);\n      // });\n\n      // console.log(\"render! editor\", editor, \"this\", this, \"value\", value);\n      return evt;\n    }\n  }\n\n  // register Decidim richtext as a richtext control\n  controlTextarea.register(\"richtext\", controlRichtext, \"textarea\");\n})\n","require(\"formBuilder/dist/form-render.min.js\")\nimport \"src/decidim/decidim_awesome/forms/rich_text_plugin\"\n\nexport default class CustomFieldsRenderer { // eslint-disable-line no-unused-vars\n  constructor(containerSelector) {\n    this.containerSelector = containerSelector || \".proposal_custom_field:last\";\n    this.lang = this.getLang($(\"html\").attr(\"lang\"));\n  }\n\n  getLang(lang) {\n    const langs = {\n      // ar: 'ar-SA', // Not in decidim yet\n      \"ar\": \"ar-TN\",\n      \"ca\": \"ca-ES\",\n      \"cs\": \"cs-CZ\",\n      \"da\": \"da-DK\",\n      \"de\": \"de-DE\",\n      \"el\": \"el-GR\",\n      \"en\": \"en-US\",\n      \"es\": \"es-ES\",\n      \"fa\": \"fa-IR\",\n      \"fi\": \"fi-FI\",\n      \"fr\": \"fr-FR\",\n      \"he\": \"he-IL\",\n      \"hu\": \"hu-HU\",\n      \"it\": \"it-IT\",\n      \"ja\": \"ja-JP\",\n      \"my\": \"my-MM\",\n      \"nb\": \"nb-NO\",\n      \"nl\": \"nl-NL\",\n      \"pl\": \"pl-PL\",\n      \"pt\": \"pt-BR\",\n      \"qz\": \"qz-MM\",\n      \"ro\": \"ro-RO\",\n      \"ru\": \"ru-RU\",\n      \"sl\": \"sl-SI\",\n      \"th\": \"th-TH\",\n      \"tr\": \"tr-TR\",\n      \"uk\": \"uk-UA\",\n      \"vi\": \"vi-VN\",\n      \"zh-TW\": \"zh-TW\",\n      \"zh\": \"zh-CN\"\n    };\n    if (langs[lang]) {\n      return langs[lang];\n    }\n    if (langs[lang.substr(0, 2)]) {\n      return langs[lang.substr(0, 2)];\n    }\n    return \"en-US\";\n  }\n\n  /*\n  * Creates an XML document with a subset of html-compatible dl/dd/dt elements\n  * to store the custom fields answers\n  */\n  dataToXML(data) {\n    const $dl = $(\"<dl/>\");\n    let $dd = null, \n        $div = null, \n        $dt = null, \n        datum = null, \n        key = null, \n        label = null, \n        text = null, \n        val = null;\n    $dl.attr(\"class\", \"decidim_awesome-custom_fields\");\n    $dl.attr(\"data-generator\", \"decidim_awesome\");\n    $dl.attr(\"data-version\", window.DecidimAwesome.version);\n    for (key in data) { // eslint-disable-line guard-for-in\n      // console.log(\"get the data!\", key, data[key]);\n      // Richtext plugin does not saves userdata, so we get it from the hidden input\n      if (data[key].type === \"textarea\" && data[key].subtype === \"richtext\") {\n        data[key].userData = [$(`#${data[key].name}-input`).val()];\n      }\n      if (data[key].userData && data[key].userData.length) {\n        $dt = $(\"<dt/>\");\n        $dt.text(data[key].label);\n        $dt.attr(\"name\", data[key].name);\n        $dd = $(\"<dd/>\");\n        // console.log(\"data for\", key, data[key].name, data[key])\n        for (val in data[key].userData) { // eslint-disable-line guard-for-in\n          $div = $(\"<div/>\");\n          label = data[key].userData[val];\n          text = null;\n          if (data[key].values) {\n            datum = data[key].values.find((obj) => obj.value === label); // eslint-disable-line no-loop-func\n            if (datum) { // eslint-disable-line max-depth\n              text = label;\n              label = datum.label;\n            }\n          } else if (data[key].type === \"date\" && label) {\n            datum = new Date(label).toLocaleDateString();\n            if (datum) { // eslint-disable-line max-depth\n              text = label;\n              label = datum;\n            }\n          }\n          // console.log(\"userData\", text, \"label\", label, 'key', key, 'data', data)\n          if (data[key].type === \"textarea\" && data[key].subtype === \"richtext\") {\n            $div.html(label);\n          } else {\n            $div.text(label);\n          }\n          if (text) {\n            $div.attr(\"alt\", text);\n          }\n          $dd.append($div);\n        }\n        $dd.attr(\"id\", data[key].name);\n        $dd.attr(\"name\", data[key].type);\n        $dl.append($dt);\n        $dl.append($dd);\n      }\n    }\n    console.log(`<xml>${$dl[0].outerHTML}</xml>`)\n    return `<xml>${$dl[0].outerHTML}</xml>`;\n  }\n\n  fixBuggyFields() {\n    if (!this.$container) {\n      return false;\n    }\n\n    /**\n    * Hack to fix required checkboxes being reset\n    * Issue: https://github.com/Platoniq/decidim-module-decidim_awesome/issues/82\n    */\n    this.$container.find(\".formbuilder-checkbox-group\").each((_key, group) => {\n      const inputs = $(\".formbuilder-checkbox input\", group);\n      const data = this.spec.find((obj) => obj.type === \"checkbox-group\");\n      let values = data.userData;\n      if (!inputs.length || !data || !values) {\n        return;\n      }\n\n      inputs.each((_idx, input) => {\n        let index = values.indexOf(input.value);\n        if (index >= 0) {\n          values.splice(index, 1)\n          // setting checked=true do not makes the browser aware that the form is valid if the field is required\n          if (!input.checked){\n            $(input).trigger(\"click\");\n          }\n        } else if (input.checked){\n          $(input).trigger(\"click\");\n        }\n      });\n\n      // Fill \"other\" option\n      const otherOption = $(\".other-option\", inputs.parent())[0];\n      const otherVal = $(\".other-val\", inputs.parent())[0];\n      const otherText = values.join(\" \");\n\n      if (otherOption) {\n        if (otherText) {\n          otherOption.checked = true;\n          otherOption.value = otherText;\n          otherVal.value = otherText;\n        } else {\n          otherOption.checked = false;\n          otherOption.value = \"\";\n          otherVal.value = \"\";\n        }\n      }\n    });\n\n    /**\n    * Hack to fix required radio buttons \"other\" value\n    * Issue: https://github.com/Platoniq/decidim-module-decidim_awesome/issues/133\n    */\n    this.$container.find(\".formbuilder-radio input.other-val\").on(\"input\", (input) => {\n      const $input = $(input.currentTarget);\n      const $group = $input.closest(\".formbuilder-radio-group\");\n      $group.find(\"input\").each((_key, radio) => {\n        const name = $(radio).attr(\"name\");\n        if (name && name.endsWith(\"[]\")) {\n          $(radio).attr(\"name\", name.slice(0, -2));\n        }\n      });\n    });\n    return this;\n  }\n\n  // Saves xml to the hidden input\n  storeData() {\n    if (!this.$container) {\n      return false;\n    }\n    const $form = this.$container.closest(\"form\");\n    const $body = $form.find(`input[name=\"${this.$element.data(\"name\")}\"]`);\n    if ($body.length && this.instance) {\n      this.spec = this.instance.userData;\n      $body.val(this.dataToXML(this.spec));\n      this.$element.data(\"spec\", this.spec);\n    }\n    return this;\n  }\n\n  init($element) {\n    this.$element = $element;\n    this.spec = $element.data(\"spec\");\n    if (!this.$container) {\n      this.$container = $(this.containerSelector);\n    }\n    // console.log(\"init\", $element, \"this\", this)\n    // always use the last field (in case of multilang tabs we only render one form due a limitation of the library to handle several instances)\n    this.instance = this.$container.formRender({\n      i18n: {\n        locale: this.lang,\n        location: \"https://cdn.jsdelivr.net/npm/formbuilder-languages@1.1.0/\"\n      },\n      formData: this.spec,\n      render: true\n    });\n    this.fixBuggyFields();\n  }\n}\n","import CustomFieldsRenderer from \"src/decidim/decidim_awesome/forms/custom_fields_renderer\"\n\nconst customFieldsRenderers = window.DecidimAwesome.CustomFieldsRenderer || []\n\n$(() => {\n  // use admin multilang specs if exists\n  let $customFieldElements = $(\".proposal_custom_field\", \".tabs-title.is-active\");\n  if (!$customFieldElements.length) {\n    $customFieldElements = $(\".proposal_custom_field\");\n  }\n  $customFieldElements.each((index, element) => {\n    if(index >= customFieldsRenderers.length) {\n      const $element = $(element)\n      const renderer = new CustomFieldsRenderer(`#${$element.attr(\"id\")}`)\n      customFieldsRenderers.push(renderer);\n      renderer.init($element);\n      console.log(\"add\", index)\n    }\n  })\n\n  if(customFieldsRenderers.length > 0){\n    customFieldsRenderers[0].$container.closest(\"form\").on(\"submit\", (evt) => {\n        if (evt.target.checkValidity()) {\n          // save current editor\n          customFieldsRenderers.forEach(renderer => {\n            renderer.storeData()\n          })\n        } else {\n          evt.preventDefault();\n          evt.target.reportValidity();\n        }\n      });\n  }\n});\n\n\nwindow.DecidimAwesome.CustomFieldsRenderer = customFieldsRenderers;\n"],"names":["DecidimAwesome","window","quillFormats","fbControls","push","controlClass","allControlClasses","controlTextarea","textarea","controlRichtext","icon","i18n","default","fbEditors","richtext","this","config","value","userData","attrs","inputId","id","input","markup","name","type","css","rows","wrapperAttrs","wrapper","evt","quill","instance","container","toolbar","$","data","disabled","quillToolbar","list","addImage","header","allow_images_in_full_editor","allow_images_in_small_editor","modules","linebreak","handlers","lineBreakButtonHandler","$input","siblings","innerHTML","val","token","attr","imageResize","imageUpload","url","editor_uploader_path","method","withCredentials","headers","callbackOK","serverResponse","next","last","removeClass","callbackKO","serverError","msg","body","JSON","parse","message","console","error","$p","after","setTimeout","fadeOut","destroy","checkBeforeSend","file","addClass","Quill","formats","theme","disable","on","text","getText","event","CustomEvent","detail","getSelection","dispatchEvent","root","querySelectorAll","length","emptyParagraph","cleanHTML","replace","RegExp","emitter","emit","texts","drag_and_drop_image","createQuillEditor","register","require","CustomFieldsRenderer","containerSelector","lang","getLang","langs","substr","$dl","$dd","$div","$dt","datum","key","label","version","subtype","values","find","obj","Date","toLocaleDateString","html","append","log","outerHTML","$container","each","_key","group","inputs","_this","spec","_idx","index","indexOf","splice","checked","trigger","otherOption","parent","otherVal","otherText","join","currentTarget","closest","radio","endsWith","slice","$body","$element","dataToXML","formRender","locale","location","formData","render","fixBuggyFields","customFieldsRenderers","$customFieldElements","element","renderer","init","target","checkValidity","forEach","storeData","preventDefault","reportValidity"],"sourceRoot":""}