slickgrid
Version:
A lightning fast JavaScript grid/spreadsheet
9 lines • 6.48 kB
JavaScript
/**
* SlickGrid v3.0.2
* (c) 2009-present Michael Leibman
* homepage: http://github.com/mleibman/slickgrid
* license: MIT
* date: 2022-11-14
* file: ./plugins/slick.customtooltip.js
*/
!function(H){H.extend(!0,window,{Slick:{Plugins:{CustomTooltip:function(o){var i,d,r,f,m,p,c,n={className:"slick-custom-tooltip",offsetLeft:0,offsetRight:0,offsetTopBottom:4,hideArrow:!1,tooltipTextMaxLength:700,regularTooltipWhiteSpace:"pre-line",whiteSpace:"normal"},l=new Slick.EventHandler,g={};function a(t,e){u(t,e,"slick-header-column")}function s(t,e){u(t,e,"slick-headerrow-column")}function u(t,e,o){b();var i,r={row:-1,cell:f.getColumns().findIndex(function(t){return e&&e.column&&e.column.id===t.id})},n=e.column,l={},a="slick-headerrow-column"===o;(e=e||{}).cell=r.cell,e.row=r.row,e.columnDef=n,e.dataContext=l,e.grid=f,e.type=a?"header-row":"header",g=H.extend(!0,{},c,n.customTooltip),n&&n.disableTooltip||!C(g.usabilityOverride,e)||n&&t.target&&(t=t.target,i=o,d="function"!=typeof t.closest?t.classList.contains(i)?t:t.parentElement.classList.contains(i)?t.parentElement:null:t.closest("."+i),t=(a="slick-headerrow-column"===o)?g.headerRowFormatter:g.headerFormatter,g.useRegularTooltip||!t?y(a?g.useRegularTooltip?null:t:n.name,r,null,n,l):d&&"function"==typeof t&&S(t,r,null,n,l))}function h(t,e){if(b(),f&&t){var n=f.getCellFromEvent(t);if(n){var l=r?r.getItem(n.row):f.getDataItem(n.row),a=f.getColumns()[n.cell];if(d=f.getCellNode(n.row,n.cell),g=H.extend(!0,{},c,a.customTooltip),l&&a&&((e=e||{}).cell=n.cell,e.row=n.row,e.columnDef=a,e.dataContext=l,e.grid=f,e.type="cell",!(a&&a.disableTooltip||!C(g.usabilityOverride,e)))){var s=l.hasOwnProperty(a.field)?l[a.field]:null;if(g.useRegularTooltip||!g.formatter)y(a.formatter,n,s,a,l);else if("function"==typeof g.formatter&&S(g.formatter,n,s,a,l),"function"==typeof g.asyncProcess){t=g.asyncProcess(n.row,n.cell,s,a,l,f);if(!g.asyncPostFormatter)throw new Error('[SlickGrid] when using "asyncProcess", you must also provide an "asyncPostFormatter" formatter');t instanceof Promise&&(i=function(t){var e=!1;if(t instanceof Promise)return{promise:t.then(function(t){if(e)throw{isPromiseCancelled:!0};return t}),cancel:function(){e=!0}};return t}(t)).promise.then(function(t){var e=n,o=s,i=a,r=l;b(),r=H.extend(!0,{},r,{[g.asyncParamsPropName||"__params"]:t}),S(g.asyncPostFormatter,e,o,i,r)}).catch(function(t){if(!t.isPromiseCancelled)throw t})}}}}}function w(e,t){var o;return e?(t.forEach(function(t){t=e.getAttribute(t);t&&(o=t)}),o):null}function y(t,e,o,i,r){var n,l=document.createElement("div"),a=(l.innerHTML=T(t,e,o,i,r),i.toolTip||"");a||(d&&d.clientWidth<d.scrollWidth&&!g.useRegularTooltipFromFormatterOnly?(a=(d.textContent||"").trim()||"",g.tooltipTextMaxLength&&a.length>g.tooltipTextMaxLength&&(a=a.substring(0,g.tooltipTextMaxLength-3)+"..."),n=d):(g.useRegularTooltipFromFormatterOnly?n=l.querySelector("[title], [data-slick-tooltip]"):(n=w(d,["title","data-slick-tooltip"])?d:l.querySelector("[title], [data-slick-tooltip]"))&&w(n,["title","data-slick-tooltip"])||!d||(n=d.querySelector("[title], [data-slick-tooltip]")),(!a||"function"==typeof t&&g.useRegularTooltipFromFormatterOnly)&&(a=w(n,["title","data-slick-tooltip"])||""))),""!==a&&S(t,e,o,i,r,a),x(n,a)}function x(t,e){t=t||d&&(d.hasAttribute("title")&&d.getAttribute("title")?d:d.querySelector("[title]"));t&&(t.setAttribute("data-slick-tooltip",e||""),t.hasAttribute("title")&&t.setAttribute("title",""))}function v(t){var e=0,o=(window.pageXOffset||document.documentElement.scrollLeft,window.pageYOffset||document.documentElement.scrollTop||0),t=L(t);return e=t?t.top-o:e}function L(t){var e,o,i,r;if(t)return void(r=i=o=e=0)!==(t=t.getBoundingClientRect()).top&&void 0!==t.left&&(e=t.top+window.pageYOffset,o=t.left+window.pageXOffset,r=t.right,i=t.bottom),{top:e,left:o,bottom:i,right:r}}function b(){i&&i.cancel&&i.cancel();var t=document.body.querySelector("."+g.className+"."+f.getUID());t&&t.remove&&t.remove()}function T(t,e,o,i,r){return"function"==typeof t?(o="object"==typeof(e=t(e.row,e.cell,o,i,r,f))&&e&&e.text?e.text:"string"==typeof e?e:"",f.sanitizeHtmlString(o)):"string"==typeof t?f.sanitizeHtmlString(t):""}function S(t,e,o,i,r,n,l){(p=document.createElement("div")).className=g.className,p.classList.add(f.getUID()),p.classList.add("l"+e.cell),p.classList.add("r"+e.cell);var a,s,c,t=n||T(t,e,o,i,r)||"",t=g.tooltipTextMaxLength&&t.length>g.tooltipTextMaxLength?t.substring(0,g.tooltipTextMaxLength-3)+"...":t;let u="";!n||g&&g.renderRegularTooltipAsHtml?(u=f.sanitizeHtmlString(t),p.innerHTML=u,p.style.whiteSpace=g&&g.whiteSpace||_defaultOptions.whiteSpace):(u=t||"",p.textContent=u,p.style.whiteSpace=g&&g.regularTooltipWhiteSpace||_defaultOptions.regularTooltipWhiteSpace),g.maxHeight&&(p.style.maxHeight=g.maxHeight+"px"),g.maxWidth&&(p.style.maxWidth=g.maxWidth+"px"),u&&(document.body.appendChild(p),o=e,p&&(o=L(d=d||f.getCellNode(o.row,o.cell)),i=d.offsetWidth,r=p.getBoundingClientRect().height,n=p.getBoundingClientRect().width,e=document.body.offsetWidth||window.innerWidth,a=o.top-p.offsetHeight-(g.offsetTopBottom||0),s=(o&&o.left||0)-(g.offsetRight||0),"center"===(c=g.position||"auto")?(s+=i/2-n/2+(g.offsetRight||0),p.classList.remove("arrow-left-align"),p.classList.remove("arrow-right-align"),p.classList.add("arrow-center-align")):"right-align"===c||("auto"===c||"left-align"!==c)&&e<s+n?(s-=n-i-(g.offsetLeft||0),p.classList.remove("arrow-center-align"),p.classList.remove("arrow-left-align"),p.classList.add("arrow-right-align")):(p.classList.remove("arrow-center-align"),p.classList.remove("arrow-right-align"),p.classList.add("arrow-left-align")),"bottom"===c||"auto"===c&&r>v(d)?(a=o.top+(m.rowHeight||0)+(g.offsetTopBottom||0),p.classList.remove("arrow-down"),p.classList.add("arrow-up")):(p.classList.add("arrow-down"),p.classList.remove("arrow-up")),p.style.top=a+"px",p.style.left=s+"px"),g.hideArrow||p.classList.add("tooltip-arrow"),x(l,t))}function C(t,e){return"function"!=typeof t||t.call(this,e)}H.extend(this,{init:function(t){var e=(f=t)&&t.getData()||[];r=Array.isArray(e)?null:e,m=t.getOptions()||{},c=H.extend(!0,{},n,m.customTooltip,o),l.subscribe(t.onMouseEnter,h).subscribe(t.onHeaderMouseEnter,a).subscribe(t.onHeaderRowMouseEnter,s).subscribe(t.onMouseLeave,b).subscribe(t.onHeaderMouseLeave,b).subscribe(t.onHeaderRowMouseLeave,b)},destroy:function(){b(),l.unsubscribeAll()},hide:b,setOptions:function(t){c=H.extend({},c,t)},pluginName:"CustomTooltip"})}}}})}(jQuery);