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","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 <http://www.gnu.org/licenses/>.\n\n/**\n * A javascript module to handle summary modal.\n *\n * @module     core_calendar/summary_modal\n * @copyright  2017 Simey Lameze <simey@moodle.com>\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"}