UNPKG

50.7 kBSource Map (JSON)View Raw
1{"version":3,"file":"imready.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/index.ts","../src/index.umd.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","/*\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): target is HTMLImageElement {\n return (\"loading\" in target) && (target as HTMLImageElement).getAttribute(\"loading\") === \"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);\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 // 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 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.isReady && 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 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)));\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 * @param {HTMLElement} [e.element] - The element with error images.<ko>오류난 이미지가 있는 엘리먼트</ko>\n * @param {number} [e.index] - The item's index with error images. <ko>오류난 이미지가 있는 엘리먼트의 인덱스</ko>\n * @param {HTMLElement} [e.target] - Error image target in element <ko>엘리먼트의 오류난 이미지 타겟</ko>\n * @param {number} [e.errorCount] - The number of elements with errors <ko>에러가 있는 엘리먼트들의 개수</ko>\n * @param {number} [e.totalErrorCount] - The total number of targets with errors <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(\"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 * @param {HTMLElement} [e.element] - The pre-ready element.<ko>사전 준비된 엘리먼트</ko>\n * @param {number} [e.index] - The index of the pre-ready element. <ko>사전 준비된 엘리먼트의 인덱스</ko>\n * @param {number} [e.preReadyCount] - Number of elements pre-ready <ko>사전 준비된 엘리먼트들의 개수</ko>\n * @param {number} [e.readyCount] - Number of elements ready <ko>준비된 엘리먼트들의 개수</ko>\n * @param {number} [e.totalCount] - Total number of elements <ko>엘리먼트들의 총 개수</ko>\n * @param {boolean} [e.isPreReady] - Whether all elements are pre-ready <ko>모든 엘리먼트가 사전 준비가 끝났는지 여부</ko>\n * @param {boolean} [e.isReady] - Whether all elements are ready <ko>모든 엘리먼트가 준비가 끝났는지 여부</ko>\n * @param {boolean} [e.hasLoading] - Whether the loading attribute has been applied <ko>loading 속성이 적용되었는지 여부</ko>\n * @param {boolean} [e.isSkip] - Whether the check is omitted due to skip attribute <ko>skip 속성으로 인하여 체크가 생략됐는지 여부</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(\"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 * @param {number} [e.readyCount] - Number of elements ready <ko>준비된 엘리먼트들의 개수</ko>\n * @param {number} [e.totalCount] - Total number of elements <ko>엘리먼트들의 총 개수</ko>\n * @param {boolean} [e.isReady] - Whether all elements are ready <ko>모든 엘리먼트가 준비가 끝났는지 여부</ko>\n * @param {boolean} [e.hasLoading] - Whether the loading attribute has been applied <ko>loading 속성이 적용되었는지 여부</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(\"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 * @param {HTMLElement} [e.element] - The ready element.<ko>준비된 엘리먼트</ko>\n * @param {number} [e.index] - The index of the ready element. <ko>준비된 엘리먼트의 인덱스</ko>\n * @param {boolean} [e.hasError] - Whether there is an error in the element <ko>해당 엘리먼트에 에러가 있는지 여부</ko>\n * @param {number} [e.errorCount] - The number of elements with errors <ko>에러가 있는 엘리먼트들의 개수</ko>\n * @param {number} [e.totalErrorCount] - The total number of targets with errors <ko>에러가 있는 타겟들의 총 개수</ko>\n * @param {number} [e.preReadyCount] - Number of elements pre-ready <ko>사전 준비된 엘리먼트들의 개수</ko>\n * @param {number} [e.readyCount] - Number of elements ready <ko>준비된 엘리먼트들의 개수</ko>\n * @param {number} [e.totalCount] - Total number of elements <ko>엘리먼트들의 총 개수</ko>\n * @param {boolean} [e.isPreReady] - Whether all elements are pre-ready <ko>모든 엘리먼트가 사전 준비가 끝났는지 여부</ko>\n * @param {boolean} [e.isReady] - Whether all elements are ready <ko>모든 엘리먼트가 준비가 끝났는지 여부</ko>\n * @param {boolean} [e.hasLoading] - Whether the loading attribute has been applied <ko>loading 속성이 적용되었는지 여부</ko>\n * @param {boolean} [e.isPreReadyOver] - Whether pre-ready is over <ko>사전 준비가 끝났는지 여부</ko>\n * @param {boolean} [e.isSkip] - Whether the check is omitted due to skip attribute <ko>skip 속성으로 인하여 체크가 생략됐는지 여부</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(\"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 * @param {number} [e.errorCount] - The number of elements with errors <ko>에러가 있는 엘리먼트들의 개수</ko>\n * @param {number} [e.totalErrorCount] - The total number of targets with errors <ko>에러가 있는 타겟들의 총 개수</ko>\n * @param {number} [e.totalCount] - Total number of elements <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(\"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","/*\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 * from \"./types\";\n","/*\negjs-imready\nCopyright (c) 2020-present NAVER Corp.\nMIT license\n*/\nimport ImReady, * as modules from \"./index\";\n\nfor (const name in modules) {\n (ImReady as any)[name] = (modules as any)[name];\n}\n\nexport default ImReady;\n"],"names":["isWindow","window","ua","navigator","userAgent","SUPPORT_COMPUTEDSTYLE","IS_IE","test","SUPPORT_ADDEVENTLISTENER","document","WIDTH","HEIGHT","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","withPreReady","hasDataSize","hasLoading","onReady","isSkip","checkElement","onAlreadyReady","onAlreadyPreReady","constructor","EVENTS","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","errorCount","getErrorCount","src","complete","naturalWidth","onAlreadyError","addEvents","setAttribute","ImageLoader","readyState","error","VideoLoader","img","video","modules","ImReady"],"mappings":"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"}
\No newline at end of file