Greasy Fork is available in English.

douban_pc_directory_export_mdfile

使用[豆瓣]电脑版查看目录时,点击绿字目录一行下载名为[书名.md]的文件,该文件内容为带有缩进层级和选项框的目录,便于标记书籍已读。

  1. // ==UserScript==
  2. // @name douban_pc_directory_export_mdfile
  3. // @namespace jarzhen@163.com
  4. // @version 0.2
  5. // @description 使用[豆瓣]电脑版查看目录时,点击绿字目录一行下载名为[书名.md]的文件,该文件内容为带有缩进层级和选项框的目录,便于标记书籍已读。
  6. // @author jiazhen
  7. // @require https://cdn.staticfile.org/jquery/3.4.1/jquery.min.js
  8. // @match https://book.douban.com/subject/*
  9. // @icon https://www.google.com/s2/favicons?domain=tampermonkey.net
  10. // @grant none
  11. // ==/UserScript==
  12. (function() {
  13. 'use strict';
  14. function prepare(){
  15. var title_list = [];
  16. var book = $("#wrapper > h1 > span").html();
  17. var idReg =new RegExp(/\d+/);
  18. var id = idReg.exec(window.location.href)[0];
  19. var arr = $("#dir_"+id+"_full").html().replaceAll(/\n^ +/gm,"").split("<br>");
  20. for(var j = 0; j < arr.length; j++) {
  21. if(arr[j].startsWith("· · · · · ·")){
  22. continue;
  23. }
  24. var title = {};
  25. var patt=/\./g;
  26. if(patt.test(arr[j])){
  27. title.retract = arr[j].match(/\./g).length;
  28. }else{
  29. title.retract = 0;
  30. }
  31. title.name = arr[j];
  32. title_list.push(title);
  33. }
  34. console.log(title_list);
  35. var md_text = "";
  36. title_list.forEach((item,index,array)=>{
  37. md_text+=" ".repeat(item.retract)+"- [ ] "+item.name;
  38. md_text+="\r\n";
  39. //写入文件
  40. });
  41. download(book+".md",md_text);
  42. }
  43.  
  44. function download(filename, text) {
  45. var element = document.createElement('a');
  46. element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
  47. element.setAttribute('download', filename);
  48. element.style.display = 'none';
  49. document.body.appendChild(element);
  50. element.click();
  51. document.body.removeChild(element);
  52. }
  53. //绑定绿字"目录"点击事件
  54. $("#content > div > div.article > div.related_info > h2").on("click", prepare);
  55. })();