diff --git a/calendar/amd/build/crud.min.js b/calendar/amd/build/crud.min.js index d44cd944c8f..aa747e1b9ca 100644 --- a/calendar/amd/build/crud.min.js +++ b/calendar/amd/build/crud.min.js @@ -1,2 +1,2 @@ -define ("core_calendar/crud",["jquery","core/str","core/notification","core/custom_interaction_events","core/modal","core/modal_registry","core/modal_factory","core/modal_events","core_calendar/modal_event_form","core_calendar/repository","core_calendar/events","core_calendar/modal_delete","core_calendar/selectors","core/pending"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){function o(d,e,f){var i=[{key:"deleteevent",component:"calendar"}];f=parseInt(f,10);var m,o=1.\n\n/**\n * A module to handle CRUD operations within the UI.\n *\n * @module core_calendar/crud\n * @package core_calendar\n * @copyright 2017 Andrew Nicols \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/str',\n 'core/notification',\n 'core/custom_interaction_events',\n 'core/modal',\n 'core/modal_registry',\n 'core/modal_factory',\n 'core/modal_events',\n 'core_calendar/modal_event_form',\n 'core_calendar/repository',\n 'core_calendar/events',\n 'core_calendar/modal_delete',\n 'core_calendar/selectors',\n 'core/pending',\n],\nfunction(\n $,\n Str,\n Notification,\n CustomEvents,\n Modal,\n ModalRegistry,\n ModalFactory,\n ModalEvents,\n ModalEventForm,\n CalendarRepository,\n CalendarEvents,\n ModalDelete,\n CalendarSelectors,\n Pending\n) {\n\n /**\n * Prepares the action for the summary modal's delete action.\n *\n * @param {Number} eventId The ID of the event.\n * @param {string} eventTitle The event title.\n * @param {Number} eventCount The number of events in the series.\n * @return {Promise}\n */\n function confirmDeletion(eventId, eventTitle, eventCount) {\n var deleteStrings = [\n {\n key: 'deleteevent',\n component: 'calendar'\n },\n ];\n\n eventCount = parseInt(eventCount, 10);\n var deletePromise;\n var isRepeatedEvent = eventCount > 1;\n if (isRepeatedEvent) {\n deleteStrings.push({\n key: 'confirmeventseriesdelete',\n component: 'calendar',\n param: {\n name: eventTitle,\n count: eventCount,\n },\n });\n\n deletePromise = ModalFactory.create(\n {\n type: ModalDelete.TYPE\n }\n );\n } else {\n deleteStrings.push({\n key: 'confirmeventdelete',\n component: 'calendar',\n param: eventTitle\n });\n\n\n deletePromise = ModalFactory.create(\n {\n type: ModalFactory.types.SAVE_CANCEL\n }\n );\n }\n\n var stringsPromise = Str.get_strings(deleteStrings);\n\n var finalPromise = $.when(stringsPromise, deletePromise)\n .then(function(strings, deleteModal) {\n deleteModal.setTitle(strings[0]);\n deleteModal.setBody(strings[1]);\n if (!isRepeatedEvent) {\n deleteModal.setSaveButtonText(strings[0]);\n }\n\n deleteModal.show();\n\n deleteModal.getRoot().on(ModalEvents.save, function() {\n var pendingPromise = new Pending('calendar/crud:initModal:deletedevent');\n CalendarRepository.deleteEvent(eventId, false)\n .then(function() {\n $('body').trigger(CalendarEvents.deleted, [eventId, false]);\n return;\n })\n .then(pendingPromise.resolve)\n .catch(Notification.exception);\n });\n\n deleteModal.getRoot().on(CalendarEvents.deleteAll, function() {\n var pendingPromise = new Pending('calendar/crud:initModal:deletedallevent');\n CalendarRepository.deleteEvent(eventId, true)\n .then(function() {\n $('body').trigger(CalendarEvents.deleted, [eventId, true]);\n return;\n })\n .then(pendingPromise.resolve)\n .catch(Notification.exception);\n });\n\n return deleteModal;\n })\n .catch(Notification.exception);\n\n return finalPromise;\n }\n\n /**\n * Create the event form modal for creating new events and\n * editing existing events.\n *\n * @method registerEventFormModal\n * @param {object} root The calendar root element\n * @return {object} The create modal promise\n */\n var registerEventFormModal = function(root) {\n var eventFormPromise = ModalFactory.create({\n type: ModalEventForm.TYPE,\n large: true\n });\n\n // Bind click event on the new event button.\n root.on('click', CalendarSelectors.actions.create, function(e) {\n eventFormPromise.then(function(modal) {\n var wrapper = root.find(CalendarSelectors.wrapper);\n\n var categoryId = wrapper.data('categoryid');\n if (typeof categoryId !== 'undefined') {\n modal.setCategoryId(categoryId);\n }\n\n // Attempt to find the cell for today.\n // If it can't be found, then use the start time of the first day on the calendar.\n var today = root.find(CalendarSelectors.today);\n var firstDay = root.find(CalendarSelectors.day);\n if (!today.length && firstDay.length) {\n modal.setStartTime(firstDay.data('newEventTimestamp'));\n }\n\n modal.setContextId(wrapper.data('contextId'));\n modal.setCourseId(wrapper.data('courseid'));\n modal.show();\n return;\n })\n .fail(Notification.exception);\n\n e.preventDefault();\n });\n\n root.on('click', CalendarSelectors.actions.edit, function(e) {\n e.preventDefault();\n var target = $(e.currentTarget),\n calendarWrapper = target.closest(CalendarSelectors.wrapper),\n eventWrapper = target.closest(CalendarSelectors.eventItem);\n\n eventFormPromise.then(function(modal) {\n // When something within the calendar tells us the user wants\n // to edit an event then show the event form modal.\n modal.setEventId(eventWrapper.data('eventId'));\n\n modal.setContextId(calendarWrapper.data('contextId'));\n modal.show();\n\n e.stopImmediatePropagation();\n return;\n }).fail(Notification.exception);\n });\n\n\n return eventFormPromise;\n };\n /**\n * Register the listeners required to remove the event.\n *\n * @param {jQuery} root\n */\n function registerRemove(root) {\n root.on('click', CalendarSelectors.actions.remove, function(e) {\n // Fetch the event title, count, and pass them into the new dialogue.\n var eventSource = $(this).closest(CalendarSelectors.eventItem);\n var eventId = eventSource.data('eventId'),\n eventTitle = eventSource.data('eventTitle'),\n eventCount = eventSource.data('eventCount');\n confirmDeletion(eventId, eventTitle, eventCount);\n\n e.preventDefault();\n });\n }\n\n /**\n * Register the listeners required to edit the event.\n *\n * @param {jQuery} root\n * @param {Promise} eventFormModalPromise\n * @returns {Promise}\n */\n function registerEditListeners(root, eventFormModalPromise) {\n eventFormModalPromise\n .then(function(modal) {\n // When something within the calendar tells us the user wants\n // to edit an event then show the event form modal.\n $('body').on(CalendarEvents.editEvent, function(e, eventId) {\n var calendarWrapper = root.find(CalendarSelectors.wrapper);\n modal.setEventId(eventId);\n modal.setContextId(calendarWrapper.data('contextId'));\n modal.show();\n\n e.stopImmediatePropagation();\n });\n return;\n })\n .fail(Notification.exception);\n\n return eventFormModalPromise;\n }\n\n return {\n registerRemove: registerRemove,\n registerEditListeners: registerEditListeners,\n registerEventFormModal: registerEventFormModal\n };\n});\n"],"file":"crud.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/crud.js"],"names":["define","$","Str","Notification","CustomEvents","Modal","ModalRegistry","ModalFactory","ModalEvents","ModalEventForm","CalendarRepository","CalendarEvents","ModalDelete","CalendarSelectors","Pending","confirmDeletion","eventId","eventTitle","eventCount","deleteStrings","key","component","parseInt","deletePromise","isRepeatedEvent","push","param","name","count","create","type","TYPE","types","SAVE_CANCEL","stringsPromise","get_strings","finalPromise","when","then","strings","deleteModal","setTitle","setBody","setSaveButtonText","show","getRoot","on","save","pendingPromise","deleteEvent","trigger","deleted","resolve","catch","exception","deleteAll","registerRemove","root","actions","remove","e","eventSource","closest","eventItem","data","preventDefault","registerEditListeners","eventFormModalPromise","modal","editEvent","calendarWrapper","find","wrapper","setEventId","setContextId","stopImmediatePropagation","registerEventFormModal","eventFormPromise","large","categoryId","setCategoryId","today","firstDay","day","length","setStartTime","setCourseId","fail","edit","target","currentTarget","eventWrapper"],"mappings":"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","sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * A module to handle CRUD operations within the UI.\n *\n * @module core_calendar/crud\n * @package core_calendar\n * @copyright 2017 Andrew Nicols \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/str',\n 'core/notification',\n 'core/custom_interaction_events',\n 'core/modal',\n 'core/modal_registry',\n 'core/modal_factory',\n 'core/modal_events',\n 'core_calendar/modal_event_form',\n 'core_calendar/repository',\n 'core_calendar/events',\n 'core_calendar/modal_delete',\n 'core_calendar/selectors',\n 'core/pending',\n],\nfunction(\n $,\n Str,\n Notification,\n CustomEvents,\n Modal,\n ModalRegistry,\n ModalFactory,\n ModalEvents,\n ModalEventForm,\n CalendarRepository,\n CalendarEvents,\n ModalDelete,\n CalendarSelectors,\n Pending\n) {\n\n /**\n * Prepares the action for the summary modal's delete action.\n *\n * @param {Number} eventId The ID of the event.\n * @param {string} eventTitle The event title.\n * @param {Number} eventCount The number of events in the series.\n * @return {Promise}\n */\n function confirmDeletion(eventId, eventTitle, eventCount) {\n var deleteStrings = [\n {\n key: 'deleteevent',\n component: 'calendar'\n },\n ];\n\n eventCount = parseInt(eventCount, 10);\n var deletePromise;\n var isRepeatedEvent = eventCount > 1;\n if (isRepeatedEvent) {\n deleteStrings.push({\n key: 'confirmeventseriesdelete',\n component: 'calendar',\n param: {\n name: eventTitle,\n count: eventCount,\n },\n });\n\n deletePromise = ModalFactory.create(\n {\n type: ModalDelete.TYPE\n }\n );\n } else {\n deleteStrings.push({\n key: 'confirmeventdelete',\n component: 'calendar',\n param: eventTitle\n });\n\n\n deletePromise = ModalFactory.create(\n {\n type: ModalFactory.types.SAVE_CANCEL\n }\n );\n }\n\n var stringsPromise = Str.get_strings(deleteStrings);\n\n var finalPromise = $.when(stringsPromise, deletePromise)\n .then(function(strings, deleteModal) {\n deleteModal.setTitle(strings[0]);\n deleteModal.setBody(strings[1]);\n if (!isRepeatedEvent) {\n deleteModal.setSaveButtonText(strings[0]);\n }\n\n deleteModal.show();\n\n deleteModal.getRoot().on(ModalEvents.save, function() {\n var pendingPromise = new Pending('calendar/crud:initModal:deletedevent');\n CalendarRepository.deleteEvent(eventId, false)\n .then(function() {\n $('body').trigger(CalendarEvents.deleted, [eventId, false]);\n return;\n })\n .then(pendingPromise.resolve)\n .catch(Notification.exception);\n });\n\n deleteModal.getRoot().on(CalendarEvents.deleteAll, function() {\n var pendingPromise = new Pending('calendar/crud:initModal:deletedallevent');\n CalendarRepository.deleteEvent(eventId, true)\n .then(function() {\n $('body').trigger(CalendarEvents.deleted, [eventId, true]);\n return;\n })\n .then(pendingPromise.resolve)\n .catch(Notification.exception);\n });\n\n return deleteModal;\n })\n .catch(Notification.exception);\n\n return finalPromise;\n }\n\n /**\n * Create the event form modal for creating new events and\n * editing existing events.\n *\n * @method registerEventFormModal\n * @param {object} root The calendar root element\n * @return {object} The create modal promise\n */\n var registerEventFormModal = function(root) {\n var eventFormPromise = ModalFactory.create({\n type: ModalEventForm.TYPE,\n large: true\n });\n\n // Bind click event on the new event button.\n root.on('click', CalendarSelectors.actions.create, function(e) {\n eventFormPromise.then(function(modal) {\n var wrapper = root.find(CalendarSelectors.wrapper);\n\n var categoryId = wrapper.data('categoryid');\n if (typeof categoryId !== 'undefined') {\n modal.setCategoryId(categoryId);\n }\n\n // Attempt to find the cell for today.\n // If it can't be found, then use the start time of the first day on the calendar.\n var today = root.find(CalendarSelectors.today);\n var firstDay = root.find(CalendarSelectors.day);\n if (!today.length && firstDay.length) {\n modal.setStartTime(firstDay.data('newEventTimestamp'));\n }\n\n modal.setContextId(wrapper.data('contextId'));\n modal.setCourseId(wrapper.data('courseid'));\n modal.show();\n return;\n })\n .fail(Notification.exception);\n\n e.preventDefault();\n });\n\n root.on('click', CalendarSelectors.actions.edit, function(e) {\n e.preventDefault();\n var target = $(e.currentTarget),\n calendarWrapper = target.closest(CalendarSelectors.wrapper),\n eventWrapper = target.closest(CalendarSelectors.eventItem);\n\n eventFormPromise.then(function(modal) {\n // When something within the calendar tells us the user wants\n // to edit an event then show the event form modal.\n modal.setEventId(eventWrapper.data('eventId'));\n\n modal.setContextId(calendarWrapper.data('contextId'));\n modal.show();\n\n e.stopImmediatePropagation();\n return;\n }).fail(Notification.exception);\n });\n\n\n return eventFormPromise;\n };\n /**\n * Register the listeners required to remove the event.\n *\n * @param {jQuery} root\n */\n function registerRemove(root) {\n root.on('click', CalendarSelectors.actions.remove, function(e) {\n // Fetch the event title, count, and pass them into the new dialogue.\n var eventSource = $(this).closest(CalendarSelectors.eventItem);\n var eventId = eventSource.data('eventId'),\n eventTitle = eventSource.data('eventTitle'),\n eventCount = eventSource.data('eventCount');\n confirmDeletion(eventId, eventTitle, eventCount);\n\n e.preventDefault();\n });\n }\n\n /**\n * Register the listeners required to edit the event.\n *\n * @param {jQuery} root\n * @param {Promise} eventFormModalPromise\n * @returns {Promise}\n */\n function registerEditListeners(root, eventFormModalPromise) {\n var pendingPromise = new Pending('core_calendar/crud:registerEditListeners');\n\n return eventFormModalPromise\n .then(function(modal) {\n // When something within the calendar tells us the user wants\n // to edit an event then show the event form modal.\n $('body').on(CalendarEvents.editEvent, function(e, eventId) {\n var calendarWrapper = root.find(CalendarSelectors.wrapper);\n modal.setEventId(eventId);\n modal.setContextId(calendarWrapper.data('contextId'));\n modal.show();\n\n e.stopImmediatePropagation();\n });\n return modal;\n })\n .then(function(modal) {\n pendingPromise.resolve();\n\n return modal;\n })\n .catch(Notification.exception);\n }\n\n return {\n registerRemove: registerRemove,\n registerEditListeners: registerEditListeners,\n registerEventFormModal: registerEventFormModal\n };\n});\n"],"file":"crud.min.js"} \ No newline at end of file diff --git a/calendar/amd/build/summary_modal.min.js b/calendar/amd/build/summary_modal.min.js index 94131507805..dcba8cd4e5e 100644 --- a/calendar/amd/build/summary_modal.min.js +++ b/calendar/amd/build/summary_modal.min.js @@ -1,2 +1,2 @@ -define ("core_calendar/summary_modal",["jquery","core/str","core/notification","core/custom_interaction_events","core/modal","core/modal_registry","core/modal_factory","core/modal_events","core_calendar/repository","core_calendar/events","core_calendar/crud"],function(a,b,c,d,e,f,g,h,i,j,k){var l=!1,m={ROOT:"[data-region='summary-modal-container']",EDIT_BUTTON:"[data-action=\"edit\"]",DELETE_BUTTON:"[data-action=\"delete\"]"},n=function(a){e.call(this,a)};n.TYPE="core_calendar-event_summary";n.prototype=Object.create(e.prototype);n.prototype.constructor=n;n.prototype.getEditButton=function(){if("undefined"==typeof this.editButton){this.editButton=this.getFooter().find(m.EDIT_BUTTON)}return this.editButton};n.prototype.getDeleteButton=function(){if("undefined"==typeof this.deleteButton){this.deleteButton=this.getFooter().find(m.DELETE_BUTTON)}return this.deleteButton};n.prototype.getEventId=function(){return this.getBody().find(m.ROOT).attr("data-event-id")};n.prototype.getEventTitle=function(){return this.getBody().find(m.ROOT).attr("data-event-title")};n.prototype.getEventCount=function(){return this.getBody().find(m.ROOT).attr("data-event-count")};n.prototype.getEditUrl=function(){return this.getBody().find(m.ROOT).attr("data-edit-url")};n.prototype.isActionEvent=function(){return"true"==this.getBody().find(m.ROOT).attr("data-action-event")};n.prototype.registerEventListeners=function(){e.prototype.registerEventListeners.call(this);this.getRoot().on(h.bodyRendered,function(){this.getModal().data({eventTitle:this.getEventTitle(),eventId:this.getEventId(),eventCount:this.getEventCount()}).attr("data-type","event");k.registerRemove(this.getModal())}.bind(this));a("body").on(j.deleted,function(){this.hide()}.bind(this));d.define(this.getEditButton(),[d.events.activate]);this.getEditButton().on(d.events.activate,function(b,c){if(this.isActionEvent()){a("body").trigger(j.editActionEvent,[this.getEditUrl()])}else{a("body").trigger(j.editEvent,[this.getEventId()])}this.hide();b.preventDefault();b.stopPropagation();c.originalEvent.preventDefault();c.originalEvent.stopPropagation()}.bind(this))};if(!l){f.register(n.TYPE,n,"core_calendar/event_summary_modal");l=!0}return n}); +define ("core_calendar/summary_modal",["jquery","core/str","core/notification","core/custom_interaction_events","core/modal","core/modal_registry","core/modal_factory","core/modal_events","core_calendar/repository","core_calendar/events","core_calendar/crud"],function(a,b,c,d,e,f,g,h,i,j,k){var l=!1,m={ROOT:"[data-region='summary-modal-container']",EDIT_BUTTON:"[data-action=\"edit\"]",DELETE_BUTTON:"[data-action=\"delete\"]"},n=function(a){e.call(this,a)};n.TYPE="core_calendar-event_summary";n.prototype=Object.create(e.prototype);n.prototype.constructor=n;n.prototype.getEditButton=function(){if("undefined"==typeof this.editButton){this.editButton=this.getFooter().find(m.EDIT_BUTTON)}return this.editButton};n.prototype.getDeleteButton=function(){if("undefined"==typeof this.deleteButton){this.deleteButton=this.getFooter().find(m.DELETE_BUTTON)}return this.deleteButton};n.prototype.getEventId=function(){return this.getBody().find(m.ROOT).attr("data-event-id")};n.prototype.getEventTitle=function(){return this.getBody().find(m.ROOT).attr("data-event-title")};n.prototype.getEventCount=function(){return this.getBody().find(m.ROOT).attr("data-event-count")};n.prototype.getEditUrl=function(){return this.getBody().find(m.ROOT).attr("data-edit-url")};n.prototype.isActionEvent=function(){return"true"==this.getBody().find(m.ROOT).attr("data-action-event")};n.prototype.registerEventListeners=function(){e.prototype.registerEventListeners.call(this);M.util.js_pending("core_calendar/summary_modal:registerEventListeners:bodyRendered");this.getRoot().on(h.bodyRendered,function(){this.getModal().data({eventTitle:this.getEventTitle(),eventId:this.getEventId(),eventCount:this.getEventCount()}).attr("data-type","event");k.registerRemove(this.getModal());M.util.js_complete("core_calendar/summary_modal:registerEventListeners:bodyRendered")}.bind(this));a("body").on(j.deleted,function(){this.hide()}.bind(this));d.define(this.getEditButton(),[d.events.activate]);this.getEditButton().on(d.events.activate,function(b,c){if(this.isActionEvent()){a("body").trigger(j.editActionEvent,[this.getEditUrl()])}else{a("body").trigger(j.editEvent,[this.getEventId()])}this.hide();b.preventDefault();b.stopPropagation();c.originalEvent.preventDefault();c.originalEvent.stopPropagation()}.bind(this))};if(!l){f.register(n.TYPE,n,"core_calendar/event_summary_modal");l=!0}return n}); //# sourceMappingURL=summary_modal.min.js.map diff --git a/calendar/amd/build/summary_modal.min.js.map b/calendar/amd/build/summary_modal.min.js.map index d0c92b5d7ca..9146ef87058 100644 --- a/calendar/amd/build/summary_modal.min.js.map +++ b/calendar/amd/build/summary_modal.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/summary_modal.js"],"names":["define","$","Str","Notification","CustomEvents","Modal","ModalRegistry","ModalFactory","ModalEvents","CalendarRepository","CalendarEvents","CalendarCrud","registered","SELECTORS","ROOT","EDIT_BUTTON","DELETE_BUTTON","ModalEventSummary","root","call","TYPE","prototype","Object","create","constructor","getEditButton","editButton","getFooter","find","getDeleteButton","deleteButton","getEventId","getBody","attr","getEventTitle","getEventCount","getEditUrl","isActionEvent","registerEventListeners","getRoot","on","bodyRendered","getModal","data","eventTitle","eventId","eventCount","registerRemove","bind","deleted","hide","events","activate","e","trigger","editActionEvent","editEvent","preventDefault","stopPropagation","originalEvent","register"],"mappings":"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","sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * A javascript module to handle summary modal.\n *\n * @module core_calendar/summary_modal\n * @package core_calendar\n * @copyright 2017 Simey Lameze \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/str',\n 'core/notification',\n 'core/custom_interaction_events',\n 'core/modal',\n 'core/modal_registry',\n 'core/modal_factory',\n 'core/modal_events',\n 'core_calendar/repository',\n 'core_calendar/events',\n 'core_calendar/crud',\n],\nfunction(\n $,\n Str,\n Notification,\n CustomEvents,\n Modal,\n ModalRegistry,\n ModalFactory,\n ModalEvents,\n CalendarRepository,\n CalendarEvents,\n CalendarCrud\n) {\n\n var registered = false;\n var SELECTORS = {\n ROOT: \"[data-region='summary-modal-container']\",\n EDIT_BUTTON: '[data-action=\"edit\"]',\n DELETE_BUTTON: '[data-action=\"delete\"]',\n };\n\n /**\n * Constructor for the Modal.\n *\n * @param {object} root The root jQuery element for the modal\n */\n var ModalEventSummary = function(root) {\n Modal.call(this, root);\n };\n\n ModalEventSummary.TYPE = 'core_calendar-event_summary';\n ModalEventSummary.prototype = Object.create(Modal.prototype);\n ModalEventSummary.prototype.constructor = ModalEventSummary;\n\n /**\n * Get the edit button element from the footer. The button is cached\n * as it's not expected to change.\n *\n * @method getEditButton\n * @return {object} button element\n */\n ModalEventSummary.prototype.getEditButton = function() {\n if (typeof this.editButton == 'undefined') {\n this.editButton = this.getFooter().find(SELECTORS.EDIT_BUTTON);\n }\n\n return this.editButton;\n };\n\n /**\n * Get the delete button element from the footer. The button is cached\n * as it's not expected to change.\n *\n * @method getDeleteButton\n * @return {object} button element\n */\n ModalEventSummary.prototype.getDeleteButton = function() {\n if (typeof this.deleteButton == 'undefined') {\n this.deleteButton = this.getFooter().find(SELECTORS.DELETE_BUTTON);\n }\n\n return this.deleteButton;\n };\n\n /**\n * Get the id for the event being shown in this modal. This value is\n * not cached because it will change depending on which event is\n * being displayed.\n *\n * @method getEventId\n * @return {int}\n */\n ModalEventSummary.prototype.getEventId = function() {\n return this.getBody().find(SELECTORS.ROOT).attr('data-event-id');\n };\n\n /**\n * Get the title for the event being shown in this modal. This value is\n * not cached because it will change depending on which event is\n * being displayed.\n *\n * @method getEventTitle\n * @return {String}\n */\n ModalEventSummary.prototype.getEventTitle = function() {\n return this.getBody().find(SELECTORS.ROOT).attr('data-event-title');\n };\n\n /**\n * Get the number of events in the series for the event being shown in\n * this modal. This value is not cached because it will change\n * depending on which event is being displayed.\n *\n * @method getEventCount\n * @return {int}\n */\n ModalEventSummary.prototype.getEventCount = function() {\n return this.getBody().find(SELECTORS.ROOT).attr('data-event-count');\n };\n\n /**\n * Get the url for the event being shown in this modal.\n *\n * @method getEventUrl\n * @return {String}\n */\n ModalEventSummary.prototype.getEditUrl = function() {\n return this.getBody().find(SELECTORS.ROOT).attr('data-edit-url');\n };\n\n /**\n * Is this an action event.\n *\n * @method getEventUrl\n * @return {String}\n */\n ModalEventSummary.prototype.isActionEvent = function() {\n return (this.getBody().find(SELECTORS.ROOT).attr('data-action-event') == 'true');\n };\n\n /**\n * Set up all of the event handling for the modal.\n *\n * @method registerEventListeners\n */\n ModalEventSummary.prototype.registerEventListeners = function() {\n // Apply parent event listeners.\n Modal.prototype.registerEventListeners.call(this);\n\n // We have to wait for the modal to finish rendering in order to ensure that\n // the data-event-title property is available to use as the modal title.\n this.getRoot().on(ModalEvents.bodyRendered, function() {\n this.getModal().data({\n eventTitle: this.getEventTitle(),\n eventId: this.getEventId(),\n eventCount: this.getEventCount(),\n })\n .attr('data-type', 'event');\n CalendarCrud.registerRemove(this.getModal());\n\n }.bind(this));\n\n $('body').on(CalendarEvents.deleted, function() {\n // Close the dialogue on delete.\n this.hide();\n }.bind(this));\n\n CustomEvents.define(this.getEditButton(), [\n CustomEvents.events.activate\n ]);\n\n this.getEditButton().on(CustomEvents.events.activate, function(e, data) {\n if (this.isActionEvent()) {\n // Action events cannot be edited on the event form and must be redirected to the module UI.\n $('body').trigger(CalendarEvents.editActionEvent, [this.getEditUrl()]);\n } else {\n // When the edit button is clicked we fire an event for the calendar UI to handle.\n // We don't care how the UI chooses to handle it.\n $('body').trigger(CalendarEvents.editEvent, [this.getEventId()]);\n }\n\n // There is nothing else for us to do so let's hide.\n this.hide();\n\n // We've handled this event so no need to propagate it.\n e.preventDefault();\n e.stopPropagation();\n data.originalEvent.preventDefault();\n data.originalEvent.stopPropagation();\n }.bind(this));\n };\n\n // Automatically register with the modal registry the first time this module is imported so that you can create modals\n // of this type using the modal factory.\n if (!registered) {\n ModalRegistry.register(ModalEventSummary.TYPE, ModalEventSummary, 'core_calendar/event_summary_modal');\n registered = true;\n }\n\n return ModalEventSummary;\n});\n"],"file":"summary_modal.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/summary_modal.js"],"names":["define","$","Str","Notification","CustomEvents","Modal","ModalRegistry","ModalFactory","ModalEvents","CalendarRepository","CalendarEvents","CalendarCrud","registered","SELECTORS","ROOT","EDIT_BUTTON","DELETE_BUTTON","ModalEventSummary","root","call","TYPE","prototype","Object","create","constructor","getEditButton","editButton","getFooter","find","getDeleteButton","deleteButton","getEventId","getBody","attr","getEventTitle","getEventCount","getEditUrl","isActionEvent","registerEventListeners","M","util","js_pending","getRoot","on","bodyRendered","getModal","data","eventTitle","eventId","eventCount","registerRemove","js_complete","bind","deleted","hide","events","activate","e","trigger","editActionEvent","editEvent","preventDefault","stopPropagation","originalEvent","register"],"mappings":"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","sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * A javascript module to handle summary modal.\n *\n * @module core_calendar/summary_modal\n * @package core_calendar\n * @copyright 2017 Simey Lameze \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/str',\n 'core/notification',\n 'core/custom_interaction_events',\n 'core/modal',\n 'core/modal_registry',\n 'core/modal_factory',\n 'core/modal_events',\n 'core_calendar/repository',\n 'core_calendar/events',\n 'core_calendar/crud',\n],\nfunction(\n $,\n Str,\n Notification,\n CustomEvents,\n Modal,\n ModalRegistry,\n ModalFactory,\n ModalEvents,\n CalendarRepository,\n CalendarEvents,\n CalendarCrud\n) {\n\n var registered = false;\n var SELECTORS = {\n ROOT: \"[data-region='summary-modal-container']\",\n EDIT_BUTTON: '[data-action=\"edit\"]',\n DELETE_BUTTON: '[data-action=\"delete\"]',\n };\n\n /**\n * Constructor for the Modal.\n *\n * @param {object} root The root jQuery element for the modal\n */\n var ModalEventSummary = function(root) {\n Modal.call(this, root);\n };\n\n ModalEventSummary.TYPE = 'core_calendar-event_summary';\n ModalEventSummary.prototype = Object.create(Modal.prototype);\n ModalEventSummary.prototype.constructor = ModalEventSummary;\n\n /**\n * Get the edit button element from the footer. The button is cached\n * as it's not expected to change.\n *\n * @method getEditButton\n * @return {object} button element\n */\n ModalEventSummary.prototype.getEditButton = function() {\n if (typeof this.editButton == 'undefined') {\n this.editButton = this.getFooter().find(SELECTORS.EDIT_BUTTON);\n }\n\n return this.editButton;\n };\n\n /**\n * Get the delete button element from the footer. The button is cached\n * as it's not expected to change.\n *\n * @method getDeleteButton\n * @return {object} button element\n */\n ModalEventSummary.prototype.getDeleteButton = function() {\n if (typeof this.deleteButton == 'undefined') {\n this.deleteButton = this.getFooter().find(SELECTORS.DELETE_BUTTON);\n }\n\n return this.deleteButton;\n };\n\n /**\n * Get the id for the event being shown in this modal. This value is\n * not cached because it will change depending on which event is\n * being displayed.\n *\n * @method getEventId\n * @return {int}\n */\n ModalEventSummary.prototype.getEventId = function() {\n return this.getBody().find(SELECTORS.ROOT).attr('data-event-id');\n };\n\n /**\n * Get the title for the event being shown in this modal. This value is\n * not cached because it will change depending on which event is\n * being displayed.\n *\n * @method getEventTitle\n * @return {String}\n */\n ModalEventSummary.prototype.getEventTitle = function() {\n return this.getBody().find(SELECTORS.ROOT).attr('data-event-title');\n };\n\n /**\n * Get the number of events in the series for the event being shown in\n * this modal. This value is not cached because it will change\n * depending on which event is being displayed.\n *\n * @method getEventCount\n * @return {int}\n */\n ModalEventSummary.prototype.getEventCount = function() {\n return this.getBody().find(SELECTORS.ROOT).attr('data-event-count');\n };\n\n /**\n * Get the url for the event being shown in this modal.\n *\n * @method getEventUrl\n * @return {String}\n */\n ModalEventSummary.prototype.getEditUrl = function() {\n return this.getBody().find(SELECTORS.ROOT).attr('data-edit-url');\n };\n\n /**\n * Is this an action event.\n *\n * @method getEventUrl\n * @return {String}\n */\n ModalEventSummary.prototype.isActionEvent = function() {\n return (this.getBody().find(SELECTORS.ROOT).attr('data-action-event') == 'true');\n };\n\n /**\n * Set up all of the event handling for the modal.\n *\n * @method registerEventListeners\n */\n ModalEventSummary.prototype.registerEventListeners = function() {\n // Apply parent event listeners.\n Modal.prototype.registerEventListeners.call(this);\n\n // We have to wait for the modal to finish rendering in order to ensure that\n // the data-event-title property is available to use as the modal title.\n M.util.js_pending('core_calendar/summary_modal:registerEventListeners:bodyRendered');\n this.getRoot().on(ModalEvents.bodyRendered, function() {\n this.getModal().data({\n eventTitle: this.getEventTitle(),\n eventId: this.getEventId(),\n eventCount: this.getEventCount(),\n })\n .attr('data-type', 'event');\n CalendarCrud.registerRemove(this.getModal());\n M.util.js_complete('core_calendar/summary_modal:registerEventListeners:bodyRendered');\n }.bind(this));\n\n $('body').on(CalendarEvents.deleted, function() {\n // Close the dialogue on delete.\n this.hide();\n }.bind(this));\n\n CustomEvents.define(this.getEditButton(), [\n CustomEvents.events.activate\n ]);\n\n this.getEditButton().on(CustomEvents.events.activate, function(e, data) {\n if (this.isActionEvent()) {\n // Action events cannot be edited on the event form and must be redirected to the module UI.\n $('body').trigger(CalendarEvents.editActionEvent, [this.getEditUrl()]);\n } else {\n // When the edit button is clicked we fire an event for the calendar UI to handle.\n // We don't care how the UI chooses to handle it.\n $('body').trigger(CalendarEvents.editEvent, [this.getEventId()]);\n }\n\n // There is nothing else for us to do so let's hide.\n this.hide();\n\n // We've handled this event so no need to propagate it.\n e.preventDefault();\n e.stopPropagation();\n data.originalEvent.preventDefault();\n data.originalEvent.stopPropagation();\n }.bind(this));\n };\n\n // Automatically register with the modal registry the first time this module is imported so that you can create modals\n // of this type using the modal factory.\n if (!registered) {\n ModalRegistry.register(ModalEventSummary.TYPE, ModalEventSummary, 'core_calendar/event_summary_modal');\n registered = true;\n }\n\n return ModalEventSummary;\n});\n"],"file":"summary_modal.min.js"} \ No newline at end of file diff --git a/calendar/amd/build/view_manager.min.js b/calendar/amd/build/view_manager.min.js index e27e2d0aa8f..14176235ea9 100644 --- a/calendar/amd/build/view_manager.min.js +++ b/calendar/amd/build/view_manager.min.js @@ -1,2 +1,2 @@ -define ("core_calendar/view_manager",["jquery","core/templates","core/str","core/notification","core_calendar/repository","core_calendar/events","core_calendar/selectors","core/modal_factory","core/modal_events","core_calendar/summary_modal","core/custom_interaction_events"],function(a,b,c,d,e,f,g,h,i,j,k){var l=function(b){b=a(b);b.on("click",g.links.eventLink,function(b){var c=a(b.target),d=null,e;if(c.is(g.actions.viewEvent)){e=c}else{e=c.closest(g.actions.viewEvent)}if(e.length){d=e.data("eventId")}else{d=c.find(g.actions.viewEvent).data("eventId")}if(d){b.preventDefault();b.stopPropagation();u(d)}});b.on("click",g.links.navLink,function(c){var d=b.find(g.wrapper),e=d.data("view"),f=d.data("courseid"),h=d.data("categoryid"),i=a(c.currentTarget);if("month"===e){n(b,i.attr("href"),i.data("year"),i.data("month"),f,h,i.data("day"));c.preventDefault()}else if("day"===e){p(b,i.attr("href"),i.data("year"),i.data("month"),i.data("day"),f,h);c.preventDefault()}});var c=b.find(g.viewSelector);k.define(c,[k.events.activate]);c.on(k.events.activate,function(c){c.preventDefault();var e=a(c.target);if(e.hasClass("active")){return}var f=e.data("view"),g=e.data("year"),h=e.data("month"),i=e.data("day"),j=e.data("courseid"),k=e.data("categoryid");if("month"==f){m(b,g,h,j,k,b,"core_calendar/calendar_month",i).then(function(){return window.history.pushState({},"","?view=month")}).fail(d.exception)}else if("day"==f){o(b,g,h,i,j,k,b,"core_calendar/calendar_day").then(function(){return window.history.pushState({},"","?view=day")}).fail(d.exception)}else if("upcoming"==f){s(b,j,k,b,"core_calendar/calendar_upcoming").then(function(){return window.history.pushState({},"","?view=upcoming")}).fail(d.exception)}})},m=function(c,h,i,j,k,l,m,n){q(c);l=l||c.find(g.wrapper);m=m||c.attr("data-template");n=n||1;M.util.js_pending([c.get("id"),h,i,j].join("-"));var o=c.data("includenavigation"),p=c.data("mini");return e.getCalendarMonthData(h,i,j,k,o,p,n).then(function(a){a.viewingmonth=!0;return b.render(m,a)}).then(function(a,c){return b.replaceNode(l,a,c)}).then(function(){a("body").trigger(f.viewUpdated)}).always(function(){M.util.js_complete([c.get("id"),h,i,j].join("-"));return r(c)}).fail(d.exception)},n=function(b,c,d,e,g,h,i){i=i||1;return m(b,d,e,g,h,null,null,i).then(function(){if(c.length&&"#"!==c){window.history.pushState({},"",c)}return arguments}).then(function(){a("body").trigger(f.monthChanged,[d,e,g,h]);return arguments})},o=function(c,h,i,j,k,l,m,n){q(c);m=m||c.find(g.wrapper);n=n||c.attr("data-template");M.util.js_pending([c.get("id"),h,i,j,k,l].join("-"));var o=c.data("includenavigation");return e.getCalendarDayData(h,i,j,k,l,o).then(function(a){a.viewingday=!0;return b.render(n,a)}).then(function(a,c){return b.replaceNode(m,a,c)}).then(function(){a("body").trigger(f.viewUpdated)}).always(function(){M.util.js_complete([c.get("id"),h,i,j,k,l].join("-"));return r(c)}).fail(d.exception)},p=function(b,c,d,e,g,h,i){return o(b,d,e,g,h,i).then(function(){if(c.length&&"#"!==c){window.history.pushState({},"",c)}return arguments}).then(function(){a("body").trigger(f.dayChanged,[d,e,h,i]);return arguments})},q=function(a){var b=a.find(g.containers.loadingIcon);b.removeClass("hidden")},r=function(a){var b=a.find(g.containers.loadingIcon);b.addClass("hidden")},s=function(c,h,i,j,k){q(c);j=j||c.find(g.wrapper);k=k||c.attr("data-template");if("undefined"==typeof h){h=c.find(g.wrapper).data("courseid")}if("undefined"==typeof i){i=c.find(g.wrapper).data("categoryid")}return e.getCalendarUpcomingData(h,i).then(function(a){a.viewingupcoming=!0;return b.render(k,a)}).then(function(a,c){return b.replaceNode(j,a,c)}).then(function(){a("body").trigger(f.viewUpdated)}).always(function(){return r(c)}).fail(d.exception)},t=function(a){return"calendar_event_"+a},u=function(a){var c="";e.getEventById(a).then(function(b){if(!b.event){throw new Error("Error encountered while trying to fetch calendar event with ID: "+a)}var d=b.event;c=t(d.normalisedeventtype);return d}).then(function(a){var d={title:a.name,type:j.TYPE,body:b.render("core_calendar/event_summary_body",a),templateContext:{canedit:a.canedit,candelete:a.candelete,headerclasses:c,isactionevent:a.isactionevent,url:a.url}};return h.create(d)}).done(function(a){a.getRoot().on(i.hidden,function(){a.destroy()});a.show()}).fail(d.exception)};return{init:function init(a,b){l(a,b)},reloadCurrentMonth:function reloadCurrentMonth(a,b,c){var d=a.find(g.wrapper).data("year"),e=a.find(g.wrapper).data("month"),f=a.find(g.wrapper).data("day");if("undefined"==typeof b){b=a.find(g.wrapper).data("courseid")}if("undefined"==typeof c){c=a.find(g.wrapper).data("categoryid")}return m(a,d,e,b,c,null,null,f)},changeMonth:n,refreshMonthContent:m,reloadCurrentDay:function reloadCurrentDay(a,b,c){var d=a.find(g.wrapper),e=d.data("year"),f=d.data("month"),h=d.data("day");if(!b){b=a.find(g.wrapper).data("courseid")}if("undefined"==typeof c){c=a.find(g.wrapper).data("categoryid")}return o(a,e,f,h,b,c)},changeDay:p,refreshDayContent:o,reloadCurrentUpcoming:s}}); +define ("core_calendar/view_manager",["jquery","core/templates","core/str","core/notification","core_calendar/repository","core_calendar/events","core_calendar/selectors","core/modal_factory","core/modal_events","core_calendar/summary_modal","core/custom_interaction_events","core/pending"],function(a,b,c,d,e,f,g,h,i,j,k,l){var m=function(b){b=a(b);b.on("click",g.links.eventLink,function(b){var c=new l("core_calendar/view_manager:eventLink:click"),d=a(b.target),e=null,f;if(d.is(g.actions.viewEvent)){f=d}else{f=d.closest(g.actions.viewEvent)}if(f.length){e=f.data("eventId")}else{e=d.find(g.actions.viewEvent).data("eventId")}if(e){b.preventDefault();b.stopPropagation();v(e).then(c.resolve()).catch()}else{c.resolve()}});b.on("click",g.links.navLink,function(c){var d=b.find(g.wrapper),e=d.data("view"),f=d.data("courseid"),h=d.data("categoryid"),i=a(c.currentTarget);if("month"===e){o(b,i.attr("href"),i.data("year"),i.data("month"),f,h,i.data("day"));c.preventDefault()}else if("day"===e){q(b,i.attr("href"),i.data("year"),i.data("month"),i.data("day"),f,h);c.preventDefault()}});var c=b.find(g.viewSelector);k.define(c,[k.events.activate]);c.on(k.events.activate,function(c){c.preventDefault();var e=a(c.target);if(e.hasClass("active")){return}var f=e.data("view"),g=e.data("year"),h=e.data("month"),i=e.data("day"),j=e.data("courseid"),k=e.data("categoryid");if("month"==f){n(b,g,h,j,k,b,"core_calendar/calendar_month",i).then(function(){return window.history.pushState({},"","?view=month")}).fail(d.exception)}else if("day"==f){p(b,g,h,i,j,k,b,"core_calendar/calendar_day").then(function(){return window.history.pushState({},"","?view=day")}).fail(d.exception)}else if("upcoming"==f){t(b,j,k,b,"core_calendar/calendar_upcoming").then(function(){return window.history.pushState({},"","?view=upcoming")}).fail(d.exception)}})},n=function(c,h,i,j,k,l,m,n){r(c);l=l||c.find(g.wrapper);m=m||c.attr("data-template");n=n||1;M.util.js_pending([c.get("id"),h,i,j].join("-"));var o=c.data("includenavigation"),p=c.data("mini");return e.getCalendarMonthData(h,i,j,k,o,p,n).then(function(a){a.viewingmonth=!0;return b.render(m,a)}).then(function(a,c){return b.replaceNode(l,a,c)}).then(function(){a("body").trigger(f.viewUpdated)}).always(function(){M.util.js_complete([c.get("id"),h,i,j].join("-"));return s(c)}).fail(d.exception)},o=function(b,c,d,e,g,h,i){i=i||1;return n(b,d,e,g,h,null,null,i).then(function(){if(c.length&&"#"!==c){window.history.pushState({},"",c)}return arguments}).then(function(){a("body").trigger(f.monthChanged,[d,e,g,h]);return arguments})},p=function(c,h,i,j,k,l,m,n){r(c);m=m||c.find(g.wrapper);n=n||c.attr("data-template");M.util.js_pending([c.get("id"),h,i,j,k,l].join("-"));var o=c.data("includenavigation");return e.getCalendarDayData(h,i,j,k,l,o).then(function(a){a.viewingday=!0;return b.render(n,a)}).then(function(a,c){return b.replaceNode(m,a,c)}).then(function(){a("body").trigger(f.viewUpdated)}).always(function(){M.util.js_complete([c.get("id"),h,i,j,k,l].join("-"));return s(c)}).fail(d.exception)},q=function(b,c,d,e,g,h,i){return p(b,d,e,g,h,i).then(function(){if(c.length&&"#"!==c){window.history.pushState({},"",c)}return arguments}).then(function(){a("body").trigger(f.dayChanged,[d,e,h,i]);return arguments})},r=function(a){var b=a.find(g.containers.loadingIcon);b.removeClass("hidden")},s=function(a){var b=a.find(g.containers.loadingIcon);b.addClass("hidden")},t=function(c,h,i,j,k){r(c);j=j||c.find(g.wrapper);k=k||c.attr("data-template");if("undefined"==typeof h){h=c.find(g.wrapper).data("courseid")}if("undefined"==typeof i){i=c.find(g.wrapper).data("categoryid")}return e.getCalendarUpcomingData(h,i).then(function(a){a.viewingupcoming=!0;return b.render(k,a)}).then(function(a,c){return b.replaceNode(j,a,c)}).then(function(){a("body").trigger(f.viewUpdated)}).always(function(){return s(c)}).fail(d.exception)},u=function(a){return"calendar_event_"+a},v=function(a){var c=new l("core_calendar/view_manager:renderEventSummaryModal"),f="";return e.getEventById(a).then(function(b){if(!b.event){throw new Error("Error encountered while trying to fetch calendar event with ID: "+a)}var c=b.event;f=u(c.normalisedeventtype);return c}).then(function(a){var c={title:a.name,type:j.TYPE,body:b.render("core_calendar/event_summary_body",a),templateContext:{canedit:a.canedit,candelete:a.candelete,headerclasses:f,isactionevent:a.isactionevent,url:a.url}};return h.create(c)}).then(function(a){a.getRoot().on(i.hidden,function(){a.destroy()});a.show();return a}).then(function(a){c.resolve();return a}).catch(d.exception)};return{init:function init(a,b){m(a,b)},reloadCurrentMonth:function reloadCurrentMonth(a,b,c){var d=a.find(g.wrapper).data("year"),e=a.find(g.wrapper).data("month"),f=a.find(g.wrapper).data("day");if("undefined"==typeof b){b=a.find(g.wrapper).data("courseid")}if("undefined"==typeof c){c=a.find(g.wrapper).data("categoryid")}return n(a,d,e,b,c,null,null,f)},changeMonth:o,refreshMonthContent:n,reloadCurrentDay:function reloadCurrentDay(a,b,c){var d=a.find(g.wrapper),e=d.data("year"),f=d.data("month"),h=d.data("day");if(!b){b=a.find(g.wrapper).data("courseid")}if("undefined"==typeof c){c=a.find(g.wrapper).data("categoryid")}return p(a,e,f,h,b,c)},changeDay:q,refreshDayContent:p,reloadCurrentUpcoming:t}}); //# sourceMappingURL=view_manager.min.js.map diff --git a/calendar/amd/build/view_manager.min.js.map b/calendar/amd/build/view_manager.min.js.map index 51b20c2862d..19372b6d603 100644 --- a/calendar/amd/build/view_manager.min.js.map +++ b/calendar/amd/build/view_manager.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/view_manager.js"],"names":["define","$","Templates","Str","Notification","CalendarRepository","CalendarEvents","CalendarSelectors","ModalFactory","ModalEvents","SummaryModal","CustomEvents","registerEventListeners","root","on","links","eventLink","e","target","eventId","is","actions","viewEvent","closest","length","data","find","preventDefault","stopPropagation","renderEventSummaryModal","navLink","wrapper","view","courseId","categoryId","link","currentTarget","changeMonth","attr","changeDay","viewSelector","events","activate","option","hasClass","year","month","day","refreshMonthContent","then","window","history","pushState","fail","exception","refreshDayContent","reloadCurrentUpcoming","courseid","categoryid","template","startLoading","M","util","js_pending","get","join","includenavigation","mini","getCalendarMonthData","context","viewingmonth","render","html","js","replaceNode","trigger","viewUpdated","always","js_complete","stopLoading","url","arguments","monthChanged","getCalendarDayData","viewingday","dayChanged","loadingIconContainer","containers","loadingIcon","removeClass","addClass","getCalendarUpcomingData","viewingupcoming","getEventTypeClassFromType","eventType","typeClass","getEventById","getEventResponse","event","Error","eventData","normalisedeventtype","modalParams","title","name","type","TYPE","body","templateContext","canedit","candelete","headerclasses","isactionevent","create","done","modal","getRoot","hidden","destroy","show","init","reloadCurrentMonth","reloadCurrentDay"],"mappings":"AAuBAA,OAAM,8BAAC,CACH,QADG,CAEH,gBAFG,CAGH,UAHG,CAIH,mBAJG,CAKH,0BALG,CAMH,sBANG,CAOH,yBAPG,CAQH,oBARG,CASH,mBATG,CAUH,6BAVG,CAWH,gCAXG,CAAD,CAYH,SACCC,CADD,CAECC,CAFD,CAGCC,CAHD,CAICC,CAJD,CAKCC,CALD,CAMCC,CAND,CAOCC,CAPD,CAQCC,CARD,CASCC,CATD,CAUCC,CAVD,CAWCC,CAXD,CAYD,IAOUC,CAAAA,CAAsB,CAAG,SAASC,CAAT,CAAe,CACxCA,CAAI,CAAGZ,CAAC,CAACY,CAAD,CAAR,CAGAA,CAAI,CAACC,EAAL,CAAQ,OAAR,CAAiBP,CAAiB,CAACQ,KAAlB,CAAwBC,SAAzC,CAAoD,SAASC,CAAT,CAAY,IACxDC,CAAAA,CAAM,CAAGjB,CAAC,CAACgB,CAAC,CAACC,MAAH,CAD8C,CAExDC,CAAO,CAAG,IAF8C,CAIxDH,CAJwD,CAK5D,GAAIE,CAAM,CAACE,EAAP,CAAUb,CAAiB,CAACc,OAAlB,CAA0BC,SAApC,CAAJ,CAAoD,CAChDN,CAAS,CAAGE,CACf,CAFD,IAEO,CACHF,CAAS,CAAGE,CAAM,CAACK,OAAP,CAAehB,CAAiB,CAACc,OAAlB,CAA0BC,SAAzC,CACf,CAED,GAAIN,CAAS,CAACQ,MAAd,CAAsB,CAClBL,CAAO,CAAGH,CAAS,CAACS,IAAV,CAAe,SAAf,CACb,CAFD,IAEO,CACHN,CAAO,CAAGD,CAAM,CAACQ,IAAP,CAAYnB,CAAiB,CAACc,OAAlB,CAA0BC,SAAtC,EAAiDG,IAAjD,CAAsD,SAAtD,CACb,CAED,GAAIN,CAAJ,CAAa,CAGTF,CAAC,CAACU,cAAF,GAGAV,CAAC,CAACW,eAAF,GAEAC,CAAuB,CAACV,CAAD,CAC1B,CACJ,CA3BD,EA8BAN,CAAI,CAACC,EAAL,CAAQ,OAAR,CAAiBP,CAAiB,CAACQ,KAAlB,CAAwBe,OAAzC,CAAkD,SAASb,CAAT,CAAY,IACtDc,CAAAA,CAAO,CAAGlB,CAAI,CAACa,IAAL,CAAUnB,CAAiB,CAACwB,OAA5B,CAD4C,CAEtDC,CAAI,CAAGD,CAAO,CAACN,IAAR,CAAa,MAAb,CAF+C,CAGtDQ,CAAQ,CAAGF,CAAO,CAACN,IAAR,CAAa,UAAb,CAH2C,CAItDS,CAAU,CAAGH,CAAO,CAACN,IAAR,CAAa,YAAb,CAJyC,CAKtDU,CAAI,CAAGlC,CAAC,CAACgB,CAAC,CAACmB,aAAH,CAL8C,CAO1D,GAAa,OAAT,GAAAJ,CAAJ,CAAsB,CAClBK,CAAW,CAACxB,CAAD,CAAOsB,CAAI,CAACG,IAAL,CAAU,MAAV,CAAP,CAA0BH,CAAI,CAACV,IAAL,CAAU,MAAV,CAA1B,CAA6CU,CAAI,CAACV,IAAL,CAAU,OAAV,CAA7C,CAAiEQ,CAAjE,CAA2EC,CAA3E,CACPC,CAAI,CAACV,IAAL,CAAU,KAAV,CADO,CAAX,CAEAR,CAAC,CAACU,cAAF,EACH,CAJD,IAIO,IAAa,KAAT,GAAAK,CAAJ,CAAoB,CACvBO,CAAS,CAAC1B,CAAD,CAAOsB,CAAI,CAACG,IAAL,CAAU,MAAV,CAAP,CAA0BH,CAAI,CAACV,IAAL,CAAU,MAAV,CAA1B,CAA6CU,CAAI,CAACV,IAAL,CAAU,OAAV,CAA7C,CAAiEU,CAAI,CAACV,IAAL,CAAU,KAAV,CAAjE,CACLQ,CADK,CACKC,CADL,CAAT,CAEAjB,CAAC,CAACU,cAAF,EACH,CAEJ,CAjBD,EAmBA,GAAIa,CAAAA,CAAY,CAAG3B,CAAI,CAACa,IAAL,CAAUnB,CAAiB,CAACiC,YAA5B,CAAnB,CACA7B,CAAY,CAACX,MAAb,CAAoBwC,CAApB,CAAkC,CAAC7B,CAAY,CAAC8B,MAAb,CAAoBC,QAArB,CAAlC,EACAF,CAAY,CAAC1B,EAAb,CACIH,CAAY,CAAC8B,MAAb,CAAoBC,QADxB,CAEI,SAASzB,CAAT,CAAY,CACRA,CAAC,CAACU,cAAF,GAEA,GAAIgB,CAAAA,CAAM,CAAG1C,CAAC,CAACgB,CAAC,CAACC,MAAH,CAAd,CACA,GAAIyB,CAAM,CAACC,QAAP,CAAgB,QAAhB,CAAJ,CAA+B,CAC3B,MACH,CAED,GAAIZ,CAAAA,CAAI,CAAGW,CAAM,CAAClB,IAAP,CAAY,MAAZ,CAAX,CACIoB,CAAI,CAAGF,CAAM,CAAClB,IAAP,CAAY,MAAZ,CADX,CAEIqB,CAAK,CAAGH,CAAM,CAAClB,IAAP,CAAY,OAAZ,CAFZ,CAGIsB,CAAG,CAAGJ,CAAM,CAAClB,IAAP,CAAY,KAAZ,CAHV,CAIIQ,CAAQ,CAAGU,CAAM,CAAClB,IAAP,CAAY,UAAZ,CAJf,CAKIS,CAAU,CAAGS,CAAM,CAAClB,IAAP,CAAY,YAAZ,CALjB,CAOA,GAAY,OAAR,EAAAO,CAAJ,CAAqB,CACjBgB,CAAmB,CAACnC,CAAD,CAAOgC,CAAP,CAAaC,CAAb,CAAoBb,CAApB,CAA8BC,CAA9B,CAA0CrB,CAA1C,CAAgD,8BAAhD,CAAgFkC,CAAhF,CAAnB,CACKE,IADL,CACU,UAAW,CACb,MAAOC,CAAAA,MAAM,CAACC,OAAP,CAAeC,SAAf,CAAyB,EAAzB,CAA6B,EAA7B,CAAiC,aAAjC,CACV,CAHL,EAGOC,IAHP,CAGYjD,CAAY,CAACkD,SAHzB,CAIH,CALD,IAKO,IAAY,KAAR,EAAAtB,CAAJ,CAAmB,CACtBuB,CAAiB,CAAC1C,CAAD,CAAOgC,CAAP,CAAaC,CAAb,CAAoBC,CAApB,CAAyBd,CAAzB,CAAmCC,CAAnC,CAA+CrB,CAA/C,CAAqD,4BAArD,CAAjB,CACKoC,IADL,CACU,UAAW,CACb,MAAOC,CAAAA,MAAM,CAACC,OAAP,CAAeC,SAAf,CAAyB,EAAzB,CAA6B,EAA7B,CAAiC,WAAjC,CACV,CAHL,EAGOC,IAHP,CAGYjD,CAAY,CAACkD,SAHzB,CAIH,CALM,IAKA,IAAY,UAAR,EAAAtB,CAAJ,CAAwB,CAC3BwB,CAAqB,CAAC3C,CAAD,CAAOoB,CAAP,CAAiBC,CAAjB,CAA6BrB,CAA7B,CAAmC,iCAAnC,CAArB,CACKoC,IADL,CACU,UAAW,CACb,MAAOC,CAAAA,MAAM,CAACC,OAAP,CAAeC,SAAf,CAAyB,EAAzB,CAA6B,EAA7B,CAAiC,gBAAjC,CACV,CAHL,EAGOC,IAHP,CAGYjD,CAAY,CAACkD,SAHzB,CAIH,CACJ,CAjCL,CAmCH,CAjGP,CAgHUN,CAAmB,CAAG,SAASnC,CAAT,CAAegC,CAAf,CAAqBC,CAArB,CAA4BW,CAA5B,CAAsCC,CAAtC,CAAkDxC,CAAlD,CAA0DyC,CAA1D,CAAoEZ,CAApE,CAAyE,CAC/Fa,CAAY,CAAC/C,CAAD,CAAZ,CAEAK,CAAM,CAAGA,CAAM,EAAIL,CAAI,CAACa,IAAL,CAAUnB,CAAiB,CAACwB,OAA5B,CAAnB,CACA4B,CAAQ,CAAGA,CAAQ,EAAI9C,CAAI,CAACyB,IAAL,CAAU,eAAV,CAAvB,CACAS,CAAG,CAAGA,CAAG,EAAI,CAAb,CACAc,CAAC,CAACC,IAAF,CAAOC,UAAP,CAAkB,CAAClD,CAAI,CAACmD,GAAL,CAAS,IAAT,CAAD,CAAiBnB,CAAjB,CAAuBC,CAAvB,CAA8BW,CAA9B,EAAwCQ,IAAxC,CAA6C,GAA7C,CAAlB,EAN+F,GAO3FC,CAAAA,CAAiB,CAAGrD,CAAI,CAACY,IAAL,CAAU,mBAAV,CAPuE,CAQ3F0C,CAAI,CAAGtD,CAAI,CAACY,IAAL,CAAU,MAAV,CARoF,CAS/F,MAAOpB,CAAAA,CAAkB,CAAC+D,oBAAnB,CAAwCvB,CAAxC,CAA8CC,CAA9C,CAAqDW,CAArD,CAA+DC,CAA/D,CAA2EQ,CAA3E,CAA8FC,CAA9F,CAAoGpB,CAApG,EACFE,IADE,CACG,SAASoB,CAAT,CAAkB,CACpBA,CAAO,CAACC,YAAR,IACA,MAAOpE,CAAAA,CAAS,CAACqE,MAAV,CAAiBZ,CAAjB,CAA2BU,CAA3B,CACV,CAJE,EAKFpB,IALE,CAKG,SAASuB,CAAT,CAAeC,CAAf,CAAmB,CACrB,MAAOvE,CAAAA,CAAS,CAACwE,WAAV,CAAsBxD,CAAtB,CAA8BsD,CAA9B,CAAoCC,CAApC,CACV,CAPE,EAQFxB,IARE,CAQG,UAAW,CACbhD,CAAC,CAAC,MAAD,CAAD,CAAU0E,OAAV,CAAkBrE,CAAc,CAACsE,WAAjC,CAEH,CAXE,EAYFC,MAZE,CAYK,UAAW,CACfhB,CAAC,CAACC,IAAF,CAAOgB,WAAP,CAAmB,CAACjE,CAAI,CAACmD,GAAL,CAAS,IAAT,CAAD,CAAiBnB,CAAjB,CAAuBC,CAAvB,CAA8BW,CAA9B,EAAwCQ,IAAxC,CAA6C,GAA7C,CAAnB,EACA,MAAOc,CAAAA,CAAW,CAAClE,CAAD,CACrB,CAfE,EAgBFwC,IAhBE,CAgBGjD,CAAY,CAACkD,SAhBhB,CAiBV,CA1IP,CAwJUjB,CAAW,CAAG,SAASxB,CAAT,CAAemE,CAAf,CAAoBnC,CAApB,CAA0BC,CAA1B,CAAiCW,CAAjC,CAA2CC,CAA3C,CAAuDX,CAAvD,CAA4D,CAC1EA,CAAG,CAAGA,CAAG,EAAI,CAAb,CACA,MAAOC,CAAAA,CAAmB,CAACnC,CAAD,CAAOgC,CAAP,CAAaC,CAAb,CAAoBW,CAApB,CAA8BC,CAA9B,CAA0C,IAA1C,CAAgD,IAAhD,CAAsDX,CAAtD,CAAnB,CACFE,IADE,CACG,UAAW,CACb,GAAI+B,CAAG,CAACxD,MAAJ,EAAsB,GAAR,GAAAwD,CAAlB,CAA+B,CAC3B9B,MAAM,CAACC,OAAP,CAAeC,SAAf,CAAyB,EAAzB,CAA6B,EAA7B,CAAiC4B,CAAjC,CACH,CACD,MAAOC,CAAAA,SACV,CANE,EAOFhC,IAPE,CAOG,UAAW,CACbhD,CAAC,CAAC,MAAD,CAAD,CAAU0E,OAAV,CAAkBrE,CAAc,CAAC4E,YAAjC,CAA+C,CAACrC,CAAD,CAAOC,CAAP,CAAcW,CAAd,CAAwBC,CAAxB,CAA/C,EACA,MAAOuB,CAAAA,SACV,CAVE,CAWV,CArKP,CA8MU1B,CAAiB,CAAG,SAAS1C,CAAT,CAAegC,CAAf,CAAqBC,CAArB,CAA4BC,CAA5B,CAAiCU,CAAjC,CAA2CvB,CAA3C,CAAuDhB,CAAvD,CAA+DyC,CAA/D,CAAyE,CAC7FC,CAAY,CAAC/C,CAAD,CAAZ,CAEAK,CAAM,CAAGA,CAAM,EAAIL,CAAI,CAACa,IAAL,CAAUnB,CAAiB,CAACwB,OAA5B,CAAnB,CACA4B,CAAQ,CAAGA,CAAQ,EAAI9C,CAAI,CAACyB,IAAL,CAAU,eAAV,CAAvB,CACAuB,CAAC,CAACC,IAAF,CAAOC,UAAP,CAAkB,CAAClD,CAAI,CAACmD,GAAL,CAAS,IAAT,CAAD,CAAiBnB,CAAjB,CAAuBC,CAAvB,CAA8BC,CAA9B,CAAmCU,CAAnC,CAA6CvB,CAA7C,EAAyD+B,IAAzD,CAA8D,GAA9D,CAAlB,EACA,GAAIC,CAAAA,CAAiB,CAAGrD,CAAI,CAACY,IAAL,CAAU,mBAAV,CAAxB,CACA,MAAOpB,CAAAA,CAAkB,CAAC8E,kBAAnB,CAAsCtC,CAAtC,CAA4CC,CAA5C,CAAmDC,CAAnD,CAAwDU,CAAxD,CAAkEvB,CAAlE,CAA8EgC,CAA9E,EACFjB,IADE,CACG,SAASoB,CAAT,CAAkB,CACpBA,CAAO,CAACe,UAAR,IACA,MAAOlF,CAAAA,CAAS,CAACqE,MAAV,CAAiBZ,CAAjB,CAA2BU,CAA3B,CACV,CAJE,EAKFpB,IALE,CAKG,SAASuB,CAAT,CAAeC,CAAf,CAAmB,CACrB,MAAOvE,CAAAA,CAAS,CAACwE,WAAV,CAAsBxD,CAAtB,CAA8BsD,CAA9B,CAAoCC,CAApC,CACV,CAPE,EAQFxB,IARE,CAQG,UAAW,CACbhD,CAAC,CAAC,MAAD,CAAD,CAAU0E,OAAV,CAAkBrE,CAAc,CAACsE,WAAjC,CAEH,CAXE,EAYFC,MAZE,CAYK,UAAW,CACfhB,CAAC,CAACC,IAAF,CAAOgB,WAAP,CAAmB,CAACjE,CAAI,CAACmD,GAAL,CAAS,IAAT,CAAD,CAAiBnB,CAAjB,CAAuBC,CAAvB,CAA8BC,CAA9B,CAAmCU,CAAnC,CAA6CvB,CAA7C,EAAyD+B,IAAzD,CAA8D,GAA9D,CAAnB,EACA,MAAOc,CAAAA,CAAW,CAAClE,CAAD,CACrB,CAfE,EAgBFwC,IAhBE,CAgBGjD,CAAY,CAACkD,SAhBhB,CAiBV,CAtOP,CA6QUf,CAAS,CAAG,SAAS1B,CAAT,CAAemE,CAAf,CAAoBnC,CAApB,CAA0BC,CAA1B,CAAiCC,CAAjC,CAAsCd,CAAtC,CAAgDC,CAAhD,CAA4D,CACxE,MAAOqB,CAAAA,CAAiB,CAAC1C,CAAD,CAAOgC,CAAP,CAAaC,CAAb,CAAoBC,CAApB,CAAyBd,CAAzB,CAAmCC,CAAnC,CAAjB,CACFe,IADE,CACG,UAAW,CACb,GAAI+B,CAAG,CAACxD,MAAJ,EAAsB,GAAR,GAAAwD,CAAlB,CAA+B,CAC3B9B,MAAM,CAACC,OAAP,CAAeC,SAAf,CAAyB,EAAzB,CAA6B,EAA7B,CAAiC4B,CAAjC,CACH,CACD,MAAOC,CAAAA,SACV,CANE,EAOFhC,IAPE,CAOG,UAAW,CACbhD,CAAC,CAAC,MAAD,CAAD,CAAU0E,OAAV,CAAkBrE,CAAc,CAAC+E,UAAjC,CAA6C,CAACxC,CAAD,CAAOC,CAAP,CAAcb,CAAd,CAAwBC,CAAxB,CAA7C,EACA,MAAO+C,CAAAA,SACV,CAVE,CAWV,CAzRP,CAiSUrB,CAAY,CAAG,SAAS/C,CAAT,CAAe,CAC9B,GAAIyE,CAAAA,CAAoB,CAAGzE,CAAI,CAACa,IAAL,CAAUnB,CAAiB,CAACgF,UAAlB,CAA6BC,WAAvC,CAA3B,CAEAF,CAAoB,CAACG,WAArB,CAAiC,QAAjC,CACH,CArSP,CA6SUV,CAAW,CAAG,SAASlE,CAAT,CAAe,CAC7B,GAAIyE,CAAAA,CAAoB,CAAGzE,CAAI,CAACa,IAAL,CAAUnB,CAAiB,CAACgF,UAAlB,CAA6BC,WAAvC,CAA3B,CAEAF,CAAoB,CAACI,QAArB,CAA8B,QAA9B,CACH,CAjTP,CA6TUlC,CAAqB,CAAG,SAAS3C,CAAT,CAAeoB,CAAf,CAAyBC,CAAzB,CAAqChB,CAArC,CAA6CyC,CAA7C,CAAuD,CAC/EC,CAAY,CAAC/C,CAAD,CAAZ,CAEAK,CAAM,CAAGA,CAAM,EAAIL,CAAI,CAACa,IAAL,CAAUnB,CAAiB,CAACwB,OAA5B,CAAnB,CACA4B,CAAQ,CAAGA,CAAQ,EAAI9C,CAAI,CAACyB,IAAL,CAAU,eAAV,CAAvB,CAEA,GAAwB,WAApB,QAAOL,CAAAA,CAAX,CAAqC,CACjCA,CAAQ,CAAGpB,CAAI,CAACa,IAAL,CAAUnB,CAAiB,CAACwB,OAA5B,EAAqCN,IAArC,CAA0C,UAA1C,CACd,CAED,GAA0B,WAAtB,QAAOS,CAAAA,CAAX,CAAuC,CACnCA,CAAU,CAAGrB,CAAI,CAACa,IAAL,CAAUnB,CAAiB,CAACwB,OAA5B,EAAqCN,IAArC,CAA0C,YAA1C,CAChB,CAED,MAAOpB,CAAAA,CAAkB,CAACsF,uBAAnB,CAA2C1D,CAA3C,CAAqDC,CAArD,EACFe,IADE,CACG,SAASoB,CAAT,CAAkB,CACpBA,CAAO,CAACuB,eAAR,IACA,MAAO1F,CAAAA,CAAS,CAACqE,MAAV,CAAiBZ,CAAjB,CAA2BU,CAA3B,CACV,CAJE,EAKFpB,IALE,CAKG,SAASuB,CAAT,CAAeC,CAAf,CAAmB,CACrB,MAAOvE,CAAAA,CAAS,CAACwE,WAAV,CAAsBxD,CAAtB,CAA8BsD,CAA9B,CAAoCC,CAApC,CACV,CAPE,EAQFxB,IARE,CAQG,UAAW,CACbhD,CAAC,CAAC,MAAD,CAAD,CAAU0E,OAAV,CAAkBrE,CAAc,CAACsE,WAAjC,CAEH,CAXE,EAYFC,MAZE,CAYK,UAAW,CACf,MAAOE,CAAAA,CAAW,CAAClE,CAAD,CACrB,CAdE,EAeFwC,IAfE,CAeGjD,CAAY,CAACkD,SAfhB,CAgBV,CA3VP,CAmWUuC,CAAyB,CAAG,SAASC,CAAT,CAAoB,CAChD,MAAO,kBAAoBA,CAC9B,CArWP,CA4WUjE,CAAuB,CAAG,SAASV,CAAT,CAAkB,CAC5C,GAAI4E,CAAAA,CAAS,CAAG,EAAhB,CAGA1F,CAAkB,CAAC2F,YAAnB,CAAgC7E,CAAhC,EAAyC8B,IAAzC,CAA8C,SAASgD,CAAT,CAA2B,CACrE,GAAI,CAACA,CAAgB,CAACC,KAAtB,CAA6B,CACzB,KAAM,IAAIC,CAAAA,KAAJ,CAAU,mEAAqEhF,CAA/E,CACT,CACD,GAAIiF,CAAAA,CAAS,CAAGH,CAAgB,CAACC,KAAjC,CACAH,CAAS,CAAGF,CAAyB,CAACO,CAAS,CAACC,mBAAX,CAArC,CAEA,MAAOD,CAAAA,CACV,CARD,EAQGnD,IARH,CAQQ,SAASmD,CAAT,CAAoB,CAExB,GAAIE,CAAAA,CAAW,CAAG,CACdC,KAAK,CAAEH,CAAS,CAACI,IADH,CAEdC,IAAI,CAAE/F,CAAY,CAACgG,IAFL,CAGdC,IAAI,CAAEzG,CAAS,CAACqE,MAAV,CAAiB,kCAAjB,CAAqD6B,CAArD,CAHQ,CAIdQ,eAAe,CAAE,CACbC,OAAO,CAAET,CAAS,CAACS,OADN,CAEbC,SAAS,CAAEV,CAAS,CAACU,SAFR,CAGbC,aAAa,CAAEhB,CAHF,CAIbiB,aAAa,CAAEZ,CAAS,CAACY,aAJZ,CAKbhC,GAAG,CAAEoB,CAAS,CAACpB,GALF,CAJH,CAAlB,CAcA,MAAOxE,CAAAA,CAAY,CAACyG,MAAb,CAAoBX,CAApB,CAEV,CA1BD,EA0BGY,IA1BH,CA0BQ,SAASC,CAAT,CAAgB,CAEpBA,CAAK,CAACC,OAAN,GAAgBtG,EAAhB,CAAmBL,CAAW,CAAC4G,MAA/B,CAAuC,UAAW,CAE9CF,CAAK,CAACG,OAAN,EACH,CAHD,EAMAH,CAAK,CAACI,IAAN,EAEH,CApCD,EAoCGlE,IApCH,CAoCQjD,CAAY,CAACkD,SApCrB,CAqCH,CArZP,CAuZM,MAAO,CACHkE,IAAI,CAAE,cAAS3G,CAAT,CAAemB,CAAf,CAAqB,CACvBpB,CAAsB,CAACC,CAAD,CAAOmB,CAAP,CACzB,CAHE,CAIHyF,kBAAkB,CA5OG,QAArBA,CAAAA,kBAAqB,CAAS5G,CAAT,CAAeoB,CAAf,CAAyBC,CAAzB,CAAqC,IACtDW,CAAAA,CAAI,CAAGhC,CAAI,CAACa,IAAL,CAAUnB,CAAiB,CAACwB,OAA5B,EAAqCN,IAArC,CAA0C,MAA1C,CAD+C,CAEtDqB,CAAK,CAAGjC,CAAI,CAACa,IAAL,CAAUnB,CAAiB,CAACwB,OAA5B,EAAqCN,IAArC,CAA0C,OAA1C,CAF8C,CAGtDsB,CAAG,CAAGlC,CAAI,CAACa,IAAL,CAAUnB,CAAiB,CAACwB,OAA5B,EAAqCN,IAArC,CAA0C,KAA1C,CAHgD,CAK1D,GAAwB,WAApB,QAAOQ,CAAAA,CAAX,CAAqC,CACjCA,CAAQ,CAAGpB,CAAI,CAACa,IAAL,CAAUnB,CAAiB,CAACwB,OAA5B,EAAqCN,IAArC,CAA0C,UAA1C,CACd,CAED,GAA0B,WAAtB,QAAOS,CAAAA,CAAX,CAAuC,CACnCA,CAAU,CAAGrB,CAAI,CAACa,IAAL,CAAUnB,CAAiB,CAACwB,OAA5B,EAAqCN,IAArC,CAA0C,YAA1C,CAChB,CAED,MAAOuB,CAAAA,CAAmB,CAACnC,CAAD,CAAOgC,CAAP,CAAaC,CAAb,CAAoBb,CAApB,CAA8BC,CAA9B,CAA0C,IAA1C,CAAgD,IAAhD,CAAsDa,CAAtD,CAC7B,CA0NM,CAKHV,WAAW,CAAEA,CALV,CAMHW,mBAAmB,CAAEA,CANlB,CAOH0E,gBAAgB,CA9KG,QAAnBA,CAAAA,gBAAmB,CAAS7G,CAAT,CAAeoB,CAAf,CAAyBC,CAAzB,CAAqC,IACpDH,CAAAA,CAAO,CAAGlB,CAAI,CAACa,IAAL,CAAUnB,CAAiB,CAACwB,OAA5B,CAD0C,CAEpDc,CAAI,CAAGd,CAAO,CAACN,IAAR,CAAa,MAAb,CAF6C,CAGpDqB,CAAK,CAAGf,CAAO,CAACN,IAAR,CAAa,OAAb,CAH4C,CAIpDsB,CAAG,CAAGhB,CAAO,CAACN,IAAR,CAAa,KAAb,CAJ8C,CAMxD,GAAI,CAACQ,CAAL,CAAe,CACXA,CAAQ,CAAGpB,CAAI,CAACa,IAAL,CAAUnB,CAAiB,CAACwB,OAA5B,EAAqCN,IAArC,CAA0C,UAA1C,CACd,CAED,GAA0B,WAAtB,QAAOS,CAAAA,CAAX,CAAuC,CACnCA,CAAU,CAAGrB,CAAI,CAACa,IAAL,CAAUnB,CAAiB,CAACwB,OAA5B,EAAqCN,IAArC,CAA0C,YAA1C,CAChB,CAED,MAAO8B,CAAAA,CAAiB,CAAC1C,CAAD,CAAOgC,CAAP,CAAaC,CAAb,CAAoBC,CAApB,CAAyBd,CAAzB,CAAmCC,CAAnC,CAC3B,CAwJM,CAQHK,SAAS,CAAEA,CARR,CASHgB,iBAAiB,CAAEA,CAThB,CAUHC,qBAAqB,CAAEA,CAVpB,CAYV,CA3bC,CAAN","sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * A javascript module to handler calendar view changes.\n *\n * @module core_calendar/view_manager\n * @package core_calendar\n * @copyright 2017 Andrew Nicols \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/templates',\n 'core/str',\n 'core/notification',\n 'core_calendar/repository',\n 'core_calendar/events',\n 'core_calendar/selectors',\n 'core/modal_factory',\n 'core/modal_events',\n 'core_calendar/summary_modal',\n 'core/custom_interaction_events',\n], function(\n $,\n Templates,\n Str,\n Notification,\n CalendarRepository,\n CalendarEvents,\n CalendarSelectors,\n ModalFactory,\n ModalEvents,\n SummaryModal,\n CustomEvents\n) {\n\n /**\n * Register event listeners for the module.\n *\n * @param {object} root The root element.\n */\n var registerEventListeners = function(root) {\n root = $(root);\n\n // Bind click events to event links.\n root.on('click', CalendarSelectors.links.eventLink, function(e) {\n var target = $(e.target);\n var eventId = null;\n\n var eventLink;\n if (target.is(CalendarSelectors.actions.viewEvent)) {\n eventLink = target;\n } else {\n eventLink = target.closest(CalendarSelectors.actions.viewEvent);\n }\n\n if (eventLink.length) {\n eventId = eventLink.data('eventId');\n } else {\n eventId = target.find(CalendarSelectors.actions.viewEvent).data('eventId');\n }\n\n if (eventId) {\n // A link was found. Show the modal.\n\n e.preventDefault();\n // We've handled the event so stop it from bubbling\n // and causing the day click handler to fire.\n e.stopPropagation();\n\n renderEventSummaryModal(eventId);\n }\n });\n\n\n root.on('click', CalendarSelectors.links.navLink, function(e) {\n var wrapper = root.find(CalendarSelectors.wrapper);\n var view = wrapper.data('view');\n var courseId = wrapper.data('courseid');\n var categoryId = wrapper.data('categoryid');\n var link = $(e.currentTarget);\n\n if (view === 'month') {\n changeMonth(root, link.attr('href'), link.data('year'), link.data('month'), courseId, categoryId,\n link.data('day'));\n e.preventDefault();\n } else if (view === 'day') {\n changeDay(root, link.attr('href'), link.data('year'), link.data('month'), link.data('day'),\n courseId, categoryId);\n e.preventDefault();\n }\n\n });\n\n var viewSelector = root.find(CalendarSelectors.viewSelector);\n CustomEvents.define(viewSelector, [CustomEvents.events.activate]);\n viewSelector.on(\n CustomEvents.events.activate,\n function(e) {\n e.preventDefault();\n\n var option = $(e.target);\n if (option.hasClass('active')) {\n return;\n }\n\n var view = option.data('view'),\n year = option.data('year'),\n month = option.data('month'),\n day = option.data('day'),\n courseId = option.data('courseid'),\n categoryId = option.data('categoryid');\n\n if (view == 'month') {\n refreshMonthContent(root, year, month, courseId, categoryId, root, 'core_calendar/calendar_month', day)\n .then(function() {\n return window.history.pushState({}, '', '?view=month');\n }).fail(Notification.exception);\n } else if (view == 'day') {\n refreshDayContent(root, year, month, day, courseId, categoryId, root, 'core_calendar/calendar_day')\n .then(function() {\n return window.history.pushState({}, '', '?view=day');\n }).fail(Notification.exception);\n } else if (view == 'upcoming') {\n reloadCurrentUpcoming(root, courseId, categoryId, root, 'core_calendar/calendar_upcoming')\n .then(function() {\n return window.history.pushState({}, '', '?view=upcoming');\n }).fail(Notification.exception);\n }\n }\n );\n };\n\n /**\n * Refresh the month content.\n *\n * @param {object} root The root element.\n * @param {Number} year Year\n * @param {Number} month Month\n * @param {Number} courseid The id of the course whose events are shown\n * @param {Number} categoryid The id of the category whose events are shown\n * @param {object} target The element being replaced. If not specified, the calendarwrapper is used.\n * @param {String} template The template to be rendered.\n * @param {Number} day Day (optional)\n * @return {promise}\n */\n var refreshMonthContent = function(root, year, month, courseid, categoryid, target, template, day) {\n startLoading(root);\n\n target = target || root.find(CalendarSelectors.wrapper);\n template = template || root.attr('data-template');\n day = day || 1;\n M.util.js_pending([root.get('id'), year, month, courseid].join('-'));\n var includenavigation = root.data('includenavigation');\n var mini = root.data('mini');\n return CalendarRepository.getCalendarMonthData(year, month, courseid, categoryid, includenavigation, mini, day)\n .then(function(context) {\n context.viewingmonth = true;\n return Templates.render(template, context);\n })\n .then(function(html, js) {\n return Templates.replaceNode(target, html, js);\n })\n .then(function() {\n $('body').trigger(CalendarEvents.viewUpdated);\n return;\n })\n .always(function() {\n M.util.js_complete([root.get('id'), year, month, courseid].join('-'));\n return stopLoading(root);\n })\n .fail(Notification.exception);\n };\n\n /**\n * Handle changes to the current calendar view.\n *\n * @param {object} root The container element\n * @param {String} url The calendar url to be shown\n * @param {Number} year Year\n * @param {Number} month Month\n * @param {Number} courseid The id of the course whose events are shown\n * @param {Number} categoryid The id of the category whose events are shown\n * @param {Number} day Day (optional)\n * @return {promise}\n */\n var changeMonth = function(root, url, year, month, courseid, categoryid, day) {\n day = day || 1;\n return refreshMonthContent(root, year, month, courseid, categoryid, null, null, day)\n .then(function() {\n if (url.length && url !== '#') {\n window.history.pushState({}, '', url);\n }\n return arguments;\n })\n .then(function() {\n $('body').trigger(CalendarEvents.monthChanged, [year, month, courseid, categoryid]);\n return arguments;\n });\n };\n\n /**\n * Reload the current month view data.\n *\n * @param {object} root The container element.\n * @param {Number} courseId The course id.\n * @param {Number} categoryId The id of the category whose events are shown\n * @return {promise}\n */\n var reloadCurrentMonth = function(root, courseId, categoryId) {\n var year = root.find(CalendarSelectors.wrapper).data('year');\n var month = root.find(CalendarSelectors.wrapper).data('month');\n var day = root.find(CalendarSelectors.wrapper).data('day');\n\n if (typeof courseId === 'undefined') {\n courseId = root.find(CalendarSelectors.wrapper).data('courseid');\n }\n\n if (typeof categoryId === 'undefined') {\n categoryId = root.find(CalendarSelectors.wrapper).data('categoryid');\n }\n\n return refreshMonthContent(root, year, month, courseId, categoryId, null, null, day);\n };\n\n\n /**\n * Refresh the day content.\n *\n * @param {object} root The root element.\n * @param {Number} year Year\n * @param {Number} month Month\n * @param {Number} day Day\n * @param {Number} courseid The id of the course whose events are shown\n * @param {Number} categoryId The id of the category whose events are shown\n * @param {object} target The element being replaced. If not specified, the calendarwrapper is used.\n * @param {String} template The template to be rendered.\n *\n * @return {promise}\n */\n var refreshDayContent = function(root, year, month, day, courseid, categoryId, target, template) {\n startLoading(root);\n\n target = target || root.find(CalendarSelectors.wrapper);\n template = template || root.attr('data-template');\n M.util.js_pending([root.get('id'), year, month, day, courseid, categoryId].join('-'));\n var includenavigation = root.data('includenavigation');\n return CalendarRepository.getCalendarDayData(year, month, day, courseid, categoryId, includenavigation)\n .then(function(context) {\n context.viewingday = true;\n return Templates.render(template, context);\n })\n .then(function(html, js) {\n return Templates.replaceNode(target, html, js);\n })\n .then(function() {\n $('body').trigger(CalendarEvents.viewUpdated);\n return;\n })\n .always(function() {\n M.util.js_complete([root.get('id'), year, month, day, courseid, categoryId].join('-'));\n return stopLoading(root);\n })\n .fail(Notification.exception);\n };\n\n /**\n * Reload the current day view data.\n *\n * @param {object} root The container element.\n * @param {Number} courseId The course id.\n * @param {Number} categoryId The id of the category whose events are shown\n * @return {promise}\n */\n var reloadCurrentDay = function(root, courseId, categoryId) {\n var wrapper = root.find(CalendarSelectors.wrapper);\n var year = wrapper.data('year');\n var month = wrapper.data('month');\n var day = wrapper.data('day');\n\n if (!courseId) {\n courseId = root.find(CalendarSelectors.wrapper).data('courseid');\n }\n\n if (typeof categoryId === 'undefined') {\n categoryId = root.find(CalendarSelectors.wrapper).data('categoryid');\n }\n\n return refreshDayContent(root, year, month, day, courseId, categoryId);\n };\n\n /**\n * Handle changes to the current calendar view.\n *\n * @param {object} root The root element.\n * @param {String} url The calendar url to be shown\n * @param {Number} year Year\n * @param {Number} month Month\n * @param {Number} day Day\n * @param {Number} courseId The id of the course whose events are shown\n * @param {Number} categoryId The id of the category whose events are shown\n * @return {promise}\n */\n var changeDay = function(root, url, year, month, day, courseId, categoryId) {\n return refreshDayContent(root, year, month, day, courseId, categoryId)\n .then(function() {\n if (url.length && url !== '#') {\n window.history.pushState({}, '', url);\n }\n return arguments;\n })\n .then(function() {\n $('body').trigger(CalendarEvents.dayChanged, [year, month, courseId, categoryId]);\n return arguments;\n });\n };\n\n /**\n * Set the element state to loading.\n *\n * @param {object} root The container element\n * @method startLoading\n */\n var startLoading = function(root) {\n var loadingIconContainer = root.find(CalendarSelectors.containers.loadingIcon);\n\n loadingIconContainer.removeClass('hidden');\n };\n\n /**\n * Remove the loading state from the element.\n *\n * @param {object} root The container element\n * @method stopLoading\n */\n var stopLoading = function(root) {\n var loadingIconContainer = root.find(CalendarSelectors.containers.loadingIcon);\n\n loadingIconContainer.addClass('hidden');\n };\n\n /**\n * Reload the current month view data.\n *\n * @param {object} root The container element.\n * @param {Number} courseId The course id.\n * @param {Number} categoryId The id of the category whose events are shown\n * @param {String} template The template to be rendered.\n * @param {object} target The element being replaced. If not specified, the calendarwrapper is used.\n * @return {promise}\n */\n var reloadCurrentUpcoming = function(root, courseId, categoryId, target, template) {\n startLoading(root);\n\n target = target || root.find(CalendarSelectors.wrapper);\n template = template || root.attr('data-template');\n\n if (typeof courseId === 'undefined') {\n courseId = root.find(CalendarSelectors.wrapper).data('courseid');\n }\n\n if (typeof categoryId === 'undefined') {\n categoryId = root.find(CalendarSelectors.wrapper).data('categoryid');\n }\n\n return CalendarRepository.getCalendarUpcomingData(courseId, categoryId)\n .then(function(context) {\n context.viewingupcoming = true;\n return Templates.render(template, context);\n })\n .then(function(html, js) {\n return Templates.replaceNode(target, html, js);\n })\n .then(function() {\n $('body').trigger(CalendarEvents.viewUpdated);\n return;\n })\n .always(function() {\n return stopLoading(root);\n })\n .fail(Notification.exception);\n };\n\n /**\n * Get the CSS class to apply for the given event type.\n *\n * @param {String} eventType The calendar event type\n * @return {String}\n */\n var getEventTypeClassFromType = function(eventType) {\n return 'calendar_event_' + eventType;\n };\n\n /**\n * Render the event summary modal.\n *\n * @param {Number} eventId The calendar event id.\n */\n var renderEventSummaryModal = function(eventId) {\n var typeClass = '';\n\n // Calendar repository promise.\n CalendarRepository.getEventById(eventId).then(function(getEventResponse) {\n if (!getEventResponse.event) {\n throw new Error('Error encountered while trying to fetch calendar event with ID: ' + eventId);\n }\n var eventData = getEventResponse.event;\n typeClass = getEventTypeClassFromType(eventData.normalisedeventtype);\n\n return eventData;\n }).then(function(eventData) {\n // Build the modal parameters from the event data.\n var modalParams = {\n title: eventData.name,\n type: SummaryModal.TYPE,\n body: Templates.render('core_calendar/event_summary_body', eventData),\n templateContext: {\n canedit: eventData.canedit,\n candelete: eventData.candelete,\n headerclasses: typeClass,\n isactionevent: eventData.isactionevent,\n url: eventData.url\n }\n };\n\n // Create the modal.\n return ModalFactory.create(modalParams);\n\n }).done(function(modal) {\n // Handle hidden event.\n modal.getRoot().on(ModalEvents.hidden, function() {\n // Destroy when hidden.\n modal.destroy();\n });\n\n // Finally, render the modal!\n modal.show();\n\n }).fail(Notification.exception);\n };\n\n return {\n init: function(root, view) {\n registerEventListeners(root, view);\n },\n reloadCurrentMonth: reloadCurrentMonth,\n changeMonth: changeMonth,\n refreshMonthContent: refreshMonthContent,\n reloadCurrentDay: reloadCurrentDay,\n changeDay: changeDay,\n refreshDayContent: refreshDayContent,\n reloadCurrentUpcoming: reloadCurrentUpcoming\n };\n });\n"],"file":"view_manager.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/view_manager.js"],"names":["define","$","Templates","Str","Notification","CalendarRepository","CalendarEvents","CalendarSelectors","ModalFactory","ModalEvents","SummaryModal","CustomEvents","Pending","registerEventListeners","root","on","links","eventLink","e","pendingPromise","target","eventId","is","actions","viewEvent","closest","length","data","find","preventDefault","stopPropagation","renderEventSummaryModal","then","resolve","catch","navLink","wrapper","view","courseId","categoryId","link","currentTarget","changeMonth","attr","changeDay","viewSelector","events","activate","option","hasClass","year","month","day","refreshMonthContent","window","history","pushState","fail","exception","refreshDayContent","reloadCurrentUpcoming","courseid","categoryid","template","startLoading","M","util","js_pending","get","join","includenavigation","mini","getCalendarMonthData","context","viewingmonth","render","html","js","replaceNode","trigger","viewUpdated","always","js_complete","stopLoading","url","arguments","monthChanged","getCalendarDayData","viewingday","dayChanged","loadingIconContainer","containers","loadingIcon","removeClass","addClass","getCalendarUpcomingData","viewingupcoming","getEventTypeClassFromType","eventType","typeClass","getEventById","getEventResponse","event","Error","eventData","normalisedeventtype","modalParams","title","name","type","TYPE","body","templateContext","canedit","candelete","headerclasses","isactionevent","create","modal","getRoot","hidden","destroy","show","init","reloadCurrentMonth","reloadCurrentDay"],"mappings":"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","sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see .\n\n/**\n * A javascript module to handler calendar view changes.\n *\n * @module core_calendar/view_manager\n * @package core_calendar\n * @copyright 2017 Andrew Nicols \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery',\n 'core/templates',\n 'core/str',\n 'core/notification',\n 'core_calendar/repository',\n 'core_calendar/events',\n 'core_calendar/selectors',\n 'core/modal_factory',\n 'core/modal_events',\n 'core_calendar/summary_modal',\n 'core/custom_interaction_events',\n 'core/pending',\n], function(\n $,\n Templates,\n Str,\n Notification,\n CalendarRepository,\n CalendarEvents,\n CalendarSelectors,\n ModalFactory,\n ModalEvents,\n SummaryModal,\n CustomEvents,\n Pending\n) {\n\n /**\n * Register event listeners for the module.\n *\n * @param {object} root The root element.\n */\n var registerEventListeners = function(root) {\n root = $(root);\n\n // Bind click events to event links.\n root.on('click', CalendarSelectors.links.eventLink, function(e) {\n var pendingPromise = new Pending('core_calendar/view_manager:eventLink:click');\n var target = $(e.target);\n var eventId = null;\n\n var eventLink;\n if (target.is(CalendarSelectors.actions.viewEvent)) {\n eventLink = target;\n } else {\n eventLink = target.closest(CalendarSelectors.actions.viewEvent);\n }\n\n if (eventLink.length) {\n eventId = eventLink.data('eventId');\n } else {\n eventId = target.find(CalendarSelectors.actions.viewEvent).data('eventId');\n }\n\n if (eventId) {\n // A link was found. Show the modal.\n\n e.preventDefault();\n // We've handled the event so stop it from bubbling\n // and causing the day click handler to fire.\n e.stopPropagation();\n\n renderEventSummaryModal(eventId)\n .then(pendingPromise.resolve())\n .catch();\n } else {\n pendingPromise.resolve();\n }\n });\n\n\n root.on('click', CalendarSelectors.links.navLink, function(e) {\n var wrapper = root.find(CalendarSelectors.wrapper);\n var view = wrapper.data('view');\n var courseId = wrapper.data('courseid');\n var categoryId = wrapper.data('categoryid');\n var link = $(e.currentTarget);\n\n if (view === 'month') {\n changeMonth(root, link.attr('href'), link.data('year'), link.data('month'), courseId, categoryId,\n link.data('day'));\n e.preventDefault();\n } else if (view === 'day') {\n changeDay(root, link.attr('href'), link.data('year'), link.data('month'), link.data('day'),\n courseId, categoryId);\n e.preventDefault();\n }\n\n });\n\n var viewSelector = root.find(CalendarSelectors.viewSelector);\n CustomEvents.define(viewSelector, [CustomEvents.events.activate]);\n viewSelector.on(\n CustomEvents.events.activate,\n function(e) {\n e.preventDefault();\n\n var option = $(e.target);\n if (option.hasClass('active')) {\n return;\n }\n\n var view = option.data('view'),\n year = option.data('year'),\n month = option.data('month'),\n day = option.data('day'),\n courseId = option.data('courseid'),\n categoryId = option.data('categoryid');\n\n if (view == 'month') {\n refreshMonthContent(root, year, month, courseId, categoryId, root, 'core_calendar/calendar_month', day)\n .then(function() {\n return window.history.pushState({}, '', '?view=month');\n }).fail(Notification.exception);\n } else if (view == 'day') {\n refreshDayContent(root, year, month, day, courseId, categoryId, root, 'core_calendar/calendar_day')\n .then(function() {\n return window.history.pushState({}, '', '?view=day');\n }).fail(Notification.exception);\n } else if (view == 'upcoming') {\n reloadCurrentUpcoming(root, courseId, categoryId, root, 'core_calendar/calendar_upcoming')\n .then(function() {\n return window.history.pushState({}, '', '?view=upcoming');\n }).fail(Notification.exception);\n }\n }\n );\n };\n\n /**\n * Refresh the month content.\n *\n * @param {object} root The root element.\n * @param {Number} year Year\n * @param {Number} month Month\n * @param {Number} courseid The id of the course whose events are shown\n * @param {Number} categoryid The id of the category whose events are shown\n * @param {object} target The element being replaced. If not specified, the calendarwrapper is used.\n * @param {String} template The template to be rendered.\n * @param {Number} day Day (optional)\n * @return {promise}\n */\n var refreshMonthContent = function(root, year, month, courseid, categoryid, target, template, day) {\n startLoading(root);\n\n target = target || root.find(CalendarSelectors.wrapper);\n template = template || root.attr('data-template');\n day = day || 1;\n M.util.js_pending([root.get('id'), year, month, courseid].join('-'));\n var includenavigation = root.data('includenavigation');\n var mini = root.data('mini');\n return CalendarRepository.getCalendarMonthData(year, month, courseid, categoryid, includenavigation, mini, day)\n .then(function(context) {\n context.viewingmonth = true;\n return Templates.render(template, context);\n })\n .then(function(html, js) {\n return Templates.replaceNode(target, html, js);\n })\n .then(function() {\n $('body').trigger(CalendarEvents.viewUpdated);\n return;\n })\n .always(function() {\n M.util.js_complete([root.get('id'), year, month, courseid].join('-'));\n return stopLoading(root);\n })\n .fail(Notification.exception);\n };\n\n /**\n * Handle changes to the current calendar view.\n *\n * @param {object} root The container element\n * @param {String} url The calendar url to be shown\n * @param {Number} year Year\n * @param {Number} month Month\n * @param {Number} courseid The id of the course whose events are shown\n * @param {Number} categoryid The id of the category whose events are shown\n * @param {Number} day Day (optional)\n * @return {promise}\n */\n var changeMonth = function(root, url, year, month, courseid, categoryid, day) {\n day = day || 1;\n return refreshMonthContent(root, year, month, courseid, categoryid, null, null, day)\n .then(function() {\n if (url.length && url !== '#') {\n window.history.pushState({}, '', url);\n }\n return arguments;\n })\n .then(function() {\n $('body').trigger(CalendarEvents.monthChanged, [year, month, courseid, categoryid]);\n return arguments;\n });\n };\n\n /**\n * Reload the current month view data.\n *\n * @param {object} root The container element.\n * @param {Number} courseId The course id.\n * @param {Number} categoryId The id of the category whose events are shown\n * @return {promise}\n */\n var reloadCurrentMonth = function(root, courseId, categoryId) {\n var year = root.find(CalendarSelectors.wrapper).data('year');\n var month = root.find(CalendarSelectors.wrapper).data('month');\n var day = root.find(CalendarSelectors.wrapper).data('day');\n\n if (typeof courseId === 'undefined') {\n courseId = root.find(CalendarSelectors.wrapper).data('courseid');\n }\n\n if (typeof categoryId === 'undefined') {\n categoryId = root.find(CalendarSelectors.wrapper).data('categoryid');\n }\n\n return refreshMonthContent(root, year, month, courseId, categoryId, null, null, day);\n };\n\n\n /**\n * Refresh the day content.\n *\n * @param {object} root The root element.\n * @param {Number} year Year\n * @param {Number} month Month\n * @param {Number} day Day\n * @param {Number} courseid The id of the course whose events are shown\n * @param {Number} categoryId The id of the category whose events are shown\n * @param {object} target The element being replaced. If not specified, the calendarwrapper is used.\n * @param {String} template The template to be rendered.\n *\n * @return {promise}\n */\n var refreshDayContent = function(root, year, month, day, courseid, categoryId, target, template) {\n startLoading(root);\n\n target = target || root.find(CalendarSelectors.wrapper);\n template = template || root.attr('data-template');\n M.util.js_pending([root.get('id'), year, month, day, courseid, categoryId].join('-'));\n var includenavigation = root.data('includenavigation');\n return CalendarRepository.getCalendarDayData(year, month, day, courseid, categoryId, includenavigation)\n .then(function(context) {\n context.viewingday = true;\n return Templates.render(template, context);\n })\n .then(function(html, js) {\n return Templates.replaceNode(target, html, js);\n })\n .then(function() {\n $('body').trigger(CalendarEvents.viewUpdated);\n return;\n })\n .always(function() {\n M.util.js_complete([root.get('id'), year, month, day, courseid, categoryId].join('-'));\n return stopLoading(root);\n })\n .fail(Notification.exception);\n };\n\n /**\n * Reload the current day view data.\n *\n * @param {object} root The container element.\n * @param {Number} courseId The course id.\n * @param {Number} categoryId The id of the category whose events are shown\n * @return {promise}\n */\n var reloadCurrentDay = function(root, courseId, categoryId) {\n var wrapper = root.find(CalendarSelectors.wrapper);\n var year = wrapper.data('year');\n var month = wrapper.data('month');\n var day = wrapper.data('day');\n\n if (!courseId) {\n courseId = root.find(CalendarSelectors.wrapper).data('courseid');\n }\n\n if (typeof categoryId === 'undefined') {\n categoryId = root.find(CalendarSelectors.wrapper).data('categoryid');\n }\n\n return refreshDayContent(root, year, month, day, courseId, categoryId);\n };\n\n /**\n * Handle changes to the current calendar view.\n *\n * @param {object} root The root element.\n * @param {String} url The calendar url to be shown\n * @param {Number} year Year\n * @param {Number} month Month\n * @param {Number} day Day\n * @param {Number} courseId The id of the course whose events are shown\n * @param {Number} categoryId The id of the category whose events are shown\n * @return {promise}\n */\n var changeDay = function(root, url, year, month, day, courseId, categoryId) {\n return refreshDayContent(root, year, month, day, courseId, categoryId)\n .then(function() {\n if (url.length && url !== '#') {\n window.history.pushState({}, '', url);\n }\n return arguments;\n })\n .then(function() {\n $('body').trigger(CalendarEvents.dayChanged, [year, month, courseId, categoryId]);\n return arguments;\n });\n };\n\n /**\n * Set the element state to loading.\n *\n * @param {object} root The container element\n * @method startLoading\n */\n var startLoading = function(root) {\n var loadingIconContainer = root.find(CalendarSelectors.containers.loadingIcon);\n\n loadingIconContainer.removeClass('hidden');\n };\n\n /**\n * Remove the loading state from the element.\n *\n * @param {object} root The container element\n * @method stopLoading\n */\n var stopLoading = function(root) {\n var loadingIconContainer = root.find(CalendarSelectors.containers.loadingIcon);\n\n loadingIconContainer.addClass('hidden');\n };\n\n /**\n * Reload the current month view data.\n *\n * @param {object} root The container element.\n * @param {Number} courseId The course id.\n * @param {Number} categoryId The id of the category whose events are shown\n * @param {object} target The element being replaced. If not specified, the calendarwrapper is used.\n * @param {String} template The template to be rendered.\n * @return {promise}\n */\n var reloadCurrentUpcoming = function(root, courseId, categoryId, target, template) {\n startLoading(root);\n\n target = target || root.find(CalendarSelectors.wrapper);\n template = template || root.attr('data-template');\n\n if (typeof courseId === 'undefined') {\n courseId = root.find(CalendarSelectors.wrapper).data('courseid');\n }\n\n if (typeof categoryId === 'undefined') {\n categoryId = root.find(CalendarSelectors.wrapper).data('categoryid');\n }\n\n return CalendarRepository.getCalendarUpcomingData(courseId, categoryId)\n .then(function(context) {\n context.viewingupcoming = true;\n return Templates.render(template, context);\n })\n .then(function(html, js) {\n return Templates.replaceNode(target, html, js);\n })\n .then(function() {\n $('body').trigger(CalendarEvents.viewUpdated);\n return;\n })\n .always(function() {\n return stopLoading(root);\n })\n .fail(Notification.exception);\n };\n\n /**\n * Get the CSS class to apply for the given event type.\n *\n * @param {String} eventType The calendar event type\n * @return {String}\n */\n var getEventTypeClassFromType = function(eventType) {\n return 'calendar_event_' + eventType;\n };\n\n /**\n * Render the event summary modal.\n *\n * @param {Number} eventId The calendar event id.\n * @returns {Promise}\n */\n var renderEventSummaryModal = function(eventId) {\n var pendingPromise = new Pending('core_calendar/view_manager:renderEventSummaryModal');\n var typeClass = '';\n\n // Calendar repository promise.\n return CalendarRepository.getEventById(eventId)\n .then(function(getEventResponse) {\n if (!getEventResponse.event) {\n throw new Error('Error encountered while trying to fetch calendar event with ID: ' + eventId);\n }\n var eventData = getEventResponse.event;\n typeClass = getEventTypeClassFromType(eventData.normalisedeventtype);\n\n return eventData;\n }).then(function(eventData) {\n // Build the modal parameters from the event data.\n var modalParams = {\n title: eventData.name,\n type: SummaryModal.TYPE,\n body: Templates.render('core_calendar/event_summary_body', eventData),\n templateContext: {\n canedit: eventData.canedit,\n candelete: eventData.candelete,\n headerclasses: typeClass,\n isactionevent: eventData.isactionevent,\n url: eventData.url\n }\n };\n\n // Create the modal.\n return ModalFactory.create(modalParams);\n\n })\n .then(function(modal) {\n // Handle hidden event.\n modal.getRoot().on(ModalEvents.hidden, function() {\n // Destroy when hidden.\n modal.destroy();\n });\n\n // Finally, render the modal!\n modal.show();\n\n return modal;\n })\n .then(function(modal) {\n pendingPromise.resolve();\n\n return modal;\n })\n .catch(Notification.exception);\n };\n\n return {\n init: function(root, view) {\n registerEventListeners(root, view);\n },\n reloadCurrentMonth: reloadCurrentMonth,\n changeMonth: changeMonth,\n refreshMonthContent: refreshMonthContent,\n reloadCurrentDay: reloadCurrentDay,\n changeDay: changeDay,\n refreshDayContent: refreshDayContent,\n reloadCurrentUpcoming: reloadCurrentUpcoming\n };\n });\n"],"file":"view_manager.min.js"} \ No newline at end of file diff --git a/calendar/amd/src/crud.js b/calendar/amd/src/crud.js index 7853a67fdea..f2a5ee24a17 100644 --- a/calendar/amd/src/crud.js +++ b/calendar/amd/src/crud.js @@ -234,7 +234,9 @@ function( * @returns {Promise} */ function registerEditListeners(root, eventFormModalPromise) { - eventFormModalPromise + var pendingPromise = new Pending('core_calendar/crud:registerEditListeners'); + + return eventFormModalPromise .then(function(modal) { // When something within the calendar tells us the user wants // to edit an event then show the event form modal. @@ -246,11 +248,14 @@ function( e.stopImmediatePropagation(); }); - return; + return modal; }) - .fail(Notification.exception); + .then(function(modal) { + pendingPromise.resolve(); - return eventFormModalPromise; + return modal; + }) + .catch(Notification.exception); } return { diff --git a/calendar/amd/src/summary_modal.js b/calendar/amd/src/summary_modal.js index 3cd7aa07245..5f92706423d 100644 --- a/calendar/amd/src/summary_modal.js +++ b/calendar/amd/src/summary_modal.js @@ -165,6 +165,7 @@ function( // We have to wait for the modal to finish rendering in order to ensure that // the data-event-title property is available to use as the modal title. + M.util.js_pending('core_calendar/summary_modal:registerEventListeners:bodyRendered'); this.getRoot().on(ModalEvents.bodyRendered, function() { this.getModal().data({ eventTitle: this.getEventTitle(), @@ -173,7 +174,7 @@ function( }) .attr('data-type', 'event'); CalendarCrud.registerRemove(this.getModal()); - + M.util.js_complete('core_calendar/summary_modal:registerEventListeners:bodyRendered'); }.bind(this)); $('body').on(CalendarEvents.deleted, function() { diff --git a/calendar/amd/src/view_manager.js b/calendar/amd/src/view_manager.js index eb91fda38d1..8324f655e99 100644 --- a/calendar/amd/src/view_manager.js +++ b/calendar/amd/src/view_manager.js @@ -33,6 +33,7 @@ define([ 'core/modal_events', 'core_calendar/summary_modal', 'core/custom_interaction_events', + 'core/pending', ], function( $, Templates, @@ -44,7 +45,8 @@ define([ ModalFactory, ModalEvents, SummaryModal, - CustomEvents + CustomEvents, + Pending ) { /** @@ -57,6 +59,7 @@ define([ // Bind click events to event links. root.on('click', CalendarSelectors.links.eventLink, function(e) { + var pendingPromise = new Pending('core_calendar/view_manager:eventLink:click'); var target = $(e.target); var eventId = null; @@ -81,7 +84,11 @@ define([ // and causing the day click handler to fire. e.stopPropagation(); - renderEventSummaryModal(eventId); + renderEventSummaryModal(eventId) + .then(pendingPromise.resolve()) + .catch(); + } else { + pendingPromise.resolve(); } }); @@ -358,8 +365,8 @@ define([ * @param {object} root The container element. * @param {Number} courseId The course id. * @param {Number} categoryId The id of the category whose events are shown - * @param {String} template The template to be rendered. * @param {object} target The element being replaced. If not specified, the calendarwrapper is used. + * @param {String} template The template to be rendered. * @return {promise} */ var reloadCurrentUpcoming = function(root, courseId, categoryId, target, template) { @@ -408,12 +415,15 @@ define([ * Render the event summary modal. * * @param {Number} eventId The calendar event id. + * @returns {Promise} */ var renderEventSummaryModal = function(eventId) { + var pendingPromise = new Pending('core_calendar/view_manager:renderEventSummaryModal'); var typeClass = ''; // Calendar repository promise. - CalendarRepository.getEventById(eventId).then(function(getEventResponse) { + return CalendarRepository.getEventById(eventId) + .then(function(getEventResponse) { if (!getEventResponse.event) { throw new Error('Error encountered while trying to fetch calendar event with ID: ' + eventId); } @@ -439,7 +449,8 @@ define([ // Create the modal. return ModalFactory.create(modalParams); - }).done(function(modal) { + }) + .then(function(modal) { // Handle hidden event. modal.getRoot().on(ModalEvents.hidden, function() { // Destroy when hidden. @@ -449,7 +460,14 @@ define([ // Finally, render the modal! modal.show(); - }).fail(Notification.exception); + return modal; + }) + .then(function(modal) { + pendingPromise.resolve(); + + return modal; + }) + .catch(Notification.exception); }; return {