【JavaScript代码片段】模拟信息流视图的 JavaScript 代码片段:同时打开多个文件且流式查看

【JavaScript代码片段】模拟信息流视图的 JavaScript 代码片段:同时打开多个文件且流式查看

这个 JS 命令模拟了 Notion 的数据库的动态视图(Feed View)

截图预览 - 通过【开发工具控制台】直接运行 JavaScript 代码片段的执行结果

视图 - 启用堆叠标签页选项 且 (newLeaf === 'tab') - 通过 【DataviewJS 代码块】引用 JavaScript 代码片段的执行结果

视图 - (newLeaf === 'window') - 通过 【DataviewJS 代码块】引用 JavaScript 代码片段的执行结果

视图 - (newLeaf === 'split') - 通过 【DataviewJS 代码块】引用 JavaScript 代码片段的执行结果

JavaScript 代码片段的内容

async function openFiles(linktextArr, newLeaf){
    for (const linktext of linktextArr){  
        await app.workspace.openLinkText(linktext,null,newLeaf,{active:true});
    } 
}

const fileCount = 8;
const linktextArr = app.vault.getFiles()
    .filter(f=>["md","base","canvas","jpg","jpeg","png","webp","gif","svg"].includes(f.extension))
    .toSorted((a,b)=>-(a.stat.ctime-b.stat.ctime))
    .slice(0,fileCount)
    .map(f=>app.metadataCache.fileToLinktext(f));
const newLeaf = "tab" /* undefined | true | 'tab' | 'split' | 'window' */

openFiles(linktextArr, newLeaf);

使用方法01(通过开发工具控制台直接运行 JavaScript 代码片段)

  • 第一步:打开开发工具的控制台(使用快捷键 Ctrl+Shift+I
  • 第二步:复制如上的 JS 命令,粘贴到控制台,调节配置变量 linktextArrnewLeaf,然后执行

使用方法02(通过 dataviewjs 代码块引用 javascript 代码片段,通过点击按钮执行)

image

async function openFiles(linktextArr, newLeaf){
    for (const linktext of linktextArr){  
        await app.workspace.openLinkText(linktext,null,newLeaf,{active:true});
    } 
}

const files = app.vault.getFiles();

function show01(){
	const fileCount = 8;

	const fileArr = files
	    .filter(f=>["md","base","canvas","jpg","jpeg","png","webp","gif","svg"].includes(f.extension))
	    .toSorted((a,b)=>-(a.stat.ctime-b.stat.ctime))
	    .slice(0,fileCount);
	    
	const linktextArr = fileArr
	    .map(f=>app.metadataCache.fileToLinktext(f));
	const newLeaf = "tab" /* undefined | true | 'tab' | 'split' | 'window' */
	
	const button = document.createElement("button");
	button.innerText = "show01"+" "+"("+fileCount+")";
	button.onclick = ()=>openFiles(linktextArr, newLeaf)
	
	dv.container.appendChild(button);
	dv.table(["link","ext","ctime"],fileArr.map(f=>{
		return [
			"[["+app.metadataCache.fileToLinktext(f)+"]]",
			f.extension!=="md"?f.extension:"",
			dv.func.date(f.stat.ctime+"","x")
		]
	}))
}

show01()

其他使用方法

  1. 通过 button 插件生成的按钮执行
  2. 通过 开发工具 的 运行代码片段 命令执行 (在开发工具使用快捷键组合序列 Ctrl+P, !{{代码片段名}}[Enter])
2 个赞

没看懂,这不是插件吗?
dataviewjs 代码块放到任何一个页面执行都可以?

这是一个 JavaScript 代码片段,可以不依靠任何插件,通过 Obsidian 原生的开发工具控制台直接执行

当然,这个也可以作为 DataviewJS 代码块被执行

用 DataviewJS 代码块执行了,ob 直接 100% cpu占用

重启后,点击 show01,也只是打开了几个文件,没有图中的视图效果

要打开【堆叠标签页】选项




1 个赞