Mananelo/Mangakakalot Bookmarks Export

Writes Mangakakalot or Manganelo Bookmarks (name and visited number) to "manga_bookmarks.txt" on "Export Bookmarks" button click

目前为 2020-05-11 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name Mananelo/Mangakakalot Bookmarks Export
  3. // @namespace http://smoondev.com/
  4. // @version 1.037
  5. // @description Writes Mangakakalot or Manganelo Bookmarks (name and visited number) to "manga_bookmarks.txt" on "Export Bookmarks" button click
  6. // @author Shawn Moon
  7. // @include https://mangakakalot.com/bookmark*
  8. // @include https://manganelo.com/bookmark*
  9. // @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
  10. // @require https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/1.3.8/FileSaver.min.js
  11. // @grant GM_addStyle
  12. // ==/UserScript==
  13.  
  14. GM_addStyle (`
  15. #export_container {
  16. color: #000;
  17. cursor: pointer;
  18. float: right;
  19. margin-right: 10px;
  20. }
  21.  
  22. #export_button:hover {
  23. background-color: #b6e4e3;
  24. color: #000;
  25. cursor: pointer;
  26. }
  27.  
  28. #export_button {
  29. padding: 4px 8px;
  30. border-radius: 5px;
  31. text-decoration: none;
  32. color: #fff;
  33. background-color: #76cdcb;
  34. border: none;
  35. font-weight: 600;
  36. }
  37.  
  38. #temp_data {
  39. position: absolute; top: -9999px;
  40. left: -9999px;
  41. }
  42. `);
  43.  
  44. (function() {
  45. 'use strict';
  46. let pageI, bmTag, bmTitle, lastViewed, btnContainer
  47. if($('.bookmark-item').length > 0) {
  48. // manganelo
  49. pageI = '.group-page a'
  50. bmTag = '.bookmark-item'
  51. bmTitle = '.item-story-name'
  52. lastViewed = '.item-title a'
  53. btnContainer = '.panel-breadcrumb'
  54. } else {
  55. // mangakakalot
  56. pageI = '.group_page a'
  57. bmTag = '.bookmark_item'
  58. bmTitle = '.bookmark_title'
  59. lastViewed = '.bookmark_chap a'
  60. btnContainer = '.breadcrumbs p'
  61. }
  62.  
  63. let domain = window.location.hostname
  64. let pageCount = parseInt($(`${pageI}`).last().text().replace(/\D+/g, ''))
  65.  
  66. const deleteTemp = () => {
  67. // delete temp container
  68. $('#temp_data').remove()
  69. }
  70.  
  71. const saveFile = saveData => {
  72. // save file
  73. const fileData = new Blob([saveData], {type:"application/octet-stream"})
  74. saveAs(fileData, "manga_bookmarks.txt")
  75. }
  76.  
  77. const getBookmarks = () => {
  78. // main function generate file
  79. deleteTemp()
  80.  
  81. $('body').append("<div id='temp_data'>")
  82. let pageSuccess = 0;
  83. let bookmarkedTitles = `===========================\n${domain} Bookmarks\n===========================\n`
  84.  
  85. for(var i = 0; i < pageCount; i++) {
  86. $("#temp_data").append(`<div id='page${i+1}'>`)
  87. $(`#page${i+1}`).load(`https://${domain}/bookmark?page=${i+1} ${bmTag}`, (resp,status,xhr) => {
  88. if(status == "success") { pageSuccess++ }
  89. if(pageSuccess == pageCount) {
  90. let bmItem = $(`#temp_data ${bmTag}`)
  91. for(var j = 0; j < bmItem.length; j++) {
  92. if($(bmItem[j]).find(`${bmTitle}`).text()) {
  93. let last_viewed = $(bmItem[j]).find(`${lastViewed}`),
  94. bookmarked_title = $(bmItem[j]).find(`${bmTitle}`);
  95. if(bookmarked_title.length > 0) {
  96. bookmarkedTitles += $(bmItem[j]).find(`${bmTitle}`).text() + ` || Viewed: ${last_viewed.length > 0 ? last_viewed[0].text : 'Not Found' } \n`
  97. }
  98. }
  99. }
  100.  
  101. saveFile(bookmarkedTitles)
  102. deleteTemp()
  103. }
  104. })
  105. }
  106. }
  107. $(`${btnContainer}`).append("<div id='export_container'><button id='export_button'>Export Bookmarks</button></div>")
  108. $(document).on('click', '#export_button', function() {
  109. getBookmarks()
  110. })
  111. })();