This commit is contained in:
insile 2025-06-06 22:20:12 +08:00
parent 357bba6fdb
commit 3275799f4f
7 changed files with 12 additions and 13 deletions

View file

@ -1,6 +1,6 @@
# OpenWords
**OpenWords** 是一个用于背单词和单词管理的与 [OpenText](https://opentext.net.cn) 配套的 Obsidian 插件, 安装后插件入口是左侧工具栏上的一个按钮再加上两个绑定命令, 主要功能有生成索引, 背单词, 默写单词, 添加双链等, 其中单词文件使用 OpenText 中的单词库, 而背单词的核心逻辑是 SuperMemo 2 间隔重复算法. 插件完全依赖单词文件及其属性, 没有表格, Json 等外部存储, 启动时会读取所有单词缓存, 更改时会即时写入相应的单词文件并更新缓存. 插件没有设计过多的搜索功能, 提倡使用 Obsidian 内置的搜索功能. 如果您认为本插件有很大帮助, 欢迎微信赞赏支持. 目前等待 Obsidian Bases 推出后进行功能更新
**OpenWords** 是一个用于背单词和单词管理的 Obsidian 插件, 与 [OpenText](https://opentext.net.cn) 单词库配套设计, 安装后插件入口是左侧工具栏上的一个按钮再加上两个绑定命令, 主要功能有生成索引, 背单词, 默写单词, 添加双链等, 其中单词文件使用 OpenText 中的单词库, 而背单词的核心逻辑是 SuperMemo 2 间隔重复算法. 插件完全依赖单词文件及其属性, 没有外部存储文件没有记录回答历史 (考虑中), 所以不能做一些记忆曲线拟合, 单词调度看起来很简单朴素, 仅依靠上次回答记录. 插件启动时会读取所有单词缓存, 更改时会即时写入相应的单词文件并更新缓存. 插件没有设计过多的搜索功能, 提倡使用 Obsidian 内置的搜索功能. 如果您认为本插件有帮助, 欢迎微信赞赏支持. 目前等待 Obsidian Bases 正式上线后进行功能更新
![p7](README/p7.png)
@ -40,7 +40,7 @@
### 监听同步
单词库是被监听的, 单词文件的属性修改会和插件缓存保持同步, 手动修改和插件修改都会立即同步. 左下角状态栏实时统计当前单词属性的变化 `新词数 + 旧词数 = 作用域词数`, 特别的索引中的复选框也会和单词文件的 `掌握` 属性同步
单词库是被监听的, 单词文件的属性修改会和插件缓存保持同步, 手动修改和插件修改都会立即同步. 左下角状态栏实时统计当前单词属性的变化 `新词数 + 旧词数 + 非作用域单词 = 单词库词数`, 特别的索引中的复选框也会和单词文件的 `掌握` 属性同步
![p1](README/p1.gif)

View file

@ -1,10 +1,10 @@
{
"id": "openwords",
"name": "OpenWords",
"version": "1.0.3",
"version": "1.0.4",
"minAppVersion": "1.8.10",
"description": "用于英语学习中背单词与单词管理的插件",
"author": "insile",
"authorUrl": "https://opentext.net.cn/",
"authorUrl": "https://github.com/insile",
"isDesktopOnly": false
}

4
package-lock.json generated
View file

@ -1,12 +1,12 @@
{
"name": "openwords",
"version": "1.0.3",
"version": "1.0.4",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "openwords",
"version": "1.0.3",
"version": "1.0.4",
"license": "MIT",
"dependencies": {
"dayjs": "^1.11.13",

View file

@ -1,6 +1,6 @@
{
"name": "openwords",
"version": "1.0.3",
"version": "1.0.4",
"description": "用于英语学习中背单词与单词管理的插件",
"main": "main.js",
"scripts": {

View file

@ -1,10 +1,9 @@
import { MarkdownView, Notice, Plugin, TFile, normalizePath } from 'obsidian';
import { MarkdownView, Notice, Plugin, TFile, normalizePath, moment } from 'obsidian';
import { supermemo, SuperMemoGrade } from 'supermemo';
import { OpenWordsSettingTab } from './settings';
import { LearningTypeModal } from './modals/LearningTypeModal';
import { CardInfo } from './card';
import posTagger from 'wink-pos-tagger';
import moment from 'moment';
// 插件设置
@ -42,7 +41,7 @@ export default class OpenWords extends Plugin {
settingsSnapshot: OpenWordsSettings; // 插件设置快照
statusBarItem: HTMLElement; // 状态栏元素
allCards: Map<string, CardInfo> = new Map(); // 存储所有单词的元数据
masterCards: Map<string, CardInfo> = new Map(); // 存储作用域单词的元数据
masterCards: Map<string, CardInfo> = new Map(); // 存储掌握单词的元数据
enabledCards: Map<string, CardInfo> = new Map(); // 存储作用域单词的元数据
newCards: Map<string, CardInfo> = new Map(); // 存储新单词的元数据
dueCards: Map<string, CardInfo> = new Map(); // 存储旧单词的元数据
@ -86,6 +85,7 @@ export default class OpenWords extends Plugin {
this.registerEvent(this.app.vault.on("delete", (file: TFile) => {
if (file.path.endsWith(".md") && file.path.startsWith(this.settings.folderPath)) {
this.allCards.delete(file.basename);
this.masterCards.delete(file.basename);
this.enabledCards.delete(file.basename);
this.newCards.delete(file.basename);
this.dueCards.delete(file.basename);

View file

@ -1,8 +1,7 @@
import { App, Modal, Notice, TFile, Setting, MarkdownRenderer, Component } from 'obsidian';
import { App, Modal, Notice, TFile, Setting, MarkdownRenderer, Component, moment } from 'obsidian';
import { SuperMemoGrade } from 'supermemo';
import { CardInfo } from '../card';
import OpenWords from '../main';
import moment from 'moment';
// 背单词模态框

View file

@ -1,3 +1,3 @@
{
"1.0.3": "1.8.10"
"1.0.4": "1.8.10"
}