65 lines
2.1 KiB
JavaScript
65 lines
2.1 KiB
JavaScript
(function() {
|
|
var SOURCES = window.TEXT_VARIABLES.sources;
|
|
window.Lazyload.js(SOURCES.jquery, function() {
|
|
var $body = $('body'), $window = $(window);
|
|
var $pageRoot = $('.js-page-root'), $pageMain = $('.js-page-main');
|
|
var activeCount = 0;
|
|
function modal(options) {
|
|
var $root = this, visible, onChange, hideWhenWindowScroll = false;
|
|
var scrollTop;
|
|
function setOptions(options) {
|
|
var _options = options || {};
|
|
visible = _options.initialVisible === undefined ? false : show;
|
|
onChange = _options.onChange;
|
|
hideWhenWindowScroll = _options.hideWhenWindowScroll;
|
|
}
|
|
function init() {
|
|
setState(visible);
|
|
}
|
|
function setState(isShow) {
|
|
if (isShow === visible) {
|
|
return;
|
|
}
|
|
visible = isShow;
|
|
if (visible) {
|
|
activeCount++;
|
|
scrollTop = $(window).scrollTop() || $pageMain.scrollTop();
|
|
$root.addClass('modal--show');
|
|
$pageMain.scrollTop(scrollTop);
|
|
activeCount === 1 && ($pageRoot.addClass('show-modal'), $body.addClass('of-hidden'));
|
|
hideWhenWindowScroll && window.hasEvent('touchstart') && $window.on('scroll', hide);
|
|
$window.on('keyup', handleKeyup);
|
|
} else {
|
|
activeCount > 0 && activeCount--;
|
|
$root.removeClass('modal--show');
|
|
$window.scrollTop(scrollTop);
|
|
activeCount === 0 && ($pageRoot.removeClass('show-modal'), $body.removeClass('of-hidden'));
|
|
hideWhenWindowScroll && window.hasEvent('touchstart') && $window.off('scroll', hide);
|
|
$window.off('keyup', handleKeyup);
|
|
}
|
|
onChange && onChange(visible);
|
|
}
|
|
function show() {
|
|
setState(true);
|
|
}
|
|
function hide() {
|
|
setState(false);
|
|
}
|
|
function handleKeyup(e) {
|
|
// Char Code: 27 ESC
|
|
if (e.which === 27) {
|
|
hide();
|
|
}
|
|
}
|
|
setOptions(options);
|
|
init();
|
|
return {
|
|
show: show,
|
|
hide: hide,
|
|
$el: $root
|
|
};
|
|
}
|
|
$.fn.modal = modal;
|
|
});
|
|
})();
|