Files
vxe-table/lib/tooltip/src/tooltip.min.js
2019-10-31 19:38:44 +08:00

1 line
4.3 KiB
JavaScript

"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _xeUtils=_interopRequireDefault(require("xe-utils/methods/xe-utils")),_conf=_interopRequireDefault(require("../../conf")),_tools=require("../../tools");function _interopRequireDefault(t){return t&&t.__esModule?t:{default:t}}var _default2={name:"VxeTooltip",props:{value:Boolean,trigger:{type:String,default:function(){return _conf.default.tooltip.trigger}},theme:{type:String,default:function(){return _conf.default.tooltip.theme}},content:[String,Function],zIndex:[String,Number],isArrow:{type:Boolean,default:!0},enterable:Boolean,leaveDelay:{type:Number,default:_conf.default.tooltip.leaveDelay}},data:function(){return{isUpdate:!1,isHover:!1,visible:!1,message:"",tipZindex:0,tipStore:{style:{},placement:"",arrowStyle:null}}},watch:{content:function(t){this.message=t},value:function(t){this.isUpdate||this[t?"show":"close"](),this.isUpdate=!1}},mounted:function(){var i,o=this.$el,t=this.trigger,e=this.content,s=this.value,n=o.parentNode;this.message=e,this.tipZindex=_tools.UtilTools.nextZIndex(),Array.from(o.children).forEach(function(t,e){1<e&&(n.insertBefore(t,o),i||(i=t))}),n.removeChild(o),(this.target=i)&&("hover"===t?(i.onmouseleave=this.targetMouseleaveEvent,i.onmouseenter=this.targetMouseenterEvent):"click"===t&&(i.onclick=this.clickEvent)),s&&this.show()},beforeDestroy:function(){var t=this.$el,e=this.target,i=this.trigger,o=t.parentNode;o&&o.removeChild(t),e&&("hover"===i?(e.onmouseenter=null,e.onmouseleave=null):"click"===i&&(e.onclick=null))},render:function(t){var e=this.theme,i=this.message,o=this.isHover,s=this.isArrow,n=this.visible,l=this.tipStore,r=this.enterable,a=null;return r&&(a={mouseenter:this.wrapperMouseenterEvent,mouseleave:this.wrapperMouseleaveEvent}),t("div",{class:["vxe-table--tooltip-wrapper","theme--".concat(e),"placement--".concat(l.placement),{"is--enterable":r,"is--visible":n,"is--arrow":s,"is--hover":o}],style:l.style,ref:"tipWrapper",on:a},[t("div",{class:"vxe-table--tooltip-content"},this.$slots.content||i),t("div",{class:"vxe-table--tooltip-arrow",style:l.arrowStyle})].concat(this.$slots.default))},methods:{show:function(){return this.toVisible(this.target)},close:function(){return Object.assign(this.tipStore,{style:{},placement:"",arrowStyle:null}),this.update(!1),this.$nextTick()},update:function(t){t!==this.visible&&(this.visible=t,this.isUpdate=!0,this.$listeners.input&&this.$emit("input",this.visible))},updateZindex:function(){this.tipZindex<_tools.UtilTools.getLastZIndex()&&(this.tipZindex=_tools.UtilTools.nextZIndex())},toVisible:function(o,t){var s=this;if(this.targetActive=!0,o){var n=this.$el,l=this.tipStore,r=this.zIndex,e=_tools.DomTools.getAbsolutePos(o),a=e.top,c=e.left,i=_tools.DomTools.getDomNode(),h=i.scrollTop,u=i.scrollLeft,p=i.visibleWidth,f=n.parentNode,v=c;return l.placement="top",l.style={width:"auto"},l.arrowStyle={left:"50%"},f||document.body.appendChild(n),t&&(this.message=t),this.update(!0),this.updateZindex(),this.$nextTick().then(function(){var t=n;if(t){var e=t.clientHeight,i=_xeUtils.default.toNumber(getComputedStyle(t).width);return v=c+Math.floor((o.offsetWidth-i)/2),l.style={zIndex:r||s.tipZindex,width:"".concat(i,"px"),top:"".concat(a-e-6,"px"),left:"".concat(v,"px")},s.$nextTick()}}).then(function(){var t=n;if(t){var e=t.clientHeight,i=t.clientWidth;Object.assign(l.style,{top:"".concat(a-e-6,"px"),left:"".concat(v,"px")}),a-e<h+6&&(l.placement="bottom",l.style.top="".concat(a+o.offsetHeight+6,"px")),v<u+6?(v=u+6,l.arrowStyle.left="".concat(v+16<c?c-v+16:16,"px"),l.style.left="".concat(v,"px")):u+p<v+i&&(v=u+p-i-6,l.arrowStyle.left="".concat(i-Math.max(Math.floor((v+i-c)/2),22),"px"),l.style.left="".concat(v,"px"))}})}return this.$nextTick()},clickEvent:function(t){this[this.visible?"close":"show"]()},targetMouseenterEvent:function(t){this.show()},targetMouseleaveEvent:function(t){var e=this,i=this.trigger,o=this.enterable,s=this.leaveDelay;this.targetActive=!1,o&&"hover"===i?setTimeout(function(){e.isHover||e.close()},s):this.close()},wrapperMouseenterEvent:function(t){this.isHover=!0},wrapperMouseleaveEvent:function(t){var e=this,i=this.$listeners,o=this.trigger,s=this.enterable,n=this.leaveDelay;this.isHover=!1,i.leave?this.$emit("leave",t):s&&"hover"===o&&setTimeout(function(){e.targetActive||e.close()},n)}}};exports.default=_default2;