feat: 完善 Mermaid 配置与预览缩放
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
export const PREVIEW_ZOOM_STORAGE_KEY = "md-to-pdf.preview-zoom.v1";
|
||||
export const DEFAULT_PREVIEW_ZOOM = 100;
|
||||
export const MINIMUM_PREVIEW_ZOOM = 50;
|
||||
export const MAXIMUM_PREVIEW_ZOOM = 400;
|
||||
export const PREVIEW_ZOOM_SLIDER_STEP = 5;
|
||||
|
||||
type PreviewZoomStorage = Pick<Storage, "getItem" | "setItem">;
|
||||
|
||||
export function normalizePreviewZoom(value: number) {
|
||||
if (!Number.isFinite(value)) {
|
||||
return DEFAULT_PREVIEW_ZOOM;
|
||||
}
|
||||
return Math.min(
|
||||
MAXIMUM_PREVIEW_ZOOM,
|
||||
Math.max(MINIMUM_PREVIEW_ZOOM, Math.round(value))
|
||||
);
|
||||
}
|
||||
|
||||
export function parsePreviewZoom(
|
||||
value: string | null,
|
||||
fallback = DEFAULT_PREVIEW_ZOOM
|
||||
) {
|
||||
if (!value?.trim()) {
|
||||
return normalizePreviewZoom(fallback);
|
||||
}
|
||||
const parsed = Number(value);
|
||||
return Number.isFinite(parsed)
|
||||
? normalizePreviewZoom(parsed)
|
||||
: normalizePreviewZoom(fallback);
|
||||
}
|
||||
|
||||
export function loadPreviewZoom(
|
||||
storage: PreviewZoomStorage = window.localStorage
|
||||
) {
|
||||
try {
|
||||
return parsePreviewZoom(storage.getItem(PREVIEW_ZOOM_STORAGE_KEY));
|
||||
} catch {
|
||||
return DEFAULT_PREVIEW_ZOOM;
|
||||
}
|
||||
}
|
||||
|
||||
export function savePreviewZoom(
|
||||
value: number,
|
||||
storage: PreviewZoomStorage = window.localStorage
|
||||
) {
|
||||
try {
|
||||
storage.setItem(
|
||||
PREVIEW_ZOOM_STORAGE_KEY,
|
||||
String(normalizePreviewZoom(value))
|
||||
);
|
||||
} catch {
|
||||
// 预览缩放是非关键偏好,浏览器禁用缓存时保持当前会话值即可。
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user