2018-12-26 08:45:53 +01:00
|
|
|
var shade = (function() {
|
|
|
|
|
|
|
|
var previousShade = null;
|
|
|
|
|
2019-01-03 23:30:27 +01:00
|
|
|
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-03 23:30:27 +01:00
|
|
|
var render = function(options) {
|
2018-12-26 08:45:53 +01:00
|
|
|
var defaultOptions = {
|
|
|
|
action: null,
|
|
|
|
includeHeader: false
|
|
|
|
};
|
|
|
|
if (options) {
|
|
|
|
defaultOptions = helper.applyOptions(defaultOptions, options);
|
|
|
|
};
|
|
|
|
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");
|
2018-12-26 08:45:53 +01:00
|
|
|
if (defaultOptions.includeHeader) {
|
|
|
|
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();
|
|
|
|
if (defaultOptions.action) {
|
|
|
|
defaultOptions.action();
|
|
|
|
};
|
|
|
|
}, 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
|
|
|
|
};
|
|
|
|
|
|
|
|
})();
|