Select All Items for Pocket

在Pocket列表页内的Bulk模式下,添加全选按钮。

  1. // ==UserScript==
  2. // @name Select All Items for Pocket
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.1
  5. // @icon https://cdn3.iconfinder.com/data/icons/social-media-2169/24/social_media_social_media_logo_getpocket-48.png
  6. // @description 在Pocket列表页内的Bulk模式下,添加全选按钮。
  7. // @author KennyLee
  8. // @license AGPL
  9. // @compatible chrome
  10. // @compatible firefox
  11. // @match https://app.getpocket.com/*
  12. // @require https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js
  13. // @grant unsafeWindow
  14. // ==/UserScript==
  15.  
  16. window.jQuery.noConflict();
  17. (function() {
  18. 'use strict';
  19. const $ = window.jQuery,
  20. btnName = 'Select All',
  21. mainContainerSelector = '[role="main"]',
  22. bulkEditBtnSelector = '[aria-label^="Bulk"]',
  23. bulkEditBtnDoneSelector = '[aria-label="Close Bulk Edit"]'
  24. ;
  25.  
  26. let timer = 0;
  27.  
  28. function getBulkEditBtn(){
  29. let $btn = $('button').filter(bulkEditBtnSelector);
  30. return $btn.length > 0 ? $btn : undefined;
  31. }
  32.  
  33. function getBulkEditDoneBtn(){
  34. let $btn = $('button').filter(bulkEditBtnDoneSelector);
  35. return $btn.length > 0 ? $btn : undefined;
  36. }
  37.  
  38. let getMainContainer = function(){
  39. let $e = $('DIV').filter(mainContainerSelector);
  40. return $e.length > 0 ? $e : undefined;
  41. }
  42.  
  43. let getAllUnreadItems = function(){
  44. let $main = getMainContainer();
  45. if(!$main){
  46. console.error('cant find main container');
  47. return undefined;
  48. }
  49. let $articles = $main.children('ARTICLE');
  50. return $articles.length > 0 ? $articles: undefined;
  51. }
  52.  
  53. let selectAllHandler = function(){
  54. let $articles = getAllUnreadItems();
  55. if($articles.length > 0){
  56. let firstElClassValue = $articles.first().attr('class');
  57. console.log(firstElClassValue);
  58. $articles.filter('[class="' + firstElClassValue + '"]').click();
  59. }else {
  60. console.log('cant find any articles');
  61. }
  62. }
  63.  
  64. let addSelectAllBtn = function(container){
  65. if(!container){
  66. console.error('cant find container');
  67. return;
  68. }
  69. let $btn = getBulkEditDoneBtn().clone();
  70. let s = 'Select all items';
  71. $btn.attr({
  72. 'data-tooltip':s,
  73. 'aria-label':s
  74. }).css({
  75. marginLeft: '1rem'
  76. }).text(btnName);
  77. $btn.click(selectAllHandler);
  78. $(container).append($btn);
  79. }
  80.  
  81. function buttonListener(){
  82. let $bulkBtn = getBulkEditBtn();
  83. if($bulkBtn){
  84. console.log('find Bulk button successfully.');
  85.  
  86. $bulkBtn.on('click', function(){
  87. let t = 0;
  88. t = setInterval(function(){
  89. let $btn = getBulkEditDoneBtn();
  90. if($btn){
  91. console.log('find Bulk Edit Done button successfully.');
  92. addSelectAllBtn($btn.parent());
  93.  
  94. $btn.on('click',function(){
  95. addButtonListener();
  96. });
  97.  
  98. clearInterval(t);
  99. }else{
  100. console.log('cant find Bulk Edit Done button, wait for next time.');
  101. }
  102. }, 1000);
  103. });
  104.  
  105. clearInterval(timer);
  106. } else {
  107. console.log('cant find Bulk button, wait for next time.');
  108. }
  109. }
  110.  
  111. function addButtonListener(){
  112. timer = setInterval(buttonListener, 2000);
  113. }
  114.  
  115. addButtonListener();
  116. })();