// ==UserScript==
// @name pingcodeHelper
// @namespace http://tampermonkey.net/
// @version 1.6
// @description try to take over the world!
// @author You
// @match https://onetoken.pingcode.com/*
// @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant GM_registerMenuCommand
// ==/UserScript==
GM_registerMenuCommand('Run this now', function() {
alert("Put script's main function here");
}, 'r');
function get_work_items(pageSize=1000,pageIndex=0){
return new Promise((resolve,reject)=>{
$.ajax({
url: 'https://onetoken.pingcode.com/api/agile/work-items',
dataType: "json",
data: {ps:pageSize,pi:pageIndex},
async: true,
cache: false,
timeout: 30000,
success: (res)=> {
if(res.code===200){
let data=res.data
let dataList=data.value
if(data.page_index<data.page_count-1){
get_work_items(pageSize,pageIndex+1).then(items=>{
let concatList=dataList.concat(items)
resolve(concatList)
})
} else {
resolve(dataList)
}
} else{
reject()
}
},
error: (request, status, error)=> {
reject(error)
},
type: "GET"
});
})
}
function achiveItems(items,index=0){
return new Promise((resolve,reject)=>{
let item=items[index]
$.ajax({
url: `https://onetoken.pingcode.com/api/agile/work-items/${item._id}/archive`,
dataType: "json",
data: {},
async: true,
cache: false,
timeout: 10000,
success: function (data) {
if(index<items.length-1){
achiveItems(items,index+1).then(res=>{
resolve()
})
} else {
resolve()
}
},
error: function (request, status, error) {
reject(error)
},
type: "PUT"
});
})
}
get_work_items().then(items=>{
let long_set_tasks=[]
for(let item of items){
if(item.state_type===3||item.state_type===4){
// console.log('checking',(Date.now()-item.updated_at*1000)/24/3600000,item)
if(Date.now()-item.updated_at*1000>24*30*3600*1000){
long_set_tasks.push(item)
}
}
}
// console.log(long_set_tasks)
// let toArchiveItems=long_set_tasks.slice(0,2)
// console.log(toArchiveItems)
// achiveItems(toArchiveItems).then(()=>{
// console.log('archived')
// }).catch(e=>{
// console.log(e)
// })
})
// $.ajax({
// url: 'https://onetoken.pingcode.com/api/agile/work-items/60e29290793b014b8ffbdeba/archive',
// dataType: "json",
// data: {},
// async: true,
// cache: false,
// timeout: 30000,
// success: function (data) {
// // my success stuff
// },
// error: function (request, status, error) {
// // my error stuff
// },
// type: "PUT"
// });
var pageURLCheckTimer = setInterval(
function () {
if (this.lastPathStr !== location.pathname ||
this.lastQueryStr !== location.search ||
this.lastPathStr === null ||
this.lastQueryStr === null
) {
this.lastPathStr = location.pathname;
this.lastQueryStr = location.search;
gmMain();
}
}, 222
);
function gmMain() {
setTimeout(function () {
let x = document.querySelector("#app-host-container > app-agile-root > app-agile-actual-root > agile-global > agile-global-query-detail > thy-header > div.layout-header-content > div > thy-nav > a.styx-secondary-nav-link.nav-link > span")
if(x){
console.log(x);
console.log(x.textContent.trim());
document.title = x.textContent.trim();
}
}, 3000);
}
function refreshUnread(){
let authorization = localStorage.getItem('authorization')
if(authorization){
fetch('https://iris.pingcode.com/api/iris/notifications/n-unreads?t=1636023609632',{headers:{authorization: authorization}})
.then(res => res.json())
.then(res=>{
if(res.code===200){
let unreadSize=res.data.value
let currentTitle=document.head.querySelector('title').textContent
if(currentTitle.startsWith('(')){
let endIndex = currentTitle.indexOf(')')
if(endIndex>=0){
let newTitle=`(${unreadSize})${currentTitle.substring(endIndex+1)}`
document.head.querySelector('title').textContent=newTitle
}
}
}
})
}
}
(function() {
'use strict';
// let showFinished=true
//let btn=null
let obj={btn:null,showFinished:true}
let cnt=0
setInterval(()=>{
let agileDetail=document.querySelector('.agile-work-item-detail-work-item')
if(agileDetail===null){
agileDetail=document.querySelector('.agile-work-item-detail-children')
}
cnt++
if(agileDetail){
let itemListParent = agileDetail.querySelector('.sub-work-item-list')
if(itemListParent){
let itemList = itemListParent.querySelectorAll('.work-items-list-item')
if(itemList.length>0){
if(agileDetail.querySelector('#displayBtn')===null){
obj.showFinished=true
obj.btn = document.createElement('span')
obj.btn.textContent=obj.showFinished?'隐藏已完成':'显示已完成'
obj.btn.id='displayBtn'
obj.btn.style='color:#aaa;cursor:pointer'
agileDetail.insertBefore(obj.btn, agileDetail.firstChild)
obj.btn.addEventListener('click',()=>{
toggleShowFinished()
})
toggleShowFinished()
}
}
}
}
if(cnt%60===0){
refreshUnread()
}
},1000)
function isEnd(workItem){
let status=workItem.querySelector('.flexible-text-container').textContent
return status==='关闭'||status==='已完成'
}
function toggleShowFinished(){
console.log('toggle show finished')
obj.showFinished=!obj.showFinished
obj.btn.textContent=obj.showFinished?'隐藏已完成':'显示已完成'
if(obj.showFinished){
let workItems=document.querySelectorAll('.work-item-info')
for(let item of workItems){
item.parentElement.parentElement.style='display:block'
}
} else {
let workItems=document.querySelectorAll('.work-item-info')
for(let item of workItems){
let status=item.querySelector('.flexible-text-container').textContent
if(status==='关闭'||status==='已完成'){
item.parentElement.parentElement.style='display:none'
}
}
}
}
console.log('starting')
// Your code here...
})();