AutorÃa | Ultima modificación | Ver Log |
{"version":3,"file":"message_drawer_view_settings.min.js","sources":["../src/message_drawer_view_settings.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see <http://www.gnu.org/licenses/>.\n\n/**\n * Controls the settings page in the message drawer.\n *\n * @module core_message/message_drawer_view_settings\n * @copyright 2018 Ryan Wyllie <ryan@moodle.com>\n * @license http://
www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(\n[\n 'jquery',\n 'core/notification',\n 'core/str',\n 'core/pubsub',\n 'core/templates',\n 'core_message/message_repository',\n 'core/custom_interaction_events',\n 'core_message/message_drawer_events'\n],\nfunction(\n $,\n Notification,\n Str,\n PubSub,\n Templates,\n Repository,\n CustomEvents,\n MessageDrawerEvents\n) {\n\n var SELECTORS = {\n CHECKBOX: 'input[type=\"checkbox\"]',\n SETTINGS: '[data-region=\"settings\"]',\n PRIVACY_PREFERENCE: '[data-preference=\"blocknoncontacts\"] input[type=\"radio\"]',\n NOTIFICATIONS_PREFERENCE: '[data-preference=\"notifications\"] input[type=\"checkbox\"]',\n ENTER_TO_SEND_PREFERENCE: '[data-preference=\"entertosend\"] input[type=\"checkbox\"]',\n NOTIFICATION_PREFERENCES_CONTAINER: '[data-region=\"notification-preference-container\"]',\n CONTENT_CONTAINER: '[data-region=\"content-container\"]',\n P
LACEHOLDER_CONTAINER: '[data-region=\"placeholder-container\"]'\n };\n\n var TEMPLATES = {\n NOTIFICATION_PREFERENCES: 'core_message/message_drawer_view_settings_body_content_notification_preferences'\n };\n\n var NOTIFICATION_PREFERENCES_KEY = 'message_provider_moodle_instantmessage';\n\n /**\n * Select the correct radio button in the DOM for the privacy preference.\n *\n * @param {Object} body The settings body element.\n * @param {Number} value Which radio button should be set\n */\n var setPrivacyPreference = function(body, value) {\n var inputs = body.find(SELECTORS.PRIVACY_PREFERENCE);\n inputs.each(function(index, input) {\n input = $(input);\n if (input.val() == value) {\n input.prop('checked', true);\n } else {\n input.prop('checked', false);\n }\n });\n };\n\n /**\n * Set the \"enter to send\" checkbox to the correct value in the DOM.\n *\n *
@param {Object} body The settings body element.\n * @param {Bool} value Whether enter to send is enabled or disabled.\n */\n var setEnterToSend = function(body, value) {\n var checkbox = body.find(SELECTORS.ENTER_TO_SEND_PREFERENCE);\n\n if (value) {\n checkbox.prop('checked', true);\n } else {\n checkbox.prop('checked', false);\n }\n };\n\n /**\n * Send a request to the server to save the given preferences. Also publish\n * a preferences updated event for the rest of the message drawer to\n * subscribe to.\n *\n * @param {Number} loggedInUserId The logged in user id.\n * @param {Array} preferences The preferences to set.\n * @return {Object} jQuery promise\n */\n var savePreferences = function(loggedInUserId, preferences) {\n return Repository.savePreferences(loggedInUserId, preferences)\n .then(function() {\n PubSub.publish(MessageDrawerEvents.PREFERENCES_UPDATED, preferenc
es);\n return;\n })\n .catch(Notification.exception);\n };\n\n /**\n * Create all of the event listeners for the message preferences page.\n *\n * @method registerEventListeners\n * @param {Object} body The settings body element.\n * @param {Number} loggedInUserId The logged in user id.\n */\n var registerEventListeners = function(body, loggedInUserId) {\n var settingsContainer = body.find(SELECTORS.SETTINGS);\n\n CustomEvents.define(settingsContainer, [\n CustomEvents.events.activate\n ]);\n\n settingsContainer.on(CustomEvents.events.activate, SELECTORS.NOTIFICATIONS_PREFERENCE, function(e) {\n var container = $(e.target).closest(SELECTORS.NOTIFICATION_PREFERENCES_CONTAINER);\n var checkboxes = container.find(SELECTORS.CHECKBOX);\n if (!checkboxes.length) {\n return;\n }\n // The preference value is all of the enabled processors, c
omma separated, so let's\n // see which ones are enabled.\n var values = checkboxes.toArray().reduce(function(carry, checkbox) {\n checkbox = $(checkbox);\n if (checkbox.prop('checked')) {\n carry.push(checkbox.attr('data-name'));\n }\n\n return carry;\n }, []);\n var newValue = values.length ? values.join(',') : 'none';\n var preferences = [\n {\n type: 'message_provider_moodle_instantmessage_enabled',\n value: newValue\n }\n ];\n\n savePreferences(loggedInUserId, preferences);\n });\n\n settingsContainer.on('change', SELECTORS.PRIVACY_PREFERENCE, function(e) {\n var newValue = $(e.target).val();\n var preferences = [\n {\n type: 'message_blocknoncontacts',\n value: newValue\n }\n
];\n\n savePreferences(loggedInUserId, preferences);\n });\n\n settingsContainer.on(CustomEvents.events.activate, SELECTORS.ENTER_TO_SEND_PREFERENCE, function(e) {\n var newValue = $(e.target).prop('checked');\n var preferences = [\n {\n type: 'message_entertosend',\n value: newValue\n }\n ];\n\n savePreferences(loggedInUserId, preferences);\n });\n };\n\n /**\n * Initialise the module by loading the user's messaging preferences from the server and\n * rendering them in the settings page.\n *\n * Moodle may have many (or no) message processors enabled to notify the user when they\n * receive messages. We need to dynamically build the settings page based on which processors\n * are configured for the user.\n *\n * @param {Object} body The settings body element.\n * @param {Number} loggedInUserId The logged in user id.\n
*/\n var init = function(body, loggedInUserId) {\n // Load the message preferences from the server.\n Repository.getUserMessagePreferences(loggedInUserId)\n .then(function(response) {\n // Set the values of the stright forward preferences.\n setPrivacyPreference(body, response.blocknoncontacts);\n setEnterToSend(body, response.entertosend);\n\n // Parse the list of other preferences into a more usable format.\n var notificationProcessors = [];\n if (response.preferences.components.length) {\n response.preferences.components.forEach(function(component) {\n if (component.notifications.length) {\n // Filter down to just the notification processors that work on instant\n // messaging. We don't care about another other ones.\n var notificationPreferences = component.notif
ications.filter(function(notification) {\n return notification.preferencekey == NOTIFICATION_PREFERENCES_KEY;\n });\n\n if (notificationPreferences.length) {\n // Messaging only has one config at the moment which is for notifications\n // on personal messages.\n var configuration = component.notifications[0];\n notificationProcessors = configuration.processors.map(function(processor) {\n // Consider the the processor enabled if either preference is set. This is\n // for backwards compatibility. Going forward they will be treated as one\n // setting.\n var checked = processor.enabled;\n return {\n
displayname: processor.displayname,\n name: processor.name,\n checked: checked,\n // The admin can force processors to be enabled at a site level so\n // we need to check if this processor has been locked by the admin.\n locked: processor.locked,\n lockedmessage: processor.lockedmessage || null,\n };\n });\n }\n }\n });\n }\n\n var container = body.find(SELECTORS.NOTIFICATION_PREFERENCES_CONTAINER);\n if (notificationProcessors.length) {\n // We have processors (i.e. email, mobile, jabber) to show.\n container.removeClass('hidden');\n // Rend
er the processor options.\n return Templates.render(TEMPLATES.NOTIFICATION_PREFERENCES, {processors: notificationProcessors})\n .then(function(html) {\n container.append(html);\n return html;\n });\n } else {\n return true;\n }\n })\n .then(function() {\n // We're done loading so hide the loading placeholder and show the settings.\n body.find(SELECTORS.CONTENT_CONTAINER).removeClass('hidden');\n body.find(SELECTORS.PLACEHOLDER_CONTAINER).addClass('hidden');\n // Register the event listers for if the user wants to change the preferences.\n registerEventListeners(body, loggedInUserId);\n return;\n })\n .catch(Notification.exception);\n };\n\n /**\n * Initialise the settings page by adding event listeners
to\n * the checkboxes.\n *\n * @param {string} namespace The route namespace.\n * @param {Object} header The settings header element.\n * @param {Object} body The settings body element.\n * @param {Object} footer The footer body element.\n * @param {Number} loggedInUserId The logged in user id.\n * @return {Object} jQuery promise\n */\n var show = function(namespace, header, body, footer, loggedInUserId) {\n if (!body.attr('data-init')) {\n init(body, loggedInUserId);\n body.attr('data-init', true);\n }\n\n return $.Deferred().resolve().promise();\n };\n\n /**\n * String describing this page used for aria-labels.\n *\n * @return {Object} jQuery promise\n */\n var description = function() {\n return Str.get_string('messagedrawerviewsettings', 'core_message');\n };\n\n return {\n show: show,\n description: description,\n };\n});\n"],"names":["define","$","Notification","Str"
,"PubSub","Templates","Repository","CustomEvents","MessageDrawerEvents","SELECTORS","TEMPLATES","savePreferences","loggedInUserId","preferences","then","publish","PREFERENCES_UPDATED","catch","exception","init","body","getUserMessagePreferences","response","value","find","each","index","input","val","prop","setPrivacyPreference","blocknoncontacts","checkbox","setEnterToSend","entertosend","notificationProcessors","components","length","forEach","component","notifications","filter","notification","preferencekey","configuration","processors","map","processor","checked","enabled","displayname","name","locked","lockedmessage","container","removeClass","render","html","append","addClass","settingsContainer","events","activate","on","e","checkboxes","target","closest","values","toArray","reduce","carry","push","attr","newValue","join","type","registerEventListeners","show","namespace","header","footer","Deferred","resolve","promise","description","get_string"],"mappings":"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"}