AutorÃa | Ultima modificación | Ver Log |
// 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/>./*** Module for the list of discussions on when viewing a forum.** @module mod_forum/discussion_list* @copyright 2019 Andrew Nicols <andrew@nicols.co.uk>* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/define(['jquery','core/templates','core/str','core/notification','mod_forum/subscription_toggle','mod_forum/selectors','mod_forum/repository','core/pubsub','mod_forum/forum_events','core_form/changechecker',], function($,Templates,Str,Notification,SubscriptionToggle,Selectors,Repository,PubSub,ForumEvents,FormChangeChecker) {var registerEventListeners = function(root) {PubSub.subscribe(ForumEvents.SUBSCRIPTION_TOGGLED, function(data) {var discussionId = data.discussionId;var subscribed = data.subscriptionState;var discussionListItem = root.find(Selectors.discussion.item + '[data-discussionid= ' + discussionId + ']');var subscribedLabel = discussionListItem.find(Selectors.discussion.subscribedLabel);if (subscribed) {discussionListItem.addClass('subscribed');subscribedLabel.removeAttr('hidden');} else {discussionListItem.removeClass('subscribed');subscribedLabel.attr('hidden', true);}});root.on('click', Selectors.post.inpageCancelButton, function(e) {// Tell formchangechecker to reset the form state.FormChangeChecker.resetFormDirtyState(e.currentTarget);});root.on('click', Selectors.favourite.toggle, function(e) {e.preventDefault();var toggleElement = $(this);var forumId = toggleElement.data('forumid');var discussionId = toggleElement.data('discussionid');var subscriptionState = toggleElement.data('targetstate');Repository.setFavouriteDiscussionState(forumId, discussionId, subscriptionState).then(function() {return location.reload();}).catch(Notification.exception);});root.on('click', Selectors.pin.toggle, function(e) {e.preventDefault();var toggleElement = $(this);var forumId = toggleElement.data('forumid');var discussionId = toggleElement.data('discussionid');var state = toggleElement.data('targetstate');Repository.setPinDiscussionState(forumId, discussionId, state).then(function() {return location.reload();}).catch(Notification.exception);});root.on('click', Selectors.lock.toggle, function(e) {var toggleElement = $(this);var forumId = toggleElement.data('forumid');var discussionId = toggleElement.data('discussionid');var state = toggleElement.data('state');Repository.setDiscussionLockState(forumId, discussionId, state).then(function(context) {var icon = toggleElement.parents(Selectors.summary.actions).find(Selectors.lock.icon);var lockedLabel = toggleElement.parents(Selectors.discussion.item).find(Selectors.discussion.lockedLabel);if (context.locked) {icon.removeClass('hidden');lockedLabel.removeAttr('hidden');} else {icon.addClass('hidden');lockedLabel.attr('hidden', true);}return context;}).then(function(context) {context.forumid = forumId;return Templates.render('mod_forum/discussion_lock_toggle', context);}).then(function(html, js) {return Templates.replaceNode(toggleElement, html, js);}).then(function() {return Str.get_string('lockupdated', 'forum').done(function(s) {return Notification.addNotification({message: s,type: "info"});});}).catch(Notification.exception);e.preventDefault();});};return {init: function(root) {SubscriptionToggle.init(root, false, function(toggleElement, context) {var toggleId = toggleElement.attr('id');var newTargetState = context.userstate.subscribed ? 0 : 1;toggleElement.data('targetstate', newTargetState);var stringKey = context.userstate.subscribed ? 'unsubscribediscussion' : 'subscribediscussion';return Str.get_string(stringKey, 'mod_forum').then(function(string) {toggleElement.closest('td').find('label[for="' + toggleId + '"]').find('span').text(string);return string;});});registerEventListeners(root);}};});