@iframe-resizer/core 5.5.9 → 6.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.umd.js","sources":["../../packages/common/consts.ts","../../packages/common/utils.ts","../../packages/common/deprecate.ts","../../packages/common/format-advise.ts","../../packages/core/values/settings.ts","../../packages/core/console.ts","../../packages/core/values/defaults.ts","../../packages/core/checks/id.ts","../../packages/core/checks/manual-logging.ts","../../packages/common/listeners.ts","../../packages/core/send/trigger.ts","../../packages/core/events/visible.ts","../../packages/core/received/decode.ts","../../packages/core/received/preflight.ts","../../packages/core/checks/origin.ts","../../packages/core/checks/version.ts","../../packages/core/events/wrapper.ts","../../packages/core/events/message.ts","../../packages/core/received/message.ts","../../packages/core/events/mouse.ts","../../packages/core/values/page.ts","../../packages/core/page/position.ts","../../packages/core/events/size.ts","../../packages/core/events/resize.ts","../../packages/core/methods/disconnect.ts","../../packages/core/methods/close.ts","../../packages/core/methods/reset.ts","../../packages/core/monitor/common.ts","../../packages/core/monitor/page-info.ts","../../packages/core/monitor/props.ts","../../packages/core/page/scroll.ts","../../packages/core/page/in-page-link.ts","../../packages/core/page/title.ts","../../packages/common/mode.ts","../../packages/core/checks/mode.ts","../../packages/core/setup/first-run.ts","../../packages/core/router.ts","../../packages/core/send/ready.ts","../../packages/core/listeners.ts","../../packages/core/checks/unique.ts","../../packages/core/methods/attach.ts","../../packages/core/send/outgoing.ts","../../packages/core/setup/body-margin.ts","../../packages/core/send/timeout.ts","../../packages/core/setup/init.ts","../../packages/core/checks/options.ts","../../packages/core/checks/warning-timeout.ts","../../packages/core/send/offset.ts","../../packages/core/setup/direction.ts","../../packages/core/setup/target-origin.ts","../../packages/core/setup/update-option-names.ts","../../packages/core/setup/process-options.ts","../../packages/core/setup/scrolling.ts","../../packages/core/setup/index.ts","../../packages/core/setup/logging.ts","../../packages/core/index.ts"],"sourcesContent":["export const VERSION = '[VI]{version}[/VI]'\nexport const LABEL = 'iframeResizer'\nexport const SEPARATOR = ':'\nexport const CHILD_READY_MESSAGE = '[iFrameResizerChild]Ready'\n\nexport const AUTO_RESIZE = 'autoResize'\nexport const BEFORE_UNLOAD = 'beforeUnload'\nexport const CLOSE = 'close'\nexport const IN_PAGE_LINK = 'inPageLink'\nexport const INIT = 'init'\nexport const INIT_FROM_IFRAME = 'iframeReady'\nexport const LAZY = 'lazy'\nexport const LOAD = 'load'\nexport const MESSAGE = 'message'\nexport const MOUSE_ENTER = 'mouseenter'\nexport const MOUSE_LEAVE = 'mouseleave'\nexport const ONLOAD = 'onload'\nexport const PAGE_HIDE = 'pageHide'\nexport const PAGE_INFO = 'pageInfo'\nexport const PARENT_INFO = 'parentInfo'\nexport const PAGE_INFO_STOP = 'pageInfoStop'\nexport const PARENT_INFO_STOP = 'parentInfoStop'\nexport const RESET = 'reset'\nexport const RESIZE = 'resize'\nexport const SCROLL_BY = 'scrollBy'\nexport const SCROLL_TO = 'scrollTo'\nexport const SCROLL_TO_OFFSET = 'scrollToOffset'\nexport const TITLE = 'title'\n\nexport const BASE = 10\nexport const SINGLE = 1\nexport const MIN_SIZE = 1\n\nexport const SIZE_ATTR = 'data-iframe-size'\nexport const OVERFLOW_ATTR = 'data-iframe-overflowed'\nexport const IGNORE_ATTR = 'data-iframe-ignore'\n\nexport const HEIGHT = 'height'\nexport const WIDTH = 'width'\nexport const OFFSET = 'offset'\nexport const OFFSET_HEIGHT = 'offsetHeight'\nexport const OFFSET_SIZE = 'offsetSize'\nexport const SCROLL = 'scroll'\nexport const NEW_LINE = '\\n'\n\nexport const HIDDEN = 'hidden'\nexport const VISIBLE = 'visible'\n\nexport const CHILD = 'child'\nexport const PARENT = 'parent'\n\nexport const STRING = 'string'\nexport const NUMBER = 'number'\nexport const BOOLEAN = 'boolean'\nexport const OBJECT = 'object'\nexport const FUNCTION = 'function'\nexport const SYMBOL = 'symbol'\nexport const UNDEFINED = 'undefined'\n\nexport const TRUE = 'true'\nexport const FALSE = 'false'\n\nexport const NULL = 'null'\nexport const AUTO = 'auto'\n\nexport const READY_STATE_CHANGE = 'readystatechange'\n\nexport const HEIGHT_EDGE = 'bottom'\nexport const WIDTH_EDGE = 'right'\n\nexport const ENABLE = 'autoResizeEnabled'\nexport const SIZE_CHANGE_DETECTED = Symbol('sizeChanged')\nexport const MANUAL_RESIZE_REQUEST = 'manualResize'\nexport const PARENT_RESIZE_REQUEST = 'parentResize'\nexport const IGNORE_DISABLE_RESIZE = {\n [MANUAL_RESIZE_REQUEST]: 1,\n [PARENT_RESIZE_REQUEST]: 1,\n}\n\nexport const SET_OFFSET_SIZE = 'setOffsetSize'\n\nexport const RESIZE_OBSERVER = 'resizeObserver'\nexport const OVERFLOW_OBSERVER = 'overflowObserver'\nexport const MUTATION_OBSERVER = 'mutationObserver'\nexport const VISIBILITY_OBSERVER = 'visibilityObserver'\n\nexport const BOLD = 'font-weight: bold;'\nexport const NORMAL = 'font-weight: normal;'\nexport const ITALIC = 'font-style: italic;'\nexport const BLUE = 'color: #135CD2;'\nexport const BLUE_LIGHT = 'color: #A9C7FB;'\nexport const BLACK = 'color: black;'\nexport const WHITE = 'color: #E3E3E3;'\n\nexport const NONE = 'none'\nexport const BOTH = 'both'\nexport const VERTICAL = 'vertical'\nexport const HORIZONTAL = 'horizontal'\n\nexport const NO_CHANGE = 'No change in content size detected'\n\nexport const MESSAGE_HEADER_LENGTH = MESSAGE.length\nexport const MESSAGE_ID = '[iFrameSizer]' // Must match iframe msg ID\nexport const MESSAGE_ID_LENGTH = MESSAGE_ID.length\nexport const RESET_REQUIRED_METHODS = Object.freeze({\n max: 1,\n scroll: 1,\n bodyScroll: 1,\n documentElementScroll: 1,\n})\n\nexport const INIT_EVENTS = Object.freeze({\n [ONLOAD]: 1,\n [INIT]: 1,\n [INIT_FROM_IFRAME]: 1,\n})\n\nexport const EXPAND = 'expanded'\nexport const COLLAPSE = 'collapsed'\n\nexport const HEIGHT_CALC_MODE_DEFAULT = AUTO\nexport const WIDTH_CALC_MODE_DEFAULT = SCROLL\n\nexport const EVENT_CANCEL_TIMER = 128\n\nexport const LOG_OPTIONS = Object.freeze({\n [EXPAND]: 1,\n [COLLAPSE]: 1,\n})\n\nexport const IGNORE_TAGS = new Set([\n 'head',\n 'body',\n 'meta',\n 'base',\n 'title',\n 'script',\n 'link',\n 'style',\n 'map',\n 'area',\n 'option',\n 'optgroup',\n 'template',\n 'track',\n 'wbr',\n 'nobr',\n])\n\nexport const REMOVED_NEXT_VERSION =\n 'Use of the old name will be removed in a future version of <i>iframe-resizer</>.'\n","import { OBJECT, STRING } from './consts'\n\nexport const isElement = (node: Node): boolean => node.nodeType === Node.ELEMENT_NODE\nexport const isNumber = (value: unknown): value is number =>\n typeof value === 'number' && !Number.isNaN(value)\nexport const isObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === OBJECT && value !== null\nexport const isString = (value: unknown): value is string => typeof value === STRING\n\nexport const isSafari: boolean = /^((?!chrome|android).)*safari/i.test(\n navigator.userAgent,\n)\n\nexport function isIframe(element: unknown): element is HTMLIFrameElement {\n if (!isObject(element)) return false\n\n try {\n return (element as unknown as HTMLElement).tagName === 'IFRAME' || element instanceof HTMLIFrameElement\n } catch (error) {\n return false\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnyFunction = (...args: any[]) => any\n\nexport const isolateUserCode = (func: AnyFunction, ...val: unknown[]): ReturnType<typeof setTimeout> =>\n setTimeout(() => func(...val), 0)\n\nexport const once = <T extends AnyFunction>(fn: T): T => {\n let done = false\n\n return function (this: unknown, ...args: unknown[]) {\n return done\n ? undefined\n : ((done = true), fn.apply(this, args))\n } as unknown as T\n}\n\nconst hasOwnFallback = (o: object, k: PropertyKey): boolean =>\n Object.prototype.hasOwnProperty.call(o, k)\n\nexport const hasOwn = (o: object, k: PropertyKey): boolean =>\n Object.hasOwn ? Object.hasOwn(o, k) : hasOwnFallback(o, k)\n\nexport const isDarkModeEnabled = (): boolean =>\n window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches\n\nexport const id = <T>(x: T): T => x\n\nconst ROUNDING = 1000\n\nexport const round = (value: number): number => Math.round(value * ROUNDING) / ROUNDING\n\nexport const capitalizeFirstLetter = (string: string): string =>\n string.charAt(0).toUpperCase() + string.slice(1)\n\nexport const isDef = (value: unknown): boolean => `${value}` !== '' && value !== undefined\n\nexport const invoke = <T>(fn: () => T): T => fn()\n\nexport const lower = (str: string): string => str.toLowerCase()\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getElementName(el: any): string {\n switch (true) {\n case !isDef(el):\n return ''\n\n case isDef(el.id):\n return `${el.nodeName}#${el.id}`\n\n case isDef(el.name):\n return `${el.nodeName} (${el.name}`\n\n case isDef(el.className):\n return `${el.nodeName}.${el.className}`\n\n default:\n return el.nodeName\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const esModuleInterop = <T = any>(mod: any): T =>\n // eslint-disable-next-line no-underscore-dangle\n mod?.__esModule ? mod.default : mod\n\nexport const typeAssert = (value: unknown, type: string, error: string): void => {\n // eslint-disable-next-line valid-typeof\n if (typeof value !== type) {\n throw new TypeError(`${error} is not a ${capitalizeFirstLetter(type)}`)\n }\n}\n","type AdviseFn = (iframeId: string, message: string) => void\n\nexport default (advise: AdviseFn) =>\n (type: string, change = 'renamed to') =>\n (old: string, replacement: string, info = '', iframeId = ''): void =>\n advise(\n iframeId,\n `<rb>Deprecated ${type}(${old.replace('()', '')})</>\\n\\nThe <b>${old}</> ${type.toLowerCase()} has been ${change} <b>${replacement}</>. ${info}Use of the old ${type.toLowerCase()} will be removed in a future version of <i>iframe-resizer</>.`,\n )\n","/* eslint-disable no-useless-escape */\n/* eslint-disable security/detect-non-literal-regexp */\n\nimport { NEW_LINE } from './consts'\nimport { isString } from './utils'\n\nconst TAGS = {\n br: '\\n',\n rb: '\\u001B[31;1m', // red bold\n bb: '\\u001B[34;1m', // blue bold\n b: '\\u001B[1m', // bold\n i: '\\u001B[3m', // italic\n u: '\\u001B[4m', // underline\n '/': '\\u001B[m', // reset\n}\n\nconst keys = Object.keys(TAGS)\nconst tags = new RegExp(`<(${keys.join('|')})>`, 'gi')\nconst lookup = (_: string, tag: string): string => TAGS[tag as keyof typeof TAGS] ?? ''\nconst encode = (s: string): string => s.replace(tags, lookup)\n\nconst filter = (s: string): string =>\n s.replaceAll('<br>', NEW_LINE).replaceAll(/<\\/?[^>]+>/gi, '')\n\ntype FormatLogMessageFn = (message: unknown) => void\n\nexport default (formatLogMessage: FormatLogMessageFn) => (message: unknown): void =>\n formatLogMessage(\n isString(message)\n ? window.chrome\n ? encode(message)\n : filter(message)\n : message,\n )\n\n/* eslint-enable security/detect-non-literal-regexp */\n/* eslint-enable no-useless-escape */\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst settings: Record<string, any> = {}\n\nexport default settings\n","import acg, { NORMAL } from 'auto-console-group'\n\nimport { BOLD, LABEL, PARENT } from '../common/consts'\nimport deprecate from '../common/deprecate'\nimport createFormatAdvise from '../common/format-advise'\nimport { esModuleInterop, id as identity } from '../common/utils'\nimport settings from './values/settings'\n\n// Deal with UMD not converting default exports to named exports\nconst createConsoleGroup = esModuleInterop(acg)\n\nlet consoleEnabled = true\n\nconst parent = createConsoleGroup({\n expand: false,\n label: PARENT,\n})\n\nconst getMyId = (iframeId: string): string =>\n window.top === window.self\n ? `parent(${iframeId})`\n : `nested parent(${iframeId})`\n\nconst isLogEnabled = (iframeId: string): boolean =>\n settings[iframeId] ? settings[iframeId].log : consoleEnabled\n\nexport function setupConsole({ enabled, expand, iframeId }: { enabled: boolean, expand: boolean, iframeId: string }): void {\n const consoleGroup = createConsoleGroup({\n expand,\n label: getMyId(iframeId),\n })\n\n consoleEnabled = enabled\n\n if (!settings[iframeId])\n settings[iframeId] = {\n console: consoleGroup,\n }\n}\n\nconst output =\n (type: string) =>\n (iframeId: string, ...args: any[]): any =>\n settings[iframeId]\n ? settings[iframeId].console[type](...args)\n : parent[type](...args)\n\nexport const outputSwitched =\n (type: string) =>\n (iframeId: string, ...args: any[]): any =>\n isLogEnabled(iframeId) === true ? output(type)(iframeId, ...args) : null\n\nexport const log = outputSwitched('log')\nexport const info = log // outputSwitched('info')\nexport const debug = outputSwitched('debug')\nexport const assert = output('assert')\nexport const warn = output('warn')\nexport const error = output('error')\nexport const event = output('event')\nexport const purge = output('purge')\nexport const endAutoGroup = output('endAutoGroup')\nexport const errorBoundary = output('errorBoundary')\n\nexport function vInfo(ver: string, mode: number): void {\n queueMicrotask(() =>\n // eslint-disable-next-line no-console\n console.info(\n `%ciframe-resizer ${ver}`,\n consoleEnabled || mode < 1 ? BOLD : NORMAL,\n ),\n )\n}\n\nconst formatLogMsg =\n (iframeId: string) =>\n (...args: any[]): string =>\n [`${LABEL}(${iframeId})`, ...args].join(' ')\n\nconst formatAdvise = createFormatAdvise(identity)\nexport const advise = (iframeId: string, ...args: any[]): void =>\n settings[iframeId]\n ? settings[iframeId].console.warn(...args.map(formatAdvise))\n : queueMicrotask(() => {\n const localFormatAdvise = createFormatAdvise(formatLogMsg(iframeId))\n // eslint-disable-next-line no-console\n console?.warn(...args.map(localFormatAdvise))\n })\n\nconst deprecateAdvise = deprecate(advise)\nexport const deprecateFunction = deprecateAdvise('Function')\nexport const deprecateMethod = deprecateAdvise('Method')\nexport const deprecateOption = deprecateAdvise('Option')\n","import { AUTO, FUNCTION, VERTICAL } from '../../common/consts'\nimport { deprecateOption } from '../console'\nimport settings from './settings'\n\nconst onReadyDeprecated = (messageData: { id: string, iframe: HTMLIFrameElement }): void => {\n if (typeof settings[messageData.id].onInit === FUNCTION) {\n deprecateOption('init()', 'onReady()', '', messageData.id)\n settings[messageData.id].onInit(messageData)\n }\n}\n\nexport default Object.freeze({\n autoResize: true,\n bodyBackground: null,\n bodyMargin: null,\n bodyPadding: null,\n checkOrigin: true,\n direction: VERTICAL,\n firstRun: true,\n inPageLinks: false,\n heightCalculationMethod: AUTO,\n id: 'iFrameResizer', // TODO: v6 change to 'iframeResizer'\n log: false,\n logExpand: false,\n license: undefined,\n mouseEvents: true,\n offsetHeight: null,\n offsetWidth: null,\n postMessageTarget: null,\n sameDomain: false,\n scrolling: false,\n sizeHeight: true,\n // sizeSelector: '',\n sizeWidth: false,\n tolerance: 0,\n waitForLoad: false,\n warningTimeout: 5000,\n widthCalculationMethod: AUTO,\n\n onBeforeClose: () => true,\n onAfterClose() {},\n onInit: false,\n onMessage: null,\n onMouseEnter() {},\n onMouseLeave() {},\n onReady: onReadyDeprecated,\n onResized() {},\n onScroll: () => true,\n})\n","import { isString } from '../../common/utils'\nimport { event as consoleEvent, log } from '../console'\nimport defaults from '../values/defaults'\n\nlet count = 0\n\nfunction newId(options: Record<string, any>): string {\n const id = options?.id || defaults.id + count++\n return document.getElementById(id) === null ? id : `${id}${count++}`\n}\n\nexport default function ensureHasId(iframe: HTMLIFrameElement, options: Record<string, any>): string {\n let { id } = iframe\n\n if (id && !isString(id)) {\n throw new TypeError('Invalid id for iFrame. Expected String')\n }\n\n if (!id || id === '') {\n id = newId(options)\n iframe.id = id\n consoleEvent(id, 'assignId')\n log(id, `Added missing iframe ID: ${id} (${iframe.src})`)\n }\n\n return id\n}\n","import { COLLAPSE } from '../../common/consts'\n\nexport default function (options: Record<string, any>): void {\n const { search } = window.location\n\n if (search.includes('ifrlog')) {\n options.log = COLLAPSE\n options.logExpand = search.includes('ifrlog=expanded')\n }\n}\n","export const addEventListener = (\n el: EventTarget,\n evt: string,\n func: EventListenerOrEventListenerObject,\n options?: AddEventListenerOptions | boolean,\n): void => el.addEventListener(evt, func, options || false)\n\nexport const removeEventListener = (\n el: EventTarget,\n evt: string,\n func: EventListenerOrEventListenerObject,\n): void => el.removeEventListener(evt, func, false)\n","import { FOREGROUND, HIGHLIGHT } from 'auto-console-group'\n\nimport { INIT_EVENTS, MESSAGE_ID, SEPARATOR } from '../../common/consts'\nimport { event as consoleEvent, info, log, warn } from '../console'\nimport settings from '../values/settings'\n\nconst filterMsg = (msg: string): string =>\n msg\n .split(SEPARATOR)\n .filter((_, index) => index !== 19)\n .join(SEPARATOR)\n\nfunction dispatch(calleeMsg: string, msg: string, id: string): void {\n function logSent(route: string): void {\n const displayMsg = calleeMsg in INIT_EVENTS ? filterMsg(msg) : msg\n info(id, route, HIGHLIGHT, FOREGROUND, HIGHLIGHT)\n info(id, `Message data: %c${displayMsg}`, HIGHLIGHT)\n }\n\n const { iframe, postMessageTarget, sameOrigin, targetOrigin } = settings[id]\n\n if (sameOrigin) {\n try {\n iframe.contentWindow.iframeChildListener(MESSAGE_ID + msg)\n logSent(`Sending message to iframe %c${id}%c via same origin%c`)\n return\n } catch (error) {\n if (calleeMsg in INIT_EVENTS) {\n settings[id].sameOrigin = false\n log(id, 'New iframe does not support same origin')\n } else {\n warn(id, 'Same origin messaging failed, falling back to postMessage')\n }\n }\n }\n\n logSent(\n `Sending message to iframe: %c${id}%c targetOrigin: %c${targetOrigin}`,\n )\n\n postMessageTarget.postMessage(MESSAGE_ID + msg, targetOrigin)\n}\n\nfunction trigger(calleeMsg: string, msg: string, id: string): void {\n consoleEvent(id, calleeMsg)\n\n if (!settings[id]?.postMessageTarget) {\n warn(id, `Iframe not found`)\n return\n }\n\n dispatch(calleeMsg, msg, id)\n}\n\nexport default trigger\n","import { RESIZE } from '../../common/consts'\nimport trigger from '../send/trigger'\nimport settings from '../values/settings'\n\nconst sendTriggerMsg = (eventName: string, event: string): void =>\n Object.values(settings)\n .filter(({ autoResize, firstRun }) => autoResize && !firstRun)\n .forEach(({ iframe }) => trigger(eventName, event, iframe.id))\n\nexport default function tabVisible(): void {\n if (document.hidden === true) return\n sendTriggerMsg('tabVisible', RESIZE)\n}\n","import { MESSAGE_ID_LENGTH } from '../../common/consts'\nimport type { MessageData } from '../types'\nimport settings from '../values/settings'\n\nexport function getPaddingEnds(compStyle: CSSStyleDeclaration): number {\n if (compStyle.boxSizing !== 'border-box') return 0\n\n const top = compStyle.paddingTop ? parseInt(compStyle.paddingTop, 10) : 0\n const bot = compStyle.paddingBottom\n ? parseInt(compStyle.paddingBottom, 10)\n : 0\n\n return top + bot\n}\n\nexport function getBorderEnds(compStyle: CSSStyleDeclaration): number {\n if (compStyle.boxSizing !== 'border-box') return 0\n\n const top = compStyle.borderTopWidth\n ? parseInt(compStyle.borderTopWidth, 10)\n : 0\n\n const bot = compStyle.borderBottomWidth\n ? parseInt(compStyle.borderBottomWidth, 10)\n : 0\n\n return top + bot\n}\n\nexport default function decodeMessage(msg: string): MessageData {\n const data = msg.slice(MESSAGE_ID_LENGTH).split(':')\n const height = data[1] ? Number(data[1]) : 0\n const iframe = settings[data[0]]?.iframe\n const compStyle = getComputedStyle(iframe)\n\n const messageData: MessageData = {\n iframe,\n id: data[0],\n height: height + getPaddingEnds(compStyle) + getBorderEnds(compStyle),\n width: Number(data[2]),\n type: data[3],\n msg: data[4],\n message: data[4],\n }\n\n // eslint-disable-next-line prefer-destructuring\n if (data[5]) messageData.mode = data[5]\n\n return messageData\n}\n","import { HIGHLIGHT } from 'auto-console-group'\n\nimport { MESSAGE_ID, MESSAGE_ID_LENGTH } from '../../common/consts'\nimport { isIframe } from '../../common/utils'\nimport { log, warn } from '../console'\nimport type { MessageData } from '../types'\nimport settings from '../values/settings'\n\nconst ABOVE_TYPES: Record<string, number> = { true: 1, false: 1, undefined: 1 }\n\nexport function checkIframeExists(messageData: MessageData): boolean {\n const { id, msg, iframe } = messageData\n const detectedIframe = isIframe(iframe)\n\n if (!detectedIframe) {\n log(id, `Received: %c${msg}`, HIGHLIGHT)\n warn(id, `The target iframe was not found.`)\n }\n\n return detectedIframe\n}\n\nexport function isMessageFromIframe(messageData: MessageData, event: MessageEvent | { data: any, origin?: string, sameOrigin?: boolean }): boolean {\n function checkAllowedOrigin(): boolean {\n function checkList(): boolean {\n log(\n id,\n `Checking connection is from allowed list of origins: %c${checkOrigin}`,\n HIGHLIGHT,\n )\n\n for (const element of checkOrigin) {\n if (element === origin) {\n return true\n }\n }\n\n return false\n }\n\n function checkSingle(): boolean {\n const remoteHost = settings[id]?.remoteHost\n log(id, `Checking connection is from: %c${remoteHost}`, HIGHLIGHT)\n return origin === remoteHost\n }\n\n return checkOrigin.constructor === Array ? checkList() : checkSingle()\n }\n\n const { id } = messageData\n const { data, origin } = event\n const sameOrigin = 'sameOrigin' in event && event.sameOrigin\n\n if (sameOrigin) return true\n\n let checkOrigin = settings[id]?.checkOrigin\n\n if (checkOrigin && `${origin}` !== 'null' && !checkAllowedOrigin()) {\n throw new Error(\n `Unexpected message received from: ${origin} for ${id}. Message was: ${data}. This error can be disabled by setting the checkOrigin: false option or by providing an array of trusted domains.`,\n )\n }\n\n return true\n}\n\nexport const isMessageForUs = (message: any): boolean =>\n MESSAGE_ID === `${message}`.slice(0, MESSAGE_ID_LENGTH) &&\n message.slice(MESSAGE_ID_LENGTH).split(':')[0] in settings\n\nexport function isMessageFromMetaParent(messageData: MessageData): boolean {\n const { id, type } = messageData\n\n // Test if this message is from a parent above us. This is an ugly test,\n // however, updating the message format would break backwards compatibility.\n const isMetaParent = type in ABOVE_TYPES\n\n if (isMetaParent) {\n log(id, 'Ignoring init message from meta parent page')\n }\n\n return isMetaParent\n}\n","import { HIGHLIGHT } from 'auto-console-group'\n\nimport { log } from '../console'\nimport settings from '../values/settings'\n\nexport default function checkSameDomain(id: string): void {\n try {\n settings[id].sameOrigin =\n !!settings[id]?.iframe?.contentWindow?.iframeChildListener\n } catch (error) {\n settings[id].sameOrigin = false\n }\n\n log(id, `sameOrigin: %c${settings[id].sameOrigin}`, HIGHLIGHT)\n}\n","import { FOREGROUND, HIGHLIGHT } from 'auto-console-group'\n\nimport { VERSION } from '../../common/consts'\nimport { advise, log } from '../console'\n\nexport default function checkVersion(id: string, version: string | undefined): void {\n if (version === VERSION) return\n if (version === undefined) {\n advise(\n id,\n `<rb>Legacy version detected in iframe</>\n\nDetected legacy version of child page script. It is recommended to update the page in the iframe to use <b>@iframe-resizer/child</>.\n\nSee <u>https://iframe-resizer.com/setup/#child-page-setup</> for more details.\n`,\n )\n return\n }\n log(\n id,\n `Version mismatch (Child: %c${version}%c !== Parent: %c${VERSION})`,\n HIGHLIGHT,\n FOREGROUND,\n HIGHLIGHT,\n )\n}\n","import { FUNCTION } from '../../common/consts'\nimport { isolateUserCode } from '../../common/utils'\nimport { warn } from '../console'\nimport settings from '../values/settings'\n\nfunction on(iframeId: string, funcName: string, val: any): any {\n if (!settings[iframeId]) return null\n\n const func = settings[iframeId][funcName]\n\n if (typeof func !== FUNCTION)\n throw new TypeError(`${funcName} on iframe[${iframeId}] is not a function`)\n\n if (funcName !== 'onBeforeClose' && funcName !== 'onScroll')\n return isolateUserCode(func, val)\n\n try {\n return func(val)\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error)\n warn(iframeId, `Error in ${funcName} callback`)\n return null\n }\n}\n\nexport default on\n","import { FOREGROUND, HIGHLIGHT } from 'auto-console-group'\n\nimport type { MessageData } from '../types'\nimport { log } from '../console'\nimport on from './wrapper'\n\n// eslint-disable-next-line import/prefer-default-export\nexport function onMessage(messageData: MessageData, messageBody: string): void {\n const { id, iframe } = messageData\n\n log(\n id,\n `onMessage passed: {iframe: %c${id}%c, message: %c${messageBody}%c}`,\n HIGHLIGHT,\n FOREGROUND,\n HIGHLIGHT,\n FOREGROUND,\n )\n\n on(id, 'onMessage', {\n iframe,\n message: JSON.parse(messageBody),\n })\n}\n","import { MESSAGE_HEADER_LENGTH, SEPARATOR } from '../../common/consts'\nimport settings from '../values/settings'\n\nexport default function getMessageBody(id: string, offset: number): string {\n const { lastMessage } = settings[id]\n return lastMessage.slice(\n lastMessage.indexOf(SEPARATOR) + MESSAGE_HEADER_LENGTH + offset,\n )\n}\n","import { SEPARATOR } from '../../common/consts'\nimport type { MessageData } from '../types'\nimport getMessageBody from '../received/message'\nimport on from './wrapper'\n\nexport default function onMouse(event: string, messageData: MessageData): void {\n const { id, iframe, height, type, width } = messageData\n let mousePos: { x: string | number; y: string | number } = { x: 0, y: 0 }\n\n if (width === 0 && height === 0) {\n const coords = getMessageBody(id, 9).split(SEPARATOR)\n mousePos = {\n x: coords[1],\n y: coords[0],\n }\n } else {\n mousePos = {\n x: width,\n y: height,\n }\n }\n\n on(id, event, {\n iframe,\n screenX: Number(mousePos.x),\n screenY: Number(mousePos.y),\n type,\n })\n}\n","import { VERSION } from '../../common/consts'\n\ninterface PageState {\n position: { x: number, y: number } | null\n version: string\n}\n\nconst page: PageState = {\n position: null,\n version: VERSION,\n}\n\nexport default page\n","import { FOREGROUND, HIGHLIGHT } from 'auto-console-group'\n\nimport { info, log } from '../console'\nimport page from '../values/page'\n\ninterface Position {\n x: number\n y: number\n}\n\nexport function unsetPagePosition(): void {\n page.position = null\n}\n\nexport const getStoredPagePosition = (): Position | null => page.position\n\nexport function setStoredPagePosition(position: Position): void {\n page.position = position\n}\n\nexport function getPagePosition(id: string): Position {\n if (page.position === null)\n page.position = {\n x: window.scrollX,\n y: window.scrollY,\n }\n\n log(\n id,\n `Get page position: %c${page.position.x}%c, %c${page.position.y}`,\n HIGHLIGHT,\n FOREGROUND,\n HIGHLIGHT,\n )\n\n return page.position\n}\n\nexport function setPagePosition(id: string): void {\n if (page.position === null) return\n\n window.scrollTo(page.position.x, page.position.y)\n\n info(\n id,\n `Set page position: %c${page.position.x}%c, %c${page.position.y}`,\n HIGHLIGHT,\n FOREGROUND,\n HIGHLIGHT,\n )\n\n unsetPagePosition()\n}\n","import { HIGHLIGHT } from 'auto-console-group'\n\nimport { HEIGHT, WIDTH } from '../../common/consts'\nimport type { MessageData } from '../types'\nimport { info } from '../console'\nimport settings from '../values/settings'\n\nfunction setDimension(dimension: string, messageData: MessageData): void {\n const { id } = messageData\n const size = `${messageData[dimension]}px`\n settings[id].iframe.style[dimension] = size\n info(id, `Set ${dimension}: %c${size}`, HIGHLIGHT)\n}\n\nexport default function setSize(messageData: MessageData): void {\n const { id } = messageData\n const { sizeHeight, sizeWidth } = settings[id]\n\n if (sizeHeight) setDimension(HEIGHT, messageData)\n if (sizeWidth) setDimension(WIDTH, messageData)\n}\n","import type { MessageData } from '../types'\nimport { setPagePosition } from '../page/position'\nimport setSize from './size'\nimport on from './wrapper'\n\nexport default function resizeIframe(messageData: MessageData): void {\n const { id } = messageData\n setSize(messageData)\n setPagePosition(id)\n on(id, 'onResized', messageData)\n}\n","import { log } from '../console'\nimport settings from '../values/settings'\n\nexport default function disconnect(iframe: HTMLIFrameElement): void {\n const { id } = iframe\n log(id, 'Disconnected from iframe')\n delete settings[id]\n delete iframe.iframeResizer\n}\n","import { HIGHLIGHT } from 'auto-console-group'\n\nimport { log, warn } from '../console'\nimport on from '../events/wrapper'\nimport disconnect from './disconnect'\n\nexport default function closeIframe(iframe: HTMLIFrameElement): void {\n const { id } = iframe\n\n if (on(id, 'onBeforeClose', id) === false) {\n log(id, 'Close iframe cancelled by onBeforeClose')\n return\n }\n\n log(id, `Removing iFrame: %c${id}`, HIGHLIGHT)\n\n try {\n // Catch race condition error with React\n if (iframe.parentNode) {\n iframe.remove()\n }\n } catch (error) {\n warn(id, error)\n }\n\n on(id, 'onAfterClose', id)\n disconnect(iframe)\n}\n","import { INIT, RESET } from '../../common/consts'\nimport type { MessageData } from '../types'\nimport { log } from '../console'\nimport setSize from '../events/size'\nimport { getPagePosition } from '../page/position'\nimport trigger from '../send/trigger'\n\nexport default function resetIframe(messageData: MessageData): void {\n const { id, type } = messageData\n\n log(\n id,\n `Size reset requested by ${type === INIT ? 'parent page' : 'child page'}`,\n )\n\n getPagePosition(id)\n setSize(messageData)\n trigger(RESET, RESET, id)\n}\n","import { LOAD, RESIZE, SCROLL } from '../../common/consts'\nimport { addEventListener, removeEventListener } from '../../common/listeners'\nimport { event, log } from '../console'\nimport trigger from '../send/trigger'\nimport settings from '../values/settings'\n\nexport const sendInfoToIframe = (type: string, infoFunction: (iframe: HTMLIFrameElement) => string) => {\n const gate: Record<string, number | null> = {}\n\n return (requestType: string, id: string): void => {\n const { iframe } = settings[id]\n\n function throttle(func: () => void, frameId: string): void {\n if (!gate[frameId]) {\n func()\n gate[frameId] = requestAnimationFrame(() => {\n gate[frameId] = null\n })\n }\n }\n\n function gatedTrigger(): void {\n trigger(`${requestType} (${type})`, `${type}:${infoFunction(iframe)}`, id)\n }\n\n throttle(gatedTrigger, id)\n }\n}\n\nexport const stopInfoMonitor = (stopFunction: string) => (id: string): void => {\n if (stopFunction in settings[id]) {\n settings[id][stopFunction]()\n delete settings[id][stopFunction]\n }\n}\n\nexport const startInfoMonitor = (sendInfoToIframe: (requestType: string, id: string) => void, type: string) => (id: string): void => {\n let pending: string | false = false\n\n const sendInfo = (requestType: string) => (): void => {\n if (settings[id]) {\n if (!pending || pending === requestType) {\n sendInfoToIframe(requestType, id)\n\n pending = requestType\n requestAnimationFrame(() => {\n pending = false\n })\n }\n } else {\n stop()\n }\n }\n\n const sendScroll = sendInfo(SCROLL)\n const sendResize = sendInfo('resize window')\n\n function setListener(requestType: string, listener: (target: EventTarget, event: string, handler: EventListener) => void): void {\n log(id, `${requestType}listeners for send${type}`)\n listener(window, SCROLL, sendScroll)\n listener(window, RESIZE, sendResize)\n }\n\n function stop(): void {\n event(id, `stop${type}`)\n setListener('Remove ', removeEventListener)\n pageObserver.disconnect()\n iframeObserver.disconnect()\n if (settings[id]) {\n removeEventListener(settings[id].iframe, LOAD, stop)\n }\n }\n\n function start(): void {\n setListener('Add ', addEventListener)\n\n pageObserver.observe(document.body)\n iframeObserver.observe(settings[id].iframe)\n }\n\n const pageObserver = new ResizeObserver(sendInfo('pageObserver'))\n const iframeObserver = new ResizeObserver(sendInfo('iframeObserver'))\n\n if (!settings[id]) return\n\n settings[id][`stop${type}`] = stop\n addEventListener(settings[id].iframe, LOAD, stop)\n start()\n}\n","import { PAGE_INFO } from '../../common/consts'\nimport { sendInfoToIframe, startInfoMonitor, stopInfoMonitor } from './common'\n\nexport function getPageInfo(iframe: HTMLIFrameElement): string {\n const bodyPosition = document.body.getBoundingClientRect()\n const iFramePosition = iframe.getBoundingClientRect()\n const { scrollY, scrollX, innerHeight, innerWidth } = window\n const { clientHeight, clientWidth } = document.documentElement\n\n return JSON.stringify({\n iframeHeight: iFramePosition.height,\n iframeWidth: iFramePosition.width,\n clientHeight: Math.max(clientHeight, innerHeight || 0),\n clientWidth: Math.max(clientWidth, innerWidth || 0),\n offsetTop: Math.trunc(iFramePosition.top - bodyPosition.top),\n offsetLeft: Math.trunc(iFramePosition.left - bodyPosition.left),\n scrollTop: scrollY,\n scrollLeft: scrollX,\n documentHeight: clientHeight,\n documentWidth: clientWidth,\n windowHeight: innerHeight,\n windowWidth: innerWidth,\n })\n}\n\nconst sendPageInfoToIframe = sendInfoToIframe(PAGE_INFO, getPageInfo)\n\nexport const startPageInfoMonitor = startInfoMonitor(\n sendPageInfoToIframe,\n 'PageInfo',\n)\n\nexport const stopPageInfoMonitor = stopInfoMonitor('stopPageInfo')\n","import { PARENT_INFO } from '../../common/consts'\nimport { sendInfoToIframe, startInfoMonitor, stopInfoMonitor } from './common'\n\nexport function getParentProps(iframe: HTMLIFrameElement): string {\n const { scrollWidth, scrollHeight } = document.documentElement\n const { width, height, offsetLeft, offsetTop, pageLeft, pageTop, scale } =\n window.visualViewport\n\n return JSON.stringify({\n iframe: iframe.getBoundingClientRect(),\n document: {\n scrollWidth,\n scrollHeight,\n },\n viewport: {\n width,\n height,\n offsetLeft,\n offsetTop,\n pageLeft,\n pageTop,\n scale,\n },\n })\n}\n\nconst sendParentInfoToIframe = sendInfoToIframe(PARENT_INFO, getParentProps)\n\nexport const startParentInfoMonitor = startInfoMonitor(\n sendParentInfoToIframe,\n 'ParentInfo',\n)\n\nexport const stopParentInfoMonitor = stopInfoMonitor('stopParentInfo')\n","import { FOREGROUND, HIGHLIGHT } from 'auto-console-group'\n\nimport type { MessageData } from '../types'\nimport { info } from '../console'\nimport on from '../events/wrapper'\nimport settings from '../values/settings'\nimport {\n getPagePosition,\n getStoredPagePosition,\n setPagePosition,\n setStoredPagePosition,\n unsetPagePosition,\n} from './position'\n\ninterface Position {\n x: number\n y: number\n}\n\nexport function getElementPosition(target: HTMLIFrameElement): Position {\n const iframePosition = target.getBoundingClientRect()\n const pagePosition = getPagePosition(target.id)\n\n return {\n x: Number(iframePosition.left) + Number(pagePosition.x),\n y: Number(iframePosition.top) + Number(pagePosition.y),\n }\n}\n\nexport function scrollToLink(id: string): void {\n const { x, y } = getStoredPagePosition()\n const iframe = settings[id]?.iframe\n\n if (on(id, 'onScroll', { iframe, top: y, left: x, x, y }) === false) {\n unsetPagePosition()\n return\n }\n\n setPagePosition(id)\n}\n\nexport function scrollBy(messageData: MessageData): void {\n const { id, height, width } = messageData\n\n // Check for V4 as well\n const target = window.parentIframe || window.parentIFrame || window\n\n info(\n id,\n `scrollBy: x: %c${width}%c y: %c${height}`,\n HIGHLIGHT,\n FOREGROUND,\n HIGHLIGHT,\n )\n\n target.scrollBy(width, height)\n}\n\nconst scrollRequestFromChild = (addOffset: boolean) => (messageData: MessageData): void => {\n /* istanbul ignore next */ // Not testable in Karma\n function reposition(newPosition: Position): void {\n setStoredPagePosition(newPosition)\n scrollToLink(id)\n }\n\n function scrollParent(target: any, newPosition: Position): void {\n target[`scrollTo${addOffset ? 'Offset' : ''}`](newPosition.x, newPosition.y)\n }\n\n const calcOffset = (offset: Position): Position => ({\n x: width + offset.x,\n y: height + offset.y,\n })\n\n const { id, iframe, height, width } = messageData\n const offset = addOffset ? getElementPosition(iframe) : { x: 0, y: 0 }\n const newPosition = calcOffset(offset)\n const target = window.parentIframe || window.parentIFrame // Check for V4 as well\n\n info(\n id,\n `Reposition requested (offset x:%c${offset.x}%c y:%c${offset.y})`,\n HIGHLIGHT,\n FOREGROUND,\n HIGHLIGHT,\n )\n\n if (target) scrollParent(target, newPosition)\n else reposition(newPosition)\n}\n\nexport const scrollTo = scrollRequestFromChild(false)\nexport const scrollToOffset = scrollRequestFromChild(true)\n","import { HIGHLIGHT } from 'auto-console-group'\n\nimport { info, log } from '../console'\nimport page from '../values/page'\nimport { getElementPosition, scrollToLink } from './scroll'\n\nfunction jumpToTarget(id: string, hash: string, target: HTMLElement): void {\n const { x, y } = getElementPosition(target as unknown as HTMLIFrameElement)\n\n info(id, `Moving to in page link: %c#${hash}`, HIGHLIGHT)\n\n page.position = { x, y }\n\n scrollToLink(id)\n window.location.hash = hash\n}\n\nfunction jumpToParent(id: string, hash: string): void {\n // Check for V4 as well\n const target = window.parentIframe || window.parentIFrame\n\n if (!target) {\n log(id, `In page link #${hash} not found`)\n return\n }\n\n target.moveToAnchor(hash)\n}\n\nexport default function inPageLink(id: string, location: string): void {\n const hash = location.split('#')[1] || ''\n const hashData = decodeURIComponent(hash)\n\n const target =\n document.getElementById(hashData) || document.getElementsByName(hashData)[0]\n\n if (target) {\n jumpToTarget(id, hash, target)\n return\n }\n\n if (window.top === window.self) {\n log(id, `In page link #${hash} not found`)\n return\n }\n\n jumpToParent(id, hash)\n}\n","import { HIGHLIGHT } from 'auto-console-group'\n\nimport { info } from '../console'\nimport settings from '../values/settings'\n\nexport function checkTitle(id: string): boolean {\n const title = settings[id]?.iframe?.title\n return title === '' || title === undefined\n}\n\nexport function setTitle(id: string, title: string | undefined): void {\n if (!settings[id]?.syncTitle) return\n settings[id].iframe.title = title\n info(id, `Set iframe title attribute: %c${title}`, HIGHLIGHT)\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nconst l = (l: string): string => {\n if (!l) return ''\n let p = -559038744,\n y = 1103547984\n for (let z: any, t = 0; t < l.length; t++)\n ((z = l.codePointAt(t)),\n (p = Math.imul(p ^ z, 2246822519)),\n (y = Math.imul(y ^ z, 3266489917)))\n return (\n (p ^= Math.imul(p ^ (y >>> 15), 1935289751)),\n (y ^= Math.imul(y ^ (p >>> 15), 3405138345)),\n (p ^= y >>> 16),\n (y ^= p >>> 16),\n (2097152 * (y >>> 0) + (p >>> 11)).toString(36)\n )\n },\n p = (l: string): string =>\n l.replace(/[A-Za-z]/g, (l: any) =>\n String.fromCodePoint(\n (l <= 'Z' ? 90 : 122) >= (l = l.codePointAt(0) + 19) ? l : l - 26,\n ),\n ),\n x = ['spjluzl', 'rlf', 'clyzpvu', 'rlf2'],\n y = [\n '<yi>Puchspk Spjluzl Rlf</><iy><iy>',\n '<yi>Tpzzpun Spjluzl Rlf</><iy><iy>',\n 'Aopz spiyhyf pz hchpshisl dpao ivao Jvttlyjphs huk Vwlu-Zvbyjl spjluzlz.<iy><iy><i>Jvttlyjphs Spjluzl</><iy>Mvy jvttlyjphs bzl, <p>pmyhtl-ylzpgly</> ylxbpylz h svd jvza vul aptl spjluzl mll. Mvy tvyl pumvythapvu cpzpa <b>oaawz://pmyhtl-ylzpgly.jvt/wypjpun</>.<iy><iy><i>Vwlu Zvbyjl Spjluzl</><iy>Pm fvb hyl bzpun aopz spiyhyf pu h uvu-jvttlyjphs vwlu zvbyjl wyvqlja aolu fvb jhu bzl pa mvy myll bukly aol alytz vm aol NWS C3 Spjluzl. Av jvumpyt fvb hjjlwa aolzl alytz, wslhzl zla aol <i>spjluzl</> rlf pu <p>pmyhtl-ylzpgly</> vwapvuz av <i>NWSc3</>.<iy><iy>Mvy tvyl pumvythapvu wslhzl zll: <b>oaawz://pmyhtl-ylzpgly.jvt/nws</>',\n '<i>NWSc3 Spjluzl Clyzpvu</><iy><iy>Aopz clyzpvu vm <p>pmyhtl-ylzpgly</> pz ilpun bzlk bukly aol alytz vm aol <i>NWS C3</> spjluzl. Aopz spjluzl hssvdz fvb av bzl <p>pmyhtl-ylzpgly</> pu Vwlu Zvbyjl wyvqljaz, iba pa ylxbpylz fvby wyvqlja av il wbispj, wyvcpkl haaypibapvu huk il spjluzlk bukly clyzpvu 3 vy shaly vm aol NUB Nlulyhs Wbispj Spjluzl.<iy><iy>Pm fvb hyl bzpun aopz spiyhyf pu h uvu-vwlu zvbyjl wyvqlja vy dlizpal, fvb dpss ullk av wbyjohzl h svd jvza vul aptl jvttlyjphs spjluzl.<iy><iy>Mvy tvyl pumvythapvu cpzpa <b>oaawz://pmyhtl-ylzpgly.jvt/wypjpun</>.',\n '<iy><yi>Zvsv spjluzl kvlz uva zbwwvya jyvzz-kvthpu</><iy><iy>Av bzl <p>pmyhtl-ylzpgly</> dpao jyvzz kvthpu pmyhtlz fvb ullk lpaoly aol Wyvmlzzpvuhs vy Ibzpulzz spjluzlz. Mvy klahpsz vu bwnyhkl wypjpun wslhzl jvuahja pumv@pmyhtl-ylzpgly.jvt.',\n 'Pu whnl spurpun ylxbpylz h Wyvmlzzpvuhs vy Ibzpulzz spjluzl. Wslhzl zll <b>oaawz://pmyhtl-ylzpgly.jvt/wypjpun</> mvy tvyl klahpsz.',\n ],\n z = ['NWSc3', 'zvsv', 'wyv', 'ibzpulzz', 'vlt'],\n t = Object.fromEntries(\n [\n '2cgs7fdf4xb',\n '1c9ctcccr4z',\n '1q2pc4eebgb',\n 'ueokt0969w',\n 'w2zxchhgqz',\n '1umuxblj2e5',\n '2b5sdlfhbev',\n 'zo4ui3arjo',\n 'oclbb4thgl',\n ].map((l, p) => [l, Math.max(0, p - 1)]),\n )\nexport const getModeData = (l: number): string => p(y[l])\nexport const getModeLabel = (l: number): string => p(z[l])\nexport const getKey = (l: number): string => p(x[l])\nexport default (y: any): number => {\n const z = y[p(x[0])] || y[p(x[1])] || y[p(x[2])] || y[p(x[3])]\n if (!z) return -1\n const u = z.split('-')\n let v = (function (y = '') {\n let z = -2\n const u = l(p(y))\n return u in t && (z = t[u]), z>4?z-4:z\n })(u[0])\n return 0 === v || ((p: any) => p[2] === l(p[0] + p[1]))(u) || (v = -2), v\n}\n/* eslint-enable @typescript-eslint/no-explicit-any */\n","import { VERSION } from '../../common/consts'\nimport { getModeData, getModeLabel } from '../../common/mode'\nimport { advise, purge as consoleClear, vInfo } from '../console'\nimport settings from '../values/settings'\n\nlet vAdvised = false\nlet vInfoDisable = false\n\nexport default function checkMode(id: string, childMode: number = -3): void {\n if (vAdvised) return\n const mode = Math.max(settings[id].mode, childMode)\n if (mode > settings[id].mode) settings[id].mode = mode\n if (mode < 0) {\n consoleClear(id)\n if (!settings[id].vAdvised)\n advise(id || 'Parent', `${getModeData(mode + 2)}${getModeData(2)}`)\n settings[id].vAdvised = true\n throw getModeData(mode + 2).replace(/<\\/?[a-z][^>]*>|<\\/>/gi, '')\n }\n if (!(mode > 0 && vInfoDisable)) {\n vInfo(`v${VERSION} (${getModeLabel(mode)})`, mode)\n }\n if (mode < 1) advise('Parent', getModeData(3))\n vAdvised = true\n}\n\nexport function preModeCheck(id: string): void {\n if (vAdvised) return\n const { mode } = settings[id]\n if (mode !== -1) checkMode(id, mode)\n}\n\nexport function enableVInfo(options: Record<string, any>): void {\n if (options?.log === -1) {\n options.log = false\n vInfoDisable = true\n }\n}\n","import checkMode from '../checks/mode'\nimport { log } from '../console'\nimport settings from '../values/settings'\n\nexport default function firstRun(id: string, mode: string | undefined): void {\n if (!settings[id]) return\n\n log(id, `First run for ${id}`)\n checkMode(id, mode !== undefined ? Number(mode) : undefined)\n settings[id].firstRun = false\n}\n","import { HIGHLIGHT } from 'auto-console-group'\n\nimport {\n AUTO_RESIZE,\n BEFORE_UNLOAD,\n CLOSE,\n IN_PAGE_LINK,\n INIT,\n MESSAGE,\n MOUSE_ENTER,\n MOUSE_LEAVE,\n PAGE_INFO,\n PAGE_INFO_STOP,\n PARENT_INFO,\n PARENT_INFO_STOP,\n RESET,\n SCROLL_BY,\n SCROLL_TO,\n SCROLL_TO_OFFSET,\n TITLE,\n} from '../common/consts'\nimport type { MessageData } from './types'\nimport checkSameDomain from './checks/origin'\nimport checkVersion from './checks/version'\nimport { info, log, warn } from './console'\nimport { onMessage } from './events/message'\nimport onMouse from './events/mouse'\nimport resizeIframe from './events/resize'\nimport on from './events/wrapper'\nimport closeIframe from './methods/close'\nimport resetIframe from './methods/reset'\nimport { startPageInfoMonitor, stopPageInfoMonitor } from './monitor/page-info'\nimport { startParentInfoMonitor, stopParentInfoMonitor } from './monitor/props'\nimport inPageLink from './page/in-page-link'\nimport { scrollBy, scrollTo, scrollToOffset } from './page/scroll'\nimport { setTitle } from './page/title'\nimport getMessageBody from './received/message'\nimport firstRun from './setup/first-run'\nimport settings from './values/settings'\n\nexport default function routeMessage(messageData: MessageData): void {\n const { height, id, iframe, mode, message, type, width } = messageData\n const { lastMessage } = settings[id]\n\n if (settings[id]?.firstRun) firstRun(id, mode)\n log(id, `Received: %c${lastMessage}`, HIGHLIGHT)\n\n switch (type) {\n case AUTO_RESIZE:\n settings[id].autoResize = JSON.parse(getMessageBody(id, 9))\n break\n\n case BEFORE_UNLOAD:\n info(id, 'Ready state reset')\n settings[id].initialised = false\n break\n\n case CLOSE:\n closeIframe(iframe)\n break\n\n case IN_PAGE_LINK:\n inPageLink(id, getMessageBody(id, 9))\n break\n\n case INIT:\n resizeIframe(messageData)\n checkSameDomain(id)\n checkVersion(id, message)\n settings[id].initialised = true\n on(id, 'onReady', iframe)\n break\n\n case MESSAGE:\n onMessage(messageData, getMessageBody(id, 6))\n break\n\n case MOUSE_ENTER:\n onMouse('onMouseEnter', messageData)\n break\n\n case MOUSE_LEAVE:\n onMouse('onMouseLeave', messageData)\n break\n\n case PAGE_INFO:\n startPageInfoMonitor(id)\n break\n\n case PARENT_INFO:\n startParentInfoMonitor(id)\n break\n\n case PAGE_INFO_STOP:\n stopPageInfoMonitor(id)\n break\n\n case PARENT_INFO_STOP:\n stopParentInfoMonitor(id)\n break\n\n case RESET:\n resetIframe(messageData)\n break\n\n case SCROLL_BY:\n scrollBy(messageData)\n break\n\n case SCROLL_TO:\n scrollTo(messageData)\n break\n\n case SCROLL_TO_OFFSET:\n scrollToOffset(messageData)\n break\n\n case TITLE:\n setTitle(id, message)\n break\n\n default:\n if (width === 0 && height === 0) {\n warn(\n id,\n `Unsupported message received (${type}), this is likely due to the iframe containing a later ` +\n `version of iframe-resizer than the parent page`,\n )\n return\n }\n\n if (width === 0 || height === 0) {\n log(id, 'Ignoring message with 0 height or width')\n return\n }\n\n // Recheck document.hidden here, as only Firefox\n // correctly supports this in the iframe\n if (document.hidden) {\n log(id, 'Page hidden - ignored resize request')\n return\n }\n\n resizeIframe(messageData)\n }\n}\n","import settings from '../values/settings'\n\nexport const sendIframeReady =\n (source: MessageEventSource | null) =>\n ({ initChild, postMessageTarget }: { initChild: () => void, postMessageTarget: MessageEventSource | null }): void => {\n if (source === postMessageTarget) initChild()\n }\n\nexport default (source: MessageEventSource | null): void =>\n Object.values(settings).forEach(sendIframeReady(source))\n","import { CHILD_READY_MESSAGE, MESSAGE, PARENT, STRING } from '../common/consts'\nimport { addEventListener } from '../common/listeners'\nimport { once } from '../common/utils'\nimport { debug, errorBoundary, event as consoleEvent } from './console'\nimport tabVisible from './events/visible'\nimport decodeMessage from './received/decode'\nimport {\n checkIframeExists,\n isMessageForUs,\n isMessageFromIframe,\n isMessageFromMetaParent,\n} from './received/preflight'\nimport routeMessage from './router'\nimport iframeReady from './send/ready'\nimport settings from './values/settings'\n\nfunction iframeListener(event: MessageEvent | { data: any, sameOrigin?: boolean }): void {\n const msg = event.data\n\n if (msg === CHILD_READY_MESSAGE) {\n iframeReady((event as MessageEvent).source)\n return\n }\n\n if (!isMessageForUs(msg)) {\n if (typeof msg !== STRING) return\n consoleEvent(PARENT, 'ignoredMessage')\n debug(PARENT, msg)\n return\n }\n\n const messageData = decodeMessage(msg)\n const { id, type } = messageData\n\n consoleEvent(id, type)\n\n switch (true) {\n case !settings[id]:\n throw new Error(`${type} No settings for ${id}. Message was: ${msg}`)\n\n case !checkIframeExists(messageData):\n case isMessageFromMetaParent(messageData):\n case !isMessageFromIframe(messageData, event):\n return\n\n default:\n settings[id].lastMessage = event.data\n errorBoundary(id, routeMessage)(messageData)\n }\n}\n\nexport default once(() => {\n addEventListener(window, MESSAGE, iframeListener as EventListener)\n addEventListener(document, 'visibilitychange', tabVisible)\n window.iframeParentListener = (data: any) =>\n setTimeout(() => iframeListener({ data, sameOrigin: true }))\n})\n","import { NEW_LINE } from '../../common/consts'\nimport { advise } from '../console'\n\nconst shownDuplicateIdWarning: Record<string, boolean> = {}\n\nexport default function checkUniqueId(id: string): boolean {\n if (shownDuplicateIdWarning[id] === true) return false\n\n const elements = document.querySelectorAll(`iframe#${CSS.escape(id)}`)\n if (elements.length <= 1) return true\n\n shownDuplicateIdWarning[id] = true\n\n const elementList = Array.from(elements).flatMap((element) => [\n NEW_LINE,\n element,\n NEW_LINE,\n ])\n\n advise(\n id,\n `<rb>Duplicate ID attributes detected</>\n\nThe <b>${id}</> ID is not unique. Having multiple iframes on the same page with the same ID causes problems with communication between the iframe and parent page. Please ensure that the ID of each iframe has a unique value.\n\nFound <bb>${elements.length}</> iframes with the <b>${id}</> ID:`,\n ...elementList,\n NEW_LINE,\n )\n\n return false\n}\n","import {\n MESSAGE,\n REMOVED_NEXT_VERSION,\n RESIZE,\n STRING,\n} from '../../common/consts'\nimport { typeAssert } from '../../common/utils'\nimport { advise } from '../console'\nimport trigger from '../send/trigger'\nimport settings from '../values/settings'\nimport closeIframe from './close'\nimport disconnect from './disconnect'\n\nconst DEPRECATED_REMOVE_LISTENERS = `<rb>Deprecated Method Name</>\n\nThe <b>removeListeners()</> method has been renamed to <b>disconnect()</>. ${REMOVED_NEXT_VERSION}`\n\nconst DEPRECATED_RESIZE = `<rb>Deprecated Method</>\n\nUse of the <b>resize()</> method from the parent page is deprecated and will be removed in a future version of <i>iframe-resizer</>. As there are no longer any edge cases that require triggering a resize from the parent page, it is recommended to remove this method from your code.`\n\nexport default function attachMethods(id: string): void {\n if (settings[id]) {\n const { iframe } = settings[id]\n const resizer = {\n close: closeIframe.bind(null, iframe),\n\n disconnect: disconnect.bind(null, iframe),\n\n moveToAnchor(anchor: string) {\n typeAssert(anchor, STRING, 'moveToAnchor(anchor) anchor')\n trigger('Move to anchor', `moveToAnchor:${anchor}`, id)\n },\n\n removeListeners() {\n advise(id, DEPRECATED_REMOVE_LISTENERS)\n this.disconnect()\n },\n\n resize() {\n advise(id, DEPRECATED_RESIZE)\n trigger('Window resize', RESIZE, id)\n },\n\n sendMessage(message: any) {\n message = JSON.stringify(message)\n trigger(MESSAGE, `${MESSAGE}:${message}`, id)\n },\n }\n\n iframe.iframeResizer = resizer\n iframe.iFrameResizer = resizer\n }\n}\n","import { CHILD, SEPARATOR } from '../../common/consts'\nimport page from '../values/page'\nimport settings from '../values/settings'\n\n// Backwards compatibility consts\nconst V1_PADDING = '8'\nconst INTERVAL = '32'\nconst RESIZE_FROM = CHILD\nconst PUBLIC_METHODS = true\n\nexport default function createOutgoingMessage(id: string): string {\n const {\n autoResize,\n bodyBackground,\n bodyMargin,\n bodyPadding,\n heightCalculationMethod,\n inPageLinks,\n license,\n log,\n logExpand,\n mouseEvents,\n offsetHeight,\n offsetWidth,\n mode,\n sizeHeight,\n // sizeSelector,\n sizeWidth,\n tolerance,\n widthCalculationMethod,\n } = settings[id]\n\n return [\n id,\n V1_PADDING,\n sizeWidth,\n log,\n INTERVAL,\n PUBLIC_METHODS,\n autoResize,\n bodyMargin,\n heightCalculationMethod,\n bodyBackground,\n bodyPadding,\n tolerance,\n inPageLinks,\n RESIZE_FROM,\n widthCalculationMethod,\n mouseEvents,\n offsetHeight,\n offsetWidth,\n sizeHeight,\n license,\n page.version,\n mode,\n '', // sizeSelector,\n logExpand,\n ].join(SEPARATOR)\n}\n","import { NUMBER } from '../../common/consts'\nimport settings from '../values/settings'\n\nconst ZERO = '0'\n\nexport default function setupBodyMargin(id: string): void {\n const { bodyMargin } = settings[id]\n\n if (typeof bodyMargin === NUMBER || bodyMargin === ZERO) {\n settings[id].bodyMargin = `${bodyMargin}px`\n }\n}\n","import { OBJECT } from '../../common/consts'\nimport { advise, event } from '../console'\n\nconst getOrigin = (url: string): string | null => {\n try {\n return new URL(url).origin\n } catch (error) {\n return null\n }\n}\n\nconst allowsScriptsAndOrigin = (sandbox: any): boolean =>\n typeof sandbox === OBJECT &&\n sandbox.length > 0 &&\n !(sandbox.contains('allow-scripts') && sandbox.contains('allow-same-origin'))\n\nfunction showWarning(id: string, settings: Record<string, any>): void {\n const {\n checkOrigin,\n iframe: { src, sandbox },\n initialisedFirstPage,\n waitForLoad,\n } = settings[id]\n const targetOrigin = getOrigin(src)\n\n event(id, 'noResponse')\n advise(\n id,\n `<rb>No response from iframe</>\n\nThe iframe (<i>${id}</>) has not responded within ${settings[id].warningTimeout / 1000} seconds. Check <b>@iframe-resizer/child</> package has been loaded in the iframe.\n${\n checkOrigin && targetOrigin\n ? `\nThe <b>checkOrigin</> option is currently enabled. If the iframe redirects away from <i>${targetOrigin}</>, then the connection to the iframe may be blocked by the browser. To disable this option, set <b>checkOrigin</> to <bb>false</> or an array of allowed origins. See <u>https://iframe-resizer.com/checkorigin</> for more information.\n`\n : ''\n}${\n waitForLoad && !initialisedFirstPage\n ? `\nThe <b>waitForLoad</> option is currently set to <bb>true</>. If the iframe loads before <i>iframe-resizer</> runs, this option will prevent <i>iframe-resizer</> initialising. To disable this option, set <b>waitForLoad</> to <bb>false</>.\n`\n : ''\n }${\n allowsScriptsAndOrigin(sandbox)\n ? `\nThe iframe has the <b>sandbox</> attribute, please ensure it contains both the <bb>allow-same-origin</> and <bb>allow-scripts</> values.\n`\n : ''\n }\nThis message can be ignored if everything is working, or you can set the <b>warningTimeout</> option to a higher value or zero to suppress this warning.\n`,\n )\n}\n\nexport default function warnOnNoResponse(id: string, settings: Record<string, any>): void {\n function warning(): void {\n if (settings[id] === undefined) return // iframe has been closed while we were waiting\n\n const { initialised, loadErrorShown } = settings[id]\n\n settings[id].msgTimeout = undefined\n\n if (initialised) {\n settings[id].initialisedFirstPage = true\n return\n }\n\n if (loadErrorShown) return\n\n settings[id].loadErrorShown = true\n showWarning(id, settings)\n }\n\n const { msgTimeout, warningTimeout } = settings[id]\n\n if (!warningTimeout) return\n if (msgTimeout) clearTimeout(msgTimeout)\n\n settings[id].msgTimeout = setTimeout(warning, warningTimeout)\n}\n","import {\n INIT,\n INIT_FROM_IFRAME,\n LAZY,\n LOAD,\n MIN_SIZE,\n ONLOAD,\n RESET_REQUIRED_METHODS,\n} from '../../common/consts'\nimport { addEventListener } from '../../common/listeners'\nimport { event as consoleEvent, info } from '../console'\nimport resetIframe from '../methods/reset'\nimport warnOnNoResponse from '../send/timeout'\nimport trigger from '../send/trigger'\nimport settings from '../values/settings'\n\nconst AFTER_EVENT_STACK = 1\nconst isLazy = (iframe: HTMLIFrameElement): boolean => iframe.loading === LAZY\nconst isInit = (eventType: string): boolean => eventType === INIT\n\nfunction checkReset(id: string): void {\n if (!(settings[id]?.heightCalculationMethod in RESET_REQUIRED_METHODS)) return\n\n resetIframe({\n id,\n iframe: settings[id].iframe,\n height: MIN_SIZE,\n width: MIN_SIZE,\n type: INIT,\n })\n}\n\nfunction addLoadListener(iframe: HTMLIFrameElement, initChild: () => void): void {\n // allow other concurrent events to go first\n const onload = () => setTimeout(initChild, AFTER_EVENT_STACK)\n addEventListener(iframe, LOAD, onload)\n}\n\nconst noContent = (iframe: HTMLIFrameElement): boolean => {\n const { src, srcdoc } = iframe\n return !srcdoc && (src == null || src === '' || src === 'about:blank')\n}\n\nfunction sendInit(id: string, initChild: () => void): void {\n const { iframe, waitForLoad } = settings[id]\n\n if (waitForLoad === true) return\n if (noContent(iframe)) {\n setTimeout(() => {\n consoleEvent(id, 'noContent')\n info(id, 'No content detected in the iframe, delaying initialisation')\n })\n return\n }\n\n setTimeout(initChild)\n}\n\n// We have to call trigger twice, as we can not be sure if all\n// iframes have completed loading when this code runs. The\n// event listener also catches the page changing in the iFrame.\nexport default function init(id: string, message: string): void {\n const createInitChild = (eventType: string) => (): void => {\n if (!settings[id]) return // iframe removed before load event\n\n const { firstRun, iframe } = settings[id]\n\n trigger(eventType, message, id)\n if (!(isInit(eventType) && isLazy(iframe))) warnOnNoResponse(id, settings)\n\n if (!firstRun) checkReset(id)\n }\n\n const { iframe } = settings[id]\n\n settings[id].initChild = createInitChild(INIT_FROM_IFRAME)\n addLoadListener(iframe, createInitChild(ONLOAD))\n sendInit(id, createInitChild(INIT))\n}\n","import {\n AUTO_RESIZE,\n BOTH,\n HORIZONTAL,\n NONE,\n VERTICAL,\n} from '../../common/consts'\nimport { advise } from '../console'\n\nexport default function checkOptions(id: string, options: Record<string, any> | undefined): Record<string, any> {\n if (!options) return {}\n\n if (\n 'sizeWidth' in options ||\n 'sizeHeight' in options ||\n AUTO_RESIZE in options\n ) {\n advise(\n id,\n `<rb>Deprecated Option</>\n\nThe <b>sizeWidth</>, <b>sizeHeight</> and <b>autoResize</> options have been replaced with new <b>direction</> option which expects values of <bb>${VERTICAL}</>, <bb>${HORIZONTAL}</>, <bb>${BOTH}</> or <bb>${NONE}</>.\n`,\n )\n }\n\n return options\n}\n","import { HIGHLIGHT } from 'auto-console-group'\n\nimport { info } from '../console'\nimport settings from '../values/settings'\n\nexport default function checkWarningTimeout(id: string): void {\n if (!settings[id].warningTimeout) {\n info(id, 'warningTimeout:%c disabled', HIGHLIGHT)\n }\n}\n","import { HIGHLIGHT } from 'auto-console-group'\n\nimport { VERTICAL } from '../../common/consts'\nimport { log } from '../console'\nimport settings from '../values/settings'\n\nexport default function setOffsetSize(id: string, { offset, offsetSize }: { offset?: number, offsetSize?: number }): void {\n const newOffset = offsetSize || offset\n\n if (!newOffset) return // No offset set or offset is zero\n\n if (settings[id].direction === VERTICAL) {\n settings[id].offsetHeight = newOffset\n log(id, `Offset height: %c${newOffset}`, HIGHLIGHT)\n } else {\n settings[id].offsetWidth = newOffset\n log(id, `Offset width: %c${newOffset}`, HIGHLIGHT)\n }\n}\n","import { HIGHLIGHT } from 'auto-console-group'\n\nimport { BOTH, HORIZONTAL, NONE, VERTICAL } from '../../common/consts'\nimport { log } from '../console'\nimport settings from '../values/settings'\n\nexport default function setDirection(id: string): void {\n const { direction } = settings[id]\n\n switch (direction) {\n case VERTICAL:\n break\n\n case HORIZONTAL:\n settings[id].sizeHeight = false\n // eslint-disable-next-line no-fallthrough\n case BOTH:\n settings[id].sizeWidth = true\n break\n\n case NONE:\n settings[id].sizeWidth = false\n settings[id].sizeHeight = false\n settings[id].autoResize = false\n break\n\n default:\n throw new TypeError(`Direction value of \"${direction}\" is not valid`)\n }\n\n log(id, `direction: %c${direction}`, HIGHLIGHT)\n}\n","import settings from '../values/settings'\n\nexport const getTargetOrigin = (remoteHost: string): string =>\n remoteHost === '' ||\n remoteHost.match(/^(about:blank|javascript:|file:\\/\\/)/) !== null\n ? '*'\n : remoteHost\n\nexport function setTargetOrigin(id: string): void {\n settings[id].targetOrigin =\n settings[id].checkOrigin === true\n ? getTargetOrigin(settings[id].remoteHost)\n : '*'\n}\n\nexport function getPostMessageTarget(iframe: HTMLIFrameElement): void {\n const { id } = iframe\n if (settings[id].postMessageTarget === null)\n settings[id].postMessageTarget = iframe.contentWindow\n}\n","import { OFFSET, OFFSET_SIZE, REMOVED_NEXT_VERSION } from '../../common/consts'\nimport { hasOwn } from '../../common/utils'\nimport { advise } from '../console'\nimport settings from '../values/settings'\n\nfunction updateOptionName(id: string, oldName: string, newName: string): void {\n if (hasOwn(settings[id], oldName)) {\n advise(\n id,\n `<rb>Deprecated option</>\\n\\nThe <b>${oldName}</> option has been renamed to <b>${newName}</>. ${REMOVED_NEXT_VERSION}`,\n )\n settings[id][newName] = settings[id][oldName]\n delete settings[id][oldName]\n }\n}\n\nexport default function updateOptionNames(id: string): void {\n updateOptionName(id, OFFSET, OFFSET_SIZE)\n updateOptionName(id, 'onClose', 'onBeforeClose')\n updateOptionName(id, 'onClosed', 'onAfterClose')\n}\n","import setMode from '../../common/mode'\nimport { hasOwn } from '../../common/utils'\nimport checkOptions from '../checks/options'\nimport checkWarningTimeout from '../checks/warning-timeout'\nimport { checkTitle } from '../page/title'\nimport setOffsetSize from '../send/offset'\nimport defaults from '../values/defaults'\nimport settings from '../values/settings'\nimport setDirection from './direction'\nimport { getPostMessageTarget, setTargetOrigin } from './target-origin'\nimport updateOptionNames from './update-option-names'\n\nconst hasMouseEvents = (options: Record<string, any>): boolean =>\n hasOwn(options, 'onMouseEnter') || hasOwn(options, 'onMouseLeave')\n\nexport default function processOptions(iframe: HTMLIFrameElement, options: Record<string, any>): void {\n const { id } = iframe\n settings[id] = {\n ...settings[id],\n iframe,\n remoteHost: iframe?.src.split('/').slice(0, 3).join('/'),\n ...defaults,\n ...checkOptions(id, options),\n mouseEvents: hasMouseEvents(options),\n mode: setMode(options),\n syncTitle: checkTitle(id),\n }\n\n updateOptionNames(id)\n setDirection(id)\n setOffsetSize(id, options)\n checkWarningTimeout(id)\n getPostMessageTarget(iframe)\n setTargetOrigin(id)\n}\n","import { AUTO, HIDDEN } from '../../common/consts'\nimport { log } from '../console'\nimport settings from '../values/settings'\n\nconst YES = 'yes'\nconst NO = 'no'\nconst OMIT = 'omit'\n\nexport default function setScrolling(iframe: HTMLIFrameElement): void {\n const { id } = iframe\n\n log(\n id,\n `Iframe scrolling ${\n settings[id]?.scrolling ? 'enabled' : 'disabled'\n } for ${id}`,\n )\n\n iframe.style.overflow = settings[id]?.scrolling === false ? HIDDEN : AUTO\n\n switch (settings[id]?.scrolling) {\n case OMIT:\n break\n\n case true:\n iframe.scrolling = YES\n break\n\n case false:\n iframe.scrolling = NO\n break\n\n default:\n iframe.scrolling = settings[id]?.scrolling || NO\n }\n}\n","import { HIGHLIGHT } from 'auto-console-group'\n\nimport { preModeCheck } from '../checks/mode'\nimport checkUniqueId from '../checks/unique'\nimport { endAutoGroup, event as consoleEvent, log } from '../console'\nimport attachMethods from '../methods/attach'\nimport createOutgoingMessage from '../send/outgoing'\nimport setupBodyMargin from './body-margin'\nimport init from './init'\nimport processOptions from './process-options'\nimport setScrolling from './scrolling'\n\nfunction setup(id: string, iframe: HTMLIFrameElement, options: Record<string, any>): void {\n processOptions(iframe, options)\n log(id, `src: %c${iframe.srcdoc || iframe.src}`, HIGHLIGHT)\n preModeCheck(id)\n setScrolling(iframe)\n setupBodyMargin(id)\n init(id, createOutgoingMessage(id))\n attachMethods(id)\n log(id, 'Setup complete')\n}\n\nexport default function (iframe: HTMLIFrameElement, options: Record<string, any>): void {\n const { id } = iframe\n consoleEvent(id, 'setup')\n if (checkUniqueId(id)) setup(id, iframe, options)\n endAutoGroup(id)\n}\n","import { COLLAPSE, EXPAND, LOG_OPTIONS } from '../../common/consts'\nimport { hasOwn, isString } from '../../common/utils'\nimport { enableVInfo } from '../checks/mode'\nimport { error, setupConsole } from '../console'\nimport defaults from '../values/defaults'\n\nexport default function startLogging(id: string, options: Record<string, any>): void {\n const isLogEnabled = hasOwn(options, 'log')\n const isLogString = isString(options.log)\n const enabled = isLogEnabled\n ? isLogString\n ? true\n : options.log\n : defaults.log\n\n if (!hasOwn(options, 'logExpand')) {\n options.logExpand =\n isLogEnabled && isLogString ? options.log === EXPAND : defaults.logExpand\n }\n\n enableVInfo(options)\n setupConsole({\n enabled,\n expand: options.logExpand,\n iframeId: id,\n })\n\n if (isLogString && !(options.log in LOG_OPTIONS))\n error(\n id,\n `Invalid value for options.log: Accepted values are \"${EXPAND}\" and \"${COLLAPSE}\"`,\n )\n\n options.log = enabled\n}\n","export type {\n IFrameObject,\n IFrameComponent,\n IFrameMouseData,\n IFrameResizedData,\n IFrameMessageData,\n IFrameScrollData,\n IFrameOptions,\n MessageData,\n} from './types'\n\nimport { LABEL } from '../common/consts'\nimport { isObject } from '../common/utils'\nimport ensureHasId from './checks/id'\nimport checkManualLogging from './checks/manual-logging'\nimport { errorBoundary, event as consoleEvent, warn } from './console'\nimport setupEventListenersOnce from './listeners'\nimport setupIframe from './setup'\nimport setupLogging from './setup/logging'\n\nexport default function connectResizer(options: Record<string, any>): (iframe: HTMLIFrameElement) => any {\n if (!isObject(options)) throw new TypeError('Options is not an object')\n\n setupEventListenersOnce()\n checkManualLogging(options)\n\n return (iframe: HTMLIFrameElement) => {\n const id = ensureHasId(iframe, options)\n\n if (LABEL in iframe) {\n consoleEvent(id, 'alreadySetup')\n warn(id, `Ignored iframe (${id}), already setup.`)\n } else {\n setupLogging(id, options)\n errorBoundary(id, setupIframe)(iframe, options)\n }\n\n return iframe?.iframeResizer\n }\n}\n"],"names":["VERSION","LABEL","CHILD_READY_MESSAGE","AUTO_RESIZE","BEFORE_UNLOAD","CLOSE","IN_PAGE_LINK","INIT","INIT_FROM_IFRAME","LAZY","LOAD","MESSAGE","MOUSE_ENTER","MOUSE_LEAVE","ONLOAD","PAGE_INFO","PARENT_INFO","PAGE_INFO_STOP","PARENT_INFO_STOP","RESET","RESIZE","SCROLL_BY","SCROLL_TO","SCROLL_TO_OFFSET","TITLE","HEIGHT","WIDTH","OFFSET","OFFSET_SIZE","SCROLL","HIDDEN","CHILD","PARENT","STRING","NUMBER","OBJECT","FUNCTION","AUTO","BOLD","NONE","BOTH","VERTICAL","HORIZONTAL","MESSAGE_HEADER_LENGTH","MESSAGE_ID","MESSAGE_ID_LENGTH","RESET_REQUIRED_METHODS","INIT_EVENTS","EXPAND","COLLAPSE","LOG_OPTIONS","REMOVED_NEXT_VERSION","isObject","value","isString","isIframe","element","isolateUserCode","func","val","once","fn","done","args","hasOwnFallback","o","k","hasOwn","id","x","capitalizeFirstLetter","string","esModuleInterop","mod","typeAssert","type","error","deprecate","advise","change","old","replacement","info","iframeId","TAGS","keys","tags","lookup","_","tag","encode","s","filter","createFormatAdvise","formatLogMessage","message","settings","createConsoleGroup","acg","consoleEnabled","parent","getMyId","isLogEnabled","setupConsole","enabled","expand","consoleGroup","output","outputSwitched","log","debug","warn","event","purge","endAutoGroup","errorBoundary","vInfo","ver","mode","NORMAL","formatLogMsg","formatAdvise","identity","localFormatAdvise","deprecateOption","defaults","messageData","count","newId","options","ensureHasId","iframe","consoleEvent","checkManualLogging","search","addEventListener","el","evt","removeEventListener","filterMsg","msg","index","dispatch","calleeMsg","logSent","route","displayMsg","HIGHLIGHT","FOREGROUND","postMessageTarget","sameOrigin","targetOrigin","trigger","sendTriggerMsg","eventName","autoResize","firstRun","tabVisible","getPaddingEnds","compStyle","top","bot","getBorderEnds","decodeMessage","data","height","ABOVE_TYPES","checkIframeExists","detectedIframe","isMessageFromIframe","checkAllowedOrigin","checkList","checkOrigin","origin","checkSingle","remoteHost","isMessageForUs","isMessageFromMetaParent","isMetaParent","checkSameDomain","checkVersion","version","on","funcName","onMessage","messageBody","getMessageBody","offset","lastMessage","onMouse","width","mousePos","coords","page","unsetPagePosition","getStoredPagePosition","setStoredPagePosition","position","getPagePosition","setPagePosition","setDimension","dimension","size","setSize","sizeHeight","sizeWidth","resizeIframe","disconnect","closeIframe","resetIframe","sendInfoToIframe","infoFunction","gate","requestType","throttle","frameId","gatedTrigger","stopInfoMonitor","stopFunction","startInfoMonitor","pending","sendInfo","stop","sendScroll","sendResize","setListener","listener","pageObserver","iframeObserver","start","getPageInfo","bodyPosition","iFramePosition","scrollY","scrollX","innerHeight","innerWidth","clientHeight","clientWidth","sendPageInfoToIframe","startPageInfoMonitor","stopPageInfoMonitor","getParentProps","scrollWidth","scrollHeight","offsetLeft","offsetTop","pageLeft","pageTop","scale","sendParentInfoToIframe","startParentInfoMonitor","stopParentInfoMonitor","getElementPosition","target","iframePosition","pagePosition","scrollToLink","y","scrollBy","scrollRequestFromChild","addOffset","reposition","newPosition","scrollParent","calcOffset","scrollTo","scrollToOffset","jumpToTarget","hash","jumpToParent","inPageLink","location","hashData","checkTitle","title","setTitle","l","p","z","t","getModeData","getModeLabel","setMode","u","v","vAdvised","vInfoDisable","checkMode","childMode","consoleClear","preModeCheck","enableVInfo","routeMessage","sendIframeReady","source","initChild","iframeReady","iframeListener","setupEventListenersOnce","shownDuplicateIdWarning","checkUniqueId","elements","elementList","DEPRECATED_REMOVE_LISTENERS","DEPRECATED_RESIZE","attachMethods","resizer","anchor","V1_PADDING","INTERVAL","RESIZE_FROM","PUBLIC_METHODS","createOutgoingMessage","bodyBackground","bodyMargin","bodyPadding","heightCalculationMethod","inPageLinks","license","logExpand","mouseEvents","offsetHeight","offsetWidth","tolerance","widthCalculationMethod","ZERO","setupBodyMargin","getOrigin","url","allowsScriptsAndOrigin","sandbox","showWarning","src","initialisedFirstPage","waitForLoad","warnOnNoResponse","warning","initialised","loadErrorShown","msgTimeout","warningTimeout","AFTER_EVENT_STACK","isLazy","isInit","eventType","checkReset","addLoadListener","noContent","srcdoc","sendInit","init","createInitChild","checkOptions","checkWarningTimeout","setOffsetSize","offsetSize","newOffset","setDirection","direction","getTargetOrigin","setTargetOrigin","getPostMessageTarget","updateOptionName","oldName","newName","updateOptionNames","hasMouseEvents","processOptions","YES","NO","OMIT","setScrolling","setup","setupIframe","startLogging","isLogString","connectResizer","setupLogging"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iframe-resizer/core",
3
- "version": "5.5.9",
3
+ "version": "6.0.0-beta.0",
4
4
  "license": "GPL-3.0",
5
5
  "homepage": "https://iframe-resizer.com",
6
6
  "author": {
@@ -20,6 +20,7 @@
20
20
  "main": "index.cjs.js",
21
21
  "module": "index.esm.js",
22
22
  "browser": "index.umd.js",
23
+ "types": "index.d.ts",
23
24
  "keywords": [
24
25
  "iframe",
25
26
  "Resizing",
package/types.d.ts ADDED
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Shared type definitions for iframe-resizer.
3
+ * Canonical source of truth for the parent-side public API.
4
+ */
5
+ export interface IFrameObject {
6
+ /** Remove the iframe from the page. */
7
+ close(): void;
8
+ /** Disconnect iframe-resizer from the iframe. */
9
+ disconnect(): void;
10
+ /** Move the page in the iframe to the specified anchor. */
11
+ moveToAnchor(anchor: string): void;
12
+ /** Tell iframe-resizer to re-measure the iframe. */
13
+ resize(): void;
14
+ /** Send a message to the iframe. */
15
+ sendMessage(message: any, targetOrigin?: string): void;
16
+ }
17
+ /** HTMLIFrameElement with the `iFrameResizer` control object attached. */
18
+ export interface IFrameComponent extends HTMLIFrameElement {
19
+ iFrameResizer: IFrameObject;
20
+ }
21
+ export interface IFrameMouseData {
22
+ iframe: IFrameComponent;
23
+ screenX: number;
24
+ screenY: number;
25
+ type: string;
26
+ }
27
+ export interface IFrameResizedData {
28
+ iframe: IFrameComponent;
29
+ height: number;
30
+ width: number;
31
+ type: string;
32
+ }
33
+ export interface IFrameMessageData {
34
+ iframe: IFrameComponent;
35
+ message: any;
36
+ }
37
+ export interface IFrameScrollData {
38
+ x: number;
39
+ y: number;
40
+ }
41
+ export interface IFrameOptions {
42
+ /** Override the body background style in the iframe. */
43
+ bodyBackground?: string | null;
44
+ /**
45
+ * Override the default body margin style in the iframe.
46
+ * A string can be any valid value for the CSS margin attribute, for example '8px 3em'.
47
+ * A number value is converted into px.
48
+ */
49
+ bodyMargin?: number | string | null;
50
+ /**
51
+ * Override the default body padding style in the iframe.
52
+ * A string can be any valid value for the CSS padding attribute, for example '8px 3em'.
53
+ * A number value is converted into px.
54
+ */
55
+ bodyPadding?: number | string | null;
56
+ /**
57
+ * When set to true, only allow incoming messages from the domain listed in the
58
+ * src property of the iframe tag. If your iframe navigates between different
59
+ * domains, ports or protocols; then you will need to provide an array of URLs
60
+ * or disable this option.
61
+ */
62
+ checkOrigin?: boolean | string[];
63
+ /** Set the resizing direction of the iframe. */
64
+ direction?: 'vertical' | 'horizontal' | 'none' | 'both';
65
+ /** Custom iframe id. */
66
+ id?: string;
67
+ /**
68
+ * When enabled, in-page linking inside the iframe and from the iframe to the
69
+ * parent page will be enabled.
70
+ */
71
+ inPageLinks?: boolean;
72
+ /** Set iframe-resizer license key. */
73
+ license: string;
74
+ /** Enable/disable console logging. */
75
+ log?: boolean | 'expanded' | 'collapsed' | number;
76
+ /** Set offset size of iframe content. */
77
+ offsetSize?: number;
78
+ /** Enable scroll bars in the iframe. */
79
+ scrolling?: boolean | 'auto' | 'omit';
80
+ /**
81
+ * Set the number of pixels the iframe content size has to change by,
82
+ * before triggering a resize of the iframe.
83
+ */
84
+ tolerance?: number;
85
+ /** Wait for the iframe to load before initializing. */
86
+ waitForLoad?: boolean;
87
+ /** Timeout in ms before warning if iframe has not responded. */
88
+ warningTimeout?: number;
89
+ /**
90
+ * Called before iframe is closed via parentIFrame.close() or
91
+ * iframe.iFrameResizer.close() methods. Returning false will prevent
92
+ * the iframe from closing.
93
+ */
94
+ onBeforeClose?(iframeId: string): boolean | void;
95
+ /** Called after iframe is closed. */
96
+ onAfterClose?(iframeId: string): void;
97
+ /** Called when pointer enters the iframe. */
98
+ onMouseEnter?(data: IFrameMouseData): void;
99
+ /** Called when pointer leaves the iframe. */
100
+ onMouseLeave?(data: IFrameMouseData): void;
101
+ /** Called when iframe-resizer has been initialized. */
102
+ onReady?(iframe: IFrameComponent): void;
103
+ /**
104
+ * Receive message posted from the iframe with the
105
+ * parentIFrame.sendMessage() method.
106
+ */
107
+ onMessage?(data: IFrameMessageData): void;
108
+ /**
109
+ * Called after iframe resized. Passes event data containing the iframe,
110
+ * height, width and the type of event that triggered the resize.
111
+ */
112
+ onResized?(data: IFrameResizedData): void;
113
+ /**
114
+ * Called before the page is repositioned after a request from the iframe.
115
+ * If this function returns false, it will stop the library from
116
+ * repositioning the page, so that you can implement your own scrolling.
117
+ */
118
+ onScroll?(data: IFrameScrollData): boolean;
119
+ }
120
+ export interface MessageData {
121
+ id: string;
122
+ iframe: HTMLIFrameElement;
123
+ height: number;
124
+ width: number;
125
+ type: string;
126
+ msg?: string;
127
+ message?: string;
128
+ mode?: string;
129
+ [key: string]: any;
130
+ }