lisn.js
Version:
Simply handle user gestures and actions. Includes widgets.
1 lines • 20.6 kB
Source Map (JSON)
{"version":3,"file":"settings.cjs","names":["MH","_interopRequireWildcard","require","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","settings","exports","preventExtensions","mainScrollableElementSelector","contentWrappingAllowed","pageLoadTimeout","autoWidgets","scrollbarHideNative","scrollbarOnMobile","scrollbarPositionH","scrollbarPositionV","scrollbarAutoHide","scrollbarClickScroll","scrollbarDragScroll","scrollbarUseHandle","sameHeightDiffTolerance","sameHeightResizeThreshold","sameHeightDebounceWindow","sameHeightMinGap","sameHeightMaxFreeR","sameHeightMaxWidthR","deviceBreakpoints","mobile","tablet","desktop","aspectRatioBreakpoints","tall","square","wide","lightThemeClassName","darkThemeClassName","deltaLineHeight","deltaPageWidth","deltaPageHeight","verbosityLevel","remoteLoggerURL","remoteLoggerOnMobileOnly"],"sources":["../../../src/ts/globals/settings.ts"],"sourcesContent":["/**\n * @module Settings\n */\n\nimport * as MH from \"@lisn/globals/minification-helpers\";\n\n/**\n * LISN's settings.\n * @readonly\n *\n * If you wish to modify them, then you need to do so immediately after loading\n * LISN before you instantiate any watchers, etc. For example:\n *\n * ```html\n * <!doctype html>\n * <html>\n * <head>\n * <meta charset=\"UTF-8\" />\n * <meta name=\"viewport\" content=\"width=device-width\" />\n * <script src=\"lisn.js\" charset=\"utf-8\"></script>\n * <script charset=\"utf-8\">\n * // modify LISN settings, for example:\n * LISN.settings.deviceBreakpoints.desktop = 1024;\n * </script>\n * </head>\n * <body>\n * </body>\n * </html>\n * ```\n */\nexport const settings = MH.preventExtensions({\n /**\n * A unique selector (preferably `#some-id`) for the element that holds the\n * main page content, if other than `document.body`.\n *\n * E.g. if your main content is inside a custom scrollable container, rather\n * than directly in `document.body`, then pass a selector for it here.\n *\n * The element must be scrollable, i.e. have a fixed size and `overflow: scroll`.\n *\n * **IMPORTANT:** You must set this before initializing any watchers, widgets,\n * etc. If you are using the HTML API, then you must set this before the\n * document `readyState` becomes interactive.\n *\n * @defaultValue null // document.scrollingElement\n * @category Generic\n */\n mainScrollableElementSelector: null as string | null,\n\n /**\n * This setting allows us to automatically wrap certain elements or groups of\n * elements into a single `div` or `span` element to allow for more reliable\n * or efficient working of certain features. In particular:\n *\n * 1. View tracking using relative offsets and a scrolling root **requires wrapping**\n *\n * When using view position tracking with a percentage offset specification\n * (e.g. `top: 50%`) _and_ a custom root element that is scrollable_ (and\n * obviously has a size smaller than the content), you **MUST** enable\n * content wrapping, otherwise the trigger offset elements cannot be\n * positioned relative to the scrolling _content size_.\n *\n * 2. Scroll tracking\n *\n * When using scroll tracking, including scrollbars, on a scrolling element\n * (that obviously has a size smaller than the content), it's recommended for\n * the content of the scrollable element to be wrapped in a single `div`\n * container, to allow for more efficient and reliable detection of changes\n * in the _scrollable content_ size.\n *\n * If content wrapping is disabled, when scroll tracking is used on a given\n * element (other than the root of the document), each of the immediate\n * children of the scrollable element have their sizes tracked, which could\n * lead to more resource usage.\n *\n * 3. Scrollbars on custom elements\n *\n * When you setup a {@link Widgets.Scrollbar} widget for a custom\n * scrollable element that may not be the main scrollable (and therefore\n * won't take up the full viewport all the time), then to be able to position\n * to scrollbar relative to the scrollable element, its content needs to be\n * wrapped.\n *\n * If this setting is OFF, then the scrollbars on custom elements have to\n * rely on position sticky which doesn't have as wide browser support as the\n * default option.\n *\n * 4. Animating on viewport enter/leave\n *\n * For elements that have transforms applied as part of an animation or\n * transition, if you wish to run or reverse the animation when the element\n * enters or leaves the viewport, then the transform can interfere with the\n * viewport tracking. For example, if undoing the animation as soon as the\n * element leaves the viewport makes it enter it again (because it's moved),\n * then this will result in a glitch.\n *\n * If content wrapping is disabled, then to get around such issues, a dummy\n * element is positioned on top of the actual element and is the one tracked\n * across the viewport instead. Either approach could cause issues depending\n * on your CSS, so it's your choice which one is applied.\n *\n * ----------\n *\n * **IMPORTANT:** Certain widgets always require wrapping of elements or their\n * children. This setting only applies in cases where wrapping is optional.\n * If you can, it's recommended to leave this setting ON. You can still try to\n * disable wrapping on a per-element basis by setting `data-lisn-no-wrap`\n * attribute on it. Alternatively, if the elements that need wrapping are\n * already wrapped in an element with a class `lisn-wrapper`, this will be\n * used as the wrapper.\n *\n * @defaultValue true\n * @category Generic\n */\n contentWrappingAllowed: true,\n // [TODO v2] rename this setting\n\n /**\n * The timeout in milliseconds for waiting for the `document.readyState` to\n * become `complete`. The timer begins _once the `readyState` becomes\n * `interactive`_.\n *\n * The page will be considered \"ready\" either when the `readyState` becomes\n * `complete` or this many milliseconds after it becomes `interactive`,\n * whichever is first.\n *\n * Set to 0 or a negative number to disable timeout.\n *\n * @defaultValue 2000 // i.e. 2s\n * @category Generic\n */\n pageLoadTimeout: 2000,\n\n /**\n * This enables LISN's HTML API. Then the page will be parsed (and watched\n * for dynamically added elements at any time) for any elements matching a\n * widget selector. Any element that has a matching CSS class or data\n * attribute will be setup according to the relevant widget, which may wrap,\n * clone or add attributes to the element.\n *\n * This is enabled by default for bundles, and disabled otherwise.\n *\n * **IMPORTANT:** You must set this before the document `readyState` becomes\n * interactive.\n *\n * @defaultValue `false` in general, but `true` in browser bundles\n * @category Widgets\n */\n autoWidgets: false,\n\n /**\n * Default setting for\n * {@link Widgets.ScrollbarConfig.hideNative | ScrollbarConfig.hideNative}.\n *\n * @defaultValue true\n * @category Widgets/Scrollbar\n */\n scrollbarHideNative: true,\n\n /**\n * Default setting for\n * {@link Widgets.ScrollbarConfig.onMobile | ScrollbarConfig.onMobile}.\n *\n * @defaultValue false\n * @category Widgets/Scrollbar\n */\n scrollbarOnMobile: false,\n\n /**\n * Default setting for\n * {@link Widgets.ScrollbarConfig.positionH | ScrollbarConfig.positionH}.\n *\n * @defaultValue \"bottom\"\n * @category Widgets/Scrollbar\n */\n scrollbarPositionH: \"bottom\",\n\n /**\n * Default setting for\n * {@link Widgets.ScrollbarConfig.positionV | ScrollbarConfig.positionV}.\n *\n * @defaultValue \"right\"\n * @category Widgets/Scrollbar\n */\n scrollbarPositionV: \"right\",\n\n /**\n * Default setting for\n * {@link Widgets.ScrollbarConfig.autoHide | ScrollbarConfig.autoHide}.\n *\n * @defaultValue -1\n * @category Widgets/Scrollbar\n */\n scrollbarAutoHide: -1,\n\n /**\n * Default setting for\n * {@link Widgets.ScrollbarConfig.clickScroll | ScrollbarConfig.clickScroll}.\n *\n * @defaultValue true\n * @category Widgets/Scrollbar\n */\n scrollbarClickScroll: true,\n\n /**\n * Default setting for\n * {@link Widgets.ScrollbarConfig.dragScroll | ScrollbarConfig.dragScroll}.\n *\n * @defaultValue true\n * @category Widgets/Scrollbar\n */\n scrollbarDragScroll: true,\n\n /**\n * Default setting for\n * {@link Widgets.ScrollbarConfig.useHandle | ScrollbarConfig.useHandle}.\n *\n * @defaultValue false\n * @category Widgets/Scrollbar\n */\n scrollbarUseHandle: false,\n\n /**\n * Default setting for\n * {@link Widgets.SameHeightConfig.diffTolerance | SameHeightConfig.diffTolerance}.\n *\n * @defaultValue 15\n * @category Widgets/SameHeight\n */\n sameHeightDiffTolerance: 15,\n\n /**\n * Default setting for\n * {@link Widgets.SameHeightConfig.resizeThreshold | SameHeightConfig.resizeThreshold}.\n *\n * @defaultValue 5\n * @category Widgets/SameHeight\n */\n sameHeightResizeThreshold: 5,\n\n /**\n * Default setting for\n * {@link Widgets.SameHeightConfig.debounceWindow | SameHeightConfig.debounceWindow}.\n *\n * @defaultValue 100\n * @category Widgets/SameHeight\n */\n sameHeightDebounceWindow: 100,\n\n /**\n * Default setting for\n * {@link Widgets.SameHeightConfig.minGap | SameHeightConfig.minGap}.\n *\n * @defaultValue 30\n * @category Widgets/SameHeight\n */\n sameHeightMinGap: 30,\n\n /**\n * Default setting for\n * {@link Widgets.SameHeightConfig.maxFreeR | SameHeightConfig.maxFreeR}.\n *\n * @defaultValue 0.4\n * @category Widgets/SameHeight\n */\n sameHeightMaxFreeR: 0.4,\n\n /**\n * Default setting for\n * {@link Widgets.SameHeightConfig.maxWidthR | SameHeightConfig.maxWidthR}.\n *\n * @defaultValue 1.7\n * @category Widgets/SameHeight\n */\n sameHeightMaxWidthR: 1.7,\n\n /**\n * Set custom device breakpoints as width in pixels.\n *\n * The value of each sets its lower limit, i.e. it specifies a device whose\n * width is larger than the given value (and up to the next larger one).\n *\n * If you specify only some of the below devices, then the other ones will\n * keep their default breakpoint values.\n *\n * Adding device types, other than the ones listed below is not supported.\n *\n * @category Device layouts\n */\n deviceBreakpoints: {\n /**\n * This should be left as 0 as it's the catch-all for anything narrower\n * than \"mobile-wide\".\n *\n * @defaultValue 0\n */\n mobile: 0,\n\n /**\n * Anything wider than the given value is \"mobile-wide\", up to the value of\n * \"tablet\".\n *\n * @defaultValue 576\n */\n \"mobile-wide\": 576,\n\n /**\n * Anything wider than the given value is \"tablet\", up to the value of\n * \"desktop\".\n *\n * @defaultValue 768\n */\n tablet: 768, // tablet is anything above this (up to desktop)\n\n /**\n * Anything wider than the given value is \"desktop\".\n *\n * @defaultValue 992\n */\n desktop: 992, // desktop is anything above this\n },\n\n /**\n * Set custom aspect ratio breakpoints (as ratio of width to height).\n *\n * The value of each sets its lower limit, i.e. it specifies an aspect ratio\n * that is wider than the given value (and up to the next wider one).\n *\n * If you specify only some of the below aspect ratios, then the other ones\n * will keep their default breakpoint values.\n *\n * Adding aspect ratio types, other than the ones listed below is not\n * supported.\n *\n * @category Device layouts\n */\n aspectRatioBreakpoints: {\n /**\n * This should be left as 0 as it's the catch-all for anything with\n * a narrower aspect ratio than \"tall\".\n *\n * @defaultValue 0\n */\n \"very-tall\": 0, // very tall is up to 9:16\n\n /**\n * Anything with a wider aspect ratio than the given value is \"tall\", up to\n * the value of \"square\".\n *\n * @defaultValue 9 / 16\n */\n tall: 9 / 16, // tall is between 9:16 and 3:4\n\n /**\n * Anything with a wider aspect ratio than the given value is \"square\", up\n * to the value of \"wide\".\n *\n * @defaultValue 3 / 4\n */\n square: 3 / 4, // square is between 3:4 and 4:3\n\n /**\n * Anything with a wider aspect ratio than the given value is \"wide\", up to\n * the value of \"very-wide\".\n *\n * @defaultValue 4 / 3\n */\n wide: 4 / 3, // wide is between 4:3 and 16:9\n\n /**\n * Anything with a wider aspect ratio than the given value is \"very-wide\".\n *\n * @defaultValue 16 / 9\n */\n \"very-wide\": 16 / 9, // very wide is above 16:9\n },\n\n /**\n * The CSS class that enables light theme.\n *\n * **IMPORTANT:** If you change this, you should also change the\n * `$light-theme-cls` variable in the SCSS configuration, or otherwise add the\n * following to your CSS:\n *\n * :root,\n * .custom-light-theme-cls {\n * --lisn-color-fg: some-dark-color;\n * --lisn-color-fg-t: some-dark-color-with-transparency;\n * --lisn-color-bg: some-light-color;\n * --lisn-color-bg-t: some-light-color-with-transparency;\n * }\n */\n lightThemeClassName: \"light-theme\",\n\n /**\n * The CSS class that enables dark theme.\n *\n * **IMPORTANT:** If you change this, you should also change the\n * `$dark-theme-cls` variable in the SCSS configuration, or otherwise add the\n * following to your CSS:\n *\n * .custom-dark-theme-cls {\n * --lisn-color-fg: some-light-color;\n * --lisn-color-fg-t: some-light-color-with-transparency;\n * --lisn-color-bg: some-dark-color;\n * --lisn-color-bg-t: some-dark-color-with-transparency;\n * }\n */\n darkThemeClassName: \"dark-theme\",\n\n /**\n * Used to determine the effective delta in pixels for gestures triggered by\n * some key (arrows) and wheel events (where the browser reports the delta\n * mode to be LINE).\n *\n * Value is in pixels.\n *\n * @defaultValue 40\n * @category Gestures\n */\n deltaLineHeight: 40,\n\n /**\n * Used to determine the effective delta in pixels for gestures triggered by\n * some wheel events (where the browser reports the delta mode to be PAGE).\n *\n * Value is in pixels.\n *\n * @defaultValue 1600\n * @category Gestures\n */\n deltaPageWidth: 1600,\n\n /**\n * Used to determine the effective delta in pixels for gestures triggered by\n * some key (PageUp/PageDown/Space) and wheel events (where the browser\n * reports the delta mode to be PAGE).\n *\n * Value is in pixels.\n *\n * @defaultValue 800\n * @category Gestures\n */\n deltaPageHeight: 800,\n\n /**\n * Controls the debugging verbosity level. Values from 0 (none) to 10 (insane)\n * are recognized.\n *\n * **Note:** Logging is not available in bundles except in the \"debug\" bundle.\n *\n * @defaultValue `0` except in the \"debug\" bundle where it defaults to 10\n * @category Logging\n */\n verbosityLevel: 0,\n\n /**\n * The URL of the remote logger to connect to. LISN uses\n * {@link https://socket.io/docs/v4/client-api/ | socket.io-client}\n * to talk to the client and emits messages on the following namespaces:\n *\n * - `console.debug`\n * - `console.log`\n * - `console.info`\n * - `console.warn`\n * - `console.error`\n *\n * There is a simple logging server that ships with LISN, see the source\n * code repository.\n *\n * You can always explicitly disable remote logging on a given page by\n * setting `disableRemoteLog=1` query parameter in the URL.\n *\n * **Note:** Logging is not available in bundles (except in the `debug` bundle).\n *\n * @defaultValue null\n * @category Logging\n */\n remoteLoggerURL: null as string | null,\n\n /**\n * Enable remote logging only on mobile devices.\n *\n * You can always disable remote logging for any page by setting\n * `disableRemoteLog=1` URL query parameter.\n *\n * **Note:** Logging is not available in bundles (except in the `debug` bundle).\n *\n * @defaultValue false\n * @category Logging\n */\n remoteLoggerOnMobileOnly: false,\n});\n\n// --------------------\n"],"mappings":";;;;;;AAIA,IAAAA,EAAA,GAAAC,uBAAA,CAAAC,OAAA;AAAyD,SAAAD,wBAAAE,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAJ,uBAAA,YAAAA,CAAAE,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAJzD;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMkB,QAAQ,GAAAC,OAAA,CAAAD,QAAA,GAAGtB,EAAE,CAACwB,iBAAiB,CAAC;EAC3C;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,6BAA6B,EAAE,IAAqB;EAEpD;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,sBAAsB,EAAE,IAAI;EAC5B;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,eAAe,EAAE,IAAI;EAErB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,WAAW,EAAE,KAAK;EAElB;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,mBAAmB,EAAE,IAAI;EAEzB;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,iBAAiB,EAAE,KAAK;EAExB;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,kBAAkB,EAAE,QAAQ;EAE5B;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,kBAAkB,EAAE,OAAO;EAE3B;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,iBAAiB,EAAE,CAAC,CAAC;EAErB;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,oBAAoB,EAAE,IAAI;EAE1B;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,mBAAmB,EAAE,IAAI;EAEzB;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,kBAAkB,EAAE,KAAK;EAEzB;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,uBAAuB,EAAE,EAAE;EAE3B;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,yBAAyB,EAAE,CAAC;EAE5B;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,wBAAwB,EAAE,GAAG;EAE7B;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,gBAAgB,EAAE,EAAE;EAEpB;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,kBAAkB,EAAE,GAAG;EAEvB;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,mBAAmB,EAAE,GAAG;EAExB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,iBAAiB,EAAE;IACjB;AACJ;AACA;AACA;AACA;AACA;IACIC,MAAM,EAAE,CAAC;IAET;AACJ;AACA;AACA;AACA;AACA;IACI,aAAa,EAAE,GAAG;IAElB;AACJ;AACA;AACA;AACA;AACA;IACIC,MAAM,EAAE,GAAG;IAAE;;IAEb;AACJ;AACA;AACA;AACA;IACIC,OAAO,EAAE,GAAG,CAAE;EAChB,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,sBAAsB,EAAE;IACtB;AACJ;AACA;AACA;AACA;AACA;IACI,WAAW,EAAE,CAAC;IAAE;;IAEhB;AACJ;AACA;AACA;AACA;AACA;IACIC,IAAI,EAAE,CAAC,GAAG,EAAE;IAAE;;IAEd;AACJ;AACA;AACA;AACA;AACA;IACIC,MAAM,EAAE,CAAC,GAAG,CAAC;IAAE;;IAEf;AACJ;AACA;AACA;AACA;AACA;IACIC,IAAI,EAAE,CAAC,GAAG,CAAC;IAAE;;IAEb;AACJ;AACA;AACA;AACA;IACI,WAAW,EAAE,EAAE,GAAG,CAAC,CAAE;EACvB,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,mBAAmB,EAAE,aAAa;EAElC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,kBAAkB,EAAE,YAAY;EAEhC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,eAAe,EAAE,EAAE;EAEnB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,cAAc,EAAE,IAAI;EAEpB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,eAAe,EAAE,GAAG;EAEpB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,cAAc,EAAE,CAAC;EAEjB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,eAAe,EAAE,IAAqB;EAEtC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,wBAAwB,EAAE;AAC5B,CAAC,CAAC;;AAEF","ignoreList":[]}