{"version":3,"file":"js/164-b7f55de843b442a897f2.js","mappings":"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","sources":["webpack://decidim_application/./vendor/bundle/ruby/2.7.0/bundler/gems/decidim-module-decidim_awesome-658d226e9ed1/app/packs/src/decidim/decidim_awesome/editors/editor.js","webpack://decidim_application/./vendor/bundle/ruby/2.7.0/bundler/gems/decidim-module-decidim_awesome-658d226e9ed1/app/packs/src/decidim/decidim_awesome/forms/rich_text_plugin.js","webpack://decidim_application/./vendor/bundle/ruby/2.7.0/bundler/gems/decidim-module-decidim_awesome-658d226e9ed1/app/packs/src/decidim/decidim_awesome/forms/custom_fields_renderer.js","webpack://decidim_application/./vendor/bundle/ruby/2.7.0/bundler/gems/decidim-module-decidim_awesome-658d226e9ed1/app/packs/src/decidim/decidim_awesome/proposals/custom_fields.js"],"sourcesContent":["/* eslint-disable require-jsdoc */\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\";\n\n// In 0.26 these files come with Decidim in the folder src/decidim/vendor so the awesome one's could be removed\nimport \"src/vendor/image-resize.min\"\nimport \"src/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, class_name) => (class_name.match(/(^|\\s)ql-\\S+/g) || []).join(\" \"));\n    $(container).removeClass((index, class_name) => (class_name.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\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 (e) { console.error(\"Parsing error\", e); }\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  });\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 t = 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;\">${t}</span>`);\n    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     * @returndefinition 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     */\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 wrapper_attrs = {...attrs, \"data-toolbar\": \"full\" };\n      // console.log(\"build value\", value, \"userData\", userData, \"attrs\", attrs, attrs.id, \"wrapper_attrs\", wrapper_attrs);\n      this.wrapper = this.markup(\"div\", null, wrapper_attrs);\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     */\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(container_selector) {\n    this.container_selector = container_selector || \".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, $div, $dt, key, l, label, text, val;\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) {\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) {\n          $div = $(\"<div/>\");\n          label = data[key].userData[val];\n          text = null;\n          if (data[key].values) {\n            l = data[key].values.find((v) => v.value == label);\n            if (l) {\n              text = label;\n              label = l.label;\n            }\n          } else if (data[key].type == \"date\" && label) {\n            l = new Date(label).toLocaleDateString();\n            if (l) {\n              text = label;\n              label = l;\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    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((a) => a.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).click();}\n        } else if (input.checked)\n        {$(input).click();}\n      });\n\n      // Fill \"other\" option\n      const other_option = $(\".other-option\", inputs.parent())[0];\n      const other_val = $(\".other-val\", inputs.parent())[0];\n      const other_text = values.join(\" \");\n\n      if (other_option) {\n        if (other_text) {\n          other_option.checked = true;\n          other_option.value = other_text;\n          other_val.value = other_text;\n        } else {\n          other_option.checked = false;\n          other_option.value = \"\";\n          other_val.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  }\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    // console.log(\"storeData spec\", this.spec, \"$body\", $body,\"$form\",$form,\"this\",this);\n  }\n\n  init($element) {\n    this.$element = $element;\n    this.spec = $element.data(\"spec\");\n    if (!this.$container) {\n      this.$container = $(this.container_selector);\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\nwindow.DecidimAwesome.CustomFieldsRenderer = window.DecidimAwesome.CustomFieldsRenderer || new CustomFieldsRenderer();\n\n$(() => {\n  // use admin multilang specs if exists\n  let $el = $(\"proposal_custom_field:first\", \".tabs-title.is-active\");\n  $el = $el.length\n    ? $el\n    : $(\".proposal_custom_field:first\");\n  window.DecidimAwesome.CustomFieldsRenderer.init($el);\n\n  window.DecidimAwesome.CustomFieldsRenderer.$container.closest(\"form\").on(\"submit\", (e) => {\n    if (e.target.checkValidity()) {\n      // save current editor\n      window.DecidimAwesome.CustomFieldsRenderer.storeData();\n    } else {\n      e.preventDefault();\n      e.target.reportValidity();\n    }\n  });\n});\n"],"names":["DecidimAwesome","window","quillFormats","controlClass","controlTextarea","allControlClasses","controlRichtext","icon","i18n","default","this","value","userData","attrs","inputId","input","markup","name","id","type","css","wrapper_attrs","wrapper","editor","container","toolbar","$","disabled","quillToolbar","list","addImage","header","modules","linebreak","handlers","lineBreakButtonHandler","$input","token","url","method","withCredentials","headers","callbackOK","next","serverResponse","callbackKO","msg","serverError","JSON","console","$p","setTimeout","checkBeforeSend","quill","Quill","formats","theme","text","event","CustomEvent","detail","createQuillEditor","evt","require","CustomFieldsRenderer","container_selector","lang","getLang","langs","data","l","$dl","$dt","$dd","$div","label","v","Date","$container","find","each","inputs","a","values","index","other_option","other_val","other_text","on","$group","$body","closest","$form","$element","spec","instance","dataToXML","formRender","locale","location","formData","render","fixBuggyFields","$el","e"],"sourceRoot":""}