-
请问最近哪个历史版本稳定一点?
2024-12-24 15:35确实,不可回避的是思源版本更新常常会令人担忧。建议发布版本可分成大版本和小版本。
大版本打造稳定性,一般没有大的问题,更新频率可长些,半年甚至一年都行。适合新手,追求稳定,不爱折腾的用户。
小版本快速迭代,可能会存在一些不稳定因素。适合喜欢尝鲜,爱折腾,有一定使用经验的资深用户。
@88250 @JeffreyChen 觉得这个建议可行?
-
[js] 改进型 - 隐藏图片或者任意块
2024-12-24 14:10隐藏状态不能保存,也就是下一次打开所有块又是显现状态
保存的话,调用下这个 api 更新下块就行了,图片的话可以用 closest 获取最近的块进行更新即可,块内容就是块元素的 outerHTML
* /api/block/updateBlock * 参数 { "dataType": "dom", "data": "", "id": "20211230161520-querkps" }
dataType
:待更新数据类型,值可选择markdown
或者dom
data
:待更新的数据id
:待更新块的 ID
另外,原代码修复了列表块下禁用编辑失效的问题。
-
喧嚣插件 - 访问控制功能
2024-12-24 11:59我写了个 js,按 ctrl/meta + alt + b 可以让选中的图片或块模糊(再次按键可恢复),不过这个模糊是临时的,不会保存
注意,单选可点击下图片或块标即可
参数:
// 模糊样式
const filter = 'blur(6px)';
// 模糊期间块是否可编辑,默认禁止编辑,如果设为 true,块编辑后会导致模糊效果被保存,如果你刚好需要这种效果,可以把这个值设为 true
const editableOnBlur = false;不过,如果位置固定,可在录制时,使用截图工具的图片悬浮功能覆盖原位置,截图后使用截图工具的模糊效果模糊一下,再录制也可以。
更进一步,可以用一个悬浮的透明 div,然后这个 div 可拖动大小,然后根据这个 div 覆盖的范围,把这个范围内的元素都模糊。
核心代码如下,有兴趣的朋友可以进一步完善。
function getElementsInRange(startX, startY, endX, endY) { const elementsSet = new Set(); // 用于存储所有元素 // 遍历范围内的每个坐标点 for (let x = startX; x <= endX; x++) { for (let y = startY; y <= endY; y++) { // 获取该坐标点的所有元素 const elements = document.elementsFromPoint(x, y); // 将元素添加到 Set 中(自动去重) elements.forEach(element => elementsSet.add(element)); } } // 将 Set 转换为数组并返回 return Array.from(elementsSet); } // 示例:获取左上角 (100, 100) 到右下角 (200, 200) 范围内的所有元素 const elementsInRange = getElementsInRange(100, 100, 200, 200); console.log(elementsInRange);
-
如何通过 api 插入视频块
2024-12-23 23:29可以的,可能哪里 html 不对,你直接复制 outerHTML 是可以的或者 Lute.New().Md2BlockDOM()转换下再试
不过 Markdown 最方便简单
-
[js] 思源左侧空白区域显示心灵毒鸡汤或倒计时和顶部显示天气
2024-12-23 22:15已更新,新增顶部显示今日天气
参数 const showWeather = true; 可控制是否显示。
-
思源手机端有开发者模式吗
2024-12-23 15:15- 手机开启伺服模式,在电脑上用 devtools 移动端模拟器调试(推荐)
- https://github.com/Tencent/vConsole 或 国内访问 https://gitee.com/Tencent/vConsole
- 如果是 webview 本身的问题,可以用自带浏览器调试,可参考 https://juejin.cn/post/6844903656895021063
vConsole 预览
-
SQL 求教 - 在路径内、列表内随机索引单个任务项
2024-12-22 21:18@8V9q7V 更新了小 bug,就是当任务添加了样式时,筛选任务状态失效问题。
你重新更新下代码。
也顺便在注释里加了提醒
-- 这里可以修改任务状态 👇,注意[X]中的 X 必须是大写,[ ]中有个英文空格,可以复制这注释里的
AND markdown like '%* [ ] %' || TRIM(fcontent) || '%'
-
SQL 求教 - 在路径内、列表内随机索引单个任务项
2024-12-22 20:47好的,编辑好了,你再看看。
AND type = 'i'
和AND subtype = 't'
不能去掉,这是判断任务项的,去掉就判断不了了。你可以加上注释,标上 emoji 方便快速找到需要修改的地方
-
SQL 求教 - 在路径内、列表内随机索引单个任务项
2024-12-22 20:11哦哦,如果需要筛选
[x]
和[ ]
状态可以按照下面的方式添加到条件里即可。
添加到这两个条件后面就行
WHERE type = 'i'
AND subtype = 't'比如
select * from blocks -- (其他SQL) WHERE type = 'i' AND subtype = 't' -- 匹配已选中的 AND markdown like '* [X]%' -- 匹配未选中的 AND markdown like '* [ ]%' -- 以上SQL一般没有问题,仅匹配第一个任务,能有效避免误选子任务 -- 如果有问题,也可以用下面的方式,更安全,但稍麻烦 -- 匹配已选中的,注意[X]中的X必须是大写,[ ]中有个英文空格 AND markdown like '%* [X] %' || TRIM(fcontent) || '%' -- 匹配未选中的,注意[X]中的X必须是大写,[ ]中有个英文空格 AND markdown like '%* [ ] %' || TRIM(fcontent) || '%' ORDER BY RANDOM() LIMIT 1;
-
SQL 求教 - 在路径内、列表内随机索引单个任务项
2024-12-22 19:18如果仅用 SQL 实现的话,主要带有子任务的父任务不好处理。
我这里通过取巧的方式实现了仅 SQL 查询,需要一段 css 配合一下,原理就是把指定 SQL 的子任务给隐藏起来。
SQL1:在路径内随机索引单个任务项
-- random-task-hpath 这里的注释不要删除且必须再第一行且必须--开头且不能有空格 SELECT * FROM blocks WHERE ( -- 👇这里可以添加更多路径,可在目录右键复制可读路径获取 hpath like '%/daily note/2024/12/111%' OR hpath like '%/daily note/2024/12/111%' ) AND type = 'i' AND subtype = 't' -- 这里可以修改任务状态👇,注意[X]中的X必须是大写,[ ]中有个英文空格,可以复制这注释里的 -- AND markdown like '%* [ ] %' || TRIM(fcontent) || '%' AND markdown like '%* [ ] %' ORDER BY RANDOM() LIMIT 1;
SQL2:在列表内随机索引单个任务项
-- radmom-task-list 这里的注释不要删除且必须再第一行且必须--开头且不能有空格 WITH RECURSIVE Descendants AS ( -- 非递归部分,这是起始查询,选择指定id的初始记录 SELECT * FROM blocks WHERE id in( -- 👇这里可以添加更多列表id '20241222170944-o65g6ol', '20241222170955-k3mt4vd' ) UNION ALL -- 递归部分,将子记录不断加入结果集 SELECT b.* FROM blocks b JOIN Descendants d ON b.parent_id = d.id ) SELECT * FROM Descendants WHERE type = 'i' AND subtype = 't' -- 这里可以修改任务状态👇,注意[X]中的X必须是大写,[ ]中有个英文空格,可以复制这注释里的 -- AND markdown like '%* [ ] %' || TRIM(fcontent) || '%' AND markdown like '%* [ ] %' ORDER BY RANDOM() LIMIT 1;
css 代码:
/* 隐藏指定SQL的嵌入块中的子任务 */ [data-type="NodeBlockQueryEmbed"][data-content^="-- random-task-hpath"], [data-type="NodeBlockQueryEmbed"][data-content^="-- radmom-task-list"]{ [data-subtype="t"]:not([data-marker="*"]) { display:none; } }
说明:SQL 前面的
-- random-task-hpath
和-- radmom-task-list
注释不要删除,这是 css 定位元素的标志。不知是否是你想要的需求,我简单测试了下没发现问题,不知是否存在潜在问题,如果有问题可以随时反馈。
效果:
-
思源笔记内嵌 sql 查询文档求助
2024-12-22 12:25-
不清楚你的问题,已经限制了 type='d'了,是不可能查出块文本的,不清楚你那边具体怎么回事
会把好多不想关的文档加载出来,就是标签不含指定标签的
不含指定标签,这个是因为你之前的帖子中没有指出要查指定标签,没加指定标签条件,把原文中的指定标签条件加上就好了。
-
row['块内容'] = toRef(renderMarkdown(row['markdown']), row['id']);
改成row['块内容'] = row['markdown'].match(/!\[.*?\]\(https?:\/\/[^\)]*\)/ig)?.join(' ')||'';
这样,只会提取 Markdown 中的图片源码,以文本显示。如果要渲染图片再加上 renderMarkdown 即可。
-
-
[js] 高亮选中文本和快捷键搜索下一个关键词
2024-12-22 10:35这是因为暗色主题下,选中文本的颜色变成白色了,而选中文本的背景色与高亮文本的背景色叠加后的颜色导致文本颜色看不清。
改下选中文本的颜色就行了,不要让它变为白色。
/* 选中文本的颜色 */ ::selection{ color: rgb(0,0,0); }
已在源码中增加了这个代码,重新复制源码或自己手动添加都行。
-
全局搜索时怎么排除某一文档
2024-12-21 22:14用 SQL 查询方式可以,如图
如果仅排除某一文档,可以用 id!=''排除,例如
select * from blocks where content like '%siyuan%' and id != '待排除文档的id' order by updated desc;
-
思源笔记内嵌 sql 查询文档求助
2024-12-21 16:26只显示文档块,不想显示内容块里包含标签的
这个只需要修改 SQL 即可
// sql查询语句 const sql = ` SELECT * FROM blocks where type = 'd' -- 排除文档头部有标签的 -- and tag = '' -- 排除文档块中有标签的 and id not in ( SELECT root_id FROM blocks where type <> 'd' and tag <> '' ) ORDER BY created desc; `;
第二个问题,我想查询所有图片链接是 http 开头的块(即网络图片)
这个,由于你要显示的是块,稍微麻烦点,需要把 SQL 和 render 调用都改下
// sql查询语句 const sql = `SELECT * FROM blocks WHERE type not in ('c', 'query_embed') and markdown like '%%' ORDER BY created desc;`; // 查询数据 const result = await query(sql); // 渲染结果,这里第二个参数是指定显示的字段,按你指定的顺序显示 render(result, ['块内容', '创建时间'], ({row, index, options, toRef, formatDate, renderMarkdown})=>{ // 渲染前回调,这里可以进行一些数据格式化 row['块内容'] = toRef(renderMarkdown(row['markdown']), row['id']); row['创建时间'] = formatDate(row['created']); });
效果
-
[js] 思源左侧空白区域显示心灵毒鸡汤或倒计时和顶部显示天气
2024-12-20 23:05这个调用的第三方 API,😄,我 gitee 里还有个毒鸡汤文本,感觉比这个 API.写的好。你也可以找找好的 API 改改
-
请问现在有办法在不删除某个笔记本的情况下,快速取消里面的多张闪卡制卡吗?
2024-12-20 18:02多制卡几次即可,仅适用于单个文档,如图
如果你指的笔记本或是某个目录下的所有就没办法了,之能按你说的或自己写代码实现了。
-
如何思源伺服到公网,通过 IP 或者域名鉴权后打开?
2024-12-20 16:54节点小宝 https://www.iepose.com ,可以满足你的需求,自带二级域名,不需要自己搭建服务器。
-
思源笔记如何通过 github 或者其他方式下载插件呢?
2024-12-20 14:50到这里访问插件列表 https://github.com/siyuan-note/bazaar/blob/main/stage/plugins.json
搜到后,去作者 github 下载后复制到插件目录即可,注意,目录名要参考 plugin.json 中的 name 命名,不然可能无法加载插件。
模板列表 https://github.com/siyuan-note/bazaar/blob/main/stage/templates.json
把 package.zip 包解压后放到 data/templates 目录即可。挂件列表 https://github.com/siyuan-note/bazaar/blob/main/stage/widgets.json 挂件目录要参考 widget.json 命名
主题列表 https://github.com/siyuan-note/bazaar/blob/main/stage/themes.json
主题需放到 conf/appearance/themes 目录。其他类似,不一一列举了。
-
[js] 思源笔记左侧空白部分显示自定义文字
2024-12-19 23:49放到 selectionchange 事件中就行。
注意, 此贴仅针对你目前的问题回复,并未解决你代码中的可能的 bug 等问题,因此这可能不是一个完善的可用的代码,请根据自己需求自行调试修改。
// 获取目标元素 var targetElement = document.querySelector('div.fn__flex-1.dock__item--space'); targetElement.textContent = '显示上一级标题'; // 光标被位置变动事件 document.addEventListener("selectionchange", () => { // 选择所有的面包屑项 var breadcrumbBar = document.querySelector('.protyle-breadcrumb__bar'); var breadcrumbItems = breadcrumbBar.querySelectorAll('.protyle-breadcrumb__item'); // 确保至少有两个面包屑项 if (breadcrumbItems.length > 1) { // 获取倒数第二个面包屑项的标题 var secondLastBreadcrumbTitle = breadcrumbItems[breadcrumbItems.length - 2]?.querySelector('.protyle-breadcrumb__text')?.getAttribute('title'); console.log("🟩", secondLastBreadcrumbTitle); // 更新 targetElement 的文本内容 targetElement.textContent = secondLastBreadcrumbTitle; } else { targetElement.textContent = '没有足够的面包屑项来获取倒数第二个标题'; console.log("没有足够的面包屑项来获取倒数第二个标题。"); } }, false);
-
为什么已买 64 元永久会员还提醒不订阅会删除数据?
2024-12-19 14:13 -
思源数据库不应该隐藏底部「计算(求和等)」的 UI
2024-12-19 13:55一直显示也可以,一行代码的事
.av__row--footer .av__calc,.av__row--footer.av__row--show .av__calc { opacity: 1 }