思源笔记折腾记录 - 表格式嵌入块

本贴最后更新于 794 天前,其中的信息可能已经时移俗易

嵌入块表格.gif

嵌入块表格 1.gif

表格式嵌入块呢,顾名思义就是把嵌入块渲染成表格的样式。

也就是说呢,就是看起来像一个表格的嵌入块。

或者说是在嵌入块里面的表格。

那么为什么要有表格式嵌入块呢?

因为有用户说有的时候嵌入块显示成表格的样式比较好,那么聪明的你知道为什么有人要把嵌入块显示成表格呢?

我也很好奇这个问题,简单了解了一下就是在有些情况下需要把嵌入块显示成表格,所以就需要有一个表格式嵌入块的功能。

所以表格式嵌入块的情况就是这样了,原理也还比较简单,直接上代码码吧,代码片段有风险,玩脱了别找我麻烦嗷

import { Model } from "./model.js"; import { 重渲染配置表 } from "./replace.js"; setTimeout(渲染所有嵌入块表格, 1000); new Model().all(() => { setTimeout(渲染所有嵌入块表格, 500); }); setInterval(渲染所有嵌入块表格, 5000); async function 渲染所有嵌入块表格() { let 嵌入块列表 = document.querySelectorAll( '[data-type="NodeBlockQueryEmbed"]' ); 嵌入块列表.forEach((嵌入块元素) => { try { 渲染表格(嵌入块元素); } catch (e) { console.error(e); } }); } async function 渲染表格(嵌入块元素) { let sql = 嵌入块元素.getAttribute("data-content"); let id = 嵌入块元素.getAttribute("id"); let 重渲染配置 = await 获取重渲染配置(sql, id); if ( 重渲染配置 && 重渲染配置.sql替换 && 重渲染配置.sql替换 instanceof Function ) { sql = await 重渲染配置.sql替换(sql, id); } if (sql && 重渲染配置) { let 查询结果 = await 获取查询结果(sql); if (查询结果 && 查询结果[0]) { if (校验查询结果为嵌入(查询结果)) { return; } let 表格 = document.createElement("table"); 表格.setAttribute("contenteditable", false); 表格.setAttribute("spellcheck", false); 表格.innerHTML = "<colgroup></colgroup>"; for (let i = 0; i < Object.getOwnPropertyNames(查询结果[0]).length; i++) { 表格.querySelector("colgroup").innerHTML += "<col></col>"; } let 表头 = await 生成表头(查询结果[0], 重渲染配置, sql, id); let 表身 = await 生成表身(查询结果, 重渲染配置, sql, id); 表格.appendChild(表头); 表格.appendChild(表身); 刷新表格(嵌入块元素, 表格); } } } function 获取重渲染配置(sql, id) { let 重渲染配置 = 重渲染配置表.find((item) => { return item.判定函数(sql, id); }); return 重渲染配置; } function 校验查询结果为嵌入(查询结果) { let 字段名列表 = Object.getOwnPropertyNames(查询结果[0]); return ( JSON.stringify(字段名列表) == `["alias","box","content","created","fcontent","hash","hpath","ial","id","length","markdown","memo","name","parent_id","path","root_id","sort","subtype","tag","type","updated"]` ); } async function 刷新表格(嵌入块元素, 表格) { let 插入容器 = 嵌入块元素.querySelector( ".ft__smaller.ft__secondary.b3-form__space--small" ); if (!插入容器) { return; } if (!插入容器.shadowRoot) { 插入容器.attachShadow({ mode: "open" }); } 插入容器.shadowRoot.innerHTML = ""; 插入容器.shadowRoot.innerHTML += ` <link rel="stylesheet" type="text/css" href="/snippets/embedTable/table.css"> </link> `; 插入容器.shadowRoot.appendChild(表格); } async function 获取查询结果(sql) { let data = await fetch("/api/query/sql", { method: "post", body: JSON.stringify({ stmt: sql, }), }); return (await data.json()).data; } async function 生成表头(结果条目, 重渲染配置, sql, id) { let 字段名列表 = Object.getOwnPropertyNames(结果条目); if ( 重渲染配置 && 重渲染配置.字段过滤 && 重渲染配置.字段过滤 instanceof Function ) { 字段名列表 = await 重渲染配置.字段过滤(字段名列表, sql, id); } console.log(字段名列表.length); let 表头元素 = document.createElement("thead"); 表头元素.innerHTML = "<thead><tr></tr></thead>"; for await (let 字段名 of 字段名列表) { if ( 重渲染配置 && 重渲染配置.表头替换 && 重渲染配置.表头替换 instanceof Function ) { 字段名 = await 重渲染配置.表头替换(字段名, sql, id); } 表头元素.querySelector("tr").innerHTML += `<th>${字段名}</th>`; } return 表头元素; } async function 生成表身(查询结果, 重渲染配置, sql, id) { let 表身元素 = document.createElement("tbody"); let 字段名列表 = Object.getOwnPropertyNames(查询结果[0]); if ( 重渲染配置 && 重渲染配置.字段过滤 && 重渲染配置.字段过滤 instanceof Function ) { 字段名列表 = 重渲染配置.字段过滤(字段名列表, sql, id); } for await (let 结果条目 of 查询结果) { 表身元素.appendChild( await 生成行(结果条目, 字段名列表, 重渲染配置, sql, id) ); } return 表身元素; } async function 生成行(结果条目, 字段名列表, 重渲染配置, sql, id) { console.log(字段名列表); let 行元素 = document.createElement("tr"); for await (let 属性名 of 字段名列表) { let 属性值 = 结果条目[属性名]; if ( 重渲染配置 && 重渲染配置.表身替换 && 重渲染配置.表身替换 instanceof Function ) { 属性值 = 重渲染配置.表身替换(属性值, 结果条目, sql, id); } console.log(属性值); 行元素.innerHTML += `<td>${属性值}</td>`; } return 行元素; }

model.js 里面是一个很简单的 websocket 监听,就不放出来了,反正有文件,可以自己看一下。

好了文件包在这里,没有依赖就是一个单纯的代码片段,有能力的筒子还可以分享自己写的 replace.js 玩。

链接:https://pan.baidu.com/s/1lNy8oqviEJIg-3pVVbRXmg?pwd=i477
提取码:i477
--来自百度网盘超级会员 V5 的分享

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    25108 引用 • 103519 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • foolishman83

    下载的文件夹放在哪里才能生效,是不是属于挂件?

推荐标签 标签

  • 周末

    星期六到星期天晚,实行五天工作制后,指每周的最后两天。再过几年可能就是三天了。

    14 引用 • 297 回帖 • 3 关注
  • Access
    1 引用 • 3 回帖 • 2 关注
  • H2

    H2 是一个开源的嵌入式数据库引擎,采用 Java 语言编写,不受平台的限制,同时 H2 提供了一个十分方便的 web 控制台用于操作和管理数据库内容。H2 还提供兼容模式,可以兼容一些主流的数据库,因此采用 H2 作为开发期的数据库非常方便。

    11 引用 • 54 回帖 • 668 关注
  • 友情链接

    确认过眼神后的灵魂连接,站在链在!

    24 引用 • 373 回帖 • 1 关注
  • jsoup

    jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。

    6 引用 • 1 回帖 • 488 关注
  • 资讯

    资讯是用户因为及时地获得它并利用它而能够在相对短的时间内给自己带来价值的信息,资讯有时效性和地域性。

    56 引用 • 85 回帖
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 176 关注
  • SpaceVim

    SpaceVim 是一个社区驱动的模块化 vim/neovim 配置集合,以模块的方式组织管理插件以
    及相关配置,为不同的语言开发量身定制了相关的开发模块,该模块提供代码自动补全,
    语法检查、格式化、调试、REPL 等特性。用户仅需载入相关语言的模块即可得到一个开箱
    即用的 Vim-IDE。

    3 引用 • 31 回帖 • 119 关注
  • WebSocket

    WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。

    48 引用 • 206 回帖 • 295 关注
  • AWS
    11 引用 • 28 回帖 • 13 关注
  • TextBundle

    TextBundle 文件格式旨在应用程序之间交换 Markdown 或 Fountain 之类的纯文本文件时,提供更无缝的用户体验。

    1 引用 • 2 回帖 • 83 关注
  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    286 引用 • 248 回帖 • 2 关注
  • DNSPod

    DNSPod 建立于 2006 年 3 月份,是一款免费智能 DNS 产品。 DNSPod 可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。

    6 引用 • 26 回帖 • 532 关注
  • 阿里云

    阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。

    84 引用 • 324 回帖
  • 京东

    京东是中国最大的自营式电商企业,2015 年第一季度在中国自营式 B2C 电商市场的占有率为 56.3%。2014 年 5 月,京东在美国纳斯达克证券交易所正式挂牌上市(股票代码:JD),是中国第一个成功赴美上市的大型综合型电商平台,与腾讯、百度等中国互联网巨头共同跻身全球前十大互联网公司排行榜。

    14 引用 • 102 回帖 • 316 关注
  • Mobi.css

    Mobi.css is a lightweight, flexible CSS framework that focus on mobile.

    1 引用 • 6 回帖 • 759 关注
  • Rust

    Rust 是一门赋予每个人构建可靠且高效软件能力的语言。Rust 由 Mozilla 开发,最早发布于 2014 年 9 月。

    58 引用 • 22 回帖 • 10 关注
  • 支付宝

    支付宝是全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网上支付/安全支付/手机支付体验,及转账收款/水电煤缴费/信用卡还款/AA 收款等生活服务应用。

    29 引用 • 347 回帖
  • PWL

    组织简介

    用爱发电 (Programming With Love) 是一个以开源精神为核心的民间开源爱好者技术组织,“用爱发电”象征开源与贡献精神,加入组织,代表你将遵守组织的“个人开源爱好者”的各项条款。申请加入:用爱发电组织邀请帖
    用爱发电组织官网:https://programmingwithlove.stackoverflow.wiki/

    用爱发电组织的核心驱动力:

    • 遵守开源守则,体现开源&贡献精神:以分享为目的,拒绝非法牟利。
    • 自我保护:使用适当的 License 保护自己的原创作品。
    • 尊重他人:不以各种理由、各种漏洞进行未经允许的抄袭、散播、洩露;以礼相待,尊重所有对社区做出贡献的开发者;通过他人的分享习得知识,要留下足迹,表示感谢。
    • 热爱编程、热爱学习:加入组织,热爱编程是首当其要的。我们欢迎热爱讨论、分享、提问的朋友,也同样欢迎默默成就的朋友。
    • 倾听:正确并恳切对待、处理问题与建议,及时修复开源项目的 Bug ,及时与反馈者沟通。不抬杠、不无视、不辱骂。
    • 平视:不诋毁、轻视、嘲讽其他开发者,主动提出建议、施以帮助,以和谐为本。只要他人肯努力,你也可能会被昔日小看的人所超越,所以请保持谦虚。
    • 乐观且活跃:你的努力决定了你的高度。不要放弃,多年后回头俯瞰,才会发现自己已经成就往日所仰望的水平。积极地将项目开源,帮助他人学习、改进,自己也会获得相应的提升、成就与成就感。
    1 引用 • 487 回帖 • 2 关注
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    173 引用 • 414 回帖 • 366 关注
  • 链书

    链书(Chainbook)是 B3log 开源社区提供的区块链纸质书交易平台,通过 B3T 实现共享激励与价值链。可将你的闲置书籍上架到链书,我们共同构建这个全新的交易平台,让闲置书籍继续发挥它的价值。

    链书社

    链书目前已经下线,也许以后还有计划重制上线。

    14 引用 • 257 回帖 • 2 关注
  • Kotlin

    Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,由 JetBrains 设计开发并开源。Kotlin 可以编译成 Java 字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。在 Google I/O 2017 中,Google 宣布 Kotlin 成为 Android 官方开发语言。

    19 引用 • 33 回帖 • 79 关注
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 608 关注
  • IBM

    IBM(国际商业机器公司)或万国商业机器公司,简称 IBM(International Business Machines Corporation),总公司在纽约州阿蒙克市。1911 年托马斯·沃森创立于美国,是全球最大的信息技术和业务解决方案公司,拥有全球雇员 30 多万人,业务遍及 160 多个国家和地区。

    17 引用 • 53 回帖 • 146 关注
  • Thymeleaf

    Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。类似 Velocity、 FreeMarker 等,它也可以轻易的与 Spring 等 Web 框架进行集成作为 Web 应用的模板引擎。与其它模板引擎相比,Thymeleaf 最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个 Web 应用。

    11 引用 • 19 回帖 • 388 关注
  • V2Ray
    1 引用 • 15 回帖
  • 反馈

    Communication channel for makers and users.

    126 引用 • 930 回帖 • 272 关注