mirror of
https://github.com/tenrok/OverlayScrollbars.git
synced 2026-06-22 09:20:36 +03:00
improve code
This commit is contained in:
+3
-1
@@ -252,7 +252,9 @@ export const scrollbarsHidingPlugin: Plugin<ScrollbarsHidingPluginInstance> = {
|
|||||||
h: sizeNew.h - size.h,
|
h: sizeNew.h - size.h,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (deltaSize.w === 0 && deltaSize.h === 0) return;
|
if (deltaSize.w === 0 && deltaSize.h === 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const deltaAbsSize = {
|
const deltaAbsSize = {
|
||||||
w: abs(deltaSize.w),
|
w: abs(deltaSize.w),
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import {
|
|||||||
fractionalSize,
|
fractionalSize,
|
||||||
isFunction,
|
isFunction,
|
||||||
ResizeObserverConstructor,
|
ResizeObserverConstructor,
|
||||||
|
closest,
|
||||||
} from 'support';
|
} from 'support';
|
||||||
import { getEnvironment } from 'environment';
|
import { getEnvironment } from 'environment';
|
||||||
import {
|
import {
|
||||||
@@ -24,6 +25,7 @@ import {
|
|||||||
dataValueHostOverflowVisible,
|
dataValueHostOverflowVisible,
|
||||||
classNameViewport,
|
classNameViewport,
|
||||||
classNameOverflowVisible,
|
classNameOverflowVisible,
|
||||||
|
classNameScrollbar,
|
||||||
} from 'classnames';
|
} from 'classnames';
|
||||||
import { createSizeObserver, SizeObserverCallbackParams } from 'observers/sizeObserver';
|
import { createSizeObserver, SizeObserverCallbackParams } from 'observers/sizeObserver';
|
||||||
import { createTrinsicObserver } from 'observers/trinsicObserver';
|
import { createTrinsicObserver } from 'observers/trinsicObserver';
|
||||||
@@ -231,9 +233,13 @@ export const createStructureSetupObservers = (
|
|||||||
const { target, attributeName } = mutation;
|
const { target, attributeName } = mutation;
|
||||||
const ignore =
|
const ignore =
|
||||||
!isNestedTarget && attributeName
|
!isNestedTarget && attributeName
|
||||||
? liesBetween(target as Element, hostSelector, viewportSelector)
|
? liesBetween(target, hostSelector, viewportSelector)
|
||||||
: false;
|
: false;
|
||||||
return ignore || !!ignoreMutationFromOptions(mutation);
|
return (
|
||||||
|
ignore ||
|
||||||
|
!!closest(target, `.${classNameScrollbar}`) || // ignore explicitely all scrollbar elements
|
||||||
|
!!ignoreMutationFromOptions(mutation)
|
||||||
|
);
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -2,21 +2,25 @@ import { isString } from 'support/utils/types';
|
|||||||
import { each } from 'support/utils/array';
|
import { each } from 'support/utils/array';
|
||||||
import { keys } from 'support/utils/object';
|
import { keys } from 'support/utils/object';
|
||||||
|
|
||||||
|
type ClassContainingElement = Node | Element | false | null | undefined;
|
||||||
|
type ClassName = string | false | null | undefined;
|
||||||
|
|
||||||
const rnothtmlwhite = /[^\x20\t\r\n\f]+/g;
|
const rnothtmlwhite = /[^\x20\t\r\n\f]+/g;
|
||||||
const classListAction = (
|
const classListAction = (
|
||||||
elm: Element | false | null | undefined,
|
elm: ClassContainingElement,
|
||||||
className: string | false | null | undefined,
|
className: ClassName,
|
||||||
action: (elmClassList: DOMTokenList, clazz: string) => boolean | void
|
action: (elmClassList: DOMTokenList, clazz: string) => boolean | void
|
||||||
): boolean => {
|
): boolean => {
|
||||||
|
const classList = elm && (elm as Element).classList;
|
||||||
let clazz: string;
|
let clazz: string;
|
||||||
let i = 0;
|
let i = 0;
|
||||||
let result = false;
|
let result = false;
|
||||||
|
|
||||||
if (elm && className && isString(className)) {
|
if (classList && className && isString(className)) {
|
||||||
const classes: Array<string> = className.match(rnothtmlwhite) || [];
|
const classes: Array<string> = className.match(rnothtmlwhite) || [];
|
||||||
result = classes.length > 0;
|
result = classes.length > 0;
|
||||||
while ((clazz = classes[i++])) {
|
while ((clazz = classes[i++])) {
|
||||||
result = !!action(elm.classList, clazz) && result;
|
result = !!action(classList, clazz) && result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
@@ -27,20 +31,15 @@ const classListAction = (
|
|||||||
* @param elm The element.
|
* @param elm The element.
|
||||||
* @param className The class name(s).
|
* @param className The class name(s).
|
||||||
*/
|
*/
|
||||||
export const hasClass = (
|
export const hasClass = (elm: ClassContainingElement, className: ClassName): boolean =>
|
||||||
elm: Element | false | null | undefined,
|
classListAction(elm, className, (classList, clazz) => classList.contains(clazz));
|
||||||
className: string | false | null | undefined
|
|
||||||
): boolean => classListAction(elm, className, (classList, clazz) => classList.contains(clazz));
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes the given class name(s) from the given element.
|
* Removes the given class name(s) from the given element.
|
||||||
* @param elm The element.
|
* @param elm The element.
|
||||||
* @param className The class name(s) which shall be removed. (separated by spaces)
|
* @param className The class name(s) which shall be removed. (separated by spaces)
|
||||||
*/
|
*/
|
||||||
export const removeClass = (
|
export const removeClass = (elm: ClassContainingElement, className: ClassName): void => {
|
||||||
elm: Element | false | null | undefined,
|
|
||||||
className: string | false | null | undefined
|
|
||||||
): void => {
|
|
||||||
classListAction(elm, className, (classList, clazz) => classList.remove(clazz));
|
classListAction(elm, className, (classList, clazz) => classList.remove(clazz));
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -50,10 +49,7 @@ export const removeClass = (
|
|||||||
* @param className The class name(s) which shall be added. (separated by spaces)
|
* @param className The class name(s) which shall be added. (separated by spaces)
|
||||||
* @returns A function which removes the added class name(s).
|
* @returns A function which removes the added class name(s).
|
||||||
*/
|
*/
|
||||||
export const addClass = (
|
export const addClass = (elm: ClassContainingElement, className: ClassName): (() => void) => {
|
||||||
elm: Element | false | null | undefined,
|
|
||||||
className: string | false | null | undefined
|
|
||||||
): (() => void) => {
|
|
||||||
classListAction(elm, className, (classList, clazz) => classList.add(clazz));
|
classListAction(elm, className, (classList, clazz) => classList.add(clazz));
|
||||||
return removeClass.bind(0, elm, className);
|
return removeClass.bind(0, elm, className);
|
||||||
};
|
};
|
||||||
@@ -63,10 +59,7 @@ export const addClass = (
|
|||||||
* @param classNameA ClassName A.
|
* @param classNameA ClassName A.
|
||||||
* @param classNameB ClassName B.
|
* @param classNameB ClassName B.
|
||||||
*/
|
*/
|
||||||
export const diffClass = (
|
export const diffClass = (classNameA: ClassName, classNameB: ClassName) => {
|
||||||
classNameA: string | null | undefined,
|
|
||||||
classNameB: string | null | undefined
|
|
||||||
) => {
|
|
||||||
const classNameASplit = classNameA && classNameA.split(' ');
|
const classNameASplit = classNameA && classNameA.split(' ');
|
||||||
const classNameBSplit = classNameB && classNameB.split(' ');
|
const classNameBSplit = classNameB && classNameB.split(' ');
|
||||||
const tempObj = {};
|
const tempObj = {};
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import { isElement } from 'support/utils/types';
|
import { isElement } from 'support/utils/types';
|
||||||
import { push, from } from 'support/utils/array';
|
import { push, from } from 'support/utils/array';
|
||||||
|
|
||||||
type InputElementType = Element | Node | false | null | undefined;
|
type InputElementType = Node | Element | Node | false | null | undefined;
|
||||||
type OutputElementType = Element | null;
|
type OutputElementType = Node | Element | null;
|
||||||
|
|
||||||
const elmPrototype = Element.prototype;
|
const elmPrototype = Element.prototype;
|
||||||
|
|
||||||
@@ -74,7 +74,7 @@ const contents = (elm: InputElementType): ReadonlyArray<ChildNode> =>
|
|||||||
*/
|
*/
|
||||||
const parent = (elm: InputElementType): OutputElementType => (elm ? elm.parentElement : null);
|
const parent = (elm: InputElementType): OutputElementType => (elm ? elm.parentElement : null);
|
||||||
|
|
||||||
const closest = (elm: InputElementType, selector: string): OutputElementType => {
|
export const closest = (elm: InputElementType, selector: string): OutputElementType => {
|
||||||
if (isElement(elm)) {
|
if (isElement(elm)) {
|
||||||
const closestFn = elmPrototype.closest;
|
const closestFn = elmPrototype.closest;
|
||||||
if (closestFn) {
|
if (closestFn) {
|
||||||
|
|||||||
@@ -15,29 +15,29 @@ export function each<T>(
|
|||||||
callback: (value: T, indexOrKey: number, source: Array<T>) => boolean | unknown
|
callback: (value: T, indexOrKey: number, source: Array<T>) => boolean | unknown
|
||||||
): Array<T> | ReadonlyArray<T>;
|
): Array<T> | ReadonlyArray<T>;
|
||||||
export function each<T>(
|
export function each<T>(
|
||||||
array: Array<T> | ReadonlyArray<T> | null | undefined,
|
array: Array<T> | ReadonlyArray<T> | false | null | undefined,
|
||||||
callback: (value: T, indexOrKey: number, source: Array<T>) => boolean | unknown
|
callback: (value: T, indexOrKey: number, source: Array<T>) => boolean | unknown
|
||||||
): Array<T> | ReadonlyArray<T> | null | undefined;
|
): Array<T> | ReadonlyArray<T> | false | null | undefined;
|
||||||
export function each<T>(
|
export function each<T>(
|
||||||
arrayLikeObject: ArrayLike<T>,
|
arrayLikeObject: ArrayLike<T>,
|
||||||
callback: (value: T, indexOrKey: number, source: ArrayLike<T>) => boolean | unknown
|
callback: (value: T, indexOrKey: number, source: ArrayLike<T>) => boolean | unknown
|
||||||
): ArrayLike<T>;
|
): ArrayLike<T>;
|
||||||
export function each<T>(
|
export function each<T>(
|
||||||
arrayLikeObject: ArrayLike<T> | null | undefined,
|
arrayLikeObject: ArrayLike<T> | false | null | undefined,
|
||||||
callback: (value: T, indexOrKey: number, source: ArrayLike<T>) => boolean | unknown
|
callback: (value: T, indexOrKey: number, source: ArrayLike<T>) => boolean | unknown
|
||||||
): ArrayLike<T> | null | undefined;
|
): ArrayLike<T> | false | null | undefined;
|
||||||
export function each(
|
export function each(
|
||||||
obj: PlainObject,
|
obj: PlainObject,
|
||||||
callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown
|
callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown
|
||||||
): PlainObject;
|
): PlainObject;
|
||||||
export function each(
|
export function each(
|
||||||
obj: PlainObject | null | undefined,
|
obj: PlainObject | false | null | undefined,
|
||||||
callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown
|
callback: (value: any, indexOrKey: string, source: PlainObject) => boolean | unknown
|
||||||
): PlainObject | null | undefined;
|
): PlainObject | false | null | undefined;
|
||||||
export function each<T>(
|
export function each<T>(
|
||||||
source: Array<T> | ArrayLike<T> | ReadonlyArray<T> | PlainObject | null | undefined,
|
source: Array<T> | ArrayLike<T> | ReadonlyArray<T> | PlainObject | false | null | undefined,
|
||||||
callback: (value: T, indexOrKey: any, source: any) => boolean | unknown
|
callback: (value: T, indexOrKey: any, source: any) => boolean | unknown
|
||||||
): Array<T> | ArrayLike<T> | ReadonlyArray<T> | PlainObject | null | undefined {
|
): Array<T> | ArrayLike<T> | ReadonlyArray<T> | PlainObject | false | null | undefined {
|
||||||
if (isArrayLike(source)) {
|
if (isArrayLike(source)) {
|
||||||
for (let i = 0; i < source.length; i++) {
|
for (let i = 0; i < source.length; i++) {
|
||||||
if (callback(source[i], i, source) === false) {
|
if (callback(source[i], i, source) === false) {
|
||||||
|
|||||||
Reference in New Issue
Block a user