{"version":3,"file":"js/module_events.cloning.ec8d31d7.bundle.js","mappings":"oGA2IGA,OAnIMC,iBAAmB,WACxB,MAAMC,EAAiBC,EAAE,+BACnBC,EAAQD,EAAE,qBACVE,EAAcF,EAAE,gBAAgBG,OAChCC,EAAaH,EAAMI,KAAK,eACxBC,EAAeN,EAAE,iBAAiBG,OAClCI,EAAOR,EAAeS,KAAK,QAE3BC,EAAqBV,EAAeS,KAAK,sBAoBzCE,EAAcC,EAAEC,UAAS,SAASC,GACtC,MAAMC,EAAed,EAAE,wBACjBe,EAAiBf,EAAEgB,MAAMf,EAAMgB,kBAAkB,IAGlDJ,GAASE,IAAmBd,EAAMO,KAAK,kBAM5CP,EAAMO,KAAK,cAAeO,GAE1Bd,EAAMiB,WAAW,CACfC,IAAKpB,EAAeS,KAAK,eACzBY,OAAQ,OACRC,OAAAA,CAAQb,GACN,GAAIA,EAAKa,QAAS,CAChB,MAAMC,EAAapB,EAAYG,KAAK,eAC9BkB,EAAWrB,EAAYG,KAAK,aAClCiB,EAAWE,KACTC,GACGC,SACC,iCACA,kCACAlB,EAAKmB,OAENC,OAAOpB,EAAKmB,QAEjBrB,EAAaH,OACbD,EAAY2B,OACZzB,EAAW0B,SAAStB,EAAKmB,OACzBb,EAAaiB,KAAK,YAAavB,EAAKmB,OACpCzB,EAAYM,KAAK,cAAeA,EAAKwB,OACrCT,EAASO,OAAOtB,EAAKyB,kBACvB,MACE3B,EACGuB,OACAxB,KAAK,iBACL6B,KAxDY,iBADFC,EAyDO3B,EAAK2B,MAAMC,SAvD5BD,EAEAnC,EAAE,SAASqC,OAChBF,EAAMG,KAAI,SAASC,GACjB,MAAMC,EAAQxC,EAAE,YAAYqC,OAAOE,EAAK,IAClCE,EAAQzC,EAAE,QAAQqC,OACtBE,EAAK,GAAGD,KAAI,SAASF,GACnB,OAAOpC,EAAE,QAAQwB,KAAKY,EACxB,KAEF,OAAOpC,EAAE,SAASqC,OAAOG,EAAOC,EAClC,MA6CEvC,EAAYC,OA1DpB,IAAqBgC,CA4DjB,IAEJ,GAAG,KAEU,IAAT5B,IACFN,EAAMyC,GAAG,SAAU,gBAAiB/B,EAAEgC,QAAQjC,GAAa,IAC3DT,EAAMyC,GAAG,QAAS,SAAS,SAASE,GAClCA,EAAEC,iBACFnC,GAAY,EACd,KAGER,EAAY4C,QACdnC,EAAEoC,MAAMpC,EAAEgC,QAAQjC,GAAa,IAGpB,IAATH,IACFN,EAAMI,KAAK,8BAA8BqC,GAAG,SAAU,wBAAwB,WAC5E,MAAMM,EAAQhD,EAAEiD,MACVC,EAAezC,EAAmBuC,EAAMG,OACxCC,EAASJ,EAAMK,QAAQ,eAEzBL,EAAMjB,KAAK,WACTmB,EAAaI,UACfJ,EAAaI,SAASC,SAAQ,SAASC,GACrCJ,EAAO/C,KAAK,6BAA6BuB,OAAO4B,IAAazB,KAAK,WAAW,EAC/E,IAEOmB,EAAaO,aACtBP,EAAaO,YAAYF,SAAQ,SAASC,GACxCJ,EAAO/C,KAAK,cAAcuB,OAAO4B,IAAazB,KAAK,WAAW,EAChE,GAEJ,IAGA/B,EAAE,2DAA2D0D,QAAQ,UAErE1D,EAAE,iEAAiE0D,QAAQ,WAG7EtD,EAAWuD,KAAK,CACdC,MAAO,CACLC,QAAS,0BAEXhC,KAAM,CACJiC,MAAO,SAETC,OAAAA,GACE,MAAMC,EAAMhE,EAAE,QACRiE,EAAS/D,EAAYM,KAAK,eAAe8B,KAAI,SAASC,GAC1D,OAAOvC,EAAE,QAAQwB,KAAK0C,EAAO3B,EAAK4B,MAAMvC,OAAO,SACjD,IAKA,OAJAoC,EAAI3B,OAAO4B,EAAOG,MAAM,EAAG,KACvBH,EAAOnB,OAAS,IAClBkB,EAAI3B,OAAO,gBAEN2B,CACT,GAEJ,C","sources":["webpack:///indico/modules/events/client/js/cloning.js"],"sourcesContent":["// This file is part of Indico.\n// Copyright (C) 2002 - 2024 CERN\n//\n// Indico is free software; you can redistribute it and/or\n// modify it under the terms of the MIT License; see the\n// LICENSE file for more details.\n\n(function(global) {\n  global.setupCloneDialog = function setupCloneDialog() {\n    const $formContainer = $('#event-clone-form-container');\n    const $form = $('#event-clone-form');\n    const $eventCount = $('#event-count').hide();\n    const $eventList = $form.find('.event-list');\n    const $cloneErrors = $('#clone-errors').hide();\n    const step = $formContainer.data('step');\n\n    const clonerDependencies = $formContainer.data('clonerDependencies');\n\n    function errorToHTML(error) {\n      if (typeof error === 'string') {\n        return error;\n      } else {\n        return $('<div>').append(\n          error.map(function(item) {\n            const label = $('<strong>').append(item[0]);\n            const items = $('<ul>').append(\n              item[1].map(function(message) {\n                return $('<li>').text(message);\n              })\n            );\n            return $('<div>').append(label, items);\n          })\n        );\n      }\n    }\n\n    const updateCount = _.debounce(function(force) {\n      const $cloneButton = $('.clone-action-button');\n      const serializedForm = $.param($form.serializeArray(), true);\n\n      // make sure the form was actually changed\n      if (!force && serializedForm === $form.data('initialData')) {\n        return;\n      }\n\n      // set 'intiialData' by hand here, so that the if we're in a 'keyup'\n      // event, the successive 'change' event will receive the updated version\n      $form.data('initialData', serializedForm);\n\n      $form.ajaxSubmit({\n        url: $formContainer.data('preview-url'),\n        method: 'POST',\n        success(data) {\n          if (data.success) {\n            const $countText = $eventCount.find('.count-text');\n            const $lastDay = $eventCount.find('.last-day');\n            $countText.text(\n              $T\n                .ngettext(\n                  '{0} new event will be created.',\n                  '{0} new events will be created.',\n                  data.count\n                )\n                .format(data.count)\n            );\n            $cloneErrors.hide();\n            $eventCount.show();\n            $eventList.toggle(!!data.count);\n            $cloneButton.prop('disabled', !data.count);\n            $eventCount.data('event-dates', data.dates);\n            $lastDay.toggle(data.last_day_of_month);\n          } else {\n            $cloneErrors\n              .show()\n              .find('.message-text')\n              .html(errorToHTML(data.error.message));\n            $eventCount.hide();\n          }\n        },\n      });\n    }, 300);\n\n    if (step === 4) {\n      $form.on('change', 'select, input', _.partial(updateCount, false));\n      $form.on('keyup', 'input', function(e) {\n        e.preventDefault();\n        updateCount(false);\n      });\n    }\n\n    if ($eventCount.length) {\n      _.defer(_.partial(updateCount, true));\n    }\n\n    if (step === 2) {\n      $form.find('#form-group-selected_items').on('change', 'input[type=checkbox]', function() {\n        const $this = $(this);\n        const dependencies = clonerDependencies[$this.val()];\n        const $field = $this.closest('.form-field');\n\n        if ($this.prop('checked')) {\n          if (dependencies.requires) {\n            dependencies.requires.forEach(function(optionName) {\n              $field.find('[value={0}]:not(:disabled)'.format(optionName)).prop('checked', true);\n            });\n          }\n        } else if (dependencies.required_by) {\n          dependencies.required_by.forEach(function(optionName) {\n            $field.find('[value={0}]'.format(optionName)).prop('checked', false);\n          });\n        }\n      });\n\n      // first check requirements of checked items\n      $('#form-group-selected_items input[type=checkbox]:checked').trigger('change');\n      // then ensure that nothing is checked that shouldn't be checked\n      $('#form-group-selected_items input[type=checkbox]:not(:checked)').trigger('change');\n    }\n\n    $eventList.qtip({\n      style: {\n        classes: 'cloned-event-list-qtip',\n      },\n      show: {\n        event: 'click',\n      },\n      content() {\n        const $ul = $('<ul>');\n        const events = $eventCount.data('event-dates').map(function(item) {\n          return $('<li>').text(moment(item.date).format('ddd L'));\n        });\n        $ul.append(events.slice(0, 20));\n        if (events.length > 20) {\n          $ul.append('<li>...</li>');\n        }\n        return $ul;\n      },\n    });\n  };\n})(window);\n"],"names":["window","setupCloneDialog","$formContainer","$","$form","$eventCount","hide","$eventList","find","$cloneErrors","step","data","clonerDependencies","updateCount","_","debounce","force","$cloneButton","serializedForm","param","serializeArray","ajaxSubmit","url","method","success","$countText","$lastDay","text","$T","ngettext","count","format","show","toggle","prop","dates","last_day_of_month","html","error","message","append","map","item","label","items","on","partial","e","preventDefault","length","defer","$this","this","dependencies","val","$field","closest","requires","forEach","optionName","required_by","trigger","qtip","style","classes","event","content","$ul","events","moment","date","slice"],"sourceRoot":""}