/*====================================================== ************ Messages ************ ======================================================*/ var Messages = function (container, params) { var defaults = { autoLayout: true, newMessagesFirst: false, scrollMessages: true, scrollMessagesOnlyOnEdge: false, messageTemplate: '{{#if day}}' + '
' + '{{/if}}' + '' }; params = params || {}; for (var def in defaults) { if (typeof params[def] === 'undefined' || params[def] === null) { params[def] = defaults[def]; } } // Instance var m = this; // Params m.params = params; // Container m.container = $(container); if (m.container.length === 0) return; // Autolayout if (m.params.autoLayout) m.container.addClass('messages-auto-layout'); // New messages first if (m.params.newMessagesFirst) m.container.addClass('messages-new-first'); // Is In Page m.pageContainer = m.container.parents('.page').eq(0); m.pageContent = m.pageContainer.find('.page-content'); // Compiled template m.template = Template7.compile(m.params.messageTemplate); // Auto Layout m.layout = function () { if (!m.container.hasClass('messages-auto-layout')) m.container.addClass('messages-auto-layout'); m.container.find('.message').each(function () { var message = $(this); if (message.find('.message-text img').length > 0) { var childNodes = message.find('.message-text')[0].childNodes; var onlyPic = true; for (var i = 0 ; i < childNodes.length; i++) { if (childNodes[i].nodeType === 1 && childNodes[i].nodeName.toLowerCase() !== 'img') onlyPic = false; if (childNodes[i].nodeType === 3 && childNodes[i].textContent.trim() !== '') onlyPic = false; } if (onlyPic) message.addClass('message-pic'); else message.removeClass('message-pic'); } if (message.find('.message-avatar').length > 0) message.addClass('message-with-avatar'); }); m.container.find('.message').each(function () { var message = $(this); var isSent = message.hasClass('message-sent'); var next = message.next('.message-' + (isSent ? 'sent' : 'received')); var prev = message.prev('.message-' + (isSent ? 'sent' : 'received')); if (next.length === 0) { message.addClass('message-last message-with-tail'); } else message.removeClass('message-last message-with-tail'); if (prev.length === 0) { message.addClass('message-first'); } else message.removeClass('message-first'); if (prev.length > 0 && prev.find('.message-name').length > 0 && message.find('.message-name').length > 0) { if (prev.find('.message-name').text() !== message.find('.message-name').text()) { prev.addClass('message-last message-with-tail'); message.addClass('message-first'); } } }); }; // Add Message m.appendMessage = function (props, animate) { return m.addMessage(props, 'append', animate); }; m.prependMessage = function (props, animate) { return m.addMessage(props, 'prepend', animate); }; m.addMessage = function (props, method, animate) { return m.addMessages([props], method, animate); }; m.addMessages = function (newMessages, method, animate) { if (typeof animate === 'undefined') { animate = true; } if (typeof method === 'undefined') { method = m.params.newMessagesFirst ? 'prepend' : 'append'; } var newMessagesHTML = '', i; for (i = 0; i < newMessages.length; i++) { var props = newMessages[i] || {}; props.type = props.type || 'sent'; if (!props.text) continue; props.hasImage = props.text.indexOf('