fabric
Version:
Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.
1 lines • 3.86 kB
Source Map (JSON)
{"version":3,"file":"util.min.mjs","names":[],"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"],"mappings":"oKAQA,MAAa,GACX,EACA,EAAA,CACE,MAAA,EAAO,OAAA,GACT,EAAgB,IAAA,CAEhB,EAAG,MAAQ,EACX,EAAG,OAAS,EACR,EAAgB,IAClB,EAAG,aAAa,SAAU,EAAQ,GAAe,UAAA,CAAA,CACjD,EAAG,aAAa,UAAW,EAAS,GAAe,UAAA,CAAA,CACnD,EAAI,MAAM,EAAe,EAAA,GAShB,GACX,EAAA,CACE,MAAA,EAAO,OAAA,KAAA,CAET,IAAU,EAAG,MAAM,MAAyB,OAAV,GAAU,SAAW,GAAG,EAAA,IAAY,GACtE,IACG,EAAG,MAAM,OAA2B,OAAX,GAAW,SAAW,GAAG,EAAA,IAAa,IAQpE,SAAgB,EAAiB,EAAA,CAAA,IAAA,EAC/B,IAAM,EAAM,GAAW,EAAuB,EAAA,CAC5C,EAAS,CAAE,KAAM,EAAG,IAAK,EAAA,CAE3B,GAAA,CAAK,EACH,OAAO,EAET,IAAM,IAAA,EACJ,EAAqB,EAAA,GAAQ,KAAA,IAAA,GAAA,EAAE,iBAAiB,EAAS,KAAA,GACxD,EAAA,CACH,EAAO,MAAQ,SAAS,EAAU,gBAAiB,GAAA,EAAO,EAC1D,EAAO,KAAO,SAAS,EAAU,eAAgB,GAAA,EAAO,EACxD,EAAO,MAAQ,SAAS,EAAU,YAAa,GAAA,EAAO,EACtD,EAAO,KAAO,SAAS,EAAU,WAAY,GAAA,EAAO,EAEpD,IAAI,EAAM,CAAE,KAAM,EAAG,IAAK,EAAA,CAEpB,EAAU,EAAI,gBACT,EAAQ,wBADC,IACyB,KAC3C,EAAM,EAAQ,uBAAA,EAGhB,IAAM,EAAgB,EAAiB,EAAA,CAEvC,MAAO,CACL,KACE,EAAI,KAAO,EAAc,MAAQ,EAAQ,YAAc,GAAK,EAAO,KACrE,IAAK,EAAI,IAAM,EAAc,KAAO,EAAQ,WAAa,GAAK,EAAO,IAAA,CASzE,SAAgB,EAAwB,EAAA,CAKtC,OAJW,EAAQ,gBAInB,IAJqC,KACnC,EAAQ,kBAAA,CAAsB,GAEhC,EAAQ,MAAM,WAAa,EACpB,EAAA,OAAA,KAAA,iBAAA,KAAA,wBAAA,KAAA,iBAAA,KAAA"}