Skip to content

Commit 7baa445

Browse files
committed
added: dialog buttons and dark mode option
1 parent 899d518 commit 7baa445

File tree

1 file changed

+77
-25
lines changed

1 file changed

+77
-25
lines changed

src/plugin.js

Lines changed: 77 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,25 @@
1919
</button>
2020
</div>
2121
<div id="supercode-editor"></div>
22+
<div id="supercode-footer">
23+
<button id="supercode-cancel-btn">
24+
Cancel
25+
</button>
26+
<button id="supercode-save-btn">
27+
Save
28+
</button>
29+
</div>
2230
</div>
2331
`
2432

2533
const MODAL_CSS = `
2634
35+
:root{
36+
--supercode-modal-primary: #ffffff;
37+
--supercode-modal-secondary: #222f3e;
38+
--supercode-modal-border: rgba(0, 0, 0, 0.1);
39+
}
40+
2741
/* Media query for mobile devices */
2842
@media only screen and (max-width: 767px) {
2943
#supercode-modal {
@@ -68,30 +82,60 @@
6882
border-radius: 10px;
6983
display: flex;
7084
flex-direction: column;
85+
background: var(--supercode-modal-primary);
7186
}
7287
#supercode-header {
7388
display: flex;
7489
padding: 0.5rem 1rem;
75-
border-bottom: 1px solid #ebebeb;
90+
border-bottom: 1px solid var(--supercode-modal-border);
91+
color: var(--supercode-modal-secondary);
7692
}
7793
#supercode-modal h1 {
7894
flex-grow: 1;
7995
margin: auto;
8096
font-size: 14px;
8197
}
82-
#supercode-modal button {
98+
#supercode-close-btn {
8399
background: none;
84100
border: none;
85101
padding: 0;
86102
height: 100%;
87-
cursor:pointer;
103+
cursor: pointer;
104+
fill: var(--supercode-modal-secondary);
88105
}
89106
#supercode-editor {
90107
width: 100%;
91108
height: 100%;
92109
position: relative;
93110
}
94-
`
111+
#supercode-footer {
112+
padding: 0.5rem 1rem;
113+
display: flex;
114+
justify-content: end;
115+
gap: 1rem;
116+
border-top: 1px solid var(--supercode-modal-border);
117+
}
118+
#supercode-footer button {
119+
padding: 0.5rem 1rem;
120+
border-radius: 5px;
121+
font-weight: bold;
122+
border: none;
123+
cursor: pointer;
124+
min-width: 5rem;
125+
transition: opacity 0.1s linear;
126+
}
127+
#supercode-footer button:hover {
128+
opacity: 0.8;
129+
}
130+
#supercode-cancel-btn {
131+
background: transparent;
132+
color: var(--supercode-modal-secondary);
133+
}
134+
#supercode-save-btn {
135+
background: var(--supercode-modal-secondary);
136+
color: var(--supercode-modal-primary);
137+
}
138+
`
95139

96140
let modal = null;
97141

@@ -152,7 +196,8 @@
152196
fontFamily: null,
153197
fallbackModal: false, // enabled in cases like inline, or versions where `CustomView` is not supported.
154198
modalPrimaryColor: '#ffffff',
155-
modalSecondaryColor: '#222f3e'
199+
modalSecondaryColor: '#222f3e',
200+
dark: false
156201
}
157202

158203
// Get Configurations
@@ -185,6 +230,7 @@
185230
case 'autocomplete':
186231
case 'shortcut':
187232
case 'fallbackModal':
233+
case 'dark':
188234
if (typeof value === "boolean") {
189235
Config[key] = value;
190236
}
@@ -208,7 +254,6 @@
208254
if (!Config.icon) {
209255
throw new Error("Supercode Icon name is invalid");
210256
}
211-
212257

213258
// Detect and set fallback model if its required
214259
if(!Config.fallbackModal){
@@ -217,7 +262,6 @@
217262
Config.fallbackModal = true
218263
}
219264
}
220-
221265
}
222266

223267
const setAceOptions = () => {
@@ -259,7 +303,7 @@
259303
setAceOptions();
260304
}
261305

262-
const setHeader = (view, originalHeader, onSave) => {
306+
const setHeader = (view, originalHeader) => {
263307
// add a copy of original header to give original header look
264308
const newHeader = originalHeader.cloneNode(true);
265309
newHeader.style.position = 'relative';
@@ -287,7 +331,7 @@
287331
isOverflow = false;
288332
btn.setAttribute('data-mce-name', 'supercode-toggle')
289333
btn.classList.add('tox-tbtn--enabled');
290-
btn.onclick = onSave;
334+
btn.onclick = onSaveHandler;
291335
}
292336
});
293337

@@ -301,7 +345,7 @@
301345
const button = document.createElement('button');
302346
button.classList = 'tox-tbtn tox-tbtn--enabled';
303347
button.innerHTML = `<span class="tox-icon tox-tbtn__icon-wrap">${Config.icon}</span>`;
304-
button.onclick = onSave;
348+
button.onclick = onSaveHandler;
305349
div.append(button);
306350
newHeader.append(div);
307351
}
@@ -322,12 +366,11 @@
322366
setConfig(editor);
323367
initDependencies(Config);
324368

325-
// todo: fix event listener issue
326-
// const modalKeydownListener = (e) => {
327-
// if((e.key === ' ' && e.ctrlKey) || e.key === 'Escape') {
328-
// hideModal();
329-
// }
330-
// };
369+
const modalKeydownListener = (e) => {
370+
if(e.key === 'Escape') {
371+
hideModal();
372+
}
373+
};
331374

332375
const showModal = () => {
333376
if(!modal){
@@ -351,15 +394,24 @@
351394

352395
/* Update Event Listeners */
353396
modal.element.querySelector('#supercode-backdrop').onclick = hideModal;
354-
modal.element.querySelector('button').onclick = hideModal;
355-
// modal.element.querySelector('#supercode-editor').addEventListener('keydown', modalKeydownListener);
397+
modal.element.querySelector('#supercode-close-btn').onclick = hideModal;
398+
modal.element.querySelector('#supercode-cancel-btn').onclick = hideModal;
399+
modal.element.querySelector('#supercode-save-btn').onclick = () => {
400+
onSaveHandler();
401+
hideModal();
402+
};
403+
modal.element.querySelector('#supercode-editor').addEventListener('keydown', modalKeydownListener);
356404

357405
/* Update Modal based on editor's theme */
358406
document.querySelector('body').classList.add('disable-scroll');
359-
document.querySelector('#supercode-modal').style.background = Config.modalPrimaryColor
360-
document.querySelector('#supercode-header').style.color = Config.modalSecondaryColor
407+
408+
document.body.style.setProperty('--supercode-modal-primary', Config.modalPrimaryColor);
409+
document.body.style.setProperty('--supercode-modal-secondary', Config.modalSecondaryColor);
410+
if(Config.dark){
411+
document.body.style.setProperty('--supercode-modal-border', 'rgba(255, 255, 255, 0.1)');
412+
}
361413
document.querySelector('#supercode-close-btn').innerHTML = editor.ui.registry.getAll().icons['close']
362-
document.querySelector('#supercode-close-btn').style.fill = Config.modalSecondaryColor
414+
363415
modal.element.style.display = 'flex';
364416
setTimeout(() => {
365417
modal.element.style.opacity = 1;
@@ -370,10 +422,10 @@
370422
}
371423

372424
const hideModal = () => {
373-
// removeEventListener('keydown', modalKeydownListener);
374-
onSaveHandler();
425+
removeEventListener('keydown', modalKeydownListener);
375426
document.querySelector('body').classList.remove('disable-scroll');
376427
modal.element.style.opacity = 0;
428+
editor.focus();
377429
setTimeout(() => {
378430
modal.element.style.display = 'none';
379431
}, 10)
@@ -446,7 +498,7 @@
446498

447499
// On tinymce size change => resize code view
448500
if(isScreenSizeChanged){
449-
setHeader(codeView.querySelector('.supercode-header'), originalHeader, onSaveHandler);
501+
setHeader(codeView.querySelector('.supercode-header'), originalHeader);
450502
codeView.querySelector('.supercode-body ').style.width = editorWidth+'px';
451503
}
452504

@@ -462,7 +514,7 @@
462514
codeView.addEventListener('keydown', onKeyDownHandler)
463515
}
464516
// configure header
465-
setHeader(codeView.querySelector('.supercode-header'), originalHeader, onSaveHandler);
517+
setHeader(codeView.querySelector('.supercode-header'), originalHeader);
466518
// configure main code view to look same
467519
setMainView(codeView.querySelector('.supercode-body '), editorWidth);
468520
}

0 commit comments

Comments
 (0)