UNPKG

fabric

Version:

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

1 lines 6.69 kB
{"version":3,"file":"util.mjs","sources":["../../../../src/canvas/DOMManagers/util.ts"],"sourcesContent":["import { LEFT, NONE, TOP } from '../../constants';\nimport type { TSize } from '../../typedefs';\nimport {\n getDocumentFromElement,\n getWindowFromElement,\n getScrollLeftTop,\n} from '../../util/dom_misc';\nimport { setStyle } from '../../util/dom_style';\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 function allowTouchScrolling(element: HTMLElement, allow: boolean) {\n const touchAction = allow ? 'manipulation' : NONE;\n setStyle(element, {\n 'touch-action': touchAction,\n '-ms-touch-action': touchAction,\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 let box = { left: 0, top: 0 };\n const doc = element && getDocumentFromElement(element),\n offset = { left: 0, top: 0 },\n offsetAttributes = {\n borderLeftWidth: LEFT,\n borderTopWidth: TOP,\n paddingLeft: LEFT,\n paddingTop: TOP,\n } as const;\n\n if (!doc) {\n return offset;\n }\n const elemStyle =\n getWindowFromElement(element)?.getComputedStyle(element, null) || {};\n for (const attr in offsetAttributes) {\n // @ts-expect-error TS learn to iterate!\n offset[offsetAttributes[attr]] += parseInt(elemStyle[attr], 10) || 0;\n }\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","allowTouchScrolling","element","allow","touchAction","NONE","setStyle","setCSSDimensions","_ref2","style","concat","getElementOffset","_getWindowFromElement","box","left","top","doc","getDocumentFromElement","offset","offsetAttributes","borderLeftWidth","LEFT","borderTopWidth","TOP","paddingLeft","paddingTop","elemStyle","getWindowFromElement","getComputedStyle","attr","parseInt","docElem","documentElement","getBoundingClientRect","scrollLeftTop","getScrollLeftTop","clientLeft","clientTop","makeElementUnselectable","onselectstart","userSelect"],"mappings":"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"}