(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; }); })();