Greasy Fork is available in English.

Delete Aliyun Old Docker Image

try to take over the world!

  1. // ==UserScript==
  2. // @name Delete Aliyun Old Docker Image
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.2
  5. // @description try to take over the world!
  6. // @author You
  7. // @match https://cr.console.aliyun.com/repository/*/*/*/images
  8. // @grant none
  9. // @license MIT
  10. // ==/UserScript==
  11.  
  12. (function() {
  13. 'use strict';
  14. var retryCheck = function(checkFun,interval,nextFun,times,delay,startTime){
  15. if(!times)times = 1;
  16. else times += 1;
  17. if(!delay)delay = 0;
  18. if(!startTime)startTime = (new Date()).getTime();
  19. setTimeout(function(){
  20. if(checkFun(times)){
  21. if(delay){
  22. var detal = delay - ((new Date()).getTime() - startTime);
  23. if(detal>0)setTimeout(nextFun,detal);
  24. else nextFun();
  25. }else nextFun();
  26. }else retryCheck(checkFun,interval,nextFun,times,delay,startTime);
  27. },interval);
  28. }
  29. var cur_ct = 0;
  30. var doit = function(){
  31. let bt = document.createElement('button');
  32. bt.setAttribute('class','next-btn next-medium next-btn-normal is-wind');
  33. bt.innerText = 'Del Old Images';
  34. bt.setAttribute('style','background:red;color:white;');
  35. bt.addEventListener('click',_=>{
  36. //let tag_eles = document.querySelectorAll('.next-table-body>tr');
  37. let min = parseInt(window.prompt('How many versions to keep'));
  38. cur_ct = min;
  39. hithit();
  40. },false);
  41. document.querySelector('.next-table-header tr:first-of-type>th:last-of-type').appendChild(bt);
  42. }
  43. var hithit = function(){
  44. let modals_button = document.querySelectorAll('[aria-modal="true"][role="alertdialog"] .next-dialog-footer .next-btn-primary.next-dialog-btn');
  45. if(modals_button){
  46. for(let mb of modals_button){
  47. mb.click();
  48. }
  49. }
  50. let tag_eles = document.querySelectorAll('tr[role="row"]');
  51. let cur = tag_eles[cur_ct];
  52. let stat = cur.querySelector('.statusFilter').innerText;
  53. if(stat=='正常'){
  54. cur.querySelectorAll('.sc-iRbamj')[1].click();
  55. retryCheck(_=>{
  56. let lst = document.querySelector('.next-message-content .next-checkbox');
  57. return lst;
  58. },500,_=>{
  59. document.querySelector('.next-message-content .next-checkbox').click();
  60. document.querySelector('button[class="next-btn next-medium next-btn-primary is-wind"]').click();
  61. cur_ct++;
  62. if(cur_ct<tag_eles.length)window.setTimeout(hithit, 1500);
  63. });
  64. }else{
  65. cur_ct++;
  66. if(cur_ct<tag_eles.length)hithit();
  67. }
  68. }
  69. window.addEventListener('load',_=>{
  70. retryCheck(_=>{
  71. let lst = document.querySelector('.next-table-header tr:first-of-type>th:last-of-type');
  72. return lst;
  73. },500,_=>{
  74. doit();
  75. });
  76. },false);
  77. })();