From 3c3c90ddf76b1c1e94ea051d6c5806e1876c1d3f Mon Sep 17 00:00:00 2001 From: phucbm Date: Tue, 30 Aug 2022 11:33:18 +0700 Subject: [PATCH 1/7] :sparkles: add option to toggle feature Click outside to close --- README.md | 4 +++- index.html | 3 ++- src/easy-popup.js | 16 +++++++++++++--- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 936510c..cd43cdb 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,8 @@ Init with HTML attributes
+ data-easy-popup-theme="my-style" + data-easy-popup-click-outside-to-close="false">

Your content.

``` @@ -51,6 +52,7 @@ EasyPopup.init('.popup', { closeButtonHTML: 'Click to close', // set custom HTML for close button outerClass: 'my-popup', // custom class for popup theme: 'default', // to create multiple themes + clickOutsideToClose: true, // true by default onOpen: data => { }, onClose: data => { diff --git a/index.html b/index.html index 27454ad..c84b241 100644 --- a/index.html +++ b/index.html @@ -93,7 +93,8 @@

Easy Popup v0.0.4

iaculis. Inceptos pulvinar scelerisque duis facilisi elementum suscipit viverra ante velit litora. Viverra ornare urna mi fames bibendum enim nunc neque et nostra placerat.

-
+

Demo 1

Click here to open popup 2.

diff --git a/src/easy-popup.js b/src/easy-popup.js index fb58adb..64f1ca9 100644 --- a/src/easy-popup.js +++ b/src/easy-popup.js @@ -22,6 +22,7 @@ toggle: `${this.selector}-toggle`, mobileLayout: `${this.selector}-mobile`, theme: `${this.selector}-theme`, + clickOutsideToClose: `${this.selector}-click-outside-to-close` }; this.classes = { master: 'easy-popup-master', @@ -52,18 +53,22 @@ triggerSelector: '', hasMobileLayout: false, // has mobile layout, false by default theme: 'default', + clickOutsideToClose: true, onClose: () => { }, onOpen: () => { } }, ...options }; + + // get string options from attribute and js init this.id = this.el.getAttribute(this.selector) || this.options.id; this.title = this.el.getAttribute(this.attributes.title) || this.options.title; this.theme = this.el.getAttribute(this.attributes.theme) || this.options.theme; - const attrHasMobileLayout = this.el.getAttribute(this.attributes.mobileLayout); - this.hasMobileLayout = attrHasMobileLayout ? attrHasMobileLayout !== 'false' : this.options.hasMobileLayout; + // get boolean options from attribute and js init + this.isClickOutsideToClose = this.isBooleanOptionTrue(this.attributes.clickOutsideToClose, this.options.clickOutsideToClose); + this.hasMobileLayout = this.isBooleanOptionTrue(this.attributes.mobileLayout, this.options.hasMobileLayout); this.closeButtonHTML = this.options.closeButtonHTML; this.masterContainer = document.querySelector(`.${this.classes.master}`); @@ -82,6 +87,11 @@ }); } + isBooleanOptionTrue(attr, option){ + const attrValue = this.el.getAttribute(attr); + return attrValue ? attrValue !== 'false' : option; + } + generateHTML(){ // check flag if(this.el.classList.contains(this.classes.processed)) return; @@ -136,7 +146,7 @@ // close when click outside of content this.outer.addEventListener('click', e => { if(e.target.classList.contains(this.classes.ignoreClick)) return; - if(this.isClickOutsideContent(e)) this.close(); + if(this.isClickOutsideContent(e) && this.isClickOutsideToClose) this.close(); }); // close buttons on click From 4f2a179924d01fe0db0c4007b491b6bc9c9ab723 Mon Sep 17 00:00:00 2001 From: phucbm Date: Tue, 30 Aug 2022 11:34:43 +0700 Subject: [PATCH 2/7] :rocket: distribute v0.0.5 --- README.md | 2 +- dist/easy-popup.min.css | 2 +- dist/easy-popup.min.js | 4 ++-- index.html | 4 ++-- src/easy-popup.css | 2 +- src/easy-popup.js | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index cd43cdb..43163e7 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Easy Popup v0.0.4 +# Easy Popup v0.0.5 Super light-weight JavaScript library to create a simple popup with mobile layout. diff --git a/dist/easy-popup.min.css b/dist/easy-popup.min.css index 8d8905b..e544c9a 100644 --- a/dist/easy-popup.min.css +++ b/dist/easy-popup.min.css @@ -1,4 +1,4 @@ /*! - * Easy Popup v0.0.4 + * Easy Popup v0.0.5 * https://github.com/viivue/easy-popup */html.easy-popup-open{overflow:hidden}html:not(.easy-popup-open) .easy-popup-master{opacity:0;visibility:hidden}.easy-popup-master{--easy-popup-mobile-breakpoint:1023px;--easy-popup-heading-height:45px;--easy-popup-top-empty-space:100px;position:fixed;top:0;left:0;width:100%;height:100%;z-index:9999;background:rgba(0,0,0,.3);backdrop-filter:blur(2px);transition:opacity .4s ease,visibility .4s ease}.easy-popup:not(.open){opacity:0;visibility:hidden;transform:scale(1.05);pointer-events:none}.easy-popup{position:absolute;top:0;left:0;height:100%;width:100%;transition:opacity .4s ease,visibility .4s ease,transform .4s ease;display:flex;align-items:center;justify-content:center}.easy-popup-overflow{position:relative;z-index:2;width:100%;max-height:100%;overflow-y:auto;overflow-x:hidden}.easy-popup-overflow ::-webkit-scrollbar{width:7px}.easy-popup-overflow ::-webkit-scrollbar-track{background:#eee}.easy-popup-overflow ::-webkit-scrollbar-thumb{background-color:#000}.easy-popup-mobile-heading{display:none;position:absolute;top:0;left:0;width:100%;background:#eee;border-radius:10px 10px 0 0}.easy-popup-heading-inner{display:flex;align-items:center;justify-content:space-between;min-height:var(--easy-popup-heading-height);padding:5px 20px}.easy-popup-container{position:relative;padding:40px 20px;box-sizing:border-box;width:100%;max-width:915px;margin:0 auto}.easy-popup-inner{position:relative}[data-easy-popup]:not(.easy-popup-enabled){display:none}.easy-popup-content{background:#fff;padding:40px;position:relative;border-radius:10px;overflow:hidden}.easy-popup-close-button{position:absolute;top:0;right:0;z-index:2;padding:10px;background:0 0;border:none}.easy-popup-close-button svg{transition:all .3s ease}.easy-popup-close-button:hover svg{fill:#ef1616}@media only screen and (max-width:1023px){.easy-popup-content{padding:25px 20px}.easy-popup.easy-popup-has-mobile-layout{align-items:flex-end}.easy-popup.easy-popup-has-mobile-layout .easy-popup-overflow{padding-top:var(--easy-popup-heading-height);overflow:hidden;display:flex}.easy-popup.easy-popup-has-mobile-layout .easy-popup-container{padding:0;overflow:auto;max-width:100%;min-height:calc(80vh - var(--easy-popup-top-empty-space));background:#fff}.easy-popup.easy-popup-has-mobile-layout .easy-popup-close-button:not(.mobile){display:none}.easy-popup.easy-popup-has-mobile-layout:not(.open) .easy-popup-overflow{transform:translateY(20%)}.easy-popup.easy-popup-has-mobile-layout .easy-popup-overflow{transition:transform .3s ease}.easy-popup.easy-popup-has-mobile-layout .easy-popup-mobile-heading{display:block}}[data-easy-popup-theme=right-side].easy-popup:not(.open){opacity:1;transform:translateX(100%)}[data-easy-popup-theme=right-side] .easy-popup-container{margin:0 0 0 auto;padding:0}[data-easy-popup-theme=right-side] .easy-popup-content{border-radius:0;height:100vh;overflow:auto} \ No newline at end of file diff --git a/dist/easy-popup.min.js b/dist/easy-popup.min.js index 898f84e..2caa5a7 100644 --- a/dist/easy-popup.min.js +++ b/dist/easy-popup.min.js @@ -1,5 +1,5 @@ /*! - * Easy Popup v0.0.4 + * Easy Popup v0.0.5 * https://github.com/viivue/easy-popup */ -!function(t){class e{constructor(t,e){if(!t)return void console.warn("Init popup fail due to empty input!");this.root=document.querySelector(":root"),this.el=t,this.selector="data-easy-popup",this.attributes={id:`${this.selector}-id`,title:`${this.selector}-title`,toggle:`${this.selector}-toggle`,mobileLayout:`${this.selector}-mobile`,theme:`${this.selector}-theme`},this.classes={master:"easy-popup-master",processed:"easy-popup-enabled",triggerEnabled:"easy-popup-trigger-enabled",content:"easy-popup-content",outer:"easy-popup",inner:"easy-popup-inner",center:"easy-popup-center",overflow:"easy-popup-overflow",container:"easy-popup-container",open:"open",closeButton:"easy-popup-close-button",mobileHeading:"easy-popup-mobile-heading",hasMobileLayout:"easy-popup-has-mobile-layout",ignoreClick:"easy-popup-ignore-click"},this.innerHTML=this.el.innerHTML,this.isOpen=!1,this.options={id:this.uniqueId("easy-popup-"),outerClass:"",title:"",closeButtonHTML:'',triggerSelector:"",hasMobileLayout:!1,theme:"default",onClose:()=>{},onOpen:()=>{},...e},this.id=this.el.getAttribute(this.selector)||this.options.id,this.title=this.el.getAttribute(this.attributes.title)||this.options.title,this.theme=this.el.getAttribute(this.attributes.theme)||this.options.theme;const s=this.el.getAttribute(this.attributes.mobileLayout);this.hasMobileLayout=s?"false"!==s:this.options.hasMobileLayout,this.closeButtonHTML=this.options.closeButtonHTML,this.masterContainer=document.querySelector(`.${this.classes.master}`),this.generateHTML();let i=`a[href="#${this.id}"], [${this.attributes.toggle}="${this.id}"]`;i=this.options.triggerSelector?`${this.options.triggerSelector}, ${i}`:i,document.querySelectorAll(i).forEach((t=>{t.classList.add(this.classes.triggerEnabled),t.addEventListener("click",(t=>{t.preventDefault(),this.toggle()}))}))}generateHTML(){this.el.classList.contains(this.classes.processed)||(this.masterContainer||(this.masterContainer=document.createElement("div"),this.masterContainer.classList.add(this.classes.master)),document.querySelector("body").appendChild(this.masterContainer),this.masterContainer.appendChild(this.el),this.inner=this.wrap(this.el),this.inner.classList.add(this.classes.inner),this.closeButton=document.createElement("button"),this.closeButton.classList.add(this.classes.closeButton),this.closeButton.innerHTML=this.closeButtonHTML,this.closeButton.setAttribute(this.attributes.toggle,""),this.closeButton.addEventListener("click",(()=>this.close())),this.inner.appendChild(this.closeButton),this.container=this.wrap(this.inner),this.container.classList.add(this.classes.container),this.overflow=this.wrap(this.container),this.overflow.classList.add(this.classes.overflow),this.mobileHeading=document.createElement("div"),this.mobileHeading.classList.add(this.classes.mobileHeading),this.mobileHeading.innerHTML=`

\n
${this.title}
\n \n
`,this.overflow.appendChild(this.mobileHeading),this.outer=this.wrap(this.overflow),this.outer.classList.add(this.classes.outer),this.options.outerClass&&this.outer.classList.add(this.options.outerClass),this.hasMobileLayout&&this.outer.classList.add(this.classes.hasMobileLayout),this.outer.setAttribute(this.attributes.id,this.id),this.outer.setAttribute(this.attributes.theme,this.theme),this.outer.addEventListener("click",(t=>{t.target.classList.contains(this.classes.ignoreClick)||this.isClickOutsideContent(t)&&this.close()})),this.outer.querySelectorAll("[data-easy-popup-toggle]").forEach((t=>{t.addEventListener("click",(()=>this.close()))})),this.el.classList.add(this.classes.processed,this.classes.content))}isClickOutsideContent(t){return!this.inner.contains(t.target)&&!this.mobileHeading.contains(t.target)}open(){window.EasyPopupData.active&&t.get(window.EasyPopupData.active).close(),window.EasyPopupData.active=this.id,this.outer.classList.add(this.classes.open),this.isOpen=!0,this.root.classList.add("easy-popup-open"),this.root.style.paddingRight=`${this.getScrollbarWidth()}px`,this.root.style.overflow="hidden","function"==typeof this.options.onOpen&&this.options.onOpen(this)}close(){window.EasyPopupData.active="",this.outer.classList.remove(this.classes.open),this.isOpen=!1,this.root.classList.remove("easy-popup-open"),setTimeout((()=>{window.EasyPopupData.active||(this.root.style.paddingRight="",this.root.style.overflow=""),"function"==typeof this.options.onClose&&this.options.onClose(this)}),300)}toggle(){this.isOpen?this.close():this.open()}wrap(t,e=document.createElement("div")){return t.parentNode.insertBefore(e,t),e.appendChild(t),e}getScrollbarWidth(){const t=document.createElement("div");t.style.visibility="hidden",t.style.overflow="scroll",t.style.msOverflowStyle="scrollbar",document.body.appendChild(t);const e=document.createElement("div");t.appendChild(e);const s=t.offsetWidth-e.offsetWidth;return t.parentNode.removeChild(t),s}uniqueId(t=""){return t+(+new Date).toString(16)+(1e8*Math.random()|0).toString(16)}}window.EasyPopupData=new class{constructor(){this.active="",this.popups=[]}add(t){this.popups.push(t)}get(t){return this.popups.filter((e=>e.id===t))[0]}},t.init=(t="[data-easy-popup]",s={})=>{document.querySelectorAll(t).forEach((t=>window.EasyPopupData.add(new e(t,s))))},t.init(),t.get=t=>window.EasyPopupData.get(t)}(window.EasyPopup=window.EasyPopup||{}); \ No newline at end of file +!function(t){class e{constructor(t,e){if(!t)return void console.warn("Init popup fail due to empty input!");this.root=document.querySelector(":root"),this.el=t,this.selector="data-easy-popup",this.attributes={id:`${this.selector}-id`,title:`${this.selector}-title`,toggle:`${this.selector}-toggle`,mobileLayout:`${this.selector}-mobile`,theme:`${this.selector}-theme`,clickOutsideToClose:`${this.selector}-click-outside-to-close`},this.classes={master:"easy-popup-master",processed:"easy-popup-enabled",triggerEnabled:"easy-popup-trigger-enabled",content:"easy-popup-content",outer:"easy-popup",inner:"easy-popup-inner",center:"easy-popup-center",overflow:"easy-popup-overflow",container:"easy-popup-container",open:"open",closeButton:"easy-popup-close-button",mobileHeading:"easy-popup-mobile-heading",hasMobileLayout:"easy-popup-has-mobile-layout",ignoreClick:"easy-popup-ignore-click"},this.innerHTML=this.el.innerHTML,this.isOpen=!1,this.options={id:this.uniqueId("easy-popup-"),outerClass:"",title:"",closeButtonHTML:'',triggerSelector:"",hasMobileLayout:!1,theme:"default",clickOutsideToClose:!0,onClose:()=>{},onOpen:()=>{},...e},this.id=this.el.getAttribute(this.selector)||this.options.id,this.title=this.el.getAttribute(this.attributes.title)||this.options.title,this.theme=this.el.getAttribute(this.attributes.theme)||this.options.theme,this.isClickOutsideToClose=this.isBooleanOptionTrue(this.attributes.clickOutsideToClose,this.options.clickOutsideToClose),this.hasMobileLayout=this.isBooleanOptionTrue(this.attributes.mobileLayout,this.options.hasMobileLayout),this.closeButtonHTML=this.options.closeButtonHTML,this.masterContainer=document.querySelector(`.${this.classes.master}`),this.generateHTML();let s=`a[href="#${this.id}"], [${this.attributes.toggle}="${this.id}"]`;s=this.options.triggerSelector?`${this.options.triggerSelector}, ${s}`:s,document.querySelectorAll(s).forEach((t=>{t.classList.add(this.classes.triggerEnabled),t.addEventListener("click",(t=>{t.preventDefault(),this.toggle()}))}))}isBooleanOptionTrue(t,e){const s=this.el.getAttribute(t);return s?"false"!==s:e}generateHTML(){this.el.classList.contains(this.classes.processed)||(this.masterContainer||(this.masterContainer=document.createElement("div"),this.masterContainer.classList.add(this.classes.master)),document.querySelector("body").appendChild(this.masterContainer),this.masterContainer.appendChild(this.el),this.inner=this.wrap(this.el),this.inner.classList.add(this.classes.inner),this.closeButton=document.createElement("button"),this.closeButton.classList.add(this.classes.closeButton),this.closeButton.innerHTML=this.closeButtonHTML,this.closeButton.setAttribute(this.attributes.toggle,""),this.closeButton.addEventListener("click",(()=>this.close())),this.inner.appendChild(this.closeButton),this.container=this.wrap(this.inner),this.container.classList.add(this.classes.container),this.overflow=this.wrap(this.container),this.overflow.classList.add(this.classes.overflow),this.mobileHeading=document.createElement("div"),this.mobileHeading.classList.add(this.classes.mobileHeading),this.mobileHeading.innerHTML=`
\n
${this.title}
\n \n
`,this.overflow.appendChild(this.mobileHeading),this.outer=this.wrap(this.overflow),this.outer.classList.add(this.classes.outer),this.options.outerClass&&this.outer.classList.add(this.options.outerClass),this.hasMobileLayout&&this.outer.classList.add(this.classes.hasMobileLayout),this.outer.setAttribute(this.attributes.id,this.id),this.outer.setAttribute(this.attributes.theme,this.theme),this.outer.addEventListener("click",(t=>{t.target.classList.contains(this.classes.ignoreClick)||this.isClickOutsideContent(t)&&this.isClickOutsideToClose&&this.close()})),this.outer.querySelectorAll("[data-easy-popup-toggle]").forEach((t=>{t.addEventListener("click",(()=>this.close()))})),this.el.classList.add(this.classes.processed,this.classes.content))}isClickOutsideContent(t){return!this.inner.contains(t.target)&&!this.mobileHeading.contains(t.target)}open(){window.EasyPopupData.active&&t.get(window.EasyPopupData.active).close(),window.EasyPopupData.active=this.id,this.outer.classList.add(this.classes.open),this.isOpen=!0,this.root.classList.add("easy-popup-open"),this.root.style.paddingRight=`${this.getScrollbarWidth()}px`,this.root.style.overflow="hidden","function"==typeof this.options.onOpen&&this.options.onOpen(this)}close(){window.EasyPopupData.active="",this.outer.classList.remove(this.classes.open),this.isOpen=!1,this.root.classList.remove("easy-popup-open"),setTimeout((()=>{window.EasyPopupData.active||(this.root.style.paddingRight="",this.root.style.overflow=""),"function"==typeof this.options.onClose&&this.options.onClose(this)}),300)}toggle(){this.isOpen?this.close():this.open()}wrap(t,e=document.createElement("div")){return t.parentNode.insertBefore(e,t),e.appendChild(t),e}getScrollbarWidth(){const t=document.createElement("div");t.style.visibility="hidden",t.style.overflow="scroll",t.style.msOverflowStyle="scrollbar",document.body.appendChild(t);const e=document.createElement("div");t.appendChild(e);const s=t.offsetWidth-e.offsetWidth;return t.parentNode.removeChild(t),s}uniqueId(t=""){return t+(+new Date).toString(16)+(1e8*Math.random()|0).toString(16)}}window.EasyPopupData=new class{constructor(){this.active="",this.popups=[]}add(t){this.popups.push(t)}get(t){return this.popups.filter((e=>e.id===t))[0]}},t.init=(t="[data-easy-popup]",s={})=>{document.querySelectorAll(t).forEach((t=>window.EasyPopupData.add(new e(t,s))))},t.init(),t.get=t=>window.EasyPopupData.get(t)}(window.EasyPopup=window.EasyPopup||{}); \ No newline at end of file diff --git a/index.html b/index.html index c84b241..e97c661 100644 --- a/index.html +++ b/index.html @@ -3,7 +3,7 @@ - Easy Popup v0.0.4 + Easy Popup v0.0.5 @@ -39,7 +39,7 @@
-

Easy Popup v0.0.4

+

Easy Popup v0.0.5

Click here to open popup 1.

Or here diff --git a/src/easy-popup.css b/src/easy-popup.css index 4a9188a..e3c952a 100644 --- a/src/easy-popup.css +++ b/src/easy-popup.css @@ -1,5 +1,5 @@ /*! - * Easy Popup v0.0.4 + * Easy Popup v0.0.5 * https://github.com/viivue/easy-popup */ /* master */ diff --git a/src/easy-popup.js b/src/easy-popup.js index 64f1ca9..c3fdb40 100644 --- a/src/easy-popup.js +++ b/src/easy-popup.js @@ -1,5 +1,5 @@ /*! - * Easy Popup v0.0.4 + * Easy Popup v0.0.5 * https://github.com/viivue/easy-popup */ ;(function(EasyPopup){ From 68e07041dd90d840c13fde693d74945da2ac1159 Mon Sep 17 00:00:00 2001 From: vupham Date: Wed, 31 Aug 2022 16:28:43 +0700 Subject: [PATCH 3/7] add option keyboard for easy popup --- src/easy-popup.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/easy-popup.js b/src/easy-popup.js index fb58adb..75c33f4 100644 --- a/src/easy-popup.js +++ b/src/easy-popup.js @@ -52,6 +52,7 @@ triggerSelector: '', hasMobileLayout: false, // has mobile layout, false by default theme: 'default', + keyboard: true, onClose: () => { }, onOpen: () => { @@ -144,6 +145,15 @@ btn.addEventListener('click', () => this.close()); }); + // add event listener when press ESC + if (this.options.keyboard){ + document.addEventListener('keyup', (e) => { + if(this.isOpen && e.keyCode === 27){ + this.close(); + } + }) + } + // done init this.el.classList.add(this.classes.processed, this.classes.content); } From c2a330844bd19df5433091d7d8a3e2a7268044ed Mon Sep 17 00:00:00 2001 From: vupham Date: Wed, 31 Aug 2022 16:36:02 +0700 Subject: [PATCH 4/7] replace keyCode to key on keyup event --- src/easy-popup.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/easy-popup.js b/src/easy-popup.js index 75c33f4..3673f8a 100644 --- a/src/easy-popup.js +++ b/src/easy-popup.js @@ -148,7 +148,7 @@ // add event listener when press ESC if (this.options.keyboard){ document.addEventListener('keyup', (e) => { - if(this.isOpen && e.keyCode === 27){ + if(this.isOpen && e.key === 'Escape'){ this.close(); } }) From 970900fb396174ec2da5100872ca8596d0657898 Mon Sep 17 00:00:00 2001 From: vupham Date: Wed, 31 Aug 2022 17:56:53 +0700 Subject: [PATCH 5/7] update readme and reformat code --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 43163e7..d806fd9 100644 --- a/README.md +++ b/README.md @@ -53,6 +53,7 @@ EasyPopup.init('.popup', { outerClass: 'my-popup', // custom class for popup theme: 'default', // to create multiple themes clickOutsideToClose: true, // true by default + keyboard: true, // to close the popup by keyboard (ESC) onOpen: data => { }, onClose: data => { From d93e2c4fc899564bc7cdce3af76fcf4152541587 Mon Sep 17 00:00:00 2001 From: vupham Date: Wed, 31 Aug 2022 18:03:48 +0700 Subject: [PATCH 6/7] update readme and reformat code --- src/easy-popup.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/easy-popup.js b/src/easy-popup.js index 8cc0c61..8692ca2 100644 --- a/src/easy-popup.js +++ b/src/easy-popup.js @@ -54,7 +54,7 @@ hasMobileLayout: false, // has mobile layout, false by default theme: 'default', - keyboard: true, + keyboard: true, // option for closing the popup by keyboard (ESC) clickOutsideToClose: true, @@ -159,12 +159,12 @@ }); // add event listener when press ESC - if (this.options.keyboard){ + if(this.options.keyboard){ document.addEventListener('keyup', (e) => { if(this.isOpen && e.key === 'Escape'){ this.close(); } - }) + }); } // done init From 40ba6aeb9f7e76f8eb6512f3744f822af0a48216 Mon Sep 17 00:00:00 2001 From: phucbm Date: Wed, 31 Aug 2022 18:13:46 +0700 Subject: [PATCH 7/7] :rocket: minify v0.0.5 with keyboard option --- dist/easy-popup.min.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dist/easy-popup.min.js b/dist/easy-popup.min.js index 2caa5a7..867b709 100644 --- a/dist/easy-popup.min.js +++ b/dist/easy-popup.min.js @@ -2,4 +2,4 @@ * Easy Popup v0.0.5 * https://github.com/viivue/easy-popup */ -!function(t){class e{constructor(t,e){if(!t)return void console.warn("Init popup fail due to empty input!");this.root=document.querySelector(":root"),this.el=t,this.selector="data-easy-popup",this.attributes={id:`${this.selector}-id`,title:`${this.selector}-title`,toggle:`${this.selector}-toggle`,mobileLayout:`${this.selector}-mobile`,theme:`${this.selector}-theme`,clickOutsideToClose:`${this.selector}-click-outside-to-close`},this.classes={master:"easy-popup-master",processed:"easy-popup-enabled",triggerEnabled:"easy-popup-trigger-enabled",content:"easy-popup-content",outer:"easy-popup",inner:"easy-popup-inner",center:"easy-popup-center",overflow:"easy-popup-overflow",container:"easy-popup-container",open:"open",closeButton:"easy-popup-close-button",mobileHeading:"easy-popup-mobile-heading",hasMobileLayout:"easy-popup-has-mobile-layout",ignoreClick:"easy-popup-ignore-click"},this.innerHTML=this.el.innerHTML,this.isOpen=!1,this.options={id:this.uniqueId("easy-popup-"),outerClass:"",title:"",closeButtonHTML:'',triggerSelector:"",hasMobileLayout:!1,theme:"default",clickOutsideToClose:!0,onClose:()=>{},onOpen:()=>{},...e},this.id=this.el.getAttribute(this.selector)||this.options.id,this.title=this.el.getAttribute(this.attributes.title)||this.options.title,this.theme=this.el.getAttribute(this.attributes.theme)||this.options.theme,this.isClickOutsideToClose=this.isBooleanOptionTrue(this.attributes.clickOutsideToClose,this.options.clickOutsideToClose),this.hasMobileLayout=this.isBooleanOptionTrue(this.attributes.mobileLayout,this.options.hasMobileLayout),this.closeButtonHTML=this.options.closeButtonHTML,this.masterContainer=document.querySelector(`.${this.classes.master}`),this.generateHTML();let s=`a[href="#${this.id}"], [${this.attributes.toggle}="${this.id}"]`;s=this.options.triggerSelector?`${this.options.triggerSelector}, ${s}`:s,document.querySelectorAll(s).forEach((t=>{t.classList.add(this.classes.triggerEnabled),t.addEventListener("click",(t=>{t.preventDefault(),this.toggle()}))}))}isBooleanOptionTrue(t,e){const s=this.el.getAttribute(t);return s?"false"!==s:e}generateHTML(){this.el.classList.contains(this.classes.processed)||(this.masterContainer||(this.masterContainer=document.createElement("div"),this.masterContainer.classList.add(this.classes.master)),document.querySelector("body").appendChild(this.masterContainer),this.masterContainer.appendChild(this.el),this.inner=this.wrap(this.el),this.inner.classList.add(this.classes.inner),this.closeButton=document.createElement("button"),this.closeButton.classList.add(this.classes.closeButton),this.closeButton.innerHTML=this.closeButtonHTML,this.closeButton.setAttribute(this.attributes.toggle,""),this.closeButton.addEventListener("click",(()=>this.close())),this.inner.appendChild(this.closeButton),this.container=this.wrap(this.inner),this.container.classList.add(this.classes.container),this.overflow=this.wrap(this.container),this.overflow.classList.add(this.classes.overflow),this.mobileHeading=document.createElement("div"),this.mobileHeading.classList.add(this.classes.mobileHeading),this.mobileHeading.innerHTML=`

\n
${this.title}
\n \n
`,this.overflow.appendChild(this.mobileHeading),this.outer=this.wrap(this.overflow),this.outer.classList.add(this.classes.outer),this.options.outerClass&&this.outer.classList.add(this.options.outerClass),this.hasMobileLayout&&this.outer.classList.add(this.classes.hasMobileLayout),this.outer.setAttribute(this.attributes.id,this.id),this.outer.setAttribute(this.attributes.theme,this.theme),this.outer.addEventListener("click",(t=>{t.target.classList.contains(this.classes.ignoreClick)||this.isClickOutsideContent(t)&&this.isClickOutsideToClose&&this.close()})),this.outer.querySelectorAll("[data-easy-popup-toggle]").forEach((t=>{t.addEventListener("click",(()=>this.close()))})),this.el.classList.add(this.classes.processed,this.classes.content))}isClickOutsideContent(t){return!this.inner.contains(t.target)&&!this.mobileHeading.contains(t.target)}open(){window.EasyPopupData.active&&t.get(window.EasyPopupData.active).close(),window.EasyPopupData.active=this.id,this.outer.classList.add(this.classes.open),this.isOpen=!0,this.root.classList.add("easy-popup-open"),this.root.style.paddingRight=`${this.getScrollbarWidth()}px`,this.root.style.overflow="hidden","function"==typeof this.options.onOpen&&this.options.onOpen(this)}close(){window.EasyPopupData.active="",this.outer.classList.remove(this.classes.open),this.isOpen=!1,this.root.classList.remove("easy-popup-open"),setTimeout((()=>{window.EasyPopupData.active||(this.root.style.paddingRight="",this.root.style.overflow=""),"function"==typeof this.options.onClose&&this.options.onClose(this)}),300)}toggle(){this.isOpen?this.close():this.open()}wrap(t,e=document.createElement("div")){return t.parentNode.insertBefore(e,t),e.appendChild(t),e}getScrollbarWidth(){const t=document.createElement("div");t.style.visibility="hidden",t.style.overflow="scroll",t.style.msOverflowStyle="scrollbar",document.body.appendChild(t);const e=document.createElement("div");t.appendChild(e);const s=t.offsetWidth-e.offsetWidth;return t.parentNode.removeChild(t),s}uniqueId(t=""){return t+(+new Date).toString(16)+(1e8*Math.random()|0).toString(16)}}window.EasyPopupData=new class{constructor(){this.active="",this.popups=[]}add(t){this.popups.push(t)}get(t){return this.popups.filter((e=>e.id===t))[0]}},t.init=(t="[data-easy-popup]",s={})=>{document.querySelectorAll(t).forEach((t=>window.EasyPopupData.add(new e(t,s))))},t.init(),t.get=t=>window.EasyPopupData.get(t)}(window.EasyPopup=window.EasyPopup||{}); \ No newline at end of file +!function(t){class e{constructor(t,e){if(!t)return void console.warn("Init popup fail due to empty input!");this.root=document.querySelector(":root"),this.el=t,this.selector="data-easy-popup",this.attributes={id:`${this.selector}-id`,title:`${this.selector}-title`,toggle:`${this.selector}-toggle`,mobileLayout:`${this.selector}-mobile`,theme:`${this.selector}-theme`,clickOutsideToClose:`${this.selector}-click-outside-to-close`},this.classes={master:"easy-popup-master",processed:"easy-popup-enabled",triggerEnabled:"easy-popup-trigger-enabled",content:"easy-popup-content",outer:"easy-popup",inner:"easy-popup-inner",center:"easy-popup-center",overflow:"easy-popup-overflow",container:"easy-popup-container",open:"open",closeButton:"easy-popup-close-button",mobileHeading:"easy-popup-mobile-heading",hasMobileLayout:"easy-popup-has-mobile-layout",ignoreClick:"easy-popup-ignore-click"},this.innerHTML=this.el.innerHTML,this.isOpen=!1,this.options={id:this.uniqueId("easy-popup-"),outerClass:"",title:"",closeButtonHTML:'',triggerSelector:"",hasMobileLayout:!1,theme:"default",keyboard:!0,clickOutsideToClose:!0,onClose:()=>{},onOpen:()=>{},...e},this.id=this.el.getAttribute(this.selector)||this.options.id,this.title=this.el.getAttribute(this.attributes.title)||this.options.title,this.theme=this.el.getAttribute(this.attributes.theme)||this.options.theme,this.isClickOutsideToClose=this.isBooleanOptionTrue(this.attributes.clickOutsideToClose,this.options.clickOutsideToClose),this.hasMobileLayout=this.isBooleanOptionTrue(this.attributes.mobileLayout,this.options.hasMobileLayout),this.closeButtonHTML=this.options.closeButtonHTML,this.masterContainer=document.querySelector(`.${this.classes.master}`),this.generateHTML();let s=`a[href="#${this.id}"], [${this.attributes.toggle}="${this.id}"]`;s=this.options.triggerSelector?`${this.options.triggerSelector}, ${s}`:s,document.querySelectorAll(s).forEach((t=>{t.classList.add(this.classes.triggerEnabled),t.addEventListener("click",(t=>{t.preventDefault(),this.toggle()}))}))}isBooleanOptionTrue(t,e){const s=this.el.getAttribute(t);return s?"false"!==s:e}generateHTML(){this.el.classList.contains(this.classes.processed)||(this.masterContainer||(this.masterContainer=document.createElement("div"),this.masterContainer.classList.add(this.classes.master)),document.querySelector("body").appendChild(this.masterContainer),this.masterContainer.appendChild(this.el),this.inner=this.wrap(this.el),this.inner.classList.add(this.classes.inner),this.closeButton=document.createElement("button"),this.closeButton.classList.add(this.classes.closeButton),this.closeButton.innerHTML=this.closeButtonHTML,this.closeButton.setAttribute(this.attributes.toggle,""),this.closeButton.addEventListener("click",(()=>this.close())),this.inner.appendChild(this.closeButton),this.container=this.wrap(this.inner),this.container.classList.add(this.classes.container),this.overflow=this.wrap(this.container),this.overflow.classList.add(this.classes.overflow),this.mobileHeading=document.createElement("div"),this.mobileHeading.classList.add(this.classes.mobileHeading),this.mobileHeading.innerHTML=`
\n
${this.title}
\n \n
`,this.overflow.appendChild(this.mobileHeading),this.outer=this.wrap(this.overflow),this.outer.classList.add(this.classes.outer),this.options.outerClass&&this.outer.classList.add(this.options.outerClass),this.hasMobileLayout&&this.outer.classList.add(this.classes.hasMobileLayout),this.outer.setAttribute(this.attributes.id,this.id),this.outer.setAttribute(this.attributes.theme,this.theme),this.outer.addEventListener("click",(t=>{t.target.classList.contains(this.classes.ignoreClick)||this.isClickOutsideContent(t)&&this.isClickOutsideToClose&&this.close()})),this.outer.querySelectorAll("[data-easy-popup-toggle]").forEach((t=>{t.addEventListener("click",(()=>this.close()))})),this.options.keyboard&&document.addEventListener("keyup",(t=>{this.isOpen&&"Escape"===t.key&&this.close()})),this.el.classList.add(this.classes.processed,this.classes.content))}isClickOutsideContent(t){return!this.inner.contains(t.target)&&!this.mobileHeading.contains(t.target)}open(){window.EasyPopupData.active&&t.get(window.EasyPopupData.active).close(),window.EasyPopupData.active=this.id,this.outer.classList.add(this.classes.open),this.isOpen=!0,this.root.classList.add("easy-popup-open"),this.root.style.paddingRight=`${this.getScrollbarWidth()}px`,this.root.style.overflow="hidden","function"==typeof this.options.onOpen&&this.options.onOpen(this)}close(){window.EasyPopupData.active="",this.outer.classList.remove(this.classes.open),this.isOpen=!1,this.root.classList.remove("easy-popup-open"),setTimeout((()=>{window.EasyPopupData.active||(this.root.style.paddingRight="",this.root.style.overflow=""),"function"==typeof this.options.onClose&&this.options.onClose(this)}),300)}toggle(){this.isOpen?this.close():this.open()}wrap(t,e=document.createElement("div")){return t.parentNode.insertBefore(e,t),e.appendChild(t),e}getScrollbarWidth(){const t=document.createElement("div");t.style.visibility="hidden",t.style.overflow="scroll",t.style.msOverflowStyle="scrollbar",document.body.appendChild(t);const e=document.createElement("div");t.appendChild(e);const s=t.offsetWidth-e.offsetWidth;return t.parentNode.removeChild(t),s}uniqueId(t=""){return t+(+new Date).toString(16)+(1e8*Math.random()|0).toString(16)}}window.EasyPopupData=new class{constructor(){this.active="",this.popups=[]}add(t){this.popups.push(t)}get(t){return this.popups.filter((e=>e.id===t))[0]}},t.init=(t="[data-easy-popup]",s={})=>{document.querySelectorAll(t).forEach((t=>window.EasyPopupData.add(new e(t,s))))},t.init(),t.get=t=>window.EasyPopupData.get(t)}(window.EasyPopup=window.EasyPopup||{}); \ No newline at end of file