{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///indico/modules/events/client/js/creation.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","155","exports","module","l","e","Promise","resolve","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","setupEventCreationDialog","options","$","extend","categoryField","protectionModeFields","initialCategory","checkAvailability","rbExcludedCategories","serverDefaultTimezone","messages","parseHTML","html","protectionMessage","class","css","marginTop","$createBooking","$availableMessage","$availablePrebookMessage","$conflictBookingMessage","$conflictPrebookingMessage","$conflictPrebookingPrebookMessage","$userBookingMessage","$userPrebookingMessage","$unbookableMessage","$cannotBookMessage","$bookingSwitch","$prebookingSwitch","$bookingSwitchPrebooking","$prebookingSwitchPrebooking","previousRoomId","$currentMessage","startDt","endDt","category","roomData","timezone","currentCategory","multipleOccurrences","updateProtectionMessage","filter","val","is_protected","elem","format","find","text","title","setLectureTimes","occurrence","moment","add","isCategoryExcluded","categoryId","some","excludedCategory","parseInt","id","addCalendarLink","$message","params","path","date","url","rbURL","prop","hideAvailability","resetCheckbox","hide","updateAvailability","isValid","isSame","isSameOrAfter","requestParams","room_id","start_dt","HTML5_FMT","DATETIME_LOCAL","end_dt","ajax","checkRoomAvailabilityURL","method","dataType","contentType","error","handleAjaxError","success","camelizeKeys","userBooking","userPrebooking","conflictBooking","unbookable","conflictPrebooking","canBook","String","checked","canPrebook","show","appendTo","closest","on","evt","cat","trigger","startDate","startTime","endDate","endTime","occurrencesVal","occurrences","JSON","parse","initAvailabilityValues","this","isBefore"],"mappings":"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","file":"js/module_events.creation.4d4d2e86.bundle.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t155: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// The chunk loading function for additional chunks\n \t// Since all referenced chunks are already included\n \t// in this file, this function is empty here.\n \t__webpack_require__.e = function requireEnsure() {\n \t\treturn Promise.resolve();\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/dist/\";\n\n \tvar jsonpArray = window[\"coreJsonp\"] = window[\"coreJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([1960,0]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","// This file is part of Indico.\n// Copyright (C) 2002 - 2021 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/* global handleAjaxError:false */\n\nimport moment from 'moment';\nimport rbURL from 'indico-url:rb.roombooking';\nimport checkRoomAvailabilityURL from 'indico-url:rb.check_room_available';\n\nimport {camelizeKeys} from 'indico/utils/case';\n\n/* eslint-disable import/unambiguous */\n(function(global) {\n global.setupEventCreationDialog = function setupEventCreationDialog(options) {\n options = $.extend(\n {\n categoryField: null,\n protectionModeFields: null,\n initialCategory: null,\n checkAvailability: false,\n rbExcludedCategories: null,\n serverDefaultTimezone: null,\n },\n options\n );\n\n const messages = $($.parseHTML($('#event-creation-protection-messages').html()));\n const protectionMessage = $('
', {class: 'form-group', css: {marginTop: '5px'}});\n\n const $createBooking = $('#event-creation-create_booking');\n const $availableMessage = $('#room-available');\n const $availablePrebookMessage = $('#room-available-prebook');\n const $conflictBookingMessage = $('#room-conflict-booking');\n const $conflictPrebookingMessage = $('#room-conflict-prebooking');\n const $conflictPrebookingPrebookMessage = $('#room-conflict-prebooking-prebook');\n const $userBookingMessage = $('#room-user-booking');\n const $userPrebookingMessage = $('#room-user-prebooking');\n const $unbookableMessage = $('#room-unbookable');\n const $cannotBookMessage = $('#room-cannot-book');\n const $bookingSwitch = $('#create-booking');\n const $prebookingSwitch = $('#create-prebooking');\n const $bookingSwitchPrebooking = $('#create-booking-over-prebooking');\n const $prebookingSwitchPrebooking = $('#create-prebooking-over-prebooking');\n\n let currentCategory = null;\n let previousRoomId, $currentMessage, startDt, endDt, category, roomData, timezone;\n let multipleOccurrences = false;\n\n protectionMessage.appendTo(options.protectionModeFields.closest('.form-field'));\n\n function updateProtectionMessage() {\n let mode = options.protectionModeFields.filter(':checked').val();\n if (mode === 'inheriting') {\n mode = currentCategory.is_protected ? 'inheriting-protected' : 'inheriting-public';\n }\n const elem = messages.filter('.{0}-protection-message'.format(mode));\n elem.find('.js-category-title').text(currentCategory.title);\n protectionMessage.html(elem);\n }\n\n options.categoryField.on('indico:categorySelected', (evt, cat) => {\n if (!currentCategory) {\n options.protectionModeFields.prop('disabled', false);\n options.protectionModeFields.filter('[value=inheriting]').prop('checked', true);\n }\n currentCategory = cat;\n updateProtectionMessage();\n });\n\n options.protectionModeFields.on('change', function() {\n updateProtectionMessage();\n });\n\n if (options.initialCategory) {\n options.categoryField.trigger('indico:categorySelected', [options.initialCategory]);\n } else {\n options.protectionModeFields.prop('disabled', true);\n }\n\n function setLectureTimes(occurrence) {\n startDt = moment(`${occurrence['date']} ${occurrence['time']}`, 'YYYY-MM-DD HH:mm');\n endDt = moment(startDt).add(occurrence['duration'], 'minutes');\n }\n\n function initAvailabilityValues() {\n const startDate = $('#event-creation-start_dt-datestorage').val();\n const startTime = $('#event-creation-start_dt-timestorage').val();\n const endDate = $('#event-creation-end_dt-datestorage').val();\n const endTime = $('#event-creation-end_dt-timestorage').val();\n const occurrencesVal = $('#event-creation-occurrences').val();\n const occurrences = occurrencesVal ? JSON.parse(occurrencesVal) : null;\n\n roomData = JSON.parse($('#event-creation-location_data').val());\n timezone = $('#event-creation-timezone').val();\n category = JSON.parse($('#event-creation-category').val());\n\n if (occurrences && occurrences.length === 1) {\n setLectureTimes(occurrences[0]);\n } else {\n startDt = moment(`${startDate} ${startTime}`, 'DD/MM/YYYY HH:mm');\n endDt = moment(`${endDate} ${endTime}`, 'DD/MM/YYYY HH:mm');\n }\n }\n\n function isCategoryExcluded(categoryId) {\n return options.rbExcludedCategories.some(excludedCategory => {\n return parseInt(excludedCategory.id, 10) === categoryId;\n });\n }\n\n function addCalendarLink($message) {\n const params = {\n path: 'calendar',\n date: startDt.format('YYYY-MM-DD'),\n text: roomData['room_name'],\n };\n const url = rbURL(params);\n $message.find('a').prop('href', url);\n }\n\n function hideAvailability(resetCheckbox) {\n if ($currentMessage) {\n if (resetCheckbox) {\n $('#availability-messages')\n .find(\"input[id^='create']\")\n .prop('checked', false);\n $createBooking.val('false');\n }\n $currentMessage.hide();\n }\n }\n\n function updateAvailability(resetCheckbox = false) {\n hideAvailability(resetCheckbox);\n\n if (\n !('room_id' in roomData) ||\n !startDt.isValid() ||\n !endDt.isValid() ||\n !startDt.isSame(endDt, 'day') ||\n startDt.isSameOrAfter(endDt) ||\n isCategoryExcluded(category['id']) ||\n timezone !== options.serverDefaultTimezone ||\n multipleOccurrences\n ) {\n $createBooking.val('false');\n return;\n }\n\n const requestParams = {\n room_id: roomData['room_id'],\n start_dt: startDt.format(moment.HTML5_FMT.DATETIME_LOCAL),\n end_dt: endDt.format(moment.HTML5_FMT.DATETIME_LOCAL),\n };\n\n $.ajax({\n url: checkRoomAvailabilityURL(requestParams),\n method: 'GET',\n dataType: 'json',\n contentType: 'application/json',\n error: handleAjaxError,\n success(data) {\n data = camelizeKeys(data);\n if (data.userBooking) {\n $createBooking.val('false');\n $currentMessage = $userBookingMessage;\n addCalendarLink($currentMessage);\n } else if (data.userPrebooking) {\n $createBooking.val('false');\n $currentMessage = $userPrebookingMessage;\n addCalendarLink($currentMessage);\n } else if (data.conflictBooking) {\n $createBooking.val('false');\n $currentMessage = $conflictBookingMessage;\n addCalendarLink($currentMessage);\n } else if (data.unbookable) {\n $createBooking.val('false');\n $currentMessage = $unbookableMessage;\n addCalendarLink($currentMessage);\n } else if (data.conflictPrebooking) {\n if (data.canBook) {\n $createBooking.val(String($bookingSwitchPrebooking[0].checked));\n $currentMessage = $conflictPrebookingMessage;\n addCalendarLink($currentMessage);\n } else if (data.canPrebook) {\n $createBooking.val(String($prebookingSwitchPrebooking[0].checked));\n $currentMessage = $conflictPrebookingPrebookMessage;\n addCalendarLink($currentMessage);\n } else {\n $createBooking.val('false');\n $currentMessage = $cannotBookMessage;\n }\n } else if (data.canBook) {\n $createBooking.val(String($bookingSwitch[0].checked));\n $currentMessage = $availableMessage;\n } else if (data.canPrebook) {\n $createBooking.val(String($prebookingSwitch[0].checked));\n $currentMessage = $availablePrebookMessage;\n } else {\n $createBooking.val('false');\n $currentMessage = $cannotBookMessage;\n }\n $currentMessage.show();\n },\n });\n }\n\n if (options.checkAvailability) {\n initAvailabilityValues();\n\n $('#event-creation-location_data').on('change', function() {\n roomData = JSON.parse($(this).val());\n if (previousRoomId !== roomData['room_id']) {\n previousRoomId = roomData['room_id'];\n updateAvailability(true);\n }\n });\n\n $('#event-creation-start_dt-datestorage').on('change', function() {\n const startDate = $(this).val();\n const startTime = $('#event-creation-start_dt-timestorage').val();\n const endDate = $('#event-creation-end_dt-datestorage').val();\n const endTime = $('#event-creation-end_dt-timestorage').val();\n startDt = moment(`${startDate} ${startTime}`, 'DD/MM/YYYY HH:mm');\n endDt = moment(`${endDate} ${endTime}`, 'DD/MM/YYYY HH:mm');\n // workaround for automatic end date update if start date is after end date\n if (endDt.isBefore(startDt)) {\n endDt = moment(`${startDate} ${endTime}`, 'DD/MM/YYYY HH:mm');\n }\n updateAvailability();\n });\n\n $('#event-creation-start_dt-timestorage').on('change', function() {\n const startDate = $('#event-creation-start_dt-datestorage').val();\n const startTime = $('#event-creation-start_dt-timestorage').val();\n startDt = moment(`${startDate} ${startTime}`, 'DD/MM/YYYY HH:mm');\n updateAvailability();\n });\n\n $('#event-creation-end_dt-datestorage').on('change', function() {\n const endDate = $(this).val();\n const endTime = $('#event-creation-end_dt-timestorage').val();\n endDt = moment(`${endDate} ${endTime}`, 'DD/MM/YYYY HH:mm');\n updateAvailability();\n });\n\n $('#event-creation-end_dt-timestorage').on('change', function() {\n const endDate = $('#event-creation-end_dt-datestorage').val();\n const endTime = $(this).val();\n endDt = moment(`${endDate} ${endTime}`, 'DD/MM/YYYY HH:mm');\n updateAvailability();\n });\n\n $('#event-creation-occurrences').on('change', function() {\n const occurrences = JSON.parse($(this).val());\n if (occurrences.length === 1) {\n setLectureTimes(occurrences[0]);\n multipleOccurrences = false;\n } else {\n multipleOccurrences = true;\n }\n updateAvailability();\n });\n\n $('#event-creation-timezone').on('change', function() {\n timezone = $(this).val();\n updateAvailability();\n });\n\n $('#event-creation-category').on('change', function() {\n category = JSON.parse($(this).val());\n updateAvailability();\n });\n\n $bookingSwitch\n .add($prebookingSwitch)\n .add($bookingSwitchPrebooking)\n .add($prebookingSwitchPrebooking)\n .on('change', function() {\n $createBooking.val(String(this.checked));\n });\n }\n };\n})(window);\n"],"sourceRoot":""}