framework7
Version:
Full featured mobile HTML framework for building iOS & Android apps
2 lines (1 loc) • 6.11 kB
JavaScript
(function framework7ComponentLoader(o,e){void 0===e&&(e=!0);var a=o.$,s=o.utils,t=o.getDevice,l=(o.getSupport,o.Class,o.Modal),n=(o.ConstructorMethods,o.ModalMethods),r=o.$jsx,c=s.extend,i=s.nextTick;class p extends l{constructor(o,e){const s=c({on:{}},o.params.actions,e);super(o,s);const l=this,n=t();let r,p,d;if(l.params=s,l.params.buttons&&(r=l.params.buttons,Array.isArray(r[0])||(r=[r])),l.groups=r,l.params.el?p=a(l.params.el).eq(0):l.params.content?p=a(l.params.content).filter((o=>1===o.nodeType)).eq(0):l.params.buttons&&(l.params.convertToPopover&&(l.popoverHtml=l.renderPopover()),l.actionsHtml=l.render()),p&&p.length>0&&p[0].f7Modal)return p[0].f7Modal;if(p&&0===p.length&&!l.actionsHtml&&!l.popoverHtml)return l.destroy();l.params.backdrop&&l.params.backdropEl?d=a(l.params.backdropEl):l.params.backdrop&&(l.params.backdropUnique?(d=a('<div class="popup-backdrop popup-backdrop-unique"></div>'),l.$containerEl.append(d)):d=l.$containerEl.children(".actions-backdrop"),0===d.length&&(d=a('<div class="actions-backdrop"></div>'),l.$containerEl.append(d)));const m=l.open,u=l.close;let v;function b(o){const e=a(this);let s,t;if(e.hasClass("list-button")||e.hasClass("item-link")?(s=e.parents("li").index(),t=e.parents(".list").index()):(s=e.index(),t=e.parents(".actions-group").index()),void 0!==r){const e=r[t][s];e.onClick&&e.onClick(l,o),l.params.onClick&&l.params.onClick(l,o),!1!==e.close&&l.close()}}function k(o){const e=o.target,s=a(e);!n.desktop&&n.cordova&&(window.Keyboard&&window.Keyboard.isVisible||window.cordova.plugins&&window.cordova.plugins.Keyboard&&window.cordova.plugins.Keyboard.isVisible)||0===s.closest(l.el).length&&(l.params.closeByBackdropClick&&l.params.backdrop&&l.backdropEl&&l.backdropEl===e||l.params.closeByOutsideClick)&&l.close()}function $(o){27===o.keyCode&&l.params.closeOnEscape&&l.close()}return l.open=function(e){let s=!1;const{targetEl:t,targetX:r,targetY:c,targetWidth:p,targetHeight:d}=l.params;return l.params.convertToPopover&&(t||void 0!==r&&void 0!==c)&&(l.params.forceToPopover||n.ios&&n.ipad||o.width>=768||n.desktop&&"aurora"===o.theme)&&(s=!0),s&&l.popoverHtml?(v=o.popover.create({containerEl:l.params.containerEl,content:l.popoverHtml,backdrop:l.params.backdrop,targetEl:t,targetX:r,targetY:c,targetWidth:p,targetHeight:d,on:{open(){l.$el||(l.$el=v.$el),l.$el.trigger(`modal:open ${l.type.toLowerCase()}:open`),l.emit(`local::open modalOpen ${l.type}Open`,l)},opened(){l.$el||(l.$el=v.$el),l.$el.trigger(`modal:opened ${l.type.toLowerCase()}:opened`),l.emit(`local::opened modalOpened ${l.type}Opened`,l)},close(){l.$el||(l.$el=v.$el),l.$el.trigger(`modal:close ${l.type.toLowerCase()}:close`),l.emit(`local::close modalClose ${l.type}Close`,l)},closed(){l.$el||(l.$el=v.$el),l.$el.trigger(`modal:closed ${l.type.toLowerCase()}:closed`),l.emit(`local::closed modalClosed ${l.type}Closed`,l)}}}),v.open(e),v.once("popoverOpened",(()=>{v.$el.find(".list-button, .item-link").each((o=>{a(o).on("click",b)}))})),v.once("popoverClosed",(()=>{v.$el.find(".list-button, .item-link").each((o=>{a(o).off("click",b)})),i((()=>{v.destroy(),v=void 0}))}))):(l.$el=l.actionsHtml?a(l.actionsHtml):l.$el,l.$el[0].f7Modal=l,l.groups&&(l.$el.find(".actions-button").each((o=>{a(o).on("click",b)})),l.once("actionsClosed",(()=>{l.$el.find(".actions-button").each((o=>{a(o).off("click",b)}))}))),l.el=l.$el[0],m.call(l,e)),l},l.close=function(o){return v?v.close(o):u.call(l,o),l},c(l,{app:o,$el:p,el:p?p[0]:void 0,$backdropEl:d,backdropEl:d&&d[0],type:"actions"}),l.params.closeOnEscape&&(l.on("open",(()=>{a(document).on("keydown",$)})),l.on("close",(()=>{a(document).off("keydown",$)}))),l.on("opened",(()=>{(l.params.closeByBackdropClick||l.params.closeByOutsideClick)&&o.on("click",k)})),l.on("close",(()=>{(l.params.closeByBackdropClick||l.params.closeByOutsideClick)&&o.off("click",k)})),p&&(p[0].f7Modal=l),l}render(){const o=this;if(o.params.render)return o.params.render.call(o,o);const{groups:e}=o,a=o.params.cssClass;return r("div",{class:`actions-modal${o.params.grid?" actions-grid":""} ${a||""}`},e.map((o=>r("div",{class:"actions-group"},o.map((o=>{const e=["actions-"+(o.label?"label":"button")],{color:a,bg:s,bold:t,disabled:l,label:n,text:c,icon:i}=o;return a&&e.push(`color-${a}`),s&&e.push(`bg-color-${s}`),t&&e.push("actions-button-bold"),l&&e.push("disabled"),n?r("div",{class:e.join(" ")},c):r("div",{class:e.join(" ")},i&&r("div",{class:"actions-button-media"},i),r("div",{class:"actions-button-text"},c))}))))))}renderPopover(){const o=this;if(o.params.renderPopover)return o.params.renderPopover.call(o,o);const{groups:e}=o,a=o.params.cssClass;return r("div",{class:`popover popover-from-actions ${a||""}`},r("div",{class:"popover-inner"},e.map((o=>r("div",{class:"list"},r("ul",null,o.map((o=>{const e=[],{color:a,bg:s,bold:t,disabled:l,label:n,text:c,icon:i}=o;return a&&e.push(`color-${a}`),s&&e.push(`bg-color-${s}`),t&&e.push("popover-from-actions-bold"),l&&e.push("disabled"),n?(e.push("popover-from-actions-label"),`<li class="${e.join(" ")}">${c}</li>`):i?(e.push("item-link item-content"),r("li",null,r("a",{class:e.join(" ")},r("div",{class:"item-media"},i),r("div",{class:"item-inner"},r("div",{class:"item-title"},c))))):(e.push("list-button"),r("li",null,r("a",{class:e.join(" ")},c)))}))))))))}}var d={name:"actions",params:{actions:{convertToPopover:!0,forceToPopover:!1,backdrop:!0,backdropEl:void 0,backdropUnique:!1,cssClass:null,closeByBackdropClick:!0,closeOnEscape:!1,render:null,renderPopover:null,containerEl:null}},static:{Actions:p},create(){this.actions=n({app:this,constructor:p,defaultSelector:".actions-modal.modal-in"})},clicks:{".actions-open":function(o,e){void 0===e&&(e={});this.actions.open(e.actions,e.animate,o)},".actions-close":function(o,e){void 0===e&&(e={});this.actions.close(e.actions,e.animate,o)}}};if(e){if(o.prototype.modules&&o.prototype.modules[d.name])return;o.use(d),o.instance&&(o.instance.useModuleParams(d,o.instance.params),o.instance.useModule(d))}return d}(Framework7, typeof Framework7AutoInstallComponent === 'undefined' ? undefined : Framework7AutoInstallComponent))