Files
MetonaEditor/CHANGELOG.md
T
thzxx e5f99aee83 fix: 复查修复 5 处问题 — URL 双重转义/zen 泄漏/高亮环境不一致等
- parser: href/src/alt 改最小属性转义(escapeAttr 会把已实体化的 &
  再转义成 &,导致链接 URL 双重转义错误);新增 URL/alt 防回归测试
- core: _pushHistory 增加 maxLength 兜底截断(exec/Tab/Smart Enter/括号
  自动闭合等程序化路径此前绕过 maxlength 限制)
- core: destroy 时清理 Zen 模式的 document mousemove 监听(此前泄漏)
- highlight: 自写环境无关转义(仅 & < >),修复 Node 环境下字符串高亮
  失效、浏览器与 SSR 输出不一致的问题
- floating-toolbar/context-menu: toggleFloatingToolbar/registerContextMenu
  恢复链式 return this(拆分时丢失)
- plugins: 补齐 3 个硬编码文案的 i18n(regex/shortcuts/imageTooLarge),
  6 种语言同步
- 测试 768 → 780
2026-08-09 09:26:20 +08:00

10 KiB
Raw Blame History

Changelog

All notable changes to MetonaEditor will be documented in this file.

[0.2.5] - 2026-08-09

Fixed

  • npm 发布配置: module / exports.import 不再指向 TS 源码,产物改用标准 .mjs / .cjs 扩展名(此前 "type": "module" 导致 Node 将 .js 产物按 ESM 解析,require() 拿不到任何导出)。
  • XSS 属性注入: 链接/图片的 href/src/alt/title 及代码块 language-* 类与标题属性现经属性级转义(escapeHTML 在浏览器环境不转义双引号,此前的属性拼接存在注入面)。
  • 本地存储串扰: 分隔条比例键改为 metona-editor-divider-${id},多实例互不覆盖。

Added

  • maxLength 生效: 之前仅有类型与默认值,现绑定 textarea maxlength 并对 setValue / insert / replaceAll / replaceAllRegex 截断。
  • zenMode 初始状态: 配置 zenMode: true 启动即进入专注模式(此前仅 toggleZen() 可进入)。
  • 搜索面板大小写 / 全字匹配: matchCase / wholeWord 翻译键此前存在但未实现,现补齐 UI 开关与匹配逻辑(普通与正则模式均支持,中文全字边界感知)。
  • 内置轻量语法高亮: 新模块 src/highlight.ts,零依赖 tokenizer13 种语言,MeEditor.highlight 即插即用,输出 me-hl-* 类。
  • exportPDF: exportTool 新增 editor.exportPDF()(隐藏 iframe + window.print)。
  • imagePaste 尺寸限制: editor.use('imagePaste', { maxSizeKB: 500 }),超限 toast 警告。
  • 性能基准: npm run benchparseMarkdown 1MB ≈ 51mshighlight 200 函数 ≈ 1.2ms)。

Changed

  • core.ts 拆分: 命令、浮动工具栏、右键菜单、大纲 4 组方法拆至独立模块(commands.ts / floating-toolbar.ts / context-menu.ts / outline.ts),core 从 1162 行降至 865 行,API 完全兼容。
  • 插件状态类型收紧: 6 个预设插件的实例状态改用 Symbol 键存储(EditorLike 接口 + pluginState 助手),消灭 (editor as any).__xxx 魔法属性。
  • eslint type-aware: 启用 parserOptions.projectconsistent-type-imports / no-unnecessary-type-assertion 规则,0 errors。
  • CI 并行化: 测试拆分为 parser / core / rest 三个并行 job,另设跨 Node 18/20/24 的 verify jobtypecheck + lint + build)。
  • docs.html / README 补齐: 光标选区 API、浮动工具栏、replaceAll、新事件、内置高亮文档。
  • 版本同步 0.2.4 → 0.2.5,测试 725 → 768。

[0.2.4] - 2026-07-25

Changed

  • Search panel redesigned: Dark-themed glass-morphism design with SVG icons, smooth animation, improved spacing and focus states.
  • README & site install instructions: Complete npm/CDN/ESM/CJS/Browser import examples added.

Fixed

  • CI hang: Removed setInterval polling in floating toolbar; now uses pure event-driven selection detection.
  • Floating toolbar positioning: Corrected coordinate system (viewport→pane-local) for accurate placement near selected text.
  • Floating toolbar toggle button: Now properly disables/enables via toggleFloatingToolbar() API.

[0.2.3] - 2026-07-25

Added

  • German (de) locale: Complete translations for all 60+ UI keys.
  • Floating format toolbar: Auto-shows bold/italic/code/link/strikethrough buttons above text selection.
  • Cursor/selection APIs: getSelectedText(), getCursorPosition(), setCursorPosition(), scrollToLine(), selectLine(), selectAll().
  • Content manipulation APIs: replaceAll(), replaceAllRegex(), lineCount(), getLine().
  • New events: selectionChange and cursorMove emitted for cursor/selection tracking.
  • floatingToolbar config option: Enable/disable floating toolbar (default true).

Changed

  • floatingToolbar added to DEFAULTS and EditorOptions type.
  • 6 locales now: zh-CN, en-US, ja, ko, fr, de.

Fixed

  • onLinkClick type fix: Removed as any cast; properly typed in EditorOptions and DEFAULTS.
  • Version consistency: All files synced to 0.2.3.

[0.2.2] - 2026-07-25

Added

  • French (fr) locale: Complete translations for all 60+ UI keys.
  • Outline scroll tracking: Active heading auto-highlights in outline panel as you scroll.
  • Table auto-format: exec('formatTable') aligns column widths in Markdown tables.
  • Code block title: ```js title=hello.js renders a styled title bar above code blocks.
  • Escaped pipe in tables: \| in table cells no longer splits columns.
  • Custom block token fallback render: Unknown token types now render as <div class="me-block-{type}"> instead of empty string.
  • Gutter incremental update: Line number gutter uses DOM diff instead of full innerHTML replacement.
  • 694 tests (up from 684).

Changed

  • All 6 plugins now use closure-based state — searchReplace, imagePaste, shortcutHelp, fileSystem, autoSave refactored for thread safety.
  • shortcutHelp plugin is now i18n-aware — shortcut descriptions follow the active locale.
  • Context menu labels (Cut/Copy/Paste/Select All) are now i18n-translated across all 5 locales.
  • Warm theme now includes progressBg and closeHoverBg for completeness.
  • Fenced code block regex improved to capture optional info string attributes.

Fixed

  • Plugin this context pollution eliminated for all 6 preset plugins.
  • Context menu labels no longer hardcoded to English.
  • Warm theme missing CSS variable fields restored.

[0.2.1] - 2026-07-25

Added

  • Reference link/image resolution: Full support for [text][ref] and ![alt][ref] syntax with [ref]: url definitions.
  • Right-click context menu: Built-in undo/redo/cut/copy/paste/selectAll with custom item support.
  • RTL (Right-to-Left) CSS support: Full RTL layout for Arabic, Hebrew, Persian and other RTL languages.
  • Japanese (ja) and Korean (ko) locales: Complete translations for all 60+ UI keys.
  • Divider position persistence: Split-view divider ratio saved to localStorage and restored on reload.
  • Regex search support: Toggle regex mode in search panel with .* button.
  • Export HTML with embedded CSS: exportHTML now includes minimal CSS styles for standalone viewing.
  • beforeChange / afterChange lifecycle hooks: Instance and global hooks that fire around content changes.
  • copyAsMarkdown() / copyAsHTML() APIs: Copy editor content to clipboard as Markdown or rich HTML.
  • New test suites: tests/index.test.ts (global API) and tests/styles.test.ts (CSS injection).
  • 684 tests (up from 610), 9 test suites (up from 7).

Changed

  • autoSave plugin refactored: Uses closure-based state per instance instead of this context, preventing state conflicts when the same plugin object is shared across multiple editors.
  • Plugin install() now receives options as second argument for cleaner API.
  • RTL locale detection improved: Now detects RTL by language prefix (e.g., ar-SA → RTL).

Fixed

  • Reference link syntax [text][ref] now correctly resolves to links instead of raw text.
  • Reference image syntax ![alt][ref] no longer produces empty src="".
  • autoSave plugin state isolation when used across multiple editor instances.
  • Footnote definitions no longer incorrectly consumed by reference definition parser.

[0.2.0] - 2026-07-23

Added

  • TypeScript full rewrite: All 12 source modules in TypeScript strict mode with complete type exports.
  • Parser 99% line coverage: Self-built Markdown parser with 14 block-level handlers.
  • parseTokens / renderTokens API: Separate tokenization and rendering for transform pipelines.
  • registerBlockHandler: Extensible block syntax via handler registration.
  • 610 tests: Comprehensive test coverage across 7 suites.
  • Triple emphasis ***text***: Bold+italic combined formatting.
  • Link text inline formatting: Bold, italic, and code within link text.
  • Backslash escape: \*, \_, \\ for literal punctuation.
  • Tab-indented code blocks: Tab or 4-space indented code.

Changed

  • Plugin system v2: Topological sort dependency management, 6 preset plugins.
  • Theme system overhaul: CSS variable-based, instance isolation, external theme following.
  • i18n overhaul: Instance-level locale isolation, plural rules, remote loading.

[0.1.15] - 2026-07-21

Added

  • Parser short and medium-term improvements.
  • Triple emphasis syntax ***bold italic***.
  • Link text inline formatting support.
  • Backslash escape sequences.
  • parseTokens / renderTokens separation API.

[0.1.14] - 2026-07-20

Added

  • Syntax highlighting feature (reverted in 0.1.15).
  • Mermaid.js CDN support in demo page.

[0.1.7] - 2026-07-19

Added

  • Line number gutter with active line highlighting.
  • Smart Enter (list/quote continuation).
  • Bracket auto-close with selection wrapping.
  • Outline panel.

[0.1.6] - 2026-07-18

Added

  • topologicalSort for plugin dependency resolution.
  • validateConfig for plugin configuration validation.
  • editor.unuse() to uninstall plugins.
  • editor.registerShortcut() / unregisterShortcut().
  • editor.toast() notification API.

[0.1.5] - 2026-07-17

Added

  • Instance-level theme context (createInstanceTheme).
  • followExternalTheme / adoptFromParent for external theme following.
  • exportCSSVars / getCSSVariable for theme inspection.
  • applyThemeToElement for scoped theme application.

[0.1.4] - 2026-07-16

Added

  • Setext headings (underlined H1/H2).
  • Nested lists (3+ levels).
  • Indented code blocks (4 spaces / tab).
  • HTML comment passthrough.
  • Entity reference protection.
  • Hard line breaks (2 trailing spaces).
  • Link titles with single quotes.
  • LaTeX math formulas ($inline$ / $$block$$).
  • Footnotes [^id].
  • Definition lists (Term\n: definition).
  • Backtick exact matching (`).
  • Enhanced emoji set (150+).

[0.1.3] - 2026-07-15

Fixed

  • exec custom action support via _customActions.
  • refresh() method for forced re-render.
  • Focus/blur event parameter fixes.

[0.1.2] - 2026-07-14

Added

  • Highlight marker ==text==.
  • Superscript x^2^ and subscript H~2~O.
  • Emoji shortcodes :smile: (100+ emojis).
  • Table column alignment (:---:, ---:).
  • Read-only mode with readOnly config and setReadOnly().

[0.1.0] - 2026-07-10

Added

  • Initial release.
  • Markdown editor with edit/split/preview modes.
  • Self-built parser (CommonMark + GFM).
  • Plugin system with autoSave, exportTool, searchReplace.
  • Theme system (light/dark/auto).
  • i18n (zh-CN/en-US).
  • Toolbar, shortcuts, history stack.