framework7
Version:
Full featured mobile HTML framework for building iOS & Android apps
2 lines (1 loc) • 6.06 kB
JavaScript
(function framework7ComponentLoader(t,o){void 0===o&&(o=!0);document,window;var e=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 o(o,n){void 0===n&&(n={}),t.call(this,n,[o]);var a=this,s=i.extend({},o.params.tooltip);a.useModulesParams(s),a.params=i.extend(s,n);var l=a.params.targetEl;if(!l)return a;var p=e(l);if(0===p.length)return a;if(p[0].f7Tooltip)return p[0].f7Tooltip;var h=e(a.render()).eq(0);i.extend(a,{app:o,$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 d,f={};function u(t){d||(d=!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 c(t){if(d){var o="touchmove"===t.type?t.targetTouches[0].pageX:t.pageX,e="touchmove"===t.type?t.targetTouches[0].pageY:t.pageY;Math.pow(Math.pow(o-f.x,2)+Math.pow(e-f.y,2),.5)>50&&(d=!1,a.hide())}}function v(){d&&(d=!1,a.hide())}function g(){a.show(this)}function m(){a.hide()}function y(){h.hasClass("tooltip-in")||h.removeClass("tooltip-out").remove()}return a.attachEvents=function(){if(h.on("transitionend",y),r.touch){var t=!!r.passiveListener&&{passive:!0};p.on(o.touchEvents.start,u,t),o.on("touchmove",c),o.on("touchend:passive",v)}else p.on(r.pointerEvents?"pointerenter":"mouseenter",g),p.on(r.pointerEvents?"pointerleave":"mouseleave",m)},a.detachEvents=function(){if(h.off("transitionend",y),r.touch){var t=!!r.passiveListener&&{passive:!0};p.off(o.touchEvents.start,u,t),o.off("touchmove",c),o.off("touchend:passive",v)}else p.off(r.pointerEvents?"pointerenter":"mouseenter",g),p.off(r.pointerEvents?"pointerleave":"mouseleave",m)},a.useModules(),a.init(),a}return t&&(o.__proto__=t),o.prototype=Object.create(t&&t.prototype),o.prototype.constructor=o,o.prototype.position=function(t){var o=this.$el,i=this.app;o.css({left:"",top:""});var r,n,a,s,l=e(t||this.targetEl),p=[o.width(),o.height()],h=p[0],d=p[1];if(o.css({left:"",top:""}),l&&l.length>0){r=l.outerWidth(),n=l.outerHeight();var f=l.offset();a=f.left-i.left,s=f.top-i.top;var u=l.parents(".page");u.length>0&&(s-=u[0].scrollTop)}var c=[0,0,0],v=c[0],g=c[1],m="top";d<s?g=s-d:d<i.height-s-n?(m="bottom",g=s+n):(m="middle",(g=n/2+s-d/2)<=0?g=8:g+d>=i.height&&(g=i.height-d-8)),"top"===m||"bottom"===m?((v=r/2+a-h/2)<8&&(v=8),v+h>i.width&&(v=i.width-h-8),v<0&&(v=0)):"middle"===m&&((v=a-h)<8||v+h>i.width)&&(v<8&&(v=a+r),v+h>i.width&&(v=i.width-h-8)),o.css({top:g+"px",left:v+"px"})},o.prototype.show=function(t){var o=this.app,i=this.$el,r=this.$targetEl;o.root.append(i),this.position(t);var n=e(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},o.prototype.hide=function(){var t=this.$el,o=this.$targetEl;return this.visible=!1,this.opened=!1,o.trigger("tooltip:hide"),t.trigger("tooltip:hide"),this.emit("local::hide tooltipHide",this),t.addClass("tooltip-out").removeClass("tooltip-in"),this},o.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()},o.prototype.setText=function(t){return void 0===t?this:(this.params.text=t,this.text=t,this.$el&&this.$el.children(".tooltip-content").html(t),this.opened&&this.position(),this)},o.prototype.init=function(){this.attachEvents()},o.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)},o}(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 o=e(t);if(0!==o.length){var i=o[0].f7Tooltip;if(i)return i.show(o[0]),i}},this.tooltip.hide=function(t){var o=e(t);if(0!==o.length){var i=o[0].f7Tooltip;if(i)return i.hide(),i}},this.tooltip.setText=function(t,o){var i=e(t);if(0!==i.length){var r=i[0].f7Tooltip;if(r)return r.setText(o),r}}},params:{tooltip:{targetEl:null,text:null,cssClass:null,render:null}},on:{tabMounted:function(t){var o=this;e(t).find(".tooltip-init").each((function(t,i){var r=e(i).attr("data-tooltip");r&&o.tooltip.create({targetEl:i,text:r})}))},tabBeforeRemove:function(t){e(t).find(".tooltip-init").each((function(t,o){o.f7Tooltip&&o.f7Tooltip.destroy()}))},pageInit:function(t){var o=this;t.$el.find(".tooltip-init").each((function(t,i){var r=e(i).attr("data-tooltip");r&&o.tooltip.create({targetEl:i,text:r})})),"ios"===o.theme&&t.view&&t.view.router.dynamicNavbar&&t.$navbarEl&&t.$navbarEl.length>0&&t.$navbarEl.find(".tooltip-init").each((function(t,i){var r=e(i).attr("data-tooltip");r&&o.tooltip.create({targetEl:i,text:r})}))},pageBeforeRemove:function(t){t.$el.find(".tooltip-init").each((function(t,o){o.f7Tooltip&&o.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,o){o.f7Tooltip&&o.f7Tooltip.destroy()}))}},vnode:{"tooltip-init":{insert:function(t){var o=t.elm,i=e(o).attr("data-tooltip");i&&this.tooltip.create({targetEl:o,text:i})},update:function(t){var o=t.elm;o.f7Tooltip&&t&&t.data&&t.data.attrs&&t.data.attrs["data-tooltip"]&&o.f7Tooltip.setText(t.data.attrs["data-tooltip"])},destroy:function(t){var o=t.elm;o.f7Tooltip&&o.f7Tooltip.destroy()}}}};if(o){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))