weekly release 4.0dev
[moodle.git] / mod / forum / amd / src / pin_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  * This module is the highest level module for the calendar. It is
18  * responsible for initialising all of the components required for
19  * the calendar to run. It also coordinates the interaction between
20  * components by listening for and responding to different events
21  * triggered within the calendar UI.
22  *
23  * @module     mod_forum/pin_toggle
24  * @package    mod_forum
25  * @copyright  2018 Andrew Nicols <andrew@nicols.co.uk>
26  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
27  */
28 define([
29     'jquery',
30     'core/ajax',
31     'core/str',
32     'core/templates',
33     'core/notification',
34     'mod_forum/repository',
35     'mod_forum/selectors',
36     'core/str',
37 ], function(
38     $,
39     Ajax,
40     Str,
41     Templates,
42     Notification,
43     Repository,
44     Selectors,
45     String
46 ) {
48     /**
49      * Registery event listeners for the pin toggle.
50      *
51      * @param {object} root The calendar root element
52      * @param {boolean} preventDefault Should the default action of the event be prevented
53      * @param {function} callback Success callback
54      */
55     var registerEventListeners = function(root, preventDefault, callback) {
56         root.on('click', Selectors.pin.toggle, function(e) {
57             var toggleElement = $(this);
58             var forumid = toggleElement.data('forumid');
59             var discussionid = toggleElement.data('discussionid');
60             var pinstate = toggleElement.data('targetstate');
61             Repository.setPinDiscussionState(forumid, discussionid, pinstate)
62                 .then(function(context) {
63                     return callback(toggleElement, context);
64                 })
65                 .then(function() {
66                     return String.get_string("pinupdated", "forum")
67                         .done(function(s) {
68                             return Notification.addNotification({
69                                 message: s,
70                                 type: "info"
71                             });
72                         });
73                 })
74                 .fail(Notification.exception);
76             if (preventDefault) {
77                 e.preventDefault();
78             }
79         });
80     };
82     return {
83         init: registerEventListeners
84     };
85 });