-
使用 HTMLElement 构造 Vditor
2024-11-14 22:51试试这样
new Vditor(document.createElement('div'), { height: '100%', width: '100%', toolbarConfig: { hide: true, } cache:{ enable:false, } })
-
[css] 固定回收站置文档树底部
2024-10-16 17:56利用 electron 或者别的爱啥啥的拉起一个代理服务器,通过它访问思源,我之前用来尝试用户权限啥的,找不到了其实也没啥内容,就是 ws 那里麻烦点
-
[css] 固定回收站置文档树底部
2024-10-15 23:40class FetchInterceptor { constructor() { this.beforeFetchHooks = []; this.afterFetchHooks = []; this.originalFetch = window.fetch; this.setupInterceptor(); } setupInterceptor() { window.fetch = (resource, init) => { // 触发请求前的钩子 this.beforeFetchHooks.forEach(hook => { hook(resource, init); }); // 调用原始的 fetch 方法 return this.originalFetch(resource, init).then(response => { // 触发请求后的钩子 this.afterFetchHooks.forEach(hook => { hook(response); }); return response; }).catch(error => { // 可以在这里处理错误 console.error('Fetch error:', error); throw error; }); }; } // 添加请求前的拦截器 beforeFetch(hook) { this.beforeFetchHooks.push(hook); } // 添加请求后的拦截器 afterFetch(hook) { this.afterFetchHooks.push(hook); } // 移除拦截器 removeInterceptor() { window.fetch = this.originalFetch; } }
-
SACAssetsManager 插件 0.0.18 更新
2024-09-27 16:53做不到,没有那个开发能力也不是主要功能,主要功能还是针对写笔记的,后面的版本会加入 eagleApi 的支持,应该能简单地查看 eagle 里面的文件
-
SACAssetsManager 插件 0.0.18 更新
2024-09-27 16:52我这边能够测试的设备有限,而且暂时也没有加入日志
有问题的话一个是看这里:
和分别看一下主界面和后端的报错
-
希望支持划词翻译或者划词朗读
2024-09-10 14:10用外部软件实现可能比较好,因为划词翻译感觉是一个场景通用的功能,不是很有必要在笔记软件里面实现(除非你有很多自定义的翻译,这样直接的话确实在笔记里面写比较方便)
-
是否可以在搜索当中加入 AI 搜索?
2024-08-10 00:08能否增强 AI 功能支持通过 OLLAMA 调用本地部署的大模型 - leolee 的回帖 - 链滴 (ld246.com)
ollama 的新版有 openAI 兼容的接口的,只是本地用的话直接填就行了
-
是否可以在搜索当中加入 AI 搜索?
2024-08-10 00:04对了这里最大的问题还不是向量要占用很多硬盘,而是它们必须要全部加载到内存里面才能进行相似度查询,我自己这里倒是全都是 64G 内存问题不大。。。。
-
是否可以在搜索当中加入 AI 搜索?
2024-08-10 00:02更进一步要实现图片也能够自然语言搜索的话需要下载的模型和存储的向量也不止一个
另外还得蹲一下 transformerjs 的 GPU 支持,靠 CPU 跑其实还挺慢的
-
是否可以在搜索当中加入 AI 搜索?
2024-08-10 00:00能实现,去年我就整过了,但是要实现块级别的搜索的话,向量存储的大小可能会比笔记本身还要大很多
而且如果要避免将文档内容发送给云端的话需要下载一个生成特征向量用的模型,这个东西也挺大的
-
[js] 代码片段实现代码块最近使用的语言置顶
2024-08-09 23:40/** * 一旦文件发生变化,就触发相应的回调 * 要是想完善一下就弄成跟fs一致吧懒得弄了 */ function watch(path,callback){ let changedFiles = []; let isWalking = false const walkDir = async (currentPath) => { const response = await fetch('/api/file/readDir', { method: 'POST', body: JSON.stringify({ path: currentPath }), }); const json = await response.json(); const stats = json.data; for (const entry of stats) { const fullPath = `${currentPath}/${entry.name}`; if (entry.isDir) { await walkDir(fullPath); } else { if (watchStats[fullPath] && watchStats[fullPath] !== entry.updated) { changedFiles.push(fullPath); } watchStats[fullPath] = entry.updated; } } }; const idleCallBack =async()=>{ if(isWalking)return isWalking = true changedFiles = []; await walkDir(path) if(changedFiles.length>0){ callback(changedFiles) } isWalking = false setTimeout(idleCallBack,1000) } setTimeout(idleCallBack,1000) }