From 1b3b35afeb9dacc3273fc4ab9fce2360f9dcb97e Mon Sep 17 00:00:00 2001 From: Ray Date: Thu, 16 Nov 2023 21:19:18 +0000 Subject: [PATCH] Refactor to JS class --- bsdialog4.js | 296 ++++++++++++++++++++++++++--------------------- bsdialog4.min.js | 4 +- 2 files changed, 168 insertions(+), 132 deletions(-) diff --git a/bsdialog4.js b/bsdialog4.js index ad3ec91..d20fc8c 100644 --- a/bsdialog4.js +++ b/bsdialog4.js @@ -1,76 +1,131 @@ /** * BSDialog4 - * @version v0.1.5.006 (2023/11/14 17:40) + * @version v0.1.5.017 (2023/11/16 17:47) */ -var BSDialog = { - Show: async function (options) { + +class BSDialog4 { + constructor() { + } + + + get Options() { + return { + ShowModal: { + ID: null, + Title: "", + Message: "", + URL: null, + Size: "md", + Colour: "secondary", + ShowFooter: true, + EasyClose: true + }, + ShowPrompt: { + Type: "button", + Title: "", + Message: "", + Size: "md", + EasyClose: true, + 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 + } + }, + UpdateModal: { + ID: null, + Title: null, + Body: null, + BodyURL: null, + Footer: null, + Size: null + } + } + } + + get #prefix() { + return "bsdia4_"; + } + + get #body() { + return document.getElementsByTagName("body")[0]; + } + + + async Show(options) { const a = this; const _options = Object.assign(a.Options.ShowModal, options); - a.id = _options.ID; - a.pfx = "bsdia4_"; - a.body = document.getElementsByTagName("body")[0]; - a.addModal(_options.ID, _options.Title, _options.Size, _options.ShowFooter, _options.Colour); - $("#" + a.pfx + _options.ID).modal({ + $("#" + a.#prefix + _options.ID).modal({ backdrop: _options.EasyClose, show: true }); - if (_options.URL == null) { - await a.Update({ ID: _options.ID, Body: _options.Message }); - } else { - if (a.isNullOrWhitespace(_options.URL)) { - await a.Update({ ID: _options.ID, Body: _options.URL }); + if (!a.#isNullOrWhitespace(_options.URL)) { + if (_options.URL.startsWith("http://") || _options.URL.startsWith("https://") || _options.URL.startsWith("/")) { + const response = await a.#retrieveURL(_options.URL); + + await a.Update({ ID: _options.ID, Body: response }); } else { - if (_options.URL.startsWith("http://") || _options.URL.startsWith("https://") || _options.URL.startsWith("/")) { - let response = await a.retrieveURL(_options.URL); - - await a.Update({ ID: _options.ID, Body: response }); - } else { - await a.Update({ ID: _options.ID, Body: _options.URL }); - } + await a.Update({ ID: _options.ID, Body: _options.URL }); } + } else { + await a.Update({ ID: _options.ID, Body: _options.Message }); } - }, - Prompt: async function (options) { - const a = this; - let id = Math.floor(Math.random() * 10000) + 1000; + } + async Prompt(options) { + const a = this; + const id = Math.floor(Math.random() * 10000) + 1000; const _options = Object.assign(a.Options.ShowPrompt, options); switch (_options.Type) { case "textbox": - return await a.showTextboxPrompt(id, _options); + return await a.#showTextboxPrompt(id, _options); case "button": default: - return await a.showButtonPrompt(id, _options); + return await a.#showButtonPrompt(id, _options); } - }, - Clear: function () { - this.body.querySelectorAll(".modal").forEach(function(e) { + } + + Clear() { + const a = this; + + a.#body.querySelectorAll(".modal").forEach(function(e) { e.parentNode.removeChild(e); }); - this.removeBackdrop(); - }, - Close: function (id) { - let modal = this.Find(id); + a.#removeBackdrop(); + } + + Close(id) { + const a = this; + + let modal = a.Find(id); if (modal === null) { return; } modal.Modal.parentNode.removeChild(modal.Modal); - modal = this.Find(id); + modal = a.Find(id); if (modal !== null) { return; } - this.removeBackdrop(); - }, - Update: async function (options) { + a.#removeBackdrop(); + } + + async Update(options) { const a = this; let _options = Object.assign(a.Options.UpdateModal, options); @@ -79,15 +134,15 @@ var BSDialog = { return; } - if (!this.isNullOrWhitespace(_options.Title)) { + if (!a.#isNullOrWhitespace(_options.Title)) { modal.Title.innerHTML = _options.Title; } - if (!this.isNullOrWhitespace(_options.Body)) { - a.html(modal.Body, _options.Body); + if (!a.#isNullOrWhitespace(_options.Body)) { + a.#html(modal.Body, _options.Body); } - if (!this.isNullOrWhitespace(_options.BodyURL)) { + if (!a.#isNullOrWhitespace(_options.BodyURL)) { if (_options.BodyURL.startsWith("http://") || _options.BodyURL.startsWith("https://") || _options.BodyURL.startsWith("/")) { // ok } else { @@ -95,17 +150,17 @@ var BSDialog = { } } - if (!this.isNullOrWhitespace(_options.BodyURL)) { - let response = await a.retrieveURL(_options.BodyURL); + if (!a.#isNullOrWhitespace(_options.BodyURL)) { + const response = await a.#retrieveURL(_options.BodyURL); await a.Update({ ID: _options.ID, Body: response }); } - if (!this.isNullOrWhitespace(_options.Footer)) { - a.html(modal.Footer, _options.Footer); + if (!a.#isNullOrWhitespace(_options.Footer)) { + a.#html(modal.Footer, _options.Footer); } - if (!this.isNullOrWhitespace(_options.Size)) { + if (!a.#isNullOrWhitespace(_options.Size)) { modal.Modal.querySelectorAll(".modal-dialog").forEach(function(e) { e.classList.forEach(function(e2) { @@ -121,13 +176,17 @@ var BSDialog = { e.classList.add("modal-" + _options.Size); }); } - }, - Exists: function (id) { - return (this.Find(id) !== null); - }, - Find: function (id) { + } + + Exists(id) { const a = this; - const modal = a.body.querySelectorAll("#" + a.pfx + id + ".modal"); + + return (a.Find(id) !== null); + } + + Find(id) { + const a = this; + const modal = a.#body.querySelectorAll("#" + a.#prefix + id + ".modal"); if (!modal) { return null; @@ -145,47 +204,10 @@ var BSDialog = { Close: modal[0].querySelectorAll("[data-dismiss='modal']"), Modal: modal[0] }; - }, - Options: { - ShowModal: { - ID: null, - Title: "", - Message: "", - URL: null, - Size: "md", - Colour: "secondary", - ShowFooter: true, - EasyClose: true - }, - ShowPrompt: { - Type: "button", - Title: "", - Message: "", - Size: "md", - EasyClose: true, - 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 - } - }, - UpdateModal: { - ID: null, - Title: null, - Body: null, - BodyURL: null, - Footer: null, - Size: null - } - }, - addModal: function (id, title, size, showFooter, closeColour) { + } + + + addModal(id, title, size, showFooter, closeColour) { const a = this; // don't allow duplicates @@ -195,7 +217,7 @@ var BSDialog = { } let html = ""; - html += '