-
思源笔记油猴脚本 视频时间戳 + 截图
2025-01-07 09:40鼎力支持!
建议优化下 ui,太大占空间,可能遮挡重要信息。
建议支持可在视频全屏下操作,如果好实现的话。
建议支持常见网盘,比如百度网盘等,如果做到多网站支持,这是个力气活,仅供参考。
-
数据库嵌入块如何通过 SQL 语言查询显示特定数据?
2025-01-07 07:01D 大,建议将 alasql 加进来,不仅可以查询数据库(属性视图),还可以实现和 sqlite 联查 https://github.com/agershun/alasql
-
SQL 求助 - 随机索引多个属性
2025-01-06 22:44参考示例
select * from blocks where ial like '%custom-yfyn="1"%' or ial like '%custom-yfyn2="1"%' order by random() limit 3;
-
[js] 有办法在思源导入的 github 的 md 文件中实现内部锚链接跳转吗
2025-01-06 21:55我猜,思源没这么做的原因,可能是思源有时需要动态加载,#链接对动态加载无效,所以思源就躺平了。
不过,我用 js 实现了这个功能,原理是第一次点击时会获取这个文档的所有标题映射,然后根据映射 map 找到对应的标题 id,然后再按照思源原有逻辑跳转。
代码如下
亦可拿到映射直接修改思源锚点地址,这里选择尽量不改变原有文档策略。
-
思源能否在模板中发网络请求爬取数据呢?
2025-01-06 19:40我觉得,爬取数据无非要在模板中执行 js 嘛,可以先设定好模板样式,比如哪些地方显示什么数据,然后可以用嵌入 SQL 块执行 js,然后把获取的结果动态插入到模板具体字段中,然后删除嵌入 sql 块 自身即可,当然,为了用户体验更佳,可以隐藏 SQL 块执行。
如果楼主感兴趣,可参考 日、周、月记录模板分享 - wilsons 的回帖 试试
-
查询当前笔记本下的所有文档,并列出该文档已被加入的数据库,如果没有加入,则为空
2025-01-06 11:35这个 query 挂件不好实现,但简单查询可以,比如
//!js return query(` SELECT '-' as 序号__no_w80_0, content as 标题__ref_1, CASE WHEN ial LIKE '%{: custom-avs="%' THEN '<font color=green>已加入</font>' ELSE '' END AS 是否已加入数据库__2, id as id__hide, ial as ial__hide FROM blocks WHERE type = 'd' AND box = '${protyle.notebookId}' ORDER BY created desc `, item, '', async ({ row, rawRow, toRef }) => { //获取数据列表 const result = await fetchSyncPost("/api/av/getAttributeViewKeys", {id: rawRow.id}); let avs = ''; if (result && result.code === 0 && result.data.length > 0) { avs = result.data.map(av => toRef(av.avName, av.blockIDs[0]||'')).join(''); } row.已加入的数据库列表 = avs; } );
效果
-
[js] 简单查询,让数据从此不再难查,支持显示多字段多视图
2025-01-06 09:23如果是代码片段,可以动态加载 js,然后,用 vscode 编辑 js 文件就可以了
比如代码片段输入
{ // 动态加载js const src = '/snippets/query.js'; const script = document.createElement('script'); script.src = src; document.head.appendChild(script); }
比如这里动态加载 query.js,然后,vscode 里直接编辑 query.js 文件就行了。
注意这里大括号不要删除,这是为了隔离命名空间,防止污染全局变量。
这里为什么没用 import()函数,因为 import 存在跨域问题,如果加载外网 js 可能有问题。
如果是 SQL 嵌入块中的代码,有点麻烦,可以先在待加载的 js 中定义一个函数,然后 SQL 嵌入块中动态加载这个 js 并执行函数,
比如 someQuery.js 中定义一个函数 function someQuery()
比如
someQuery.js
function someQuery(item, protyle) { return query(` SELECT '-' as 序号__no_w80_0, content as 标题__ref_1, CASE WHEN ial LIKE '%{: custom-avs="%' THEN '<font color=green>已加入</font>' ELSE '' END AS 是否加入数据__2, id as id__hide FROM blocks WHERE type = 'd' AND box = '${protyle.notebookId}' ORDER BY created desc LIMIT 3; `, item); }
然后,sql 查询嵌入块中的代码
//!js return (async ()=>{ // 动态加载自己的查询js文件 await loadJs('/snippets/someQuery.js'); return someQuery(item, protyle); // 动态加载js function loadJs(url) { return new Promise((resolve, reject) => { const script = document.createElement('script'); script.src = url; script.type = 'text/javascript'; script.onload = () => { resolve(); }; script.onerror = () => { reject(new Error(`Failed to load script: ${url}`)); }; document.head.appendChild(script); }); } })();
然后,在 vscode 中编辑 someQuery.js 就可以了。
不过,最简单的方式还是在外部编辑器中编辑好后粘贴过来。
-
查询当前笔记本下的所有文档,并列出该文档已被加入的数据库,如果没有加入,则为空
2025-01-06 08:26方法一:使用简单查询 js 实现 (推荐)
- 先把 js 代码添加到思源代码片段中,到这里下载 [js] 简单查询,让数据从此不再难查,支持显示多字段多视图
- 在编辑器中输入 {{}} 然后再弹出的输入框中输入以下 SQL 代码
-
//!js return query(` SELECT '-' as 序号__no_w80_0, content as 标题__ref_1, CASE WHEN ial LIKE '%{: custom-avs="%' THEN '<font color=green>已加入</font>' ELSE '' END AS 是否已加入数据库__2, id as id__hide FROM blocks WHERE type = 'd' AND box = '${protyle.notebookId}' ORDER BY created desc; `, item);
- 说明,此代码会自动获取当前文档所在的当前笔记,且支持更灵活的样式
- 效果
方法二:Query 挂件实现
- 先安装 Query 挂件
- 在编辑器中输入 /挂件 选 Query 挂件,然后在挂件中输入以下 SQL 代码
-
SELECT '[' || content || '](siyuan://blocks/' || id || ')' AS __1____pre__文档标题, CASE WHEN ial LIKE '%{: custom-avs="%' THEN '已加入' ELSE '' END AS __2____pre__是否已加入数据库 FROM blocks WHERE type = 'd' AND box = '20240723175050-336994k' ORDER BY created desc;
- 说明,此挂件不能自从获取当前文档所在的笔记,需要手动复制笔记 id 到 box 字段里
- 效果
PS: 截图字段少了“已”和“库”两个字,正确应该是 是否已加入数据库,代码中已修改,截图就不改了,能理解就行。
另外,注意,思源默认最大只支持查询 64 条记录,需要在 设置-> 搜索-> 搜索结果显示数 里设置下数量或者 SQL 中加 limit,但如果筛选条数过多,可能出现卡顿现象。
-
求助 js 代码,将当前段落块移动到文档最后
2025-01-05 23:51试试这个
参数:
// 移动菜单名称
const moveMenuText = '移动到最后';// 移动到哪个块的后面,如果为空,则移动到文档末尾,通常可以设置一个分割线块,然后移动到该分割线块的后面。该块 ID 可以跨文档移动,比如在 c 文件新建一个分割块,可以把任何文档的块移动到该分隔块下面。
const moveAfterThisBlockId = ''; -
[js] 简单查询,让数据从此不再难查,支持显示多字段多视图
2025-01-05 18:12你是想问的是 insertDatabaseView 怎么使用吗?
目前的代码确实能满足你的需求,但要注意,要自动更新,第四个参数设为 true 即可。
请参照下面的示例
//!js // 使用帮助:https://ld246.com/article/1736035967300 return query( `select * from blocks where type='d' order by created desc limit 3;`, // item, 固定不变,❗️勿动,代表本嵌入块对象 item, '序号,内容,文档类型,路径,创建时间,更新时间', ({ row, index, data, options, insertDatabaseView, ...args }) => { // 查看函数使用手册 https://ld246.com/article/1736035967300#%E5%9B%9E%E8%B0%83%E5%87%BD%E6%95%B0%E4%B8%AD%E5%B8%B8%E7%94%A8%E5%87%BD%E6%95%B0%E8%AF%B4%E6%98%8E return insertDatabaseView(data, '20250105170929-l6yvu26', item, true); } );
结果
另外,建议更新下代码,修改了一些细节问题。
文章中已添加了该教程。
-
SQL 求助 - 在指定路径下查询包含特定属性的块
2025-01-05 07:57SQL1:
select * from blocks where ( hpath like '%/demo1%' and hpath like '%/demo2%' ) and ( ial like '%custom-utqc="1"%' or ial like '%custom-utqc2="1"%' ) order by random() limit 1 ;
SQL2:
select * from blocks where ( hpath not like '%/demo1%' and hpath not like '%/demo2%' ) and ( ial like '%custom-utqc="1"%' or ial like '%custom-utqc2="1"%' ) order by random() limit 1 ;
注意,demo1, demo2, utqc2 是演示数据,可根据自己实际情况修改。
-
SQL 求助:查询所有反链,并排除一些内容
2025-01-05 07:46select * from blocks where id in ( select def_block_id from refs ) and hpath not like '%/demo1%' and hpath not like '%/demo2%' and ial not like '%custom-rcql="1"%' and ial not like '%custom-rcq2="1"%' ;
demo1, demo2, rcq2 是演示数据,可根据实际情况修改
-
小白求助贴:关于 NAS 储存思源笔记同步
2025-01-02 17:20 -
有没有在特定界面才有效的 css
2025-01-01 19:38试试这个
/* 仅手机版生效 */ :has(#sidebar) { /* 非闪卡头部 */ :not(.card__main) > .toolbar { background-color: green!important; } /* 闪卡头部 */ .card__main > .toolbar{ background-color: red!important; } }
-
请问思源如何导入 word 文档并识别出来不同颜色
2025-01-01 00:29没有别的办法,只能试试各种转换工具。
这个贴子试试看 比较完美的 docx (word) 、onenote 转思源笔记方法
如果不行,只能先把 Word 转换为 HTML,然后复制 HTML 代码粘贴到思源的 HTML 代码块中,如图
结果如下
或者也可以自己写 js 解析 HTML,转换为思源支持的格式
-
求助更改菜单按钮位置
2024-12-30 22:35我尝试将给的这段代码复制进去之后,好像没有什么变化
原因,楼主的需求是:移动端里的图片 设置 25% 宽度
所以,仅支持图片右键菜单,不支持其他菜单,虽然楼主说的移动端,但也支持了 PC 端等
如果,支持其他右键菜单,需要修改
observeImagesMenu
函数里的判断。 -
[js] 让思源笔记启动之后最大化显示
2024-12-30 20:37通过这个再单独调新窗口就好了,两个不要混在一起调,相互影响比较麻烦
body:not(:has(#toolbar)) { /* 新窗口css */ }
-
[js] 让思源笔记启动之后最大化显示
2024-12-30 20:21没看具体原因,但可以用这种简单粗暴的方式解决
/* 仅在主窗口有效 */ body:has(#toolbar) { ul.layout-tab-bar { padding: 0 0 0 0.8px; height: auto; flex-wrap: wrap; } ul.layout-tab-bar .item { min-height: 26px; } ul.layout-tab-bar .item[data-type="tab-header"] { border: solid 0.1px var(--b3-list-icon-hover); height: 26px; margin: 0.2px; } ul.layout-tab-bar .item--focus:after { bottom: -1px; } ul.layout-tab-bar .item__text { min-width: 25px; } ul.layout-tab-bar .item--focus>.item__text { font-weight: bold; } .layout__wnd--active .layout-tab-bar .item--focus>.item__text { color: lightseagreen; } .layout__wnd--active:not(:focus-within) .layout-tab-bar .item--focus:after { background-color: grey; /* 失去焦点时变为灰色横条 */ } }
另外,刚才的新窗口缩小到屏幕一半的代码更新了,改善了窗口先打开原窗口大小,然后再缩小到目标大小的尴尬问题,现在可直接打开目标的窗口大小的窗口,无需再缩小一次,但这个改善仅 electron 下有效,不过新窗口貌似也只能在 electron 下打开 😄 。