From dbccdae8f538e8f0d74c09e81a4937111d495a4c Mon Sep 17 00:00:00 2001 From: Simey Lameze Date: Mon, 27 May 2019 10:38:02 +0800 Subject: [PATCH 1/5] MDL-65671 calendar: add the calendar view selector --- calendar/amd/build/selectors.min.js | 2 +- calendar/amd/build/view_manager.min.js | 2 +- calendar/amd/src/selectors.js | 1 + calendar/amd/src/view_manager.js | 71 +++++++++++++++---- .../external/calendar_upcoming_exporter.php | 6 +- calendar/lib.php | 3 + calendar/templates/calendar_day.mustache | 3 + calendar/templates/calendar_month.mustache | 4 ++ calendar/templates/calendar_upcoming.mustache | 1 + calendar/templates/upcoming_detailed.mustache | 1 + calendar/templates/view_selector.mustache | 58 +++++++++++++++ lang/en/calendar.php | 1 + 12 files changed, 138 insertions(+), 15 deletions(-) create mode 100644 calendar/templates/view_selector.mustache diff --git a/calendar/amd/build/selectors.min.js b/calendar/amd/build/selectors.min.js index 5bb76436732..94a11d714ee 100644 --- a/calendar/amd/build/selectors.min.js +++ b/calendar/amd/build/selectors.min.js @@ -1 +1 @@ -define([],function(){return{eventFilterItem:"[data-action='filter-event-type']",eventType:{site:"[data-eventtype-site]",category:"[data-eventtype-category]",course:"[data-eventtype-course]",group:"[data-eventtype-group]",user:"[data-eventtype-user]"},popoverType:{site:"[data-popover-eventtype-site]",category:"[data-popover-eventtype-category]",course:"[data-popover-eventtype-course]",group:"[data-popover-eventtype-group]",user:"[data-popover-eventtype-user]"},calendarPeriods:{month:"[data-period='month']"},courseSelector:'select[name="course"]',actions:{create:'[data-action="new-event-button"]',edit:'[data-action="edit"]',remove:'[data-action="delete"]',viewEvent:'[data-action="view-event"]'},elements:{courseSelector:'select[name="course"]'},today:".today",day:'[data-region="day"]',wrapper:".calendarwrapper",eventItem:'[data-type="event"]',links:{navLink:".calendarwrapper .arrow_link",eventLink:"[data-region='event-item']"},containers:{loadingIcon:'[data-region="overlay-icon-container"]'}}}); \ No newline at end of file +define([],function(){return{eventFilterItem:"[data-action='filter-event-type']",eventType:{site:"[data-eventtype-site]",category:"[data-eventtype-category]",course:"[data-eventtype-course]",group:"[data-eventtype-group]",user:"[data-eventtype-user]"},popoverType:{site:"[data-popover-eventtype-site]",category:"[data-popover-eventtype-category]",course:"[data-popover-eventtype-course]",group:"[data-popover-eventtype-group]",user:"[data-popover-eventtype-user]"},calendarPeriods:{month:"[data-period='month']"},courseSelector:'select[name="course"]',viewSelector:'div[data-region="view-selector"]',actions:{create:'[data-action="new-event-button"]',edit:'[data-action="edit"]',remove:'[data-action="delete"]',viewEvent:'[data-action="view-event"]'},elements:{courseSelector:'select[name="course"]'},today:".today",day:'[data-region="day"]',wrapper:".calendarwrapper",eventItem:'[data-type="event"]',links:{navLink:".calendarwrapper .arrow_link",eventLink:"[data-region='event-item']"},containers:{loadingIcon:'[data-region="overlay-icon-container"]'}}}); \ 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 e61502877e8..bd23cc149e1 100644 --- a/calendar/amd/build/view_manager.min.js +++ b/calendar/amd/build/view_manager.min.js @@ -1 +1 @@ -define(["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"],function(a,b,c,d,e,f,g,h,i,j){var k=function(b){b=a(b),b.on("click",g.links.eventLink,function(b){var c,d=a(b.target),e=null;c=d.is(g.actions.viewEvent)?d:d.closest(g.actions.viewEvent),e=c.length?c.data("eventId"):d.find(g.actions.viewEvent).data("eventId"),e&&(b.preventDefault(),b.stopPropagation(),v(e))}),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);"month"===e?(m(b,i.attr("href"),i.data("year"),i.data("month"),f,h),c.preventDefault()):"day"===e&&(q(b,i.attr("href"),i.data("year"),i.data("month"),i.data("day"),f,h),c.preventDefault())})},l=function(c,h,i,j,k,l){r(c),l=l||c.find(g.wrapper),M.util.js_pending([c.get("id"),h,i,j].join("-"));var m=c.data("includenavigation"),n=c.data("mini");return e.getCalendarMonthData(h,i,j,k,m,n).then(function(a){return b.render(c.attr("data-template"),a)}).then(function(a,c){return b.replaceNode(l,a,c)}).then(function(){a("body").trigger(f.viewUpdated)}).always(function(){return M.util.js_complete([c.get("id"),h,i,j].join("-")),s(c)}).fail(d.exception)},m=function(b,c,d,e,g,h){return l(b,d,e,g,h).then(function(){return c.length&&"#"!==c&&window.history.pushState({},"",c),arguments}).then(function(){return a("body").trigger(f.monthChanged,[d,e,g,h]),arguments})},n=function(a,b,c){var d=a.find(g.wrapper).data("year"),e=a.find(g.wrapper).data("month");return"undefined"==typeof b&&(b=a.find(g.wrapper).data("courseid")),"undefined"==typeof c&&(c=a.find(g.wrapper).data("categoryid")),l(a,d,e,b,c)},o=function(c,h,i,j,k,l,m){r(c),m=m||c.find(g.wrapper),M.util.js_pending([c.get("id"),h,i,j,k,l].join("-"));var n=c.data("includenavigation");return e.getCalendarDayData(h,i,j,k,l,n).then(function(a){return b.render(c.attr("data-template"),a)}).then(function(a,c){return b.replaceNode(m,a,c)}).then(function(){a("body").trigger(f.viewUpdated)}).always(function(){return M.util.js_complete([c.get("id"),h,i,j,k,l].join("-")),s(c)}).fail(d.exception)},p=function(a,b,c){var d=a.find(g.wrapper),e=d.data("year"),f=d.data("month"),h=d.data("day");return b||(b=a.find(g.wrapper).data("courseid")),"undefined"==typeof c&&(c=a.find(g.wrapper).data("categoryid")),o(a,e,f,h,b,c)},q=function(b,c,d,e,g,h,i){return o(b,d,e,g,h,i).then(function(){return c.length&&"#"!==c&&window.history.pushState({},"",c),arguments}).then(function(){return a("body").trigger(f.dayChanged,[d,e,g,h,i]),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){r(c);var j=c.find(g.wrapper);return"undefined"==typeof h&&(h=c.find(g.wrapper).data("courseid")),"undefined"==typeof i&&(i=c.find(g.wrapper).data("categoryid")),e.getCalendarUpcomingData(h,i).then(function(a){return b.render(c.attr("data-template"),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="";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;return c=u(d.normalisedeventtype),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(a){k(a)},reloadCurrentMonth:n,changeMonth:m,refreshMonthContent:l,reloadCurrentDay:p,changeDay:q,refreshDayContent:o,reloadCurrentUpcoming:t}}); \ No newline at end of file +define(["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,d=a(b.target),e=null;c=d.is(g.actions.viewEvent)?d:d.closest(g.actions.viewEvent),e=c.length?c.data("eventId"):d.find(g.actions.viewEvent).data("eventId"),e&&(b.preventDefault(),b.stopPropagation(),w(e))}),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);"month"===e?(n(b,i.attr("href"),i.data("year"),i.data("month"),f,h),c.preventDefault()):"day"===e&&(r(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")){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");"month"==f?m(b,g,h,j,k,b,"core_calendar/calendar_month").then(function(){return window.history.pushState({},"","?view=month")}).fail(d.exception):"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):"upcoming"==f&&u(b,j,k,"core_calendar/calendar_upcoming").then(function(){return window.history.pushState({},"","?view=upcoming")}).fail(d.exception)}})},m=function(c,h,i,j,k,l,m){s(c),l=l||c.find(g.wrapper),m=m||c.attr("data-template"),M.util.js_pending([c.get("id"),h,i,j].join("-"));var n=c.data("includenavigation"),o=c.data("mini");return e.getCalendarMonthData(h,i,j,k,n,o).then(function(a){return a.viewingmonth=!0,b.render(m,a)}).then(function(a,c){return b.replaceNode(l,a,c)}).then(function(){a("body").trigger(f.viewUpdated)}).always(function(){return M.util.js_complete([c.get("id"),h,i,j].join("-")),t(c)}).fail(d.exception)},n=function(b,c,d,e,g,h){return m(b,d,e,g,h).then(function(){return c.length&&"#"!==c&&window.history.pushState({},"",c),arguments}).then(function(){return a("body").trigger(f.monthChanged,[d,e,g,h]),arguments})},o=function(a,b,c){var d=a.find(g.wrapper).data("year"),e=a.find(g.wrapper).data("month");return"undefined"==typeof b&&(b=a.find(g.wrapper).data("courseid")),"undefined"==typeof c&&(c=a.find(g.wrapper).data("categoryid")),m(a,d,e,b,c)},p=function(c,h,i,j,k,l,m,n){s(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){return a.viewingday=!0,b.render(n,a)}).then(function(a,c){return b.replaceNode(m,a,c)}).then(function(){a("body").trigger(f.viewUpdated)}).always(function(){return M.util.js_complete([c.get("id"),h,i,j,k,l].join("-")),t(c)}).fail(d.exception)},q=function(a,b,c){var d=a.find(g.wrapper),e=d.data("year"),f=d.data("month"),h=d.data("day");return b||(b=a.find(g.wrapper).data("courseid")),"undefined"==typeof c&&(c=a.find(g.wrapper).data("categoryid")),p(a,e,f,h,b,c)},r=function(b,c,d,e,g,h,i){return p(b,d,e,g,h,i).then(function(){return c.length&&"#"!==c&&window.history.pushState({},"",c),arguments}).then(function(){return a("body").trigger(f.dayChanged,[d,e,g,h,i]),arguments})},s=function(a){var b=a.find(g.containers.loadingIcon);b.removeClass("hidden")},t=function(a){var b=a.find(g.containers.loadingIcon);b.addClass("hidden")},u=function(c,h,i,j){s(c);var k=c.find(g.wrapper);return j=j||c.attr("data-template"),"undefined"==typeof h&&(h=c.find(g.wrapper).data("courseid")),"undefined"==typeof i&&(i=c.find(g.wrapper).data("categoryid")),e.getCalendarUpcomingData(h,i).then(function(a){return a.viewingupcoming=!0,b.render(j,a)}).then(function(a,c){return b.replaceNode(k,a,c)}).then(function(){a("body").trigger(f.viewUpdated)}).always(function(){return t(c)}).fail(d.exception)},v=function(a){return"calendar_event_"+a},w=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;return c=v(d.normalisedeventtype),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(a,b){l(a,b)},reloadCurrentMonth:o,changeMonth:n,refreshMonthContent:m,reloadCurrentDay:q,changeDay:r,refreshDayContent:p,reloadCurrentUpcoming:u}}); \ No newline at end of file diff --git a/calendar/amd/src/selectors.js b/calendar/amd/src/selectors.js index d8ead438a85..2326670995e 100644 --- a/calendar/amd/src/selectors.js +++ b/calendar/amd/src/selectors.js @@ -42,6 +42,7 @@ define([], function() { month: "[data-period='month']", }, courseSelector: 'select[name="course"]', + viewSelector: 'div[data-region="view-selector"]', actions: { create: '[data-action="new-event-button"]', edit: '[data-action="edit"]', diff --git a/calendar/amd/src/view_manager.js b/calendar/amd/src/view_manager.js index 7043f75e355..e71e7618897 100644 --- a/calendar/amd/src/view_manager.js +++ b/calendar/amd/src/view_manager.js @@ -32,6 +32,7 @@ define([ 'core/modal_factory', 'core/modal_events', 'core_calendar/summary_modal', + 'core/custom_interaction_events', ], function( $, Templates, @@ -42,7 +43,8 @@ define([ CalendarSelectors, ModalFactory, ModalEvents, - SummaryModal + SummaryModal, + CustomEvents ) { /** @@ -101,6 +103,44 @@ define([ } }); + + var viewSelector = root.find(CalendarSelectors.viewSelector); + CustomEvents.define(viewSelector, [CustomEvents.events.activate]); + viewSelector.on( + CustomEvents.events.activate, + function(e) { + e.preventDefault(); + + var option = $(e.target); + if (option.hasClass('active')) { + return; + } + + var view = option.data('view'), + year = option.data('year'), + month = option.data('month'), + day = option.data('day'), + courseId = option.data('courseid'), + categoryId = option.data('categoryid'); + + if (view == 'month') { + refreshMonthContent(root, year, month, courseId, categoryId, root, 'core_calendar/calendar_month') + .then(function() { + return window.history.pushState({}, '', '?view=month'); + }).fail(Notification.exception); + } else if (view == 'day') { + refreshDayContent(root, year, month, day, courseId, categoryId, root, 'core_calendar/calendar_day') + .then(function() { + return window.history.pushState({}, '', '?view=day'); + }).fail(Notification.exception); + } else if (view == 'upcoming') { + reloadCurrentUpcoming(root, courseId, categoryId, 'core_calendar/calendar_upcoming') + .then(function() { + return window.history.pushState({}, '', '?view=upcoming'); + }).fail(Notification.exception); + } + } + ); }; /** @@ -112,19 +152,21 @@ define([ * @param {Number} courseid The id of the course whose events are shown * @param {Number} categoryid The id of the category whose events are shown * @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 refreshMonthContent = function(root, year, month, courseid, categoryid, target) { + var refreshMonthContent = function(root, year, month, courseid, categoryid, target, template) { startLoading(root); target = target || root.find(CalendarSelectors.wrapper); - + template = template || root.attr('data-template'); M.util.js_pending([root.get('id'), year, month, courseid].join('-')); var includenavigation = root.data('includenavigation'); var mini = root.data('mini'); return CalendarRepository.getCalendarMonthData(year, month, courseid, categoryid, includenavigation, mini) .then(function(context) { - return Templates.render(root.attr('data-template'), context); + context.viewingmonth = true; + return Templates.render(template, context); }) .then(function(html, js) { return Templates.replaceNode(target, html, js); @@ -199,18 +241,21 @@ define([ * @param {Number} courseid The id of the course whose events are shown * @param {Number} categoryId The id of the category whose events are shown * @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 refreshDayContent = function(root, year, month, day, courseid, categoryId, target) { + var refreshDayContent = function(root, year, month, day, courseid, categoryId, target, template) { startLoading(root); target = target || root.find(CalendarSelectors.wrapper); - + template = template || root.attr('data-template'); M.util.js_pending([root.get('id'), year, month, day, courseid, categoryId].join('-')); var includenavigation = root.data('includenavigation'); return CalendarRepository.getCalendarDayData(year, month, day, courseid, categoryId, includenavigation) .then(function(context) { - return Templates.render(root.attr('data-template'), context); + context.viewingday = true; + return Templates.render(template, context); }) .then(function(html, js) { return Templates.replaceNode(target, html, js); @@ -307,13 +352,14 @@ 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. * @return {promise} */ - var reloadCurrentUpcoming = function(root, courseId, categoryId) { + var reloadCurrentUpcoming = function(root, courseId, categoryId, template) { startLoading(root); var target = root.find(CalendarSelectors.wrapper); - + template = template || root.attr('data-template'); if (typeof courseId === 'undefined') { courseId = root.find(CalendarSelectors.wrapper).data('courseid'); } @@ -324,7 +370,8 @@ define([ return CalendarRepository.getCalendarUpcomingData(courseId, categoryId) .then(function(context) { - return Templates.render(root.attr('data-template'), context); + context.viewingupcoming = true; + return Templates.render(template, context); }) .then(function(html, js) { return Templates.replaceNode(target, html, js); @@ -398,8 +445,8 @@ define([ }; return { - init: function(root) { - registerEventListeners(root); + init: function(root, view) { + registerEventListeners(root, view); }, reloadCurrentMonth: reloadCurrentMonth, changeMonth: changeMonth, diff --git a/calendar/classes/external/calendar_upcoming_exporter.php b/calendar/classes/external/calendar_upcoming_exporter.php index ab05aefecca..8e51750b922 100644 --- a/calendar/classes/external/calendar_upcoming_exporter.php +++ b/calendar/classes/external/calendar_upcoming_exporter.php @@ -90,6 +90,9 @@ class calendar_upcoming_exporter extends exporter { 'isloggedin' => [ 'type' => PARAM_BOOL, ], + 'date' => [ + 'type' => date_exporter::read_properties_definition(), + ], ]; } @@ -138,7 +141,8 @@ class calendar_upcoming_exporter extends exporter { } $return['filter_selector'] = $this->get_course_filter_selector($output); $return['courseid'] = $this->calendar->courseid; - + $date = $this->related['type']->timestamp_to_date_array($this->calendar->time); + $return['date'] = (new date_exporter($date))->export($output); if ($this->calendar->categoryid) { $return['categoryid'] = $this->calendar->categoryid; } diff --git a/calendar/lib.php b/calendar/lib.php index be383703c3e..b7d4ce36ade 100644 --- a/calendar/lib.php +++ b/calendar/lib.php @@ -3429,9 +3429,11 @@ function calendar_get_view(\calendar_information $calendar, $view, $includenavig $month->set_initialeventsloaded(!$skipevents); $month->set_showcoursefilter($view == "month"); $data = $month->export($renderer); + $data->viewingmonth = true; } else if ($view == "day") { $day = new \core_calendar\external\calendar_day_exporter($calendar, $related); $data = $day->export($renderer); + $data->viewingday = true; $template = 'core_calendar/calendar_day'; } else if ($view == "upcoming" || $view == "upcoming_mini") { $upcoming = new \core_calendar\external\calendar_upcoming_exporter($calendar, $related); @@ -3439,6 +3441,7 @@ function calendar_get_view(\calendar_information $calendar, $view, $includenavig if ($view == "upcoming") { $template = 'core_calendar/calendar_upcoming'; + $data->viewingupcoming = true; } else if ($view == "upcoming_mini") { $template = 'core_calendar/calendar_upcoming_mini'; } diff --git a/calendar/templates/calendar_day.mustache b/calendar/templates/calendar_day.mustache index e82e42a1b63..d95a0445957 100644 --- a/calendar/templates/calendar_day.mustache +++ b/calendar/templates/calendar_day.mustache @@ -32,6 +32,9 @@ } }}
+
+ {{> core_calendar/view_selector}} +
{{> core_calendar/day_detailed}}
{{#js}} diff --git a/calendar/templates/calendar_month.mustache b/calendar/templates/calendar_month.mustache index 9e5866b68be..904307b27f4 100644 --- a/calendar/templates/calendar_month.mustache +++ b/calendar/templates/calendar_month.mustache @@ -32,6 +32,10 @@ } }}
+
+ {{> core_calendar/view_selector}} +
+ {{> core_calendar/month_detailed}}
{{#js}} diff --git a/calendar/templates/calendar_upcoming.mustache b/calendar/templates/calendar_upcoming.mustache index 3c873ee6eb0..14d6e3c70c1 100644 --- a/calendar/templates/calendar_upcoming.mustache +++ b/calendar/templates/calendar_upcoming.mustache @@ -32,6 +32,7 @@ } }}
+ {{> core_calendar/upcoming_detailed}}
{{#js}} diff --git a/calendar/templates/upcoming_detailed.mustache b/calendar/templates/upcoming_detailed.mustache index a1b070b7908..bb1ae8da2a1 100644 --- a/calendar/templates/upcoming_detailed.mustache +++ b/calendar/templates/upcoming_detailed.mustache @@ -34,5 +34,6 @@
{{> core_calendar/header}} {{> core/overlay_loading}} +

{{#str}}upcomingevents, core_calendar{{/str}}

{{> core_calendar/event_list }}
diff --git a/calendar/templates/view_selector.mustache b/calendar/templates/view_selector.mustache new file mode 100644 index 00000000000..c534f45b4e6 --- /dev/null +++ b/calendar/templates/view_selector.mustache @@ -0,0 +1,58 @@ +{{! + This file is part of Moodle - http://moodle.org/ + + Moodle is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Moodle is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Moodle. If not, see . +}} +{{! + @template core_calendar/view_selector + + This template renders display dropdown. + + Example context (json): + { + "viewingmonth": true, + "viewingday": false, + "viewingupcoming": false + } +}} + diff --git a/lang/en/calendar.php b/lang/en/calendar.php index 8a0f70350e5..c5289c89639 100644 --- a/lang/en/calendar.php +++ b/lang/en/calendar.php @@ -49,6 +49,7 @@ $string['categoryevents'] = 'Category events'; $string['courses'] = 'Courses'; $string['customexport'] = 'Custom range ({$a->timestart} - {$a->timeend})'; $string['daily'] = 'Daily'; +$string['day'] = 'Day'; $string['daynext'] = 'Next day'; $string['dayprev'] = 'Previous day'; $string['dayviewfor'] = 'Day view for:'; From 4cc9d7c83a5341e6022b725a1f57f2213bc896f6 Mon Sep 17 00:00:00 2001 From: Simey Lameze Date: Mon, 10 Jun 2019 12:56:52 +0800 Subject: [PATCH 2/5] MDL-65671 calendar: add listener to day link in month view --- calendar/amd/build/calendar.min.js | 2 +- calendar/amd/src/calendar.js | 16 ++++++++++++++++ calendar/templates/month_detailed.mustache | 10 ++++++++-- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/calendar/amd/build/calendar.min.js b/calendar/amd/build/calendar.min.js index 6a786738c11..b3f1b9087dc 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","core_calendar/crud","core_calendar/selectors"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var p={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"},q=function(b,c,f,g){var h=null,i=g.attr("data-day-timestamp");f&&(h=f.attr("data-day-timestamp")),f&&h==i||d.render("core/loading",{}).then(function(a,b){g.find(p.DAY_CONTENT).addClass("hidden"),d.appendNodeContents(g,a,b),f&&(f.find(p.DAY_CONTENT).addClass("hidden"),d.appendNodeContents(f,a,b))}).then(function(){return k.updateEventStartDay(c,i)}).then(function(){a("body").trigger(l.eventMoved,[c,f,g])}).always(function(){var a=g.find(p.LOADING_ICON);if(g.find(p.DAY_CONTENT).removeClass("hidden"),d.replaceNode(a,"",""),f){var b=f.find(p.LOADING_ICON);f.find(p.DAY_CONTENT).removeClass("hidden"),d.replaceNode(b,"","")}}).fail(e.exception)},r=function(b,c){var d=a("body");d.on(l.created,function(){m.reloadCurrentMonth(b)}),d.on(l.deleted,function(){m.reloadCurrentMonth(b)}),d.on(l.updated,function(){m.reloadCurrentMonth(b)}),d.on(l.editActionEvent,function(a,b){window.location.assign(b)}),d.on(l.moveEvent,q),d.on(l.eventMoved,function(){m.reloadCurrentMonth(b)}),n.registerEditListeners(b,c)},s=function(b){b.on("change",o.elements.courseSelector,function(){var c=a(this),d=c.val();m.reloadCurrentMonth(b,d,null).then(function(){return b.find(o.elements.courseSelector).val(d)}).fail(e.exception)});var c=n.registerEventFormModal(b),d=a(p.CALENDAR_MONTH_WRAPPER).data("context-id");r(b,c),d&&b.on("click",p.DAY,function(b){var d=a(b.target);if(!d.is(p.VIEW_DAY_LINK)){var f=a(this).attr("data-new-event-timestamp");c.then(function(a){var b=d.closest(o.wrapper);a.setCourseId(b.data("courseid"));var c=b.data("categoryid");"undefined"!=typeof c&&a.setCategoryId(c),a.setContextId(b.data("contextId")),a.setStartTime(f),a.show()}).fail(e.exception),b.preventDefault()}})};return{init:function(b){b=a(b),m.init(b),s(b)}}}); \ 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","core_calendar/crud","core_calendar/selectors"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var p={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"},q=function(b,c,f,g){var h=null,i=g.attr("data-day-timestamp");f&&(h=f.attr("data-day-timestamp")),f&&h==i||d.render("core/loading",{}).then(function(a,b){g.find(p.DAY_CONTENT).addClass("hidden"),d.appendNodeContents(g,a,b),f&&(f.find(p.DAY_CONTENT).addClass("hidden"),d.appendNodeContents(f,a,b))}).then(function(){return k.updateEventStartDay(c,i)}).then(function(){a("body").trigger(l.eventMoved,[c,f,g])}).always(function(){var a=g.find(p.LOADING_ICON);if(g.find(p.DAY_CONTENT).removeClass("hidden"),d.replaceNode(a,"",""),f){var b=f.find(p.LOADING_ICON);f.find(p.DAY_CONTENT).removeClass("hidden"),d.replaceNode(b,"","")}}).fail(e.exception)},r=function(b,c){var d=a("body");d.on(l.created,function(){m.reloadCurrentMonth(b)}),d.on(l.deleted,function(){m.reloadCurrentMonth(b)}),d.on(l.updated,function(){m.reloadCurrentMonth(b)}),d.on(l.editActionEvent,function(a,b){window.location.assign(b)}),d.on(l.moveEvent,q),d.on(l.eventMoved,function(){m.reloadCurrentMonth(b)}),n.registerEditListeners(b,c)},s=function(b){b.on("click",p.VIEW_DAY_LINK,function(c){var d=a(c.target),f=d.data("year"),g=d.data("month"),h=d.data("day"),i=d.data("courseid"),j=d.data("categoryid");m.refreshDayContent(b,f,g,h,i,j,b,"core_calendar/calendar_day").then(function(){c.preventDefault();var a="?view=day&time="+d.data("timestamp");return window.history.pushState({},"",a)}).fail(e.exception)}),b.on("change",o.elements.courseSelector,function(){var c=a(this),d=c.val();m.reloadCurrentMonth(b,d,null).then(function(){return b.find(o.elements.courseSelector).val(d)}).fail(e.exception)});var c=n.registerEventFormModal(b),d=a(p.CALENDAR_MONTH_WRAPPER).data("context-id");r(b,c),d&&b.on("click",p.DAY,function(b){var d=a(b.target);if(!d.is(p.VIEW_DAY_LINK)){var f=a(this).attr("data-new-event-timestamp");c.then(function(a){var b=d.closest(o.wrapper);a.setCourseId(b.data("courseid"));var c=b.data("categoryid");"undefined"!=typeof c&&a.setCategoryId(c),a.setContextId(b.data("contextId")),a.setStartTime(f),a.show()}).fail(e.exception),b.preventDefault()}})};return{init:function(b){b=a(b),m.init(b),s(b)}}}); \ No newline at end of file diff --git a/calendar/amd/src/calendar.js b/calendar/amd/src/calendar.js index ecec1a0351d..96c0b087b5f 100644 --- a/calendar/amd/src/calendar.js +++ b/calendar/amd/src/calendar.js @@ -172,6 +172,22 @@ define([ * @param {object} root The calendar root element */ 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) { + 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, + 'core_calendar/calendar_day').then(function() { + e.preventDefault(); + var url = '?view=day&time=' + dayLink.data('timestamp'); + return window.history.pushState({}, '', url); + }).fail(Notification.exception); + }); + root.on('change', CalendarSelectors.elements.courseSelector, function() { var selectElement = $(this); var courseId = selectElement.val(); diff --git a/calendar/templates/month_detailed.mustache b/calendar/templates/month_detailed.mustache index 84ce421e89e..b7117b874ae 100644 --- a/calendar/templates/month_detailed.mustache +++ b/calendar/templates/month_detailed.mustache @@ -73,7 +73,10 @@ data-new-event-timestamp="{{neweventtimestamp}}">
{{#hasevents}} - {{mday}} + {{mday}} {{/hasevents}} {{^hasevents}} {{mday}} @@ -121,7 +124,10 @@
{{#hasevents}} - {{mday}} + {{mday}} {{/hasevents}} {{^hasevents}}
From 859bc931d8d08fb76b313b04980b202fea577158 Mon Sep 17 00:00:00 2001 From: Simey Lameze Date: Thu, 6 Jun 2019 11:18:34 +0800 Subject: [PATCH 3/5] MDL-65671 calendar: remove course selector label from exporters --- calendar/amd/build/view_manager.min.js | 2 +- calendar/amd/src/view_manager.js | 8 +++++--- calendar/classes/external/calendar_day_exporter.php | 3 +-- calendar/classes/external/calendar_upcoming_exporter.php | 3 +-- calendar/classes/external/month_exporter.php | 3 +-- calendar/templates/calendar_day.mustache | 4 +--- calendar/templates/calendar_month.mustache | 5 +---- calendar/templates/calendar_upcoming.mustache | 2 +- calendar/templates/day_detailed.mustache | 1 - calendar/templates/header.mustache | 5 +++-- calendar/templates/month_detailed.mustache | 1 - calendar/templates/upcoming_detailed.mustache | 1 - 12 files changed, 15 insertions(+), 23 deletions(-) diff --git a/calendar/amd/build/view_manager.min.js b/calendar/amd/build/view_manager.min.js index bd23cc149e1..e547fd4bab3 100644 --- a/calendar/amd/build/view_manager.min.js +++ b/calendar/amd/build/view_manager.min.js @@ -1 +1 @@ -define(["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,d=a(b.target),e=null;c=d.is(g.actions.viewEvent)?d:d.closest(g.actions.viewEvent),e=c.length?c.data("eventId"):d.find(g.actions.viewEvent).data("eventId"),e&&(b.preventDefault(),b.stopPropagation(),w(e))}),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);"month"===e?(n(b,i.attr("href"),i.data("year"),i.data("month"),f,h),c.preventDefault()):"day"===e&&(r(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")){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");"month"==f?m(b,g,h,j,k,b,"core_calendar/calendar_month").then(function(){return window.history.pushState({},"","?view=month")}).fail(d.exception):"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):"upcoming"==f&&u(b,j,k,"core_calendar/calendar_upcoming").then(function(){return window.history.pushState({},"","?view=upcoming")}).fail(d.exception)}})},m=function(c,h,i,j,k,l,m){s(c),l=l||c.find(g.wrapper),m=m||c.attr("data-template"),M.util.js_pending([c.get("id"),h,i,j].join("-"));var n=c.data("includenavigation"),o=c.data("mini");return e.getCalendarMonthData(h,i,j,k,n,o).then(function(a){return a.viewingmonth=!0,b.render(m,a)}).then(function(a,c){return b.replaceNode(l,a,c)}).then(function(){a("body").trigger(f.viewUpdated)}).always(function(){return M.util.js_complete([c.get("id"),h,i,j].join("-")),t(c)}).fail(d.exception)},n=function(b,c,d,e,g,h){return m(b,d,e,g,h).then(function(){return c.length&&"#"!==c&&window.history.pushState({},"",c),arguments}).then(function(){return a("body").trigger(f.monthChanged,[d,e,g,h]),arguments})},o=function(a,b,c){var d=a.find(g.wrapper).data("year"),e=a.find(g.wrapper).data("month");return"undefined"==typeof b&&(b=a.find(g.wrapper).data("courseid")),"undefined"==typeof c&&(c=a.find(g.wrapper).data("categoryid")),m(a,d,e,b,c)},p=function(c,h,i,j,k,l,m,n){s(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){return a.viewingday=!0,b.render(n,a)}).then(function(a,c){return b.replaceNode(m,a,c)}).then(function(){a("body").trigger(f.viewUpdated)}).always(function(){return M.util.js_complete([c.get("id"),h,i,j,k,l].join("-")),t(c)}).fail(d.exception)},q=function(a,b,c){var d=a.find(g.wrapper),e=d.data("year"),f=d.data("month"),h=d.data("day");return b||(b=a.find(g.wrapper).data("courseid")),"undefined"==typeof c&&(c=a.find(g.wrapper).data("categoryid")),p(a,e,f,h,b,c)},r=function(b,c,d,e,g,h,i){return p(b,d,e,g,h,i).then(function(){return c.length&&"#"!==c&&window.history.pushState({},"",c),arguments}).then(function(){return a("body").trigger(f.dayChanged,[d,e,g,h,i]),arguments})},s=function(a){var b=a.find(g.containers.loadingIcon);b.removeClass("hidden")},t=function(a){var b=a.find(g.containers.loadingIcon);b.addClass("hidden")},u=function(c,h,i,j){s(c);var k=c.find(g.wrapper);return j=j||c.attr("data-template"),"undefined"==typeof h&&(h=c.find(g.wrapper).data("courseid")),"undefined"==typeof i&&(i=c.find(g.wrapper).data("categoryid")),e.getCalendarUpcomingData(h,i).then(function(a){return a.viewingupcoming=!0,b.render(j,a)}).then(function(a,c){return b.replaceNode(k,a,c)}).then(function(){a("body").trigger(f.viewUpdated)}).always(function(){return t(c)}).fail(d.exception)},v=function(a){return"calendar_event_"+a},w=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;return c=v(d.normalisedeventtype),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(a,b){l(a,b)},reloadCurrentMonth:o,changeMonth:n,refreshMonthContent:m,reloadCurrentDay:q,changeDay:r,refreshDayContent:p,reloadCurrentUpcoming:u}}); \ No newline at end of file +define(["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,d=a(b.target),e=null;c=d.is(g.actions.viewEvent)?d:d.closest(g.actions.viewEvent),e=c.length?c.data("eventId"):d.find(g.actions.viewEvent).data("eventId"),e&&(b.preventDefault(),b.stopPropagation(),w(e))}),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);"month"===e?(n(b,i.attr("href"),i.data("year"),i.data("month"),f,h),c.preventDefault()):"day"===e&&(r(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")){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");"month"==f?m(b,g,h,j,k,b,"core_calendar/calendar_month").then(function(){return window.history.pushState({},"","?view=month")}).fail(d.exception):"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):"upcoming"==f&&u(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){s(c),l=l||c.find(g.wrapper),m=m||c.attr("data-template"),M.util.js_pending([c.get("id"),h,i,j].join("-"));var n=c.data("includenavigation"),o=c.data("mini");return e.getCalendarMonthData(h,i,j,k,n,o).then(function(a){return a.viewingmonth=!0,b.render(m,a)}).then(function(a,c){return b.replaceNode(l,a,c)}).then(function(){a("body").trigger(f.viewUpdated)}).always(function(){return M.util.js_complete([c.get("id"),h,i,j].join("-")),t(c)}).fail(d.exception)},n=function(b,c,d,e,g,h){return m(b,d,e,g,h).then(function(){return c.length&&"#"!==c&&window.history.pushState({},"",c),arguments}).then(function(){return a("body").trigger(f.monthChanged,[d,e,g,h]),arguments})},o=function(a,b,c){var d=a.find(g.wrapper).data("year"),e=a.find(g.wrapper).data("month");return"undefined"==typeof b&&(b=a.find(g.wrapper).data("courseid")),"undefined"==typeof c&&(c=a.find(g.wrapper).data("categoryid")),m(a,d,e,b,c)},p=function(c,h,i,j,k,l,m,n){s(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){return a.viewingday=!0,b.render(n,a)}).then(function(a,c){return b.replaceNode(m,a,c)}).then(function(){a("body").trigger(f.viewUpdated)}).always(function(){return M.util.js_complete([c.get("id"),h,i,j,k,l].join("-")),t(c)}).fail(d.exception)},q=function(a,b,c){var d=a.find(g.wrapper),e=d.data("year"),f=d.data("month"),h=d.data("day");return b||(b=a.find(g.wrapper).data("courseid")),"undefined"==typeof c&&(c=a.find(g.wrapper).data("categoryid")),p(a,e,f,h,b,c)},r=function(b,c,d,e,g,h,i){return p(b,d,e,g,h,i).then(function(){return c.length&&"#"!==c&&window.history.pushState({},"",c),arguments}).then(function(){return a("body").trigger(f.dayChanged,[d,e,g,h,i]),arguments})},s=function(a){var b=a.find(g.containers.loadingIcon);b.removeClass("hidden")},t=function(a){var b=a.find(g.containers.loadingIcon);b.addClass("hidden")},u=function(c,h,i,j,k){return s(c),j=j||c.find(g.wrapper),k=k||c.attr("data-template"),"undefined"==typeof h&&(h=c.find(g.wrapper).data("courseid")),"undefined"==typeof i&&(i=c.find(g.wrapper).data("categoryid")),e.getCalendarUpcomingData(h,i).then(function(a){return a.viewingupcoming=!0,b.render(k,a)}).then(function(a,c){return b.replaceNode(j,a,c)}).then(function(){a("body").trigger(f.viewUpdated)}).always(function(){return t(c)}).fail(d.exception)},v=function(a){return"calendar_event_"+a},w=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;return c=v(d.normalisedeventtype),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(a,b){l(a,b)},reloadCurrentMonth:o,changeMonth:n,refreshMonthContent:m,reloadCurrentDay:q,changeDay:r,refreshDayContent:p,reloadCurrentUpcoming:u}}); \ No newline at end of file diff --git a/calendar/amd/src/view_manager.js b/calendar/amd/src/view_manager.js index e71e7618897..28b04d91db2 100644 --- a/calendar/amd/src/view_manager.js +++ b/calendar/amd/src/view_manager.js @@ -134,7 +134,7 @@ define([ return window.history.pushState({}, '', '?view=day'); }).fail(Notification.exception); } else if (view == 'upcoming') { - reloadCurrentUpcoming(root, courseId, categoryId, 'core_calendar/calendar_upcoming') + reloadCurrentUpcoming(root, courseId, categoryId, root, 'core_calendar/calendar_upcoming') .then(function() { return window.history.pushState({}, '', '?view=upcoming'); }).fail(Notification.exception); @@ -353,13 +353,15 @@ define([ * @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. * @return {promise} */ - var reloadCurrentUpcoming = function(root, courseId, categoryId, template) { + var reloadCurrentUpcoming = function(root, courseId, categoryId, target, template) { startLoading(root); - var target = root.find(CalendarSelectors.wrapper); + target = target || root.find(CalendarSelectors.wrapper); template = template || root.attr('data-template'); + if (typeof courseId === 'undefined') { courseId = root.find(CalendarSelectors.wrapper).data('courseid'); } diff --git a/calendar/classes/external/calendar_day_exporter.php b/calendar/classes/external/calendar_day_exporter.php index 5e0b0cd3381..8772eab3f8e 100644 --- a/calendar/classes/external/calendar_day_exporter.php +++ b/calendar/classes/external/calendar_day_exporter.php @@ -240,8 +240,7 @@ class calendar_day_exporter extends exporter { * @return string The html code for the course filter selector. */ protected function get_course_filter_selector(renderer_base $output) { - $langstr = get_string('dayviewfor', 'calendar'); - return $output->course_filter_selector($this->url, $langstr, $this->calendar->course->id); + return $output->course_filter_selector($this->url, '', $this->calendar->course->id); } /** diff --git a/calendar/classes/external/calendar_upcoming_exporter.php b/calendar/classes/external/calendar_upcoming_exporter.php index 8e51750b922..e539d45c02e 100644 --- a/calendar/classes/external/calendar_upcoming_exporter.php +++ b/calendar/classes/external/calendar_upcoming_exporter.php @@ -170,8 +170,7 @@ class calendar_upcoming_exporter extends exporter { * @return string The html code for the course filter selector. */ protected function get_course_filter_selector(renderer_base $output) { - $langstr = get_string('upcomingeventsfor', 'calendar'); - return $output->course_filter_selector($this->url, $langstr, $this->calendar->course->id); + return $output->course_filter_selector($this->url, '', $this->calendar->course->id); } /** diff --git a/calendar/classes/external/month_exporter.php b/calendar/classes/external/month_exporter.php index d3d4c73564e..8a6a94e355f 100644 --- a/calendar/classes/external/month_exporter.php +++ b/calendar/classes/external/month_exporter.php @@ -252,8 +252,7 @@ class month_exporter extends exporter { */ protected function get_course_filter_selector(renderer_base $output) { $content = ''; - $content .= $output->course_filter_selector($this->url, get_string('detailedmonthviewfor', 'calendar'), - $this->calendar->course->id); + $content .= $output->course_filter_selector($this->url, '', $this->calendar->course->id); return $content; } diff --git a/calendar/templates/calendar_day.mustache b/calendar/templates/calendar_day.mustache index d95a0445957..e9ffd4375a8 100644 --- a/calendar/templates/calendar_day.mustache +++ b/calendar/templates/calendar_day.mustache @@ -32,9 +32,7 @@ } }}
-
- {{> core_calendar/view_selector}} -
+ {{> core_calendar/header}} {{> core_calendar/day_detailed}}
{{#js}} diff --git a/calendar/templates/calendar_month.mustache b/calendar/templates/calendar_month.mustache index 904307b27f4..1e83271d41d 100644 --- a/calendar/templates/calendar_month.mustache +++ b/calendar/templates/calendar_month.mustache @@ -32,10 +32,7 @@ } }}
-
- {{> core_calendar/view_selector}} -
- + {{> core_calendar/header}} {{> core_calendar/month_detailed}}
{{#js}} diff --git a/calendar/templates/calendar_upcoming.mustache b/calendar/templates/calendar_upcoming.mustache index 14d6e3c70c1..0d56246b007 100644 --- a/calendar/templates/calendar_upcoming.mustache +++ b/calendar/templates/calendar_upcoming.mustache @@ -32,7 +32,7 @@ } }}
- + {{> core_calendar/header}} {{> core_calendar/upcoming_detailed}}
{{#js}} diff --git a/calendar/templates/day_detailed.mustache b/calendar/templates/day_detailed.mustache index fde6b2f4417..f27c235ac98 100644 --- a/calendar/templates/day_detailed.mustache +++ b/calendar/templates/day_detailed.mustache @@ -43,7 +43,6 @@ }} data-region="day"{{! }} data-new-event-timestamp="{{neweventtimestamp}}"{{! }}> - {{> core_calendar/header}} {{> core_calendar/day_navigation }} {{> core/overlay_loading}} {{> core_calendar/event_list }} diff --git a/calendar/templates/header.mustache b/calendar/templates/header.mustache index c50e643a1a4..264a19d69d5 100644 --- a/calendar/templates/header.mustache +++ b/calendar/templates/header.mustache @@ -31,9 +31,10 @@ { } }} -
+
+ {{> core_calendar/view_selector}} {{#filter_selector}} {{{filter_selector}}} {{/filter_selector}} {{> core_calendar/add_event_button}} -
+
\ No newline at end of file diff --git a/calendar/templates/month_detailed.mustache b/calendar/templates/month_detailed.mustache index b7117b874ae..d5dbfa4af1b 100644 --- a/calendar/templates/month_detailed.mustache +++ b/calendar/templates/month_detailed.mustache @@ -40,7 +40,6 @@ }} data-year="{{date.year}}"{{! }} data-view="month"{{! }}> - {{> core_calendar/header }} {{> core_calendar/month_navigation }} {{> core/overlay_loading}} diff --git a/calendar/templates/upcoming_detailed.mustache b/calendar/templates/upcoming_detailed.mustache index bb1ae8da2a1..f177ae26896 100644 --- a/calendar/templates/upcoming_detailed.mustache +++ b/calendar/templates/upcoming_detailed.mustache @@ -32,7 +32,6 @@ } }}
- {{> core_calendar/header}} {{> core/overlay_loading}}

{{#str}}upcomingevents, core_calendar{{/str}}

{{> core_calendar/event_list }} From fed1cc738d80ec729afc266d1d7e46963c8804db Mon Sep 17 00:00:00 2001 From: Simey Lameze Date: Thu, 6 Jun 2019 14:08:43 +0800 Subject: [PATCH 4/5] MDL-65671 calendar: tidy up calendar header --- calendar/renderer.php | 3 ++- calendar/templates/header.mustache | 2 +- calendar/templates/upcoming_detailed.mustache | 2 +- calendar/templates/view_selector.mustache | 3 +-- calendar/view.php | 13 +++++++++---- lang/en/calendar.php | 1 + theme/boost/scss/moodle/calendar.scss | 4 ++++ theme/boost/style/moodle.css | 3 +++ theme/classic/style/moodle.css | 3 +++ 9 files changed, 25 insertions(+), 9 deletions(-) diff --git a/calendar/renderer.php b/calendar/renderer.php index a71b5fa5b52..2f2242baa0d 100644 --- a/calendar/renderer.php +++ b/calendar/renderer.php @@ -297,7 +297,8 @@ class core_calendar_renderer extends plugin_renderer_base { } $select = html_writer::label($label, 'course', false, ['class' => 'mr-1']); - $select .= html_writer::select($courseoptions, 'course', $selected, false, ['class' => 'cal_courses_flt']); + $select .= html_writer::select($courseoptions, 'course', $selected, false, + ['class' => 'cal_courses_flt mr-auto']); return $select; } diff --git a/calendar/templates/header.mustache b/calendar/templates/header.mustache index 264a19d69d5..ce7c76f27fc 100644 --- a/calendar/templates/header.mustache +++ b/calendar/templates/header.mustache @@ -31,7 +31,7 @@ { } }} -
+
{{> core_calendar/view_selector}} {{#filter_selector}} {{{filter_selector}}} diff --git a/calendar/templates/upcoming_detailed.mustache b/calendar/templates/upcoming_detailed.mustache index f177ae26896..40faee3f518 100644 --- a/calendar/templates/upcoming_detailed.mustache +++ b/calendar/templates/upcoming_detailed.mustache @@ -33,6 +33,6 @@ }}
{{> core/overlay_loading}} -

{{#str}}upcomingevents, core_calendar{{/str}}

+

{{#str}}upcomingevents, core_calendar{{/str}}

{{> core_calendar/event_list }}
diff --git a/calendar/templates/view_selector.mustache b/calendar/templates/view_selector.mustache index c534f45b4e6..6a9de4cad1d 100644 --- a/calendar/templates/view_selector.mustache +++ b/calendar/templates/view_selector.mustache @@ -26,9 +26,8 @@ "viewingupcoming": false } }} -