/* * NOTE: the /mod/chat/gui_header_js/ is not a real plugin, * ideally this code should be in /mod/chat/module.js */ /** * @namespace M.mod_chat_header */ M.mod_chat_header = M.mod_chat_ajax || {}; /** * Init header based Chat UI - frame input * * @namespace M.mod_chat_header * @function * @param {YUI} Y * @param {Boolean} forcerefreshasap refresh users frame asap */ M.mod_chat_header.init_insert = function(Y, forcerefreshasap) { if (forcerefreshasap) { parent.jsupdate.location.href = parent.jsupdate.document.anchors[0].href; } parent.input.enableForm(); }; /** * Init header based Chat UI - frame input * * @namespace M.mod_chat_header * @function * @param {YUI} Y */ M.mod_chat_header.init_input = function(Y) { var inputframe = { waitflag : false, // True when a submission is in progress /** * Initialises the input frame * * @function */ init : function() { Y.one('#inputForm').on('submit', this.submit, this); }, /** * Enables the input form * @this {M.mod_chat.js} */ enable_form : function() { var el = Y.one('#input_chat_message'); this.waitflag = false; el.set('className', ''); el.focus(); }, /** * Submits the entered message * @param {Event} e */ submit : function(e) { e.halt(); if (this.waitflag) { return false; } this.waitflag = true; var inputchatmessage = Y.one('#input_chat_message'); Y.one('#insert_chat_message').set('value', inputchatmessage.get('value')); inputchatmessage.set('value', ''); inputchatmessage.addClass('wait'); Y.one('#sendForm').submit(); this.enable_form(); return false; } }; inputframe.init(); }; /** * Init header based Chat UI - frame users * * @namespace M.mod_chat_header * @function * @param {YUI} Y * @param {Array} users */ M.mod_chat_header.init_users = function(Y, users) { var usersframe = { timer : null, // Stores the timer object timeout : 1, // The seconds between updates users : [], // An array of users /** * Initialises the frame with list of users * * @function * @this * @param {Array|null} users */ init : function(users) { this.users = users; this.start(); Y.one(document.body).on('unload', this.stop, this); }, /** * Starts the update timeout * * @function * @this */ start : function() { this.timer = setTimeout(function(self) { self.update(); }, this.timeout * 1000, this); }, /** * Stops the update timeout * @function * @this */ stop : function() { clearTimeout(this.timer); }, /** * Updates the user information * * @function * @this */ update : function() { for (var i in this.users) { var el = Y.one('#uidle' + this.users[i]); if (el) { var parts = el.get('innerHTML').split(':'); var time = this.timeout + (parseInt(parts[0], 10) * 60) + parseInt(parts[1], 10); var min = Math.floor(time / 60); var sec = time % 60; el.set('innerHTML', ((min < 10) ? "0" : "") + min + ":" + ((sec < 10) ? "0" : "") + sec); } } this.start(); } }; usersframe.init(users); };