scroll-padlock
Version:
Locks elements scroll handling scrollbar gaps and iOS Safari with CSS variables
605 lines (449 loc) • 25.1 kB
JavaScript
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
function _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError("attempted to set read only private field"); } descriptor.value = value; } }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
var win = window;
var doc = document;
var documentElement = doc.documentElement,
body = doc.body,
head = doc.head;
var HYPHEN = '-';
var OUTER = 'outer';
var INNER = 'inner';
var CLIENT = 'client';
var SCROLLBAR = 'scrollbar';
var SCROLL = 'scroll';
var RESIZE = 'resize';
var WIDTH_CAPITALIZED = 'Width';
var HEIGHT_CAPITALIZED = 'Height';
var Y_UPPERCASE = 'Y';
var X_UPPERCASE = 'X';
var OFFSET_CAPITALIZED = 'Offset';
var TOP_CAPITALIZED = 'Top';
var LEFT_CAPITALIZED = 'Left';
var PAGE = 'page';
var CSS_VAR_PREFIX = HYPHEN + HYPHEN;
var ADD = 'add';
var REMOVE = 'remove';
var DOM_BASE_NAME = SCROLL + HYPHEN + 'padlock';
var DOM_DATA_ATTRIBUTE_NAME = 'data' + HYPHEN + DOM_BASE_NAME;
var lowercase = function lowercase(string) {
return string.toLowerCase();
};
var TOP = lowercase(TOP_CAPITALIZED);
var LEFT = lowercase(LEFT_CAPITALIZED);
var WIDTH = lowercase(WIDTH_CAPITALIZED);
var HEIGHT = lowercase(HEIGHT_CAPITALIZED);
var CLIENT_WIDTH = CLIENT + WIDTH_CAPITALIZED;
var CLIENT_HEIGHT = CLIENT + HEIGHT_CAPITALIZED;
var OUTER_WIDTH = OUTER + WIDTH_CAPITALIZED;
var OUTER_HEIGHT = OUTER + HEIGHT_CAPITALIZED;
var INNER_WIDTH = INNER + WIDTH_CAPITALIZED;
var INNER_HEIGHT = INNER + HEIGHT_CAPITALIZED;
var SCROLL_WIDTH = SCROLL + WIDTH_CAPITALIZED;
var SCROLL_HEIGHT = SCROLL + HEIGHT_CAPITALIZED;
var SCROLLBAR_WIDTH = SCROLLBAR + WIDTH_CAPITALIZED;
var SCROLLBAR_HEIGHT = SCROLLBAR + HEIGHT_CAPITALIZED;
var CSS_VAR_NAME_POSITION_TOP = CSS_VAR_PREFIX + DOM_BASE_NAME + HYPHEN + SCROLL + HYPHEN + TOP;
var CSS_VAR_NAME_POSITION_LEFT = CSS_VAR_PREFIX + DOM_BASE_NAME + HYPHEN + SCROLL + HYPHEN + LEFT;
var CSS_VAR_NAME_SCROLLBAR_WIDTH = CSS_VAR_PREFIX + DOM_BASE_NAME + HYPHEN + SCROLLBAR + HYPHEN + WIDTH;
var CSS_VAR_NAME_SCROLLBAR_HEIGHT = CSS_VAR_PREFIX + DOM_BASE_NAME + HYPHEN + SCROLLBAR + HYPHEN + HEIGHT;
var CSS_VAR_NAME_OUTER_WIDTH = CSS_VAR_PREFIX + DOM_BASE_NAME + HYPHEN + OUTER + HYPHEN + WIDTH;
var CSS_VAR_NAME_OUTER_HEIGHT = CSS_VAR_PREFIX + DOM_BASE_NAME + HYPHEN + OUTER + HYPHEN + HEIGHT;
var CSS_VAR_NAME_INNER_WIDTH = CSS_VAR_PREFIX + DOM_BASE_NAME + HYPHEN + INNER + HYPHEN + WIDTH;
var CSS_VAR_NAME_INNER_HEIGHT = CSS_VAR_PREFIX + DOM_BASE_NAME + HYPHEN + INNER + HYPHEN + HEIGHT;
var CSS_VAR_NAME_SCROLL_WIDTH = CSS_VAR_PREFIX + DOM_BASE_NAME + HYPHEN + SCROLL + HYPHEN + WIDTH;
var CSS_VAR_NAME_SCROLL_HEIGHT = CSS_VAR_PREFIX + DOM_BASE_NAME + HYPHEN + SCROLL + HYPHEN + HEIGHT;
var listener = function listener(method, element, eventName, _listener) {
var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;
return element === null || element === void 0 ? void 0 : element["".concat(method, "EventListener")](eventName, _listener, options);
};
var clear = win.clearImmediate || win.clearTimeout;
var set$1 = win.setImmediate || win.setTimeout;
var debounce = function debounce(fn) {
var timeout;
return function () {
for (var _len = arguments.length, rest = new Array(_len), _key = 0; _key < _len; _key++) {
rest[_key] = arguments[_key];
}
clear(timeout);
timeout = set$1(function () {
return fn.apply(null, rest);
});
};
};
var getLayout = function getLayout(element, scroller) {
var _outer, _outer$WIDTH, _outer2, _outer$HEIGHT, _outer3, _element$CLIENT_WIDTH, _element$CLIENT_HEIGH, _element$SCROLL_WIDTH, _element$SCROLL_HEIGH, _ref;
var outer = (_outer = {}, _defineProperty(_outer, WIDTH, scroller === null || scroller === void 0 ? void 0 : scroller[INNER_WIDTH]), _defineProperty(_outer, HEIGHT, scroller === null || scroller === void 0 ? void 0 : scroller[INNER_HEIGHT]), _outer);
if (!outer[WIDTH] && !outer[HEIGHT]) {
var _element$getBoundingC;
outer = (_element$getBoundingC = element === null || element === void 0 ? void 0 : element.getBoundingClientRect()) !== null && _element$getBoundingC !== void 0 ? _element$getBoundingC : {};
}
var outerWidth = (_outer$WIDTH = (_outer2 = outer) === null || _outer2 === void 0 ? void 0 : _outer2[WIDTH]) !== null && _outer$WIDTH !== void 0 ? _outer$WIDTH : 0;
var outerHeight = (_outer$HEIGHT = (_outer3 = outer) === null || _outer3 === void 0 ? void 0 : _outer3[HEIGHT]) !== null && _outer$HEIGHT !== void 0 ? _outer$HEIGHT : 0;
var innerWidth = (_element$CLIENT_WIDTH = element === null || element === void 0 ? void 0 : element[CLIENT_WIDTH]) !== null && _element$CLIENT_WIDTH !== void 0 ? _element$CLIENT_WIDTH : 0;
var innerHeight = (_element$CLIENT_HEIGH = element === null || element === void 0 ? void 0 : element[CLIENT_HEIGHT]) !== null && _element$CLIENT_HEIGH !== void 0 ? _element$CLIENT_HEIGH : 0;
return _ref = {}, _defineProperty(_ref, OUTER_WIDTH, outerWidth), _defineProperty(_ref, OUTER_HEIGHT, outerHeight), _defineProperty(_ref, INNER_WIDTH, Math.min(outerWidth, innerWidth)), _defineProperty(_ref, INNER_HEIGHT, Math.min(outerHeight, innerHeight)), _defineProperty(_ref, SCROLL_WIDTH, (_element$SCROLL_WIDTH = element === null || element === void 0 ? void 0 : element[SCROLL_WIDTH]) !== null && _element$SCROLL_WIDTH !== void 0 ? _element$SCROLL_WIDTH : 0), _defineProperty(_ref, SCROLL_HEIGHT, (_element$SCROLL_HEIGH = element === null || element === void 0 ? void 0 : element[SCROLL_HEIGHT]) !== null && _element$SCROLL_HEIGH !== void 0 ? _element$SCROLL_HEIGH : 0), _defineProperty(_ref, SCROLLBAR_WIDTH, Math.max(0, outerWidth - innerWidth)), _defineProperty(_ref, SCROLLBAR_HEIGHT, Math.max(0, outerHeight - innerHeight)), _ref;
};
var getScroll = function getScroll(element) {
var _ref2, _ref3, _element, _ref4, _ref5, _element2, _ref6;
return _ref6 = {}, _defineProperty(_ref6, TOP, (_ref2 = (_ref3 = (_element = element === null || element === void 0 ? void 0 : element[SCROLL + Y_UPPERCASE]) !== null && _element !== void 0 ? _element : element === null || element === void 0 ? void 0 : element[PAGE + Y_UPPERCASE + OFFSET_CAPITALIZED]) !== null && _ref3 !== void 0 ? _ref3 : element === null || element === void 0 ? void 0 : element[SCROLL + TOP_CAPITALIZED]) !== null && _ref2 !== void 0 ? _ref2 : 0), _defineProperty(_ref6, LEFT, (_ref4 = (_ref5 = (_element2 = element === null || element === void 0 ? void 0 : element[SCROLL + X_UPPERCASE]) !== null && _element2 !== void 0 ? _element2 : element === null || element === void 0 ? void 0 : element[PAGE + X_UPPERCASE + OFFSET_CAPITALIZED]) !== null && _ref5 !== void 0 ? _ref5 : element === null || element === void 0 ? void 0 : element[SCROLL + LEFT_CAPITALIZED]) !== null && _ref4 !== void 0 ? _ref4 : 0), _ref6;
};
var getElementParent = function getElementParent(element) {
var _element$parentElemen;
return (_element$parentElemen = element === null || element === void 0 ? void 0 : element.parentElement) !== null && _element$parentElemen !== void 0 ? _element$parentElemen : null;
};
var getElementParentsLength = function getElementParentsLength(element) {
var count = -1;
while (element) {
count++;
element = getElementParent(element);
}
return count;
};
var getElementIndex = function getElementIndex(element) {
var _getElementParent$chi, _getElementParent;
var siblings = (_getElementParent$chi = (_getElementParent = getElementParent(element)) === null || _getElementParent === void 0 ? void 0 : _getElementParent.children) !== null && _getElementParent$chi !== void 0 ? _getElementParent$chi : [];
var count = 0;
for (var i = 0, j = siblings.length; i < j; i++) {
var sibling = siblings[i];
if (sibling === element) {
return count;
}
count++;
}
return count;
};
var set = function set(element, styler, target, layout, scroll) {
var _element$getAttribute, _sheet$cssRules, _rulesData;
if (!(target !== null && target !== void 0 && target.contains(styler)) && styler) {
target.appendChild(styler);
}
var dataAttrValue = (_element$getAttribute = element === null || element === void 0 ? void 0 : element.getAttribute(DOM_DATA_ATTRIBUTE_NAME)) !== null && _element$getAttribute !== void 0 ? _element$getAttribute : getElementParentsLength(element) + HYPHEN + getElementIndex(element);
element === null || element === void 0 ? void 0 : element.setAttribute(DOM_DATA_ATTRIBUTE_NAME, dataAttrValue);
var _ref7 = styler !== null && styler !== void 0 ? styler : {},
sheet = _ref7.sheet;
var onlyRuleIndex = 0;
if (sheet !== null && sheet !== void 0 && (_sheet$cssRules = sheet.cssRules) !== null && _sheet$cssRules !== void 0 && _sheet$cssRules[onlyRuleIndex]) {
sheet.deleteRule(onlyRuleIndex);
}
var rulesData = (_rulesData = {}, _defineProperty(_rulesData, CSS_VAR_NAME_POSITION_TOP, scroll[TOP]), _defineProperty(_rulesData, CSS_VAR_NAME_POSITION_LEFT, scroll[LEFT]), _defineProperty(_rulesData, CSS_VAR_NAME_OUTER_WIDTH, layout[OUTER_WIDTH]), _defineProperty(_rulesData, CSS_VAR_NAME_OUTER_HEIGHT, layout[OUTER_HEIGHT]), _defineProperty(_rulesData, CSS_VAR_NAME_INNER_WIDTH, layout[INNER_WIDTH]), _defineProperty(_rulesData, CSS_VAR_NAME_INNER_HEIGHT, layout[INNER_HEIGHT]), _defineProperty(_rulesData, CSS_VAR_NAME_SCROLL_WIDTH, layout[SCROLL_WIDTH]), _defineProperty(_rulesData, CSS_VAR_NAME_SCROLL_HEIGHT, layout[SCROLL_HEIGHT]), _defineProperty(_rulesData, CSS_VAR_NAME_SCROLLBAR_WIDTH, layout[SCROLLBAR_WIDTH]), _defineProperty(_rulesData, CSS_VAR_NAME_SCROLLBAR_HEIGHT, layout[SCROLLBAR_HEIGHT]), _rulesData);
var rulesDataKeys = Object.keys(rulesData);
var rules = '';
for (var i = 0, j = rulesDataKeys.length; i < j; i++) {
var key = rulesDataKeys[i];
rules += "".concat(key, ": ").concat(rulesData[key], "px;");
}
sheet === null || sheet === void 0 ? void 0 : sheet.insertRule("[".concat(DOM_DATA_ATTRIBUTE_NAME, "=\"").concat(dataAttrValue, "\"] { ").concat(rules, " }"), onlyRuleIndex);
return styler;
};
var unset = function unset(element, styler) {
styler === null || styler === void 0 ? void 0 : styler.remove();
element === null || element === void 0 ? void 0 : element.removeAttribute(DOM_DATA_ATTRIBUTE_NAME);
return styler;
};
var styler = function styler(method, element, _styler, target, layout, scroll) {
var _ADD$REMOVE$method;
return (_ADD$REMOVE$method = {}, _defineProperty(_ADD$REMOVE$method, ADD, set), _defineProperty(_ADD$REMOVE$method, REMOVE, unset), _ADD$REMOVE$method)[method](element, _styler, target, layout, scroll);
};
var instances = new WeakMap();
var defaultElement = documentElement;
var defaultCssClassName = "".concat(DOM_BASE_NAME, "-locked");
var _element3 = new WeakMap();
var _target = new WeakMap();
var _scroller = new WeakMap();
var _classList = new WeakMap();
var _cssClassName = new WeakMap();
var _state = new WeakMap();
var _scrollCurrent = new WeakMap();
var _scrollSaving = new WeakMap();
var _layout = new WeakMap();
var _observerState = new WeakMap();
var _observer = new WeakMap();
var _styler2 = new WeakMap();
var _handleResize = new WeakMap();
var _handleScroll = new WeakMap();
var _listenersState = new WeakMap();
var _listenersHandlers = new WeakMap();
var _listenersTargets = new WeakMap();
var _scrollTo = new WeakMap();
var _updateState = new WeakMap();
var _performUnlockedAction = new WeakMap();
var _updateLayout = new WeakMap();
var _updateScrollCurrent = new WeakMap();
var _applyStyles = new WeakMap();
var _observeCssClass = new WeakMap();
var _unobserveCssClass = new WeakMap();
var _listener2 = new WeakMap();
var ScrollPadlock = function () {
function ScrollPadlock() {
var _this = this,
_value,
_value2;
var element = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultElement;
var cssClassName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultCssClassName;
_classCallCheck(this, ScrollPadlock);
_listenersTargets.set(this, {
get: _get_listenersTargets,
set: void 0
});
_element3.set(this, {
writable: true,
value: defaultElement
});
_target.set(this, {
writable: true,
value: body
});
_scroller.set(this, {
writable: true,
value: window
});
_classList.set(this, {
writable: true,
value: void 0
});
_cssClassName.set(this, {
writable: true,
value: defaultCssClassName
});
_state.set(this, {
writable: true,
value: void 0
});
_scrollCurrent.set(this, {
writable: true,
value: void 0
});
_scrollSaving.set(this, {
writable: true,
value: void 0
});
_layout.set(this, {
writable: true,
value: void 0
});
_observerState.set(this, {
writable: true,
value: false
});
_observer.set(this, {
writable: true,
value: function (implementationName) {
return implementationName in win ? new win[implementationName](function () {
var state = _classPrivateFieldGet(_this, _state);
_classPrivateFieldGet(_this, _updateState).call(_this);
if (_classPrivateFieldGet(_this, _state) === state) {
return;
}
if (_classPrivateFieldGet(_this, _state)) {
_classPrivateFieldSet(_this, _scrollSaving, _objectSpread({}, _classPrivateFieldGet(_this, _scrollCurrent)));
return;
}
_classPrivateFieldGet(_this, _scrollTo).call(_this, _classPrivateFieldGet(_this, _scrollSaving));
}) : null;
}('MutationObserver')
});
_styler2.set(this, {
writable: true,
value: doc.createElement('style')
});
_handleResize.set(this, {
writable: true,
value: debounce(function () {
_classPrivateFieldGet(_this, _performUnlockedAction).call(_this, _classPrivateFieldGet(_this, _updateLayout));
_classPrivateFieldGet(_this, _applyStyles).call(_this);
})
});
_handleScroll.set(this, {
writable: true,
value: debounce(function () {
_classPrivateFieldGet(_this, _performUnlockedAction).call(_this, _classPrivateFieldGet(_this, _updateScrollCurrent));
_classPrivateFieldGet(_this, _applyStyles).call(_this);
})
});
_listenersState.set(this, {
writable: true,
value: (_value = {}, _defineProperty(_value, RESIZE, REMOVE), _defineProperty(_value, SCROLL, REMOVE), _value)
});
_listenersHandlers.set(this, {
writable: true,
value: (_value2 = {}, _defineProperty(_value2, RESIZE, _classPrivateFieldGet(this, _handleResize)), _defineProperty(_value2, SCROLL, _classPrivateFieldGet(this, _handleScroll)), _value2)
});
_scrollTo.set(this, {
writable: true,
value: function value(position) {
return _classPrivateFieldGet(_this, _scroller).scrollTo(position[LEFT], position[TOP]);
}
});
_updateState.set(this, {
writable: true,
value: function value() {
var _classPrivateFieldGet2;
return _classPrivateFieldSet(_this, _state, !!((_classPrivateFieldGet2 = _classPrivateFieldGet(_this, _classList)) !== null && _classPrivateFieldGet2 !== void 0 && _classPrivateFieldGet2.contains(_classPrivateFieldGet(_this, _cssClassName))));
}
});
_performUnlockedAction.set(this, {
writable: true,
value: function value(action) {
var _classPrivateFieldGet3;
var wasLocked = _classPrivateFieldGet(_this, _state);
_classPrivateFieldGet(_this, _unobserveCssClass).call(_this);
(_classPrivateFieldGet3 = _classPrivateFieldGet(_this, _classList)) === null || _classPrivateFieldGet3 === void 0 ? void 0 : _classPrivateFieldGet3.remove(_classPrivateFieldGet(_this, _cssClassName));
var result = action();
if (wasLocked) {
var _classPrivateFieldGet4;
(_classPrivateFieldGet4 = _classPrivateFieldGet(_this, _classList)) === null || _classPrivateFieldGet4 === void 0 ? void 0 : _classPrivateFieldGet4.add(_classPrivateFieldGet(_this, _cssClassName));
}
_classPrivateFieldGet(_this, _observeCssClass).call(_this);
return result;
}
});
_updateLayout.set(this, {
writable: true,
value: function value() {
return _classPrivateFieldSet(_this, _layout, getLayout(_classPrivateFieldGet(_this, _element3), _classPrivateFieldGet(_this, _scroller)));
}
});
_updateScrollCurrent.set(this, {
writable: true,
value: function value() {
return _classPrivateFieldSet(_this, _scrollCurrent, getScroll(_classPrivateFieldGet(_this, _scroller)));
}
});
_applyStyles.set(this, {
writable: true,
value: function value() {
return styler(ADD, _classPrivateFieldGet(_this, _target), _classPrivateFieldGet(_this, _styler2), head, _this.layout, _this.scroll);
}
});
_observeCssClass.set(this, {
writable: true,
value: function value() {
var _classPrivateFieldGet5;
if (_classPrivateFieldGet(_this, _observerState)) {
return _classPrivateFieldGet(_this, _observerState);
}
(_classPrivateFieldGet5 = _classPrivateFieldGet(_this, _observer)) === null || _classPrivateFieldGet5 === void 0 ? void 0 : _classPrivateFieldGet5.observe(_classPrivateFieldGet(_this, _target), {
attributes: true,
attributeFilter: ['class'],
childList: false,
characterData: false
});
return _classPrivateFieldSet(_this, _observerState, !!_classPrivateFieldGet(_this, _observer));
}
});
_unobserveCssClass.set(this, {
writable: true,
value: function value() {
var _classPrivateFieldGet6;
if (!_classPrivateFieldGet(_this, _observerState)) {
return _classPrivateFieldGet(_this, _observerState);
}
(_classPrivateFieldGet6 = _classPrivateFieldGet(_this, _observer)) === null || _classPrivateFieldGet6 === void 0 ? void 0 : _classPrivateFieldGet6.disconnect();
return _classPrivateFieldSet(_this, _observerState, false);
}
});
_listener2.set(this, {
writable: true,
value: function value(type, method) {
var state = _classPrivateFieldGet(_this, _listenersState)[type];
if (!_classPrivateFieldGet(_this, _element3) || !state || state === method) {
return false;
}
_classPrivateFieldGet(_this, _listenersState)[type] = method;
listener(method, _classPrivateFieldGet(_this, _listenersTargets)[type], type, _classPrivateFieldGet(_this, _listenersHandlers)[type]);
return true;
}
});
var elementIsWindow = element === win;
var elementIsHtmlElement = element instanceof HTMLElement;
if (!elementIsWindow && !elementIsHtmlElement) {
throw new TypeError('Invalid element provided to constructor');
}
if (elementIsHtmlElement) {
_classPrivateFieldSet(this, _target, element);
}
var elementIsGlobal = elementIsWindow || element === documentElement || element === body;
if (!elementIsGlobal) {
_classPrivateFieldSet(this, _element3, _classPrivateFieldSet(this, _target, _classPrivateFieldSet(this, _scroller, element)));
}
if (instances.has(_classPrivateFieldGet(this, _element3))) {
throw new Error("An instance has already been initialized on ".concat(elementIsGlobal ? 'page scroll' : 'the given element'));
}
instances.set(_classPrivateFieldGet(this, _element3), this);
_classPrivateFieldSet(this, _classList, _classPrivateFieldGet(this, _target).classList);
var classNameIsValid = typeof cssClassName === 'string' && !!cssClassName.length;
if (!classNameIsValid) {
throw new TypeError('Invalid CSS class name provided to constructor');
}
_classPrivateFieldSet(this, _cssClassName, cssClassName);
this.update();
_classPrivateFieldGet(this, _observeCssClass).call(this);
_classPrivateFieldGet(this, _listener2).call(this, RESIZE, ADD);
_classPrivateFieldGet(this, _listener2).call(this, SCROLL, ADD);
}
_createClass(ScrollPadlock, [{
key: "scroll",
get: function get() {
return _classPrivateFieldGet(this, _state) ? _classPrivateFieldGet(this, _scrollSaving) : _classPrivateFieldGet(this, _scrollCurrent);
},
set: function set(position) {
if (_classPrivateFieldGet(this, _state)) {
_classPrivateFieldSet(this, _scrollSaving, position);
return;
}
_classPrivateFieldGet(this, _scrollTo).call(this, position);
}
}, {
key: "layout",
get: function get() {
return _classPrivateFieldGet(this, _layout);
}
}, {
key: "unlisten",
value: function unlisten(type) {
_classPrivateFieldGet(this, _listener2).call(this, type, REMOVE);
}
}, {
key: "listen",
value: function listen(type) {
_classPrivateFieldGet(this, _listener2).call(this, type, ADD);
}
}, {
key: "destroy",
value: function destroy() {
_classPrivateFieldGet(this, _unobserveCssClass).call(this);
styler(REMOVE, _classPrivateFieldGet(this, _element3), _classPrivateFieldGet(this, _styler2));
_classPrivateFieldGet(this, _listener2).call(this, RESIZE, REMOVE);
_classPrivateFieldGet(this, _listener2).call(this, SCROLL, REMOVE);
instances["delete"](_classPrivateFieldGet(this, _element3));
_classPrivateFieldSet(this, _element3, _classPrivateFieldSet(this, _target, _classPrivateFieldSet(this, _scroller, _classPrivateFieldSet(this, _observer, _classPrivateFieldSet(this, _styler2, _classPrivateFieldSet(this, _classList, null))))));
}
}, {
key: "update",
value: function update() {
var _this2 = this;
_classPrivateFieldGet(this, _updateState).call(this);
_classPrivateFieldGet(this, _performUnlockedAction).call(this, function () {
_classPrivateFieldGet(_this2, _updateLayout).call(_this2);
_classPrivateFieldGet(_this2, _updateScrollCurrent).call(_this2);
});
_classPrivateFieldGet(this, _applyStyles).call(this);
}
}]);
return ScrollPadlock;
}();
function _get_listenersTargets() {
var _ref8;
return _ref8 = {}, _defineProperty(_ref8, RESIZE, win), _defineProperty(_ref8, SCROLL, _classPrivateFieldGet(this, _scroller)), _ref8;
}
export default ScrollPadlock;
//# sourceMappingURL=scroll-padlock.js.map