UNPKG

vxe-pc-ui

Version:
1 lines 2.77 kB
Object.defineProperty(exports,"__esModule",{value:!0}),exports.getContentUrl=getContentUrl;var _xeUtils=_interopRequireDefault(require("xe-utils")),_dom=require("../../ui/src/dom");function _interopRequireDefault(t){return t&&t.__esModule?t:{default:t}}let canvasEl=null,fontEl=null,fontCacheMaps={};function getMarkCanvas(){return canvasEl||((canvasEl=document.createElement("canvas")).style.position="absolute",canvasEl.style.top="0",canvasEl.style.left="0"),canvasEl}function removeMarkElement(t){var e;t&&(e=t.parentNode)&&e.removeChild(t)}function calcFontWH(t,e){var n=e+"_"+t;return fontCacheMaps[n]||((fontEl=fontEl||document.createElement("span")).parentNode||document.body.append(fontEl),fontEl.textContent=t,fontEl.style.fontSize=(0,_dom.toCssUnit)(e),t=fontEl.offsetWidth,e=fontEl.offsetHeight,fontCacheMaps[n]={width:t,height:e}),fontCacheMaps[n]}function calcContentWH(t){let e=0,n=0;return t.forEach(t=>{e=Math.max(t.width,e),n=Math.max(t.height,n)}),{contentWidth:e,contentHeight:n}}function calcCanvasWH(t,e){var e=e.gap,[e=0,n=0]=e?_xeUtils.default.isArray(e)?e:[e,e]:[];return{canvasWidth:t+_xeUtils.default.toNumber(e),canvasHeight:t+_xeUtils.default.toNumber(n)}}function getFontConf(t,e,n){return(t.font?t.font[e]:"")||(n.font?n.font[e]:"")}function createMarkFont(t,e,n){var o=n.offset,a=_xeUtils.default.toValueString(t.textContent),n=_xeUtils.default.toNumber(getFontConf(t,"fontSize",n)||e)||14,[e=0,o=0]=o?_xeUtils.default.isArray(o)?o:[o,o]:[],{width:l,height:r}=calcFontWH(a,n);return{text:a,fontSize:n,font:t.font,width:l+_xeUtils.default.toNumber(e),height:r+_xeUtils.default.toNumber(o)}}function drayFont(t,e,n){var o=getFontConf(e,"fontWeight",n);t.fillStyle=""+(getFontConf(e,"color",n)||"rgba(0, 0, 0, 0.15)"),t.font=[getFontConf(e,"fontStyle",n)||"normal","bold"===o||"bolder"===o?"bold":"",(0,_dom.toCssUnit)(e.fontSize),getFontConf(e,"fontFamily",n)||"sans-serif"].join(" ")}function getContentUrl(t,e,n){let c=Object.assign({},n);n=c.rotate;let u=_xeUtils.default.toNumber(n),d=(_xeUtils.default.isArray(t)?t:[t]).map(t=>t?t.textContent?createMarkFont(t,e,c):createMarkFont({textContent:""+t},e,c):createMarkFont({textContent:""},e,c));return removeMarkElement(fontEl),new Promise(t=>{var e=getMarkCanvas();e.parentNode||document.body.append(e);let i=e.getContext("2d");if(i&&d.length){let{contentWidth:n,contentHeight:o}=calcContentWH(d);var{canvasWidth:f,canvasHeight:s}=calcCanvasWH(n,c);e.width=f,e.height=s;let a=(f-n)/2,l=(s-o)/2;f=a+n/2,s=l+o/2;i.save(),i.translate(f,s),i.rotate(u*Math.PI/180),i.translate(-f,-s);let r=0;d.forEach(t=>{var e=getFontConf(t,"align",c);drayFont(i,t,c),i.fillText(t.text,a+("center"===e?(n-t.width)/2:0),l+(o+o)/2+r,n),r+=t.height}),i.restore(),t(e.toDataURL())}else t("");removeMarkElement(e)})}