vxe-pc-ui
Version:
A vue based PC component library
1 lines • 2.69 kB
JavaScript
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 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:r,height:l}=calcFontWH(a,n);return{text:a,fontSize:n,font:t.font,width:r+_xeUtils.default.toNumber(e),height:l+_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 h=Object.assign({},n);n=h.rotate;let m=_xeUtils.default.toNumber(n),g=(_xeUtils.default.isArray(t)?t:[t]).map(t=>t?t.textContent?createMarkFont(t,e,h):createMarkFont({textContent:""+t},e,h):createMarkFont({textContent:""},e,h));return removeMarkElement(fontEl),new Promise(t=>{var e=getMarkCanvas();e.parentNode||document.body.append(e);let s=e.getContext("2d");if(s&&g.length){var n=h.gap,n=n?_xeUtils.default.isArray(n)?n:[n,n]:[],u=_xeUtils.default.toNumber(n[0]),n=_xeUtils.default.toNumber(n[1]);let o=calcContentWH(g).contentWidth;var c=2*o+2*u+u/2,d=2*o+n;e.width=c,e.height=d;let a=u/2,r=o+n/2,l=(s.save(),s.translate(a,r),s.rotate(m*Math.PI/180),s.translate(-a,-r),0),f=(g.forEach(t=>{drayFont(s,t,h);var e=a,n=r+l;s.fillText(t.text,e,n,o),l+=t.height}),u),i=n+o;l=0,g.forEach(t=>{drayFont(s,t,h);var e=a+f,n=r+l+i;s.fillText(t.text,e,n,o),l+=t.height}),s.restore(),t(e.toDataURL())}else t("");removeMarkElement(e)})}