芝麻web文件管理V1.00
编辑当前文件:/home2/sdektunc/.trash/cepali/message/amd/src/message_drawer_view_contacts.js
// 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
. /** * Controls the contacts page of the message drawer. * * @module core_message/message_drawer_view_contacts * @copyright 2018 Ryan Wyllie
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ define( [ 'jquery', 'core/pubsub', 'core/str', 'core_message/message_drawer_events', 'core_message/message_drawer_view_contacts_section_contacts', 'core_message/message_drawer_view_contacts_section_requests' ], function( $, PubSub, Str, MessageDrawerEvents, ContactsSection, RequestsSection ) { var SELECTORS = { ACTION_SHOW_CONTACTS_SECTION: '[data-action="show-contacts-section"]', ACTION_SHOW_REQUESTS_SECTION: '[data-action="show-requests-section"]', CONTACT_REQUEST_COUNT: '[data-region="contact-request-count"]', CONTACTS_SECTION_CONTAINER: '[data-section="contacts"]', REQUESTS_SECTION_CONTAINER: '[data-section="requests"]', }; /** * Get the container element for the contacts section. * * @param {Object} body Contacts page body element. * @return {Object} */ var getContactsSectionContainer = function(body) { return body.find(SELECTORS.CONTACTS_SECTION_CONTAINER); }; /** * Get the container element for the requests section. * * @param {Object} body Contacts page body element. * @return {Object} */ var getRequestsSectionContainer = function(body) { return body.find(SELECTORS.REQUESTS_SECTION_CONTAINER); }; /** * Get the element that triggers showing the contacts section. * * @param {Object} body Contacts page body element. * @return {Object} */ var getShowContactsAction = function(body) { return body.find(SELECTORS.ACTION_SHOW_CONTACTS_SECTION); }; /** * Get the element that triggers showing the requests section. * * @param {Object} body Contacts page body element. * @return {Object} */ var getShowRequestsAction = function(body) { return body.find(SELECTORS.ACTION_SHOW_REQUESTS_SECTION); }; /** * Check if the given section is visible. * * @param {Object} sectionRoot The root element for the section * @return {Bool} */ var isSectionVisible = function(sectionRoot) { return sectionRoot.hasClass('active'); }; /** * Decrement the contact request count. If the count is zero or below then * hide the count. * * @param {Object} body Conversation body container element. * @return {Function} A function to handle decrementing the count. */ var decrementContactRequestCount = function(body) { return function() { var countContainer = body.find(SELECTORS.CONTACT_REQUEST_COUNT); var count = parseInt(countContainer.text(), 10); count = isNaN(count) ? 0 : count - 1; if (count <= 0) { countContainer.addClass('hidden'); } else { countContainer.text(count); } }; }; /** * Listen to and handle events for contacts. * * @param {Object} body Contacts body container element. */ var registerEventListeners = function(body) { var contactsSection = getContactsSectionContainer(body); var requestsSection = getRequestsSectionContainer(body); var showContactsAction = getShowContactsAction(body); var showRequestsAction = getShowRequestsAction(body); showContactsAction.on('show.bs.tab', function() { ContactsSection.show(contactsSection); }); showRequestsAction.on('show.bs.tab', function() { RequestsSection.show(requestsSection); }); PubSub.subscribe(MessageDrawerEvents.CONTACT_REQUEST_ACCEPTED, decrementContactRequestCount(body)); PubSub.subscribe(MessageDrawerEvents.CONTACT_REQUEST_DECLINED, decrementContactRequestCount(body)); }; /** * Setup the contact page. * * @param {string} namespace The route namespace. * @param {Object} header Contacts header container element. * @param {Object} body Contacts body container element. * @param {Object} footer Contacts footer container element. * @param {String|null} tab Tab to show, either 'requests' or 'contacts', if any. * @return {Object} jQuery promise */ var show = function(namespace, header, body, footer, tab) { body = $(body); if (!body.attr('data-contacts-init')) { registerEventListeners(body); body.attr('data-contacts-init', true); } var contactsSection = getContactsSectionContainer(body); var requestsSection = getRequestsSectionContainer(body); if (tab) { var showContactsAction = getShowContactsAction(body); var showRequestsAction = getShowRequestsAction(body); // Unfortunately we need to hardcode the class changes here rather than trigger // the bootstrap tab functionality because the bootstrap JS doesn't appear to be // loaded by this point which means the tab plugin isn't added and the event listeners // haven't been set up so we can't just trigger a click either. if (tab == 'requests') { showContactsAction.removeClass('active'); contactsSection.removeClass('show active'); showRequestsAction.addClass('active'); requestsSection.addClass('show active'); } else { showRequestsAction.removeClass('active'); requestsSection.removeClass('show active'); showContactsAction.addClass('active'); contactsSection.addClass('show active'); } } if (isSectionVisible(contactsSection)) { ContactsSection.show(contactsSection); } else { RequestsSection.show(requestsSection); } return $.Deferred().resolve().promise(); }; /** * String describing this page used for aria-labels. * * @return {Object} jQuery promise */ var description = function() { return Str.get_string('messagedrawerviewcontacts', 'core_message'); }; return { show: show, description: description }; });