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/>./*** Controls the group info page of the message drawer.** @module core_message/message_drawer_view_group_info* @copyright 2018 Ryan Wyllie <ryan@moodle.com>* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/define(['jquery','core/str','core/templates','core_message/message_repository','core_message/message_drawer_lazy_load_list',],function($,Str,Templates,Repository,LazyLoadList) {var LOAD_MEMBERS_LIMIT = 50;var SELECTORS = {CONTENT_CONTAINER: '[data-region="group-info-content-container"]',MEMBERS_LIST: '[data-region="members-list"]',};var TEMPLATES = {CONTENT: 'core_message/message_drawer_view_group_info_body_content',MEMBERS_LIST: 'core_message/message_drawer_view_group_info_participants_list'};/*** Get the content container of the group info view container.** @param {Object} root Contact container element.* @return {Object} jQuery object*/var getContentContainer = function(root) {return root.find(SELECTORS.CONTENT_CONTAINER);};/*** Render the group info page.** @param {Object} root Container element.* @param {Object} conversation The group conversation.* @param {Number} loggedInUserId The logged in user's id.* @return {Object} jQuery promise*/var render = function(root, conversation, loggedInUserId) {var placeholderCount = conversation.totalMemberCount > 50 ? 50 : conversation.totalMemberCount;var placeholders = Array.apply(null, Array(placeholderCount)).map(function() {return true;});var templateContext = {name: conversation.name,subname: conversation.subname,imageurl: conversation.imageUrl,placeholders: placeholders,loggedinuser: {id: loggedInUserId}};return Templates.render(TEMPLATES.CONTENT, templateContext).then(function(html) {getContentContainer(root).append(html);return html;});};/*** Get the callback to load members of the conversation.** @param {Object} conversation The conversation* @param {Number} limit How many members to load* @param {Number} offset How many memebers to skip* @return {Function} the callback.*/var getLoadMembersCallback = function(conversation, limit, offset) {return function(root, userId) {return Repository.getConversationMembers(conversation.id, userId, limit + 1, offset).then(function(members) {if (members.length > limit) {members = members.slice(0, -1);} else {LazyLoadList.setLoadedAll(root, true);}offset = offset + limit;// Filter out the logged in user so that they don't appear in the list.return members.filter(function(member) {return member.id != userId;});});};};/*** Function to render the members in the list.** @param {Object} contentContainer The list content container.* @param {Array} members The list of members to render* @return {Object} jQuery promise*/var renderMembersCallback = function(contentContainer, members) {return Templates.render(TEMPLATES.MEMBERS_LIST, {contacts: members}).then(function(html) {contentContainer.append(html);return html;});};/*** Setup the contact page.** @param {string} namespace The route namespace.* @param {Object} header Contact header container element.* @param {Object} body Contact body container element.* @param {Object} footer Contact body container element.* @param {Number} conversation The conversation* @param {Number} loggedInUserId The logged in user id* @return {Object} jQuery promise*/var show = function(namespace, header, body, footer, conversation, loggedInUserId) {var root = $(body);getContentContainer(root).empty();return render(root, conversation, loggedInUserId).then(function() {var listRoot = LazyLoadList.getRoot(root);LazyLoadList.show(listRoot,getLoadMembersCallback(conversation, LOAD_MEMBERS_LIMIT, 0),renderMembersCallback);return;});};/*** String describing this page used for aria-labels.** @param {Object} root Contact container element.* @param {Number} conversation The conversation* @return {Object} jQuery promise*/var description = function(root, conversation) {return Str.get_string('messagedrawerviewgroupinfo', 'core_message', conversation.name);};return {show: show,description: description};});