const defaultText = {
info: {
defaultTitle: 'Info',
defaultMessage: 'Default Info Message',
htmlTitle: '
',
html: 'Please read the description carefully
',
},
success: {
defaultTitle: 'Success',
defaultMessage: 'Default Success Message',
htmlTitle: '',
html: 'Your message has been sent successfully
',
},
warning: {
defaultTitle: 'Warning',
defaultMessage: 'Default Warning Message',
htmlTitle: '',
html: `Don't forget to save your data, otherwise it may be lost
`,
},
error: {
defaultTitle: 'Error',
defaultMessage: 'An error has occurred',
htmlTitle: '',
html: `The Page you're looking for isn't here
`,
},
dialog: {
defaultTitle: 'Confirm',
defaultMessage: 'Default Confirm message',
htmlTitle:
'',
html: `Your message*:
`,
},
};
function sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
function validTextarea() {
let valid = true;
const textarea = document.querySelector('textarea[name="your_mess"]');
if (!textarea) {
return valid;
}
if (textarea.value.trim() === '') {
valid = false;
textarea.focus();
textarea.classList.add('invalid');
textarea.placeholder = 'This field cannot be empty!';
setTimeout(() => {
textarea.classList.remove('invalid');
}, 400);
}
return valid;
}
window.addEventListener('DOMContentLoaded', function () {
const form = document.querySelector('form');
const titleEl = form.querySelector('#title');
const messageEl = form.querySelector('#message');
const positionEl = form.querySelector('#position');
const durationEl = form.querySelector('#duration');
const typeEl = form.querySelector('#type');
const textOrHtmlEl = form.querySelector('#use-html');
const hidePrevEl = form.querySelector('#hide-prev');
const hideTitleEl = form.querySelector('#hide-title');
const btn = form.querySelector('#show-notification');
// create popup with default option, now we can set it later
const popup = Notification();
typeEl.addEventListener('change', () => {
titleEl.value = defaultText[typeEl.value].defaultTitle;
messageEl.value = defaultText[typeEl.value].defaultMessage;
});
// show popup
btn.addEventListener('click', function (e) {
e.preventDefault();
btn.disabled = true;
sleep(500).then(() => (btn.disabled = false));
// Form values
let title = titleEl.value;
let message = messageEl.value;
const type = typeEl.value;
// set need property
popup.setProperty({
position: positionEl.value,
duration: durationEl.value,
isHidePrev: hidePrevEl.checked,
isHideTitle: hideTitleEl.checked,
// maxOpened: 3,
});
let callback = null;
let validFunc = null;
if (textOrHtmlEl.checked) {
title = defaultText[type].htmlTitle || title;
message = defaultText[type].html || message;
if (type === 'dialog') {
validFunc = validTextarea;
}
}
if (type === 'dialog') {
callback = (result) => {
console.log('result = ', result);
};
}
if (!popup[type]) {
popup.error({
title: 'Error',
message: `Notification has no such method "${type}"`,
});
return;
}
popup[type]({
title: title,
message: message,
callback: callback,
validFunc: validFunc,
});
return false;
});
});