improve code

This commit is contained in:
Rene
2022-06-29 02:42:00 +02:00
parent f5ccc02959
commit 948560a71f
9 changed files with 120 additions and 101 deletions
+65 -43
View File
@@ -16,6 +16,8 @@ import {
getBoundingClientRect, getBoundingClientRect,
assignDeep, assignDeep,
cssProperty, cssProperty,
createCache,
equalXY,
} from 'support'; } from 'support';
import { import {
classNameEnvironment, classNameEnvironment,
@@ -26,59 +28,72 @@ import {
import { OSOptions, defaultOptions } from 'options'; import { OSOptions, defaultOptions } from 'options';
import { OSTargetElement, PartialOptions } from 'typings'; import { OSTargetElement, PartialOptions } from 'typings';
type StructureInitializationElementFn<T> = ((target: OSTargetElement) => HTMLElement | T) | T; type StructureInitializationStrategyElementFn<T> =
| ((target: OSTargetElement) => HTMLElement | T)
| T;
type ScrollbarsInitializationElementFn<T> = type ScrollbarsInitializationStrategyElementFn<T> =
| ((target: OSTargetElement, host: HTMLElement, viewport: HTMLElement) => HTMLElement | T) | ((target: OSTargetElement, host: HTMLElement, viewport: HTMLElement) => HTMLElement | T)
| T; | T;
/** /**
* A Static element is an element which MUST be generated. * A Static element is an element which MUST be generated.
* If null (or the returned result is null), the initialization function is generatig the element, otherwise * If null or undefined (or the returned result is null or undefined), the initialization function is generatig the element, otherwise
* the element returned by the function acts as the generated element. * the element returned by the function acts as the generated element.
*/ */
export type StructureInitializationStaticElement = StructureInitializationElementFn<null>; export type StructureInitializationStrategyStaticElement = StructureInitializationStrategyElementFn<
null | undefined
>;
/** /**
* A Dynamic element is an element which CAN be generated. * A Dynamic element is an element which CAN be generated.
* If null (or the returned result is null), then the default behavior is used.
* If boolean (or the returned result is boolean), the generation of the element is forced (or not). * If boolean (or the returned result is boolean), the generation of the element is forced (or not).
* If the function returns and element, the element returned by the function acts as the generated element. * If the function returns and element, the element returned by the function acts as the generated element.
*/ */
export type StructureInitializationDynamicElement = StructureInitializationElementFn< export type StructureInitializationStrategyDynamicElement =
boolean | null StructureInitializationStrategyElementFn<boolean>;
>;
export interface StructureInitializationStrategy { export interface StructureInitializationStrategy {
_host: StructureInitializationStaticElement; _host: StructureInitializationStrategyStaticElement;
_viewport: StructureInitializationStaticElement; _viewport: StructureInitializationStrategyStaticElement;
_padding: StructureInitializationDynamicElement; _padding: StructureInitializationStrategyDynamicElement;
_content: StructureInitializationDynamicElement; _content: StructureInitializationStrategyDynamicElement;
} }
export interface ScrollbarsInitializationStrategy { export interface ScrollbarsInitializationStrategy {
_scrollbarsSlot: ScrollbarsInitializationElementFn<null | undefined>; /**
* The scrollbars slot. If null or undefined (or the returned result is null or undefined), the initialization function is deciding the element, otherwise
* the element returned by the function acts as the scrollbars slot.
*/
_scrollbarsSlot: ScrollbarsInitializationStrategyElementFn<null | undefined>;
} }
export interface InitializationStrategy export interface InitializationStrategy
extends StructureInitializationStrategy, extends StructureInitializationStrategy,
ScrollbarsInitializationStrategy {} ScrollbarsInitializationStrategy {}
export type DefaultInitializationStrategy = {
[K in keyof InitializationStrategy]: Extract<
InitializationStrategy[K],
boolean | null | undefined
>;
};
export type OnEnvironmentChanged = (env: Environment) => void; export type OnEnvironmentChanged = (env: Environment) => void;
export interface Environment { export interface Environment {
_nativeScrollbarSize: XY; readonly _nativeScrollbarSize: XY;
_nativeScrollbarIsOverlaid: XY<boolean>; readonly _nativeScrollbarIsOverlaid: XY<boolean>;
_nativeScrollbarStyling: boolean; readonly _nativeScrollbarStyling: boolean;
_rtlScrollBehavior: { n: boolean; i: boolean }; readonly _rtlScrollBehavior: { n: boolean; i: boolean };
_flexboxGlue: boolean; readonly _flexboxGlue: boolean;
_cssCustomProperties: boolean; readonly _cssCustomProperties: boolean;
readonly _defaultInitializationStrategy: DefaultInitializationStrategy;
readonly _defaultDefaultOptions: OSOptions;
_addListener(listener: OnEnvironmentChanged): () => void; _addListener(listener: OnEnvironmentChanged): () => void;
_getInitializationStrategy(): InitializationStrategy; _getInitializationStrategy(): InitializationStrategy;
_setInitializationStrategy(newInitializationStrategy: Partial<InitializationStrategy>): void; _setInitializationStrategy(newInitializationStrategy: Partial<InitializationStrategy>): void;
_getDefaultOptions(): OSOptions; _getDefaultOptions(): OSOptions;
_setDefaultOptions(newDefaultOptions: PartialOptions<OSOptions>): void; _setDefaultOptions(newDefaultOptions: PartialOptions<OSOptions>): void;
_defaultInitializationStrategy: InitializationStrategy;
_defaultDefaultOptions: OSOptions;
} }
let environmentInstance: Environment; let environmentInstance: Environment;
@@ -168,14 +183,13 @@ const getWindowDPR = (): number => {
return window.devicePixelRatio || dDPI / sDPI; return window.devicePixelRatio || dDPI / sDPI;
}; };
// init function decides for all values
const getDefaultInitializationStrategy = ( const getDefaultInitializationStrategy = (
nativeScrollbarStyling: boolean nativeScrollbarStyling: boolean
): InitializationStrategy => ({ ): DefaultInitializationStrategy => ({
_host: null, _host: null,
_viewport: null, _viewport: null,
_padding: null, _padding: !nativeScrollbarStyling,
_content: null, _content: false,
_scrollbarsSlot: null, _scrollbarsSlot: null,
}); });
@@ -185,15 +199,18 @@ const createEnvironment = (): Environment => {
const envElm = envDOM[0] as HTMLElement; const envElm = envDOM[0] as HTMLElement;
const envChildElm = envElm.firstChild as HTMLElement; const envChildElm = envElm.firstChild as HTMLElement;
const onChangedListener: Set<OnEnvironmentChanged> = new Set(); const onChangedListener: Set<OnEnvironmentChanged> = new Set();
const nativeScrollbarSize = getNativeScrollbarSize(body, envElm); const [updateNativeScrollbarSizeCache, getNativeScrollbarSizeCache] = createCache({
_initialValue: getNativeScrollbarSize(body, envElm),
_equal: equalXY,
});
const [nativeScrollbarSize] = getNativeScrollbarSizeCache();
const nativeScrollbarStyling = getNativeScrollbarStyling(envElm); const nativeScrollbarStyling = getNativeScrollbarStyling(envElm);
const nativeScrollbarIsOverlaid = { const nativeScrollbarIsOverlaid = {
x: nativeScrollbarSize.x === 0, x: nativeScrollbarSize.x === 0,
y: nativeScrollbarSize.y === 0, y: nativeScrollbarSize.y === 0,
}; };
const defaultInitializationStrategy = getDefaultInitializationStrategy(nativeScrollbarStyling); const initializationStrategy = getDefaultInitializationStrategy(nativeScrollbarStyling);
let initializationStrategy = defaultInitializationStrategy; const defaultDefaultOptions = assignDeep({}, defaultOptions);
let defaultDefaultOptions = defaultOptions;
const env: Environment = { const env: Environment = {
_nativeScrollbarSize: nativeScrollbarSize, _nativeScrollbarSize: nativeScrollbarSize,
@@ -206,16 +223,24 @@ const createEnvironment = (): Environment => {
onChangedListener.add(listener); onChangedListener.add(listener);
return () => onChangedListener.delete(listener); return () => onChangedListener.delete(listener);
}, },
_getInitializationStrategy: () => ({ ...initializationStrategy }), _getInitializationStrategy: assignDeep<InitializationStrategy, InitializationStrategy>.bind(
0,
{} as InitializationStrategy,
initializationStrategy
),
_setInitializationStrategy(newInitializationStrategy) { _setInitializationStrategy(newInitializationStrategy) {
initializationStrategy = assignDeep({}, initializationStrategy, newInitializationStrategy); assignDeep(initializationStrategy, newInitializationStrategy);
}, },
_getDefaultOptions: () => ({ ...defaultDefaultOptions }), _getDefaultOptions: assignDeep<OSOptions, OSOptions>.bind(
0,
{} as OSOptions,
defaultDefaultOptions
),
_setDefaultOptions(newDefaultOptions) { _setDefaultOptions(newDefaultOptions) {
defaultDefaultOptions = assignDeep({}, defaultDefaultOptions, newDefaultOptions); assignDeep(defaultDefaultOptions, newDefaultOptions);
}, },
_defaultInitializationStrategy: defaultInitializationStrategy, _defaultInitializationStrategy: assignDeep({}, initializationStrategy),
_defaultDefaultOptions: defaultDefaultOptions, _defaultDefaultOptions: assignDeep({}, defaultDefaultOptions),
}; };
removeAttr(envElm, 'style'); removeAttr(envElm, 'style');
@@ -224,7 +249,6 @@ const createEnvironment = (): Environment => {
if (!nativeScrollbarStyling && (!nativeScrollbarIsOverlaid.x || !nativeScrollbarIsOverlaid.y)) { if (!nativeScrollbarStyling && (!nativeScrollbarIsOverlaid.x || !nativeScrollbarIsOverlaid.y)) {
let size = windowSize(); let size = windowSize();
let dpr = getWindowDPR(); let dpr = getWindowDPR();
let scrollbarSize = nativeScrollbarSize;
window.addEventListener('resize', () => { window.addEventListener('resize', () => {
if (onChangedListener.size) { if (onChangedListener.size) {
@@ -251,18 +275,16 @@ const createEnvironment = (): Environment => {
const isZoom = deltaIsBigger && difference && dprChanged; const isZoom = deltaIsBigger && difference && dprChanged;
if (isZoom) { if (isZoom) {
const newScrollbarSize = getNativeScrollbarSize(body, envElm); const [scrollbarSize, scrollbarSizeChanged] = updateNativeScrollbarSizeCache(
// keep the object same! getNativeScrollbarSize(body, envElm)
environmentInstance._nativeScrollbarSize.x = newScrollbarSize.x; );
environmentInstance._nativeScrollbarSize.y = newScrollbarSize.y;
assignDeep(environmentInstance._nativeScrollbarSize, scrollbarSize); // keep the object same!
removeElements(envElm); removeElements(envElm);
if (scrollbarSize.x !== newScrollbarSize.x || scrollbarSize.y !== newScrollbarSize.y) { if (scrollbarSizeChanged) {
runEach(onChangedListener); runEach(onChangedListener);
} }
scrollbarSize = newScrollbarSize;
} }
size = sizeNew; size = sizeNew;
+3 -1
View File
@@ -1,5 +1,5 @@
import { assignDeep, each, isObject, keys, isArray, hasOwnProperty, isFunction } from 'support'; import { assignDeep, each, isObject, keys, isArray, hasOwnProperty, isFunction } from 'support';
import { PartialOptions } from 'typings'; import { PartialOptions, ReadonlyOptions } from 'typings';
const stringify = (value: any) => const stringify = (value: any) =>
JSON.stringify(value, (_, val) => { JSON.stringify(value, (_, val) => {
@@ -83,6 +83,8 @@ export interface OSOptions {
*/ */
} }
export type ReadonlyOSOptions = ReadonlyOptions<OSOptions>;
export interface OverflowChangedArgs { export interface OverflowChangedArgs {
x: boolean; x: boolean;
y: boolean; y: boolean;
@@ -1,7 +1,7 @@
import { OSTarget, OSInitializationObject, PartialOptions } from 'typings'; import { OSTarget, OSInitializationObject, PartialOptions } from 'typings';
import { assignDeep, isEmptyObject, each, isFunction, keys, isHTMLElement, WH, XY } from 'support'; import { assignDeep, isEmptyObject, each, isFunction, keys, isHTMLElement, WH, XY } from 'support';
import { createStructureSetup, createScrollbarsSetup } from 'setups'; import { createStructureSetup, createScrollbarsSetup } from 'setups';
import { getOptionsDiff, OSOptions } from 'options'; import { getOptionsDiff, OSOptions, ReadonlyOSOptions } from 'options';
import { getEnvironment } from 'environment'; import { getEnvironment } from 'environment';
import { import {
getPlugins, getPlugins,
@@ -78,7 +78,11 @@ export const OverlayScrollbars: OverlayScrollbarsStatic = (
const validate = optionsValidationPlugin && optionsValidationPlugin._; const validate = optionsValidationPlugin && optionsValidationPlugin._;
return validate ? validate(opts, true) : opts; return validate ? validate(opts, true) : opts;
}; };
const currentOptions: OSOptions = assignDeep({}, _getDefaultOptions(), validateOptions(options)); const currentOptions: ReadonlyOSOptions = assignDeep(
{},
_getDefaultOptions(),
validateOptions(options)
);
const [addEvent, removeEvent, triggerEvent] = createOSEventListenerHub(eventListeners); const [addEvent, removeEvent, triggerEvent] = createOSEventListenerHub(eventListeners);
if ( if (
@@ -4,7 +4,7 @@ import {
ScrollbarsSetupElementsObj, ScrollbarsSetupElementsObj,
} from 'setups/scrollbarsSetup/scrollbarsSetup.elements'; } from 'setups/scrollbarsSetup/scrollbarsSetup.elements';
import type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements'; import type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';
import type { OSOptions } from 'options'; import type { ReadonlyOSOptions } from 'options';
import type { Setup } from 'setups'; import type { Setup } from 'setups';
import type { OSTarget } from 'typings'; import type { OSTarget } from 'typings';
@@ -17,7 +17,7 @@ export interface ScrollbarsSetupStaticState {
export const createScrollbarsSetup = ( export const createScrollbarsSetup = (
target: OSTarget, target: OSTarget,
options: OSOptions, options: ReadonlyOSOptions,
structureSetupElements: StructureSetupElementsObj structureSetupElements: StructureSetupElementsObj
): Setup<ScrollbarsSetupState, ScrollbarsSetupStaticState> => { ): Setup<ScrollbarsSetupState, ScrollbarsSetupStaticState> => {
const state = createState({}); const state = createState({});
@@ -1,5 +1,5 @@
import { assignDeep, hasOwnProperty } from 'support'; import { assignDeep, hasOwnProperty } from 'support';
import type { OSOptions } from 'options'; import type { OSOptions, ReadonlyOSOptions } from 'options';
import type { PartialOptions } from 'typings'; import type { PartialOptions } from 'typings';
export type SetupElements<T extends Record<string, any>> = [elements: T, destroy: () => void]; export type SetupElements<T extends Record<string, any>> = [elements: T, destroy: () => void];
@@ -35,7 +35,7 @@ const getPropByPath = <T>(obj: any, path: string): T =>
export const createOptionCheck = export const createOptionCheck =
( (
options: OSOptions, options: ReadonlyOSOptions,
changedOptions: PartialOptions<OSOptions>, changedOptions: PartialOptions<OSOptions>,
force?: boolean force?: boolean
): SetupUpdateCheckOption => ): SetupUpdateCheckOption =>
@@ -28,9 +28,8 @@ import {
} from 'classnames'; } from 'classnames';
import { import {
getEnvironment, getEnvironment,
StructureInitializationStaticElement, StructureInitializationStrategyStaticElement,
StructureInitializationDynamicElement, StructureInitializationStrategyDynamicElement,
StructureInitializationStrategy,
} from 'environment'; } from 'environment';
import { OSTarget, OSTargetElement, StructureInitialization } from 'typings'; import { OSTarget, OSTargetElement, StructureInitialization } from 'typings';
@@ -81,20 +80,20 @@ const createUniqueViewportArrangeElement = (): HTMLStyleElement | false => {
const staticCreationFromStrategy = ( const staticCreationFromStrategy = (
target: OSTargetElement, target: OSTargetElement,
initializationValue: HTMLElement | undefined, initializationValue: HTMLElement | undefined,
strategy: StructureInitializationStaticElement, strategy: StructureInitializationStrategyStaticElement,
elementClass: string elementClass: string
): HTMLElement => { ): HTMLElement => {
const result = const result =
initializationValue || (isFunction(strategy) ? strategy(target) : (strategy as null)); initializationValue ||
(isFunction(strategy) ? strategy(target) : (strategy as null | undefined));
return result || createDiv(elementClass); return result || createDiv(elementClass);
}; };
const dynamicCreationFromStrategy = ( const dynamicCreationFromStrategy = (
target: OSTargetElement, target: OSTargetElement,
initializationValue: HTMLElement | boolean | undefined, initializationValue: HTMLElement | boolean | undefined,
strategy: StructureInitializationDynamicElement, strategy: StructureInitializationStrategyDynamicElement,
elementClass: string, elementClass: string
defaultValue: boolean
): HTMLElement | false => { ): HTMLElement | false => {
const takeInitializationValue = isBoolean(initializationValue) || initializationValue; const takeInitializationValue = isBoolean(initializationValue) || initializationValue;
const result = takeInitializationValue const result = takeInitializationValue
@@ -103,10 +102,6 @@ const dynamicCreationFromStrategy = (
? strategy(target) ? strategy(target)
: strategy; : strategy;
if (result === null) {
return defaultValue ? createDiv(elementClass) : false;
}
return result === true ? createDiv(elementClass) : result; return result === true ? createDiv(elementClass) : result;
}; };
@@ -117,7 +112,7 @@ export const createStructureSetupElements = (target: OSTarget): StructureSetupEl
_viewport: viewportInitializationStrategy, _viewport: viewportInitializationStrategy,
_padding: paddingInitializationStrategy, _padding: paddingInitializationStrategy,
_content: contentInitializationStrategy, _content: contentInitializationStrategy,
} = _getInitializationStrategy() as StructureInitializationStrategy; } = _getInitializationStrategy();
const targetIsElm = isHTMLElement(target); const targetIsElm = isHTMLElement(target);
const targetStructureInitialization = target as StructureInitialization; const targetStructureInitialization = target as StructureInitialization;
const targetElement = targetIsElm const targetElement = targetIsElm
@@ -125,7 +120,7 @@ export const createStructureSetupElements = (target: OSTarget): StructureSetupEl
: targetStructureInitialization.target; : targetStructureInitialization.target;
const isTextarea = is(targetElement, 'textarea'); const isTextarea = is(targetElement, 'textarea');
const isBody = !isTextarea && is(targetElement, 'body'); const isBody = !isTextarea && is(targetElement, 'body');
const ownerDocument: HTMLDocument = targetElement!.ownerDocument; const ownerDocument = targetElement!.ownerDocument;
const bodyElm = ownerDocument.body as HTMLBodyElement; const bodyElm = ownerDocument.body as HTMLBodyElement;
const wnd = ownerDocument.defaultView as Window; const wnd = ownerDocument.defaultView as Window;
const evaluatedTargetObj: StructureSetupElementsObj = { const evaluatedTargetObj: StructureSetupElementsObj = {
@@ -148,15 +143,13 @@ export const createStructureSetupElements = (target: OSTarget): StructureSetupEl
targetElement, targetElement,
targetStructureInitialization.padding, targetStructureInitialization.padding,
paddingInitializationStrategy, paddingInitializationStrategy,
classNamePadding, classNamePadding
!_nativeScrollbarStyling // default value for padding
), ),
_content: dynamicCreationFromStrategy( _content: dynamicCreationFromStrategy(
targetElement, targetElement,
targetStructureInitialization.content, targetStructureInitialization.content,
contentInitializationStrategy, contentInitializationStrategy,
classNameContent, classNameContent
false // default value for content
), ),
_viewportArrange: createUniqueViewportArrangeElement(), _viewportArrange: createUniqueViewportArrangeElement(),
_windowElm: wnd, _windowElm: wnd,
@@ -6,7 +6,7 @@ import { createStructureSetupObservers } from 'setups/structureSetup/structureSe
import type { StructureSetupUpdateHints } from 'setups/structureSetup/structureSetup.update'; import type { StructureSetupUpdateHints } from 'setups/structureSetup/structureSetup.update';
import type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements'; import type { StructureSetupElementsObj } from 'setups/structureSetup/structureSetup.elements';
import type { TRBL, CacheValues, XY, WH } from 'support'; import type { TRBL, CacheValues, XY, WH } from 'support';
import type { OSOptions } from 'options'; import type { OSOptions, ReadonlyOSOptions } from 'options';
import type { Setup } from 'setups'; import type { Setup } from 'setups';
import type { OSTarget, PartialOptions, StyleObject } from 'typings'; import type { OSTarget, PartialOptions, StyleObject } from 'typings';
@@ -64,7 +64,7 @@ const initialStructureSetupUpdateState: StructureSetupState = {
export const createStructureSetup = ( export const createStructureSetup = (
target: OSTarget, target: OSTarget,
options: OSOptions options: ReadonlyOSOptions
): Setup<StructureSetupState, StructureSetupStaticState> => { ): Setup<StructureSetupState, StructureSetupStaticState> => {
const checkOptionsFallback = createOptionCheck(options, {}); const checkOptionsFallback = createOptionCheck(options, {});
const state = createState(initialStructureSetupUpdateState); const state = createState(initialStructureSetupUpdateState);
@@ -2,6 +2,10 @@ export type PartialOptions<T> = {
[P in keyof T]?: T[P] extends Record<string, unknown> ? PartialOptions<T[P]> : T[P]; [P in keyof T]?: T[P] extends Record<string, unknown> ? PartialOptions<T[P]> : T[P];
}; };
export type ReadonlyOptions<T> = {
readonly [P in keyof T]: T[P] extends Record<string, unknown> ? ReadonlyOptions<T[P]> : T[P];
};
export type PlainObject<T = any> = { [name: string]: T }; export type PlainObject<T = any> = { [name: string]: T };
export type StyleObject<CustomCssProps = ''> = { export type StyleObject<CustomCssProps = ''> = {
@@ -1,7 +1,7 @@
import { import {
Environment, Environment,
StructureInitializationStaticElement, StructureInitializationStrategyStaticElement,
StructureInitializationDynamicElement, StructureInitializationStrategyDynamicElement,
} from 'environment'; } from 'environment';
import { OSTarget, StructureInitialization } from 'typings'; import { OSTarget, StructureInitialization } from 'typings';
import { import {
@@ -167,8 +167,9 @@ const assertCorrectSetupElements = (
elm: Element | null, elm: Element | null,
input: HTMLElement | boolean | undefined, input: HTMLElement | boolean | undefined,
isStaticStrategy: boolean, isStaticStrategy: boolean,
strategy: StructureInitializationStaticElement | StructureInitializationDynamicElement, strategy:
id: string | StructureInitializationStrategyStaticElement
| StructureInitializationStrategyDynamicElement
) => { ) => {
if (input) { if (input) {
expect(elm).toBeTruthy(); expect(elm).toBeTruthy();
@@ -178,7 +179,7 @@ const assertCorrectSetupElements = (
} }
if (input === undefined) { if (input === undefined) {
if (isStaticStrategy) { if (isStaticStrategy) {
strategy = strategy as StructureInitializationStaticElement; strategy = strategy as StructureInitializationStrategyStaticElement;
if (typeof strategy === 'function') { if (typeof strategy === 'function') {
const result = strategy(target); const result = strategy(target);
if (result) { if (result) {
@@ -190,21 +191,14 @@ const assertCorrectSetupElements = (
expect(elm).toBeTruthy(); expect(elm).toBeTruthy();
} }
} else { } else {
strategy = strategy as StructureInitializationDynamicElement; strategy = strategy as StructureInitializationStrategyDynamicElement;
const expectDefaultValue = () => { expect(strategy).not.toBe(null);
if (id === 'padding') { expect(strategy).not.toBe(undefined);
if (_nativeScrollbarStyling) {
expect(elm).toBeFalsy();
} else {
expect(elm).toBeTruthy();
}
} else if (id === 'content') {
expect(elm).toBeFalsy();
}
};
if (typeof strategy === 'function') { if (typeof strategy === 'function') {
const result = strategy(target); const result = strategy(target);
const resultIsBoolean = typeof result === 'boolean'; const resultIsBoolean = typeof result === 'boolean';
expect(result).not.toBe(null);
expect(result).not.toBe(undefined);
if (resultIsBoolean) { if (resultIsBoolean) {
if (result) { if (result) {
expect(elm).toBeTruthy(); expect(elm).toBeTruthy();
@@ -213,8 +207,6 @@ const assertCorrectSetupElements = (
} }
} else if (result) { } else if (result) {
expect(elm).toBe(result); expect(elm).toBe(result);
} else {
expectDefaultValue();
} }
} else { } else {
const strategyIsBoolean = typeof strategy === 'boolean'; const strategyIsBoolean = typeof strategy === 'boolean';
@@ -224,8 +216,6 @@ const assertCorrectSetupElements = (
} else { } else {
expect(elm).toBeFalsy(); expect(elm).toBeFalsy();
} }
} else {
expectDefaultValue();
} }
} }
} }
@@ -240,10 +230,10 @@ const assertCorrectSetupElements = (
} }
if (inputIsElement) { if (inputIsElement) {
checkStrategyDependendElements(padding, undefined, false, paddingInitStrategy, 'padding'); checkStrategyDependendElements(padding, undefined, false, paddingInitStrategy);
checkStrategyDependendElements(content, undefined, false, contentInitStrategy, 'content'); checkStrategyDependendElements(content, undefined, false, contentInitStrategy);
checkStrategyDependendElements(viewport, undefined, true, viewportInitStrategy, 'viewport'); checkStrategyDependendElements(viewport, undefined, true, viewportInitStrategy);
checkStrategyDependendElements(host, undefined, true, hostInitStrategy, 'host'); checkStrategyDependendElements(host, undefined, true, hostInitStrategy);
} else { } else {
const { const {
padding: inputPadding, padding: inputPadding,
@@ -251,10 +241,10 @@ const assertCorrectSetupElements = (
viewport: inputViewport, viewport: inputViewport,
host: inputHost, host: inputHost,
} = inputAsObj; } = inputAsObj;
checkStrategyDependendElements(padding, inputPadding, false, paddingInitStrategy, 'padding'); checkStrategyDependendElements(padding, inputPadding, false, paddingInitStrategy);
checkStrategyDependendElements(content, inputContent, false, contentInitStrategy, 'content'); checkStrategyDependendElements(content, inputContent, false, contentInitStrategy);
checkStrategyDependendElements(viewport, inputViewport, true, viewportInitStrategy, 'viewport'); checkStrategyDependendElements(viewport, inputViewport, true, viewportInitStrategy);
checkStrategyDependendElements(host, inputHost, true, hostInitStrategy, 'host'); checkStrategyDependendElements(host, inputHost, true, hostInitStrategy);
} }
return [elements, destroy]; return [elements, destroy];
@@ -327,8 +317,12 @@ const envInitStrategyAssigned = {
_getInitializationStrategy: () => ({ _getInitializationStrategy: () => ({
_host: () => document.querySelector('#host1') as HTMLElement, _host: () => document.querySelector('#host1') as HTMLElement,
_viewport: (target: HTMLElement) => target.querySelector('#viewport') as HTMLElement, _viewport: (target: HTMLElement) => target.querySelector('#viewport') as HTMLElement,
_content: (target: HTMLElement) => target.querySelector('#content') as HTMLElement, _content: (target: HTMLElement) =>
_padding: (target: HTMLElement) => target.querySelector('#padding') as HTMLElement, target.querySelector<HTMLElement>('#content') ||
env._defaultInitializationStrategy._content,
_padding: (target: HTMLElement) =>
target.querySelector<HTMLElement>('#padding') ||
env._defaultInitializationStrategy._padding,
_scrollbarsSlot: null, _scrollbarsSlot: null,
}), }),
}, },