summaryrefslogtreecommitdiff
path: root/_includes/scripts/lib/modal.js
diff options
context:
space:
mode:
authorKarl Hallsby <karl@hallsby.com>2020-09-27 17:45:13 -0500
committerKarl Hallsby <karl@hallsby.com>2020-09-27 17:45:13 -0500
commitc6bf5f7c895287d2028f6024265913b59784a154 (patch)
tree3a298df17d9472a679411dd81ea00a1239652477 /_includes/scripts/lib/modal.js
parent50dafcddc0392b99b228824274b1b97d0e72e423 (diff)
Bring all of jekyll-text-theme _includes into site
Diffstat (limited to '_includes/scripts/lib/modal.js')
-rw-r--r--_includes/scripts/lib/modal.js64
1 files changed, 64 insertions, 0 deletions
diff --git a/_includes/scripts/lib/modal.js b/_includes/scripts/lib/modal.js
new file mode 100644
index 0000000..cb5d188
--- /dev/null
+++ b/_includes/scripts/lib/modal.js
@@ -0,0 +1,64 @@
+(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;
+ });
+})();