UNPKG

@egjs/imready

Version:

This module is used to wait for the image or video to be ready.

1 lines 51.7 kB
{"version":3,"file":"imready.esm.js","sources":["../src/consts.ts","../src/utils.ts","../src/AutoSizer.ts","../src/loaders/Loader.ts","../src/loaders/ElementLoader.ts","../src/ImReadyManager.ts","../src/loaders/ImageLoader.ts","../src/loaders/VideoLoader.ts","../src/ImReady.ts","../src/reactive.ts","../src/index.ts"],"sourcesContent":["/*\negjs-imready\nCopyright (c) 2020-present NAVER Corp.\nMIT license\n*/\nconst isWindow = typeof window !== \"undefined\";\nconst ua = isWindow ? window.navigator.userAgent : \"\";\nexport const SUPPORT_COMPUTEDSTYLE = isWindow ? !!(\"getComputedStyle\" in window) : false;\nexport const IS_IE = /MSIE|Trident|Windows Phone|Edge/.test(ua);\nexport const SUPPORT_ADDEVENTLISTENER = isWindow ? !!(\"addEventListener\" in document) : false;\nexport const WIDTH = \"width\";\nexport const HEIGHT = \"height\";\n\nexport const PROPS = [\n \"prefix\",\n \"loaders\",\n] as const;\n\nexport const EVENTS = [\n \"preReadyElement\",\n \"readyElement\",\n \"error\",\n \"preReady\",\n \"ready\",\n] as const;\n","/*\negjs-imready\nCopyright (c) 2020-present NAVER Corp.\nMIT license\n*/\nimport { ArrayFormat } from \"./types\";\n\nimport { SUPPORT_ADDEVENTLISTENER, SUPPORT_COMPUTEDSTYLE } from \"./consts\";\n\nexport function getAttribute(el: HTMLElement, name: string): string {\n return el.getAttribute(name) || \"\";\n}\n\nexport function toArray<T>(arr: ArrayFormat<T>): T[] {\n return [].slice.call(arr);\n}\nexport function hasSizeAttribute(target: HTMLElement, prefix = \"data-\"): boolean {\n return !!target.getAttribute(`${prefix}width`);\n}\nexport function hasLoadingAttribute(target: HTMLElement, prefix = \"data-\"): target is HTMLImageElement {\n return ((\"loading\" in target) && (target as HTMLImageElement).getAttribute(\"loading\") === \"lazy\")\n || !!target.getAttribute(`${prefix}lazy`);\n}\nexport function hasSkipAttribute(target: HTMLElement, prefix = \"data-\"): boolean {\n return !!target.getAttribute(`${prefix}skip`);\n}\nexport function addEvent(\n element: EventTarget,\n type: string,\n handler: (...args: any[]) => void,\n) {\n if (SUPPORT_ADDEVENTLISTENER) {\n element.addEventListener(type, handler, false);\n } else if ((element as any).attachEvent) {\n (element as any).attachEvent(`on${type}`, handler);\n } else {\n (element as any)[`on${type}`] = handler;\n }\n}\nexport function removeEvent(\n element: EventTarget,\n type: string,\n handler: (...args: any[]) => void,\n) {\n if (element.removeEventListener) {\n element.removeEventListener(type, handler, false);\n } else if ((element as any).detachEvent) {\n (element as any).detachEvent(`on${type}`, handler);\n } else {\n (element as any)[`on${type}`] = null;\n }\n}\n\nexport function innerWidth(el: HTMLElement) {\n return getSize(el, \"Width\");\n}\nexport function innerHeight(el: HTMLElement) {\n return getSize(el, \"Height\");\n}\nexport function getStyles(el: Element) {\n return (SUPPORT_COMPUTEDSTYLE ?\n window.getComputedStyle(el) : (el as any).currentStyle) || {};\n}\nfunction getSize(el: HTMLElement, name: \"Width\" | \"Height\") {\n const size = (el as any)[`client${name}`] || (el as any)[`offset${name}`];\n\n return parseFloat(size || getStyles(el)[name.toLowerCase()]) || 0;\n}\n\nexport function getContentElements(element: HTMLElement, tags: string[], prefix: string) {\n const skipElements = toArray(element.querySelectorAll([\n `[${prefix}skip] [${prefix}width]`,\n ...tags.map(tag => ([\n `[${prefix}skip] ${tag}`,\n `${tag}[${prefix}skip]`,\n `[${prefix}width] ${tag}`,\n ]).join(\", \")),\n ].join(\", \")));\n\n return toArray<HTMLElement>(\n element.querySelectorAll(`[${prefix}width], ${tags.join(\", \")}`),\n ).filter(el => {\n return skipElements.indexOf(el) === -1;\n });\n}\n","/*\negjs-imready\nCopyright (c) 2020-present NAVER Corp.\nMIT license\n*/\nimport { addEvent, removeEvent, innerWidth, innerHeight, getAttribute } from \"./utils\";\nimport { WIDTH, HEIGHT } from \"./consts\";\nimport { AutoSizerElement } from \"./types\";\n\nconst elements: AutoSizerElement[] = [];\n\nexport function addAutoSizer(element: AutoSizerElement, prefix: string) {\n !elements.length && addEvent(window, \"resize\", resizeAllAutoSizers);\n element.__PREFIX__ = prefix;\n elements.push(element);\n resize(element);\n}\nexport function removeAutoSizer(element: AutoSizerElement, prefix: string) {\n const index = elements.indexOf(element);\n\n if (index < 0) {\n return;\n }\n const fixed = getAttribute(element, `${prefix}fixed`);\n\n delete element.__PREFIX__;\n element.style[fixed === HEIGHT ? WIDTH : HEIGHT] = \"\";\n elements.splice(index, 1);\n\n !elements.length && removeEvent(window, \"resize\", resizeAllAutoSizers);\n}\nfunction resize(element: AutoSizerElement, prefix = \"data-\") {\n const elementPrefix = element.__PREFIX__ || prefix;\n const dataWidth = parseInt(getAttribute(element, `${elementPrefix}${WIDTH}`), 10) || 0;\n const dataHeight = parseInt(getAttribute(element, `${elementPrefix}${HEIGHT}`), 10) || 0;\n const fixed = getAttribute(element, `${elementPrefix}fixed`);\n\n if (fixed === HEIGHT) {\n const size = innerHeight(element) || dataHeight;\n\n element.style[WIDTH] = `${dataWidth / dataHeight * size}px`;\n } else {\n const size = innerWidth(element) || dataWidth;\n\n element.style[HEIGHT] = `${dataHeight / dataWidth * size}px`;\n }\n}\nexport function resizeAllAutoSizers() {\n elements.forEach(element => {\n resize(element);\n });\n}\n","/*\negjs-imready\nCopyright (c) 2020-present NAVER Corp.\nMIT license\n*/\nimport Component from \"@egjs/component\";\nimport { addAutoSizer, removeAutoSizer } from \"../AutoSizer\";\nimport { ImReadyLoaderEvents, ImReadyLoaderOptions } from \"../types\";\nimport { removeEvent, hasSizeAttribute, hasLoadingAttribute, addEvent, hasSkipAttribute } from \"../utils\";\n\n\nexport default abstract class Loader<T extends HTMLElement = any> extends Component<ImReadyLoaderEvents> {\n public static EVENTS: string[] = [];\n public options!: ImReadyLoaderOptions;\n public abstract checkElement(): boolean;\n protected element!: T;\n protected isReady = false;\n protected isPreReady = false;\n protected hasDataSize = false;\n protected hasLoading = false;\n protected isSkip = false;\n\n constructor(element: HTMLElement, options: Partial<ImReadyLoaderOptions> = {}) {\n super();\n this.options = {\n prefix: \"data-\",\n ...options,\n };\n this.element = element as T;\n const prefix = this.options.prefix;\n\n this.hasDataSize = hasSizeAttribute(element, prefix);\n this.isSkip = hasSkipAttribute(element, prefix);\n this.hasLoading = hasLoadingAttribute(element, prefix);\n }\n public check() {\n if (this.isSkip || !this.checkElement()) {\n // I'm Ready\n this.onAlreadyReady(true);\n return false;\n }\n\n if (this.hasDataSize) {\n addAutoSizer(this.element, this.options.prefix);\n }\n if (this.hasDataSize || this.hasLoading) {\n // I'm Pre Ready\n this.onAlreadyPreReady();\n }\n // Wati Pre Ready, Ready\n return true;\n }\n public addEvents() {\n const element = this.element;\n (this.constructor as typeof Loader).EVENTS.forEach(name => {\n addEvent(element, name, this.onCheck);\n });\n }\n public clear() {\n const element = this.element;\n (this.constructor as typeof Loader).EVENTS.forEach(name => {\n removeEvent(element, name, this.onCheck);\n });\n this.removeAutoSizer();\n }\n public destroy() {\n this.clear();\n this.off();\n }\n public removeAutoSizer() {\n if (this.hasDataSize) {\n // I'm already ready.\n const { prefix } = this.options;\n\n removeAutoSizer(this.element, prefix);\n }\n }\n public onCheck = (e?: Event) => {\n this.clear();\n\n\n if (e && e.type === \"error\") {\n this.onError(this.element);\n }\n if (this.hasLoading && this.checkElement()) {\n // I'm not ready\n return;\n }\n // I'm pre-ready and ready!\n const withPreReady = !this.hasDataSize && !this.hasLoading;\n\n this.onReady(withPreReady);\n };\n public onError(target: HTMLElement) {\n this.trigger(\"error\", {\n element: this.element,\n target: target,\n });\n }\n public onPreReady() {\n if (this.isPreReady) {\n return;\n }\n this.isPreReady = true;\n this.trigger(\"preReady\", {\n element: this.element,\n hasLoading: this.hasLoading,\n isSkip: this.isSkip,\n });\n }\n public onReady(withPreReady: boolean) {\n if (this.isReady) {\n return;\n }\n withPreReady = !this.isPreReady && withPreReady;\n\n if (withPreReady) {\n this.isPreReady = true;\n }\n this.removeAutoSizer();\n this.isReady = true;\n this.trigger(\"ready\", {\n element: this.element,\n withPreReady,\n hasLoading: this.hasLoading,\n isSkip: this.isSkip,\n });\n }\n public onAlreadyError(target: HTMLElement) {\n setTimeout(() => {\n this.onError(target);\n });\n }\n public onAlreadyPreReady() {\n setTimeout(() => {\n this.onPreReady();\n });\n }\n public onAlreadyReady(withPreReady: boolean) {\n setTimeout(() => {\n this.onReady(withPreReady);\n });\n }\n}\n","/*\negjs-imready\nCopyright (c) 2020-present NAVER Corp.\nMIT license\n*/\nimport { addAutoSizer } from \"../AutoSizer\";\nimport { ImReadyLoaderOptions } from \"../types\";\nimport Loader from \"./Loader\";\n\n\nexport class ElementLoader<T extends HTMLElement> extends Loader<T> {\n public static EVENTS: string[] = [];\n public options!: ImReadyLoaderOptions;\n\n public setHasLoading(hasLoading: boolean) {\n this.hasLoading = hasLoading;\n }\n public check() {\n if (this.isSkip) {\n // I'm Ready\n this.onAlreadyReady(true);\n return false;\n }\n\n if (this.hasDataSize) {\n addAutoSizer(this.element, this.options.prefix);\n this.onAlreadyPreReady();\n } else {\n // has not data size\n this.trigger(\"requestChildren\");\n }\n return true;\n }\n public checkElement() {\n return true;\n }\n public destroy() {\n this.clear();\n this.trigger(\"requestDestroy\");\n this.off();\n }\n public onAlreadyPreReady() {\n // has data size\n super.onAlreadyPreReady();\n this.trigger(\"reqeustReadyChildren\");\n }\n}\n","/*\negjs-imready\nCopyright (c) 2020-present NAVER Corp.\nMIT license\n*/\nimport Component, { ComponentEvent } from \"@egjs/component\";\nimport { ElementLoader } from \"./loaders/ElementLoader\";\nimport { ArrayFormat, ElementInfo, ImReadyEvents, ImReadyLoaderOptions, ImReadyOptions } from \"./types\";\nimport { toArray, getContentElements, hasLoadingAttribute } from \"./utils\";\n/**\n * @alias eg.ImReady\n * @extends eg.Component\n */\nclass ImReadyManager extends Component<ImReadyEvents> {\n public options!: ImReadyOptions;\n private readyCount = 0;\n private preReadyCount = 0;\n private totalCount = 0;\n private totalErrorCount = 0;\n private isPreReadyOver = true;\n private elementInfos: ElementInfo[] = [];\n /**\n * @param - ImReady's options\n */\n constructor(options: Partial<ImReadyOptions> = {}) {\n super();\n this.options = {\n loaders: {},\n prefix: \"data-\",\n ...options,\n };\n }\n /**\n * Checks whether elements are in the ready state.\n * @ko 엘리먼트가 준비 상태인지 체크한다.\n * @elements - Elements to check ready status. <ko> 준비 상태를 체크할 엘리먼트들.</ko>\n * @example\n * ```html\n * <div>\n * <img src=\"./1.jpg\" data-width=\"1280\" data-height=\"853\" style=\"width:100%\"/>\n * <img src=\"./2.jpg\" data-width=\"1280\" data-height=\"853\"/>\n * <img src=\"ERR\" data-width=\"1280\" data-height=\"853\"/>\n * </div>\n * ```\n * ## Javascript\n * ```js\n * import ImReady from \"@egjs/imready\";\n *\n * const im = new ImReady(); // umd: eg.ImReady\n * im.check(document.querySelectorAll(\"img\")).on({\n * preReadyElement: e => {\n * // 1, 3\n * // 2, 3\n * // 3, 3\n * console.log(e.preReadyCount, e.totalCount),\n * },\n * });\n * ```\n */\n public check(elements: ArrayFormat<HTMLElement>): this {\n const { prefix } = this.options;\n\n this.clear();\n this.elementInfos = toArray(elements).map((element, index) => {\n const loader = this.getLoader(element, { prefix });\n\n loader.check();\n loader.on(\"error\", e => {\n this.onError(index, e.target);\n }).on(\"preReady\", e => {\n const info = this.elementInfos[index];\n\n info.hasLoading = e.hasLoading;\n info.isSkip = e.isSkip;\n const isPreReady = this.checkPreReady(index);\n\n this.onPreReadyElement(index);\n\n isPreReady && this.onPreReady();\n }).on(\"ready\", ({ withPreReady, hasLoading, isSkip }) => {\n const info = this.elementInfos[index];\n\n info.hasLoading = hasLoading;\n info.isSkip = isSkip;\n\n const isPreReady = withPreReady && this.checkPreReady(index);\n const isReady = this.checkReady(index);\n\n // Pre-ready and ready occur simultaneously\n withPreReady && this.onPreReadyElement(index);\n this.onReadyElement(index);\n\n isPreReady && this.onPreReady();\n isReady && this.onReady();\n });\n\n return {\n loader,\n element,\n hasLoading: false,\n hasError: false,\n isPreReady: false,\n isReady: false,\n isSkip: false,\n };\n });\n\n const length = this.elementInfos.length;\n\n this.totalCount = length;\n if (!length) {\n setTimeout(() => {\n this.onPreReady();\n this.onReady();\n });\n }\n return this;\n }\n /**\n * Gets the total count of elements to be checked.\n * @ko 체크하는 element의 총 개수를 가져온다.\n */\n public getTotalCount() {\n return this.totalCount;\n }\n /**\n * Whether the elements are all pre-ready. (all sizes are known)\n * @ko 엘리먼트들이 모두 사전 준비가 됐는지 (사이즈를 전부 알 수 있는지) 여부.\n */\n public isPreReady() {\n return this.elementInfos.every(info => info.isPreReady);\n }\n /**\n * Whether the elements are all ready.\n * @ko 엘리먼트들이 모두 준비가 됐는지 여부.\n */\n public isReady() {\n return this.elementInfos.every(info => info.isReady);\n }\n /**\n * Whether an error has occurred in the elements in the current state.\n * @ko 현재 상태에서 엘리먼트들이 에러가 발생했는지 여부.\n */\n public hasError() {\n return this.totalErrorCount > 0;\n }\n /**\n * Clears events of elements being checked.\n * @ko 체크 중인 엘리먼트들의 이벤트를 해제 한다.\n */\n public clear() {\n this.isPreReadyOver = false;\n this.totalCount = 0;\n this.preReadyCount = 0;\n this.readyCount = 0;\n this.totalErrorCount = 0;\n this.elementInfos.forEach(info => {\n if (info.loader) {\n info.loader.destroy();\n }\n });\n this.elementInfos = [];\n }\n /**\n * Destory all events.\n * @ko 모든 이벤트를 해제 한다.\n */\n public destroy() {\n this.clear();\n this.off();\n }\n private getLoader(element: HTMLElement, options: ImReadyLoaderOptions) {\n const tagName = element.tagName.toLowerCase();\n const loaders = this.options.loaders;\n const prefix = options.prefix;\n const tags = Object.keys(loaders);\n\n if (loaders[tagName]) {\n return new loaders[tagName](element, options);\n }\n const loader = new ElementLoader(element, options);\n const children = toArray(element.querySelectorAll<HTMLElement>(tags.join(\", \")));\n\n loader.setHasLoading(children.some(el => hasLoadingAttribute(el, prefix)));\n let withPreReady = false;\n\n const childrenImReady = this.clone().on(\"error\", e => {\n loader.onError(e.target);\n }).on(\"ready\", () => {\n loader.onReady(withPreReady);\n });\n\n loader.on(\"requestChildren\", () => {\n // has not data size\n const contentElements = getContentElements(element, tags, this.options.prefix);\n\n childrenImReady.check(contentElements).on(\"preReady\", e => {\n withPreReady = e.isReady;\n if (!withPreReady) {\n loader.onPreReady();\n }\n });\n }).on(\"reqeustReadyChildren\", () => {\n // has data size\n // loader call preReady\n // check only video, image elements\n childrenImReady.check(children);\n }).on(\"requestDestroy\", () => {\n childrenImReady.destroy();\n });\n\n return loader;\n }\n private clone() {\n return new ImReadyManager({ ...this.options });\n }\n private checkPreReady(index: number) {\n this.elementInfos[index].isPreReady = true;\n ++this.preReadyCount;\n\n\n if (this.preReadyCount < this.totalCount) {\n return false;\n }\n return true;\n }\n private checkReady(index: number) {\n this.elementInfos[index].isReady = true;\n ++this.readyCount;\n\n if (this.readyCount < this.totalCount) {\n return false;\n }\n return true;\n }\n\n\n private onError(index: number, target: HTMLElement) {\n const info = this.elementInfos[index];\n\n info.hasError = true;\n /**\n * An event occurs if the image, video fails to load.\n * @ko 이미지, 비디오가 로딩에 실패하면 이벤트가 발생한다.\n * @event eg.ImReady#error\n * @param {eg.ImReady.OnError} e - The object of data to be sent to an event <ko>이벤트에 전달되는 데이터 객체</ko>\n * @example\n * ```html\n * <div>\n * <img src=\"./1.jpg\" data-width=\"1280\" data-height=\"853\" style=\"width:100%\"/>\n * <img src=\"./2.jpg\"/>\n * <img src=\"ERR\"/>\n * </div>\n * ```\n * ## Javascript\n * ```js\n * import ImReady from \"@egjs/imready\";\n *\n * const im = new ImReady(); // umd: eg.ImReady\n * im.check([document.querySelector(\"div\")]).on({\n * error: e => {\n * // <div>...</div>, 0, <img src=\"ERR\"/>\n * console.log(e.element, e.index, e.target),\n * },\n * });\n * ```\n */\n this.trigger(new ComponentEvent(\"error\", {\n element: info.element,\n index,\n target,\n errorCount: this.getErrorCount(),\n totalErrorCount: ++this.totalErrorCount,\n }));\n }\n private onPreReadyElement(index: number) {\n const info = this.elementInfos[index];\n /**\n * An event occurs when the element is pre-ready (when the loading attribute is applied or the size is known)\n * @ko 해당 엘리먼트가 사전 준비되었을 때(loading 속성이 적용되었거나 사이즈를 알 수 있을 때) 이벤트가 발생한다.\n * @event eg.ImReady#preReadyElement\n * @param {eg.ImReady.OnPreReadyElement} e - The object of data to be sent to an event <ko>이벤트에 전달되는 데이터 객체</ko>\n * @example\n * ```html\n * <div>\n * <img src=\"./1.jpg\" data-width=\"1280\" data-height=\"853\" style=\"width:100%\"/>\n * <img src=\"./2.jpg\" data-width=\"1280\" data-height=\"853\"/>\n * <img src=\"ERR\" data-width=\"1280\" data-height=\"853\"/>\n * </div>\n * ```\n * ## Javascript\n * ```js\n * import ImReady from \"@egjs/imready\";\n *\n * const im = new ImReady(); // umd: eg.ImReady\n * im.check(document.querySelectorAll(\"img\")).on({\n * preReadyElement: e => {\n * // 1, 3\n * // 2, 3\n * // 3, 3\n * console.log(e.preReadyCount, e.totalCount),\n * },\n * });\n * ```\n */\n this.trigger(new ComponentEvent(\"preReadyElement\", {\n element: info.element,\n index,\n\n preReadyCount: this.preReadyCount,\n readyCount: this.readyCount,\n totalCount: this.totalCount,\n\n isPreReady: this.isPreReady(),\n isReady: this.isReady(),\n hasLoading: info.hasLoading,\n isSkip: info.isSkip,\n }));\n }\n private onPreReady() {\n this.isPreReadyOver = true;\n /**\n * An event occurs when all element are pre-ready (When all elements have the loading attribute applied or the size is known)\n * @ko 모든 엘리먼트들이 사전 준비된 경우 (모든 엘리먼트들이 loading 속성이 적용되었거나 사이즈를 알 수 있는 경우) 이벤트가 발생한다.\n * @event eg.ImReady#preReady\n * @param {eg.ImReady.OnPreReady} e - The object of data to be sent to an event <ko>이벤트에 전달되는 데이터 객체</ko>\n * @example\n * ```html\n * <div>\n * <img src=\"./1.jpg\" data-width=\"1280\" data-height=\"853\" style=\"width:100%\"/>\n * <img src=\"./2.jpg\" data-width=\"1280\" data-height=\"853\"/>\n * <img src=\"ERR\" data-width=\"1280\" data-height=\"853\"/>\n * </div>\n * ```\n * ## Javascript\n * ```js\n * import ImReady from \"@egjs/imready\";\n *\n * const im = new ImReady(); // umd: eg.ImReady\n * im.check(document.querySelectorAll(\"img\")).on({\n * preReady: e => {\n * // 0, 3\n * console.log(e.readyCount, e.totalCount),\n * },\n * });\n * ```\n */\n this.trigger(new ComponentEvent(\"preReady\", {\n readyCount: this.readyCount,\n totalCount: this.totalCount,\n isReady: this.isReady(),\n hasLoading: this.hasLoading(),\n }));\n }\n private onReadyElement(index: number) {\n const info = this.elementInfos[index];\n /**\n * An event occurs when the element is ready\n * @ko 해당 엘리먼트가 준비가 되었을 때 이벤트가 발생한다.\n * @event eg.ImReady#readyElement\n * @param {eg.ImReady.OnReadyElement} e - The object of data to be sent to an event <ko>이벤트에 전달되는 데이터 객체</ko>\n * @example\n * ```html\n * <div>\n * <img src=\"./1.jpg\" data-width=\"1280\" data-height=\"853\" style=\"width:100%\"/>\n * <img src=\"./2.jpg\" data-width=\"1280\" data-height=\"853\"/>\n * <img src=\"ERR\" data-width=\"1280\" data-height=\"853\"/>\n * </div>\n * ```\n * ## Javascript\n * ```js\n * import ImReady from \"@egjs/imready\";\n *\n * const im = new ImReady(); // umd: eg.ImReady\n * im.check(document.querySelectorAll(\"img\")).on({\n * readyElement: e => {\n * // 1, 0, false, 3\n * // 2, 1, false, 3\n * // 3, 2, true, 3\n * console.log(e.readyCount, e.index, e.hasError, e.totalCount),\n * },\n * });\n * ```\n */\n this.trigger(new ComponentEvent(\"readyElement\", {\n index,\n element: info.element,\n\n hasError: info.hasError,\n errorCount: this.getErrorCount(),\n totalErrorCount: this.totalErrorCount,\n\n preReadyCount: this.preReadyCount,\n readyCount: this.readyCount,\n totalCount: this.totalCount,\n\n isPreReady: this.isPreReady(),\n isReady: this.isReady(),\n\n hasLoading: info.hasLoading,\n isPreReadyOver: this.isPreReadyOver,\n isSkip: info.isSkip,\n }));\n }\n private onReady() {\n /**\n * An event occurs when all element are ready\n * @ko 모든 엘리먼트들이 준비된 경우 이벤트가 발생한다.\n * @event eg.ImReady#ready\n * @param {eg.ImReady.OnReady} e - The object of data to be sent to an event <ko>이벤트에 전달되는 데이터 객체</ko>\n * @example\n * ```html\n * <div>\n * <img src=\"./1.jpg\" data-width=\"1280\" data-height=\"853\" style=\"width:100%\"/>\n * <img src=\"./2.jpg\" data-width=\"1280\" data-height=\"853\"/>\n * <img src=\"ERR\" data-width=\"1280\" data-height=\"853\"/>\n * </div>\n * ```\n * ## Javascript\n * ```js\n * import ImReady from \"@egjs/imready\";\n *\n * const im = new ImReady(); // umd: eg.ImReady\n * im.check(document.querySelectorAll(\"img\")).on({\n * preReady: e => {\n * // 0, 3\n * console.log(e.readyCount, e.totalCount),\n * },\n * ready: e => {\n * // 1, 3\n * console.log(e.errorCount, e.totalCount),\n * },\n * });\n * ```\n */\n this.trigger(new ComponentEvent(\"ready\", {\n errorCount: this.getErrorCount(),\n totalErrorCount: this.totalErrorCount,\n totalCount: this.totalCount,\n }));\n }\n private getErrorCount() {\n return this.elementInfos.filter(info => info.hasError).length;\n }\n private hasLoading() {\n return this.elementInfos.some(info => info.hasLoading);\n }\n}\n\nexport default ImReadyManager;\n","/*\negjs-imready\nCopyright (c) 2020-present NAVER Corp.\nMIT license\n*/\nimport { IS_IE } from \"../consts\";\nimport Loader from \"./Loader\";\n\nexport default class ImageLoader extends Loader<HTMLImageElement> {\n public static EVENTS = [\"load\", \"error\"];\n public checkElement() {\n const element = this.element;\n const src = element.getAttribute(\"src\");\n\n if (element.complete) {\n if (src) {\n // complete\n if (!element.naturalWidth) {\n this.onAlreadyError(element);\n }\n return false;\n } else {\n // Using an external lazy loading module\n this.onAlreadyPreReady();\n }\n }\n this.addEvents();\n IS_IE && element.setAttribute(\"src\", src!);\n return true;\n }\n}\n","/*\negjs-imready\nCopyright (c) 2020-present NAVER Corp.\nMIT license\n*/\nimport Loader from \"./Loader\";\n\nexport default class VideoLoader extends Loader<HTMLVideoElement> {\n public static EVENTS = [\"loadedmetadata\", \"error\"];\n public checkElement() {\n const element = this.element;\n // HAVE_NOTHING: 0, no information whether or not the audio/video is ready\n // HAVE_METADATA: 1, HAVE_METADATA - metadata for the audio/video is ready\n // HAVE_CURRENT_DATA: 2, data for the current playback position is available, but not enough data to play next frame/millisecond\n // HAVE_FUTURE_DATA: 3, data for the current and at least the next frame is available\n // HAVE_ENOUGH_DATA: 4, enough data available to start playing\n if (element.readyState >= 1) {\n return false;\n }\n if (element.error) {\n this.onAlreadyError(element);\n return false;\n }\n this.addEvents();\n return true;\n }\n}\n","/*\negjs-imready\nCopyright (c) 2020-present NAVER Corp.\nMIT license\n*/\nimport ImReadyManager from \"./ImReadyManager\";\nimport ImageLoader from \"./loaders/ImageLoader\";\nimport VideoLoader from \"./loaders/VideoLoader\";\nimport { ImReadyOptions } from \"./types\";\n\nclass ImReady extends ImReadyManager {\n constructor(options: Partial<ImReadyOptions> = {}) {\n super({\n loaders: {\n img: ImageLoader,\n video: VideoLoader,\n },\n ...options,\n });\n }\n}\n\nexport default ImReady;\n","import {\n reactive,\n ReactiveSetupAdapter,\n ReactiveObject,\n Ref,\n isString,\n} from \"@cfcs/core\";\nimport { EVENTS } from \"./consts\";\nimport ImReady from \"./ImReady\";\nimport {\n ImReadyEvents,\n ImReadyReactiveProps,\n ImReadyReactiveState,\n} from \"./types\";\nimport { toArray } from \"./utils\";\n\n\nexport type ReactiveImReady = ReactiveObject<{\n preReadyCount: number;\n readyCount: number;\n errorCount: number;\n totalErrorCount: number;\n totalCount: number;\n isPreReady: boolean;\n isReady: boolean;\n hasError: boolean;\n isPreReadyOver: boolean;\n add(element: HTMLElement): void;\n}>;\n\nexport const REACTIVE_IMREADY: ReactiveSetupAdapter<\n ReactiveImReady,\n ImReadyReactiveState,\n \"add\",\n Partial<ImReadyReactiveProps>,\n ImReadyEvents\n> = ({ setEvents, setMethods, on, onInit, onDestroy, getProps }) => {\n setEvents(EVENTS);\n setMethods([\"add\"]);\n const children: Array<HTMLElement | Ref<HTMLElement> | string> = [];\n const reactiveImReady = reactive({\n preReadyCount: 0,\n readyCount: 0,\n errorCount: 0,\n totalErrorCount: 0,\n totalCount: 0,\n isPreReady: false,\n isReady: false,\n hasError: false,\n isPreReadyOver: false,\n add(element: HTMLElement | Ref<HTMLElement> | string) {\n children.push(element);\n },\n });\n const props = getProps() || {};\n const imReady = new ImReady(props);\n\n imReady\n .on(\"error\", (e) => {\n reactiveImReady.hasError = true;\n reactiveImReady.errorCount = e.errorCount;\n reactiveImReady.totalErrorCount = e.totalErrorCount;\n })\n .on(\"preReadyElement\", (e) => {\n reactiveImReady.preReadyCount = e.preReadyCount;\n })\n .on(\"readyElement\", (e) => {\n reactiveImReady.readyCount = e.readyCount;\n reactiveImReady.isPreReadyOver = e.isPreReadyOver;\n })\n .on(\"preReady\", () => {\n reactiveImReady.isPreReady = true;\n })\n .on(\"ready\", () => {\n reactiveImReady.isReady = true;\n });\n\n on((_, name, callback) => {\n imReady.on(name, callback);\n\n return () => {\n imReady.off(name, callback);\n };\n });\n onInit(() => {\n const selector = props?.selector;\n let checkedElements: HTMLElement[] = [];\n\n children.forEach((child) => {\n if (!child) {\n return;\n }\n if (isString(child)) {\n checkedElements = [\n ...checkedElements,\n ...toArray(document.querySelectorAll<HTMLElement>(child)),\n ];\n } else if (child instanceof Element) {\n checkedElements.push(child);\n } else if (\"value\" in child || \"current\" in child) {\n const element = child.value || child.current;\n\n if (element) {\n checkedElements.push(element);\n }\n }\n });\n\n if (selector) {\n checkedElements = checkedElements.reduce((prev, cur) => {\n return [\n ...prev,\n ...[].slice.call(cur.querySelectorAll<HTMLElement>(selector)),\n ];\n }, [] as HTMLElement[]);\n }\n\n reactiveImReady.totalCount = checkedElements.length;\n imReady.check(checkedElements);\n });\n onDestroy(() => {\n imReady.destroy();\n });\n\n return reactiveImReady;\n};\n","/*\negjs-imready\nCopyright (c) 2020-present NAVER Corp.\nMIT license\n*/\nimport ImReady from \"./ImReady\";\nimport Manager from \"./ImReadyManager\";\nimport Loader from \"./loaders/Loader\";\nimport ImageLoader from \"./loaders/ImageLoader\";\nimport VideoLoader from \"./loaders/VideoLoader\";\n\nexport default ImReady;\nexport {\n Manager,\n VideoLoader,\n ImageLoader,\n Loader,\n};\nexport {\n EVENTS,\n PROPS,\n} from \"./consts\";\nexport * from \"./types\";\nexport * from \"./reactive\";\n"],"names":["isWindow","window","ua","navigator","userAgent","SUPPORT_COMPUTEDSTYLE","IS_IE","test","SUPPORT_ADDEVENTLISTENER","document","WIDTH","HEIGHT","PROPS","EVENTS","getAttribute","el","name","toArray","arr","slice","call","hasSizeAttribute","target","prefix","hasLoadingAttribute","hasSkipAttribute","addEvent","element","type","handler","addEventListener","attachEvent","removeEvent","removeEventListener","detachEvent","innerWidth","getSize","innerHeight","getStyles","getComputedStyle","currentStyle","size","parseFloat","toLowerCase","getContentElements","tags","skipElements","querySelectorAll","__spreadArrays","map","tag","join","filter","indexOf","elements","addAutoSizer","length","resizeAllAutoSizers","__PREFIX__","push","resize","removeAutoSizer","index","fixed","style","splice","elementPrefix","dataWidth","parseInt","dataHeight","forEach","__extends","options","_super","_this","e","clear","onError","hasLoading","checkElement","withPreReady","hasDataSize","onReady","isSkip","onAlreadyReady","onAlreadyPreReady","constructor","onCheck","off","trigger","isPreReady","isReady","setTimeout","onPreReady","Loader","Component","ElementLoader","loaders","elementInfos","loader","getLoader","check","on","info","checkPreReady","onPreReadyElement","_a","checkReady","onReadyElement","hasError","totalCount","every","totalErrorCount","isPreReadyOver","preReadyCount","readyCount","destroy","tagName","Object","keys","children","setHasLoading","some","childrenImReady","clone","contentElements","ImReadyManager","ComponentEvent","errorCount","getErrorCount","src","complete","naturalWidth","onAlreadyError","addEvents","setAttribute","ImageLoader","readyState","error","VideoLoader","img","video","REACTIVE_IMREADY","setEvents","setMethods","onInit","onDestroy","getProps","reactiveImReady","reactive","add","props","imReady","ImReady","_","callback","selector","checkedElements","child","isString","Element","value","current","reduce","prev","cur"],"mappings":"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