framework7
Version:
Full featured mobile HTML framework for building iOS & Android apps
2 lines (1 loc) • 6.42 kB
JavaScript
(function framework7ComponentLoader(t,e){void 0===e&&(e=!0);document,window;var o=t.$,i=(t.Template7,t.utils),r=(t.device,t.support),n=t.Class,a=(t.Modal,t.ConstructorMethods),s=(t.ModalMethods,function(t){function e(e,n){void 0===n&&(n={}),t.call(this,n,[e]);var a=this,s=i.extend({},e.params.tooltip);a.useModulesParams(s),a.params=i.extend(s,n);var l=a.params.targetEl;if(!l)return a;var p=o(l);if(0===p.length)return a;if(p[0].f7Tooltip)return p[0].f7Tooltip;var h=o(a.render()).eq(0);i.extend(a,{app:e,$targetEl:p,targetEl:p&&p[0],$el:h,el:h&&h[0],text:a.params.text||"",visible:!1,opened:!1}),p[0].f7Tooltip=a;var c,f={};function d(){a.opened?a.hide():a.show(this)}function u(t){a.opened&&(o(t.target).closest(p).length||o(t.target).closest(a.$el).length)||a.hide()}function v(t){c||(c=!0,f.x="touchstart"===t.type?t.targetTouches[0].pageX:t.pageX,f.y="touchstart"===t.type?t.targetTouches[0].pageY:t.pageY,a.show(this))}function g(t){if(c){var e="touchmove"===t.type?t.targetTouches[0].pageX:t.pageX,o="touchmove"===t.type?t.targetTouches[0].pageY:t.pageY;Math.pow(Math.pow(e-f.x,2)+Math.pow(o-f.y,2),.5)>50&&(c=!1,a.hide())}}function m(){c&&(c=!1,a.hide())}function y(){a.show(this)}function E(){a.hide()}function T(){h.hasClass("tooltip-in")||h.removeClass("tooltip-out").remove()}return a.attachEvents=function(){if(h.on("transitionend",T),"click"===a.params.trigger)return p.on("click",d),void o("html").on("click",u);if(r.touch){var t=!!r.passiveListener&&{passive:!0};p.on(e.touchEvents.start,v,t),e.on("touchmove",g),e.on("touchend:passive",m)}else p.on(r.pointerEvents?"pointerenter":"mouseenter",y),p.on(r.pointerEvents?"pointerleave":"mouseleave",E)},a.detachEvents=function(){if(h.off("transitionend",T),"click"===a.params.trigger)return p.off("click",d),void o("html").off("click",u);if(r.touch){var t=!!r.passiveListener&&{passive:!0};p.off(e.touchEvents.start,v,t),e.off("touchmove",g),e.off("touchend:passive",m)}else p.off(r.pointerEvents?"pointerenter":"mouseenter",y),p.off(r.pointerEvents?"pointerleave":"mouseleave",E)},a.useModules(),a.init(),a}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.position=function(t){var e=this.$el,i=this.app,r=this.params.offset||0;e.css({left:"",top:""});var n,a,s,l,p=o(t||this.targetEl),h=[e.width(),e.height()],c=h[0],f=h[1];if(e.css({left:"",top:""}),p&&p.length>0){n=p.outerWidth(),a=p.outerHeight();var d=p.offset();s=d.left-i.left,l=d.top-i.top;var u=p.parents(".page");u.length>0&&(l-=u[0].scrollTop)}var v=[0,0,0],g=v[0],m=v[1],y="top";f+r<l?m=l-f-r:f<i.height-l-a?(y="bottom",m=l+a+r):(y="middle",(m=a/2+l-f/2)<=0?m=8:m+f>=i.height&&(m=i.height-f-8)),"top"===y||"bottom"===y?((g=n/2+s-c/2)<8&&(g=8),g+c>i.width&&(g=i.width-c-8),g<0&&(g=0)):"middle"===y&&((g=s-c)<8||g+c>i.width)&&(g<8&&(g=s+n),g+c>i.width&&(g=i.width-c-8)),e.css({top:m+"px",left:g+"px"})},e.prototype.show=function(t){var e=this.app,i=this.$el,r=this.$targetEl;e.root.append(i),this.position(t);var n=o(t);return this.visible=!0,this.opened=!0,r.trigger("tooltip:show"),i.trigger("tooltip:show"),n.length&&n[0]!==r[0]&&n.trigger("tooltip:show"),this.emit("local::show tooltipShow",this),i.removeClass("tooltip-out").addClass("tooltip-in"),this},e.prototype.hide=function(){var t=this.$el,e=this.$targetEl;return this.visible=!1,this.opened=!1,e.trigger("tooltip:hide"),t.trigger("tooltip:hide"),this.emit("local::hide tooltipHide",this),t.addClass("tooltip-out").removeClass("tooltip-in"),this},e.prototype.render=function(){if(this.params.render)return this.params.render.call(this,this);var t=this.params;return('\n <div class="tooltip '+(t.cssClass||"")+'">\n <div class="tooltip-content">'+(t.text||"")+"</div>\n </div>\n ").trim()},e.prototype.setText=function(t){return void 0===t||(this.params.text=t,this.text=t,this.$el&&this.$el.children(".tooltip-content").html(t),this.opened&&this.position()),this},e.prototype.init=function(){this.attachEvents()},e.prototype.destroy=function(){this.$targetEl&&!this.destroyed&&(this.$targetEl.trigger("tooltip:beforedestroy"),this.emit("local::beforeDestroy tooltipBeforeDestroy",this),this.$el.remove(),delete this.$targetEl[0].f7Tooltip,this.detachEvents(),i.deleteProps(this),this.destroyed=!0)},e}(n)),l={name:"tooltip",static:{Tooltip:s},create:function(){this.tooltip=a({defaultSelector:".tooltip",constructor:s,app:this,domProp:"f7Tooltip"}),this.tooltip.show=function(t){var e=o(t);if(0!==e.length){var i=e[0].f7Tooltip;if(i)return i.show(e[0]),i}},this.tooltip.hide=function(t){var e=o(t);if(0!==e.length){var i=e[0].f7Tooltip;if(i)return i.hide(),i}},this.tooltip.setText=function(t,e){var i=o(t);if(0!==i.length){var r=i[0].f7Tooltip;if(r)return r.setText(e),r}}},params:{tooltip:{targetEl:null,text:null,cssClass:null,render:null,offset:0,trigger:"hover"}},on:{tabMounted:function(t){var e=this;o(t).find(".tooltip-init").each((function(t,i){var r=o(i).attr("data-tooltip");r&&e.tooltip.create({targetEl:i,text:r})}))},tabBeforeRemove:function(t){o(t).find(".tooltip-init").each((function(t,e){e.f7Tooltip&&e.f7Tooltip.destroy()}))},pageInit:function(t){var e=this;t.$el.find(".tooltip-init").each((function(t,i){var r=o(i).attr("data-tooltip");r&&e.tooltip.create({targetEl:i,text:r})})),"ios"===e.theme&&t.view&&t.view.router.dynamicNavbar&&t.$navbarEl&&t.$navbarEl.length>0&&t.$navbarEl.find(".tooltip-init").each((function(t,i){var r=o(i).attr("data-tooltip");r&&e.tooltip.create({targetEl:i,text:r})}))},pageBeforeRemove:function(t){t.$el.find(".tooltip-init").each((function(t,e){e.f7Tooltip&&e.f7Tooltip.destroy()})),"ios"===this.theme&&t.view&&t.view.router.dynamicNavbar&&t.$navbarEl&&t.$navbarEl.length>0&&t.$navbarEl.find(".tooltip-init").each((function(t,e){e.f7Tooltip&&e.f7Tooltip.destroy()}))}},vnode:{"tooltip-init":{insert:function(t){var e=t.elm,i=o(e).attr("data-tooltip");i&&this.tooltip.create({targetEl:e,text:i})},update:function(t){var e=t.elm;e.f7Tooltip&&t&&t.data&&t.data.attrs&&t.data.attrs["data-tooltip"]&&e.f7Tooltip.setText(t.data.attrs["data-tooltip"])},destroy:function(t){var e=t.elm;e.f7Tooltip&&e.f7Tooltip.destroy()}}}};if(e){if(t.prototype.modules&&t.prototype.modules[l.name])return;t.use(l),t.instance&&(t.instance.useModuleParams(l,t.instance.params),t.instance.useModule(l))}return l}(Framework7, typeof Framework7AutoInstallComponent === 'undefined' ? undefined : Framework7AutoInstallComponent))