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

236 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 bench`parseMarkdown 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.project``consistent-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.