MDL-60065 calendar: Control navigation on mini

This commit is contained in:
Andrew Nicols 2017-09-09 17:16:32 +08:00
parent b9ff690eb6
commit fee025ecbb
9 changed files with 70 additions and 32 deletions

View File

@ -1 +1 @@
define(["jquery","core/ajax"],function(a,b){var c=function(a){var c={methodname:"core_calendar_delete_calendar_events",args:{events:[{eventid:a,repeat:1}]}};return b.call([c])[0]},d=function(a){var c={methodname:"core_calendar_get_calendar_event_by_id",args:{eventid:a}};return b.call([c])[0]},e=function(a){var c={methodname:"core_calendar_submit_create_update_form",args:{formdata:a}};return b.call([c])[0]},f=function(a,c,d){var e={methodname:"core_calendar_get_calendar_monthly_view",args:{year:a,month:c,courseid:d}};return b.call([e])[0]},g=function(a,c){var d={methodname:"core_calendar_update_event_start_day",args:{eventid:a,daytimestamp:c}};return b.call([d])[0]};return{getEventById:d,deleteEvent:c,updateEventStartDay:g,submitCreateUpdateForm:e,getCalendarMonthData:f}});
define(["jquery","core/ajax"],function(a,b){var c=function(a){var c={methodname:"core_calendar_delete_calendar_events",args:{events:[{eventid:a,repeat:1}]}};return b.call([c])[0]},d=function(a){var c={methodname:"core_calendar_get_calendar_event_by_id",args:{eventid:a}};return b.call([c])[0]},e=function(a){var c={methodname:"core_calendar_submit_create_update_form",args:{formdata:a}};return b.call([c])[0]},f=function(a,c,d,e){var f={methodname:"core_calendar_get_calendar_monthly_view",args:{year:a,month:c,courseid:d,includenavigation:e}};return b.call([f])[0]},g=function(a,c){var d={methodname:"core_calendar_update_event_start_day",args:{eventid:a,daytimestamp:c}};return b.call([d])[0]};return{getEventById:d,deleteEvent:c,updateEventStartDay:g,submitCreateUpdateForm:e,getCalendarMonthData:f}});

View File

@ -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:".calendarwrapper .arrow_link",CALENDAR_MONTH_WRAPPER:".calendarwrapper",LOADING_ICON_CONTAINER:'[data-region="overlay-icon-container"]'},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(b,e.attr("href"),e.data("year"),e.data("month"),d),c.preventDefault()})},h=function(g,h,i,j){return k(g),d.getCalendarMonthData(h,i,j).then(function(a){return b.render(g.attr("data-template"),a)}).then(function(a,c){return b.replaceNode(g.find(f.CALENDAR_MONTH_WRAPPER),a,c)}).then(function(){a("body").trigger(e.viewUpdated)}).always(function(){return l(g)}).fail(c.exception)},i=function(b,c,d,f,g){return h(b,d,f,g).then(function(){return c.length&&"#"!==c&&window.history.pushState({},"",c),arguments}).then(function(){return a("body").trigger(e.monthChanged,[d,f,g]),arguments})},j=function(a,b){var c=a.find(f.CALENDAR_MONTH_WRAPPER).data("year"),d=a.find(f.CALENDAR_MONTH_WRAPPER).data("month");return b||(b=a.find(f.CALENDAR_MONTH_WRAPPER).data("courseid")),h(a,c,d,b)},k=function(a){var b=a.find(f.LOADING_ICON_CONTAINER);b.removeClass("hidden")},l=function(a){var b=a.find(f.LOADING_ICON_CONTAINER);b.addClass("hidden")};return{init:function(a){g(a)},reloadCurrentMonth:j,changeMonth:i,refreshMonthContent:h}});
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:".calendarwrapper .arrow_link",CALENDAR_MONTH_WRAPPER:".calendarwrapper",LOADING_ICON_CONTAINER:'[data-region="overlay-icon-container"]'},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(b,e.attr("href"),e.data("year"),e.data("month"),d),c.preventDefault()})},h=function(g,h,i,j){k(g);var m=g.data("includenavigation");return d.getCalendarMonthData(h,i,j,m).then(function(a){return b.render(g.attr("data-template"),a)}).then(function(a,c){return b.replaceNode(g.find(f.CALENDAR_MONTH_WRAPPER),a,c)}).then(function(){a("body").trigger(e.viewUpdated)}).always(function(){return l(g)}).fail(c.exception)},i=function(b,c,d,f,g){return h(b,d,f,g).then(function(){return c.length&&"#"!==c&&window.history.pushState({},"",c),arguments}).then(function(){return a("body").trigger(e.monthChanged,[d,f,g]),arguments})},j=function(a,b){var c=a.find(f.CALENDAR_MONTH_WRAPPER).data("year"),d=a.find(f.CALENDAR_MONTH_WRAPPER).data("month");return b||(b=a.find(f.CALENDAR_MONTH_WRAPPER).data("courseid")),h(a,c,d,b)},k=function(a){var b=a.find(f.LOADING_ICON_CONTAINER);b.removeClass("hidden")},l=function(a){var b=a.find(f.LOADING_ICON_CONTAINER);b.addClass("hidden")};return{init:function(a){g(a)},reloadCurrentMonth:j,changeMonth:i,refreshMonthContent:h}});

View File

@ -90,15 +90,17 @@ define(['jquery', 'core/ajax'], function($, Ajax) {
* @param {Number} year Year
* @param {Number} month Month
* @param {Number} courseid The course id.
* @param {Bool} includenavigation Whether to include navigation.
* @return {promise} Resolved with the month view data.
*/
var getCalendarMonthData = function(year, month, courseid) {
var getCalendarMonthData = function(year, month, courseid, includenavigation) {
var request = {
methodname: 'core_calendar_get_calendar_monthly_view',
args: {
year: year,
month: month,
courseid: courseid,
includenavigation: includenavigation,
}
};

View File

@ -60,7 +60,8 @@ define(['jquery', 'core/templates', 'core/notification', 'core_calendar/reposito
var refreshMonthContent = function(root, year, month, courseid) {
startLoading(root);
return CalendarRepository.getCalendarMonthData(year, month, courseid)
var includenavigation = root.data('includenavigation');
return CalendarRepository.getCalendarMonthData(year, month, courseid, includenavigation)
.then(function(context) {
return Templates.render(root.attr('data-template'), context);
})

View File

@ -54,6 +54,10 @@ class month_exporter extends exporter {
*/
protected $url;
/**
*/
protected $includenavigation = true;
/**
* Constructor for month_exporter.
*
@ -123,6 +127,10 @@ class month_exporter extends exporter {
// calendar format.
'type' => PARAM_RAW,
],
'includenavigation' => [
'type' => PARAM_BOOL,
'default' => true,
],
'previousperiod' => [
'type' => date_exporter::read_properties_definition(),
],
@ -189,6 +197,7 @@ class month_exporter extends exporter {
'nextperiodlink' => $nextperiodlink->out(false),
'larrow' => $output->larrow(),
'rarrow' => $output->rarrow(),
'includenavigation' => $this->includenavigation,
];
}
@ -339,4 +348,10 @@ class month_exporter extends exporter {
return $type->timestamp_to_date_array($time);
}
public function set_includenavigation($include) {
$this->includenavigation = $include;
return $this;
}
}

View File

@ -882,9 +882,10 @@ class core_calendar_external extends external_api {
* @param int $year The year to be shown
* @param int $month The month to be shown
* @param int $courseid The course to be included
* @param bool $includenavigation Whether to include navigation
* @return array
*/
public static function get_calendar_monthly_view($year, $month, $courseid) {
public static function get_calendar_monthly_view($year, $month, $courseid, $includenavigation) {
global $CFG, $DB, $USER, $PAGE;
require_once($CFG->dirroot."/calendar/lib.php");
@ -893,6 +894,7 @@ class core_calendar_external extends external_api {
'year' => $year,
'month' => $month,
'courseid' => $courseid,
'includenavigation' => $includenavigation,
]);
if ($courseid != SITEID && !empty($courseid)) {
@ -914,7 +916,7 @@ class core_calendar_external extends external_api {
$calendar = new calendar_information(0, 0, 0, $time);
$calendar->prepare_for_view($course, $courses);
list($data, $template) = calendar_get_view($calendar, 'month');
list($data, $template) = calendar_get_view($calendar, 'month', $params['includenavigation']);
return $data;
}
@ -930,6 +932,13 @@ class core_calendar_external extends external_api {
'year' => new external_value(PARAM_INT, 'Month to be viewed', VALUE_REQUIRED),
'month' => new external_value(PARAM_INT, 'Year to be viewed', VALUE_REQUIRED),
'courseid' => new external_value(PARAM_INT, 'Course being viewed', VALUE_DEFAULT, SITEID, NULL_ALLOWED),
'includenavigation' => new external_value(
PARAM_BOOL,
'Whether to show course navigation',
VALUE_DEFAULT,
true,
NULL_ALLOWED
),
]
);
}

View File

@ -3354,10 +3354,11 @@ function calendar_get_legacy_events($tstart, $tend, $users, $groups, $courses, $
* Get the calendar view output.
*
* @param \calendar_information $calendar The calendar being represented
* @param string $view The type of calendar to have displayed
* @param string $view The type of calendar to have displayed
* @param bool $includenavigation Whether to include navigation
* @return array[array, string]
*/
function calendar_get_view(\calendar_information $calendar, $view) {
function calendar_get_view(\calendar_information $calendar, $view, $includenavigation = true) {
global $PAGE, $CFG;
$renderer = $PAGE->get_renderer('core_calendar');
@ -3440,6 +3441,9 @@ function calendar_get_view(\calendar_information $calendar, $view) {
];
$month = new \core_calendar\external\month_exporter($calendar, $type, $related);
$month->set_includenavigation($includenavigation);
$data = $month->export($renderer);
return [$data, $template];

View File

@ -32,7 +32,7 @@
}
}}
<div{{!
}} id="calendar-month-{{date.year}}-{{date.month}}-{{uniqid}}" {{!
}} id="calendar-month-{{date.year}}-{{date.month}}-{{uniqid}}" {{!
}} data-template="core_calendar/month_mini" {{!
}}>
{{> core_calendar/month_mini}}

View File

@ -41,29 +41,36 @@
{{> core/overlay_loading}}
<table class="minicalendar calendartable">
<caption class="calendar-controls">
<a{{!
}} href="#"{{!
}} class="arrow_link previous"{{!
}} title="{{#str}}monthprev, calendar{{/str}}"{{!
}} data-year="{{previousperiod.year}}"{{!
}} data-month="{{previousperiod.mon}}"{{!
}}>
<span class="arrow">{{{larrow}}}</span>
</a>
<span class="hide"> | </span>
<span class="current">
<a href="{{{url}}}" title="{{#str}}monththis, calendar{{/str}}">{{periodname}}</a>
</span>
<span class="hide"> | </span>
<a{{!
}} href="#"{{!
}} class="arrow_link next"{{!
}} title="{{#str}}monthprev, calendar{{/str}}"{{!
}} data-year="{{nextperiod.year}}"{{!
}} data-month="{{nextperiod.mon}}"{{!
}}>
<span class="arrow">{{{rarrow}}}</span>
</a>
{{#includenavigation}}
<a{{!
}} href="#"{{!
}} class="arrow_link previous"{{!
}} title="{{#str}}monthprev, calendar{{/str}}"{{!
}} data-year="{{previousperiod.year}}"{{!
}} data-month="{{previousperiod.mon}}"{{!
}}>
<span class="arrow">{{{larrow}}}</span>
</a>
<span class="hide"> | </span>
<span class="current">
<a href="{{{url}}}" title="{{#str}}monththis, calendar{{/str}}">{{periodname}}</a>
</span>
<span class="hide"> | </span>
<a{{!
}} href="#"{{!
}} class="arrow_link next"{{!
}} title="{{#str}}monthprev, calendar{{/str}}"{{!
}} data-year="{{nextperiod.year}}"{{!
}} data-month="{{nextperiod.mon}}"{{!
}}>
<span class="arrow">{{{rarrow}}}</span>
</a>
{{/includenavigation}}
{{^includenavigation}}
<h3>
<a href="{{{url}}}" title="{{#str}}monththis, calendar{{/str}}">{{periodname}}</a>
</h3>
{{/includenavigation}}
</caption>
<thead>
<tr>