Skip to content

Commit 42e89ee

Browse files
committed
feat(compose): add placeholder preview to compose add editor
1 parent d217b6d commit 42e89ee

3 files changed

Lines changed: 54 additions & 5 deletions

File tree

root/app/www/public/ajax/compose.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -273,8 +273,8 @@ function composeValidateAndWrite($dir, $yaml)
273273
</div>
274274
<div class="col-12 mb-3">
275275
<label class="form-label">Compose</label>
276-
<textarea id="compose-add-data" style="display:none;"><?= htmlspecialchars($composeExample) ?></textarea>
277-
<div id="compose-add-editor" style="height: 300px;"></div>
276+
<textarea id="compose-add-data" style="display:none;"></textarea>
277+
<div id="compose-add-editor" style="height: 300px;" data-placeholder="<?= htmlspecialchars($composeExample, ENT_QUOTES) ?>"></div>
278278
</div>
279279
<div class="col-12 text-center">
280280
<button class="btn btn-outline-success access-rw" onclick="composeAdd()">Add Compose</button>

root/app/www/public/css/style.css

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -767,3 +767,17 @@ tr.container-group-row .container-group-label {
767767
max-height: 70vh;
768768
overflow-x: auto;
769769
}
770+
.compose-placeholder {
771+
position: absolute;
772+
top: 6px;
773+
left: 50px;
774+
right: 12px;
775+
z-index: 5;
776+
overflow: hidden;
777+
pointer-events: none;
778+
white-space: pre-wrap;
779+
color: #868e96;
780+
font-family: "SFMono-Regular", Menlo, Consolas, monospace;
781+
font-size: 13px;
782+
line-height: 1.5;
783+
}

root/app/www/public/js/compose.js

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,40 @@ function initComposeEditor(id, content, readOnly = false)
4141
composeEditor = editor;
4242
}
4343
// ---------------------------------------------------------------------------------------------
44+
function composeEditorPlaceholder(containerId, placeholder)
45+
{
46+
if (!placeholder) {
47+
return;
48+
}
49+
50+
const container = document.getElementById(containerId);
51+
const overlay = document.createElement('div');
52+
53+
overlay.className = 'compose-placeholder';
54+
overlay.textContent = placeholder;
55+
container.appendChild(overlay);
56+
57+
const position = () => {
58+
if (!composeEditor || !composeEditor.renderer) {
59+
return;
60+
}
61+
const pos = composeEditor.renderer.textToScreenCoordinates(0, 0);
62+
const rect = container.getBoundingClientRect();
63+
overlay.style.left = (pos.pageX - rect.left) + 'px';
64+
overlay.style.top = (pos.pageY - rect.top) + 'px';
65+
};
66+
67+
const update = () => {
68+
overlay.style.display = composeEditor && composeEditor.getValue() === '' ? 'block' : 'none';
69+
};
70+
71+
composeEditor.on('change', update);
72+
composeEditor.renderer.on('changeGutterWidth', position);
73+
composeEditor.renderer.on('resize', position);
74+
window.setTimeout(position, 0);
75+
update();
76+
}
77+
// ---------------------------------------------------------------------------------------------
4478
function openComposeAdd()
4579
{
4680
$.ajax({
@@ -54,7 +88,8 @@ function openComposeAdd()
5488
size: 'lg',
5589
body: resultData,
5690
onOpen: function () {
57-
initComposeEditor('compose-add-editor', $('#compose-add-data').val());
91+
initComposeEditor('compose-add-editor', '');
92+
composeEditorPlaceholder('compose-add-editor', $('#compose-add-editor').data('placeholder'));
5893
},
5994
onClose: function () {
6095
if (composeEditor) {
@@ -214,9 +249,9 @@ function composeStream(path, action)
214249
socket.close();
215250
if (data.code === 0) {
216251
toast('Compose', label + ' was completed', 'success');
217-
$('#compose-stream-output').text($('#compose-stream-output').text() + '\n[complete]');
252+
$('#compose-stream-output').text($('#compose-stream-output').text() + '\n[complete]\r\nAuto closing in 10s..');
218253

219-
setTimeout(() => dialogClose('composeStream'), 300);
254+
setTimeout(() => dialogClose('composeStream'), 10e3);
220255
} else {
221256
toast('Compose', label + ' failed<br>' + (data.message || 'unknown error'), 'error');
222257
$('#compose-stream-output').text($('#compose-stream-output').text() + '\n[failed]');

0 commit comments

Comments
 (0)