vendor/assets/javascripts/ustyle/overlay.js in ustyle-1.16.1 vs vendor/assets/javascripts/ustyle/overlay.js in ustyle-1.16.2
- old
+ new
@@ -7,45 +7,64 @@
var defaults = {
bodyActiveClass: "us-overlay--open",
activeClass: "us-overlay-parent--active",
visibleClass: "us-overlay-parent--visible",
- overlay: $(".us-overlay-parent"),
+ overlay: document.querySelector('.us-overlay-parent'),
openButton: ".js-open-overlay",
closeButton: ".js-close-overlay",
historyStatus: "#seedeal",
history: false,
preventDefault: true,
animationSpeed: 300
};
function Overlay(options) {
this.overlay = (this.options = setOptions(options, defaults)).overlay;
+
+ if (this.overlay instanceof jQuery) {
+ this.overlay = document.querySelector(this.overlay.selector);
+ }
+
+ if (this.options.openButton instanceof jQuery) {
+ this.options.openButton = document.querySelector(this.options.openButton.selector);
+ }
+
if ((this.overlay != null) && (typeof Backdrop !== "undefined" && Backdrop !== null)) {
this.backdrop = new Backdrop();
this.addEventListeners();
} else {
throw new Error("There's no overlay or you haven't included Backdrop");
}
}
- Overlay.prototype.addEventListeners = function() {
- $(this.options.openButton).on("click.open-overlay", (function(_this) {
- return function(e) {
+ Overlay.prototype.addEventListeners = function () {
+ var openOverlayEvent = new CustomEvent('click.open-overlay');
+ var closeOverlayEvent = new CustomEvent('click.close-overlay');
+ var openButton = typeof this.options.openButton === 'string' ? document.querySelector(this.options.openButton) : this.options.openButton;
+
+ var onOpenButtonClick = (function (_this) {
+ return function (e) {
if (_this.options.preventDefault) {
e.preventDefault();
}
+ openButton.dispatchEvent(openOverlayEvent);
+
return _this.show(e);
- };
- })(this));
+ }
+ })(this);
- this.overlay.on("click.close-overlay", (function(_this) {
- return function(e) {
+ if (openButton) {
+ openButton.addEventListener('click', onOpenButtonClick);
+ }
+
+ var onCloseOverlay = (function (_this) {
+ return function (e) {
var results = [];
- var closeTargets = _this.overlay.find(_this.options.closeButton).toArray();
- var targets = [_this.overlay[0]].concat(closeTargets);
+ var closeTargets = _this.overlay.querySelectorAll(_this.options.closeButton);
+ var targets = [_this.overlay].concat(Array.prototype.slice.call(closeTargets));
for (var i = targets.length - 1; i >= 0; i--) {
var target = targets[i];
if (e.target === target) {
if (_this.options.preventDefault) {
@@ -57,14 +76,18 @@
} else {
results.push(void 0);
}
};
+ _this.overlay.dispatchEvent(closeOverlayEvent);
+
return results;
};
- })(this));
+ })(this);
+ this.overlay.addEventListener('click', onCloseOverlay);
+
if (this.hasHistory()) {
return window.onpopstate = (function(_this) {
return function(e) {
if (_this.isOpen()) {
return _this.hide(e);
@@ -72,18 +95,20 @@
};
})(this);
}
};
- Overlay.prototype.show = function(e) {
+ Overlay.prototype.show = function (e) {
var onFrame;
var _this = this;
- $(document.body).addClass(this.options.bodyActiveClass);
+
+ addClass(document.body, this.options.bodyActiveClass);
this.backdrop.retain();
- addClass(this.overlay[0], this.options.visibleClass);
+ addClass(this.overlay, this.options.visibleClass);
+
onFrame = function() {
- addClass(_this.overlay[0], _this.options.activeClass);
+ addClass(_this.overlay, _this.options.activeClass);
return setTimeout(function() {
var base;
return typeof (base = _this.options).onOpen === "function" ? base.onOpen(e) : void 0;
}, _this.options.animationSpeed);
};
@@ -95,26 +120,28 @@
};
Overlay.prototype.hide = function(e) {
var onFrame;
var _this = this;
- $(document.body).removeClass(this.options.bodyActiveClass);
+
+ removeClass(document.body, this.options.bodyActiveClass);
this.backdrop.release();
+
onFrame = function() {
- removeClass(_this.overlay[0], _this.options.activeClass);
+ removeClass(_this.overlay, _this.options.activeClass);
return setTimeout(function() {
var base;
- removeClass(_this.overlay[0], _this.options.visibleClass);
+ removeClass(_this.overlay, _this.options.visibleClass);
return typeof (base = _this.options).onClose === "function" ? base.onClose(e) : void 0;
}, _this.options.animationSpeed);
};
requestAnimationFrame.call(window, onFrame);
if (this.hasHistory() && history.state === "open") return history.back();
};
Overlay.prototype.isOpen = function() {
- return hasClass(this.overlay[0], this.options.activeClass);
+ return hasClass(this.overlay, this.options.activeClass);
};
Overlay.prototype.hasHistory = function() {
return this.options.history && window.history && window.history.pushState;
};