messages.js
6.29 KB
define(["css!cmpts/messages/messages.css"],function(){var e=Dom7,a=function(a,t){function s(e){e.preventDefault()}var n={textarea:null,maxHeight:null};t=t||{};for(var i in n)"undefined"!=typeof t[i]&&null!==t[i]||(t[i]=n[i]);var r=this;if(r.params=t,r.container=e(a),0!==r.container.length)return r.textarea=r.params.textarea?e(r.params.textarea):r.container.find("textarea"),r.pageContainer=r.container.parents(".page").eq(0),r.pageContent=r.pageContainer.find(".page-content"),r.pageContentPadding=parseInt(r.pageContent.css("padding-bottom")),r.initialBarHeight=r.container[0].offsetHeight,r.initialAreaHeight=r.textarea[0].offsetHeight,r.sizeTextarea=function(){r.textarea.css({height:""});var e=r.textarea[0].offsetHeight,a=e-r.textarea[0].clientHeight,t=r.textarea[0].scrollHeight;if(t+a>e){var s=t+a,n=r.initialBarHeight+(s-r.initialAreaHeight),i=r.params.maxHeight||r.container.parents(".view")[0].offsetHeight-88;n>i&&(n=parseInt(i,10),s=n-r.initialBarHeight+r.initialAreaHeight),r.textarea.css("height",s+"px"),r.container.css("height",n+"px");var o=r.pageContent[0].scrollTop===r.pageContent[0].scrollHeight-r.pageContent[0].offsetHeight;r.pageContent.length>0&&(r.pageContent.css("padding-bottom",n+"px"),0===r.pageContent.find(".messages-new-first").length&&o&&r.pageContent.scrollTop(r.pageContent[0].scrollHeight-r.pageContent[0].offsetHeight))}else r.pageContent.length>0&&(r.container.css({height:"",bottom:""}),r.pageContent.css({"padding-bottom":""}))},r.clear=function(){r.textarea.val("").trigger("change")},r.value=function(e){return"undefined"==typeof e?r.textarea.val():void r.textarea.val(e).trigger("change")},r.textareaTimeout=void 0,r.handleTextarea=function(e){clearTimeout(r.textareaTimeout),r.textareaTimeout=setTimeout(function(){r.sizeTextarea()},0)},r.attachEvents=function(e){var a=e?"off":"on";r.container[a]("submit",s),r.textarea[a]("change keydown keypress keyup paste cut",r.handleTextarea)},r.detachEvents=function(){r.attachEvents(!0)},r.init=function(){r.attachEvents()},r.destroy=function(){r.detachEvents(),r=null},r.init(),r.container[0].f7Messagebar=r,r};app.messagebar=function(e,t){return new a(e,t)},app.initPageMessagebar=function(a){function t(){n.destroy(),a.off("pageBeforeRemove",t)}a=e(a);var s=a.hasClass("messagebar")?a:a.find(".messagebar");if(0!==s.length&&s.hasClass("messagebar-init")){var n=app.messagebar(s,s.dataset());a.hasClass("page")&&a.on("pageBeforeRemove",t)}};var t=function(a,t){var s={autoLayout:!0,newMessagesFirst:!1,messageTemplate:'{{#if day}}<div class="messages-date">{{day}} {{#if time}}, <span>{{time}}</span>{{/if}}</div>{{/if}}<div class="message message-{{type}} {{#if hasImage}}message-pic{{/if}} {{#if avatar}}message-with-avatar{{/if}} {{#if position}}message-appear-from-{{position}}{{/if}}">{{#if name}}<div class="message-name">{{name}}</div>{{/if}}<div class="message-text">{{text}}{{#if date}}<div class="message-date">{{date}}</div>{{/if}}</div>{{#if avatar}}<div class="message-avatar" style="background-image:url({{avatar}})"></div>{{/if}}{{#if label}}<div class="message-label">{{label}}</div>{{/if}}</div>'};t=t||{};for(var n in s)"undefined"!=typeof t[n]&&null!==t[n]||(t[n]=s[n]);var i=this;if(i.params=t,i.container=e(a),0!==i.container.length)return i.params.autoLayout&&i.container.addClass("messages-auto-layout"),i.params.newMessagesFirst&&i.container.addClass("messages-new-first"),i.pageContainer=i.container.parents(".page").eq(0),i.pageContent=i.pageContainer.find(".page-content"),i.template=Template7.compile(i.params.messageTemplate),i.layout=function(){i.container.hasClass("messages-auto-layout")||i.container.addClass("messages-auto-layout"),i.container.find(".message").each(function(){var a=e(this);a.find(".message-text img").length>0&&a.addClass("message-pic"),a.find(".message-avatar").length>0&&a.addClass("message-with-avatar")}),i.container.find(".message").each(function(){var a=e(this),t=a.hasClass("message-sent"),s=a.next(".message-"+(t?"sent":"received")),n=a.prev(".message-"+(t?"sent":"received"));0===s.length?a.addClass("message-last message-with-tail"):a.removeClass("message-last message-with-tail"),0===n.length?a.addClass("message-first"):a.removeClass("message-first"),n.length>0&&n.find(".message-name").length>0&&a.find(".message-name").length>0&&n.find(".message-name").text()!==a.find(".message-name").text()&&(n.addClass("message-last message-with-tail"),a.addClass("message-first"))})},i.appendMessage=function(e,a){return i.addMessage(e,"append",a)},i.prependMessage=function(e,a){return i.addMessage(e,"prepend",a)},i.addMessage=function(e,a,t){return i.addMessages([e],a,t)},i.addMessages=function(e,a,t){"undefined"==typeof t&&(t=!0),"undefined"==typeof a&&(a=i.params.newMessagesFirst?"prepend":"append");var s,n="";for(s=0;s<e.length;s++){var r=e[s]||{};r.type=r.type||"sent",r.text&&(r.hasImage=r.text.indexOf("<img")>=0,t&&(r.position="append"===a?"bottom":"top"),n+=i.template(r))}var o,g;"prepend"===a&&(o=i.pageContent[0].scrollHeight,g=i.pageContent[0].scrollTop),i.container[a](n),i.params.autoLayout&&i.layout(),"prepend"===a&&(i.pageContent[0].scrollTop=g+(i.pageContent[0].scrollHeight-o)),("append"===a&&!i.params.newMessagesFirst||"prepend"===a&&i.params.newMessagesFirst)&&i.scrollMessages(t?void 0:0);var p=i.container.find(".message");if(1===e.length)return"append"===a?p[p.length-1]:p[0];var l=[];if("append"===a)for(s=p.length-e.length;s<p.length;s++)l.push(p[s]);else for(s=0;s<e.length;s++)l.push(p[s]);return l},i.removeMessage=function(a){return a=e(a),0!==a.length&&(a.remove(),i.params.autoLayout&&i.layout(),!0)},i.removeMessages=function(e){i.removeMessage(e)},i.clean=function(){i.container.html("")},i.scrollMessages=function(e,a){"undefined"==typeof e&&(e=400);var t,s=i.pageContent[0].scrollTop;if("undefined"!=typeof a)t=a;else if(t=i.params.newMessagesFirst?0:i.pageContent[0].scrollHeight-i.pageContent[0].offsetHeight,t===s)return;i.pageContent.scrollTop(t,e)},i.init=function(){i.params.messages?i.addMessages(i.params.messages,void 0,!1):(i.params.autoLayout&&i.layout(),i.scrollMessages(0))},i.destroy=function(){i=null},i.init(),i.container[0].f7Messages=i,i};app.messages=function(e,a){return new t(e,a)},app.initPageMessages=function(a){function t(){n.destroy(),a.off("pageBeforeRemove",t)}a=e(a);var s=a.find(".messages");if(0!==s.length&&s.hasClass("messages-init")){var n=app.messages(s,s.dataset());a.hasClass("page")&&a.on("pageBeforeRemove",t)}}});