UNPKG

fabric

Version:

Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.

1 lines 4.55 kB
{"version":3,"file":"util.min.mjs","sources":["../../../../src/canvas/DOMManagers/util.ts"],"sourcesContent":["import { NONE } from '../../constants';\nimport type { TSize } from '../../typedefs';\nimport {\n getDocumentFromElement,\n getWindowFromElement,\n getScrollLeftTop,\n} from '../../util/dom_misc';\n\nexport const setCanvasDimensions = (\n el: HTMLCanvasElement,\n ctx: CanvasRenderingContext2D,\n { width, height }: TSize,\n retinaScaling = 1,\n) => {\n el.width = width;\n el.height = height;\n if (retinaScaling > 1) {\n el.setAttribute('width', (width * retinaScaling).toString());\n el.setAttribute('height', (height * retinaScaling).toString());\n ctx.scale(retinaScaling, retinaScaling);\n }\n};\n\nexport type CSSDimensions = {\n width: number | string;\n height: number | string;\n};\n\nexport const setCSSDimensions = (\n el: HTMLElement,\n { width, height }: Partial<CSSDimensions>,\n) => {\n width && (el.style.width = typeof width === 'number' ? `${width}px` : width);\n height &&\n (el.style.height = typeof height === 'number' ? `${height}px` : height);\n};\n\n/**\n * Returns offset for a given element\n * @param {HTMLElement} element Element to get offset for\n * @return {Object} Object with \"left\" and \"top\" properties\n */\nexport function getElementOffset(element: HTMLElement) {\n const doc = element && getDocumentFromElement(element),\n offset = { left: 0, top: 0 };\n\n if (!doc) {\n return offset;\n }\n const elemStyle: CSSStyleDeclaration =\n getWindowFromElement(element)?.getComputedStyle(element, null) ||\n ({} as CSSStyleDeclaration);\n offset.left += parseInt(elemStyle.borderLeftWidth, 10) || 0;\n offset.top += parseInt(elemStyle.borderTopWidth, 10) || 0;\n offset.left += parseInt(elemStyle.paddingLeft, 10) || 0;\n offset.top += parseInt(elemStyle.paddingTop, 10) || 0;\n\n let box = { left: 0, top: 0 };\n\n const docElem = doc.documentElement;\n if (typeof element.getBoundingClientRect !== 'undefined') {\n box = element.getBoundingClientRect();\n }\n\n const scrollLeftTop = getScrollLeftTop(element);\n\n return {\n left:\n box.left + scrollLeftTop.left - (docElem.clientLeft || 0) + offset.left,\n top: box.top + scrollLeftTop.top - (docElem.clientTop || 0) + offset.top,\n };\n}\n\n/**\n * Makes element unselectable\n * @param {HTMLElement} element Element to make unselectable\n * @return {HTMLElement} Element that was passed in\n */\nexport function makeElementUnselectable(element: HTMLElement) {\n if (typeof element.onselectstart !== 'undefined') {\n element.onselectstart = () => false;\n }\n element.style.userSelect = NONE;\n return element;\n}\n"],"names":["setCanvasDimensions","el","ctx","_ref","width","height","retinaScaling","arguments","length","undefined","setAttribute","toString","scale","setCSSDimensions","_ref2","style","concat","getElementOffset","element","_getWindowFromElement","doc","getDocumentFromElement","offset","left","top","elemStyle","getWindowFromElement","getComputedStyle","parseInt","borderLeftWidth","borderTopWidth","paddingLeft","paddingTop","box","docElem","documentElement","getBoundingClientRect","scrollLeftTop","getScrollLeftTop","clientLeft","clientTop","makeElementUnselectable","onselectstart","userSelect","NONE"],"mappings":"oKAQO,MAAMA,EAAsB,SACjCC,EACAC,EAA6BC,GAG1B,IAFHC,MAAEA,EAAKC,OAAEA,GAAeF,EACxBG,EAAaC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,EAEhBN,EAAGG,MAAQA,EACXH,EAAGI,OAASA,EACRC,EAAgB,IAClBL,EAAGS,aAAa,SAAUN,EAAQE,GAAeK,YACjDV,EAAGS,aAAa,UAAWL,EAASC,GAAeK,YACnDT,EAAIU,MAAMN,EAAeA,GAE7B,EAOaO,EAAmBA,CAC9BZ,EAAea,KAEZ,IADHV,MAAEA,EAAKC,OAAEA,GAAgCS,EAEzCV,IAAUH,EAAGc,MAAMX,MAAyB,iBAAVA,EAAkBY,GAAAA,OAAMZ,EAAK,MAAOA,GACtEC,IACGJ,EAAGc,MAAMV,OAA2B,iBAAXA,EAAmBW,GAAAA,OAAMX,EAAM,MAAOA,EAAO,EAQpE,SAASY,EAAiBC,GAAsB,IAAAC,EACrD,MAAMC,EAAMF,GAAWG,EAAuBH,GAC5CI,EAAS,CAAEC,KAAM,EAAGC,IAAK,GAE3B,IAAKJ,EACH,OAAOE,EAET,MAAMG,GACyBN,QAA7BA,EAAAO,EAAqBR,cAAQC,SAA7BA,EAA+BQ,iBAAiBT,EAAS,QACxD,GACHI,EAAOC,MAAQK,SAASH,EAAUI,gBAAiB,KAAO,EAC1DP,EAAOE,KAAOI,SAASH,EAAUK,eAAgB,KAAO,EACxDR,EAAOC,MAAQK,SAASH,EAAUM,YAAa,KAAO,EACtDT,EAAOE,KAAOI,SAASH,EAAUO,WAAY,KAAO,EAEpD,IAAIC,EAAM,CAAEV,KAAM,EAAGC,IAAK,GAE1B,MAAMU,EAAUd,EAAIe,qBACyB,IAAlCjB,EAAQkB,wBACjBH,EAAMf,EAAQkB,yBAGhB,MAAMC,EAAgBC,EAAiBpB,GAEvC,MAAO,CACLK,KACEU,EAAIV,KAAOc,EAAcd,MAAQW,EAAQK,YAAc,GAAKjB,EAAOC,KACrEC,IAAKS,EAAIT,IAAMa,EAAcb,KAAOU,EAAQM,WAAa,GAAKlB,EAAOE,IAEzE,CAOO,SAASiB,EAAwBvB,GAKtC,YAJqC,IAA1BA,EAAQwB,gBACjBxB,EAAQwB,cAAgB,KAAM,GAEhCxB,EAAQH,MAAM4B,WAAaC,EACpB1B,CACT"}