mirror of
https://github.com/tenrok/OverlayScrollbars.git
synced 2026-06-21 16:30:36 +03:00
improve code
This commit is contained in:
+44
-61
@@ -1348,11 +1348,11 @@ const createEventContentChange = (target, callback, eventContentChange) => {
|
|||||||
let map;
|
let map;
|
||||||
let destroyed = false;
|
let destroyed = false;
|
||||||
|
|
||||||
const _destroy = () => {
|
const destroy = () => {
|
||||||
destroyed = true;
|
destroyed = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
const _updateElements = getElements => {
|
const updateElements = getElements => {
|
||||||
if (eventContentChange) {
|
if (eventContentChange) {
|
||||||
const eventElmList = eventContentChange.reduce((arr, item) => {
|
const eventElmList = eventContentChange.reduce((arr, item) => {
|
||||||
if (item) {
|
if (item) {
|
||||||
@@ -1395,14 +1395,10 @@ const createEventContentChange = (target, callback, eventContentChange) => {
|
|||||||
|
|
||||||
if (eventContentChange) {
|
if (eventContentChange) {
|
||||||
map = new WeakMap();
|
map = new WeakMap();
|
||||||
|
updateElements();
|
||||||
_updateElements();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return [destroy, updateElements];
|
||||||
_destroy,
|
|
||||||
_updateElements
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const createDOMObserver = (target, isContentObserver, callback, options) => {
|
const createDOMObserver = (target, isContentObserver, callback, options) => {
|
||||||
@@ -1416,10 +1412,7 @@ const createDOMObserver = (target, isContentObserver, callback, options) => {
|
|||||||
_ignoreNestedTargetChange,
|
_ignoreNestedTargetChange,
|
||||||
_ignoreContentChange
|
_ignoreContentChange
|
||||||
} = options || {};
|
} = options || {};
|
||||||
const {
|
const [destroyEventContentChange, updateEventContentChangeElements] = createEventContentChange(target, debounce(() => {
|
||||||
_destroy: destroyEventContentChange,
|
|
||||||
_updateElements: updateEventContentChangeElements
|
|
||||||
} = createEventContentChange(target, debounce(() => {
|
|
||||||
if (isConnected) {
|
if (isConnected) {
|
||||||
callback(true);
|
callback(true);
|
||||||
}
|
}
|
||||||
@@ -1495,20 +1488,17 @@ const createDOMObserver = (target, isContentObserver, callback, options) => {
|
|||||||
characterData: isContentObserver
|
characterData: isContentObserver
|
||||||
});
|
});
|
||||||
isConnected = true;
|
isConnected = true;
|
||||||
return {
|
return [() => {
|
||||||
_destroy: () => {
|
if (isConnected) {
|
||||||
if (isConnected) {
|
destroyEventContentChange();
|
||||||
destroyEventContentChange();
|
mutationObserver.disconnect();
|
||||||
mutationObserver.disconnect();
|
isConnected = false;
|
||||||
isConnected = false;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
_update: () => {
|
|
||||||
if (isConnected) {
|
|
||||||
observerCallback(mutationObserver.takeRecords());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
}, () => {
|
||||||
|
if (isConnected) {
|
||||||
|
observerCallback(mutationObserver.takeRecords());
|
||||||
|
}
|
||||||
|
}];
|
||||||
};
|
};
|
||||||
|
|
||||||
const ignorePrefix = 'os-';
|
const ignorePrefix = 'os-';
|
||||||
@@ -1628,7 +1618,7 @@ const lifecycleHubOservers = (instance, updateLifecycles) => {
|
|||||||
_appear: true,
|
_appear: true,
|
||||||
_direction: !_nativeScrollbarStyling
|
_direction: !_nativeScrollbarStyling
|
||||||
});
|
});
|
||||||
const hostMutationObserver = createDOMObserver(_host, false, onHostMutation, {
|
const [destroyHostMutationObserver] = createDOMObserver(_host, false, onHostMutation, {
|
||||||
_styleChangingAttributes: baseStyleChangingAttrs,
|
_styleChangingAttributes: baseStyleChangingAttrs,
|
||||||
_attributes: baseStyleChangingAttrs.concat(viewportAttrsFromTarget),
|
_attributes: baseStyleChangingAttrs.concat(viewportAttrsFromTarget),
|
||||||
_ignoreTargetChange: ignoreTargetChange
|
_ignoreTargetChange: ignoreTargetChange
|
||||||
@@ -1642,9 +1632,8 @@ const lifecycleHubOservers = (instance, updateLifecycles) => {
|
|||||||
|
|
||||||
if (updateContentMutationObserver) {
|
if (updateContentMutationObserver) {
|
||||||
if (contentMutationObserver) {
|
if (contentMutationObserver) {
|
||||||
contentMutationObserver._update();
|
contentMutationObserver[1]();
|
||||||
|
contentMutationObserver[0]();
|
||||||
contentMutationObserver._destroy();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
contentMutationObserver = createDOMObserver(_content || _viewport, true, onContentMutation, {
|
contentMutationObserver = createDOMObserver(_content || _viewport, true, onContentMutation, {
|
||||||
@@ -1675,11 +1664,10 @@ const lifecycleHubOservers = (instance, updateLifecycles) => {
|
|||||||
|
|
||||||
updateViewportAttrsFromHost();
|
updateViewportAttrsFromHost();
|
||||||
return [updateOptions, () => {
|
return [updateOptions, () => {
|
||||||
contentMutationObserver && contentMutationObserver._destroy();
|
contentMutationObserver && contentMutationObserver[0]();
|
||||||
destroyTrinsicObserver && destroyTrinsicObserver();
|
destroyTrinsicObserver && destroyTrinsicObserver();
|
||||||
destroySizeObserver();
|
destroySizeObserver();
|
||||||
|
destroyHostMutationObserver();
|
||||||
hostMutationObserver._destroy();
|
|
||||||
}];
|
}];
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1768,11 +1756,9 @@ const createPaddingLifecycle = lifecycleHub => {
|
|||||||
style(_viewport, viewportStyle);
|
style(_viewport, viewportStyle);
|
||||||
|
|
||||||
_setLifecycleCommunication({
|
_setLifecycleCommunication({
|
||||||
_paddingInfo: {
|
_padding: padding,
|
||||||
_absolute: !paddingRelative,
|
_paddingAbsolute: !paddingRelative,
|
||||||
_padding: padding
|
_viewportPaddingStyle: _padding ? viewportStyle : assignDeep({}, paddingStyle, viewportStyle)
|
||||||
},
|
|
||||||
_viewportPaddingStyle: _padding ? viewportStyle : _extends({}, paddingStyle, viewportStyle)
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1868,9 +1854,9 @@ const createOverflowLifecycle = lifecycleHub => {
|
|||||||
} = getEnvironment();
|
} = getEnvironment();
|
||||||
|
|
||||||
const {
|
const {
|
||||||
_absolute: paddingAbsolute,
|
_paddingAbsolute,
|
||||||
_padding: padding
|
_padding
|
||||||
} = _getLifecycleCommunication()._paddingInfo;
|
} = _getLifecycleCommunication();
|
||||||
|
|
||||||
const {
|
const {
|
||||||
_overflowScroll,
|
_overflowScroll,
|
||||||
@@ -1879,7 +1865,7 @@ const createOverflowLifecycle = lifecycleHub => {
|
|||||||
const hostSizeFraction = sizeFraction(_host);
|
const hostSizeFraction = sizeFraction(_host);
|
||||||
const hostClientSize = clientSize(_host);
|
const hostClientSize = clientSize(_host);
|
||||||
const isContentBox = style(_viewport, 'boxSizing') === 'content-box';
|
const isContentBox = style(_viewport, 'boxSizing') === 'content-box';
|
||||||
const paddingVertical = paddingAbsolute || isContentBox ? padding.b + padding.t : 0;
|
const paddingVertical = _paddingAbsolute || isContentBox ? _padding.b + _padding.t : 0;
|
||||||
const fractionalClientHeight = hostClientSize.h + (abs(hostSizeFraction.h) < 1 ? hostSizeFraction.h : 0);
|
const fractionalClientHeight = hostClientSize.h + (abs(hostSizeFraction.h) < 1 ? hostSizeFraction.h : 0);
|
||||||
const subtractXScrollbar = !(_nativeScrollbarIsOverlaid.x && isContentBox);
|
const subtractXScrollbar = !(_nativeScrollbarIsOverlaid.x && isContentBox);
|
||||||
style(_viewport, {
|
style(_viewport, {
|
||||||
@@ -1946,6 +1932,10 @@ const createOverflowLifecycle = lifecycleHub => {
|
|||||||
|
|
||||||
const arrangeViewport = (viewportOverflowState, viewportScrollSize, viewportSizeFraction, directionIsRTL) => {
|
const arrangeViewport = (viewportOverflowState, viewportScrollSize, viewportSizeFraction, directionIsRTL) => {
|
||||||
if (_doViewportArrange) {
|
if (_doViewportArrange) {
|
||||||
|
const {
|
||||||
|
_viewportPaddingStyle
|
||||||
|
} = _getLifecycleCommunication();
|
||||||
|
|
||||||
const {
|
const {
|
||||||
_scrollbarsHideOffset,
|
_scrollbarsHideOffset,
|
||||||
_scrollbarsHideOffsetArrange
|
_scrollbarsHideOffsetArrange
|
||||||
@@ -1958,14 +1948,9 @@ const createOverflowLifecycle = lifecycleHub => {
|
|||||||
x: hideOffsetX,
|
x: hideOffsetX,
|
||||||
y: hideOffsetY
|
y: hideOffsetY
|
||||||
} = _scrollbarsHideOffset;
|
} = _scrollbarsHideOffset;
|
||||||
|
|
||||||
const {
|
|
||||||
_viewportPaddingStyle: viewportPaddingStyle
|
|
||||||
} = _getLifecycleCommunication();
|
|
||||||
|
|
||||||
const viewportArrangeHorizontalPaddingKey = directionIsRTL ? 'paddingRight' : 'paddingLeft';
|
const viewportArrangeHorizontalPaddingKey = directionIsRTL ? 'paddingRight' : 'paddingLeft';
|
||||||
const viewportArrangeHorizontalPaddingValue = viewportPaddingStyle[viewportArrangeHorizontalPaddingKey];
|
const viewportArrangeHorizontalPaddingValue = _viewportPaddingStyle[viewportArrangeHorizontalPaddingKey];
|
||||||
const viewportArrangeVerticalPaddingValue = viewportPaddingStyle.paddingTop;
|
const viewportArrangeVerticalPaddingValue = _viewportPaddingStyle.paddingTop;
|
||||||
const fractionalContentWidth = viewportScrollSize.w + (abs(viewportSizeFraction.w) < 1 ? viewportSizeFraction.w : 0);
|
const fractionalContentWidth = viewportScrollSize.w + (abs(viewportSizeFraction.w) < 1 ? viewportSizeFraction.w : 0);
|
||||||
const fractionalContenHeight = viewportScrollSize.h + (abs(viewportSizeFraction.h) < 1 ? viewportSizeFraction.h : 0);
|
const fractionalContenHeight = viewportScrollSize.h + (abs(viewportSizeFraction.h) < 1 ? viewportSizeFraction.h : 0);
|
||||||
const arrangeSize = {
|
const arrangeSize = {
|
||||||
@@ -2184,16 +2169,14 @@ const getPropByPath = (obj, path) => obj ? path.split('.').reduce((o, prop) => o
|
|||||||
const applyForceToCache = (cacheValues, force) => [cacheValues[0], force || cacheValues[1], cacheValues[2]];
|
const applyForceToCache = (cacheValues, force) => [cacheValues[0], force || cacheValues[1], cacheValues[2]];
|
||||||
|
|
||||||
const booleanCacheValuesFallback = [false, false, false];
|
const booleanCacheValuesFallback = [false, false, false];
|
||||||
const lifecycleCommunicationFallback = {
|
const initialLifecycleCommunication = {
|
||||||
_paddingInfo: {
|
_padding: {
|
||||||
_absolute: false,
|
t: 0,
|
||||||
_padding: {
|
r: 0,
|
||||||
t: 0,
|
b: 0,
|
||||||
r: 0,
|
l: 0
|
||||||
b: 0,
|
|
||||||
l: 0
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
_paddingAbsolute: false,
|
||||||
_viewportOverflowScrollCache: [{
|
_viewportOverflowScrollCache: [{
|
||||||
x: false,
|
x: false,
|
||||||
y: false
|
y: false
|
||||||
@@ -2238,7 +2221,7 @@ const createOverflowChangedArgs = (overflowAmount, overflowScroll) => ({
|
|||||||
});
|
});
|
||||||
|
|
||||||
const createLifecycleHub = (options, triggerListener, structureSetup, scrollbarsSetup) => {
|
const createLifecycleHub = (options, triggerListener, structureSetup, scrollbarsSetup) => {
|
||||||
let lifecycleCommunication = lifecycleCommunicationFallback;
|
let lifecycleCommunication = initialLifecycleCommunication;
|
||||||
let updateObserverOptions;
|
let updateObserverOptions;
|
||||||
let destroyObservers;
|
let destroyObservers;
|
||||||
const {
|
const {
|
||||||
@@ -2490,7 +2473,7 @@ const OverlayScrollbars = (target, options, eventListeners) => {
|
|||||||
const [addEvent, removeEvent, triggerEvent] = createEventListenerHub(eventListeners);
|
const [addEvent, removeEvent, triggerEvent] = createEventListenerHub(eventListeners);
|
||||||
|
|
||||||
if (_nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y && !currentOptions.nativeScrollbarsOverlaid.initialize) {
|
if (_nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y && !currentOptions.nativeScrollbarsOverlaid.initialize) {
|
||||||
triggerEvent('initializationWithdrawn', false);
|
triggerEvent('initializationWithdrawn');
|
||||||
}
|
}
|
||||||
|
|
||||||
const structureSetup = createStructureSetup(target);
|
const structureSetup = createStructureSetup(target);
|
||||||
@@ -2524,7 +2507,7 @@ const OverlayScrollbars = (target, options, eventListeners) => {
|
|||||||
|
|
||||||
removeInstance(instanceTarget);
|
removeInstance(instanceTarget);
|
||||||
removeEvent();
|
removeEvent();
|
||||||
triggerEvent('destroyed', false);
|
triggerEvent('destroyed');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
each(keys(plugins), pluginName => {
|
each(keys(plugins), pluginName => {
|
||||||
@@ -2536,7 +2519,7 @@ const OverlayScrollbars = (target, options, eventListeners) => {
|
|||||||
});
|
});
|
||||||
instance.update(true);
|
instance.update(true);
|
||||||
addInstance(instanceTarget, instance);
|
addInstance(instanceTarget, instance);
|
||||||
triggerEvent('initialized', false);
|
triggerEvent('initialized');
|
||||||
return instance;
|
return instance;
|
||||||
};
|
};
|
||||||
OverlayScrollbars.extend = addPlugin;
|
OverlayScrollbars.extend = addPlugin;
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+47
-59
@@ -1429,11 +1429,11 @@
|
|||||||
var map;
|
var map;
|
||||||
var destroyed = false;
|
var destroyed = false;
|
||||||
|
|
||||||
var _destroy = function _destroy() {
|
var destroy = function destroy() {
|
||||||
destroyed = true;
|
destroyed = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
var _updateElements = function _updateElements(getElements) {
|
var updateElements = function updateElements(getElements) {
|
||||||
if (eventContentChange) {
|
if (eventContentChange) {
|
||||||
var eventElmList = eventContentChange.reduce(function (arr, item) {
|
var eventElmList = eventContentChange.reduce(function (arr, item) {
|
||||||
if (item) {
|
if (item) {
|
||||||
@@ -1478,14 +1478,10 @@
|
|||||||
|
|
||||||
if (eventContentChange) {
|
if (eventContentChange) {
|
||||||
map = new WeakMap();
|
map = new WeakMap();
|
||||||
|
updateElements();
|
||||||
_updateElements();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return [destroy, updateElements];
|
||||||
_destroy: _destroy,
|
|
||||||
_updateElements: _updateElements
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
var createDOMObserver = function createDOMObserver(target, isContentObserver, callback, options) {
|
var createDOMObserver = function createDOMObserver(target, isContentObserver, callback, options) {
|
||||||
@@ -1508,8 +1504,8 @@
|
|||||||
_timeout: 33,
|
_timeout: 33,
|
||||||
_maxDelay: 99
|
_maxDelay: 99
|
||||||
}), _eventContentChange),
|
}), _eventContentChange),
|
||||||
destroyEventContentChange = _createEventContentCh._destroy,
|
destroyEventContentChange = _createEventContentCh[0],
|
||||||
updateEventContentChangeElements = _createEventContentCh._updateElements;
|
updateEventContentChangeElements = _createEventContentCh[1];
|
||||||
|
|
||||||
var finalAttributes = _attributes || [];
|
var finalAttributes = _attributes || [];
|
||||||
var finalStyleChangingAttributes = _styleChangingAttributes || [];
|
var finalStyleChangingAttributes = _styleChangingAttributes || [];
|
||||||
@@ -1579,20 +1575,17 @@
|
|||||||
characterData: isContentObserver
|
characterData: isContentObserver
|
||||||
});
|
});
|
||||||
isConnected = true;
|
isConnected = true;
|
||||||
return {
|
return [function () {
|
||||||
_destroy: function _destroy() {
|
if (isConnected) {
|
||||||
if (isConnected) {
|
destroyEventContentChange();
|
||||||
destroyEventContentChange();
|
mutationObserver.disconnect();
|
||||||
mutationObserver.disconnect();
|
isConnected = false;
|
||||||
isConnected = false;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
_update: function _update() {
|
|
||||||
if (isConnected) {
|
|
||||||
observerCallback(mutationObserver.takeRecords());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
}, function () {
|
||||||
|
if (isConnected) {
|
||||||
|
observerCallback(mutationObserver.takeRecords());
|
||||||
|
}
|
||||||
|
}];
|
||||||
};
|
};
|
||||||
|
|
||||||
var ignorePrefix = 'os-';
|
var ignorePrefix = 'os-';
|
||||||
@@ -1706,11 +1699,13 @@
|
|||||||
_appear: true,
|
_appear: true,
|
||||||
_direction: !_nativeScrollbarStyling
|
_direction: !_nativeScrollbarStyling
|
||||||
});
|
});
|
||||||
var hostMutationObserver = createDOMObserver(_host, false, onHostMutation, {
|
|
||||||
|
var _createDOMObserver = createDOMObserver(_host, false, onHostMutation, {
|
||||||
_styleChangingAttributes: baseStyleChangingAttrs,
|
_styleChangingAttributes: baseStyleChangingAttrs,
|
||||||
_attributes: baseStyleChangingAttrs.concat(viewportAttrsFromTarget),
|
_attributes: baseStyleChangingAttrs.concat(viewportAttrsFromTarget),
|
||||||
_ignoreTargetChange: ignoreTargetChange
|
_ignoreTargetChange: ignoreTargetChange
|
||||||
});
|
}),
|
||||||
|
destroyHostMutationObserver = _createDOMObserver[0];
|
||||||
|
|
||||||
var updateOptions = function updateOptions(checkOption) {
|
var updateOptions = function updateOptions(checkOption) {
|
||||||
var _checkOption = checkOption('updating.elementEvents'),
|
var _checkOption = checkOption('updating.elementEvents'),
|
||||||
@@ -1729,9 +1724,8 @@
|
|||||||
|
|
||||||
if (updateContentMutationObserver) {
|
if (updateContentMutationObserver) {
|
||||||
if (contentMutationObserver) {
|
if (contentMutationObserver) {
|
||||||
contentMutationObserver._update();
|
contentMutationObserver[1]();
|
||||||
|
contentMutationObserver[0]();
|
||||||
contentMutationObserver._destroy();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
contentMutationObserver = createDOMObserver(_content || _viewport, true, onContentMutation, {
|
contentMutationObserver = createDOMObserver(_content || _viewport, true, onContentMutation, {
|
||||||
@@ -1762,11 +1756,10 @@
|
|||||||
|
|
||||||
updateViewportAttrsFromHost();
|
updateViewportAttrsFromHost();
|
||||||
return [updateOptions, function () {
|
return [updateOptions, function () {
|
||||||
contentMutationObserver && contentMutationObserver._destroy();
|
contentMutationObserver && contentMutationObserver[0]();
|
||||||
destroyTrinsicObserver && destroyTrinsicObserver();
|
destroyTrinsicObserver && destroyTrinsicObserver();
|
||||||
destroySizeObserver();
|
destroySizeObserver();
|
||||||
|
destroyHostMutationObserver();
|
||||||
hostMutationObserver._destroy();
|
|
||||||
}];
|
}];
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1860,11 +1853,9 @@
|
|||||||
style(_viewport, viewportStyle);
|
style(_viewport, viewportStyle);
|
||||||
|
|
||||||
_setLifecycleCommunication({
|
_setLifecycleCommunication({
|
||||||
_paddingInfo: {
|
_padding: padding,
|
||||||
_absolute: !paddingRelative,
|
_paddingAbsolute: !paddingRelative,
|
||||||
_padding: padding
|
_viewportPaddingStyle: _padding ? viewportStyle : assignDeep({}, paddingStyle, viewportStyle)
|
||||||
},
|
|
||||||
_viewportPaddingStyle: _padding ? viewportStyle : _extends({}, paddingStyle, viewportStyle)
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1968,16 +1959,16 @@
|
|||||||
var _getEnvironment = getEnvironment(),
|
var _getEnvironment = getEnvironment(),
|
||||||
_nativeScrollbarIsOverlaid = _getEnvironment._nativeScrollbarIsOverlaid;
|
_nativeScrollbarIsOverlaid = _getEnvironment._nativeScrollbarIsOverlaid;
|
||||||
|
|
||||||
var _getLifecycleCommunic = _getLifecycleCommunication()._paddingInfo,
|
var _getLifecycleCommunic = _getLifecycleCommunication(),
|
||||||
paddingAbsolute = _getLifecycleCommunic._absolute,
|
_paddingAbsolute = _getLifecycleCommunic._paddingAbsolute,
|
||||||
padding = _getLifecycleCommunic._padding;
|
_padding = _getLifecycleCommunic._padding;
|
||||||
|
|
||||||
var _overflowScroll = viewportOverflowState._overflowScroll,
|
var _overflowScroll = viewportOverflowState._overflowScroll,
|
||||||
_scrollbarsHideOffset = viewportOverflowState._scrollbarsHideOffset;
|
_scrollbarsHideOffset = viewportOverflowState._scrollbarsHideOffset;
|
||||||
var hostSizeFraction = sizeFraction(_host);
|
var hostSizeFraction = sizeFraction(_host);
|
||||||
var hostClientSize = clientSize(_host);
|
var hostClientSize = clientSize(_host);
|
||||||
var isContentBox = style(_viewport, 'boxSizing') === 'content-box';
|
var isContentBox = style(_viewport, 'boxSizing') === 'content-box';
|
||||||
var paddingVertical = paddingAbsolute || isContentBox ? padding.b + padding.t : 0;
|
var paddingVertical = _paddingAbsolute || isContentBox ? _padding.b + _padding.t : 0;
|
||||||
var fractionalClientHeight = hostClientSize.h + (abs(hostSizeFraction.h) < 1 ? hostSizeFraction.h : 0);
|
var fractionalClientHeight = hostClientSize.h + (abs(hostSizeFraction.h) < 1 ? hostSizeFraction.h : 0);
|
||||||
var subtractXScrollbar = !(_nativeScrollbarIsOverlaid.x && isContentBox);
|
var subtractXScrollbar = !(_nativeScrollbarIsOverlaid.x && isContentBox);
|
||||||
style(_viewport, {
|
style(_viewport, {
|
||||||
@@ -2041,19 +2032,18 @@
|
|||||||
|
|
||||||
var arrangeViewport = function arrangeViewport(viewportOverflowState, viewportScrollSize, viewportSizeFraction, directionIsRTL) {
|
var arrangeViewport = function arrangeViewport(viewportOverflowState, viewportScrollSize, viewportSizeFraction, directionIsRTL) {
|
||||||
if (_doViewportArrange) {
|
if (_doViewportArrange) {
|
||||||
|
var _getLifecycleCommunic2 = _getLifecycleCommunication(),
|
||||||
|
_viewportPaddingStyle = _getLifecycleCommunic2._viewportPaddingStyle;
|
||||||
|
|
||||||
var _scrollbarsHideOffset = viewportOverflowState._scrollbarsHideOffset,
|
var _scrollbarsHideOffset = viewportOverflowState._scrollbarsHideOffset,
|
||||||
_scrollbarsHideOffsetArrange = viewportOverflowState._scrollbarsHideOffsetArrange;
|
_scrollbarsHideOffsetArrange = viewportOverflowState._scrollbarsHideOffsetArrange;
|
||||||
var arrangeX = _scrollbarsHideOffsetArrange.x,
|
var arrangeX = _scrollbarsHideOffsetArrange.x,
|
||||||
arrangeY = _scrollbarsHideOffsetArrange.y;
|
arrangeY = _scrollbarsHideOffsetArrange.y;
|
||||||
var hideOffsetX = _scrollbarsHideOffset.x,
|
var hideOffsetX = _scrollbarsHideOffset.x,
|
||||||
hideOffsetY = _scrollbarsHideOffset.y;
|
hideOffsetY = _scrollbarsHideOffset.y;
|
||||||
|
|
||||||
var _getLifecycleCommunic2 = _getLifecycleCommunication(),
|
|
||||||
viewportPaddingStyle = _getLifecycleCommunic2._viewportPaddingStyle;
|
|
||||||
|
|
||||||
var viewportArrangeHorizontalPaddingKey = directionIsRTL ? 'paddingRight' : 'paddingLeft';
|
var viewportArrangeHorizontalPaddingKey = directionIsRTL ? 'paddingRight' : 'paddingLeft';
|
||||||
var viewportArrangeHorizontalPaddingValue = viewportPaddingStyle[viewportArrangeHorizontalPaddingKey];
|
var viewportArrangeHorizontalPaddingValue = _viewportPaddingStyle[viewportArrangeHorizontalPaddingKey];
|
||||||
var viewportArrangeVerticalPaddingValue = viewportPaddingStyle.paddingTop;
|
var viewportArrangeVerticalPaddingValue = _viewportPaddingStyle.paddingTop;
|
||||||
var fractionalContentWidth = viewportScrollSize.w + (abs(viewportSizeFraction.w) < 1 ? viewportSizeFraction.w : 0);
|
var fractionalContentWidth = viewportScrollSize.w + (abs(viewportSizeFraction.w) < 1 ? viewportSizeFraction.w : 0);
|
||||||
var fractionalContenHeight = viewportScrollSize.h + (abs(viewportSizeFraction.h) < 1 ? viewportSizeFraction.h : 0);
|
var fractionalContenHeight = viewportScrollSize.h + (abs(viewportSizeFraction.h) < 1 ? viewportSizeFraction.h : 0);
|
||||||
var arrangeSize = {
|
var arrangeSize = {
|
||||||
@@ -2287,16 +2277,14 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
var booleanCacheValuesFallback = [false, false, false];
|
var booleanCacheValuesFallback = [false, false, false];
|
||||||
var lifecycleCommunicationFallback = {
|
var initialLifecycleCommunication = {
|
||||||
_paddingInfo: {
|
_padding: {
|
||||||
_absolute: false,
|
t: 0,
|
||||||
_padding: {
|
r: 0,
|
||||||
t: 0,
|
b: 0,
|
||||||
r: 0,
|
l: 0
|
||||||
b: 0,
|
|
||||||
l: 0
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
_paddingAbsolute: false,
|
||||||
_viewportOverflowScrollCache: [{
|
_viewportOverflowScrollCache: [{
|
||||||
x: false,
|
x: false,
|
||||||
y: false
|
y: false
|
||||||
@@ -2343,7 +2331,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
var createLifecycleHub = function createLifecycleHub(options, triggerListener, structureSetup, scrollbarsSetup) {
|
var createLifecycleHub = function createLifecycleHub(options, triggerListener, structureSetup, scrollbarsSetup) {
|
||||||
var lifecycleCommunication = lifecycleCommunicationFallback;
|
var lifecycleCommunication = initialLifecycleCommunication;
|
||||||
var updateObserverOptions;
|
var updateObserverOptions;
|
||||||
var destroyObservers;
|
var destroyObservers;
|
||||||
var _viewport = structureSetup._targetObj._viewport;
|
var _viewport = structureSetup._targetObj._viewport;
|
||||||
@@ -2614,7 +2602,7 @@
|
|||||||
triggerEvent = _createEventListenerH[2];
|
triggerEvent = _createEventListenerH[2];
|
||||||
|
|
||||||
if (_nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y && !currentOptions.nativeScrollbarsOverlaid.initialize) {
|
if (_nativeScrollbarIsOverlaid.x && _nativeScrollbarIsOverlaid.y && !currentOptions.nativeScrollbarsOverlaid.initialize) {
|
||||||
triggerEvent('initializationWithdrawn', false);
|
triggerEvent('initializationWithdrawn');
|
||||||
}
|
}
|
||||||
|
|
||||||
var structureSetup = createStructureSetup(target);
|
var structureSetup = createStructureSetup(target);
|
||||||
@@ -2647,7 +2635,7 @@
|
|||||||
|
|
||||||
removeInstance(instanceTarget);
|
removeInstance(instanceTarget);
|
||||||
removeEvent();
|
removeEvent();
|
||||||
triggerEvent('destroyed', false);
|
triggerEvent('destroyed');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
each(keys(plugins), function (pluginName) {
|
each(keys(plugins), function (pluginName) {
|
||||||
@@ -2659,7 +2647,7 @@
|
|||||||
});
|
});
|
||||||
instance.update(true);
|
instance.update(true);
|
||||||
addInstance(instanceTarget, instance);
|
addInstance(instanceTarget, instance);
|
||||||
triggerEvent('initialized', false);
|
triggerEvent('initialized');
|
||||||
return instance;
|
return instance;
|
||||||
};
|
};
|
||||||
OverlayScrollbars.extend = addPlugin;
|
OverlayScrollbars.extend = addPlugin;
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -36,16 +36,15 @@ export interface OnOverflowChangedEventListenerArgs {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export interface EventListenerArgsMap {
|
export interface EventListenerArgsMap {
|
||||||
initialized: false;
|
initialized: undefined;
|
||||||
initializationWithdrawn: false;
|
initializationWithdrawn: undefined;
|
||||||
overflowChanged: OnOverflowChangedEventListenerArgs;
|
overflowChanged: OnOverflowChangedEventListenerArgs;
|
||||||
updated: OnUpdatedEventListenerArgs;
|
updated: OnUpdatedEventListenerArgs;
|
||||||
destroyed: false;
|
destroyed: undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type OSEventListener<N extends keyof EventListenerArgsMap> = (
|
export type OSEventListener<N extends keyof EventListenerArgsMap = keyof EventListenerArgsMap> =
|
||||||
args: EventListenerArgsMap[N]
|
undefined extends EventListenerArgsMap[N] ? () => void : (args: EventListenerArgsMap[N]) => void;
|
||||||
) => void;
|
|
||||||
|
|
||||||
export type AddEventListener = <N extends keyof EventListenerArgsMap>(
|
export type AddEventListener = <N extends keyof EventListenerArgsMap>(
|
||||||
name: N,
|
name: N,
|
||||||
@@ -59,7 +58,9 @@ export type RemoveEventListener = <N extends keyof EventListenerArgsMap>(
|
|||||||
|
|
||||||
export type TriggerEventListener = <N extends keyof EventListenerArgsMap>(
|
export type TriggerEventListener = <N extends keyof EventListenerArgsMap>(
|
||||||
name: N,
|
name: N,
|
||||||
args: EventListenerArgsMap[N]
|
...args: undefined extends EventListenerArgsMap[N]
|
||||||
|
? [args?: never]
|
||||||
|
: [args: EventListenerArgsMap[N]]
|
||||||
) => void;
|
) => void;
|
||||||
|
|
||||||
export type EventListenersHub = [AddEventListener, RemoveEventListener, TriggerEventListener];
|
export type EventListenersHub = [AddEventListener, RemoveEventListener, TriggerEventListener];
|
||||||
@@ -78,7 +79,7 @@ const manageListener = <N extends keyof EventListenerArgsMap>(
|
|||||||
export const createEventListenerHub = (
|
export const createEventListenerHub = (
|
||||||
initialEventListeners?: EventListenersMap
|
initialEventListeners?: EventListenersMap
|
||||||
): EventListenersHub => {
|
): EventListenersHub => {
|
||||||
const events = new Map<string, Set<OSEventListener<any>>>();
|
const events = new Map<keyof EventListenerArgsMap, Set<OSEventListener>>();
|
||||||
const removeEvent: RemoveEventListener = (name?, listener?) => {
|
const removeEvent: RemoveEventListener = (name?, listener?) => {
|
||||||
if (name) {
|
if (name) {
|
||||||
const eventSet = events.get(name);
|
const eventSet = events.get(name);
|
||||||
@@ -110,7 +111,7 @@ export const createEventListenerHub = (
|
|||||||
|
|
||||||
each(from(eventSet), (event) => {
|
each(from(eventSet), (event) => {
|
||||||
if (args) {
|
if (args) {
|
||||||
event(args);
|
(event as (args: any) => void)(args);
|
||||||
} else {
|
} else {
|
||||||
(event as () => void)();
|
(event as () => void)();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,10 +34,8 @@ export type Lifecycle = (
|
|||||||
export type LifecycleOptionInfo<T> = [T, boolean];
|
export type LifecycleOptionInfo<T> = [T, boolean];
|
||||||
|
|
||||||
export interface LifecycleCommunication {
|
export interface LifecycleCommunication {
|
||||||
_paddingInfo: {
|
_padding: TRBL;
|
||||||
_absolute: boolean;
|
_paddingAbsolute: boolean;
|
||||||
_padding: TRBL;
|
|
||||||
};
|
|
||||||
_viewportPaddingStyle: StyleObject;
|
_viewportPaddingStyle: StyleObject;
|
||||||
_viewportOverflowScrollCache: CacheValues<XY<boolean>>;
|
_viewportOverflowScrollCache: CacheValues<XY<boolean>>;
|
||||||
_viewportOverflowAmountCache: CacheValues<WH<number>>;
|
_viewportOverflowAmountCache: CacheValues<WH<number>>;
|
||||||
@@ -82,16 +80,14 @@ const applyForceToCache = <T>(cacheValues: CacheValues<T>, force?: boolean): Cac
|
|||||||
cacheValues[2],
|
cacheValues[2],
|
||||||
];
|
];
|
||||||
const booleanCacheValuesFallback: CacheValues<boolean> = [false, false, false];
|
const booleanCacheValuesFallback: CacheValues<boolean> = [false, false, false];
|
||||||
const lifecycleCommunicationFallback: LifecycleCommunication = {
|
const initialLifecycleCommunication: LifecycleCommunication = {
|
||||||
_paddingInfo: {
|
_padding: {
|
||||||
_absolute: false,
|
t: 0,
|
||||||
_padding: {
|
r: 0,
|
||||||
t: 0,
|
b: 0,
|
||||||
r: 0,
|
l: 0,
|
||||||
b: 0,
|
|
||||||
l: 0,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
|
_paddingAbsolute: false,
|
||||||
_viewportOverflowScrollCache: [
|
_viewportOverflowScrollCache: [
|
||||||
{
|
{
|
||||||
x: false,
|
x: false,
|
||||||
@@ -155,7 +151,7 @@ export const createLifecycleHub = (
|
|||||||
structureSetup: StructureSetup,
|
structureSetup: StructureSetup,
|
||||||
scrollbarsSetup: ScrollbarsSetup
|
scrollbarsSetup: ScrollbarsSetup
|
||||||
): LifecycleHubInstance => {
|
): LifecycleHubInstance => {
|
||||||
let lifecycleCommunication = lifecycleCommunicationFallback;
|
let lifecycleCommunication = initialLifecycleCommunication;
|
||||||
let updateObserverOptions: UpdateObserverOptions;
|
let updateObserverOptions: UpdateObserverOptions;
|
||||||
let destroyObservers: () => void;
|
let destroyObservers: () => void;
|
||||||
const { _viewport } = structureSetup._targetObj;
|
const { _viewport } = structureSetup._targetObj;
|
||||||
|
|||||||
@@ -18,7 +18,10 @@ import { LifecycleHub, LifecycleCheckOption, LifecycleUpdateHints } from 'lifecy
|
|||||||
|
|
||||||
export type UpdateObserverOptions = (checkOption: LifecycleCheckOption) => void;
|
export type UpdateObserverOptions = (checkOption: LifecycleCheckOption) => void;
|
||||||
|
|
||||||
export type LifecycleHubObservers = [UpdateObserverOptions, () => void];
|
export type LifecycleHubObservers = [
|
||||||
|
updateObserverOptions: UpdateObserverOptions,
|
||||||
|
destroy: () => void
|
||||||
|
];
|
||||||
|
|
||||||
// const hostSelector = `.${classNameHost}`;
|
// const hostSelector = `.${classNameHost}`;
|
||||||
|
|
||||||
@@ -144,7 +147,7 @@ export const lifecycleHubOservers = (
|
|||||||
_appear: true,
|
_appear: true,
|
||||||
_direction: !_nativeScrollbarStyling,
|
_direction: !_nativeScrollbarStyling,
|
||||||
});
|
});
|
||||||
const hostMutationObserver = createDOMObserver(_host, false, onHostMutation, {
|
const [destroyHostMutationObserver] = createDOMObserver(_host, false, onHostMutation, {
|
||||||
_styleChangingAttributes: baseStyleChangingAttrs,
|
_styleChangingAttributes: baseStyleChangingAttrs,
|
||||||
_attributes: baseStyleChangingAttrs.concat(viewportAttrsFromTarget),
|
_attributes: baseStyleChangingAttrs.concat(viewportAttrsFromTarget),
|
||||||
_ignoreTargetChange: ignoreTargetChange,
|
_ignoreTargetChange: ignoreTargetChange,
|
||||||
@@ -162,8 +165,8 @@ export const lifecycleHubOservers = (
|
|||||||
|
|
||||||
if (updateContentMutationObserver) {
|
if (updateContentMutationObserver) {
|
||||||
if (contentMutationObserver) {
|
if (contentMutationObserver) {
|
||||||
contentMutationObserver._update();
|
contentMutationObserver[1](); // update
|
||||||
contentMutationObserver._destroy();
|
contentMutationObserver[0](); // destroy
|
||||||
}
|
}
|
||||||
contentMutationObserver = createDOMObserver(_content || _viewport, true, onContentMutation, {
|
contentMutationObserver = createDOMObserver(_content || _viewport, true, onContentMutation, {
|
||||||
_styleChangingAttributes: contentMutationObserverAttr.concat(attributes || []),
|
_styleChangingAttributes: contentMutationObserverAttr.concat(attributes || []),
|
||||||
@@ -206,10 +209,10 @@ export const lifecycleHubOservers = (
|
|||||||
return [
|
return [
|
||||||
updateOptions,
|
updateOptions,
|
||||||
() => {
|
() => {
|
||||||
contentMutationObserver && contentMutationObserver._destroy();
|
contentMutationObserver && contentMutationObserver[0](); // destroy
|
||||||
destroyTrinsicObserver && destroyTrinsicObserver();
|
destroyTrinsicObserver && destroyTrinsicObserver();
|
||||||
destroySizeObserver();
|
destroySizeObserver();
|
||||||
hostMutationObserver._destroy();
|
destroyHostMutationObserver();
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -143,14 +143,13 @@ export const createOverflowLifecycle = (lifecycleHub: LifecycleHub): Lifecycle =
|
|||||||
|
|
||||||
if (heightIntrinsic) {
|
if (heightIntrinsic) {
|
||||||
const { _nativeScrollbarIsOverlaid } = getEnvironment();
|
const { _nativeScrollbarIsOverlaid } = getEnvironment();
|
||||||
const { _absolute: paddingAbsolute, _padding: padding } =
|
const { _paddingAbsolute, _padding } = _getLifecycleCommunication();
|
||||||
_getLifecycleCommunication()._paddingInfo;
|
|
||||||
const { _overflowScroll, _scrollbarsHideOffset } = viewportOverflowState;
|
const { _overflowScroll, _scrollbarsHideOffset } = viewportOverflowState;
|
||||||
const hostSizeFraction = sizeFraction(_host);
|
const hostSizeFraction = sizeFraction(_host);
|
||||||
const hostClientSize = clientSize(_host);
|
const hostClientSize = clientSize(_host);
|
||||||
// padding subtraction is only needed if padding is absolute or if viewport is content-box
|
// padding subtraction is only needed if padding is absolute or if viewport is content-box
|
||||||
const isContentBox = style(_viewport, 'boxSizing') === 'content-box';
|
const isContentBox = style(_viewport, 'boxSizing') === 'content-box';
|
||||||
const paddingVertical = paddingAbsolute || isContentBox ? padding.b + padding.t : 0;
|
const paddingVertical = _paddingAbsolute || isContentBox ? _padding.b + _padding.t : 0;
|
||||||
const fractionalClientHeight =
|
const fractionalClientHeight =
|
||||||
hostClientSize.h + (abs(hostSizeFraction.h) < 1 ? hostSizeFraction.h : 0);
|
hostClientSize.h + (abs(hostSizeFraction.h) < 1 ? hostSizeFraction.h : 0);
|
||||||
const subtractXScrollbar = !(_nativeScrollbarIsOverlaid.x && isContentBox);
|
const subtractXScrollbar = !(_nativeScrollbarIsOverlaid.x && isContentBox);
|
||||||
@@ -257,17 +256,17 @@ export const createOverflowLifecycle = (lifecycleHub: LifecycleHub): Lifecycle =
|
|||||||
directionIsRTL: boolean
|
directionIsRTL: boolean
|
||||||
) => {
|
) => {
|
||||||
if (_doViewportArrange) {
|
if (_doViewportArrange) {
|
||||||
|
const { _viewportPaddingStyle } = _getLifecycleCommunication();
|
||||||
const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;
|
const { _scrollbarsHideOffset, _scrollbarsHideOffsetArrange } = viewportOverflowState;
|
||||||
const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;
|
const { x: arrangeX, y: arrangeY } = _scrollbarsHideOffsetArrange;
|
||||||
const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;
|
const { x: hideOffsetX, y: hideOffsetY } = _scrollbarsHideOffset;
|
||||||
const { _viewportPaddingStyle: viewportPaddingStyle } = _getLifecycleCommunication();
|
|
||||||
const viewportArrangeHorizontalPaddingKey: keyof StyleObject = directionIsRTL
|
const viewportArrangeHorizontalPaddingKey: keyof StyleObject = directionIsRTL
|
||||||
? 'paddingRight'
|
? 'paddingRight'
|
||||||
: 'paddingLeft';
|
: 'paddingLeft';
|
||||||
const viewportArrangeHorizontalPaddingValue = viewportPaddingStyle[
|
const viewportArrangeHorizontalPaddingValue = _viewportPaddingStyle[
|
||||||
viewportArrangeHorizontalPaddingKey
|
viewportArrangeHorizontalPaddingKey
|
||||||
] as number;
|
] as number;
|
||||||
const viewportArrangeVerticalPaddingValue = viewportPaddingStyle.paddingTop as number;
|
const viewportArrangeVerticalPaddingValue = _viewportPaddingStyle.paddingTop as number;
|
||||||
const fractionalContentWidth =
|
const fractionalContentWidth =
|
||||||
viewportScrollSize.w + (abs(viewportSizeFraction.w) < 1 ? viewportSizeFraction.w : 0);
|
viewportScrollSize.w + (abs(viewportSizeFraction.w) < 1 ? viewportSizeFraction.w : 0);
|
||||||
const fractionalContenHeight =
|
const fractionalContenHeight =
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { createCache, topRightBottomLeft, equalTRBL, style } from 'support';
|
import { createCache, topRightBottomLeft, equalTRBL, style, assignDeep } from 'support';
|
||||||
import { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';
|
import { LifecycleHub, Lifecycle } from 'lifecycles/lifecycleHub';
|
||||||
import { StyleObject } from 'typings';
|
import { StyleObject } from 'typings';
|
||||||
import { getEnvironment } from 'environment';
|
import { getEnvironment } from 'environment';
|
||||||
@@ -60,16 +60,11 @@ export const createPaddingLifecycle = (lifecycleHub: LifecycleHub): Lifecycle =>
|
|||||||
style(_viewport, viewportStyle);
|
style(_viewport, viewportStyle);
|
||||||
|
|
||||||
_setLifecycleCommunication({
|
_setLifecycleCommunication({
|
||||||
_paddingInfo: {
|
_padding: padding,
|
||||||
_absolute: !paddingRelative,
|
_paddingAbsolute: !paddingRelative,
|
||||||
_padding: padding,
|
|
||||||
},
|
|
||||||
_viewportPaddingStyle: _padding
|
_viewportPaddingStyle: _padding
|
||||||
? viewportStyle
|
? viewportStyle
|
||||||
: {
|
: assignDeep({}, paddingStyle, viewportStyle),
|
||||||
...paddingStyle,
|
|
||||||
...viewportStyle,
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -63,10 +63,10 @@ export type DOMObserverOptions<ContentObserver extends boolean> = ContentObserve
|
|||||||
? DOMContentObserverOptions
|
? DOMContentObserverOptions
|
||||||
: DOMTargetObserverOptions;
|
: DOMTargetObserverOptions;
|
||||||
|
|
||||||
export interface DOMObserver {
|
export type DOMObserver = [destroy: () => void, update: () => void];
|
||||||
_destroy: () => void;
|
|
||||||
_update: () => void;
|
type EventContentChangeUpdateElement = (getElements?: (selector: string) => Node[]) => void;
|
||||||
}
|
type EventContentChange = [destroy: () => void, updateElements: EventContentChangeUpdateElement];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a set of helper functions to observe events of elements inside the target element.
|
* Creates a set of helper functions to observe events of elements inside the target element.
|
||||||
@@ -79,13 +79,13 @@ const createEventContentChange = (
|
|||||||
target: Element,
|
target: Element,
|
||||||
callback: (...args: any) => any,
|
callback: (...args: any) => any,
|
||||||
eventContentChange?: DOMObserverEventContentChange
|
eventContentChange?: DOMObserverEventContentChange
|
||||||
) => {
|
): EventContentChange => {
|
||||||
let map: WeakMap<Node, [string, () => any]> | undefined; // weak map to prevent memory leak for detached elements
|
let map: WeakMap<Node, [string, () => any]> | undefined; // weak map to prevent memory leak for detached elements
|
||||||
let destroyed = false;
|
let destroyed = false;
|
||||||
const _destroy = () => {
|
const destroy = () => {
|
||||||
destroyed = true;
|
destroyed = true;
|
||||||
};
|
};
|
||||||
const _updateElements = (getElements?: (selector: string) => Node[]) => {
|
const updateElements: EventContentChangeUpdateElement = (getElements?) => {
|
||||||
if (eventContentChange) {
|
if (eventContentChange) {
|
||||||
const eventElmList = eventContentChange.reduce<Array<[Node[], string]>>((arr, item) => {
|
const eventElmList = eventContentChange.reduce<Array<[Node[], string]>>((arr, item) => {
|
||||||
if (item) {
|
if (item) {
|
||||||
@@ -134,13 +134,10 @@ const createEventContentChange = (
|
|||||||
|
|
||||||
if (eventContentChange) {
|
if (eventContentChange) {
|
||||||
map = new WeakMap();
|
map = new WeakMap();
|
||||||
_updateElements();
|
updateElements();
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return [destroy, updateElements];
|
||||||
_destroy,
|
|
||||||
_updateElements,
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -167,10 +164,7 @@ export const createDOMObserver = <ContentObserver extends boolean>(
|
|||||||
_ignoreNestedTargetChange,
|
_ignoreNestedTargetChange,
|
||||||
_ignoreContentChange,
|
_ignoreContentChange,
|
||||||
} = (options as DOMContentObserverOptions & DOMTargetObserverOptions) || {};
|
} = (options as DOMContentObserverOptions & DOMTargetObserverOptions) || {};
|
||||||
const {
|
const [destroyEventContentChange, updateEventContentChangeElements] = createEventContentChange(
|
||||||
_destroy: destroyEventContentChange,
|
|
||||||
_updateElements: updateEventContentChangeElements,
|
|
||||||
} = createEventContentChange(
|
|
||||||
target,
|
target,
|
||||||
debounce(
|
debounce(
|
||||||
() => {
|
() => {
|
||||||
@@ -267,18 +261,18 @@ export const createDOMObserver = <ContentObserver extends boolean>(
|
|||||||
});
|
});
|
||||||
isConnected = true;
|
isConnected = true;
|
||||||
|
|
||||||
return {
|
return [
|
||||||
_destroy: () => {
|
() => {
|
||||||
if (isConnected) {
|
if (isConnected) {
|
||||||
destroyEventContentChange();
|
destroyEventContentChange();
|
||||||
mutationObserver.disconnect();
|
mutationObserver.disconnect();
|
||||||
isConnected = false;
|
isConnected = false;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
_update: () => {
|
() => {
|
||||||
if (isConnected) {
|
if (isConnected) {
|
||||||
observerCallback(mutationObserver.takeRecords());
|
observerCallback(mutationObserver.takeRecords());
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
};
|
];
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ export const OverlayScrollbars: OverlayScrollbarsStatic = (
|
|||||||
_nativeScrollbarIsOverlaid.y &&
|
_nativeScrollbarIsOverlaid.y &&
|
||||||
!currentOptions.nativeScrollbarsOverlaid.initialize
|
!currentOptions.nativeScrollbarsOverlaid.initialize
|
||||||
) {
|
) {
|
||||||
triggerEvent('initializationWithdrawn', false);
|
triggerEvent('initializationWithdrawn');
|
||||||
}
|
}
|
||||||
|
|
||||||
const structureSetup: StructureSetup = createStructureSetup(target);
|
const structureSetup: StructureSetup = createStructureSetup(target);
|
||||||
@@ -106,7 +106,7 @@ export const OverlayScrollbars: OverlayScrollbarsStatic = (
|
|||||||
lifecycleHub._destroy();
|
lifecycleHub._destroy();
|
||||||
removeInstance(instanceTarget);
|
removeInstance(instanceTarget);
|
||||||
removeEvent();
|
removeEvent();
|
||||||
triggerEvent('destroyed', false);
|
triggerEvent('destroyed');
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -121,7 +121,7 @@ export const OverlayScrollbars: OverlayScrollbarsStatic = (
|
|||||||
|
|
||||||
addInstance(instanceTarget, instance);
|
addInstance(instanceTarget, instance);
|
||||||
|
|
||||||
triggerEvent('initialized', false);
|
triggerEvent('initialized');
|
||||||
|
|
||||||
return instance;
|
return instance;
|
||||||
};
|
};
|
||||||
|
|||||||
+1
-5
@@ -7,11 +7,7 @@ export interface CacheOptions<Value> {
|
|||||||
_alwaysUpdateValues?: boolean;
|
_alwaysUpdateValues?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type CacheValues<T> = [
|
export type CacheValues<T> = [value: T, changed: boolean, previous?: T];
|
||||||
T, // value
|
|
||||||
boolean, // changed
|
|
||||||
T? // previous
|
|
||||||
];
|
|
||||||
|
|
||||||
export type EqualCachePropFunction<Value> = (currentVal: Value, newVal: Value) => boolean;
|
export type EqualCachePropFunction<Value> = (currentVal: Value, newVal: Value) => boolean;
|
||||||
|
|
||||||
|
|||||||
+4
-4
@@ -125,13 +125,13 @@ interface OnOverflowChangedEventListenerArgs {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
interface EventListenerArgsMap {
|
interface EventListenerArgsMap {
|
||||||
initialized: false;
|
initialized: undefined;
|
||||||
initializationWithdrawn: false;
|
initializationWithdrawn: undefined;
|
||||||
overflowChanged: OnOverflowChangedEventListenerArgs;
|
overflowChanged: OnOverflowChangedEventListenerArgs;
|
||||||
updated: OnUpdatedEventListenerArgs;
|
updated: OnUpdatedEventListenerArgs;
|
||||||
destroyed: false;
|
destroyed: undefined;
|
||||||
}
|
}
|
||||||
type OSEventListener<N extends keyof EventListenerArgsMap> = (args: EventListenerArgsMap[N]) => void;
|
type OSEventListener<N extends keyof EventListenerArgsMap> = undefined extends EventListenerArgsMap[N] ? () => void : (args: EventListenerArgsMap[N]) => void;
|
||||||
type AddEventListener = <N extends keyof EventListenerArgsMap>(name: N, listener: OSEventListener<N> | OSEventListener<N>[]) => () => void;
|
type AddEventListener = <N extends keyof EventListenerArgsMap>(name: N, listener: OSEventListener<N> | OSEventListener<N>[]) => () => void;
|
||||||
type RemoveEventListener = <N extends keyof EventListenerArgsMap>(name?: N, listener?: OSEventListener<N> | OSEventListener<N>[]) => void;
|
type RemoveEventListener = <N extends keyof EventListenerArgsMap>(name?: N, listener?: OSEventListener<N> | OSEventListener<N>[]) => void;
|
||||||
type EventListenersMap = {
|
type EventListenersMap = {
|
||||||
|
|||||||
Reference in New Issue
Block a user