YUI.add('moodle-mod_forum-subscriptiontoggle', function (Y, NAME) { // 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 . /** * A utility to check whether the connection to the Moodle server is still * active. * * @module moodle-core-subscriptiontoggle * @package mod_forum * @copyright 2014 Andrew Nicols * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @main moodle-mod_forum-subscriptiontoggle */ /** * @namespace M.mod_forum * @class subscriptiontoggle */ function SubscriptionToggle() { SubscriptionToggle.superclass.constructor.apply(this, arguments); } var LOGNAME = 'moodle-mod_forum-subscriptiontoggle'; Y.extend(SubscriptionToggle, Y.Base, { initializer: function() { Y.delegate('click', this._toggleSubscription, Y.config.doc.body, '.discussionsubscription .discussiontoggle', this); }, _toggleSubscription: function(e) { var clickedLink = e.currentTarget; Y.io(this.get('uri'), { data: { sesskey: M.cfg.sesskey, forumid: clickedLink.getData('forumid'), discussionid: clickedLink.getData('discussionid'), includetext: clickedLink.getData('includetext') }, context: this, 'arguments': { clickedLink: clickedLink }, on: { complete: this._handleCompletion } }); // Prevent the standard browser behaviour now. e.preventDefault(); }, _handleCompletion: function(tid, response, args) { var responseObject; // Attempt to parse the response into an object. try { responseObject = Y.JSON.parse(response.response); if (responseObject.error) { Y.use('moodle-core-notification-ajaxexception', function() { return new M.core.ajaxException(responseObject); }); return this; } } catch (error) { Y.use('moodle-core-notification-exception', function() { return new M.core.exception(error); }); return this; } if (!responseObject.icon) { return; } var container = args.clickedLink.ancestor('.discussionsubscription'); if (container) { // We should just receive the new value for the table. // Note: We do not need to escape the HTML here as it should be provided sanitised from the JS response already. container.set('innerHTML', responseObject.icon); } } }, { NAME: 'subscriptionToggle', ATTRS: { /** * The AJAX endpoint which controls the subscription toggle. * * @attribute uri * @type String * @default M.cfg.wwwroot + '/mod/forum/subscribe_ajax.php' */ uri: { value: M.cfg.wwwroot + '/mod/forum/subscribe_ajax.php' } } }); var NS = Y.namespace('M.mod_forum.subscriptiontoggle'); NS.init = function(config) { return new SubscriptionToggle(config); }; }, '@VERSION@', {"requires": ["base-base", "io-base"]});