framework7
Version:
Full featured mobile HTML framework for building iOS & Android apps
2 lines (1 loc) • 11 kB
JavaScript
(function framework7ComponentLoader(e,s){void 0===s&&(s=!0);document,window;var a=e.$,t=(e.Template7,e.utils),r=(e.device,e.support,e.Class),i=(e.Modal,e.ConstructorMethods),n=(e.ModalMethods,function(e){function s(s,r){void 0===r&&(r={}),e.call(this,r,[s]);var i=this,n={autoLayout:!0,messages:[],newMessagesFirst:!1,scrollMessages:!0,scrollMessagesOnEdge:!0,firstMessageRule:void 0,lastMessageRule:void 0,tailMessageRule:void 0,sameNameMessageRule:void 0,sameHeaderMessageRule:void 0,sameFooterMessageRule:void 0,sameAvatarMessageRule:void 0,customClassMessageRule:void 0,renderMessage:void 0};i.useModulesParams(n),i.params=t.extend(n,r);var o=a(r.el).eq(0);if(0===o.length)return i;if(o[0].f7Messages)return o[0].f7Messages;o[0].f7Messages=i;var g=o.closest(".page-content").eq(0);return t.extend(i,{messages:i.params.messages,$el:o,el:o[0],$pageContentEl:g,pageContentEl:g[0]}),i.useModules(),i.init(),i}return e&&(s.__proto__=e),s.prototype=Object.create(e&&e.prototype),s.prototype.constructor=s,s.prototype.getMessageData=function(e){var s=a(e),t={name:s.find(".message-name").html(),header:s.find(".message-header").html(),textHeader:s.find(".message-text-header").html(),textFooter:s.find(".message-text-footer").html(),footer:s.find(".message-footer").html(),isTitle:s.hasClass("messages-title"),type:s.hasClass("message-sent")?"sent":"received",text:s.find(".message-text").html(),image:s.find(".message-image").html(),imageSrc:s.find(".message-image img").attr("src"),typing:s.hasClass("message-typing")};t.isTitle&&(t.text=s.html()),t.text&&t.textHeader&&(t.text=t.text.replace('<div class="message-text-header">'+t.textHeader+"</div>","")),t.text&&t.textFooter&&(t.text=t.text.replace('<div class="message-text-footer">'+t.textFooter+"</div>",""));var r=s.find(".message-avatar").css("background-image");return"none"!==r&&""!==r||(r=void 0),r=r&&"string"==typeof r?r.replace("url(","").replace(")","").replace(/"/g,"").replace(/'/g,""):void 0,t.avatar=r,t},s.prototype.getMessagesData=function(){var e=this,s=[];return e.$el.find(".message, .messages-title").each((function(a,t){s.push(e.getMessageData(t))})),s},s.prototype.renderMessage=function(e){var s=this,a=t.extend({type:"sent",attrs:{}},e);if(s.params.renderMessage)return s.params.renderMessage.call(s,a);if(a.isTitle)return'<div class="messages-title">'+a.text+"</div>";var r=Object.keys(a.attrs).map((function(e){return e+'="'+a.attrs[e]+'"'})).join(" ");return'\n <div class="message message-'+a.type+" "+(a.isTyping?"message-typing":"")+" "+(a.cssClass||"")+'" '+r+">\n "+(a.avatar?'\n <div class="message-avatar" style="background-image:url('+a.avatar+')"></div>\n ':"")+'\n <div class="message-content">\n '+(a.name?'<div class="message-name">'+a.name+"</div>":"")+"\n "+(a.header?'<div class="message-header">'+a.header+"</div>":"")+'\n <div class="message-bubble">\n '+(a.textHeader?'<div class="message-text-header">'+a.textHeader+"</div>":"")+"\n "+(a.image?'<div class="message-image">'+a.image+"</div>":"")+"\n "+(a.imageSrc&&!a.image?'<div class="message-image"><img src="'+a.imageSrc+'"></div>':"")+"\n "+(a.text||a.isTyping?'<div class="message-text">'+(a.text||"")+(a.isTyping?'<div class="message-typing-indicator"><div></div><div></div><div></div></div>':"")+"</div>":"")+"\n "+(a.textFooter?'<div class="message-text-footer">'+a.textFooter+"</div>":"")+"\n </div>\n "+(a.footer?'<div class="message-footer">'+a.footer+"</div>":"")+"\n </div>\n </div>\n "},s.prototype.renderMessages=function(e,s){void 0===e&&(e=this.messages),void 0===s&&(s=this.params.newMessagesFirst?"prepend":"append");var a=this,t=e.map((function(e){return a.renderMessage(e)})).join("");a.$el[s](t)},s.prototype.isFirstMessage=function(){for(var e,s=[],a=arguments.length;a--;)s[a]=arguments[a];var t=this;return!!t.params.firstMessageRule&&(e=t.params).firstMessageRule.apply(e,s)},s.prototype.isLastMessage=function(){for(var e,s=[],a=arguments.length;a--;)s[a]=arguments[a];var t=this;return!!t.params.lastMessageRule&&(e=t.params).lastMessageRule.apply(e,s)},s.prototype.isTailMessage=function(){for(var e,s=[],a=arguments.length;a--;)s[a]=arguments[a];var t=this;return!!t.params.tailMessageRule&&(e=t.params).tailMessageRule.apply(e,s)},s.prototype.isSameNameMessage=function(){for(var e,s=[],a=arguments.length;a--;)s[a]=arguments[a];var t=this;return!!t.params.sameNameMessageRule&&(e=t.params).sameNameMessageRule.apply(e,s)},s.prototype.isSameHeaderMessage=function(){for(var e,s=[],a=arguments.length;a--;)s[a]=arguments[a];var t=this;return!!t.params.sameHeaderMessageRule&&(e=t.params).sameHeaderMessageRule.apply(e,s)},s.prototype.isSameFooterMessage=function(){for(var e,s=[],a=arguments.length;a--;)s[a]=arguments[a];var t=this;return!!t.params.sameFooterMessageRule&&(e=t.params).sameFooterMessageRule.apply(e,s)},s.prototype.isSameAvatarMessage=function(){for(var e,s=[],a=arguments.length;a--;)s[a]=arguments[a];var t=this;return!!t.params.sameAvatarMessageRule&&(e=t.params).sameAvatarMessageRule.apply(e,s)},s.prototype.isCustomClassMessage=function(){for(var e,s=[],a=arguments.length;a--;)s[a]=arguments[a];var t=this;if(t.params.customClassMessageRule)return(e=t.params).customClassMessageRule.apply(e,s)},s.prototype.layout=function(){var e=this;e.$el.find(".message, .messages-title").each((function(s,t){var r=a(t);e.messages||(e.messages=e.getMessagesData());var i=[],n=e.messages[s],o=e.messages[s-1],g=e.messages[s+1];e.isFirstMessage(n,o,g)&&i.push("message-first"),e.isLastMessage(n,o,g)&&i.push("message-last"),e.isTailMessage(n,o,g)&&i.push("message-tail"),e.isSameNameMessage(n,o,g)&&i.push("message-same-name"),e.isSameHeaderMessage(n,o,g)&&i.push("message-same-header"),e.isSameFooterMessage(n,o,g)&&i.push("message-same-footer"),e.isSameAvatarMessage(n,o,g)&&i.push("message-same-avatar");var m=e.isCustomClassMessage(n,o,g);m&&m.length&&("string"==typeof m&&(m=m.split(" ")),m.forEach((function(e){i.push(e)}))),r.removeClass("message-first message-last message-tail message-same-name message-same-header message-same-footer message-same-avatar"),i.forEach((function(e){r.addClass(e)}))}))},s.prototype.clear=function(){this.messages=[],this.$el.html("")},s.prototype.removeMessage=function(e,s){void 0===s&&(s=!0);var t,r,i=this;return"number"==typeof e?(t=e,r=i.$el.find(".message, .messages-title").eq(t)):i.messages&&i.messages.indexOf(e)>=0?(t=i.messages.indexOf(e),r=i.$el.children().eq(t)):t=(r=a(e)).index(),0===r.length||(r.remove(),i.messages.splice(t,1),i.params.autoLayout&&s&&i.layout()),i},s.prototype.removeMessages=function(e,s){void 0===s&&(s=!0);var t=this;if(Array.isArray(e)){var r=[];e.forEach((function(e){r.push(t.$el.find(".message, .messages-title").eq(e))})),r.forEach((function(e){t.removeMessage(e,!1)}))}else a(e).each((function(e,s){t.removeMessage(s,!1)}));return t.params.autoLayout&&s&&t.layout(),t},s.prototype.addMessage=function(){for(var e,s,a=[],t=arguments.length;t--;)a[t]=arguments[t];var r,i,n,o=this;return"boolean"==typeof a[1]?(r=(e=a)[0],i=e[1],n=e[2]):(r=(s=a)[0],n=s[1],i=s[2]),void 0===i&&(i=!0),void 0===n&&(n=o.params.newMessagesFirst?"prepend":"append"),o.addMessages([r],i,n)},s.prototype.addMessages=function(){for(var e,s,t=[],r=arguments.length;r--;)t[r]=arguments[r];var i,n,o,g=this;"boolean"==typeof t[1]?(i=(e=t)[0],n=e[1],o=e[2]):(i=(s=t)[0],o=s[1],n=s[2]),void 0===n&&(n=!0),void 0===o&&(o=g.params.newMessagesFirst?"prepend":"append");var m=g.pageContentEl.scrollHeight,l=g.pageContentEl.offsetHeight,p=g.pageContentEl.scrollTop,d="",u=g.messages.filter((function(e){return e.isTyping}))[0];i.forEach((function(e){u?"append"===o?g.messages.splice(g.messages.indexOf(u),0,e):g.messages.splice(g.messages.indexOf(u)+1,0,e):g.messages["append"===o?"push":"unshift"](e),d+=g.renderMessage(e)}));var c=a(d);if(n&&("append"!==o||g.params.newMessagesFirst||c.addClass("message-appear-from-bottom"),"prepend"===o&&g.params.newMessagesFirst&&c.addClass("message-appear-from-top")),u?"append"===o?c.insertBefore(g.$el.find(".message-typing")):c.insertAfter(g.$el.find(".message-typing")):g.$el[o](c),g.params.autoLayout&&g.layout(),"prepend"!==o||u||(g.pageContentEl.scrollTop=p+(g.pageContentEl.scrollHeight-m)),g.params.scrollMessages&&("append"===o&&!g.params.newMessagesFirst||"prepend"===o&&g.params.newMessagesFirst&&!u))if(g.params.scrollMessagesOnEdge){var f=!1;g.params.newMessagesFirst&&0===p&&(f=!0),!g.params.newMessagesFirst&&p-(m-l)>=-10&&(f=!0),f&&g.scroll(n?void 0:0)}else g.scroll(n?void 0:0);return g},s.prototype.showTyping=function(e){void 0===e&&(e={});var s=this,a=s.messages.filter((function(e){return e.isTyping}))[0];return a&&s.removeMessage(s.messages.indexOf(a)),s.addMessage(t.extend({type:"received",isTyping:!0},e)),s},s.prototype.hideTyping=function(){var e,s,a=this;if(a.messages.forEach((function(s,a){s.isTyping&&(e=a)})),void 0!==e&&a.$el.find(".message").eq(e).hasClass("message-typing")&&(s=!0,a.removeMessage(e)),!s){var t=a.$el.find(".message-typing");t.length&&a.removeMessage(t)}return a},s.prototype.scroll=function(e,s){void 0===e&&(e=300);var a,t=this,r=t.pageContentEl.scrollTop;if(void 0!==s)a=s;else if((a=t.params.newMessagesFirst?0:t.pageContentEl.scrollHeight-t.pageContentEl.offsetHeight)===r)return t;return t.$pageContentEl.scrollTop(a,e),t},s.prototype.init=function(){var e=this;e.messages&&0!==e.messages.length||(e.messages=e.getMessagesData()),e.params.messages&&e.params.messages.length&&e.renderMessages(),e.params.autoLayout&&e.layout(),e.params.scrollMessages&&e.scroll(0)},s.prototype.destroy=function(){var e=this;e.emit("local::beforeDestroy messagesBeforeDestroy",e),e.$el.trigger("messages:beforedestroy"),e.$el[0]&&(e.$el[0].f7Messages=null,delete e.$el[0].f7Messages),t.deleteProps(e)},s}(r)),o={name:"messages",static:{Messages:n},create:function(){this.messages=i({defaultSelector:".messages",constructor:n,app:this,domProp:"f7Messages",addMethods:"renderMessages layout scroll clear removeMessage removeMessages addMessage addMessages".split(" ")})},on:{tabBeforeRemove:function(e){var s=this;a(e).find(".messages-init").each((function(e,a){s.messages.destroy(a)}))},tabMounted:function(e){var s=this;a(e).find(".messages-init").each((function(e,a){s.messages.create({el:a})}))},pageBeforeRemove:function(e){var s=this;e.$el.find(".messages-init").each((function(e,a){s.messages.destroy(a)}))},pageInit:function(e){var s=this;e.$el.find(".messages-init").each((function(e,a){s.messages.create({el:a})}))}},vnode:{"messages-init":{insert:function(e){var s=e.elm;this.messages.create({el:s})},destroy:function(e){var s=e.elm;this.messages.destroy(s)}}}};if(s){if(e.prototype.modules&&e.prototype.modules[o.name])return;e.use(o),e.instance&&(e.instance.useModuleParams(o,e.instance.params),e.instance.useModule(o))}return o}(Framework7, typeof Framework7AutoInstallComponent === 'undefined' ? undefined : Framework7AutoInstallComponent))