From 07fdb5a0a321a9bfb8b2ca7c00101c4025a8282b Mon Sep 17 00:00:00 2001 From: lameze Date: Tue, 30 Oct 2018 00:03:02 -0400 Subject: [PATCH] MDL-63064 block_starredcourses: change events to use pubsub --- blocks/myoverview/amd/build/view.min.js | 2 +- blocks/myoverview/amd/src/view.js | 12 +++++---- blocks/starredcourses/amd/build/main.min.js | 2 +- blocks/starredcourses/amd/src/main.js | 14 +++++----- course/amd/build/events.min.js | 1 + course/amd/src/events.js | 29 +++++++++++++++++++++ 6 files changed, 47 insertions(+), 13 deletions(-) create mode 100644 course/amd/build/events.min.js create mode 100644 course/amd/src/events.js diff --git a/blocks/myoverview/amd/build/view.min.js b/blocks/myoverview/amd/build/view.min.js index c4d08acef86..a278dcb212e 100644 --- a/blocks/myoverview/amd/build/view.min.js +++ b/blocks/myoverview/amd/build/view.min.js @@ -1 +1 @@ -define(["jquery","block_myoverview/repository","core/paged_content_factory","core/custom_interaction_events","core/notification","core/templates"],function(a,b,c,d,e,f){var g={ACTION_ADD_FAVOURITE:'[data-action="add-favourite"]',ACTION_REMOVE_FAVOURITE:'[data-action="remove-favourite"]',FAVOURITE_ICON:'[data-region="favourite-icon"]',ICON_IS_FAVOURITE:'[data-region="is-favourite"]',ICON_NOT_FAVOURITE:'[data-region="not-favourite"]',PAGED_CONTENT_CONTAINER:'[data-region="page-container"]'},h={COURSES_CARDS:"block_myoverview/view-cards",COURSES_LIST:"block_myoverview/view-list",COURSES_SUMMARY:"block_myoverview/view-summary",NOCOURSES:"block_myoverview/no-courses"},i=[12,24,48],j=[],k=function(a){var b={};return b.display=a.attr("data-display"),b.grouping=a.attr("data-grouping"),b.sort=a.attr("data-sort"),b},l={ignoreControlWhileLoading:!0,controlPlacementBottom:!0},m=function(a,c,d){return b.getEnrolledCoursesByTimeline({offset:d*c,limit:c,classification:a.grouping,sort:a.sort})},n=function(a,b){return a.find(g.FAVOURITE_ICON+'[data-course-id="'+b+'"]')},o=function(a,b){return a.find('[data-region="paged-content-page"][data-page="'+b+'"]')},p=function(a){return a.attr("data-course-id")},q=function(a,b){var c=n(a,b),d=c.find(g.ICON_IS_FAVOURITE);d.addClass("hidden"),d.attr("aria-hidden",!0);var e=c.find(g.ICON_NOT_FAVOURITE);e.removeClass("hidden"),e.attr("aria-hidden",!1)},r=function(a,b){var c=n(a,b),d=c.find(g.ICON_IS_FAVOURITE);d.removeClass("hidden"),d.attr("aria-hidden",!1);var e=c.find(g.ICON_NOT_FAVOURITE);e.addClass("hidden"),e.attr("aria-hidden",!0)},s=function(a,b){return a.find('[data-action="add-favourite"][data-course-id="'+b+'"]')},t=function(a,b){return a.find('[data-action="remove-favourite"][data-course-id="'+b+'"]')},u=function(b,c){var d=t(b,c),f=s(b,c);w(c,!0).then(function(g){g?(a("body").trigger("myoverview-events:course_starred",[c]),d.removeClass("hidden"),f.addClass("hidden"),r(b,c)):e.alert("Starring course failed","Could not change favourite state")})["catch"](e.exception)},v=function(b,c){var d=t(b,c),f=s(b,c);w(c,!1).then(function(g){g?(a("body").trigger("myoverview-events:course_unstarred",[c]),d.addClass("hidden"),f.removeClass("hidden"),q(b,c)):e.alert("Starring course failed","Could not change favourite state")})["catch"](e.exception)},w=function(a,c){return b.setFavouriteCourses({courses:[{id:a,favourite:c}]}).then(function(b){return 0==b.warnings.length&&(j.forEach(function(b){b.courses.forEach(function(d,e){d.id==a&&(b.courses[e].isfavourite=c)})}),!0)})["catch"](e.exception)},x=function(a,b){var c=k(a),d="";if(d="cards"==c.display?h.COURSES_CARDS:"list"==c.display?h.COURSES_LIST:h.COURSES_SUMMARY,b.courses.length)return f.render(d,{courses:b.courses});var e=a.attr("data-nocoursesimg");return f.render(h.NOCOURSES,{nocoursesimg:e})},y=function(b,d){b=a(b),b.attr("data-init")||(z(b),b.attr("data-init",!0));var g=k(b),h=c.createWithLimit(i,function(a,c){var d=[];return a.forEach(function(a){var f=a.pageNumber,h=a.pageNumber-1,i=m(g,a.limit,h).then(function(d){return d.courses.length0?j.forEach(function(b,c){var d=o(a,c);x(a,b).then(function(a,b){return f.replaceNodeContents(d,a,b)})["catch"](e.exception)}):y(a,b)};return{init:y,reset:A}}); \ No newline at end of file +define(["jquery","block_myoverview/repository","core/paged_content_factory","core/pubsub","core/custom_interaction_events","core/notification","core/templates","core_course/events"],function(a,b,c,d,e,f,g,h){var i={ACTION_ADD_FAVOURITE:'[data-action="add-favourite"]',ACTION_REMOVE_FAVOURITE:'[data-action="remove-favourite"]',FAVOURITE_ICON:'[data-region="favourite-icon"]',ICON_IS_FAVOURITE:'[data-region="is-favourite"]',ICON_NOT_FAVOURITE:'[data-region="not-favourite"]',PAGED_CONTENT_CONTAINER:'[data-region="page-container"]'},j={COURSES_CARDS:"block_myoverview/view-cards",COURSES_LIST:"block_myoverview/view-list",COURSES_SUMMARY:"block_myoverview/view-summary",NOCOURSES:"block_myoverview/no-courses"},k=[12,24,48],l=[],m=function(a){var b={};return b.display=a.attr("data-display"),b.grouping=a.attr("data-grouping"),b.sort=a.attr("data-sort"),b},n={ignoreControlWhileLoading:!0,controlPlacementBottom:!0},o=function(a,c,d){return b.getEnrolledCoursesByTimeline({offset:d*c,limit:c,classification:a.grouping,sort:a.sort})},p=function(a,b){return a.find(i.FAVOURITE_ICON+'[data-course-id="'+b+'"]')},q=function(a,b){return a.find('[data-region="paged-content-page"][data-page="'+b+'"]')},r=function(a){return a.attr("data-course-id")},s=function(a,b){var c=p(a,b),d=c.find(i.ICON_IS_FAVOURITE);d.addClass("hidden"),d.attr("aria-hidden",!0);var e=c.find(i.ICON_NOT_FAVOURITE);e.removeClass("hidden"),e.attr("aria-hidden",!1)},t=function(a,b){var c=p(a,b),d=c.find(i.ICON_IS_FAVOURITE);d.removeClass("hidden"),d.attr("aria-hidden",!1);var e=c.find(i.ICON_NOT_FAVOURITE);e.addClass("hidden"),e.attr("aria-hidden",!0)},u=function(a,b){return a.find('[data-action="add-favourite"][data-course-id="'+b+'"]')},v=function(a,b){return a.find('[data-action="remove-favourite"][data-course-id="'+b+'"]')},w=function(a,b){var c=v(a,b),e=u(a,b);y(b,!0).then(function(g){g?(d.publish(h.favourited),c.removeClass("hidden"),e.addClass("hidden"),t(a,b)):f.alert("Starring course failed","Could not change favourite state")})["catch"](f.exception)},x=function(a,b){var c=v(a,b),e=u(a,b);y(b,!1).then(function(g){g?(d.publish(h.unfavorited),c.addClass("hidden"),e.removeClass("hidden"),s(a,b)):f.alert("Starring course failed","Could not change favourite state")})["catch"](f.exception)},y=function(a,c){return b.setFavouriteCourses({courses:[{id:a,favourite:c}]}).then(function(b){return 0==b.warnings.length&&(l.forEach(function(b){b.courses.forEach(function(d,e){d.id==a&&(b.courses[e].isfavourite=c)})}),!0)})["catch"](f.exception)},z=function(a,b){var c=m(a),d="";if(d="cards"==c.display?j.COURSES_CARDS:"list"==c.display?j.COURSES_LIST:j.COURSES_SUMMARY,b.courses.length)return g.render(d,{courses:b.courses});var e=a.attr("data-nocoursesimg");return g.render(j.NOCOURSES,{nocoursesimg:e})},A=function(b,d){b=a(b),b.attr("data-init")||(B(b),b.attr("data-init",!0));var e=m(b),h=c.createWithLimit(k,function(a,c){var d=[];return a.forEach(function(a){var g=a.pageNumber,h=a.pageNumber-1,i=o(e,a.limit,h).then(function(d){return d.courses.length0?l.forEach(function(b,c){var d=q(a,c);z(a,b).then(function(a,b){return g.replaceNodeContents(d,a,b)})["catch"](f.exception)}):A(a,b)};return{init:A,reset:C}}); \ No newline at end of file diff --git a/blocks/myoverview/amd/src/view.js b/blocks/myoverview/amd/src/view.js index 9e9de76c6c6..49a0b92249e 100644 --- a/blocks/myoverview/amd/src/view.js +++ b/blocks/myoverview/amd/src/view.js @@ -26,17 +26,21 @@ define( 'jquery', 'block_myoverview/repository', 'core/paged_content_factory', + 'core/pubsub', 'core/custom_interaction_events', 'core/notification', 'core/templates', + 'core_course/events' ], function( $, Repository, PagedContentFactory, + PubSub, CustomEvents, Notification, - Templates + Templates, + CourseEvents ) { var SELECTORS = { @@ -197,9 +201,7 @@ function( setCourseFavouriteState(courseId, true).then(function(success) { if (success) { - // Trigger a JS event so the starred courses block can refresh the list of courses. - $('body').trigger('myoverview-events:course_starred', [courseId]); - + PubSub.publish(CourseEvents.favourited); removeAction.removeClass('hidden'); addAction.addClass('hidden'); showFavouriteIcon(root, courseId); @@ -222,7 +224,7 @@ function( setCourseFavouriteState(courseId, false).then(function(success) { if (success) { - $('body').trigger('myoverview-events:course_unstarred', [courseId]); + PubSub.publish(CourseEvents.unfavorited); removeAction.addClass('hidden'); addAction.removeClass('hidden'); hideFavouriteIcon(root, courseId); diff --git a/blocks/starredcourses/amd/build/main.min.js b/blocks/starredcourses/amd/build/main.min.js index 2ed5f97a45b..3de7137912e 100644 --- a/blocks/starredcourses/amd/build/main.min.js +++ b/blocks/starredcourses/amd/build/main.min.js @@ -1 +1 @@ -define(["jquery","core/notification","block_starredcourses/repository","core/paged_content_factory","core/templates"],function(a,b,c,d,e){var f={STARRED_COURSES_REGION_VIEW:'[data-region="starred-courses-view"]',STARRED_COURSES_REGION:'[data-region="starred-courses-view-content"]'},g=5,h=function(b,c){if(c.length>0)return e.render("block_starredcourses/view-cards",{courses:c});var d=a(f.STARRED_COURSES_REGION_VIEW).attr("data-nocoursesimg");return e.render("block_starredcourses/no-courses",{nocoursesimg:d})},i=function(a,i){var j=a.find(f.STARRED_COURSES_REGION);d.createWithLimit(g,function(b,d){var e=[];return b.forEach(function(b){var f={limit:g,offset:b.offset,userid:i},j=c.getStarredCourses(f).then(function(c){return c.length>0?h(a,c):(d.allItemsLoaded(b.pageNumber),h(a,c))});e.push(j)}),e}).then(function(a,b){return e.replaceNodeContents(j,a,b)})["catch"](b.exception)},j=function(b,c){var d=a("body");d.on("myoverview-events:course_starred",function(){i(b,c)}),d.on("myoverview-events:course_unstarred",function(){i(b,c)})},k=function(b){b=a(b);var c=b.data("userid");j(b,c),i(b,c)};return{init:k}}); \ No newline at end of file +define(["jquery","core/notification","block_starredcourses/repository","core/paged_content_factory","core/pubsub","core/templates","core_course/events"],function(a,b,c,d,e,f,g){var h={STARRED_COURSES_REGION_VIEW:'[data-region="starred-courses-view"]',STARRED_COURSES_REGION:'[data-region="starred-courses-view-content"]'},i=5,j=function(b,c){if(c.length>0)return f.render("block_starredcourses/view-cards",{courses:c});var d=a(h.STARRED_COURSES_REGION_VIEW).attr("data-nocoursesimg");return f.render("block_starredcourses/no-courses",{nocoursesimg:d})},k=function(a,e){var g=a.find(h.STARRED_COURSES_REGION);d.createWithLimit(i,function(b,d){var f=[];return b.forEach(function(b){var g={limit:i,offset:b.offset,userid:e},h=c.getStarredCourses(g).then(function(c){return c.length>0?j(a,c):(d.allItemsLoaded(b.pageNumber),j(a,c))});f.push(h)}),f}).then(function(a,b){return f.replaceNodeContents(g,a,b)})["catch"](b.exception)},l=function(a,b){e.subscribe(g.favourited,function(){k(a,b)}),e.subscribe(g.unfavorited,function(){k(a,b)})},m=function(b){b=a(b);var c=b.data("userid");l(b,c),k(b,c)};return{init:m}}); \ No newline at end of file diff --git a/blocks/starredcourses/amd/src/main.js b/blocks/starredcourses/amd/src/main.js index 30975975b7d..a581a3d6c01 100644 --- a/blocks/starredcourses/amd/src/main.js +++ b/blocks/starredcourses/amd/src/main.js @@ -26,14 +26,18 @@ define( 'core/notification', 'block_starredcourses/repository', 'core/paged_content_factory', - 'core/templates' + 'core/pubsub', + 'core/templates', + 'core_course/events' ], function( $, Notification, Repository, PagedContentFactory, - Templates + PubSub, + Templates, + CourseEvents ) { var SELECTORS = { @@ -111,13 +115,11 @@ function( * @param {Number} userid The user id. */ var registerEventListeners = function(root, userid) { - var body = $('body'); - - body.on('myoverview-events:course_starred', function() { + PubSub.subscribe(CourseEvents.favourited, function() { reloadContent(root, userid); }); - body.on('myoverview-events:course_unstarred', function() { + PubSub.subscribe(CourseEvents.unfavorited, function() { reloadContent(root, userid); }); }; diff --git a/course/amd/build/events.min.js b/course/amd/build/events.min.js new file mode 100644 index 00000000000..4ea5c9e3db4 --- /dev/null +++ b/course/amd/build/events.min.js @@ -0,0 +1 @@ +define([],function(){return{favourited:"core_course:favourited",unfavorited:"core_course:unfavorited"}}); \ No newline at end of file diff --git a/course/amd/src/events.js b/course/amd/src/events.js new file mode 100644 index 00000000000..7609702c34a --- /dev/null +++ b/course/amd/src/events.js @@ -0,0 +1,29 @@ +// 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 . + +/** + * Contain the events the course component can trigger. + * + * @module core_course/events + * @package core_course + * @copyright 2018 Simey Lameze + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +define([], function() { + return { + favourited: 'core_course:favourited', + unfavorited: 'core_course:unfavorited', + }; +}); \ No newline at end of file