@hyebook/vue3-adapter 2.3.10 → 2.3.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/src/player/ebook-player.d.ts +17 -0
- package/dist/core/src/player/ebook-player.d.ts.map +1 -1
- package/dist/core/src/player/ebook-player.js +180 -31
- package/dist/core/src/workbench/editor-workbench.d.ts.map +1 -1
- package/dist/core/src/workbench/editor-workbench.js +65 -2
- package/package.json +1 -1
|
@@ -12,6 +12,15 @@ export declare class EBookPlayer implements EBookPlayerHandle {
|
|
|
12
12
|
private loadWarningToggleBtn;
|
|
13
13
|
private loadWarningCloseBtn;
|
|
14
14
|
private loadWarningMessage;
|
|
15
|
+
private textInputBackdrop;
|
|
16
|
+
private textInputTitle;
|
|
17
|
+
private textInputTextarea;
|
|
18
|
+
private textInputError;
|
|
19
|
+
private textInputCancelBtn;
|
|
20
|
+
private textInputConfirmBtn;
|
|
21
|
+
private pendingTextInputResolver;
|
|
22
|
+
private pendingTextInputMaxLength;
|
|
23
|
+
private backToTopBtn;
|
|
15
24
|
private highlightBtn;
|
|
16
25
|
private toolbarDivider;
|
|
17
26
|
private noteBtn;
|
|
@@ -28,6 +37,11 @@ export declare class EBookPlayer implements EBookPlayerHandle {
|
|
|
28
37
|
private readonly handleNoteClickBound;
|
|
29
38
|
private readonly handleLoadWarningToggleBound;
|
|
30
39
|
private readonly handleLoadWarningCloseBound;
|
|
40
|
+
private readonly handleTextInputCancelBound;
|
|
41
|
+
private readonly handleTextInputConfirmBound;
|
|
42
|
+
private readonly handleTextInputBackdropPointerDownBound;
|
|
43
|
+
private readonly handleTextInputKeyDownBound;
|
|
44
|
+
private readonly handleBackToTopClickBound;
|
|
31
45
|
constructor(container: HTMLElement, options: EBookPlayerOptions);
|
|
32
46
|
load(doc?: EbookDoc): Promise<EbookDoc>;
|
|
33
47
|
destroy(): void;
|
|
@@ -97,10 +111,13 @@ export declare class EBookPlayer implements EBookPlayerHandle {
|
|
|
97
111
|
private handleHighlightClick;
|
|
98
112
|
private handleNoteClick;
|
|
99
113
|
private resolveWidth;
|
|
114
|
+
private updateBackToTopButtonPosition;
|
|
100
115
|
private resolveSelectionToolbarOptions;
|
|
101
116
|
private resolveInputLimits;
|
|
102
117
|
private normalizeLimitValue;
|
|
103
118
|
private promptTextWithLimit;
|
|
119
|
+
private confirmTextInput;
|
|
120
|
+
private finishTextInput;
|
|
104
121
|
private normalizeBookmarkContent;
|
|
105
122
|
private resolveCurrentBlockFromScroll;
|
|
106
123
|
private extractBlockDataset;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ebook-player.d.ts","sourceRoot":"","sources":["../../../../../core/src/player/ebook-player.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,QAAQ,EAST,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EACV,iBAAiB,EAEjB,kBAAkB,EAClB,6BAA6B,EAI7B,2BAA2B,EAC3B,2BAA2B,EAC3B,iBAAiB,EACjB,4BAA4B,EAC5B,2BAA2B,EAC3B,cAAc,EACd,eAAe,EACf,UAAU,EAGX,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"ebook-player.d.ts","sourceRoot":"","sources":["../../../../../core/src/player/ebook-player.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { PlayerEngine } from "./engine";
|
|
2
2
|
const EBOOK_PLAYER_STYLE_ID = "hy-ebook-lite-player-style";
|
|
3
|
-
const EBOOK_PLAYER_STYLE_VERSION = "0.2.
|
|
3
|
+
const EBOOK_PLAYER_STYLE_VERSION = "0.2.2";
|
|
4
4
|
const JUMP_SCROLL_FOCUS_DELAY_MS = 360;
|
|
5
5
|
const JUMP_FOCUS_ANIMATION_MS = 560;
|
|
6
6
|
const BOOKMARK_JUMP_REVEAL_TOP_OFFSET_PX = 28;
|
|
7
7
|
const HIGHLIGHT_ICON_SVG = `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M3 22V12.5H6V8.5H18V12.5H21V22H3Z" stroke="#333333" stroke-width="2" stroke-linejoin="round"/><path d="M8.5 8.5V4L15.5 2V8.5" stroke="#333333" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>`;
|
|
8
8
|
const NOTE_ICON_SVG = `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M15.4998 4.49951L19.4998 8.4995" stroke="#333333" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M3.99977 15.9995L17.9997 2L21.9998 5.9995L7.99975 19.9995L2.99976 20.9995L3.99977 15.9995Z" stroke="#333333" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M4.49976 15.9995L7.99975 19.4995" stroke="#333333" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M6.49976 17.4995L17.4998 6.4995" stroke="#333333" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>`;
|
|
9
9
|
const BOOKMARK_ICON_SVG = `<svg width="30" height="40" viewBox="0 0 30 40" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 3C0 1.34315 1.34315 0 3 0H27C28.6569 0 30 1.34315 30 3V38.1989C30 38.9837 29.1374 39.4627 28.4713 39.0477L15 30.6562L1.52873 39.0477C0.862627 39.4627 0 38.9837 0 38.1989L0 3Z" fill="#4FCEBB"/></svg>`;
|
|
10
|
+
const BACK_TO_TOP_ICON_SVG = `<svg width="18" height="18" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 18V6" stroke="currentColor" stroke-width="2" stroke-linecap="round"/><path d="M7 11L12 6L17 11" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>`;
|
|
10
11
|
const EBOOK_PLAYER_CSS = `
|
|
11
12
|
.hyepl-root{position:relative;max-width:100%;margin:0 auto;color:#0f172a;font-size:14px;line-height:1.7}
|
|
12
13
|
.hyepl-root ::selection{background:#7DE2D3}
|
|
@@ -20,6 +21,20 @@ const EBOOK_PLAYER_CSS = `
|
|
|
20
21
|
.hyepl-load-warning-close{width:24px;padding:0}
|
|
21
22
|
.hyepl-load-warning-message{margin:8px 0 0;font-size:12px;line-height:1.5;color:#7f1d1d;white-space:pre-wrap;word-break:break-word;display:none;max-height:180px;overflow:auto}
|
|
22
23
|
.hyepl-load-warning.expanded .hyepl-load-warning-message{display:block}
|
|
24
|
+
.hyepl-input-backdrop{position:fixed;inset:0;display:none;align-items:center;justify-content:center;background:rgba(15,23,42,.45);z-index:10090;padding:16px}
|
|
25
|
+
.hyepl-input-backdrop.show{display:flex}
|
|
26
|
+
.hyepl-input-dialog{width:min(520px,100%);background:#fff;border:1px solid #cbd5e1;border-radius:12px;padding:14px;display:grid;gap:10px;box-shadow:0 16px 34px rgba(15,23,42,.28)}
|
|
27
|
+
.hyepl-input-title{margin:0;font-size:14px;font-weight:600;color:#0f172a}
|
|
28
|
+
.hyepl-input-textarea{width:100%;min-height:120px;resize:vertical;border:1px solid #94a3b8;border-radius:8px;padding:8px 10px;background:#fff;color:#0f172a;box-sizing:border-box;font-family:inherit;font-size:14px;line-height:1.5}
|
|
29
|
+
.hyepl-input-error{min-height:18px;margin:0;color:#b91c1c;font-size:12px}
|
|
30
|
+
.hyepl-input-actions{display:flex;justify-content:flex-end;gap:8px}
|
|
31
|
+
.hyepl-input-btn{height:34px;padding:0 12px;border-radius:8px;border:1px solid #94a3b8;background:#fff;color:#0f172a;cursor:pointer}
|
|
32
|
+
.hyepl-input-btn.primary{border-color:#0b7285;background:#0b7285;color:#fff}
|
|
33
|
+
.hyepl-back-to-top{position:absolute;right:16px;bottom:16px;z-index:10060;width:52px;height:52px;border:1px solid #d5dde8;border-radius:999px;background:#ffffff;color:#0f172a;box-shadow:0 10px 28px rgba(15,23,42,.2);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:background .2s ease,color .2s ease,border-color .2s ease}
|
|
34
|
+
.hyepl-back-to-top svg{width:22px;height:22px}
|
|
35
|
+
.hyepl-back-to-top:hover{background:#0f172a;color:#ffffff;border-color:#0f172a}
|
|
36
|
+
.hyepl-back-to-top:focus-visible{outline:2px solid #38bdf8;outline-offset:2px}
|
|
37
|
+
.hyepl-back-to-top.hidden{display:none}
|
|
23
38
|
.hyepl-content{position:relative}
|
|
24
39
|
.hyepl-page{margin:0 0 16px}
|
|
25
40
|
.hyepl-page:last-child{margin-bottom:0}
|
|
@@ -28,6 +43,7 @@ const EBOOK_PLAYER_CSS = `
|
|
|
28
43
|
.hyepl-block-text{position:relative;padding-right:18px;white-space:normal}
|
|
29
44
|
.hyepl-block-text p,.hyepl-block-text h1,.hyepl-block-text h2,.hyepl-block-text h3,.hyepl-block-text h4,.hyepl-block-text blockquote{margin:0 0 .75em;line-height:1.7}
|
|
30
45
|
.hyepl-block-text p:last-child,.hyepl-block-text h1:last-child,.hyepl-block-text h2:last-child,.hyepl-block-text h3:last-child,.hyepl-block-text h4:last-child,.hyepl-block-text blockquote:last-child{margin-bottom:0}
|
|
46
|
+
.hyepl-block-text em,.hyepl-block-text i,.hyepl-block-table em,.hyepl-block-table i{font-style:italic}
|
|
31
47
|
.hyepl-block-text h1{font-size:24px;line-height:1.3}
|
|
32
48
|
.hyepl-block-text h2{font-size:20px;line-height:1.35}
|
|
33
49
|
.hyepl-block-text h3{font-size:16px;line-height:1.45}
|
|
@@ -83,6 +99,8 @@ const EBOOK_PLAYER_CSS = `
|
|
|
83
99
|
export class EBookPlayer {
|
|
84
100
|
constructor(container, options) {
|
|
85
101
|
this.runtimeDocument = null;
|
|
102
|
+
this.pendingTextInputResolver = null;
|
|
103
|
+
this.pendingTextInputMaxLength = 0;
|
|
86
104
|
this.selectionDraft = null;
|
|
87
105
|
this.loaded = false;
|
|
88
106
|
this.destroyed = false;
|
|
@@ -91,6 +109,7 @@ export class EBookPlayer {
|
|
|
91
109
|
};
|
|
92
110
|
this.handleSelectionRepositionBound = () => {
|
|
93
111
|
this.updateSelectionToolbarPosition();
|
|
112
|
+
this.updateBackToTopButtonPosition();
|
|
94
113
|
};
|
|
95
114
|
this.handleDocumentPointerDownBound = (event) => {
|
|
96
115
|
this.handleDocumentPointerDown(event);
|
|
@@ -110,6 +129,31 @@ export class EBookPlayer {
|
|
|
110
129
|
this.handleLoadWarningCloseBound = () => {
|
|
111
130
|
this.hideLoadWarning();
|
|
112
131
|
};
|
|
132
|
+
this.handleTextInputCancelBound = () => {
|
|
133
|
+
this.finishTextInput(null);
|
|
134
|
+
};
|
|
135
|
+
this.handleTextInputConfirmBound = () => {
|
|
136
|
+
this.confirmTextInput();
|
|
137
|
+
};
|
|
138
|
+
this.handleTextInputBackdropPointerDownBound = (event) => {
|
|
139
|
+
if (event.target === this.textInputBackdrop) {
|
|
140
|
+
this.finishTextInput(null);
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
this.handleTextInputKeyDownBound = (event) => {
|
|
144
|
+
if (event.key === "Escape") {
|
|
145
|
+
event.preventDefault();
|
|
146
|
+
this.finishTextInput(null);
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
if (event.key === "Enter" && (event.metaKey || event.ctrlKey)) {
|
|
150
|
+
event.preventDefault();
|
|
151
|
+
this.confirmTextInput();
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
this.handleBackToTopClickBound = () => {
|
|
155
|
+
this.scrollToStoredPosition(0, "smooth");
|
|
156
|
+
};
|
|
113
157
|
this.container = container;
|
|
114
158
|
this.options = options;
|
|
115
159
|
const runtimeProvider = createRuntimeProvider(options.provider, () => this.runtimeDocument);
|
|
@@ -149,6 +193,35 @@ export class EBookPlayer {
|
|
|
149
193
|
loadWarningHeader.append(loadWarningTitle, loadWarningActions);
|
|
150
194
|
this.loadWarning.append(loadWarningHeader, this.loadWarningMessage);
|
|
151
195
|
this.setLoadWarningExpanded(false);
|
|
196
|
+
this.textInputBackdrop = document.createElement("div");
|
|
197
|
+
this.textInputBackdrop.className = "hyepl-input-backdrop";
|
|
198
|
+
const textInputDialog = document.createElement("div");
|
|
199
|
+
textInputDialog.className = "hyepl-input-dialog";
|
|
200
|
+
this.textInputTitle = document.createElement("h4");
|
|
201
|
+
this.textInputTitle.className = "hyepl-input-title";
|
|
202
|
+
this.textInputTextarea = document.createElement("textarea");
|
|
203
|
+
this.textInputTextarea.className = "hyepl-input-textarea";
|
|
204
|
+
this.textInputError = document.createElement("p");
|
|
205
|
+
this.textInputError.className = "hyepl-input-error";
|
|
206
|
+
const textInputActions = document.createElement("div");
|
|
207
|
+
textInputActions.className = "hyepl-input-actions";
|
|
208
|
+
this.textInputCancelBtn = document.createElement("button");
|
|
209
|
+
this.textInputCancelBtn.type = "button";
|
|
210
|
+
this.textInputCancelBtn.className = "hyepl-input-btn";
|
|
211
|
+
this.textInputCancelBtn.textContent = "取消";
|
|
212
|
+
this.textInputConfirmBtn = document.createElement("button");
|
|
213
|
+
this.textInputConfirmBtn.type = "button";
|
|
214
|
+
this.textInputConfirmBtn.className = "hyepl-input-btn primary";
|
|
215
|
+
this.textInputConfirmBtn.textContent = "确认";
|
|
216
|
+
textInputActions.append(this.textInputCancelBtn, this.textInputConfirmBtn);
|
|
217
|
+
textInputDialog.append(this.textInputTitle, this.textInputTextarea, this.textInputError, textInputActions);
|
|
218
|
+
this.textInputBackdrop.append(textInputDialog);
|
|
219
|
+
this.backToTopBtn = document.createElement("button");
|
|
220
|
+
this.backToTopBtn.type = "button";
|
|
221
|
+
this.backToTopBtn.className = "hyepl-back-to-top";
|
|
222
|
+
this.backToTopBtn.innerHTML = BACK_TO_TOP_ICON_SVG;
|
|
223
|
+
this.backToTopBtn.title = "回到顶部";
|
|
224
|
+
this.backToTopBtn.setAttribute("aria-label", "回到顶部");
|
|
152
225
|
this.highlightBtn = document.createElement("button");
|
|
153
226
|
this.highlightBtn.type = "button";
|
|
154
227
|
this.highlightBtn.className = "hyepl-toolbar-btn";
|
|
@@ -163,19 +236,29 @@ export class EBookPlayer {
|
|
|
163
236
|
this.setToolbarButtonContent(this.noteBtn, NOTE_ICON_SVG, this.selectionOptions.noteButtonText);
|
|
164
237
|
this.noteBtn.setAttribute("aria-label", this.selectionOptions.noteButtonText);
|
|
165
238
|
this.selectionToolbar.append(this.highlightBtn, this.toolbarDivider, this.noteBtn);
|
|
166
|
-
this.root.append(this.content, this.selectionToolbar, this.loadWarning);
|
|
239
|
+
this.root.append(this.content, this.selectionToolbar, this.loadWarning, this.textInputBackdrop);
|
|
167
240
|
this.container.innerHTML = "";
|
|
168
241
|
this.container.append(this.root);
|
|
242
|
+
if (!this.container.style.position) {
|
|
243
|
+
this.container.style.position = "relative";
|
|
244
|
+
}
|
|
245
|
+
this.container.append(this.backToTopBtn);
|
|
169
246
|
this.highlightBtn.addEventListener("mousedown", this.preserveSelectionOnToolbarMouseDownBound);
|
|
170
247
|
this.noteBtn.addEventListener("mousedown", this.preserveSelectionOnToolbarMouseDownBound);
|
|
171
248
|
this.highlightBtn.addEventListener("click", this.handleHighlightClickBound);
|
|
172
249
|
this.noteBtn.addEventListener("click", this.handleNoteClickBound);
|
|
173
250
|
this.loadWarningToggleBtn.addEventListener("click", this.handleLoadWarningToggleBound);
|
|
174
251
|
this.loadWarningCloseBtn.addEventListener("click", this.handleLoadWarningCloseBound);
|
|
252
|
+
this.textInputCancelBtn.addEventListener("click", this.handleTextInputCancelBound);
|
|
253
|
+
this.textInputConfirmBtn.addEventListener("click", this.handleTextInputConfirmBound);
|
|
254
|
+
this.textInputBackdrop.addEventListener("pointerdown", this.handleTextInputBackdropPointerDownBound);
|
|
255
|
+
this.textInputTextarea.addEventListener("keydown", this.handleTextInputKeyDownBound);
|
|
256
|
+
this.backToTopBtn.addEventListener("click", this.handleBackToTopClickBound);
|
|
175
257
|
document.addEventListener("selectionchange", this.handleSelectionChangeBound);
|
|
176
258
|
document.addEventListener("pointerdown", this.handleDocumentPointerDownBound);
|
|
177
259
|
window.addEventListener("scroll", this.handleSelectionRepositionBound, true);
|
|
178
260
|
window.addEventListener("resize", this.handleSelectionRepositionBound);
|
|
261
|
+
this.updateBackToTopButtonPosition();
|
|
179
262
|
}
|
|
180
263
|
async load(doc) {
|
|
181
264
|
if (doc) {
|
|
@@ -215,6 +298,17 @@ export class EBookPlayer {
|
|
|
215
298
|
this.noteBtn.removeEventListener("click", this.handleNoteClickBound);
|
|
216
299
|
this.loadWarningToggleBtn.removeEventListener("click", this.handleLoadWarningToggleBound);
|
|
217
300
|
this.loadWarningCloseBtn.removeEventListener("click", this.handleLoadWarningCloseBound);
|
|
301
|
+
this.textInputCancelBtn.removeEventListener("click", this.handleTextInputCancelBound);
|
|
302
|
+
this.textInputConfirmBtn.removeEventListener("click", this.handleTextInputConfirmBound);
|
|
303
|
+
this.textInputBackdrop.removeEventListener("pointerdown", this.handleTextInputBackdropPointerDownBound);
|
|
304
|
+
this.textInputTextarea.removeEventListener("keydown", this.handleTextInputKeyDownBound);
|
|
305
|
+
this.backToTopBtn.removeEventListener("click", this.handleBackToTopClickBound);
|
|
306
|
+
if (this.pendingTextInputResolver) {
|
|
307
|
+
this.finishTextInput(null);
|
|
308
|
+
}
|
|
309
|
+
if (this.backToTopBtn.parentNode === this.container) {
|
|
310
|
+
this.container.removeChild(this.backToTopBtn);
|
|
311
|
+
}
|
|
218
312
|
if (this.root.parentNode === this.container) {
|
|
219
313
|
this.container.removeChild(this.root);
|
|
220
314
|
}
|
|
@@ -299,7 +393,7 @@ export class EBookPlayer {
|
|
|
299
393
|
throw new Error("Bookmark content is required when prompt is disabled.");
|
|
300
394
|
}
|
|
301
395
|
else {
|
|
302
|
-
content = this.promptTextWithLimit("请输入书签内容", current?.content || "", this.inputLimits.bookmarkMaxLength);
|
|
396
|
+
content = await this.promptTextWithLimit("请输入书签内容", current?.content || "", this.inputLimits.bookmarkMaxLength);
|
|
303
397
|
}
|
|
304
398
|
if (content === null) {
|
|
305
399
|
return null;
|
|
@@ -325,7 +419,7 @@ export class EBookPlayer {
|
|
|
325
419
|
throw new Error("Bookmark content is required when prompt is disabled.");
|
|
326
420
|
}
|
|
327
421
|
else {
|
|
328
|
-
content = this.promptTextWithLimit("请输入书签内容", current.content || "", this.inputLimits.bookmarkMaxLength);
|
|
422
|
+
content = await this.promptTextWithLimit("请输入书签内容", current.content || "", this.inputLimits.bookmarkMaxLength);
|
|
329
423
|
}
|
|
330
424
|
if (content === null) {
|
|
331
425
|
return null;
|
|
@@ -1205,29 +1299,30 @@ export class EBookPlayer {
|
|
|
1205
1299
|
this.hideSelectionToolbar();
|
|
1206
1300
|
}
|
|
1207
1301
|
async handleNoteClick() {
|
|
1208
|
-
|
|
1302
|
+
const selectionDraft = this.selectionDraft;
|
|
1303
|
+
if (!selectionDraft) {
|
|
1209
1304
|
return;
|
|
1210
1305
|
}
|
|
1211
1306
|
const defaultText = "";
|
|
1212
|
-
const content = this.promptTextWithLimit("请输入笔记内容", defaultText, this.inputLimits.noteMaxLength);
|
|
1307
|
+
const content = await this.promptTextWithLimit("请输入笔记内容", defaultText, this.inputLimits.noteMaxLength);
|
|
1213
1308
|
if (content === null) {
|
|
1214
1309
|
return;
|
|
1215
1310
|
}
|
|
1216
|
-
const segments =
|
|
1217
|
-
?
|
|
1311
|
+
const segments = selectionDraft.segments && selectionDraft.segments.length
|
|
1312
|
+
? selectionDraft.segments
|
|
1218
1313
|
: [
|
|
1219
1314
|
{
|
|
1220
|
-
pageId:
|
|
1221
|
-
blockId:
|
|
1222
|
-
range:
|
|
1223
|
-
text:
|
|
1315
|
+
pageId: selectionDraft.pageId,
|
|
1316
|
+
blockId: selectionDraft.blockId,
|
|
1317
|
+
range: selectionDraft.range,
|
|
1318
|
+
text: selectionDraft.text,
|
|
1224
1319
|
},
|
|
1225
1320
|
];
|
|
1226
1321
|
const firstSegment = segments[0];
|
|
1227
1322
|
if (!firstSegment) {
|
|
1228
1323
|
return;
|
|
1229
1324
|
}
|
|
1230
|
-
const mergedSelectedText =
|
|
1325
|
+
const mergedSelectedText = selectionDraft.text ||
|
|
1231
1326
|
segments
|
|
1232
1327
|
.map((segment) => segment.text)
|
|
1233
1328
|
.filter(Boolean)
|
|
@@ -1259,6 +1354,41 @@ export class EBookPlayer {
|
|
|
1259
1354
|
}
|
|
1260
1355
|
return Math.max(320, Math.round(width));
|
|
1261
1356
|
}
|
|
1357
|
+
updateBackToTopButtonPosition() {
|
|
1358
|
+
const hostRect = this.container.getBoundingClientRect();
|
|
1359
|
+
const hostWidth = this.container.clientWidth || hostRect.width;
|
|
1360
|
+
const hostHeight = this.container.clientHeight || hostRect.height;
|
|
1361
|
+
const buttonWidth = this.backToTopBtn.offsetWidth || 52;
|
|
1362
|
+
const buttonHeight = this.backToTopBtn.offsetHeight || 52;
|
|
1363
|
+
const margin = 16;
|
|
1364
|
+
if (hostWidth <= 0 || hostHeight <= 0) {
|
|
1365
|
+
this.backToTopBtn.classList.add("hidden");
|
|
1366
|
+
return;
|
|
1367
|
+
}
|
|
1368
|
+
const viewportLeft = 0;
|
|
1369
|
+
const viewportTop = 0;
|
|
1370
|
+
const viewportRight = window.innerWidth;
|
|
1371
|
+
const viewportBottom = window.innerHeight;
|
|
1372
|
+
const desiredViewportLeft = Math.min(hostRect.right - buttonWidth - margin, viewportRight - buttonWidth - margin);
|
|
1373
|
+
const desiredViewportTop = viewportBottom - buttonHeight - margin;
|
|
1374
|
+
const minViewportLeft = Math.max(viewportLeft + margin, hostRect.left + margin);
|
|
1375
|
+
const maxViewportLeft = Math.min(viewportRight - buttonWidth - margin, hostRect.right - buttonWidth - margin);
|
|
1376
|
+
const minViewportTop = Math.max(viewportTop + margin, hostRect.top + margin);
|
|
1377
|
+
const maxViewportTop = Math.min(viewportBottom - buttonHeight - margin, hostRect.bottom - buttonHeight - margin);
|
|
1378
|
+
if (maxViewportLeft < minViewportLeft || maxViewportTop < minViewportTop) {
|
|
1379
|
+
this.backToTopBtn.classList.add("hidden");
|
|
1380
|
+
return;
|
|
1381
|
+
}
|
|
1382
|
+
const clampedViewportLeft = Math.max(minViewportLeft, Math.min(desiredViewportLeft, maxViewportLeft));
|
|
1383
|
+
const clampedViewportTop = Math.max(minViewportTop, Math.min(desiredViewportTop, maxViewportTop));
|
|
1384
|
+
const localLeft = clampedViewportLeft - hostRect.left;
|
|
1385
|
+
const localTop = clampedViewportTop - hostRect.top;
|
|
1386
|
+
this.backToTopBtn.style.left = `${Math.round(localLeft)}px`;
|
|
1387
|
+
this.backToTopBtn.style.top = `${Math.round(localTop)}px`;
|
|
1388
|
+
this.backToTopBtn.style.right = "auto";
|
|
1389
|
+
this.backToTopBtn.style.bottom = "auto";
|
|
1390
|
+
this.backToTopBtn.classList.remove("hidden");
|
|
1391
|
+
}
|
|
1262
1392
|
resolveSelectionToolbarOptions(options) {
|
|
1263
1393
|
const highlightButtonText = typeof options?.highlightButtonText === "string" &&
|
|
1264
1394
|
options.highlightButtonText.trim()
|
|
@@ -1296,24 +1426,43 @@ export class EBookPlayer {
|
|
|
1296
1426
|
return Math.max(1, Math.floor(value));
|
|
1297
1427
|
}
|
|
1298
1428
|
promptTextWithLimit(title, defaultText, maxLength) {
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1429
|
+
if (this.pendingTextInputResolver) {
|
|
1430
|
+
this.finishTextInput(null);
|
|
1431
|
+
}
|
|
1432
|
+
this.pendingTextInputMaxLength = maxLength;
|
|
1433
|
+
this.textInputTitle.textContent = `${title}(最多${maxLength}字)`;
|
|
1434
|
+
this.textInputTextarea.value = defaultText;
|
|
1435
|
+
this.textInputError.textContent = "";
|
|
1436
|
+
this.textInputBackdrop.classList.add("show");
|
|
1437
|
+
window.setTimeout(() => {
|
|
1438
|
+
this.textInputTextarea.focus();
|
|
1439
|
+
this.textInputTextarea.setSelectionRange(this.textInputTextarea.value.length, this.textInputTextarea.value.length);
|
|
1440
|
+
}, 0);
|
|
1441
|
+
return new Promise((resolve) => {
|
|
1442
|
+
this.pendingTextInputResolver = resolve;
|
|
1443
|
+
});
|
|
1444
|
+
}
|
|
1445
|
+
confirmTextInput() {
|
|
1446
|
+
const raw = this.textInputTextarea.value || "";
|
|
1447
|
+
const trimmed = raw.trim();
|
|
1448
|
+
if (!trimmed) {
|
|
1449
|
+
this.textInputError.textContent = "内容不能为空";
|
|
1450
|
+
return;
|
|
1451
|
+
}
|
|
1452
|
+
if (trimmed.length > this.pendingTextInputMaxLength) {
|
|
1453
|
+
this.textInputError.textContent = `最多输入${this.pendingTextInputMaxLength}字,当前${trimmed.length}字。`;
|
|
1454
|
+
return;
|
|
1455
|
+
}
|
|
1456
|
+
this.finishTextInput(trimmed);
|
|
1457
|
+
}
|
|
1458
|
+
finishTextInput(value) {
|
|
1459
|
+
const resolver = this.pendingTextInputResolver;
|
|
1460
|
+
this.pendingTextInputResolver = null;
|
|
1461
|
+
this.pendingTextInputMaxLength = 0;
|
|
1462
|
+
this.textInputBackdrop.classList.remove("show");
|
|
1463
|
+
this.textInputError.textContent = "";
|
|
1464
|
+
if (resolver) {
|
|
1465
|
+
resolver(value);
|
|
1317
1466
|
}
|
|
1318
1467
|
}
|
|
1319
1468
|
normalizeBookmarkContent(raw) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editor-workbench.d.ts","sourceRoot":"","sources":["../../../../../core/src/workbench/editor-workbench.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"editor-workbench.d.ts","sourceRoot":"","sources":["../../../../../core/src/workbench/editor-workbench.ts"],"names":[],"mappings":"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"}
|
|
@@ -2922,6 +2922,26 @@ export function mountEditorWorkbench(container, options = {}) {
|
|
|
2922
2922
|
return item !== editorArea && isParagraphElement(item);
|
|
2923
2923
|
});
|
|
2924
2924
|
};
|
|
2925
|
+
const ensureEditorHasFocusableParagraph = () => {
|
|
2926
|
+
const paragraphs = getEditorParagraphCandidates();
|
|
2927
|
+
if (paragraphs.length) {
|
|
2928
|
+
return paragraphs[0];
|
|
2929
|
+
}
|
|
2930
|
+
const paragraph = document.createElement("p");
|
|
2931
|
+
paragraph.innerHTML = "<br>";
|
|
2932
|
+
editorArea.append(paragraph);
|
|
2933
|
+
return paragraph;
|
|
2934
|
+
};
|
|
2935
|
+
const isEditorSurfaceEffectivelyEmpty = () => {
|
|
2936
|
+
if (getEditorParagraphCandidates().length > 0) {
|
|
2937
|
+
return false;
|
|
2938
|
+
}
|
|
2939
|
+
const text = (editorArea.textContent || "").replace(/\u00a0/g, " ").trim();
|
|
2940
|
+
if (text.length > 0) {
|
|
2941
|
+
return false;
|
|
2942
|
+
}
|
|
2943
|
+
return !editorArea.querySelector("table,img,video,.inline-media");
|
|
2944
|
+
};
|
|
2925
2945
|
const rememberActiveParagraphIndex = () => {
|
|
2926
2946
|
const paragraph = resolveActiveParagraph(editorArea, rememberedRange);
|
|
2927
2947
|
if (!paragraph) {
|
|
@@ -3875,6 +3895,9 @@ export function mountEditorWorkbench(container, options = {}) {
|
|
|
3875
3895
|
editorRenderKey = key;
|
|
3876
3896
|
selectInlineImage(null);
|
|
3877
3897
|
rememberedParagraphIndex = null;
|
|
3898
|
+
if (isEditorSurfaceEffectivelyEmpty()) {
|
|
3899
|
+
ensureEditorHasFocusableParagraph();
|
|
3900
|
+
}
|
|
3878
3901
|
}
|
|
3879
3902
|
if (state.mode === "preview") {
|
|
3880
3903
|
canvas.style.width = "100%";
|
|
@@ -4269,6 +4292,20 @@ export function mountEditorWorkbench(container, options = {}) {
|
|
|
4269
4292
|
const image = target.closest("img.inline-image");
|
|
4270
4293
|
if (!image || !editorArea.contains(image)) {
|
|
4271
4294
|
selectInlineImage(null);
|
|
4295
|
+
if (target === editorArea && isEditorSurfaceEffectivelyEmpty()) {
|
|
4296
|
+
const paragraph = ensureEditorHasFocusableParagraph();
|
|
4297
|
+
editorArea.focus();
|
|
4298
|
+
const range = document.createRange();
|
|
4299
|
+
range.selectNodeContents(paragraph);
|
|
4300
|
+
range.collapse(false);
|
|
4301
|
+
const selection = window.getSelection();
|
|
4302
|
+
if (selection) {
|
|
4303
|
+
selection.removeAllRanges();
|
|
4304
|
+
selection.addRange(range);
|
|
4305
|
+
rememberedRange = range.cloneRange();
|
|
4306
|
+
rememberActiveParagraphIndex();
|
|
4307
|
+
}
|
|
4308
|
+
}
|
|
4272
4309
|
return;
|
|
4273
4310
|
}
|
|
4274
4311
|
selectInlineImage(image);
|
|
@@ -6038,8 +6075,34 @@ function parseLineHeight(value) {
|
|
|
6038
6075
|
if (!value) {
|
|
6039
6076
|
return undefined;
|
|
6040
6077
|
}
|
|
6041
|
-
const
|
|
6042
|
-
|
|
6078
|
+
const normalized = value.trim().toLowerCase();
|
|
6079
|
+
if (!normalized || normalized === "normal") {
|
|
6080
|
+
return undefined;
|
|
6081
|
+
}
|
|
6082
|
+
const percentMatch = normalized.match(/^(-?\d+(?:\.\d+)?)%$/);
|
|
6083
|
+
if (percentMatch && percentMatch[1] !== undefined) {
|
|
6084
|
+
const percent = Number.parseFloat(percentMatch[1]);
|
|
6085
|
+
if (!Number.isFinite(percent) || percent <= 0) {
|
|
6086
|
+
return undefined;
|
|
6087
|
+
}
|
|
6088
|
+
return Number.parseFloat((percent / 100).toFixed(4));
|
|
6089
|
+
}
|
|
6090
|
+
const unitlessMatch = normalized.match(/^-?\d+(?:\.\d+)?$/);
|
|
6091
|
+
if (unitlessMatch) {
|
|
6092
|
+
const raw = Number.parseFloat(normalized);
|
|
6093
|
+
if (!Number.isFinite(raw) || raw <= 0) {
|
|
6094
|
+
return undefined;
|
|
6095
|
+
}
|
|
6096
|
+
if (raw >= 100) {
|
|
6097
|
+
return Number.parseFloat((raw / 100).toFixed(4));
|
|
6098
|
+
}
|
|
6099
|
+
return raw;
|
|
6100
|
+
}
|
|
6101
|
+
const number = Number.parseFloat(normalized);
|
|
6102
|
+
if (!Number.isFinite(number) || number <= 0) {
|
|
6103
|
+
return undefined;
|
|
6104
|
+
}
|
|
6105
|
+
return number;
|
|
6043
6106
|
}
|
|
6044
6107
|
function parseIndentEm(value) {
|
|
6045
6108
|
if (!value) {
|