bsdialog4/bsdialog4.min.js

5 lines
7.4 KiB
JavaScript
Raw Permalink Normal View History

2023-08-03 10:29:17 +00:00
/**
* BSDialog4
2024-01-21 15:30:00 +00:00
* @version v0.1.7.022 (2024/01/21 03:40)
2023-08-30 00:55:27 +00:00
*/
2024-01-21 15:30:00 +00:00
class BSDialog4{constructor(){}get#e(){return"bsdia4_"}get#t(){return document.getElementsByTagName("body")[0]}get#l(){return["modal-sm","modal-md","modal-lg","modal-xl","modal-xxl"]}async Show(e){const t=this,l=Object.assign({ID:null,Title:"",Message:"",URL:null,Size:"md",Colour:"secondary",ShowFooter:!0,EasyClose:!0,IsMovable:!0},e);if(t.addModal(l.ID,l.Title,l.Size,l.ShowFooter,l.IsMovable,l.Colour),$("#"+t.#e+l.ID).modal({backdrop:l.EasyClose,show:!0}),t.#o(l.URL)){const e=await t.#s(l.URL);await t.Update({ID:l.ID,Body:e})}else await t.Update({ID:l.ID,Body:l.Message})}async Prompt(e){const t=this,l=Math.floor(1e4*Math.random())+1e3,o=Object.assign({Type:"button",Title:"",Message:"",Size:"md",EasyClose:!0,IsMovable:!0,Buttons:[{Label:"Yes",Value:"Yes",Colour:"primary"},{Label:"No",Value:"No",Colour:"secondary"},{Label:"Cancel",Value:"Cancel",Colour:"secondary"}],Textbox:{Label:"",LabelSize:4,Placeholder:"",Value:"",BoxSize:8}},e);return"textbox"===o.Type?await t.#a(l,o):await t.#i(l,o)}async Clear(){const e=this;document.querySelectorAll(".modal").forEach((async function(t){await e.Close(t.getAttribute("id"))}))}async Close(e){const t=this;e.toString().startsWith(t.#e)&&(e=e.toString().substr(t.#e.length));const l=document.getElementById(t.#e+e);l&&(await $(l).modal("hide"),l.parentNode.removeChild(l)),document.querySelectorAll(".modal").length>0&&(t.#t.classList.contains("modal-open")||(t.#t.classList.add("modal-open"),t.#t.style.paddingRight="17px"))}async Pop(){const e=this;if(document.querySelectorAll(".modal").length>0){const t=document.querySelectorAll(".modal")[0].getAttribute("id");await e.Close(t)}}async Update(e){const t=this,l=Object.assign({ID:null,Title:null,Body:null,URL:null,Footer:null,Size:null},e),o=t.Find(l.ID);if(null!==o){if(t.#n(l.Title)||(o.Title.innerHTML=l.Title),t.#n(l.Body)||t.#r(o.Body,l.Body),this.#n(l.Body)){if(this.#o(l.URL)){const e=await t.#s(l.URL);await t.Update({ID:l.ID,Body:e})}}else t.#r(o.Body,l.Body);t.#n(l.Footer)||t.#r(o.Footer,l.Footer),t.#n(l.Size)||t.#d(l.ID,"modal-"+l.Size)}}Exists(e){return null!==this.Find(e)}Find(e){const t=this.#t.querySelectorAll("#"+this.#e+e+".modal");return t?t.length<=0?null:{Title:t[0].querySelectorAll(".modal-title")[0],Header:t[0].querySelectorAll(".modal-header")[0],Body:t[0].querySelectorAll(".modal-body")[0],Footer:t[0].querySelectorAll(".modal-footer")[0],Close:t[0].querySelectorAll("[data-dismiss='modal']"),Modal:t[0]}:null}addModal(e,t,l,o,s,a){const i=this;let n=i.Find(e);if(null!==n)return;let r="";if(r+='<div class="modal fade" style="display: none;" id="'+i.#e+e+'" tabindex="-1" aria-labelledby="exampleModalSmLabel" aria-hidden="true">',r+=' <div class="modal-dialog modal-'+l+'">',r+=' <div class="modal-content">',r+=' <div class="modal-header">',r+=' <span class="modal-title font-weight-bold" style="cursor: default; user-select: none;" aria-label="Title">'+t+"</span>",r+=' <button type="button" class="close" data-dismiss="modal" aria-label="Close" style="user-select: none;">',r+=' <span aria-hidden="true">&times;</span>',r+=" </button>",r+=" </div>",r+=' <div class="modal-body">',r+='<div class="row mt-3 pb-3">',r+=' <div class="col-12 text-center">',r+=' <div class="spinner-border" role="status">',r+='\t <span class="sr-only">Loading...</span>',r+=" </div>",r+=" </div>",r+="</div>",r+=" </div>",!0===o&&(r+=' <div class="modal-footer">',r+=' <button type="button" class="btn btn-'+a+'" data-dismiss="modal">Close</button>',r+=" </div>"),r+=" </div>",r+=" </div>",r+="</div>",i.#c(i.#t,r),n=i.Find(e),null!==n&&($("#"+i.#e+e).on("hidden.bs.modal",(function(t){i.Close(e)})),n.Title.addEventListener("dblclick",(function(t){t.stopPropagation(),t.preventDefault(),i.#u(e)})),s)){const e=n.Modal.querySelectorAll(".modal-dialog")[0];let t=!1,l={X:0,Y:0},o={X:0,Y:0};n.Title.addEventListener("mousedown",(function(s){1!=s.buttons||t||(o={X:s.clientX,Y:s.clientY},l={X:i.#n(e.style.left)?0:parseInt(e.style.left.replace("px","")),Y:i.#n(e.style.top)?0:parseInt(e.st