Proyectos de Subversion Moodle

Rev

Autoría | Ultima modificación | Ver Log |

{"version":3,"file":"crud.min.js","sources":["../src/crud.js"],"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 module to handle CRUD operations within the UI.\n *\n * @module     core_calendar/crud\n * @copyright  2017 Andrew Nicols <andrew@nicols.co.uk>\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/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    'core/modal_save_cancel',\n    'core/config',\n],\nfunction(\n    $,\n    Str,\n    Notification,\n    ModalEvents,\n    ModalEventForm,\n    CalendarRepository,\n    CalendarEvents,\n    CalendarModalDelete,\n    CalendarSelectors,\n    Pending,\n    ModalSaveCancel,\n    Config,\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 pendingPromise = new Pending('core_calendar/crud:confirmDeletion');\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 = CalendarModalDelete.create();\n        } else {\n            deleteStrings.push({\n                key: 'confirmeventdelete',\n                component: 'calendar',\n                param: eventTitle\n            });\n\n\n            deletePromise = ModalSaveCancel.create();\n        }\n\n        var stringsPromise = Str.get_strings(deleteStrings);\n\n        var finalPromise = $.when(stringsPromise, deletePromise)\n        .then(function(strings, deleteModal) {\n            deleteModal.setRemoveOnClose(true);\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        .then(function(modal) {\n            pendingPromise.resolve();\n\n            return modal;\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 = ModalEventForm.create();\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                const courseId = wrapper.data('courseid');\n                if (typeof categoryId !== 'undefined' && courseId != Config.siteId) {\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            .catch(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.setCourseId(eventWrapper.data('courseId'));\n                modal.show();\n\n                e.stopImmediatePropagation();\n                return;\n            }).catch(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 target = root.find(`[data-event-id=${eventId}]`),\n                    calendarWrapper = root.find(CalendarSelectors.wrapper);\n\n                modal.setEventId(eventId);\n                modal.setContextId(calendarWrapper.data('contextId'));\n                modal.setReturnElement(target);\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"],"names":["define","$","Str","Notification","ModalEvents","ModalEventForm","CalendarRepository","CalendarEvents","CalendarModalDelete","CalendarSelectors","Pending","ModalSaveCancel","Config","registerRemove","root","on","actions","remove","e","eventSource","this","closest","eventItem","eventId","eventTitle","eventCount","deletePromise","pendingPromise","deleteStrings","key","component","isRepeatedEvent","parseInt","push","param","name","count","create","stringsPromise","get_strings","when","then","strings","deleteModal","setRemoveOnClose","setTitle","setBody","setSaveButtonText","show","getRoot","save","deleteEvent","trigger","deleted","resolve","catch","exception","deleteAll","modal","confirmDeletion","data","preventDefault","registerEditListeners","eventFormModalPromise","editEvent","target","find","calendarWrapper","wrapper","setEventId","setContextId","setReturnElement","stopImmediatePropagation","registerEventFormModal","eventFormPromise","categoryId","courseId","siteId","setCategoryId","today","firstDay","day","length","setStartTime","setCourseId","edit","currentTarget","eventWrapper"],"mappings":"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"}