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 content area of the notification area on the* notification page.** @module message_popup/notification_area_content_area* @copyright 2016 Ryan Wyllie <ryan@moodle.com>* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/define(['jquery', 'core/templates', 'core/notification', 'core/custom_interaction_events','message_popup/notification_repository', 'message_popup/notification_area_events'],function($, Templates, DebugNotification, CustomEvents, NotificationRepo, NotificationAreaEvents) {var SELECTORS = {CONTAINER: '[data-region="notification-area"]',CONTENT: '[data-region="content"]',HEADER: '[data-region="header"]',FOOTER: '[data-region="footer"]',TOGGLE_MODE: '[data-action="toggle-mode"]',};var TEMPLATES = {HEADER: 'message_popup/notification_area_content_area_header',CONTENT: 'message_popup/notification_area_content_area_content',FOOTER: 'message_popup/notification_area_content_area_footer',};/*** Constructor for the ContentArea** @class* @param {object} root The root element for the content area* @param {int} userId The user id of the current user*/var ContentArea = function(root, userId) {this.root = $(root);this.container = this.root.closest(SELECTORS.CONTAINER);this.userId = userId;this.header = this.root.find(SELECTORS.HEADER);this.content = this.root.find(SELECTORS.CONTENT);this.footer = this.root.find(SELECTORS.FOOTER);this.registerEventListeners();};/*** Get the root element.** @method getRoot* @return {object} jQuery element*/ContentArea.prototype.getRoot = function() {return this.root;};/*** Get the container element (which the content area is within).** @method getContainer* @return {object} jQuery element*/ContentArea.prototype.getContainer = function() {return this.container;};/*** Get the user id.** @method getUserId* @return {int}*/ContentArea.prototype.getUserId = function() {return this.userId;};/*** Get the content area header element.** @method getHeader* @return {object} jQuery element*/ContentArea.prototype.getHeader = function() {return this.header;};/*** Get the content area content element.** @method getContent* @return {object} jQuery element*/ContentArea.prototype.getContent = function() {return this.content;};/*** Get the content area footer element.** @method getFooter* @return {object} jQuery element*/ContentArea.prototype.getFooter = function() {return this.footer;};/*** Display the content area. Typically used with responsive* styling on smaller screens.** @method show*/ContentArea.prototype.show = function() {this.getContainer().addClass('show-content-area');};/*** Hide the content area. Typically used with responsive* styling on smaller screens.** @method hide*/ContentArea.prototype.hide = function() {this.getContainer().removeClass('show-content-area');};/*** Change the HTML in the content area header element.** @method setHeaderHTML* @param {string} html The HTML to be set*/ContentArea.prototype.setHeaderHTML = function(html) {this.getHeader().empty().html(html);};/*** Change the HTML in the content area content element.** @method setContentHMTL* @param {string} html The HTML to be set.*/ContentArea.prototype.setContentHTML = function(html) {this.getContent().empty().html(html);};/*** Change the HTML in the content area footer element.** @method setFooterHTML* @param {string} html The HTML to be set.*/ContentArea.prototype.setFooterHTML = function(html) {this.getFooter().empty().html(html);};/*** Render the given notification context in the content area.** @method showNotification* @param {object} notification The notification context (from a webservice)* @return {object} jQuery promise*/ContentArea.prototype.showNotification = function(notification) {var headerPromise = Templates.render(TEMPLATES.HEADER, notification).done(function(html) {this.setHeaderHTML(html);}.bind(this));var contentPromise = Templates.render(TEMPLATES.CONTENT, notification).done(function(html) {this.setContentHTML(html);}.bind(this));var footerPromise = Templates.render(TEMPLATES.FOOTER, notification).done(function(html) {this.setFooterHTML(html);}.bind(this));return $.when(headerPromise, contentPromise, footerPromise).done(function() {this.show();this.getContainer().trigger(NotificationAreaEvents.notificationShown, [notification]);}.bind(this));};/*** Create the event listeners for the content area.** @method registerEventListeners*/ContentArea.prototype.registerEventListeners = function() {CustomEvents.define(this.getRoot(), [CustomEvents.events.activate]);this.getRoot().on(CustomEvents.events.activate, SELECTORS.VIEW_TOGGLE, function() {this.hide();}.bind(this));this.getContainer().on(NotificationAreaEvents.showNotification, function(e, notification) {this.showNotification(notification);}.bind(this));};return ContentArea;});