-
如何快速将列表块下的列表项块转换为列表块?
2024-10-12 17:40其实没那么麻烦,不需要上下各按两次回车
只需要,选中需要转换的列表项,然后剪切,按两次回车,粘贴即可。
当然,如果想自动化,也可以把这个操作,根据 EmberSky 大佬的方法设置成快捷键,实现一键转换。
-
请教有没有转换块类型的公开 API?
2024-10-12 17:23没有一个 api 可以实现简单的参数传递就能实现一个块转换为另一个块的,因为每种块的格式不同。
需要多个 api 去配合实现,可以通过开发者工具里的网络进行抓包,然后进行想要的操作,看看思源是通过哪些 api 去实现的,然后模仿即可。
- 通过 api 对特定块 id 执行合并、取消超级块的操作
根据网络抓包可知,合并为超级块,则是插入一个超级块,然后删除原来的块来实现的,实际上是一个插入块 api,多个删除块 api;取消超级块则是移动超级块子块,然后删除超级块实现的,实际上是移动多个块 api 和删除一个块 api 来实现的。
- 转换某个块类型为其他块
如楼上所说是通过
updateBlock
来实现的,但要自己组装不同类型的块 dom 数据或者用 Markdown 调用 lute 转换为块 dom。建议先手动输入一个目标块,然后复制目标块 dom,然后填入相应的数据后调用更新块 api 更新即可。总之,没有简单的实现方式,需要多个 api 组合实现。
-
[js] 双击钉住页签
2024-10-12 00:39仅供参考
(()=>{ whenElementExist(".layout__center").then((el)=>{ el.addEventListener('dblclick', (event) => { const tab = event.target?.closest('li[data-type="tab-header"]'); if(!tab) return; const protyle = siyuan.layout.centerLayout.children.map(item=>item.children.find(item=>item.headElement === tab)).find(item=>item); if(tab.classList.contains('item--pin')){ protyle.unpin(); } else { protyle.pin(); } }); }); // 等待元素渲染完成后执行 function whenElementExist(selector) { return new Promise(resolve => { const checkForElement = () => { let element = null; if (typeof selector === 'function') { element = selector(); } else { element = document.querySelector(selector); } if (element) { resolve(element); } else { requestAnimationFrame(checkForElement); } }; checkForElement(); }); } })();
-
[css] 更改有序、无列表的颜色、加粗 -- 来源 Savor 主题
2024-10-11 19:47加上这个试试
.protyle-wysiwyg [data-node-id].li[data-subtype="o"]>.protyle-action, .protyle-wysiwyg [data-node-id].li[data-subtype="o"]>.protyle-action:hover{ color: #007BFF; /* 修改为好看的蓝色 */ font-weight: bold; /* 加粗 */ }
-
不使用超级块怎么合并列表?
2024-10-11 18:25方法 1,拖动下面那个列表最外层块作为上面那个列表的子项,然后 shit+tab 向左缩进即可
方法 2,剪切下面那个列表作为上面那个列表的子项,然后 shit+tab 向左缩进即可
注意:选中子项向左缩进时,光标要停留在子项的第一个项的前面,这样才能全部缩进。
-
关于内容块 <div> 标签拆分及合并问题?
2024-10-11 14:16上面是软回车(shift+enter 实现),不会把文本分割成两个独立的块,即软换行的两个文本在同一个块中。
下面是硬回车(enter 实现),会把文本分割成两个独立的块,即硬换行的两个文本被分割在两个独立的块中。
合并自然是向上删除回车键了,拆分自然是 enter 或 shift+enter 了。
-
是否有必要通过分开“阅读”与“考试”两个刷卡频率不同的工作空间,以避免由于共用复习数据文件导致的闪卡推送频率不当的情况?
2024-10-11 12:13是的,不过目前来看暂时并未移除打算,其实也可以利用文件夹代替卡包功能,筛选里也可以选择文件夹,但文件夹不能把同一个数据添加到多个文件夹里,这点不如卡包方便。
不过,如果楼主想自定义推送频率的话,还是分开两个工作空间更灵活方便,如果仅仅是为了区分不同的复习内容,不需要自定义推送频率,卡包很方便,相当于卡片的分类功能。
如果短期或临时复习内容可以使用卡包,如果长期记忆的话,还是不建议用卡包,正如楼上所说,有可能被移除风险,虽然短期内还没有移除计划。
-
是否有必要通过分开“阅读”与“考试”两个刷卡频率不同的工作空间,以避免由于共用复习数据文件导致的闪卡推送频率不当的情况?
2024-10-11 09:07除了分开不同的工作空间,也可以试试卡包是否满足你的需求。
卡包使用方法
-
先开启卡包
-
右键添加到卡包,然后新建或添加到已存在的卡包
-
在间隔重复界面选择对应的卡包进行复习即可
-
-
嵌入块如何限制高度,实现类似于代码块限高效果
2024-10-10 23:31[data-type="NodeBlockQueryEmbed"] { max-height:300px; overflow:auto; }
另外,链滴搜索确实有问题,经常搜不到,可以尝试用搜索引擎搜索,比如,搜索关键词 site:ld246.com
-
js 代码如何实现根据输入的内容自动给其块加上属性或自定义属性
2024-10-10 12:35监听编辑器输入事件,仅供参考
(()=>{ // 编辑器输入事件 onEditorInput((editor) => { // 获取光标所在元素 const currEl = getCursorElement(); console.log('当前元素', currEl); // 获取当前块 const currBlock = currEl.closest('[data-type]'); console.log('当前块', currBlock); }); // 编辑器输入事件 function onEditorInput(callback) { whenElementExist(isMobile()?'body':'.layout__center').then(async element => { // 等待笔记列表加载完毕 await sleep(40); // 监听编辑器加载事件 observeDomChange(element, async (mutation) => { if (mutation.target.classList?.contains("protyle-wysiwyg")) { console.log(mutation.target); const editor = mutation.target; if(editor && editor.closest){ // 等待编辑器加载完毕 const protyle = editor.closest(".protyle"); if(protyle.dataset.loading !== 'finished'){ await whenElementExist(()=>editor?.closest(".protyle") === 'finished'); } if(!editor.getAttribute('custom-listened')){ editor.setAttribute('custom-listened', true); //console.log('listen editor'); editor.addEventListener('input', ()=>{ //console.log('editor inputed'); callback(editor); }) } } } }); }); } // 获取光标所在元素 function getCursorElement() { const selection = window.getSelection(); if (selection.rangeCount > 0) { const range = selection.getRangeAt(0); // 获取选择范围的起始位置所在的节点 const startContainer = range.startContainer; // 如果起始位置是文本节点,返回其父元素节点 const cursorElement = startContainer.nodeType === Node.TEXT_NODE ? startContainer.parentElement : startContainer; return cursorElement; } return null; } // 观察元素被添加 function observeDomChange(selector, callback) { // 定义一个回调函数,当DOM发生变化时调用 const onChange = function(mutationsList, observer) { for (const mutation of mutationsList) { if (mutation.type === 'childList') { callback(mutation); } } }; // 创建一个观察器实例,并传入回调函数 const observer = new MutationObserver(onChange); // 配置观察选项:指定需要观察哪些变动 const config = { attributes: false, childList: true, subtree: true }; // 获取目标节点 const targetNode = typeof selector === 'string' ? document.querySelector(selector) : selector; // 如果目标节点存在,则开始观察 if (targetNode) { observer.observe(targetNode, config); } // 返回一个函数,用于停止观察 return () => { observer.disconnect(); }; } // 是否手机端 function isMobile() { return !!document.getElementById("sidebar"); } // 延迟执行 function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } // 等待元素渲染完成后执行 function whenElementExist(selector) { return new Promise(resolve => { const checkForElement = () => { let element = null; if (typeof selector === 'function') { element = selector(); } else { element = document.querySelector(selector); } if (element) { resolve(element); } else { requestAnimationFrame(checkForElement); } }; checkForElement(); }); } })();
-
批量导入文档到数据库 0.0.6 版全新发布
2024-10-10 11:32你怎么确定复制的 id 没错?你说下你的 id 是哪个文档的 id? 要想高效解决问题,请详细说明你操作步骤,比如,复制的哪个文档或块 id, 期望获取哪些数据?脚本配置是否改过?改了什么?如果改过,最好附上修改后的脚本。也最好导出出问题的文档上传。这样解决问题才最高效。
-
批量导入文档到数据库 0.0.6 版全新发布
2024-10-09 22:06抱歉,还是不太清楚你的具体需求,根据你的描述,把面包屑写到块属性中,然后在数据库模板列中读取块属性的值?
假设有 A,B,C 三个段落块,导入到数据库 D 中,然后把 A,B,C 的面包屑分别写入到 A,B,C 三个块属性中,然后在数据库 D 中新建模板列 T,然后在 T 中读取 A,B,C 三个块属性中的面包屑的值(怎么读取?)?然后在通过模板列 T 对已导入数据库的块进行排序?
-
[css] 显示钉住文档名并在页签右下角添加一个钉子图标
2024-10-08 21:19我改到了左侧
.layout-tab-bar .item.item--pin .item__text { padding-left: 15px; } /* 添加一个钉子图标 */ #layouts .layout__center div:not(.fn__none) > .layout-tab-bar:not(.layout-tab-bar--readonly) .item--pin::before { content: "📌"; font-size: 0.8em; position: absolute; left: 0; transform: rotate(-45deg); }
-
日记的配置在哪里?
2024-10-08 19:47但目前软件顶部没有形似日历的按钮,“笔记本右键下拉菜单”不知道是指什么
用户指南文档较老了,以实际软件显示效果为准,鼠标可以移动到目录树上看看,这个文档最后更新于 2021 年
但设置里没有“新建日记设置”,以及任何有关日记的设置
日记设置在笔记本上右键,然后选择设置
然后,最下面就是
-
求助思源笔记如何汇总不同文章的类似内容
2024-10-07 12:35SQL 方式实现
select * from blocks where type='d' and id in( select root_id from blocks where markdown like '%失眠原因%' );
-
怎么修改文档树的默认文件夹图标?
2024-10-07 12:28 -
文档树标题显示不全
2024-10-03 18:59可以是可以,是这种效果吗
.b3-list-item__text 里新增
border-bottom: 1px solid var(--b3-theme-background-light);
即可。