{"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":""}