-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathdemo.js
129 lines (117 loc) · 4.42 KB
/
demo.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
const defaultText = {
info: {
defaultTitle: 'Info',
defaultMessage: 'Default Info Message',
htmlTitle: '<div class="wrapper-notification"><div class="title-cust title-info">Info</div></div>',
html: '<div class="wrapper-notification"><div class="icons icon-info"></div><div class="message message-text-info">Please read the description carefully</div></div>',
},
success: {
defaultTitle: 'Success',
defaultMessage: 'Default Success Message',
htmlTitle: '<div class="wrapper-notification"><div class="title-cust title-success">OK</div></div>',
html: '<div class="wrapper-notification"><div class="icons icon-success"></div><div class="message message-text-success">Your message has been sent successfully</div></div>',
},
warning: {
defaultTitle: 'Warning',
defaultMessage: 'Default Warning Message',
htmlTitle: '<div class="wrapper-notification"><div class="title-cust title-warning">Warning</div></div>',
html: `<div class="wrapper-notification"><div class="icons icon-warning"></div><div class="message message-text-warning">Don't forget to save your data, otherwise it may be lost</div></div>`,
},
error: {
defaultTitle: 'Error',
defaultMessage: 'An error has occurred',
htmlTitle: '<div class="wrapper-notification"><div class="title-cust title-error">Oops</div></div>',
html: `<div class="wrapper-notification"><div class="icons icon-error"></div><div class="message message-text-error">The Page you're looking for isn't here</div></div>`,
},
dialog: {
defaultTitle: 'Confirm',
defaultMessage: 'Default Confirm message',
htmlTitle:
'<div class="wrapper-notification"><div class="icons small icon-send"></div><div class="title-cust title-dialog">Send</div></div>',
html: `<div class="label-message">Your message<span class="asterisk">*</span>:</div><textarea class="popup-textarea" name="your_mess" rows="3"></textarea>`,
},
};
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}"</div>`,
});
return;
}
popup[type]({
title: title,
message: message,
callback: callback,
validFunc: validFunc,
});
return false;
});
});