UNPKG

fabric

Version:

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

1 lines 3.56 kB
{"version":3,"file":"dom_misc.mjs","sources":["../../../src/util/dom_misc.ts"],"sourcesContent":["/**\n * Returns element scroll offsets\n * @param {HTMLElement} element Element to operate on\n * @return {Object} Object with left/top values\n */\nexport function getScrollLeftTop(element: HTMLElement | null) {\n const doc = element && getDocumentFromElement(element);\n let left = 0,\n top = 0;\n if (!element || !doc) {\n return { left, top };\n }\n\n const docElement = doc.documentElement,\n body = doc.body || {\n scrollLeft: 0,\n scrollTop: 0,\n };\n // While loop checks (and then sets element to) .parentNode OR .host\n // to account for ShadowDOM. We still want to traverse up out of ShadowDOM,\n // but the .parentNode of a root ShadowDOM node will always be null, instead\n // it should be accessed through .host. See http://stackoverflow.com/a/24765528/4383938\n // @ts-expect-error Set element to element parent, or 'host' in case of ShadowDOM\n while (element && (element.parentNode || element.host)) {\n // @ts-expect-error Set element to element parent, or 'host' in case of ShadowDOM\n element = element.parentNode || element.host;\n // @ts-expect-error because element is typed as HTMLElement but it can go up to document\n if (element === doc) {\n left = body.scrollLeft || docElement.scrollLeft || 0;\n top = body.scrollTop || docElement.scrollTop || 0;\n } else {\n left += element!.scrollLeft || 0;\n top += element!.scrollTop || 0;\n }\n\n if (element!.nodeType === 1 && element!.style.position === 'fixed') {\n break;\n }\n }\n\n return { left, top };\n}\n\nexport const getDocumentFromElement = (el: HTMLElement) =>\n el.ownerDocument || null;\n\nexport const getWindowFromElement = (el: HTMLElement) =>\n el.ownerDocument?.defaultView || null;\n"],"names":["getScrollLeftTop","element","doc","getDocumentFromElement","left","top","docElement","documentElement","body","scrollLeft","scrollTop","parentNode","host","nodeType","style","position","el","ownerDocument","getWindowFromElement","_el$ownerDocument","defaultView"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACO,SAASA,gBAAgBA,CAACC,OAA2B,EAAE;AAC5D,EAAA,MAAMC,GAAG,GAAGD,OAAO,IAAIE,sBAAsB,CAACF,OAAO,CAAC,CAAA;EACtD,IAAIG,IAAI,GAAG,CAAC;AACVC,IAAAA,GAAG,GAAG,CAAC,CAAA;AACT,EAAA,IAAI,CAACJ,OAAO,IAAI,CAACC,GAAG,EAAE;IACpB,OAAO;MAAEE,IAAI;AAAEC,MAAAA,GAAAA;KAAK,CAAA;AACtB,GAAA;AAEA,EAAA,MAAMC,UAAU,GAAGJ,GAAG,CAACK,eAAe;AACpCC,IAAAA,IAAI,GAAGN,GAAG,CAACM,IAAI,IAAI;AACjBC,MAAAA,UAAU,EAAE,CAAC;AACbC,MAAAA,SAAS,EAAE,CAAA;KACZ,CAAA;AACH;AACA;AACA;AACA;AACA;EACA,OAAOT,OAAO,KAAKA,OAAO,CAACU,UAAU,IAAIV,OAAO,CAACW,IAAI,CAAC,EAAE;AACtD;AACAX,IAAAA,OAAO,GAAGA,OAAO,CAACU,UAAU,IAAIV,OAAO,CAACW,IAAI,CAAA;AAC5C;IACA,IAAIX,OAAO,KAAKC,GAAG,EAAE;MACnBE,IAAI,GAAGI,IAAI,CAACC,UAAU,IAAIH,UAAU,CAACG,UAAU,IAAI,CAAC,CAAA;MACpDJ,GAAG,GAAGG,IAAI,CAACE,SAAS,IAAIJ,UAAU,CAACI,SAAS,IAAI,CAAC,CAAA;AACnD,KAAC,MAAM;AACLN,MAAAA,IAAI,IAAIH,OAAO,CAAEQ,UAAU,IAAI,CAAC,CAAA;AAChCJ,MAAAA,GAAG,IAAIJ,OAAO,CAAES,SAAS,IAAI,CAAC,CAAA;AAChC,KAAA;AAEA,IAAA,IAAIT,OAAO,CAAEY,QAAQ,KAAK,CAAC,IAAIZ,OAAO,CAAEa,KAAK,CAACC,QAAQ,KAAK,OAAO,EAAE;AAClE,MAAA,MAAA;AACF,KAAA;AACF,GAAA;EAEA,OAAO;IAAEX,IAAI;AAAEC,IAAAA,GAAAA;GAAK,CAAA;AACtB,CAAA;AAEO,MAAMF,sBAAsB,GAAIa,EAAe,IACpDA,EAAE,CAACC,aAAa,IAAI,KAAI;AAEnB,MAAMC,oBAAoB,GAAIF,EAAe,IAAA;AAAA,EAAA,IAAAG,iBAAA,CAAA;AAAA,EAAA,OAClD,CAAAA,CAAAA,iBAAA,GAAAH,EAAE,CAACC,aAAa,MAAAE,IAAAA,IAAAA,iBAAA,KAAhBA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,iBAAA,CAAkBC,WAAW,KAAI,IAAI,CAAA;AAAA;;;;"}