Releases: Tasete/symbol-stripper
Release list
Release 1.0.4
v1.0.4
✨ 设置页重构:恢复自定义Tab分页
-
移除声明式设置API,恢复直接Tab分页UI
- 移除
getSettingDefinitions()/getControlValue()/setControlValue()方法 - 移除
SettingPage/SettingDefinitionItem导入 - 移除
MainSettingPage/PresetsSettingPage/ImportExportSettingPage子类 - 所有Tab分页UI直接在
SymbolStripperSettingTab.display()中渲染 - 点击插件设置直接显示Tab分页界面,无多余跳转层
- 移除
-
Tab分页结构
- 常规:右键菜单、跟随栏、位置九宫格、剔除刷、语言切换
- 预设:使用说明、筛选框、可折叠预设列表、添加按钮
- 导入/导出:JSON导出/导入
✅ 审核合规修复
-
修复 Warning: prefer-create-el
- 导出:
document.createElement('a')→containerEl.createDiv({cls:'sr-hidden'}).createEl('a', {attr:{...}}) - 导入:
document.createElement('input')→containerEl.createDiv({cls:'sr-hidden'}).createEl('input', {type:'file', attr:{...}})
- 导出:
-
修复 Warning: 不安全的any类型
catch(e: any)→catch(e: unknown)+instanceof Error类型守卫
✨ Settings Page Refactor: Restored Custom Tab Navigation
-
Removed declarative settings API, restored direct Tab navigation UI
- Removed
getSettingDefinitions()/getControlValue()/setControlValue()methods - Removed
SettingPage/SettingDefinitionItemimports - Removed
MainSettingPage/PresetsSettingPage/ImportExportSettingPagesubclasses - All Tab navigation UI rendered directly in
SymbolStripperSettingTab.display() - Clicking plugin settings shows Tab interface directly, no extra navigation layer
- Removed
-
Tab structure
- General: context menu, following toolbar, position grid, eraser brush, language
- Presets: usage guide, filter, collapsible preset list, add button
- Import/Export: JSON export/import
✅ Review Compliance Fixes
-
Fixed Warning: prefer-create-el
- Export:
document.createElement('a')→containerEl.createDiv({cls:'sr-hidden'}).createEl('a', {attr:{...}}) - Import:
document.createElement('input')→containerEl.createDiv({cls:'sr-hidden'}).createEl('input', {type:'file', attr:{...}})
- Export:
-
Fixed Warning: unsafe any types
catch(e: any)→catch(e: unknown)+instanceof Errortype guard
Full Changelog: v1.0.3...v1.0.4
Release 1.0.3
v1.0.3
✨ 设置页重构:自定义Tab分页 + 声明式API兼容
-
恢复自定义Tab分页UI
- 使用
MainSettingPage(继承SettingPage)在display()中渲染 Tab 栏 + 内容区域切换 - 三个 Tab 页:常规 / 预设 / 导入导出,点击切换,保留之前的交互体验
- 合并原
PresetsSettingPage、ImportExportSettingPage为MainSettingPage的内部方法
- 使用
-
兼容 Obsidian 1.13.0+ 声明式设置API
getSettingDefinitions()返回单个type: 'page'项,通过page工厂函数创建MainSettingPage- 同时保留
getControlValue()/setControlValue()覆写方法 - 兼顾自定义 Tab UI 与设置搜索功能
✅ Obsidian 审核合规修复
-
修复 Warning: prefer-create-el
- 导出功能:
document.createElement('a')→containerEl.createDiv({cls:'sr-hidden'}).createEl('a', {attr:{...}}) - 导入功能:
document.createElement('input')→containerEl.createDiv({cls:'sr-hidden'}).createEl('input', {type:'file', attr:{...}})
- 导出功能:
-
修复 Warning: 不安全的 any 类型
catch(e: any)→catch(e: unknown)+instanceof Error类型守卫- 错误消息提取:
e.message ?? String(e)→e instanceof Error ? e.message : String(e)
-
移除未使用的导入
- 移除
SettingDefinitionGroup类型导入(不再使用声明式分组)
- 移除
✨ Settings Page Refactor: Custom Tabs + Declarative API Compatibility
-
Restored custom Tab navigation UI
- Implemented
MainSettingPage(extendsSettingPage) rendering Tab bar + content area switching indisplay() - Three tabs: General / Presets / Import-Export, click to switch, preserving the previous interaction experience
- Merged
PresetsSettingPageandImportExportSettingPageintoMainSettingPageinternal methods
- Implemented
-
Compatible with Obsidian 1.13.0+ declarative settings API
getSettingDefinitions()returns a singletype: 'page'item, creatingMainSettingPageviapagefactory function- Retained
getControlValue()/setControlValue()override methods - Balances custom Tab UI with settings search functionality
✅ Obsidian Review Compliance Fixes
-
Fixed Warning: prefer-create-el
- Export:
document.createElement('a')→containerEl.createDiv({cls:'sr-hidden'}).createEl('a', {attr:{...}}) - Import:
document.createElement('input')→containerEl.createDiv({cls:'sr-hidden'}).createEl('input', {type:'file', attr:{...}})
- Export:
-
Fixed Warning: unsafe any types
catch(e: any)→catch(e: unknown)+instanceof Errortype guard- Error message extraction:
e.message ?? String(e)→e instanceof Error ? e.message : String(e)
-
Removed unused imports
- Removed
SettingDefinitionGrouptype import (no longer using declarative groups)
- Removed
Full Changelog: v1.0.2...v1.0.3
Release 1.0.2
v1.0.2
✅ Obsidian 审核合规修复
-
修复 Error: no-static-styles-assignment
scrollContainer.style.overflow直接赋值改用classList.add/remove('sr-scroll-locked')CSS 类控制
-
修复 Error: no-static-style-heading
- 所有
createEl('h2'/'h3')创建的 HTML 标题元素改用new Setting(container).setName(...).setHeading()
- 所有
-
修复 Warning: prefer-create-el
- 导出功能:
document.createElement('a')→document.body.createEl('a', { attr: {...} }) - 导入功能:
document.createElement('input')→document.body.createEl('input', { attr: {...} }) as HTMLInputElement
- 导出功能:
-
修复 Warning: 缺少声明式设置 API
- 新增
getSettingDefinitions()方法,返回 4 个SettingDefinitionGroup(右键菜单、跟随栏、剔除刷、语言) - 新增
getControlValue()/setControlValue()覆写方法,支持嵌套useModes键映射 - 兼容 Obsidian 1.13.0+ 设置搜索功能
- 新增
-
修复 Warning: 不必要的类型断言
- 移除
t()模板字符串参数的冗余as string断言
- 移除
-
修复 Warning: Promise in void 上下文
- 删除按钮的
async事件处理器改为同步回调 +void this.plugin.saveSettings().then(() => doRefresh())
- 删除按钮的
-
修复 Warning: 不安全的 any 类型
catch(e: any)→catch(e: unknown)+instanceof Error类型守卫JSON.parse()结果标注as unknown[],属性访问用as Record<string, unknown>
✅ Obsidian Review Compliance Fixes
-
Fixed Error: no-static-styles-assignment
- Replaced
scrollContainer.style.overflowdirect assignment withclassList.add/remove('sr-scroll-locked')CSS class control
- Replaced
-
Fixed Error: no-static-style-heading
- Replaced all
createEl('h2'/'h3')HTML heading elements withnew Setting(container).setName(...).setHeading()
- Replaced all
-
Fixed Warning: prefer-create-el
- Export:
document.createElement('a')→document.body.createEl('a', { attr: {...} }) - Import:
document.createElement('input')→document.body.createEl('input', { attr: {...} }) as HTMLInputElement
- Export:
-
Fixed Warning: missing declarative settings API
- Added
getSettingDefinitions()method returning 4SettingDefinitionGroupitems (context menu, following toolbar, eraser brush, language) - Added
getControlValue()/setControlValue()overrides supporting nesteduseModeskey mapping - Compatible with Obsidian 1.13.0+ settings search
- Added
-
Fixed Warning: unnecessary type assertion
- Removed redundant
as stringassertion ont()template string arguments
- Removed redundant
-
Fixed Warning: Promise in void context
- Converted
asyncevent handler to sync callback +void this.plugin.saveSettings().then(() => doRefresh())
- Converted
-
Fixed Warning: unsafe any types
catch(e: any)→catch(e: unknown)+instanceof Errortype guard- Annotated
JSON.parse()results asas unknown[], property access viaas Record<string, unknown>
Full Changelog: v1.0.1...v1.0.2
Release 1.0.1
v1.0.1
🐛 Bug 修复
- 修复设置页分页功能在 Obsidian 1.13.0+ 下不显示的问题
- 移除了与自定义 Tab 分页冲突的声明式设置 API(
getSettingDefinitions()),恢复display()作为主渲染方法,确保 General / 预设管理 / 导入导出 三个分页正常显示
- 移除了与自定义 Tab 分页冲突的声明式设置 API(
🔒 安全修复
- 替换 innerHTML 为安全的 DOM API
- 设置页使用说明列表中的
innerHTML改用createEl('strong')+appendText()+createEl('code')组合构建 - 正则语法表中的
innerHTML改用createEl('code', { text })构建 - i18n 翻译键相应拆分为
.label/.desc/.code/.suffix子键
- 设置页使用说明列表中的
🎨 样式优化
- 移除 CSS 中的
!important.sr-guide-subtitle改用.sr-guide p.sr-guide-subtitle提升选择器特异性.sr-hidden/.sr-scroll-locked改用双重类名选择器提升特异性
🛠️ 代码质量
- 修复 TypeScript 类型安全问题
- 消除不必要的类型断言,改用类型守卫模式
- 修复 Promise 误用(async void 回调改为 fire-and-forget 模式)
- 消除
no-unsafe-*相关警告
🐛 Bug Fixes
- Fixed settings page tabs not displaying on Obsidian 1.13.0+
- Removed the declarative settings API (
getSettingDefinitions()) which conflicted with custom tab navigation, restoreddisplay()as the primary render method to ensure General / Presets / Import-Export tabs display correctly
- Removed the declarative settings API (
🔒 Security Fixes
- Replaced innerHTML with safe DOM API
- Guide list items: replaced
innerHTMLwithcreateEl('strong')+appendText()+createEl('code')combination - Regex syntax table: replaced
innerHTMLwithcreateEl('code', { text }) - Split i18n translation keys into
.label/.desc/.code/.suffixsub-keys accordingly
- Guide list items: replaced
🎨 Style Improvements
- Removed
!importantfrom CSS.sr-guide-subtitle: switched to.sr-guide p.sr-guide-subtitlefor higher selector specificity.sr-hidden/.sr-scroll-locked: switched to double-class selectors for higher specificity
🛠️ Code Quality
- Fixed TypeScript type safety issues
- Eliminated unnecessary type assertions, replaced with type guard patterns
- Fixed misused Promises (async void callbacks converted to fire-and-forget pattern)
- Resolved
no-unsafe-*related warnings
Full Changelog: v1.0.0...v1.0.1
Release 1.0.0
Symbol Stripper v1.0.0
首个正式版本发布。
核心功能
- 字符模式 / 正则模式剔除
- 浮动工具栏 + 剔除刷 + 右键菜单 + 命令面板
- 预设自定义管理(增删改查、导入导出)
- 中文 / English 双语支持
安装
详见 README
最低要求
Obsidian ≥ 1.0.0
English
Initial release.
Highlights
- Char mode / Regex mode stripping
- Floating toolbar, eraser brush, context menu & command palette
- Preset management (CRUD, import/export)
- i18n: Chinese & English
Installation
See README
Requirements
Obsidian ≥ 1.0.0
Full Changelog: Initial release
Full Changelog: https://github.com/Tasete/symbol-stripper/commits/v1.0.0