nightTab/js/shade.js

73 lines
1.9 KiB
JavaScript
Raw Normal View History

2018-12-26 08:45:53 +01:00
var shade = (function() {
var previousShade = null;
var destroy = function() {
2018-12-28 15:26:32 +01:00
var all_shade = helper.eA(".shade");
2018-12-26 08:45:53 +01:00
if (all_shade[0]) {
for (var i = 0; i < all_shade.length; i++) {
all_shade[i].destroy();
};
};
};
2019-01-06 16:47:08 +01:00
var render = function(override) {
var options = {
2018-12-26 08:45:53 +01:00
action: null,
includeHeader: false
};
2019-01-06 16:47:08 +01:00
if (override) {
options = helper.applyOptions(options, override);
2018-12-26 08:45:53 +01:00
};
var _destroy_previousShade = function() {
if (previousShade != null) {
destroy();
};
};
var _render_shade = function() {
var body = helper.e("body");
var shade = document.createElement("div");
2018-12-28 15:26:32 +01:00
shade.setAttribute("class", "shade");
2019-01-06 16:47:08 +01:00
if (options.includeHeader) {
2018-12-26 08:45:53 +01:00
helper.addClass(shade, "m-shade-top");
};
shade.destroy = function() {
if (shade.classList.contains("is-opaque")) {
helper.removeClass(shade, "is-opaque");
helper.addClass(shade, "is-transparent");
} else {
shade.remove();
};
};
shade.addEventListener("transitionend", function(event, elapsed) {
if (event.propertyName === "opacity" && getComputedStyle(this).opacity == 0) {
this.parentElement.removeChild(this);
};
if (event.propertyName === "opacity" && getComputedStyle(this).opacity == 1) {
helper.addClass(this, "is-transition-end");
};
}.bind(shade), false);
shade.addEventListener("click", function() {
this.destroy();
2019-01-06 16:47:08 +01:00
if (options.action) {
options.action();
2018-12-26 08:45:53 +01:00
};
}, false);
previousShade = shade;
body.appendChild(shade);
getComputedStyle(shade).opacity;
helper.removeClass(shade, "is-transparent");
helper.addClass(shade, "is-opaque");
};
_destroy_previousShade();
_render_shade();
};
// exposed methods
return {
destroy: destroy,
render: render
};
})();