From f0897dce80a042abf8537862018062ac35e1c6d4 Mon Sep 17 00:00:00 2001 From: Simey Lameze Date: Thu, 15 Jul 2021 19:53:10 +0800 Subject: [PATCH] MDL-71817 calendar: clicking on day link should redirect to day view This patch prevents the full day view to be loaded in the calendar block as this won't be supported. When clicking in the day link it will redirect the user to day view in the full calendar. --- calendar/amd/build/calendar.min.js | 2 +- calendar/amd/build/calendar.min.js.map | 2 +- calendar/amd/src/calendar.js | 19 +++++++++++++------ 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/calendar/amd/build/calendar.min.js b/calendar/amd/build/calendar.min.js index 063dd502f7e..5c147966c84 100644 --- a/calendar/amd/build/calendar.min.js +++ b/calendar/amd/build/calendar.min.js @@ -1,2 +1,2 @@ -define ("core_calendar/calendar",["jquery","core/ajax","core/str","core/templates","core/notification","core/custom_interaction_events","core/modal_events","core/modal_factory","core_calendar/modal_event_form","core_calendar/summary_modal","core_calendar/repository","core_calendar/events","core_calendar/view_manager","core_calendar/crud","core_calendar/selectors"],function(a,b,c,d,f,g,h,i,j,k,l,m,n,o,p){var q={ROOT:"[data-region='calendar']",DAY:"[data-region='day']",NEW_EVENT_BUTTON:"[data-action='new-event-button']",DAY_CONTENT:"[data-region='day-content']",LOADING_ICON:".loading-icon",VIEW_DAY_LINK:"[data-action='view-day-link']",CALENDAR_MONTH_WRAPPER:".calendarwrapper",TODAY:".today"},r=function(b,c,e,g){var h=null,i=g.attr("data-day-timestamp");if(e){h=e.attr("data-day-timestamp")}if(!e||h!=i){d.render("core/loading",{}).then(function(a,b){g.find(q.DAY_CONTENT).addClass("hidden");d.appendNodeContents(g,a,b);if(e){e.find(q.DAY_CONTENT).addClass("hidden");d.appendNodeContents(e,a,b)}}).then(function(){return l.updateEventStartDay(c,i)}).then(function(){a("body").trigger(m.eventMoved,[c,e,g])}).always(function(){var a=g.find(q.LOADING_ICON);g.find(q.DAY_CONTENT).removeClass("hidden");d.replaceNode(a,"","");if(e){var b=e.find(q.LOADING_ICON);e.find(q.DAY_CONTENT).removeClass("hidden");d.replaceNode(b,"","")}}).fail(f.exception)}},s=function(b,c){var d=a("body");d.on(m.created,function(){n.reloadCurrentMonth(b)});d.on(m.deleted,function(){n.reloadCurrentMonth(b)});d.on(m.updated,function(){n.reloadCurrentMonth(b)});d.on(m.editActionEvent,function(a,b){window.location.assign(b)});d.on(m.moveEvent,r);d.on(m.eventMoved,function(){n.reloadCurrentMonth(b)});o.registerEditListeners(b,c)},t=function(b){b.on("click",q.VIEW_DAY_LINK,function(c){var d=a(c.target),e=d.data("year"),g=d.data("month"),h=d.data("day"),i=d.data("courseid"),j=d.data("categoryid");n.refreshDayContent(b,e,g,h,i,j,b,"core_calendar/calendar_day").then(function(){c.preventDefault();var a="?view=day&time="+d.data("timestamp");n.updateUrl(a)}).fail(f.exception)});b.on("change",p.elements.courseSelector,function(){var c=a(this),d=c.val();n.reloadCurrentMonth(b,d,null).then(function(){return b.find(p.elements.courseSelector).val(d)}).fail(f.exception)});var c=o.registerEventFormModal(b),d=a(q.CALENDAR_MONTH_WRAPPER).data("context-id");s(b,c);if(d){b.on("click",q.DAY,function(b){var d=a(b.target);if(!d.is(q.VIEW_DAY_LINK)){var e=a(this).attr("data-new-event-timestamp");c.then(function(a){var b=d.closest(p.wrapper);a.setCourseId(b.data("courseid"));var c=b.data("categoryid");if("undefined"!=typeof c){a.setCategoryId(c)}a.setContextId(b.data("contextId"));a.setStartTime(e);a.show()}).fail(f.exception);b.preventDefault()}})}};return{init:function init(b){b=a(b);n.init(b);t(b)}}}); +define ("core_calendar/calendar",["jquery","core/ajax","core/str","core/templates","core/notification","core/custom_interaction_events","core/modal_events","core/modal_factory","core_calendar/modal_event_form","core_calendar/summary_modal","core_calendar/repository","core_calendar/events","core_calendar/view_manager","core_calendar/crud","core_calendar/selectors","core/config"],function(a,b,c,d,f,g,h,i,j,k,l,m,n,o,p,q){var r={ROOT:"[data-region='calendar']",DAY:"[data-region='day']",NEW_EVENT_BUTTON:"[data-action='new-event-button']",DAY_CONTENT:"[data-region='day-content']",LOADING_ICON:".loading-icon",VIEW_DAY_LINK:"[data-action='view-day-link']",CALENDAR_MONTH_WRAPPER:".calendarwrapper",TODAY:".today"},s=function(b,c,e,g){var h=null,i=g.attr("data-day-timestamp");if(e){h=e.attr("data-day-timestamp")}if(!e||h!=i){d.render("core/loading",{}).then(function(a,b){g.find(r.DAY_CONTENT).addClass("hidden");d.appendNodeContents(g,a,b);if(e){e.find(r.DAY_CONTENT).addClass("hidden");d.appendNodeContents(e,a,b)}}).then(function(){return l.updateEventStartDay(c,i)}).then(function(){a("body").trigger(m.eventMoved,[c,e,g])}).always(function(){var a=g.find(r.LOADING_ICON);g.find(r.DAY_CONTENT).removeClass("hidden");d.replaceNode(a,"","");if(e){var b=e.find(r.LOADING_ICON);e.find(r.DAY_CONTENT).removeClass("hidden");d.replaceNode(b,"","")}}).fail(f.exception)}},t=function(b,c){var d=a("body");d.on(m.created,function(){n.reloadCurrentMonth(b)});d.on(m.deleted,function(){n.reloadCurrentMonth(b)});d.on(m.updated,function(){n.reloadCurrentMonth(b)});d.on(m.editActionEvent,function(a,b){window.location.assign(b)});d.on(m.moveEvent,s);d.on(m.eventMoved,function(){n.reloadCurrentMonth(b)});o.registerEditListeners(b,c)},u=function(b){b.on("click",r.VIEW_DAY_LINK,function(c){var d=document.getElementById(p.fullCalendarView),e=a(c.target),g=e.data("year"),h=e.data("month"),i=e.data("day"),j=e.data("courseid"),k=e.data("categoryid"),l="?view=day&time="+e.data("timestamp");if(d){n.refreshDayContent(b,g,h,i,j,k,b,"core_calendar/calendar_day").then(function(){c.preventDefault();return n.updateUrl(l)}).fail(f.exception)}else{window.location.assign(q.wwwroot+"/calendar/view.php"+l)}});b.on("change",p.elements.courseSelector,function(){var c=a(this),d=c.val();n.reloadCurrentMonth(b,d,null).then(function(){return b.find(p.elements.courseSelector).val(d)}).fail(f.exception)});var c=o.registerEventFormModal(b),d=a(r.CALENDAR_MONTH_WRAPPER).data("context-id");t(b,c);if(d){b.on("click",r.DAY,function(b){var d=a(b.target);if(!d.is(r.VIEW_DAY_LINK)){var e=a(this).attr("data-new-event-timestamp");c.then(function(a){var b=d.closest(p.wrapper);a.setCourseId(b.data("courseid"));var c=b.data("categoryid");if("undefined"!=typeof c){a.setCategoryId(c)}a.setContextId(b.data("contextId"));a.setStartTime(e);a.show()}).fail(f.exception);b.preventDefault()}})}};return{init:function init(b){b=a(b);n.init(b);u(b)}}}); //# sourceMappingURL=calendar.min.js.map diff --git a/calendar/amd/build/calendar.min.js.map b/calendar/amd/build/calendar.min.js.map index 8c32764199f..6e3bf8d7784 100644 --- a/calendar/amd/build/calendar.min.js.map +++ b/calendar/amd/build/calendar.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/calendar.js"],"names":["define","$","Ajax","Str","Templates","Notification","CustomEvents","ModalEvents","ModalFactory","ModalEventForm","SummaryModal","CalendarRepository","CalendarEvents","CalendarViewManager","CalendarCrud","CalendarSelectors","SELECTORS","ROOT","DAY","NEW_EVENT_BUTTON","DAY_CONTENT","LOADING_ICON","VIEW_DAY_LINK","CALENDAR_MONTH_WRAPPER","TODAY","handleMoveEvent","e","eventId","originElement","destinationElement","originTimestamp","destinationTimestamp","attr","render","then","html","js","find","addClass","appendNodeContents","updateEventStartDay","trigger","eventMoved","always","destinationLoadingElement","removeClass","replaceNode","originLoadingElement","fail","exception","registerCalendarEventListeners","root","eventFormModalPromise","body","on","created","reloadCurrentMonth","deleted","updated","editActionEvent","url","window","location","assign","moveEvent","registerEditListeners","registerEventListeners","dayLink","target","year","data","month","day","courseId","categoryId","refreshDayContent","preventDefault","updateUrl","elements","courseSelector","selectElement","val","eventFormPromise","registerEventFormModal","contextId","is","startTime","modal","wrapper","closest","setCourseId","setCategoryId","setContextId","setStartTime","show","init"],"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 * This module is the highest level module for the calendar. It is\n * responsible for initialising all of the components required for\n * the calendar to run. It also coordinates the interaction between\n * components by listening for and responding to different events\n * triggered within the calendar UI.\n *\n * @module core_calendar/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/ajax',\n 'core/str',\n 'core/templates',\n 'core/notification',\n 'core/custom_interaction_events',\n 'core/modal_events',\n 'core/modal_factory',\n 'core_calendar/modal_event_form',\n 'core_calendar/summary_modal',\n 'core_calendar/repository',\n 'core_calendar/events',\n 'core_calendar/view_manager',\n 'core_calendar/crud',\n 'core_calendar/selectors',\n ],\n function(\n $,\n Ajax,\n Str,\n Templates,\n Notification,\n CustomEvents,\n ModalEvents,\n ModalFactory,\n ModalEventForm,\n SummaryModal,\n CalendarRepository,\n CalendarEvents,\n CalendarViewManager,\n CalendarCrud,\n CalendarSelectors\n ) {\n\n var SELECTORS = {\n ROOT: \"[data-region='calendar']\",\n DAY: \"[data-region='day']\",\n NEW_EVENT_BUTTON: \"[data-action='new-event-button']\",\n DAY_CONTENT: \"[data-region='day-content']\",\n LOADING_ICON: '.loading-icon',\n VIEW_DAY_LINK: \"[data-action='view-day-link']\",\n CALENDAR_MONTH_WRAPPER: \".calendarwrapper\",\n TODAY: '.today',\n };\n\n /**\n * Handler for the drag and drop move event. Provides a loading indicator\n * while the request is sent to the server to update the event start date.\n *\n * Triggers a eventMoved calendar javascript event if the event was successfully\n * updated.\n *\n * @param {event} e The calendar move event\n * @param {int} eventId The event id being moved\n * @param {object|null} originElement The jQuery element for where the event is moving from\n * @param {object} destinationElement The jQuery element for where the event is moving to\n */\n var handleMoveEvent = function(e, eventId, originElement, destinationElement) {\n var originTimestamp = null;\n var destinationTimestamp = destinationElement.attr('data-day-timestamp');\n\n if (originElement) {\n originTimestamp = originElement.attr('data-day-timestamp');\n }\n\n // If the event has actually changed day.\n if (!originElement || originTimestamp != destinationTimestamp) {\n Templates.render('core/loading', {})\n .then(function(html, js) {\n // First we show some loading icons in each of the days being affected.\n destinationElement.find(SELECTORS.DAY_CONTENT).addClass('hidden');\n Templates.appendNodeContents(destinationElement, html, js);\n\n if (originElement) {\n originElement.find(SELECTORS.DAY_CONTENT).addClass('hidden');\n Templates.appendNodeContents(originElement, html, js);\n }\n return;\n })\n .then(function() {\n // Send a request to the server to make the change.\n return CalendarRepository.updateEventStartDay(eventId, destinationTimestamp);\n })\n .then(function() {\n // If the update was successful then broadcast an event letting the calendar\n // know that an event has been moved.\n $('body').trigger(CalendarEvents.eventMoved, [eventId, originElement, destinationElement]);\n return;\n })\n .always(function() {\n // Always remove the loading icons regardless of whether the update\n // request was successful or not.\n var destinationLoadingElement = destinationElement.find(SELECTORS.LOADING_ICON);\n destinationElement.find(SELECTORS.DAY_CONTENT).removeClass('hidden');\n Templates.replaceNode(destinationLoadingElement, '', '');\n\n if (originElement) {\n var originLoadingElement = originElement.find(SELECTORS.LOADING_ICON);\n originElement.find(SELECTORS.DAY_CONTENT).removeClass('hidden');\n Templates.replaceNode(originLoadingElement, '', '');\n }\n return;\n })\n .fail(Notification.exception);\n }\n };\n\n /**\n * Listen to and handle any calendar events fired by the calendar UI.\n *\n * @method registerCalendarEventListeners\n * @param {object} root The calendar root element\n * @param {object} eventFormModalPromise A promise reolved with the event form modal\n */\n var registerCalendarEventListeners = function(root, eventFormModalPromise) {\n var body = $('body');\n\n body.on(CalendarEvents.created, function() {\n CalendarViewManager.reloadCurrentMonth(root);\n });\n body.on(CalendarEvents.deleted, function() {\n CalendarViewManager.reloadCurrentMonth(root);\n });\n body.on(CalendarEvents.updated, function() {\n CalendarViewManager.reloadCurrentMonth(root);\n });\n body.on(CalendarEvents.editActionEvent, function(e, url) {\n // Action events needs to be edit directly on the course module.\n window.location.assign(url);\n });\n // Handle the event fired by the drag and drop code.\n body.on(CalendarEvents.moveEvent, handleMoveEvent);\n // When an event is successfully moved we should updated the UI.\n body.on(CalendarEvents.eventMoved, function() {\n CalendarViewManager.reloadCurrentMonth(root);\n });\n\n CalendarCrud.registerEditListeners(root, eventFormModalPromise);\n };\n\n /**\n * Register event listeners for the module.\n *\n * @param {object} root The calendar root element\n */\n var registerEventListeners = function(root) {\n // Listen the click on the day link to render the day view.\n root.on('click', SELECTORS.VIEW_DAY_LINK, function(e) {\n var dayLink = $(e.target);\n var year = dayLink.data('year'),\n month = dayLink.data('month'),\n day = dayLink.data('day'),\n courseId = dayLink.data('courseid'),\n categoryId = dayLink.data('categoryid');\n CalendarViewManager.refreshDayContent(root, year, month, day, courseId, categoryId, root,\n 'core_calendar/calendar_day').then(function() {\n e.preventDefault();\n var url = '?view=day&time=' + dayLink.data('timestamp');\n CalendarViewManager.updateUrl(url);\n }).fail(Notification.exception);\n });\n\n root.on('change', CalendarSelectors.elements.courseSelector, function() {\n var selectElement = $(this);\n var courseId = selectElement.val();\n CalendarViewManager.reloadCurrentMonth(root, courseId, null)\n .then(function() {\n // We need to get the selector again because the content has changed.\n return root.find(CalendarSelectors.elements.courseSelector).val(courseId);\n })\n .fail(Notification.exception);\n });\n\n var eventFormPromise = CalendarCrud.registerEventFormModal(root),\n contextId = $(SELECTORS.CALENDAR_MONTH_WRAPPER).data('context-id');\n registerCalendarEventListeners(root, eventFormPromise);\n\n if (contextId) {\n // Bind click events to calendar days.\n root.on('click', SELECTORS.DAY, function (e) {\n\n var target = $(e.target);\n\n if (!target.is(SELECTORS.VIEW_DAY_LINK)) {\n var startTime = $(this).attr('data-new-event-timestamp');\n eventFormPromise.then(function (modal) {\n var wrapper = target.closest(CalendarSelectors.wrapper);\n modal.setCourseId(wrapper.data('courseid'));\n\n var categoryId = wrapper.data('categoryid');\n if (typeof categoryId !== 'undefined') {\n modal.setCategoryId(categoryId);\n }\n\n modal.setContextId(wrapper.data('contextId'));\n modal.setStartTime(startTime);\n modal.show();\n return;\n })\n .fail(Notification.exception);\n\n e.preventDefault();\n }\n });\n }\n };\n\n return {\n init: function(root) {\n root = $(root);\n CalendarViewManager.init(root);\n registerEventListeners(root);\n }\n };\n});\n"],"file":"calendar.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/calendar.js"],"names":["define","$","Ajax","Str","Templates","Notification","CustomEvents","ModalEvents","ModalFactory","ModalEventForm","SummaryModal","CalendarRepository","CalendarEvents","CalendarViewManager","CalendarCrud","CalendarSelectors","Config","SELECTORS","ROOT","DAY","NEW_EVENT_BUTTON","DAY_CONTENT","LOADING_ICON","VIEW_DAY_LINK","CALENDAR_MONTH_WRAPPER","TODAY","handleMoveEvent","e","eventId","originElement","destinationElement","originTimestamp","destinationTimestamp","attr","render","then","html","js","find","addClass","appendNodeContents","updateEventStartDay","trigger","eventMoved","always","destinationLoadingElement","removeClass","replaceNode","originLoadingElement","fail","exception","registerCalendarEventListeners","root","eventFormModalPromise","body","on","created","reloadCurrentMonth","deleted","updated","editActionEvent","url","window","location","assign","moveEvent","registerEditListeners","registerEventListeners","viewingFullCalendar","document","getElementById","fullCalendarView","dayLink","target","year","data","month","day","courseId","categoryId","refreshDayContent","preventDefault","updateUrl","wwwroot","elements","courseSelector","selectElement","val","eventFormPromise","registerEventFormModal","contextId","is","startTime","modal","wrapper","closest","setCourseId","setCategoryId","setContextId","setStartTime","show","init"],"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 * This module is the highest level module for the calendar. It is\n * responsible for initialising all of the components required for\n * the calendar to run. It also coordinates the interaction between\n * components by listening for and responding to different events\n * triggered within the calendar UI.\n *\n * @module core_calendar/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/ajax',\n 'core/str',\n 'core/templates',\n 'core/notification',\n 'core/custom_interaction_events',\n 'core/modal_events',\n 'core/modal_factory',\n 'core_calendar/modal_event_form',\n 'core_calendar/summary_modal',\n 'core_calendar/repository',\n 'core_calendar/events',\n 'core_calendar/view_manager',\n 'core_calendar/crud',\n 'core_calendar/selectors',\n 'core/config',\n ],\n function(\n $,\n Ajax,\n Str,\n Templates,\n Notification,\n CustomEvents,\n ModalEvents,\n ModalFactory,\n ModalEventForm,\n SummaryModal,\n CalendarRepository,\n CalendarEvents,\n CalendarViewManager,\n CalendarCrud,\n CalendarSelectors,\n Config,\n ) {\n\n var SELECTORS = {\n ROOT: \"[data-region='calendar']\",\n DAY: \"[data-region='day']\",\n NEW_EVENT_BUTTON: \"[data-action='new-event-button']\",\n DAY_CONTENT: \"[data-region='day-content']\",\n LOADING_ICON: '.loading-icon',\n VIEW_DAY_LINK: \"[data-action='view-day-link']\",\n CALENDAR_MONTH_WRAPPER: \".calendarwrapper\",\n TODAY: '.today',\n };\n\n /**\n * Handler for the drag and drop move event. Provides a loading indicator\n * while the request is sent to the server to update the event start date.\n *\n * Triggers a eventMoved calendar javascript event if the event was successfully\n * updated.\n *\n * @param {event} e The calendar move event\n * @param {int} eventId The event id being moved\n * @param {object|null} originElement The jQuery element for where the event is moving from\n * @param {object} destinationElement The jQuery element for where the event is moving to\n */\n var handleMoveEvent = function(e, eventId, originElement, destinationElement) {\n var originTimestamp = null;\n var destinationTimestamp = destinationElement.attr('data-day-timestamp');\n\n if (originElement) {\n originTimestamp = originElement.attr('data-day-timestamp');\n }\n\n // If the event has actually changed day.\n if (!originElement || originTimestamp != destinationTimestamp) {\n Templates.render('core/loading', {})\n .then(function(html, js) {\n // First we show some loading icons in each of the days being affected.\n destinationElement.find(SELECTORS.DAY_CONTENT).addClass('hidden');\n Templates.appendNodeContents(destinationElement, html, js);\n\n if (originElement) {\n originElement.find(SELECTORS.DAY_CONTENT).addClass('hidden');\n Templates.appendNodeContents(originElement, html, js);\n }\n return;\n })\n .then(function() {\n // Send a request to the server to make the change.\n return CalendarRepository.updateEventStartDay(eventId, destinationTimestamp);\n })\n .then(function() {\n // If the update was successful then broadcast an event letting the calendar\n // know that an event has been moved.\n $('body').trigger(CalendarEvents.eventMoved, [eventId, originElement, destinationElement]);\n return;\n })\n .always(function() {\n // Always remove the loading icons regardless of whether the update\n // request was successful or not.\n var destinationLoadingElement = destinationElement.find(SELECTORS.LOADING_ICON);\n destinationElement.find(SELECTORS.DAY_CONTENT).removeClass('hidden');\n Templates.replaceNode(destinationLoadingElement, '', '');\n\n if (originElement) {\n var originLoadingElement = originElement.find(SELECTORS.LOADING_ICON);\n originElement.find(SELECTORS.DAY_CONTENT).removeClass('hidden');\n Templates.replaceNode(originLoadingElement, '', '');\n }\n return;\n })\n .fail(Notification.exception);\n }\n };\n\n /**\n * Listen to and handle any calendar events fired by the calendar UI.\n *\n * @method registerCalendarEventListeners\n * @param {object} root The calendar root element\n * @param {object} eventFormModalPromise A promise reolved with the event form modal\n */\n var registerCalendarEventListeners = function(root, eventFormModalPromise) {\n var body = $('body');\n\n body.on(CalendarEvents.created, function() {\n CalendarViewManager.reloadCurrentMonth(root);\n });\n body.on(CalendarEvents.deleted, function() {\n CalendarViewManager.reloadCurrentMonth(root);\n });\n body.on(CalendarEvents.updated, function() {\n CalendarViewManager.reloadCurrentMonth(root);\n });\n body.on(CalendarEvents.editActionEvent, function(e, url) {\n // Action events needs to be edit directly on the course module.\n window.location.assign(url);\n });\n // Handle the event fired by the drag and drop code.\n body.on(CalendarEvents.moveEvent, handleMoveEvent);\n // When an event is successfully moved we should updated the UI.\n body.on(CalendarEvents.eventMoved, function() {\n CalendarViewManager.reloadCurrentMonth(root);\n });\n\n CalendarCrud.registerEditListeners(root, eventFormModalPromise);\n };\n\n /**\n * Register event listeners for the module.\n *\n * @param {object} root The calendar root element\n */\n var registerEventListeners = function(root) {\n // Listen the click on the day link to render the day view.\n root.on('click', SELECTORS.VIEW_DAY_LINK, function(e) {\n const viewingFullCalendar = document.getElementById(CalendarSelectors.fullCalendarView);\n var dayLink = $(e.target);\n var year = dayLink.data('year'),\n month = dayLink.data('month'),\n day = dayLink.data('day'),\n courseId = dayLink.data('courseid'),\n categoryId = dayLink.data('categoryid');\n const url = '?view=day&time=' + dayLink.data('timestamp');\n if (viewingFullCalendar) {\n CalendarViewManager.refreshDayContent(root, year, month, day, courseId, categoryId, root,\n 'core_calendar/calendar_day').then(function() {\n e.preventDefault();\n return CalendarViewManager.updateUrl(url);\n }).fail(Notification.exception);\n } else {\n window.location.assign(Config.wwwroot + '/calendar/view.php' + url);\n }\n });\n\n root.on('change', CalendarSelectors.elements.courseSelector, function() {\n var selectElement = $(this);\n var courseId = selectElement.val();\n CalendarViewManager.reloadCurrentMonth(root, courseId, null)\n .then(function() {\n // We need to get the selector again because the content has changed.\n return root.find(CalendarSelectors.elements.courseSelector).val(courseId);\n })\n .fail(Notification.exception);\n });\n\n var eventFormPromise = CalendarCrud.registerEventFormModal(root),\n contextId = $(SELECTORS.CALENDAR_MONTH_WRAPPER).data('context-id');\n registerCalendarEventListeners(root, eventFormPromise);\n\n if (contextId) {\n // Bind click events to calendar days.\n root.on('click', SELECTORS.DAY, function (e) {\n\n var target = $(e.target);\n\n if (!target.is(SELECTORS.VIEW_DAY_LINK)) {\n var startTime = $(this).attr('data-new-event-timestamp');\n eventFormPromise.then(function (modal) {\n var wrapper = target.closest(CalendarSelectors.wrapper);\n modal.setCourseId(wrapper.data('courseid'));\n\n var categoryId = wrapper.data('categoryid');\n if (typeof categoryId !== 'undefined') {\n modal.setCategoryId(categoryId);\n }\n\n modal.setContextId(wrapper.data('contextId'));\n modal.setStartTime(startTime);\n modal.show();\n return;\n })\n .fail(Notification.exception);\n\n e.preventDefault();\n }\n });\n }\n };\n\n return {\n init: function(root) {\n root = $(root);\n CalendarViewManager.init(root);\n registerEventListeners(root);\n }\n };\n});\n"],"file":"calendar.min.js"} \ No newline at end of file diff --git a/calendar/amd/src/calendar.js b/calendar/amd/src/calendar.js index f2b7b9e612d..19a8bd0897f 100644 --- a/calendar/amd/src/calendar.js +++ b/calendar/amd/src/calendar.js @@ -40,6 +40,7 @@ define([ 'core_calendar/view_manager', 'core_calendar/crud', 'core_calendar/selectors', + 'core/config', ], function( $, @@ -56,7 +57,8 @@ define([ CalendarEvents, CalendarViewManager, CalendarCrud, - CalendarSelectors + CalendarSelectors, + Config, ) { var SELECTORS = { @@ -173,18 +175,23 @@ define([ var registerEventListeners = function(root) { // Listen the click on the day link to render the day view. root.on('click', SELECTORS.VIEW_DAY_LINK, function(e) { + const viewingFullCalendar = document.getElementById(CalendarSelectors.fullCalendarView); var dayLink = $(e.target); var year = dayLink.data('year'), month = dayLink.data('month'), day = dayLink.data('day'), courseId = dayLink.data('courseid'), categoryId = dayLink.data('categoryid'); - CalendarViewManager.refreshDayContent(root, year, month, day, courseId, categoryId, root, + const url = '?view=day&time=' + dayLink.data('timestamp'); + if (viewingFullCalendar) { + CalendarViewManager.refreshDayContent(root, year, month, day, courseId, categoryId, root, 'core_calendar/calendar_day').then(function() { - e.preventDefault(); - var url = '?view=day&time=' + dayLink.data('timestamp'); - CalendarViewManager.updateUrl(url); - }).fail(Notification.exception); + e.preventDefault(); + return CalendarViewManager.updateUrl(url); + }).fail(Notification.exception); + } else { + window.location.assign(Config.wwwroot + '/calendar/view.php' + url); + } }); root.on('change', CalendarSelectors.elements.courseSelector, function() {