Github项目批量删除

Github项目批量删除,fork的项目太多了

目前为 2020-09-29 提交的版本,查看 最新版本

// ==UserScript==
// @name         Github项目批量删除
// @namespace    https://github.com/mengyou658/github-repositories-manage
// @version      1.1.2
// @description  Github项目批量删除,fork的项目太多了
// @author       yunchaoq/mengyou658
// @license      GPL License
// @match        *://github.com/*
// @require      https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js
// @require      https://cdn.bootcdn.net/ajax/libs/layer/3.1.1/layer.min.js
// @resource     layerCss https://cdn.bootcdn.net/ajax/libs/layer/3.1.1/theme/default/layer.min.css
// @grant        GM_addStyle
// @grant        GM_setClipboard
// @grant        GM_getResourceText
// ==/UserScript==
(function () {
  'use strict';
  GM_addStyle(GM_getResourceText('layerCss'))
  // GM_addStyle(GM_getResourceText('layuiCss'))
  var location = window.location.href;
  var pathname = window.location.pathname;
  var userName = pathname.replace("/", "");
  var checkList = [];
  var tmpCode = sessionStorage.getItem("gitto");

  if (location.indexOf("?tab=repositories") > -1) {
    init();
  }

  function init() {
    if (!tmpCode) {
      layer.prompt({
        title: '输入申请的token,默认一次使用,关闭浏览器后失效,并确认<a href="https://github.com/settings/tokens" target="_blank">点击这里是申请,请至少选择Delete Repos</a>',
        formType: 1
      }, function (token, index) {
        if (token) {
          tmpCode = token;
          sessionStorage.setItem('gitto', tmpCode);
          layer.closeAll();
        }
      });
    }
    $("#user-repositories-list li").each((id, it) => {
      $(it).append('<input type="checkbox" class="user-repositories-list-checkbox" name="repo-check" value="" >');
    });

    $("#user-repositories-list li").on('click', function () {

      let find = $(this).find('.user-repositories-list-checkbox');
      var href = $(this).find('.wb-break-all').find('a').attr('href');
      if (href.indexOf(pathname) > -1) {
        // var repoName = href.replace(pathname + "/", "");
        let index = checkList.indexOf(href);
        if (index > -1) {
          find.prop('checked', false);
          checkList.splice(index, 1);
        } else {
          find.prop('checked', true);
          checkList.push(href);
        }
        if (!$('#user-repositories-delete').length && checkList.length) {
          $(".UnderlineNav-body:first").append('<a href="javascript:void(0);" id="user-repositories-delete" class="UnderlineNav-item btn btn-primary ">批量删除</a>');
          $("#user-repositories-delete").on('click', function () {
            var resList = {};
            var count = 0;
            var promiseList = [];
            checkList.forEach((it) => {
              var tmpPromise = new Promise((resolve, reject) => {
                var url = 'https://api.github.com/repos' + it
                $.ajax({
                  url: url,
                  method: 'DELETE',
                  "headers": {
                    "Accept": "application/vnd.github.v3+json",
                    "Authorization": "token " + tmpCode
                  },
                  success: function (data, textStatus, jqXHR) {
                    resList[it] = true;
                    count++;
                    resolve(count);
                  }, error: function (XMLHttpRequest, textStatus, errorThrown) {
                    resList[it] = false;
                    count++;
                    resolve(count);
                  }
                })
              });
              promiseList.push(tmpPromise);
            })

            Promise.all(promiseList).then((count) => {
              var resTxt = "";
              for (var i in resList) {
                if (resList[i] == true) {
                  resTxt += " 删除【" + i + "】成功<br />";
                }
              }
              for (var ii in resList) {
                if (resList[ii] == false) {
                  resTxt += " 删除【" + ii + "】失败<br />";
                }
              }
              layer.msg('删除结果:<br />' + resTxt, function () {
                window.location.reload();
              });
            });

          });
        }
      }
    });

  }

})();