From 14fcc36eef80f144282e7d9ae2eb4d4fe4c42377 Mon Sep 17 00:00:00 2001 From: rpm-mcarman <65228808+rpm-mcarman@users.noreply.github.com> Date: Thu, 11 Jan 2024 15:36:53 -0500 Subject: [PATCH] Verification for new model --- .../dmxBootbox5/bootstrap-modbox.min.js | 57 +++++++++++++++++ .../dmxAppConnect/dmxBootbox5/dmxBootbox5.js | 8 +++ views/dspeckit.ejs | 63 +++++++------------ views/layouts/main.ejs | 2 + 4 files changed, 91 insertions(+), 39 deletions(-) create mode 100644 public/dmxAppConnect/dmxBootbox5/bootstrap-modbox.min.js create mode 100644 public/dmxAppConnect/dmxBootbox5/dmxBootbox5.js diff --git a/public/dmxAppConnect/dmxBootbox5/bootstrap-modbox.min.js b/public/dmxAppConnect/dmxBootbox5/bootstrap-modbox.min.js new file mode 100644 index 0000000..3441176 --- /dev/null +++ b/public/dmxAppConnect/dmxBootbox5/bootstrap-modbox.min.js @@ -0,0 +1,57 @@ +/* + * bootstrap-modbox + * Native JavaScript wrapper for simple Bootstrap 5 modals. Provides support for alert, confirm, and prompt modals, as well as advanced custom dialogs. + * + * version: 1.6.1 + * author: Eric Robertson + * license: MIT + * + * https://erobertson42.github.io/bootstrap-modbox/ + */ + +class modbox{static version="1.6.1";#options;#modal;#modalEl;#footer;static#bootstrapModal;static#defaultOptions={icon:null,style:"white",titleStyle:null,title:"Information",body:"",message:"",size:null,center:!1,fade:!0,show:!1,relatedTarget:void 0,scrollable:!0,destroyOnClose:!1,defaultButton:!0,swapButtonOrder:!1,justifyButtons:null,showHeaderClose:!0,events:{},buttons:[],okButton:{label:"OK",style:"primary"},closeButton:{label:"Close",style:"secondary"},input:{type:"text",class:"",value:"",title:null,placeholder:null,autocomplete:"off",minlength:null,maxlength:null,pattern:null,required:!1,sanitizer:!1},sanitizer:modbox.#sanitizeString};static#defaultButtonOptions={label:"Close",style:"secondary",class:"",outline:!1,size:null,icon:null,title:null,disabled:!1,close:!0,callback:null};static#modalDefaults={alert:{title:"Alert"},info:{style:"info",title:"Information"},success:{style:"success",title:"Success"},warning:{style:"warning",title:"Warning"},danger:{style:"danger",title:"Error"},confirm:{title:"Confirm"},prompt:{title:"Prompt",input:{id:modbox.#getUID("modbox-input-")}}};static#getUID(t="modbox-"){return t+Date.now()+Math.floor(1e4*Math.random())}static#typeof(t){return"object"==typeof t?Object.prototype.toString.call(t).slice(8,-1).toLowerCase():typeof t}static#deepMerge(i,s){const n={...i,...s};return Object.keys(n).forEach(t=>{var o=i[t],e=s[t];"object"===modbox.#typeof(o)&&"object"===modbox.#typeof(e)&&(n[t]=modbox.#deepMerge(o,e))}),n}static#checkUserOptions(t){return"string"==typeof t?{body:t}:t}static#mergeModalOptions(t,o={}){return modbox.#deepMerge(modbox.#deepMerge(modbox.#defaultOptions,modbox.#modalDefaults[t]),modbox.#checkUserOptions(o))}static#sanitizeString(t=""){return t}static#buildPromiseModal(a={},d="alert"){return a={...a,destroyOnClose:!0,defaultButton:!1,buttons:[]},new Promise((s,t)=>{const n=new modbox(a),o=[a.closeButton];if(["confirm","prompt"].includes(d)){let i=()=>s();if("prompt"===d&&"object"===modbox.#typeof(a.input)){let e=!1;(!0===a.input.required||"number"==typeof a.input.minlength||"string"==typeof a.input.pattern&&a.input.pattern.length)&&(a.okButton.close=!1,e=!0),i=()=>{const t=n.modalEl.querySelector(`#${a.input.id}`);if(!0!==e||t.reportValidity()){const o="function"==typeof n.options.input.sanitizer?n.options.input.sanitizer:!0===n.options.input.sanitizer?n.options.sanitizer:modbox.#sanitizeString;s(o(t.value)),n.hide()}}}o.unshift({...a.okButton,callback:function(t,o){"function"==typeof a.okButton.callback&&a.okButton.callback.call(this,t,o),i()}})}const[e]=o.map(t=>n.addButton(t));"prompt"===d&&"object"===modbox.#typeof(a.input)&&n.modalEl.querySelector(`#${a.input.id}`).addEventListener("keyup",t=>{"Enter"===t.key&&e.click()}),n.addEvent("hidden",()=>{"alert"===d?s():["confirm","prompt"].includes(d)&&document.activeElement!==e&&t()}),n.show()})}#buildModal(){var t=["primary","secondary","success","danger","dark","body"].includes(this.#options.style),o=this.#options.titleStyle||(t?"white":"dark"),t=`btn-close ${t?"btn-close-white":""}`;modbox.container.insertAdjacentHTML("beforeend",this.#options.sanitizer(` + + `.trim())),this.#modalEl=modbox.container.querySelector(`#${this.#options.id}`),this.#footer=this.#modalEl.querySelector(".modal-footer"),this.#addButtons()}#addButtons(){Array.isArray(this.#options.buttons)||(this.#options.buttons=[]),0===this.#options.buttons.length&&!0===this.#options.defaultButton?this.#options.buttons=[modbox.#defaultButtonOptions]:this.#footer.classList.add("d-none"),this.#options.buttons.forEach(t=>this.addButton(t))}#addEvents(){Object.entries(this.#options.events).forEach(([t,o])=>{this.addEvent(t,o)}),!0===this.#options.destroyOnClose&&this.addEvent("hidden",()=>this.destroy())}constructor(t={}){if(!modbox.#bootstrapModal){if("object"!=typeof bootstrap)throw new Error('The "modbox.bootstrapModal" property is undefined. If importing Bootstrap as an ES module, you must also manually set this property. See the modbox README/docs for more info.');modbox.#bootstrapModal=bootstrap.Modal}if(modbox.#defaultOptions={...modbox.#bootstrapModal.Default,...modbox.#defaultOptions},this.#options={...modbox.#defaultOptions,id:modbox.#getUID(),...modbox.#checkUserOptions(t)},"string"!=typeof this.#options.body||!this.#options.body.length){if("string"!=typeof this.#options.message||!this.#options.message.length)throw new Error('The "body" or "message" configuration option is required (string).');this.#options.body=this.#options.message}var o,e;this.#buildModal(),this.#modal=new modbox.#bootstrapModal(this.#modalEl,([{backdrop:o,keyboard:e,focus:t}]=[this.#options],{backdrop:o,keyboard:e,focus:t})),this.#addEvents(),!0===this.#options.show&&this.show(this.#options.relatedTarget)}get options(){return this.#options}get modal(){return this.#modal}get modalEl(){return this.#modalEl}get buttons(){return[...this.#footer.querySelectorAll("button")]}static get bootstrapModal(){return modbox.#bootstrapModal}static set bootstrapModal(t){modbox.#bootstrapModal=t}static get defaultOptions(){return modbox.#defaultOptions}static set defaultOptions(t={}){modbox.#defaultOptions=modbox.#deepMerge(modbox.#defaultOptions,t)}static get defaultButtonOptions(){return modbox.#defaultButtonOptions}static set defaultButtonOptions(t={}){modbox.#defaultButtonOptions={...modbox.#defaultButtonOptions,...t}}static setDefaults(t,o={}){if(!(t="error"===(t=t.trim?.().toLowerCase?.())?"danger":t)||!["alert","info","success","warning","danger","confirm","prompt"].includes(t))throw new Error("Invalid modal type.");o="object"===modbox.#typeof(o)?o:{},modbox.#modalDefaults[t]=modbox.#deepMerge(modbox.#modalDefaults[t],o)}addButton(t={},o=this.#options.swapButtonOrder){this.#footer.classList.remove("d-none");var e=o?"afterbegin":"beforeend";if("string"==typeof t&&t.length){this.#footer.insertAdjacentHTML(e,this.#options.sanitizer(t));var i=this.buttons;return i[o?0:i.length-1]}const s={...modbox.#defaultButtonOptions,id:modbox.#getUID("modbox-btn-"),...t};this.#footer.insertAdjacentHTML(e,this.#options.sanitizer(` + + `.trim()));const n=this.#footer.querySelector(`#${s.id}`);return n&&"function"==typeof s.callback&&n.addEventListener("click",t=>s.callback.call(n,t,this)),n}addEvent(t,o){["show","shown","hide","hidden","hidePrevented"].includes(t)&&"function"==typeof o&&this.#modalEl.addEventListener(`${t}.bs.modal`,t=>o.call(this.#modalEl,t,this))}destroy(){this.dispose(),this.#modalEl.remove()}static get container(){let t=document.querySelector("#modbox-container");if(!t){const o=document.createElement("div");o.id="modbox-container",t=document.body.appendChild(o)}return t}static alert(t={}){return modbox.#buildPromiseModal(modbox.#mergeModalOptions("alert",t))}static info(t={}){return modbox.#buildPromiseModal(modbox.#mergeModalOptions("info",t))}static success(t={}){return modbox.#buildPromiseModal(modbox.#mergeModalOptions("success",t))}static warning(t={}){return modbox.#buildPromiseModal(modbox.#mergeModalOptions("warning",t))}static danger(t={}){return modbox.#buildPromiseModal(modbox.#mergeModalOptions("danger",t))}static error(t={}){return modbox.danger(t)}static confirm(t={}){return modbox.#buildPromiseModal(modbox.#mergeModalOptions("confirm",t),"confirm")}static prompt(t={}){const o=modbox.#mergeModalOptions("prompt",t);return"regexp"===modbox.#typeof(o.input?.pattern)&&(o.input.pattern=o.input.pattern.source),o.body=` + ${o.body?`

${o.body}

`:""} + ${"string"==typeof o.input?o.input:``} + `.trim(),modbox.#buildPromiseModal(o,"prompt")}toggle(){this.#modal.toggle()}show(t=this.#options.relatedTarget){this.#modal.show(t)}hide(){this.#modal.hide()}handleUpdate(){this.#modal.handleUpdate()}dispose(){this.#modal.dispose()}static getInstance(t){return modbox.#bootstrapModal.getInstance(t)}static getOrCreateInstance(t){return modbox.#bootstrapModal.getOrCreateInstance(t)}} +//# sourceMappingURL=bootstrap-modbox.min.js.map \ No newline at end of file diff --git a/public/dmxAppConnect/dmxBootbox5/dmxBootbox5.js b/public/dmxAppConnect/dmxBootbox5/dmxBootbox5.js new file mode 100644 index 0000000..e421dc7 --- /dev/null +++ b/public/dmxAppConnect/dmxBootbox5/dmxBootbox5.js @@ -0,0 +1,8 @@ +/*! + App Connect Bootbox (bs5) + Version: 1.0.2 + (c) 2023 Wappler.io + @build 2023-02-24 13:43:31 + */ +dmx.getModboxOptions=(e,t)=>{const o={backdrop:"static"};return o.body=t.message,t.title&&(o.title=t.title),t.size&&(o.size=t.size),null!=t.backdrop&&(!0===t.backdrop||"true"===t.backdrop?o.backdrop=!0:!1!==t.backdrop&&"false"!==t.backdrop||(o.backdrop=!1)),!1===t.animate&&(o.fade=!1),!1===t.closeButton&&(o.showHeaderClose=!1),t.swapButtonOrder&&(o.swapButtonOrder=!0),t.centerVertical&&(o.center=!0),!0!==t.scrollable&&(o.scrollable=!1),"alert"==e?t.buttons&&t.buttons.ok&&(o.closeButton={},t.buttons.ok.label&&(o.closeButton.label=t.buttons.ok.label),t.buttons.ok.className&&(o.closeButton.style=t.buttons.ok.className.replace("btn-",""))):"confirm"==e?(t.buttons&&t.buttons.confirm&&(o.okButton={},t.buttons.confirm.label&&(o.okButton.label=t.buttons.confirm.label),t.buttons.confirm.className&&(o.okButton.style=t.buttons.confirm.className.replace("btn-",""))),t.buttons&&t.buttons.cancel&&(o.closeButton={},t.buttons.cancel.label&&(o.closeButton.label=t.buttons.cancel.label),t.buttons.cancel.className&&(o.closeButton.style=t.buttons.cancel.className.replace("btn-","")))):"prompt"==e&&(t.buttons&&t.buttons.confirm&&(o.okButton={},t.buttons.confirm.label&&(o.okButton.label=t.buttons.confirm.label),t.buttons.confirm.className&&(o.okButton.style=t.buttons.confirm.className.replace("btn-",""))),t.buttons&&t.buttons.cancel&&(o.closeButton={},t.buttons.cancel.label&&(o.closeButton.label=t.buttons.cancel.label),t.buttons.cancel.className&&(o.closeButton.style=t.buttons.cancel.className.replace("btn-",""))),"select"==t.inputType?o.input=`\n ${t.inputOptions.map((e=>`\n ${e.text||e.value}\n `)).join("")}\n `:"checkbox"==t.inputType||"radio"==t.inputType?o.input=t.inputOptions.map(((e,o)=>`
\n \n \n
`)).join(""):"textarea"==t.inputType?o.input=`${t.value||""}`:o.input=``,o.body=`\n ${t.message?`

${t.message}

`:""}\n ${o.input}\n `.trim()),o},dmx.Actions({"bootbox.alert":function(e){return modbox.alert(dmx.getModboxOptions("alert",this.parse(e)))},"bootbox.info":function(e){return modbox.info(dmx.getModboxOptions("alert",this.parse(e)))},"bootbox.success":function(e){return modbox.success(dmx.getModboxOptions("alert",this.parse(e)))},"bootbox.warning":function(e){return modbox.warning(dmx.getModboxOptions("alert",this.parse(e)))},"bootbox.danger":function(e){return modbox.danger(dmx.getModboxOptions("alert",this.parse(e)))},"bootbox.confirm":function(e){const t={then:(e=Object.assign({},e)).then,else:e.else};return delete e.then,delete e.else,modbox.confirm(dmx.getModboxOptions("confirm",this.parse(e))).then((()=>!t.then||this._exec(t.then).then((()=>!0)))).catch((()=>!!t.else&&this._exec(t.else).then((()=>!1))))},"bootbox.prompt":function(e){const t=dmx.extend(!0,{okButton:{label:"OK",style:"primary"},closeButton:{label:"Close",style:"secondary"}},dmx.getModboxOptions("prompt",this.parse(e)),{destroyOnClose:!0,defaultButton:!1,buttons:[]});return new Promise((e=>{const o=new modbox(t),n=o.modalEl.querySelector("input,select,textarea");"radio"==n.type&&(n.checked=!0),t.okButton.close=!1,t.okButton.callback=()=>{if(!n||n.reportValidity()){if("SELECT"==n.nodeName&&n.multiple)e(Array.from(n.selectedOptions).map((e=>e.value)));else if("checkbox"==n.type){const t=o.modalEl.querySelectorAll("input:checked");e(Array.from(t).map((e=>e.value)))}else if("radio"==n.type){const t=o.modalEl.querySelector("input:checked");e(t.value)}else e(n.value);o.hide()}};const l=o.addButton(t.okButton);o.addButton(t.closeButton);n&&"INPUT"==n.nodeName&&n.addEventListener("keyup",(e=>{"Enter"===e.key&&l.click()})),o.addEvent("hide",(()=>{e(null)})),o.show()}))}}),dmx.Component("bootbox",{methods:{alert:function(e){return modbox.alert(dmx.getModboxOptions("alert",e))},info:function(e){return modbox.info(dmx.getModboxOptions("alert",e))},success:function(e){return modbox.success(dmx.getModboxOptions("alert",e))},warning:function(e){return modbox.warning(dmx.getModboxOptions("alert",e))},danger:function(e){return modbox.danger(dmx.getModboxOptions("alert",e))}}}); +//# sourceMappingURL=../maps/dmxBootbox5.js.map diff --git a/views/dspeckit.ejs b/views/dspeckit.ejs index 15bb22a..f169a04 100644 --- a/views/dspeckit.ejs +++ b/views/dspeckit.ejs @@ -1,4 +1,4 @@ - + + +