Merge branch 'MDL-60090-master' of git://github.com/andrewnicols/moodle

This commit is contained in:
Jun Pataleta 2017-10-11 15:58:46 +08:00
commit 1b3f3d5761
11 changed files with 209 additions and 34 deletions

View File

@ -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']",EVENT_ITEM:"[data-region='event-item']",EVENT_LINK:"[data-action='view-event']",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",COURSE_SELECTOR:'select[name="course"]',TODAY:".today"},q=function(a){var b="type"+a;return c.get_string(b,"core_calendar").then(function(a){return a})},r=function(a){k.getEventById(a).then(function(b){if(!b.event)throw new Error("Error encountered while trying to fetch calendar event with ID: "+a);var c=b.event;return q(c.eventtype).then(function(a){return c.eventtype=a,c})}).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,isactionevent:a.isactionevent,url:a.url}};return h.create(b)}).done(function(a){a.getRoot().on(g.hidden,function(){a.destroy()}),a.show()}).fail(e.exception)},s=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)},t=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,s),d.on(l.eventMoved,function(){m.reloadCurrentMonth(b)}),c.then(function(a){d.on(l.editEvent,function(c,d){var e=b.find(o.wrapper);a.setEventId(d),a.setContextId(e.data("contextId")),a.show()})}).fail(e.exception)},u=function(b){b.on("click",p.EVENT_ITEM,function(b){b.preventDefault(),b.stopPropagation();var c=a(b.target),d=null;d=c.is(p.EVENT_LINK)?c.attr("data-event-id"):c.find(p.EVENT_LINK).attr("data-event-id"),r(d)}),b.on("change",p.COURSE_SELECTOR,function(){var c=a(this),d=c.val();m.reloadCurrentMonth(b,d,null).then(function(){return b.find(p.COURSE_SELECTOR).val(d)}).fail(e.exception)});var c=n.registerEventFormModal(b);t(b,c),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),u(b)}}});
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']",EVENT_ITEM:"[data-region='event-item']",EVENT_LINK:"[data-action='view-event']",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",COURSE_SELECTOR:'select[name="course"]',TODAY:".today"},q=function(a){var b="type"+a;return c.get_string(b,"core_calendar").then(function(a){return a})},r=function(a){k.getEventById(a).then(function(b){if(!b.event)throw new Error("Error encountered while trying to fetch calendar event with ID: "+a);var c=b.event;return q(c.eventtype).then(function(a){return c.eventtype=a,c})}).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,isactionevent:a.isactionevent,url:a.url}};return h.create(b)}).done(function(a){a.getRoot().on(g.hidden,function(){a.destroy()}),a.show()}).fail(e.exception)},s=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)},t=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,s),d.on(l.eventMoved,function(){m.reloadCurrentMonth(b)}),c.then(function(a){d.on(l.editEvent,function(c,d){var e=b.find(o.wrapper);a.setEventId(d),a.setContextId(e.data("contextId")),a.show()})}).fail(e.exception)},u=function(b){b.on("click",p.EVENT_ITEM,function(b){b.preventDefault(),b.stopPropagation();var c=a(b.target),d=null,e=c.closest(p.EVENT_LINK);d=e.length?e.data("eventId"):c.find(p.EVENT_LINK).data("eventId"),r(d)}),b.on("change",p.COURSE_SELECTOR,function(){var c=a(this),d=c.val();m.reloadCurrentMonth(b,d,null).then(function(){return b.find(p.COURSE_SELECTOR).val(d)}).fail(e.exception)});var c=n.registerEventFormModal(b);t(b,c),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),u(b)}}});

View File

@ -1 +1 @@
define(["jquery","core_calendar/selectors","core_calendar/events","core/str","core/templates"],function(a,b,c,d,e){var f=function(d){d.on("click",b.eventFilterItem,function(b){var c=a(b.currentTarget);g(c),b.preventDefault()}),a("body").on(c.viewUpdated,function(){var c=d.find(b.eventFilterItem);c.each(function(b,c){if(c=a(c),c.data("eventtype-hidden")){var d=i(c);h(d)}})})},g=function(a){var b=i(a);return b.hidden=!b.hidden,d.get_string("eventtype"+b.type,"calendar").then(function(a){return b.name=a,b}).then(function(a){return e.render("core_calendar/event_filter_key",a)}).then(function(b,c){return e.replaceNode(a,b,c)}).then(function(){h(b)})},h=function(b){M.util.js_pending("month-mini-filterChanged"),a("body").trigger(c.filterChanged,{type:b.type,hidden:b.hidden}),M.util.js_complete("month-mini-filterChanged")},i=function(a){return{type:a.data("eventtype"),hidden:a.data("eventtype-hidden")}};return{init:function(b){b=a(b),f(b)}}});
define(["jquery","core_calendar/selectors","core_calendar/events","core/str","core/templates"],function(a,b,c,d,e){var f=function(d){d.on("click",b.eventFilterItem,function(b){var c=a(b.currentTarget);g(c),b.preventDefault()}),a("body").on(c.viewUpdated,function(){var c=d.find(b.eventFilterItem);c.each(function(b,c){if(c=a(c),c.data("eventtype-hidden")){var d=i(c);h(d)}})})},g=function(a){var b=i(a);return b.hidden=!b.hidden,d.get_string("eventtype"+b.eventtype,"calendar").then(function(a){return b.name=a,b}).then(function(a){return e.render("core_calendar/event_filter_key",a)}).then(function(b,c){return e.replaceNode(a,b,c)}).then(function(){h(b)})},h=function(b){M.util.js_pending("month-mini-filterChanged"),a("body").trigger(c.filterChanged,{type:b.eventtype,hidden:b.hidden}),M.util.js_complete("month-mini-filterChanged")},i=function(a){return{eventtype:a.data("eventtype"),hidden:a.data("eventtype-hidden")}};return{init:function(b){b=a(b),f(b)}}});

View File

@ -257,10 +257,12 @@ define([
var target = $(e.target);
var eventId = null;
if (target.is(SELECTORS.EVENT_LINK)) {
eventId = target.attr('data-event-id');
var eventLink = target.closest(SELECTORS.EVENT_LINK);
if (eventLink.length) {
eventId = eventLink.data('eventId');
} else {
eventId = target.find(SELECTORS.EVENT_LINK).attr('data-event-id');
eventId = target.find(SELECTORS.EVENT_LINK).data('eventId');
}
renderEventSummaryModal(eventId);

View File

@ -64,7 +64,7 @@ function(
// Toggle the hidden. We need to render the template before we change the value.
data.hidden = !data.hidden;
return Str.get_string('eventtype' + data.type, 'calendar')
return Str.get_string('eventtype' + data.eventtype, 'calendar')
.then(function(nameStr) {
data.name = nameStr;
@ -90,7 +90,7 @@ function(
var fireFilterChangedEvent = function(data) {
M.util.js_pending("month-mini-filterChanged");
$('body').trigger(CalendarEvents.filterChanged, {
type: data.type,
type: data.eventtype,
hidden: data.hidden,
});
M.util.js_complete("month-mini-filterChanged");
@ -104,7 +104,7 @@ function(
*/
var getFilterData = function(target) {
return {
type: target.data('eventtype'),
eventtype: target.data('eventtype'),
hidden: target.data('eventtype-hidden'),
};
};

View File

@ -3355,7 +3355,7 @@ function calendar_get_filter_types() {
return array_map(function($type) {
return [
'type' => $type,
'eventtype' => $type,
'name' => get_string("eventtype{$type}", "calendar"),
];
}, $types);

View File

@ -29,17 +29,20 @@
{
}
}}
<a href="#" data-action="filter-event-type" data-eventtype="{{type}}" data-eventtype-hidden="{{hidden}}">
<a href="#" data-action="filter-event-type" data-eventtype="{{eventtype}}" data-eventtype-hidden="{{hidden}}">
{{^hidden}}
<span class="calendar_event_{{type}}">
<span class="calendar_event_{{eventtype}}">
{{#pix}}i/hide, core, {{#str}}hideeventtype, calendar, {{name}}{{/str}}{{/pix}}
</span>
{{> core_calendar/event_icon}}
<span class="eventname">{{#str}}hideeventtype, calendar, {{name}}{{/str}}</span>
{{/hidden}}
{{#hidden}}
<span class="calendar_event_{{type}}">
<span class="calendar_event_{{eventtype}}">
{{#pix}}i/show, core, {{#str}}showeventtype, calendar, {{name}}{{/str}}{{/pix}}
</span>
{{> core_calendar/event_icon}}
<span class="eventname">{{#str}}showeventtype, calendar, {{name}}{{/str}}</span>
{{/hidden}}
</a>

View File

@ -0,0 +1,41 @@
{{!
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 <http://www.gnu.org/licenses/>.
}}
{{!
@template calendar/event_icon
Event icon display.
The purpose of this template is to provide a common location for the
rendering of event icons.
Classes required for JS:
* none
Data attributes required for JS:
* none
Example context (json):
{
"modulename": "assign"
}
}}
{{#modulename}}
{{#pix}} icon, {{modulename}} {{/pix}}
{{/modulename}}
{{^modulename}}
{{#pix}} i/{{eventtype}}event, core {{/pix}}
{{/modulename}}

View File

@ -85,15 +85,20 @@
<li class="events-underway">[{{name}}]</li>
{{/underway}}
{{^underway}}
<li class="calendar_event_{{calendareventtype}}"
data-region="event-item"
<li data-region="event-item"
data-eventtype-{{calendareventtype}}="1"
{{#canedit}}
draggable="true"
data-drag-type="move"
{{/canedit}}>
<a data-action="view-event" data-event-id="{{id}}" href="{{url}}">{{name}}</a>
<a data-action="view-event" data-event-id="{{id}}" href="{{url}}" title="{{name}}">
<span class="badge badge-circle calendar_event_{{calendareventtype}}">
&nbsp;
</span>
{{> core_calendar/event_icon}}
{{name}}
</a>
</li>
{{/underway}}
{{/events}}

View File

@ -101,10 +101,50 @@ $calendarEventUserColor: #dce7ec !default; // Pale blue.
.calendarmonth {
ul {
margin: 0;
padding: 0;
li {
list-style-type: none;
margin-top: 4px;
> a {
@include text-truncate;
max-width: 100%;
display: inline-block;
}
.icon {
margin-left: 0.25em;
margin-right: 0.25em;
vertical-align: initial;
}
.badge {
&.badge-circle {
width: 12px;
height: 12px;
border-radius: 6px;
vertical-align: middle;
&.calendar_event_category {
background-color: $calendarEventCategoryColor;
}
&.calendar_event_course {
background-color: $calendarEventCourseColor;
}
&.calendar_event_site {
background-color: $calendarEventGlobalColor;
}
&.calendar_event_group {
background-color: $calendarEventGroupColor;
}
&.calendar_event_user {
background-color: $calendarEventUserColor;
}
}
}
}
}
@ -149,6 +189,7 @@ $calendarEventUserColor: #dce7ec !default; // Pale blue.
.calendar_event_category {
border-color: $calendarEventCategoryColor;
}
.calendar_event_course {
border-color: $calendarEventCourseColor;
}
@ -174,11 +215,10 @@ $calendarEventUserColor: #dce7ec !default; // Pale blue.
.calendartable {
td,
li {
padding: 5px;
padding: 0 4px 4px 4px;
}
li {
padding-left: 10px;
text-align: left;
}
}
@ -324,10 +364,9 @@ $calendarEventUserColor: #dce7ec !default; // Pale blue.
margin: 0;
}
}
}
.eventname {
padding-left: 0.2em;
.icon {
vertical-align: initial;
}
}
}

View File

@ -28,6 +28,7 @@
.path-calendar {
.calendartable {
width: 100%;
table-layout: fixed;
th,
td {
width: 14%;
@ -88,9 +89,52 @@
.calendarmonth {
ul {
margin: 0;
padding: 0;
li {
list-style-type: none;
margin-top: 4px;
> a {
.text-truncate;
max-width: 100%;
display: inline-block;
}
.icon {
margin-left: 0.25em;
margin-right: 0.25em;
padding: 0;
vertical-align: initial;
}
.badge {
&.badge-circle {
width: 12px;
height: 12px;
padding: 0;
border-radius: 6px;
vertical-align: middle;
&.calendar_event_category {
background-color: @calendarEventCategoryColor;
}
&.calendar_event_course {
background-color: @calendarEventCourseColor;
}
&.calendar_event_site {
background-color: @calendarEventGlobalColor;
}
&.calendar_event_group {
background-color: @calendarEventGroupColor;
}
&.calendar_event_user {
background-color: @calendarEventUserColor;
}
}
}
}
}
td {
@ -153,10 +197,9 @@
.calendartable {
td,
li {
padding: 5px;
padding: 0 4px 4px 4px;
}
li {
padding-left: 10px;
text-align: left;
}
}
@ -317,12 +360,16 @@
margin-bottom: 0.2em;
span {
img {
margin: 0 0.25em;
}
.icon {
padding: 0 0.2em;
}
}
}
.eventname {
padding-left: 0.2em;
.icon {
padding: 0;
margin-left: 0.25em;
}
}
}
.content {
@ -342,7 +389,6 @@
}
}
.calendarwrapper {
position: relative;
}

View File

@ -5580,6 +5580,7 @@ img.iconsmall {
}
.path-calendar .calendartable {
width: 100%;
table-layout: fixed;
}
.path-calendar .calendartable th,
.path-calendar .calendartable td {
@ -5636,10 +5637,45 @@ img.iconsmall {
}
.path-calendar .maincalendar .calendarmonth ul {
margin: 0;
padding: 0;
}
.path-calendar .maincalendar .calendarmonth ul li {
list-style-type: none;
margin-top: 4px;
}
.path-calendar .maincalendar .calendarmonth ul li > a {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
max-width: 100%;
display: inline-block;
}
.path-calendar .maincalendar .calendarmonth ul li .icon {
margin-left: 0.25em;
margin-right: 0.25em;
padding: 0;
vertical-align: initial;
}
.path-calendar .maincalendar .calendarmonth ul li .badge.badge-circle {
width: 12px;
height: 12px;
padding: 0;
border-radius: 6px;
vertical-align: middle;
}
.path-calendar .maincalendar .calendarmonth ul li .badge.badge-circle.calendar_event_category {
background-color: #d8bfd8;
}
.path-calendar .maincalendar .calendarmonth ul li .badge.badge-circle.calendar_event_course {
background-color: #ffd3bd;
}
.path-calendar .maincalendar .calendarmonth ul li .badge.badge-circle.calendar_event_site {
background-color: #d6f8cd;
}
.path-calendar .maincalendar .calendarmonth ul li .badge.badge-circle.calendar_event_group {
background-color: #fee7ae;
}
.path-calendar .maincalendar .calendarmonth ul li .badge.badge-circle.calendar_event_user {
background-color: #dce7ec;
}
.path-calendar .maincalendar .calendarmonth td {
height: 5em;
@ -5690,10 +5726,9 @@ img.iconsmall {
}
.path-calendar .maincalendar .calendartable td,
.path-calendar .maincalendar .calendartable li {
padding: 5px;
padding: 0 4px 4px 4px;
}
.path-calendar .maincalendar .calendartable li {
padding-left: 10px;
text-align: left;
}
.path-calendar .maincalendar .header {
@ -5835,10 +5870,14 @@ img.iconsmall {
margin-bottom: 0.2em;
}
.block .calendar_filters li span img {
margin: 0 0.25em;
}
.block .calendar_filters li span .icon {
padding: 0 0.2em;
}
.block .calendar_filters .eventname {
padding-left: 0.2em;
.block .calendar_filters li .icon {
padding: 0;
margin-left: 0.25em;
}
.block .content h3.eventskey {
margin-top: 0.5em;