随机漫游文档加入渐进的想法实现

本贴最后更新于 829 天前,其中的信息可能已经事过景迁

前文:添加顶栏按钮,随机打开文档(随机漫游) - 链滴 (ld246.com)

增加了个后台文件存储已查看的文档 id,初步条件是 7 天内不会刷到重复的文档,我想法是基于随机文档,通过 dn 进一步将文档简练和记忆使用,实现较粗糙,慢慢优化吧

使用该代码块,需要先创建 /data/assets/extConfig/randomList.json 文件,初始文件内容 [] 即可

// 请求函数 function request(url, data = null, method = "POST") { return new Promise((resolve, reject) => { if (method.toUpperCase() == "POST") { fetch(url, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(data), }) .then( (data) => resolve(data.json()), (error) => { reject(error); } ) .catch((err) => { console.error("请求失败:", err); }); } }); } function 获取数组里指定元素(id, arr) { for (let r in arr) { // console.log(12111,r,arr[r]) if (arr[r].id == id) { return arr[r]; } } } // 打开随机文档,编辑sql选定范围 async function randomNote() { let sql = "select distinct root_id from blocks where type='d' and path like '/20211209181026-i3s9wiq%' and fcontent not in ('2021','2022','2023','01','02','03','04','05','06','07','08','09','10','11','12','收集箱【inbox】','Index') order by random()"; // 查出SQL结果 let queryRes = await request("/api/query/sql", { stmt: sql }); // 获取当天日期 let nowDate = new Date(); let today =nowDate.getFullYear() +"-" +(nowDate.getMonth() + 1) +"-" +nowDate.getDate(); let 所有待查看id = []; if (queryRes) { // let index = Math.floor(Math.random() * queryRes.data.length); // console.log(0,queryRes.data[0].root_id) for (let r in queryRes.data) { // console.log(r) 所有待查看id.push(queryRes.data[r].root_id); } console.log(所有待查看id); // window.open("siyuan://blocks/" + res.data[index].root_id); } // 获取已查看ID let 已查看数据 = await fetch(`/assets/extConfig/randomList.json`) .then(async (res) => { if (res.status == 404) { alert("需创建/assets/extConfig/randomList.json文件"); } else { return await res.json(); } }) .then(async (e) => { return e; }); // 1. 查出的列表为随机排序的所有id,对比已查看的,无则在已查看里新增ID和日期 // 2. 如果有,判断时间值,暂定,如果在7天以上的,还是打开 let 所有已查看id = 已查看数据.map((e) => { return e.id; }); // console.log("所有已查看id", 所有已查看id, 所有已查看id.indexOf("111") == -1); for (let index in 所有待查看id) { let 待查看id = 所有待查看id[index] if (所有已查看id.indexOf(待查看id) == -1) { // =-1表示不包含 // 打开文档,添加id 已查看数据.push({ id: 待查看id, rq: today }); window.open("siyuan://blocks/" + 待查看id); break; } else if ( (new Date(today) -new Date(获取数组里指定元素(待查看id, 已查看数据).rq)) /(1000 * 60 * 60 * 24) >=7 ) { // 打开文档,修改id for (let r in 已查看数据) { if (已查看数据[r].id == 待查看id) { 已查看数据[r].rq = today; } } window.open("siyuan://blocks/" + 待查看id); break; } } console.log("修改过后", 已查看数据); // 将已查看数据写入到文件中 let saveDataBlob = new Blob([JSON.stringify(已查看数据),],{ type: "application/json" }); let 数据文件 = new File([saveDataBlob], "randomList.json", {lastModified: Date.now(),}); let data = new FormData(); data.append("path", "/data/assets/extConfig/randomList.json"); data.append("file", 数据文件); // let filepath = "" await fetch("/api/file/putFile", { body: data, method: "POST", headers: { }, }).then(function (response) { console.log(response); return response.json(); }); } // 添加一个按钮 const barMode = document.getElementById("barMode"); barMode.insertAdjacentHTML( "beforebegin", '<div id="randomNotes" class="toolbar__item b3-tooltips b3-tooltips__se" aria-label="随机漫游" ></div>' ); const randomNotesBtn = document.getElementById("randomNotes"); randomNotesBtn.style.width = "auto"; const randomNotesIcon = `<svg t="1674130669751" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4526" width="200" height="200"><path d="M928 160H96a32 32 0 0 0-32 32v672a32 32 0 0 0 32 32h832a32 32 0 0 0 32-32V192a32 32 0 0 0-32-32z m-32 672H128V224h768v608z" p-id="4527" fill="#9aa0a6"></path><path d="M230.592 448.096H544a32 32 0 1 0 0-64H230.592a32 32 0 0 0 0 64zM230.592 640.096H544a32 32 0 1 0 0-64H230.592a32 32 0 1 0 0 64zM768 704a32 32 0 0 0 32-32V350.016a32 32 0 1 0-64 0V672a32 32 0 0 0 32 32z" p-id="4528" fill="#9aa0a6"></path></svg>`; randomNotesBtn.innerHTML = randomNotesIcon; randomNotesBtn.addEventListener( "click", (e) => { randomNote(); e.stopPropagation(); e.preventDefault(); //input data // var cardData={id:'1'}, // grade=-1,//Grade `-1` means learn new card,and `0, 1, 2` means review old card (0:forget 1:remember 2:grasp). // globalData=null; // var outputData = fsrs(cardData,grade,globalData)//Return {cardData,globalData}. You can save this output data and use it as input data the next time you update grade. // console.log(outputData) }, true );
  • 思源笔记

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

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

    25453 引用 • 105286 回帖

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 85 关注
  • C++

    C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。

    107 引用 • 153 回帖
  • Notion

    Notion - The all-in-one workspace for your notes, tasks, wikis, and databases.

    10 引用 • 77 回帖
  • SMTP

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。

    4 引用 • 18 回帖 • 636 关注
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    315 引用 • 547 回帖 • 1 关注
  • InfluxDB

    InfluxDB 是一个开源的没有外部依赖的时间序列数据库。适用于记录度量,事件及实时分析。

    2 引用 • 91 关注
  • 职场

    找到自己的位置,萌新烦恼少。

    127 引用 • 1708 回帖 • 1 关注
  • VirtualBox

    VirtualBox 是一款开源虚拟机软件,最早由德国 Innotek 公司开发,由 Sun Microsystems 公司出品的软件,使用 Qt 编写,在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox。

    10 引用 • 2 回帖 • 17 关注
  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 158 关注
  • 星云链

    星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网

    3 引用 • 16 回帖
  • 周末

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

    14 引用 • 297 回帖
  • AWS
    11 引用 • 28 回帖 • 8 关注
  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    730 引用 • 1280 回帖
  • FreeMarker

    FreeMarker 是一款好用且功能强大的 Java 模版引擎。

    23 引用 • 20 回帖 • 467 关注
  • Vim

    Vim 是类 UNIX 系统文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff)、语法高亮、全面的帮助系统、本地脚本(Vimscript)和便于选择的可视化模式。

    29 引用 • 66 回帖 • 1 关注
  • 反馈

    Communication channel for makers and users.

    121 引用 • 907 回帖 • 274 关注
  • 阿里云

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

    84 引用 • 324 回帖
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3201 引用 • 8216 回帖 • 1 关注
  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    70 引用 • 193 回帖 • 413 关注
  • Windows

    Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

    227 引用 • 476 回帖
  • CongSec

    本标签主要用于分享网络空间安全专业的学习笔记

    1 引用 • 1 回帖 • 31 关注
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 399 关注
  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 30 关注
  • RabbitMQ

    RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种语言客户端,如:Python、Ruby、.NET、Java、C、PHP、ActionScript 等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

    49 引用 • 60 回帖 • 344 关注
  • Outlook
    1 引用 • 5 回帖 • 3 关注
  • gRpc
    11 引用 • 9 回帖 • 90 关注
  • OnlyOffice
    4 引用 • 23 关注