@adminforth/markdown 1.8.0 → 1.9.0
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/build.log +2 -2
- package/custom/MarkdownEditor.vue +88 -7
- package/dist/custom/MarkdownEditor.vue +88 -7
- package/package.json +1 -1
package/build.log
CHANGED
|
@@ -10,5 +10,5 @@ custom/package-lock.json
|
|
|
10
10
|
custom/package.json
|
|
11
11
|
custom/tsconfig.json
|
|
12
12
|
|
|
13
|
-
sent
|
|
14
|
-
total size is
|
|
13
|
+
sent 32,725 bytes received 115 bytes 65,680.00 bytes/sec
|
|
14
|
+
total size is 32,299 speedup is 0.98
|
|
@@ -229,10 +229,60 @@ function getTurndownService(): TurndownService {
|
|
|
229
229
|
return ``;
|
|
230
230
|
},
|
|
231
231
|
});
|
|
232
|
-
|
|
232
|
+
turndownService.escape = (s: string) => s;
|
|
233
233
|
return turndownService;
|
|
234
234
|
}
|
|
235
235
|
|
|
236
|
+
function toggleWrap(ed: monaco.editor.IStandaloneCodeEditor, left: string, right = left) {
|
|
237
|
+
const m = ed.getModel();
|
|
238
|
+
if (!m) return;
|
|
239
|
+
|
|
240
|
+
const selections = ed.getSelections() || [];
|
|
241
|
+
if (!selections.length) return;
|
|
242
|
+
|
|
243
|
+
const edits: monaco.editor.IIdentifiedSingleEditOperation[] = [];
|
|
244
|
+
const nextSelections: monaco.Selection[] = [];
|
|
245
|
+
|
|
246
|
+
for (const sel of selections) {
|
|
247
|
+
const text = m.getValueInRange(sel);
|
|
248
|
+
|
|
249
|
+
if (sel.isEmpty()) {
|
|
250
|
+
edits.push({ range: sel, text: `${left}${right}` });
|
|
251
|
+
const pos = sel.getStartPosition();
|
|
252
|
+
const col = pos.column + left.length;
|
|
253
|
+
nextSelections.push(new monaco.Selection(pos.lineNumber, col, pos.lineNumber, col));
|
|
254
|
+
continue;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
const isWrapped = text.startsWith(left) && text.endsWith(right) && text.length >= left.length + right.length;
|
|
258
|
+
|
|
259
|
+
if (isWrapped) {
|
|
260
|
+
const unwrapped = text.slice(left.length, text.length - right.length);
|
|
261
|
+
edits.push({ range: sel, text: unwrapped });
|
|
262
|
+
|
|
263
|
+
const start = sel.getStartPosition();
|
|
264
|
+
nextSelections.push(new monaco.Selection(start.lineNumber, start.column, start.lineNumber, start.column + unwrapped.length));
|
|
265
|
+
} else {
|
|
266
|
+
edits.push({ range: sel, text: `${left}${text}${right}` });
|
|
267
|
+
|
|
268
|
+
const start = sel.getStartPosition();
|
|
269
|
+
nextSelections.push(
|
|
270
|
+
new monaco.Selection(
|
|
271
|
+
start.lineNumber,
|
|
272
|
+
start.column + left.length,
|
|
273
|
+
start.lineNumber,
|
|
274
|
+
start.column + left.length + text.length,
|
|
275
|
+
),
|
|
276
|
+
);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
ed.pushUndoStop();
|
|
281
|
+
ed.executeEdits('md-format', edits);
|
|
282
|
+
ed.pushUndoStop();
|
|
283
|
+
ed.setSelections(nextSelections);
|
|
284
|
+
}
|
|
285
|
+
|
|
236
286
|
let editor: monaco.editor.IStandaloneCodeEditor | null = null;
|
|
237
287
|
let model: monaco.editor.ITextModel | null = null;
|
|
238
288
|
const disposables: monaco.IDisposable[] = [];
|
|
@@ -310,13 +360,14 @@ function updateImagePreviews() {
|
|
|
310
360
|
preview.style.display = 'inline-block';
|
|
311
361
|
preview.style.borderRadius = '6px';
|
|
312
362
|
preview.style.overflow = 'hidden';
|
|
313
|
-
preview.style.maxWidth = '
|
|
314
|
-
preview.style.maxHeight = '
|
|
363
|
+
preview.style.maxWidth = '440px';
|
|
364
|
+
preview.style.maxHeight = '280px';
|
|
365
|
+
|
|
315
366
|
|
|
316
367
|
const imageEl = document.createElement('img');
|
|
317
368
|
imageEl.src = img.src;
|
|
318
|
-
imageEl.style.maxWidth = '
|
|
319
|
-
imageEl.style.maxHeight = '
|
|
369
|
+
imageEl.style.maxWidth = '440px';
|
|
370
|
+
imageEl.style.maxHeight = '280px';
|
|
320
371
|
imageEl.style.display = 'block';
|
|
321
372
|
imageEl.style.opacity = '0.95';
|
|
322
373
|
|
|
@@ -325,7 +376,7 @@ function updateImagePreviews() {
|
|
|
325
376
|
|
|
326
377
|
const zone: monaco.editor.IViewZone = {
|
|
327
378
|
afterLineNumber: img.lineNumber,
|
|
328
|
-
heightInPx:
|
|
379
|
+
heightInPx: 320,
|
|
329
380
|
domNode: wrapper,
|
|
330
381
|
};
|
|
331
382
|
|
|
@@ -336,7 +387,7 @@ function updateImagePreviews() {
|
|
|
336
387
|
imageEl.onload = () => {
|
|
337
388
|
if (!editor) return;
|
|
338
389
|
const measured = wrapper.offsetHeight;
|
|
339
|
-
const nextHeight = Math.max(
|
|
390
|
+
const nextHeight = Math.max(60, Math.min(520, measured || 320));
|
|
340
391
|
if (zone.heightInPx !== nextHeight) {
|
|
341
392
|
zone.heightInPx = nextHeight;
|
|
342
393
|
editor.changeViewZones((a) => a.layoutZone(zoneId));
|
|
@@ -455,8 +506,38 @@ onMounted(async () => {
|
|
|
455
506
|
model,
|
|
456
507
|
language: 'markdown',
|
|
457
508
|
automaticLayout: true,
|
|
509
|
+
wordWrap: 'on',
|
|
510
|
+
wrappingStrategy: 'advanced',
|
|
511
|
+
wrappingIndent: 'same',
|
|
512
|
+
scrollbar: {
|
|
513
|
+
horizontal: 'hidden',
|
|
514
|
+
},
|
|
515
|
+
scrollBeyondLastColumn: 0,
|
|
516
|
+
});
|
|
517
|
+
editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyI, () => {
|
|
518
|
+
toggleWrap(editor!, '*');
|
|
458
519
|
});
|
|
459
520
|
|
|
521
|
+
editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyB, () => {
|
|
522
|
+
toggleWrap(editor!, '**');
|
|
523
|
+
});
|
|
524
|
+
editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyU, () => {
|
|
525
|
+
toggleWrap(editor!, '<u>', '</u>');
|
|
526
|
+
});
|
|
527
|
+
editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyE, () => {
|
|
528
|
+
toggleWrap(editor!, '`');
|
|
529
|
+
});
|
|
530
|
+
editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.Shift | monaco.KeyCode.KeyX, () => {
|
|
531
|
+
toggleWrap(editor!, '~~');
|
|
532
|
+
});
|
|
533
|
+
editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyK, () => {
|
|
534
|
+
const selection = editor!.getSelection();
|
|
535
|
+
if (!selection) return;
|
|
536
|
+
const text = model?.getValueInRange(selection) || '';
|
|
537
|
+
const escaped = escapeMarkdownLinkText(text);
|
|
538
|
+
const markdownLink = `[${escaped}](url)`;
|
|
539
|
+
editor!.executeEdits('insert-link', [{ range: selection, text: markdownLink, forceMoveMarkers: true }]);
|
|
540
|
+
});
|
|
460
541
|
debug('Monaco editor created', {
|
|
461
542
|
hasUploadPluginInstanceId: Boolean(props.meta?.uploadPluginInstanceId),
|
|
462
543
|
});
|
|
@@ -229,10 +229,60 @@ function getTurndownService(): TurndownService {
|
|
|
229
229
|
return ``;
|
|
230
230
|
},
|
|
231
231
|
});
|
|
232
|
-
|
|
232
|
+
turndownService.escape = (s: string) => s;
|
|
233
233
|
return turndownService;
|
|
234
234
|
}
|
|
235
235
|
|
|
236
|
+
function toggleWrap(ed: monaco.editor.IStandaloneCodeEditor, left: string, right = left) {
|
|
237
|
+
const m = ed.getModel();
|
|
238
|
+
if (!m) return;
|
|
239
|
+
|
|
240
|
+
const selections = ed.getSelections() || [];
|
|
241
|
+
if (!selections.length) return;
|
|
242
|
+
|
|
243
|
+
const edits: monaco.editor.IIdentifiedSingleEditOperation[] = [];
|
|
244
|
+
const nextSelections: monaco.Selection[] = [];
|
|
245
|
+
|
|
246
|
+
for (const sel of selections) {
|
|
247
|
+
const text = m.getValueInRange(sel);
|
|
248
|
+
|
|
249
|
+
if (sel.isEmpty()) {
|
|
250
|
+
edits.push({ range: sel, text: `${left}${right}` });
|
|
251
|
+
const pos = sel.getStartPosition();
|
|
252
|
+
const col = pos.column + left.length;
|
|
253
|
+
nextSelections.push(new monaco.Selection(pos.lineNumber, col, pos.lineNumber, col));
|
|
254
|
+
continue;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
const isWrapped = text.startsWith(left) && text.endsWith(right) && text.length >= left.length + right.length;
|
|
258
|
+
|
|
259
|
+
if (isWrapped) {
|
|
260
|
+
const unwrapped = text.slice(left.length, text.length - right.length);
|
|
261
|
+
edits.push({ range: sel, text: unwrapped });
|
|
262
|
+
|
|
263
|
+
const start = sel.getStartPosition();
|
|
264
|
+
nextSelections.push(new monaco.Selection(start.lineNumber, start.column, start.lineNumber, start.column + unwrapped.length));
|
|
265
|
+
} else {
|
|
266
|
+
edits.push({ range: sel, text: `${left}${text}${right}` });
|
|
267
|
+
|
|
268
|
+
const start = sel.getStartPosition();
|
|
269
|
+
nextSelections.push(
|
|
270
|
+
new monaco.Selection(
|
|
271
|
+
start.lineNumber,
|
|
272
|
+
start.column + left.length,
|
|
273
|
+
start.lineNumber,
|
|
274
|
+
start.column + left.length + text.length,
|
|
275
|
+
),
|
|
276
|
+
);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
ed.pushUndoStop();
|
|
281
|
+
ed.executeEdits('md-format', edits);
|
|
282
|
+
ed.pushUndoStop();
|
|
283
|
+
ed.setSelections(nextSelections);
|
|
284
|
+
}
|
|
285
|
+
|
|
236
286
|
let editor: monaco.editor.IStandaloneCodeEditor | null = null;
|
|
237
287
|
let model: monaco.editor.ITextModel | null = null;
|
|
238
288
|
const disposables: monaco.IDisposable[] = [];
|
|
@@ -310,13 +360,14 @@ function updateImagePreviews() {
|
|
|
310
360
|
preview.style.display = 'inline-block';
|
|
311
361
|
preview.style.borderRadius = '6px';
|
|
312
362
|
preview.style.overflow = 'hidden';
|
|
313
|
-
preview.style.maxWidth = '
|
|
314
|
-
preview.style.maxHeight = '
|
|
363
|
+
preview.style.maxWidth = '440px';
|
|
364
|
+
preview.style.maxHeight = '280px';
|
|
365
|
+
|
|
315
366
|
|
|
316
367
|
const imageEl = document.createElement('img');
|
|
317
368
|
imageEl.src = img.src;
|
|
318
|
-
imageEl.style.maxWidth = '
|
|
319
|
-
imageEl.style.maxHeight = '
|
|
369
|
+
imageEl.style.maxWidth = '440px';
|
|
370
|
+
imageEl.style.maxHeight = '280px';
|
|
320
371
|
imageEl.style.display = 'block';
|
|
321
372
|
imageEl.style.opacity = '0.95';
|
|
322
373
|
|
|
@@ -325,7 +376,7 @@ function updateImagePreviews() {
|
|
|
325
376
|
|
|
326
377
|
const zone: monaco.editor.IViewZone = {
|
|
327
378
|
afterLineNumber: img.lineNumber,
|
|
328
|
-
heightInPx:
|
|
379
|
+
heightInPx: 320,
|
|
329
380
|
domNode: wrapper,
|
|
330
381
|
};
|
|
331
382
|
|
|
@@ -336,7 +387,7 @@ function updateImagePreviews() {
|
|
|
336
387
|
imageEl.onload = () => {
|
|
337
388
|
if (!editor) return;
|
|
338
389
|
const measured = wrapper.offsetHeight;
|
|
339
|
-
const nextHeight = Math.max(
|
|
390
|
+
const nextHeight = Math.max(60, Math.min(520, measured || 320));
|
|
340
391
|
if (zone.heightInPx !== nextHeight) {
|
|
341
392
|
zone.heightInPx = nextHeight;
|
|
342
393
|
editor.changeViewZones((a) => a.layoutZone(zoneId));
|
|
@@ -455,8 +506,38 @@ onMounted(async () => {
|
|
|
455
506
|
model,
|
|
456
507
|
language: 'markdown',
|
|
457
508
|
automaticLayout: true,
|
|
509
|
+
wordWrap: 'on',
|
|
510
|
+
wrappingStrategy: 'advanced',
|
|
511
|
+
wrappingIndent: 'same',
|
|
512
|
+
scrollbar: {
|
|
513
|
+
horizontal: 'hidden',
|
|
514
|
+
},
|
|
515
|
+
scrollBeyondLastColumn: 0,
|
|
516
|
+
});
|
|
517
|
+
editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyI, () => {
|
|
518
|
+
toggleWrap(editor!, '*');
|
|
458
519
|
});
|
|
459
520
|
|
|
521
|
+
editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyB, () => {
|
|
522
|
+
toggleWrap(editor!, '**');
|
|
523
|
+
});
|
|
524
|
+
editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyU, () => {
|
|
525
|
+
toggleWrap(editor!, '<u>', '</u>');
|
|
526
|
+
});
|
|
527
|
+
editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyE, () => {
|
|
528
|
+
toggleWrap(editor!, '`');
|
|
529
|
+
});
|
|
530
|
+
editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.Shift | monaco.KeyCode.KeyX, () => {
|
|
531
|
+
toggleWrap(editor!, '~~');
|
|
532
|
+
});
|
|
533
|
+
editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyK, () => {
|
|
534
|
+
const selection = editor!.getSelection();
|
|
535
|
+
if (!selection) return;
|
|
536
|
+
const text = model?.getValueInRange(selection) || '';
|
|
537
|
+
const escaped = escapeMarkdownLinkText(text);
|
|
538
|
+
const markdownLink = `[${escaped}](url)`;
|
|
539
|
+
editor!.executeEdits('insert-link', [{ range: selection, text: markdownLink, forceMoveMarkers: true }]);
|
|
540
|
+
});
|
|
460
541
|
debug('Monaco editor created', {
|
|
461
542
|
hasUploadPluginInstanceId: Boolean(props.meta?.uploadPluginInstanceId),
|
|
462
543
|
});
|