Mon 21 Jul 22:43:21 CEST 2025
This commit is contained in:
parent
312c3cc4b8
commit
42d3a38186
662
js/ui/dialog/js/prompt-boxes.js
Normal file
662
js/ui/dialog/js/prompt-boxes.js
Normal file
|
@ -0,0 +1,662 @@
|
|||
/** Prompt Boxes
|
||||
* @blab+ Choices Box
|
||||
*
|
||||
* Version 1.2.1
|
||||
*/
|
||||
|
||||
(function (name, context, definition) {
|
||||
'use strict'
|
||||
if (typeof window.define === 'function' && window.define.amd) { window.define(definition) } else if (typeof module !== 'undefined' && module.exports) { module.exports = definition() } else if (context.exports) { context.exports = definition() } else { context[name] = definition() }
|
||||
})('PromptBoxes', this, function () {
|
||||
'use strict'
|
||||
var PromptBoxes = function (options) {
|
||||
if (!(this instanceof PromptBoxes)) {
|
||||
return new PromptBoxes(options)
|
||||
}
|
||||
|
||||
var defaultOptions = {
|
||||
attrPrefix: 'pb', // The class/id prefix for all elements
|
||||
speeds: {
|
||||
backdrop: 250, // The enter/leaving animation speed of the backdrop
|
||||
toasts: 250 // The enter/leaving animation speed of the toast
|
||||
},
|
||||
alert: {
|
||||
okText: 'Ok', // The text for the ok button
|
||||
okClass: '', // A class for the ok button
|
||||
closeWithEscape: false, // Allow closing with escaping
|
||||
absolute: false // Show prompt popup as absolute
|
||||
},
|
||||
choices: {
|
||||
choicesClass: '', // A class for the choices button
|
||||
cancelText: 'Cancel', // The text for the cancel button
|
||||
cancelClass: '', // A class for the cancel button
|
||||
closeWithEscape: true, // Allow closing with escaping
|
||||
absolute: false // Show prompt popup as absolute
|
||||
},
|
||||
confirm: {
|
||||
confirmText: 'Confirm', // The text for the confirm button
|
||||
confirmClass: '', // A class for the confirm button
|
||||
cancelText: 'Cancel', // The text for the cancel button
|
||||
cancelClass: '', // A class for the cancel button
|
||||
closeWithEscape: true, // Allow closing with escaping
|
||||
absolute: false // Show prompt popup as absolute
|
||||
},
|
||||
prompt: {
|
||||
inputType: 'text', // The type of input 'text' | 'password' etc.
|
||||
submitText: 'Submit', // The text for the submit button
|
||||
submitClass: '', // A class for the submit button
|
||||
cancelText: 'Cancel', // The text for the cancel button
|
||||
cancelClass: '', // A class for the cancel button
|
||||
closeWithEscape: true, // Allow closing with escaping
|
||||
absolute: false // Show prompt popup as absolute
|
||||
},
|
||||
toasts: {
|
||||
direction: 'top', // Which direction to show the toast 'top' | 'bottom'
|
||||
max: 5, // The number of toasts that can be in the stack
|
||||
duration: 5000, // The time the toast appears
|
||||
showTimerBar: true, // Show timer bar countdown
|
||||
closeWithEscape: true, // Allow closing with escaping
|
||||
allowClose: false, // Whether to show a "x" to close the toast
|
||||
}
|
||||
}
|
||||
this.options = this._extend(options, defaultOptions);
|
||||
|
||||
for (var property in this._prefixes) {
|
||||
if (this._prefixes.hasOwnProperty(property)) this._prefixes[property] = this.options.attrPrefix + '-' + property;
|
||||
}
|
||||
}
|
||||
PromptBoxes.prototype = {
|
||||
_extend: function (source, target) {
|
||||
if (source == null) { return target }
|
||||
for (var k in source) {
|
||||
if (source[k] != null && target[k] !== source[k]) {
|
||||
target[k] = source[k]
|
||||
}
|
||||
}
|
||||
return target
|
||||
},
|
||||
|
||||
_prefixes: {
|
||||
toast: '',
|
||||
confirm: '',
|
||||
prompt: '',
|
||||
alert: '',
|
||||
container: '',
|
||||
backdrop: '',
|
||||
message: '',
|
||||
buttons: '',
|
||||
timerBar: ''
|
||||
},
|
||||
|
||||
_destroyBase: function (elements) {
|
||||
var that = this;
|
||||
|
||||
// Add hide animation classes
|
||||
for (var i = 0; i < elements.length; i++) elements[i].removeAttribute('data-show');
|
||||
|
||||
// Remove escape event from body
|
||||
that._addEscapeEvent(null);
|
||||
|
||||
// Wait for animations to finish then remove from DOM
|
||||
setTimeout(function () {
|
||||
for (var i = 0; i < elements.length; i++) elements[i].remove();
|
||||
}, that.options.speeds.backdrop)
|
||||
},
|
||||
|
||||
_addEscapeEvent: function (callback) {
|
||||
var body$ = document.getElementsByTagName('body')[0];
|
||||
body$.onkeyup = !callback ? null : function (ev) {
|
||||
if (ev.keyCode === 27) callback();
|
||||
};
|
||||
},
|
||||
|
||||
/**
|
||||
* Clears all instances from view
|
||||
*/
|
||||
clear: function () {
|
||||
var that = this;
|
||||
|
||||
// Remove toasts
|
||||
that._toastQueue = [];
|
||||
that._displayToasts();
|
||||
|
||||
// Remove backdrop/alerts/prompts/confirms
|
||||
var elements = [];
|
||||
var classes = [that._prefixes.backdrop, that._prefixes.alert, that._prefixes.confirm, that._prefixes.choices, that._prefixes.prompt];
|
||||
for (var i = 0; i < classes.length; i++) {
|
||||
var els = document.getElementsByClassName(classes[i]);
|
||||
for (var j = 0; j < els.length; j++) elements.push(els[j]);
|
||||
}
|
||||
|
||||
that._destroyBase(elements);
|
||||
},
|
||||
|
||||
/**
|
||||
* Show an alert box
|
||||
*
|
||||
* @param {*} callback the function called on complete. (outome) => { }
|
||||
* @param {*} msg The message to display
|
||||
* @param {*} okText The ok button text. If undefined it will use the options value
|
||||
* @param {*} opts Alert options to override
|
||||
*/
|
||||
alert: function (callback, msg, okText, opts) {
|
||||
var that = this;
|
||||
|
||||
// Re-create options
|
||||
opts = that._extend(opts, Object.assign({}, that.options.alert));
|
||||
if (!msg) msg = 'This is an alert';
|
||||
if (!!okText) opts.okText = okText;
|
||||
|
||||
// Base elements
|
||||
var backdrop$ = document.createElement('div');
|
||||
var base$ = document.createElement('div');
|
||||
base$.id = that._prefixes.container;
|
||||
base$.className = that._prefixes.alert;
|
||||
backdrop$.className = that._prefixes.backdrop;
|
||||
|
||||
// Position base element as absolute
|
||||
if (opts.absolute === true) {
|
||||
var doc = document.documentElement;
|
||||
var top = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);
|
||||
base$.style.position = 'absolute';
|
||||
base$.style.top = top + 'px';
|
||||
}
|
||||
|
||||
// Message elements
|
||||
var message$ = document.createElement('div');
|
||||
message$.className = that._prefixes.message;
|
||||
message$.innerHTML = msg;
|
||||
|
||||
// Buttons
|
||||
var buttons$ = document.createElement('div');
|
||||
var ok$ = document.createElement('button');
|
||||
buttons$.className = that._prefixes.buttons;
|
||||
ok$.className = opts.okClass;
|
||||
ok$.innerHTML = opts.okText;
|
||||
|
||||
// Method to remove bases and return result
|
||||
var complete = function (outcome) {
|
||||
callback(outcome || false);
|
||||
that._destroyBase([backdrop$, base$]);
|
||||
};
|
||||
|
||||
ok$.onclick = function () { complete(true); }
|
||||
|
||||
buttons$.appendChild(ok$);
|
||||
base$.appendChild(message$);
|
||||
base$.appendChild(buttons$);
|
||||
|
||||
var body$ = document.getElementsByTagName('body')[0];
|
||||
body$.appendChild(backdrop$)
|
||||
body$.appendChild(base$);
|
||||
if (opts.closeWithEscape) that._addEscapeEvent(complete);
|
||||
|
||||
setTimeout(function () {
|
||||
ok$.focus();
|
||||
backdrop$.setAttribute('data-show', 'true');
|
||||
base$.setAttribute('data-show', 'true');
|
||||
}, 50);
|
||||
},
|
||||
|
||||
/**
|
||||
* Show a choices dialogue with cancel and confirm actions
|
||||
*
|
||||
* @param {*} callback the function called on complete. (outome) => { }
|
||||
* @param {*} msg The message to display
|
||||
* @param {*} choices The choices button text
|
||||
* @param {*} cancelText The cancel button text. If undefined it will use the options value
|
||||
* @param {*} opts Choices options to override
|
||||
*/
|
||||
choices: function (callback, msg, choices , cancelText, opts) {
|
||||
var that = this;
|
||||
var buttonsChoices = [];
|
||||
// Re-create options
|
||||
opts = that._extend(opts, Object.assign({}, that.options.choices));
|
||||
if (!msg) msg = 'Select action';
|
||||
if (!!cancelText) opts.cancelText = cancelText;
|
||||
|
||||
// Base elements
|
||||
var backdrop$ = document.createElement('div');
|
||||
var base$ = document.createElement('div');
|
||||
base$.id = that._prefixes.container;
|
||||
base$.className = that._prefixes.choices;
|
||||
backdrop$.className = that._prefixes.backdrop;
|
||||
|
||||
// Position base element as absolute
|
||||
if (opts.absolute === true) {
|
||||
var doc = document.documentElement;
|
||||
var top = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);
|
||||
base$.style.position = 'absolute';
|
||||
base$.style.top = top + 'px';
|
||||
}
|
||||
|
||||
// Message elements
|
||||
var message$ = document.createElement('div');
|
||||
message$.className = that._prefixes.message;
|
||||
message$.innerHTML = msg;
|
||||
|
||||
// Buttons
|
||||
var buttons$ = document.createElement('div');
|
||||
var cancel$ = document.createElement('button');
|
||||
buttons$.className = that._prefixes.buttons;
|
||||
cancel$.className = opts.cancelClass;
|
||||
cancel$.innerHTML = opts.cancelText;
|
||||
|
||||
|
||||
// Method to remove bases and return result
|
||||
var complete = function (outcome) {
|
||||
callback(outcome || false);
|
||||
that._destroyBase([backdrop$, base$]);
|
||||
};
|
||||
|
||||
cancel$.onclick = function () { complete(); }
|
||||
|
||||
|
||||
buttons$.appendChild(cancel$);
|
||||
base$.appendChild(message$);
|
||||
|
||||
choices.forEach(function (choice) {
|
||||
var div = document.createElement('div');
|
||||
var choice$ = document.createElement('button');
|
||||
div.appendChild(choice$);
|
||||
div.style.margin="20px";
|
||||
choice$.style.width="100%";
|
||||
choice$.className = opts.confirmClass;
|
||||
choice$.innerHTML = choice;
|
||||
buttonsChoices.push(choice$)
|
||||
choice$.onclick = function () {
|
||||
complete(choice);
|
||||
}
|
||||
base$.appendChild(div);
|
||||
})
|
||||
|
||||
base$.appendChild(buttons$);
|
||||
|
||||
var body$ = document.getElementsByTagName('body')[0];
|
||||
body$.appendChild(backdrop$)
|
||||
body$.appendChild(base$);
|
||||
if (opts.closeWithEscape) that._addEscapeEvent(complete);
|
||||
|
||||
setTimeout(function () {
|
||||
buttonsChoices[0].focus();
|
||||
backdrop$.setAttribute('data-show', 'true');
|
||||
base$.setAttribute('data-show', 'true');
|
||||
}, 50);
|
||||
},
|
||||
|
||||
/**
|
||||
* Show a confirm dialogue with cancel and confirm actions
|
||||
*
|
||||
* @param {*} callback the function called on complete. (outome) => { }
|
||||
* @param {*} msg The message to display
|
||||
* @param {*} submitText The confirm button text. If undefined it will use the options value
|
||||
* @param {*} cancelText The cancel button text. If undefined it will use the options value
|
||||
* @param {*} opts Confirm options to override
|
||||
*/
|
||||
confirm: function (callback, msg, confirmText, cancelText, opts) {
|
||||
var that = this;
|
||||
|
||||
// Re-create options
|
||||
opts = that._extend(opts, Object.assign({}, that.options.confirm));
|
||||
if (!msg) msg = 'Please confirm this action';
|
||||
if (!!confirmText) opts.confirmText = confirmText;
|
||||
if (!!cancelText) opts.cancelText = cancelText;
|
||||
|
||||
// Base elements
|
||||
var backdrop$ = document.createElement('div');
|
||||
var base$ = document.createElement('div');
|
||||
base$.id = that._prefixes.container;
|
||||
base$.className = that._prefixes.confirm;
|
||||
backdrop$.className = that._prefixes.backdrop;
|
||||
|
||||
// Position base element as absolute
|
||||
if (opts.absolute === true) {
|
||||
var doc = document.documentElement;
|
||||
var top = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);
|
||||
base$.style.position = 'absolute';
|
||||
base$.style.top = top + 'px';
|
||||
}
|
||||
|
||||
// Message elements
|
||||
var message$ = document.createElement('div');
|
||||
message$.className = that._prefixes.message;
|
||||
message$.innerHTML = msg;
|
||||
|
||||
// Buttons
|
||||
var buttons$ = document.createElement('div');
|
||||
var confirm$ = document.createElement('button');
|
||||
var cancel$ = document.createElement('button');
|
||||
buttons$.className = that._prefixes.buttons;
|
||||
confirm$.className = opts.confirmClass;
|
||||
confirm$.innerHTML = opts.confirmText;
|
||||
cancel$.className = opts.cancelClass;
|
||||
cancel$.innerHTML = opts.cancelText;
|
||||
|
||||
// Method to remove bases and return result
|
||||
var complete = function (outcome) {
|
||||
callback(outcome || false);
|
||||
that._destroyBase([backdrop$, base$]);
|
||||
};
|
||||
|
||||
cancel$.onclick = function () { complete(); }
|
||||
confirm$.onclick = function () {
|
||||
complete(true);
|
||||
}
|
||||
|
||||
buttons$.appendChild(cancel$);
|
||||
buttons$.appendChild(confirm$);
|
||||
base$.appendChild(message$);
|
||||
base$.appendChild(buttons$);
|
||||
|
||||
var body$ = document.getElementsByTagName('body')[0];
|
||||
body$.appendChild(backdrop$)
|
||||
body$.appendChild(base$);
|
||||
if (opts.closeWithEscape) that._addEscapeEvent(complete);
|
||||
|
||||
setTimeout(function () {
|
||||
confirm$.focus();
|
||||
backdrop$.setAttribute('data-show', 'true');
|
||||
base$.setAttribute('data-show', 'true');
|
||||
}, 50);
|
||||
},
|
||||
|
||||
/**
|
||||
* Show a prompt dialogue with an input field, cancel and submit action
|
||||
*
|
||||
* @param {*} callback the function called on complete. (value) => { } // false is return for cancel
|
||||
* @param {*} inputType The input type. If undefined it will use the options value
|
||||
* @param {*} submitText The submit button text. If undefined it will use the options value
|
||||
* @param {*} cancelText The cancel button text. If undefined it will use the options value
|
||||
* @param {*} msg The message to display
|
||||
* @param {*} opts Prompt options to override
|
||||
*/
|
||||
prompt: function (callback, msg, inputType, submitText, cancelText, opts) {
|
||||
var that = this;
|
||||
|
||||
// Re-create options
|
||||
opts = that._extend(opts, Object.assign({}, that.options.prompt));
|
||||
if (!msg) msg = 'Are you sure?';
|
||||
if (!!inputType) opts.inputType = inputType;
|
||||
if (!!submitText) opts.submitText = submitText;
|
||||
if (!!cancelText) opts.cancelText = cancelText;
|
||||
|
||||
// Base elements
|
||||
var backdrop$ = document.createElement('div');
|
||||
var base$ = document.createElement('div');
|
||||
base$.id = that._prefixes.container;
|
||||
base$.className = that._prefixes.prompt;
|
||||
backdrop$.className = that._prefixes.backdrop;
|
||||
|
||||
// Position base element as absolute
|
||||
if (opts.absolute === true) {
|
||||
var doc = document.documentElement;
|
||||
var top = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);
|
||||
base$.style.position = 'absolute';
|
||||
base$.style.top = top + 'px';
|
||||
}
|
||||
|
||||
// Message elements
|
||||
var message$ = document.createElement('div');
|
||||
message$.className = that._prefixes.message;
|
||||
message$.innerHTML = msg;
|
||||
|
||||
// Input element
|
||||
var input$ = document.createElement('input');
|
||||
input$.type = opts.inputType;
|
||||
if (opts.value) input$.value = opts.value;
|
||||
|
||||
// Buttons
|
||||
var buttons$ = document.createElement('div');
|
||||
var submit$ = document.createElement('button');
|
||||
var cancel$ = document.createElement('button');
|
||||
buttons$.className = that._prefixes.buttons;
|
||||
submit$.className = opts.submitClass;
|
||||
if (!opts.value) submit$.setAttribute('disabled', 'disabled');
|
||||
submit$.innerHTML = opts.submitText;
|
||||
cancel$.className = opts.cancelClass;
|
||||
cancel$.innerHTML = opts.cancelText;
|
||||
|
||||
// Method to remove bases and return result
|
||||
var complete = function (value) {
|
||||
callback(value || false);
|
||||
that._destroyBase([backdrop$, base$]);
|
||||
};
|
||||
|
||||
// Add input event. Listen to enter command.
|
||||
input$.onkeyup = function (ev) {
|
||||
var val = input$.value;
|
||||
if (val === '') return submit$.setAttribute('disabled', 'disabled');
|
||||
|
||||
submit$.removeAttribute('disabled');
|
||||
if (ev.keyCode !== 13) return;
|
||||
|
||||
complete(val);
|
||||
}
|
||||
|
||||
cancel$.onclick = function () { complete(); }
|
||||
submit$.onclick = function () {
|
||||
var value = input$.value;
|
||||
if (value === '') return input$.focus();
|
||||
|
||||
complete(value);
|
||||
}
|
||||
|
||||
buttons$.appendChild(cancel$);
|
||||
buttons$.appendChild(submit$);
|
||||
base$.appendChild(message$);
|
||||
base$.appendChild(input$);
|
||||
base$.appendChild(buttons$);
|
||||
|
||||
var body$ = document.getElementsByTagName('body')[0];
|
||||
body$.appendChild(backdrop$)
|
||||
body$.appendChild(base$);
|
||||
if (opts.closeWithEscape) that._addEscapeEvent(complete);
|
||||
|
||||
setTimeout(function () {
|
||||
input$.focus();
|
||||
backdrop$.setAttribute('data-show', 'true');
|
||||
base$.setAttribute('data-show', 'true');
|
||||
}, 50);
|
||||
},
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
*
|
||||
* TOASTS
|
||||
*
|
||||
*
|
||||
*/
|
||||
_toastQueue: [],
|
||||
|
||||
_addToast: function (el$, className, opts) {
|
||||
var that = this;
|
||||
|
||||
// Remove excess toast if we're over our limit and to give room for our new toast
|
||||
if (that._toastQueue.length >= opts.max) {
|
||||
that._toastQueue.splice(opts.max - 1, (that._toastQueue.length - (opts.max - 1)));
|
||||
}
|
||||
|
||||
// Add toast to queue
|
||||
that._toastQueue.unshift({ id: el$.id, className: className });
|
||||
|
||||
// Trigger animation once loaded to DOM
|
||||
setTimeout(function () {
|
||||
el$.className = className + ' show';
|
||||
}, 50);
|
||||
},
|
||||
|
||||
_removeToast: function (el$) {
|
||||
var that = this;
|
||||
|
||||
// Loop through the queue and remove the requested toast from the queue
|
||||
for (var i = 0; i < that._toastQueue.length; i++) {
|
||||
if (that._toastQueue[i].id === el$.id) {
|
||||
that._toastQueue.splice(i, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
_displayToasts: function (opts) {
|
||||
var that = this;
|
||||
opts = opts || that.options.toasts;
|
||||
|
||||
// Method that physically removes elements from the screen
|
||||
var destroyToast = function (el$) {
|
||||
el$.className = 'gone ' + el$.className;
|
||||
setTimeout(function () {
|
||||
try { el$.remove(); } catch (ex) { console.error(ex) }
|
||||
}, that.options.speeds.toasts);
|
||||
};
|
||||
|
||||
// Get current element list from dom
|
||||
var toastList = document.getElementsByClassName(that._prefixes.toast);
|
||||
|
||||
// Loop through current queue and remove any elements that are no longer present
|
||||
for (var i = 0; i < toastList.length; i++) {
|
||||
var tId = toastList[i].id;
|
||||
var exists = false;
|
||||
for (var j = 0; j < that._toastQueue.length; j++) {
|
||||
if (tId === that._toastQueue[j].id) {
|
||||
exists = true;
|
||||
}
|
||||
}
|
||||
if (!exists) {
|
||||
destroyToast(toastList[i]);
|
||||
}
|
||||
}
|
||||
|
||||
// Calculate margin of toasts to show
|
||||
var height = 0;
|
||||
for (var i = 0; i < that._toastQueue.length; i++) {
|
||||
height += 10;
|
||||
|
||||
var el = document.getElementById(that._toastQueue[i].id);
|
||||
if (!el) break;
|
||||
|
||||
if (i > 0) {
|
||||
var prevEl = document.getElementById(that._toastQueue[i - 1].id);
|
||||
if (prevEl) height += prevEl.clientHeight;
|
||||
}
|
||||
|
||||
if (opts.direction === 'bottom') {
|
||||
el.style.marginBottom = height + 'px';
|
||||
} else {
|
||||
el.style.marginTop = height + 'px';
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* Shows a toast
|
||||
*
|
||||
* @param {*} msg The message to show
|
||||
* @param {*} stateClass The class to assign the toast 'success' | 'error' | 'info' | custom
|
||||
* @param {*} opts Toast options to override
|
||||
*/
|
||||
toast: function (msg, stateClass, opts) {
|
||||
var that = this;
|
||||
|
||||
// Re-create options
|
||||
opts = that._extend(opts, Object.assign({}, that.options.toasts));
|
||||
|
||||
// Build base elements
|
||||
var className = that._prefixes.toast + ' ' + opts.direction + ' ' + (stateClass || 'info');
|
||||
var base$ = document.createElement('div');
|
||||
base$.innerHTML = msg;
|
||||
base$.id = 'toast_' + that._toastQueue.length + '_' + Math.random();
|
||||
base$.className = className;
|
||||
|
||||
// Show close option?
|
||||
if (opts.allowClose) {
|
||||
var close$ = document.createElement('a');
|
||||
close$.href = "javascript:void(0)";
|
||||
close$.innerHTML = '×';
|
||||
close$.className = 'toast-close';
|
||||
close$.onclick = function () {
|
||||
that._removeToast(base$);
|
||||
that._displayToasts(opts);
|
||||
};
|
||||
base$.appendChild(close$);
|
||||
base$.setAttribute('data-close', true);
|
||||
}
|
||||
|
||||
// Add to body
|
||||
document.getElementsByTagName('body')[0].appendChild(base$);
|
||||
|
||||
// Run animations
|
||||
that._addToast(base$, className, opts);
|
||||
that._displayToasts(opts);
|
||||
|
||||
// Set duration logic
|
||||
if (opts.duration) {
|
||||
if (opts.showTimerBar) {
|
||||
var timerBar$ = document.createElement('div');
|
||||
timerBar$.style.position = 'absolute';
|
||||
timerBar$.style.bottom = 0;
|
||||
timerBar$.style.left = 0;
|
||||
timerBar$.style.width = 0;
|
||||
timerBar$.style.height = '4px';
|
||||
timerBar$.style.background = 'rgba(0, 0, 0, 0.25)';
|
||||
timerBar$.style.transition = 'width linear ' + opts.duration + 'ms';
|
||||
timerBar$.className = that._prefixes.timerBar;
|
||||
base$.appendChild(timerBar$);
|
||||
|
||||
// Add timer countdown
|
||||
setTimeout(function () { timerBar$.style.width = '100%' }, 50);
|
||||
}
|
||||
|
||||
// Hide toast once completed time
|
||||
setTimeout(function () {
|
||||
that._removeToast(base$);
|
||||
that._displayToasts(opts);
|
||||
}, opts.duration);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Displays a success toast
|
||||
*
|
||||
* @param {*} msg The message to show
|
||||
* @param {*} opts Toast options to override
|
||||
*/
|
||||
success: function (msg, opts) {
|
||||
this.toast(msg, 'success', opts);
|
||||
},
|
||||
|
||||
/**
|
||||
* Displays a error toast
|
||||
*
|
||||
* @param {*} msg The message to show
|
||||
* @param {*} opts Toast options to override
|
||||
*/
|
||||
error: function (msg, opts) {
|
||||
this.toast(msg, 'error', opts);
|
||||
},
|
||||
|
||||
/**
|
||||
* Displays a info toast
|
||||
*
|
||||
* @param {*} msg The message to show
|
||||
* @param {*} opts Toast options to override
|
||||
*/
|
||||
info: function (msg, opts) {
|
||||
this.toast(msg, 'info', opts);
|
||||
}
|
||||
}
|
||||
|
||||
return PromptBoxes
|
||||
})
|
||||
|
||||
Element.prototype.remove = function () {
|
||||
if (this.parentElement) this.parentElement.removeChild(this);
|
||||
}
|
||||
NodeList.prototype.remove = HTMLCollection.prototype.remove = function () {
|
||||
for (var i = this.length - 1; i >= 0; i--) {
|
||||
if (this[i] && this[i].parentElement) {
|
||||
this[i].parentElement.removeChild(this[i]);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user