neatreader_web_directory_export_mdfile

使用[NeatReader]网页版读书时,点击键盘字母D下载名为[书名.md]的文件,该文件内容为带有缩进层级和选项框的目录,便于标记书籍已读。

  1. // ==UserScript==
  2. // @name neatreader_web_directory_export_mdfile
  3. // @license MIT
  4. // @namespace jarzhen@163.com
  5. // @version 1.5
  6. // @description 使用[NeatReader]网页版读书时,点击键盘字母D下载名为[书名.md]的文件,该文件内容为带有缩进层级和选项框的目录,便于标记书籍已读。
  7. // @author jiazhen
  8. // @require https://cdn.jsdelivr.net/npm/jquery@3.4.1/dist/jquery.min.js
  9. // @match https://www.neat-reader.cn/webapp*
  10. // @match https://neat-reader.cn/webapp*
  11. // @icon https://www.google.com/s2/favicons?domain=tampermonkey.net
  12. // @grant none
  13. // ==/UserScript==
  14.  
  15. (function() {
  16. 'use strict';
  17. var jq = jQuery.noConflict();
  18. function prepare(){
  19. var importJs=document.createElement('script'); //在页面新建一个script标签
  20. importJs.setAttribute("type","text/javascript"); //给script标签增加type属性
  21. importJs.setAttribute("src", 'https://cdn.jsdelivr.net/npm/jquery@3.4.1');
  22. var title_list = [];
  23. //书名
  24. var book = jq("title").html();
  25. //目录
  26. jq("div.book-catalog div").each(function(){
  27. var title = {};
  28. title.retract = parseInt(jq(this).attr("class").split(" ")[0].substr("nav-level-".length));
  29. title.name = jq(this).attr("data-label");
  30. title_list.push(title);
  31. });
  32. //生成json
  33. //console.log(JSON.stringify(title_list));
  34. //生成markdown格式文本
  35. var md_text = "";
  36. title_list.forEach((item,index,array)=>{
  37. var i = 0;
  38. for(var d in item) {
  39. //debugger;
  40. if(i==0){
  41. md_text+=" ".repeat(item[d]-1)+"- [ ] ";
  42. }else{
  43. md_text+=item[d];
  44. }
  45. i++;
  46. }
  47. if(index < array.length-1){
  48. md_text+="\r\n";
  49. }
  50. });
  51. //写入文件
  52. download(book+".md",md_text);
  53. }
  54. function download(filename, text) {
  55. var element = document.createElement('a');
  56. element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
  57. element.setAttribute('download', filename);
  58. element.style.display = 'none';
  59. document.body.appendChild(element);
  60. element.click();
  61. document.body.removeChild(element);
  62. }
  63. //绑定键盘字母D点击事件
  64. jq(document).keyup(function(e){
  65. switch(e.keyCode) {
  66. case 68:
  67. prepare();
  68. return;
  69. }
  70. });
  71. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址