diff --git a/calendar/amd/build/calendar.min.js b/calendar/amd/build/calendar.min.js index 24a58102010..59256a96322 100644 --- a/calendar/amd/build/calendar.min.js +++ b/calendar/amd/build/calendar.min.js @@ -1 +1 @@ -define(["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"],function(a,b,c,d,e,f,g,h,i,j,k,l,m){var n={ROOT:"[data-region='calendar']",EVENT_LINK:"[data-action='view-event']",NEW_EVENT_BUTTON:"[data-action='new-event-button']"},o=function(a){var b="type"+a;return c.get_string(b,"core_calendar").then(function(a){return a})},p=function(a){return c.get_string("subsource","core_calendar",a).then(function(b){return a.url?''+b+"":b})},q=function(b){k.getEventById(b).then(function(c){if(!c.event)throw new Error("Error encountered while trying to fetch calendar event with ID: "+b);var d=c.event,e=o(d.eventtype);if(d.displayeventsource){d.subscription=JSON.parse(d.subscription);var f={url:d.subscription.url,name:d.subscription.name},g=p(f);return a.when(e,g).then(function(a,b){return d.eventtype=a,d.source=b,d})}return e.then(function(a){return d.eventtype=a,d})}).then(function(a){var b={title:a.name,type:j.TYPE,body:d.render("core_calendar/event_summary_body",a),templateContext:{canedit:a.canedit,candelete:a.candelete}};return h.create(b)}).done(function(a){a.getRoot().on(g.hidden,function(){a.destroy()}),a.show()}).fail(e.exception)},r=function(a){var b=a.find(n.NEW_EVENT_BUTTON),c=b.attr("data-context-id");return h.create({type:i.TYPE,large:!0,templateContext:{contextid:c}},[a,n.NEW_EVENT_BUTTON])},s=function(b,c){var d=a("body");d.on(l.created,function(){window.location.reload()}),d.on(l.deleted,function(){window.location.reload()}),d.on(l.updated,function(){window.location.reload()}),d.on(l.editActionEvent,function(a,b){window.location.assign(b)}),c.then(function(a){d.on(l.editEvent,function(b,c){a.setEventId(c),a.show()})})},t=function(){var b=a(n.ROOT);b.on("click",n.EVENT_LINK,function(b){b.preventDefault();var c=a(this).attr("data-event-id");q(c)});var c=r(b);s(b,c)};return{init:function(){m.init(),t()}}}); \ No newline at end of file +define(["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"],function(a,b,c,d,e,f,g,h,i,j,k,l,m){var n={ROOT:"[data-region='calendar']",EVENT_LINK:"[data-action='view-event']",NEW_EVENT_BUTTON:"[data-action='new-event-button']"},o=function(a){var b="type"+a;return c.get_string(b,"core_calendar").then(function(a){return a})},p=function(a){return c.get_string("subsource","core_calendar",a).then(function(b){return a.url?''+b+"":b})},q=function(b){k.getEventById(b).then(function(c){if(!c.event)throw new Error("Error encountered while trying to fetch calendar event with ID: "+b);var d=c.event,e=o(d.eventtype);if(d.displayeventsource){d.subscription=JSON.parse(d.subscription);var f={url:d.subscription.url,name:d.subscription.name},g=p(f);return a.when(e,g).then(function(a,b){return d.eventtype=a,d.source=b,d})}return e.then(function(a){return d.eventtype=a,d})}).then(function(a){var b={title:a.name,type:j.TYPE,body:d.render("core_calendar/event_summary_body",a),templateContext:{canedit:a.canedit,candelete:a.candelete}};return h.create(b)}).done(function(a){a.getRoot().on(g.hidden,function(){a.destroy()}),a.show()}).fail(e.exception)},r=function(a){var b=a.find(n.NEW_EVENT_BUTTON),c=b.attr("data-context-id");return h.create({type:i.TYPE,large:!0,templateContext:{contextid:c}},[a,n.NEW_EVENT_BUTTON])},s=function(b,c){var d=a("body");d.on(l.created,function(){window.location.reload()}),d.on(l.deleted,function(){m.reloadCurrentMonth()}),d.on(l.updated,function(){window.location.reload()}),d.on(l.editActionEvent,function(a,b){window.location.assign(b)}),c.then(function(a){d.on(l.editEvent,function(b,c){a.setEventId(c),a.show()})})},t=function(){var b=a(n.ROOT);b.on("click",n.EVENT_LINK,function(b){b.preventDefault();var c=a(this).attr("data-event-id");q(c)});var c=r(b);s(b,c)};return{init:function(){m.init(),t()}}}); \ 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 384490f57d8..7866676c814 100644 --- a/calendar/amd/build/view_manager.min.js +++ b/calendar/amd/build/view_manager.min.js @@ -1 +1 @@ -define(["jquery","core/templates","core/notification","core_calendar/repository","core_calendar/events"],function(a,b,c,d,e){var f={ROOT:"[data-region='calendar']",CALENDAR_NAV_LINK:"span.calendarwrapper .arrow_link",CALENDAR_MONTH_WRAPPER:".calendarwrapper"},g=function(b){b=a(b),b.on("click",f.CALENDAR_NAV_LINK,function(c){var d=a(b).find(f.CALENDAR_MONTH_WRAPPER).data("courseid"),e=a(c.currentTarget);h(e.attr("href"),e.data("time"),d),c.preventDefault()})},h=function(g,h,i){d.getCalendarMonthData(h,i).then(function(a){return window.history.pushState({},"",g),b.render("core_calendar/month_detailed",a)}).then(function(a,c){return b.replaceNodeContents(f.CALENDAR_MONTH_WRAPPER,a,c)}).done(function(){a("body").trigger(e.monthChanged,[h,i])}).fail(c.exception)};return{init:function(){g(f.ROOT)}}}); \ No newline at end of file +define(["jquery","core/templates","core/notification","core_calendar/repository","core_calendar/events"],function(a,b,c,d,e){var f={ROOT:"[data-region='calendar']",CALENDAR_NAV_LINK:"span.calendarwrapper .arrow_link",CALENDAR_MONTH_WRAPPER:".calendarwrapper"},g=function(b){b=a(b),b.on("click",f.CALENDAR_NAV_LINK,function(c){var d=a(b).find(f.CALENDAR_MONTH_WRAPPER).data("courseid"),e=a(c.currentTarget);i(e.attr("href"),e.data("time"),d),c.preventDefault()})},h=function(a,e){return d.getCalendarMonthData(a,e).then(function(a){return b.render("core_calendar/month_detailed",a)}).then(function(a,c){return b.replaceNodeContents(f.CALENDAR_MONTH_WRAPPER,a,c)}).fail(c.exception)},i=function(b,c,d){return h(c,d).then(function(){window.history.pushState({},"",b)}).then(function(){a("body").trigger(e.monthChanged,[c,d])})},j=function(){var b=a(f.ROOT),c=b.find(f.CALENDAR_MONTH_WRAPPER).data("courseid"),d=b.find(f.CALENDAR_MONTH_WRAPPER).data("current-time");return h(d,c)};return{init:function(){g(f.ROOT)},reloadCurrentMonth:j,changeMonth:i,refreshMonthContent:h}}); \ No newline at end of file diff --git a/calendar/amd/src/calendar.js b/calendar/amd/src/calendar.js index 570c8c62a3e..b1f37e79d69 100644 --- a/calendar/amd/src/calendar.js +++ b/calendar/amd/src/calendar.js @@ -195,7 +195,7 @@ define([ window.location.reload(); }); body.on(CalendarEvents.deleted, function() { - window.location.reload(); + CalendarViewManager.reloadCurrentMonth(); }); body.on(CalendarEvents.updated, function() { window.location.reload(); diff --git a/calendar/amd/src/view_manager.js b/calendar/amd/src/view_manager.js index 6eb6269fbf8..da1e45449b3 100644 --- a/calendar/amd/src/view_manager.js +++ b/calendar/amd/src/view_manager.js @@ -47,31 +47,61 @@ define(['jquery', 'core/templates', 'core/notification', 'core_calendar/reposito }); }; + /** + * Refresh the month content. + * + * @param {Number} time The calendar time to be shown + * @param {Number} courseid The id of the course whose events are shown + * @return {promise} + */ + var refreshMonthContent = function(time, courseid) { + return CalendarRepository.getCalendarMonthData(time, courseid) + .then(function(context) { + return Templates.render('core_calendar/month_detailed', context); + }) + .then(function(html, js) { + return Templates.replaceNodeContents(SELECTORS.CALENDAR_MONTH_WRAPPER, html, js); + }) + .fail(Notification.exception); + }; + /** * Handle changes to the current calendar view. * * @param {String} url The calendar url to be shown * @param {Number} time The calendar time to be shown * @param {Number} courseid The id of the course whose events are shown + * @return {promise} */ var changeMonth = function(url, time, courseid) { - CalendarRepository.getCalendarMonthData(time, courseid) - .then(function(context) { - window.history.pushState({}, '', url); - return Templates.render('core_calendar/month_detailed', context); - }) - .then(function(html, js) { - return Templates.replaceNodeContents(SELECTORS.CALENDAR_MONTH_WRAPPER, html, js); - }) - .done(function() { - $('body').trigger(CalendarEvents.monthChanged, [time, courseid]); - }) - .fail(Notification.exception); + return refreshMonthContent(time, courseid) + .then(function() { + window.history.pushState({}, '', url); + }) + .then(function() { + $('body').trigger(CalendarEvents.monthChanged, [time, courseid]); + }); + }; + + /** + * Reload the current month view data. + * + * @return {promise} + */ + var reloadCurrentMonth = function() { + var root = $(SELECTORS.ROOT), + courseid = root.find(SELECTORS.CALENDAR_MONTH_WRAPPER).data('courseid'), + time = root.find(SELECTORS.CALENDAR_MONTH_WRAPPER).data('current-time'); + + return refreshMonthContent(time, courseid); }; return { init: function() { registerEventListeners(SELECTORS.ROOT); - } + }, + reloadCurrentMonth: reloadCurrentMonth, + changeMonth: changeMonth, + refreshMonthContent: refreshMonthContent }; }); diff --git a/calendar/classes/external/month_exporter.php b/calendar/classes/external/month_exporter.php index cf1d1bd69fb..9b99498e910 100644 --- a/calendar/classes/external/month_exporter.php +++ b/calendar/classes/external/month_exporter.php @@ -112,6 +112,9 @@ class month_exporter extends exporter { 'nextperiod' => [ 'type' => PARAM_INT, ], + 'time' => [ + 'type' => PARAM_INT, + ] ]; } @@ -131,6 +134,7 @@ class month_exporter extends exporter { 'navigation' => $this->get_navigation($output), 'weeks' => $this->get_weeks($output), 'daynames' => $this->get_day_names($output), + 'time' => $this->calendar->time ]; } diff --git a/calendar/templates/month_detailed.mustache b/calendar/templates/month_detailed.mustache index 106d81b91bc..9809309baca 100644 --- a/calendar/templates/month_detailed.mustache +++ b/calendar/templates/month_detailed.mustache @@ -31,7 +31,7 @@ { } }} - + {{> core_calendar/month_header }} {{> core_calendar/month_navigation }}