Skip to content

Commit e859c24

Browse files
committed
feat(ew): render layout-mode comment markers in the quick-edit iframe
1 parent aebfad1 commit e859c24

4 files changed

Lines changed: 1119 additions & 0 deletions

File tree

nx/public/plugins/quick-edit/quick-edit.css

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,3 +271,82 @@ da-palette {
271271
da-palette .da-palette-field {
272272
color: black;
273273
}
274+
275+
.qe-comment-overlay {
276+
--comment-highlight-bg: light-dark(#fbf198, rgb(255 200 50 / 24%));
277+
--comment-highlight-bg-active: light-dark(#f8d904, rgb(255 220 90 / 38%));
278+
--comment-highlight-border: light-dark(#f8d904, rgb(255 210 70 / 90%));
279+
--comment-highlight-border-active: light-dark(#e8c600, rgb(255 238 130));
280+
281+
position: absolute;
282+
top: 0;
283+
left: 0;
284+
pointer-events: none;
285+
z-index: 9998;
286+
}
287+
288+
.qe-comment-box {
289+
position: absolute;
290+
margin: 0;
291+
padding: 0;
292+
border: none;
293+
pointer-events: auto;
294+
cursor: pointer;
295+
box-sizing: border-box;
296+
}
297+
298+
.qe-comment-box-text {
299+
--da-comment-bg: var(--comment-highlight-bg);
300+
--da-comment-border-color: var(--comment-highlight-border);
301+
302+
/* Visual only: let clicks fall through to the editable text underneath. */
303+
pointer-events: none;
304+
background: light-dark(
305+
color-mix(in srgb, var(--da-comment-bg) 42%, transparent),
306+
color-mix(in srgb, var(--da-comment-bg) 55%, transparent)
307+
);
308+
border-bottom: 2px solid var(--da-comment-border-color);
309+
z-index: 2;
310+
}
311+
312+
.qe-comment-box.is-active {
313+
--da-comment-bg: var(--comment-highlight-bg-active);
314+
--da-comment-border-color: var(--comment-highlight-border-active);
315+
}
316+
317+
.qe-comment-box-text.is-active {
318+
background: light-dark(
319+
color-mix(in srgb, var(--da-comment-bg) 55%, transparent),
320+
color-mix(in srgb, var(--da-comment-bg) 65%, transparent)
321+
);
322+
border-bottom-color: var(--da-comment-border-color);
323+
}
324+
325+
.qe-comment-box-anchor-block {
326+
pointer-events: none;
327+
z-index: 1;
328+
background: transparent !important;
329+
outline: 2px solid var(--comment-highlight-border-active);
330+
outline-offset: 3px;
331+
}
332+
333+
.qe-comment-marker {
334+
position: absolute;
335+
width: 14px;
336+
height: 14px;
337+
padding: 0;
338+
border: none;
339+
border-radius: 50% 50% 50% 2px;
340+
background: var(--comment-highlight-border);
341+
pointer-events: auto;
342+
cursor: pointer;
343+
z-index: 9999;
344+
}
345+
346+
.qe-comment-marker.is-active {
347+
background: var(--comment-highlight-border-active);
348+
}
349+
350+
.qe-comment-marker:hover {
351+
filter: brightness(0.95);
352+
}

nx/public/plugins/quick-edit/quick-edit.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,14 @@ import { setupContentEditableListeners, setupImageDropListeners, updateImageSrc,
22
import { setEditorState } from './src/prose.js';
33
import { setCursors } from './src/cursors.js';
44
import { pollConnection, setupActions } from './src/utils.js';
5+
import {
6+
scrollToProseIndex,
7+
setCommentMarkers,
8+
applyCommentMarkers,
9+
setupCommentShortcut,
10+
restoreBlockIndices,
11+
scheduleCommentMarkerLayout,
12+
} from './src/comments.js';
513

614
import { loadStyle } from '../../../scripts/nexter.js';
715

@@ -20,6 +28,9 @@ async function setBody(body, ctx) {
2028
const doc = new DOMParser().parseFromString(body, 'text/html');
2129
document.body.innerHTML = doc.body.innerHTML;
2230
await ctx.loadPage();
31+
restoreBlockIndices(doc, document);
32+
applyCommentMarkers(ctx);
33+
scheduleCommentMarkerLayout(ctx);
2334
setupContentEditableListeners(ctx);
2435
setupImageDropListeners(ctx, document.body.querySelector('main'));
2536
if (!parentControllerPort) {
@@ -46,6 +57,10 @@ function onMessage(e, ctx) {
4657
updateImageSrc(originalSrc, newSrc);
4758
} else if (e.data.type === 'image-error') {
4859
handleImageError(e.data.error);
60+
} else if (e.data.type === 'scroll-to-pos') {
61+
scrollToProseIndex(e.data.proseIndex);
62+
} else if (e.data.type === 'set-comment-markers') {
63+
setCommentMarkers(e.data, ctx);
4964
}
5065
}
5166

@@ -63,6 +78,7 @@ function setupParentController(loadPage) {
6378
};
6479
port.onmessage = (ev) => onMessage(ev, ctx);
6580
port.postMessage({ ready: true });
81+
setupCommentShortcut(ctx);
6682

6783
window.removeEventListener('message', listener);
6884
};

0 commit comments

Comments
 (0)