weekly release 4.0dev
[moodle.git] / mod / forum / amd / src / favourite_toggle.js
1 // This file is part of Moodle - http://moodle.org/
2 //
3 // Moodle is free software: you can redistribute it and/or modify
4 // it under the terms of the GNU General Public License as published by
5 // the Free Software Foundation, either version 3 of the License, or
6 // (at your option) any later version.
7 //
8 // Moodle is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 // GNU General Public License for more details.
12 //
13 // You should have received a copy of the GNU General Public License
14 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
16 /**
17  * Handle discussion subscription toggling on a discussion list in
18  * the forum view.
19  *
20  * @module     mod_forum/favourite_toggle
21  * @package    mod_forum
22  * @copyright  2019 Peter Dias <peter@moodle.com>
23  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
24  */
25 define([
26         'jquery',
27         'core/templates',
28         'core/notification',
29         'mod_forum/repository',
30         'mod_forum/selectors',
31         'core/str',
32     ], function(
33         $,
34         Templates,
35         Notification,
36         Repository,
37         Selectors,
38         String
39     ) {
41     /**
42      * Register event listeners for the subscription toggle.
43      *
44      * @param {object} root The discussion list root element
45      * @param {boolean} preventDefault Should the default action of the event be prevented
46      * @param {function} callback Success callback
47      */
48     var registerEventListeners = function(root, preventDefault, callback) {
49         root.on('click', Selectors.favourite.toggle, function(e) {
50             var toggleElement = $(this);
51             var forumId = toggleElement.data('forumid');
52             var discussionId = toggleElement.data('discussionid');
53             var subscriptionState = toggleElement.data('targetstate');
55             Repository.setFavouriteDiscussionState(forumId, discussionId, subscriptionState)
56                 .then(function(context) {
57                     return callback(toggleElement, context);
58                 })
59                 .then(function() {
60                     return String.get_string("favouriteupdated", "forum")
61                         .done(function(s) {
62                             return Notification.addNotification({
63                                 message: s,
64                                 type: "info"
65                             });
66                         });
67                 })
68                 .catch(Notification.exception);
70             if (preventDefault) {
71                 e.preventDefault();
72             }
73         });
74     };
76     return {
77         init: registerEventListeners
78     };
79 });