mirror of
https://github.com/tenrok/OverlayScrollbars.git
synced 2026-06-20 22:10:48 +03:00
move padding & content elements classnames to data attribute to prevent overwriting by 3rd party libs
This commit is contained in:
@@ -3,7 +3,9 @@ export const classNameEnvironmentFlexboxGlue = `${classNameEnvironment}-flexbox-
|
|||||||
export const classNameEnvironmentFlexboxGlueMax = `${classNameEnvironmentFlexboxGlue}-max`;
|
export const classNameEnvironmentFlexboxGlueMax = `${classNameEnvironmentFlexboxGlue}-max`;
|
||||||
|
|
||||||
export const dataAttributeHost = 'data-overlayscrollbars';
|
export const dataAttributeHost = 'data-overlayscrollbars';
|
||||||
|
export const dataAttributePadding = 'data-overlayscrollbars-padding';
|
||||||
export const dataAttributeViewport = 'data-overlayscrollbars-viewport';
|
export const dataAttributeViewport = 'data-overlayscrollbars-viewport';
|
||||||
|
export const dataAttributeContent = 'data-overlayscrollbars-content';
|
||||||
export const dataAttributeInitialize = 'data-overlayscrollbars-initialize';
|
export const dataAttributeInitialize = 'data-overlayscrollbars-initialize';
|
||||||
export const dataAttributeHostOverflowX = `${dataAttributeHost}-overflow-x`;
|
export const dataAttributeHostOverflowX = `${dataAttributeHost}-overflow-x`;
|
||||||
export const dataAttributeHostOverflowY = `${dataAttributeHost}-overflow-y`;
|
export const dataAttributeHostOverflowY = `${dataAttributeHost}-overflow-y`;
|
||||||
@@ -11,11 +13,10 @@ export const dataValueHostOverflowVisible = 'overflowVisible';
|
|||||||
export const dataValueHostScrollbarHidden = 'scrollbarHidden';
|
export const dataValueHostScrollbarHidden = 'scrollbarHidden';
|
||||||
export const dataValueHostScrollbarPressed = 'scrollbarPressed';
|
export const dataValueHostScrollbarPressed = 'scrollbarPressed';
|
||||||
export const dataValueHostUpdating = 'updating';
|
export const dataValueHostUpdating = 'updating';
|
||||||
export const classNamePadding = 'os-padding';
|
|
||||||
export const dataValueViewportArrange = 'arrange';
|
export const dataValueViewportArrange = 'arrange';
|
||||||
export const dataValueViewportScrollbarHidden = 'scrollbarHidden';
|
export const dataValueViewportScrollbarHidden = 'scrollbarHidden';
|
||||||
export const dataValueViewportOverflowVisible = 'overflowVisible';
|
export const dataValueViewportOverflowVisible = 'overflowVisible';
|
||||||
export const classNameContent = 'os-content';
|
export const dataValuePaddingOverflowVisible = 'overflowVisible';
|
||||||
export const classNameOverflowVisible = `os-overflow-visible`;
|
export const classNameOverflowVisible = `os-overflow-visible`;
|
||||||
export const classNameScrollbarHidden = `os-scrollbar-hidden`;
|
export const classNameScrollbarHidden = `os-scrollbar-hidden`;
|
||||||
|
|
||||||
|
|||||||
@@ -25,11 +25,11 @@ import {
|
|||||||
dataAttributeInitialize,
|
dataAttributeInitialize,
|
||||||
dataAttributeHostOverflowX,
|
dataAttributeHostOverflowX,
|
||||||
dataAttributeHostOverflowY,
|
dataAttributeHostOverflowY,
|
||||||
classNamePadding,
|
|
||||||
classNameContent,
|
|
||||||
classNameScrollbarHidden,
|
classNameScrollbarHidden,
|
||||||
dataAttributeViewport,
|
dataAttributeViewport,
|
||||||
dataValueViewportScrollbarHidden,
|
dataValueViewportScrollbarHidden,
|
||||||
|
dataAttributePadding,
|
||||||
|
dataAttributeContent,
|
||||||
} from '~/classnames';
|
} from '~/classnames';
|
||||||
import { getEnvironment } from '~/environment';
|
import { getEnvironment } from '~/environment';
|
||||||
import { getPlugins, scrollbarsHidingPluginName } from '~/plugins';
|
import { getPlugins, scrollbarsHidingPluginName } from '~/plugins';
|
||||||
@@ -238,13 +238,13 @@ export const createStructureSetupElements = (
|
|||||||
const contentSlot = viewportIsTargetBody ? _target : _content || _viewport;
|
const contentSlot = viewportIsTargetBody ? _target : _content || _viewport;
|
||||||
const appendElements = () => {
|
const appendElements = () => {
|
||||||
attr(_host, dataAttributeHost, viewportIsTarget ? 'viewport' : 'host');
|
attr(_host, dataAttributeHost, viewportIsTarget ? 'viewport' : 'host');
|
||||||
|
attr(_padding, dataAttributePadding, '');
|
||||||
|
attr(_content, dataAttributeContent, '');
|
||||||
|
|
||||||
if (!viewportIsTarget) {
|
if (!viewportIsTarget) {
|
||||||
attr(_viewport, dataAttributeViewport, '');
|
attr(_viewport, dataAttributeViewport, '');
|
||||||
}
|
}
|
||||||
|
|
||||||
const removePaddingClass = addClass(_padding, classNamePadding);
|
|
||||||
const removeContentClass = addClass(_content, classNameContent);
|
|
||||||
const removeHtmlClass =
|
const removeHtmlClass =
|
||||||
isBody && !viewportIsTarget
|
isBody && !viewportIsTarget
|
||||||
? addClass(parent(targetElement), classNameScrollbarHidden)
|
? addClass(parent(targetElement), classNameScrollbarHidden)
|
||||||
@@ -267,6 +267,8 @@ export const createStructureSetupElements = (
|
|||||||
|
|
||||||
push(destroyFns, () => {
|
push(destroyFns, () => {
|
||||||
removeHtmlClass();
|
removeHtmlClass();
|
||||||
|
removeAttr(_padding, dataAttributePadding);
|
||||||
|
removeAttr(_content, dataAttributeContent);
|
||||||
removeAttr(_viewport, dataAttributeHostOverflowX);
|
removeAttr(_viewport, dataAttributeHostOverflowX);
|
||||||
removeAttr(_viewport, dataAttributeHostOverflowY);
|
removeAttr(_viewport, dataAttributeHostOverflowY);
|
||||||
removeAttr(_viewport, dataAttributeViewport);
|
removeAttr(_viewport, dataAttributeViewport);
|
||||||
@@ -280,9 +282,6 @@ export const createStructureSetupElements = (
|
|||||||
if (elementIsGenerated(_padding)) {
|
if (elementIsGenerated(_padding)) {
|
||||||
unwrap(_padding);
|
unwrap(_padding);
|
||||||
}
|
}
|
||||||
|
|
||||||
removePaddingClass();
|
|
||||||
removeContentClass();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
if (_nativeScrollbarsHiding && !viewportIsTarget) {
|
if (_nativeScrollbarsHiding && !viewportIsTarget) {
|
||||||
|
|||||||
+10
-11
@@ -5,8 +5,6 @@ import {
|
|||||||
scrollSize,
|
scrollSize,
|
||||||
fractionalSize,
|
fractionalSize,
|
||||||
equalWH,
|
equalWH,
|
||||||
addClass,
|
|
||||||
removeClass,
|
|
||||||
clientSize,
|
clientSize,
|
||||||
equalXY,
|
equalXY,
|
||||||
attrClass,
|
attrClass,
|
||||||
@@ -14,7 +12,6 @@ import {
|
|||||||
} from '~/support';
|
} from '~/support';
|
||||||
import { getEnvironment } from '~/environment';
|
import { getEnvironment } from '~/environment';
|
||||||
import {
|
import {
|
||||||
classNameOverflowVisible,
|
|
||||||
dataAttributeHost,
|
dataAttributeHost,
|
||||||
dataAttributeHostOverflowX,
|
dataAttributeHostOverflowX,
|
||||||
dataAttributeHostOverflowY,
|
dataAttributeHostOverflowY,
|
||||||
@@ -22,6 +19,9 @@ import {
|
|||||||
dataValueHostOverflowVisible,
|
dataValueHostOverflowVisible,
|
||||||
dataValueViewportScrollbarHidden,
|
dataValueViewportScrollbarHidden,
|
||||||
dataValueViewportOverflowVisible,
|
dataValueViewportOverflowVisible,
|
||||||
|
dataAttributeViewport,
|
||||||
|
dataAttributePadding,
|
||||||
|
dataValuePaddingOverflowVisible,
|
||||||
} from '~/classnames';
|
} from '~/classnames';
|
||||||
import { getPlugins, scrollbarsHidingPluginName } from '~/plugins';
|
import { getPlugins, scrollbarsHidingPluginName } from '~/plugins';
|
||||||
import type { WH, XY } from '~/support';
|
import type { WH, XY } from '~/support';
|
||||||
@@ -80,12 +80,6 @@ const getOverflowAmount = (viewportScrollSize: WH<number>, viewportClientSize: W
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
const conditionalClass = (
|
|
||||||
elm: Element | false | null | undefined,
|
|
||||||
classNames: string,
|
|
||||||
add: boolean
|
|
||||||
) => (add ? addClass(elm, classNames) : removeClass(elm, classNames));
|
|
||||||
|
|
||||||
const overflowIsVisible = (overflowBehavior: string) => overflowBehavior.indexOf(strVisible) === 0;
|
const overflowIsVisible = (overflowBehavior: string) => overflowBehavior.indexOf(strVisible) === 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -508,9 +502,14 @@ export const createOverflowUpdateSegment: CreateStructureUpdateSegment = (
|
|||||||
}
|
}
|
||||||
|
|
||||||
attrClass(_host, dataAttributeHost, dataValueHostOverflowVisible, removeClipping);
|
attrClass(_host, dataAttributeHost, dataValueHostOverflowVisible, removeClipping);
|
||||||
conditionalClass(_padding, classNameOverflowVisible, removeClipping);
|
attrClass(_padding, dataAttributePadding, dataValuePaddingOverflowVisible, removeClipping);
|
||||||
if (!_viewportIsTarget) {
|
if (!_viewportIsTarget) {
|
||||||
_viewportAddRemoveClass(dataValueViewportOverflowVisible, '', overflowVisible);
|
attrClass(
|
||||||
|
_viewport,
|
||||||
|
dataAttributeViewport,
|
||||||
|
dataValueViewportOverflowVisible,
|
||||||
|
overflowVisible
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const [overflowStyle, overflowStyleChanged] = updateOverflowStyleCache(
|
const [overflowStyle, overflowStyleChanged] = updateOverflowStyleCache(
|
||||||
|
|||||||
@@ -113,13 +113,13 @@ html[data-overlayscrollbars] > body {
|
|||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
[data-overlayscrollbars~='host'],
|
[data-overlayscrollbars~='host'],
|
||||||
.os-padding {
|
[data-overlayscrollbars-padding] {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row !important;
|
flex-direction: row !important;
|
||||||
flex-wrap: nowrap !important;
|
flex-wrap: nowrap !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.os-padding,
|
[data-overlayscrollbars-padding],
|
||||||
[data-overlayscrollbars-viewport] {
|
[data-overlayscrollbars-viewport] {
|
||||||
box-sizing: inherit;
|
box-sizing: inherit;
|
||||||
position: relative; // needed for correct padding styles
|
position: relative; // needed for correct padding styles
|
||||||
@@ -148,7 +148,7 @@ html[data-overlayscrollbars] > body {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.os-padding,
|
[data-overlayscrollbars-padding],
|
||||||
[data-overlayscrollbars-viewport] {
|
[data-overlayscrollbars-viewport] {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
@@ -158,6 +158,7 @@ html[data-overlayscrollbars] > body {
|
|||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
[data-overlayscrollbars~='overflowVisible'],
|
[data-overlayscrollbars~='overflowVisible'],
|
||||||
|
[data-overlayscrollbars-padding~='overflowVisible'],
|
||||||
[data-overlayscrollbars-viewport~='overflowVisible'] {
|
[data-overlayscrollbars-viewport~='overflowVisible'] {
|
||||||
overflow: visible;
|
overflow: visible;
|
||||||
}
|
}
|
||||||
@@ -179,11 +180,7 @@ html[data-overlayscrollbars] > body {
|
|||||||
scroll-behavior: auto !important;
|
scroll-behavior: auto !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.os-overflow-visible {
|
[data-overlayscrollbars-content] {
|
||||||
overflow: visible;
|
|
||||||
}
|
|
||||||
|
|
||||||
.os-content {
|
|
||||||
box-sizing: inherit;
|
box-sizing: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -192,13 +189,15 @@ html[data-overlayscrollbars] > body {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
[data-overlayscrollbars-grid],
|
[data-overlayscrollbars-grid],
|
||||||
[data-overlayscrollbars-grid] .os-padding {
|
[data-overlayscrollbars-grid] [data-overlayscrollbars-padding] {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template: 1fr / 1fr;
|
grid-template: 1fr / 1fr;
|
||||||
}
|
}
|
||||||
[data-overlayscrollbars-grid] > .os-padding,
|
[data-overlayscrollbars-grid] > [data-overlayscrollbars-padding],
|
||||||
[data-overlayscrollbars-grid] > [data-overlayscrollbars-viewport],
|
[data-overlayscrollbars-grid] > [data-overlayscrollbars-viewport],
|
||||||
[data-overlayscrollbars-grid] > .os-padding > [data-overlayscrollbars-viewport] {
|
[data-overlayscrollbars-grid]
|
||||||
|
> [data-overlayscrollbars-padding]
|
||||||
|
> [data-overlayscrollbars-viewport] {
|
||||||
height: auto !important;
|
height: auto !important;
|
||||||
width: auto !important;
|
width: auto !important;
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-4
@@ -3,8 +3,8 @@ import { resolveInitialization } from '~/initialization';
|
|||||||
import {
|
import {
|
||||||
dataAttributeHost,
|
dataAttributeHost,
|
||||||
dataAttributeInitialize,
|
dataAttributeInitialize,
|
||||||
classNamePadding,
|
dataAttributePadding,
|
||||||
classNameContent,
|
dataAttributeContent,
|
||||||
dataAttributeViewport,
|
dataAttributeViewport,
|
||||||
} from '~/classnames';
|
} from '~/classnames';
|
||||||
import { getEnvironment } from '~/environment';
|
import { getEnvironment } from '~/environment';
|
||||||
@@ -88,9 +88,9 @@ const clearBody = () => {
|
|||||||
const getElements = (targetType: TargetType) => {
|
const getElements = (targetType: TargetType) => {
|
||||||
const target = getTarget(targetType);
|
const target = getTarget(targetType);
|
||||||
const host = document.querySelector(`[${dataAttributeHost}]`)!;
|
const host = document.querySelector(`[${dataAttributeHost}]`)!;
|
||||||
const padding = document.querySelector(`.${classNamePadding}`)!;
|
const padding = document.querySelector(`[${dataAttributePadding}]`)!;
|
||||||
const viewport = document.querySelector(`[${dataAttributeViewport}]`)!;
|
const viewport = document.querySelector(`[${dataAttributeViewport}]`)!;
|
||||||
const content = document.querySelector(`.${classNameContent}`)!;
|
const content = document.querySelector(`[${dataAttributeContent}]`)!;
|
||||||
const children =
|
const children =
|
||||||
targetType === 'textarea'
|
targetType === 'textarea'
|
||||||
? document.querySelector(`#${textareaId}`)
|
? document.querySelector(`#${textareaId}`)
|
||||||
|
|||||||
Reference in New Issue
Block a user