forked from ChinaGodMan/UserScripts
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinit.js
More file actions
159 lines (150 loc) · 7.55 KB
/
Copy pathinit.js
File metadata and controls
159 lines (150 loc) · 7.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
import { github, help, fork, config, checkCommitDate } from '@/env'
const getPageType = () => {
const { pathname, search } = window.location
const params = new URLSearchParams(search)
const [, username, repo] = pathname.split('/')
const q = params.get('q')?.toLocaleLowerCase()
const type = params.get('type')?.toLocaleLowerCase()
if (window.location.pathname.split('/').pop() === 'repositories') return 'list-view-container'
if (window.location.href.includes('?tab=repositories')) return 'user-repositories'
if (window.location.href.includes('?tab=stars')) return 'user-starred-repos'
if (username && repo) return 'repo'
if (q && type === 'code') return 'code_search'
if (q) return 'search'
}
export const addSizeToRepos = () => {
const pageType = getPageType()
// Get the repo selector based on the page type
let repoSelector
switch (pageType) {
case 'repo': //仓库详情界面
repoSelector = '#repository-container-header strong a'
break
case 'list-view-container': //ORG下的仓库列表
repoSelector =
'div[data-testid="list-view-item-title-container"] h4 a'
break
case 'user-repositories': //用户资料页面的仓库TAB
repoSelector = '#user-repositories-list h3 a'
break
case 'user-starred-repos': //用户资料页面的已星标仓库
repoSelector = '#user-starred-repos h3 a'
break
case 'search': //搜索
repoSelector = 'div[data-testid="results-list"] .search-title a'
break
case 'code_search': //代码搜索
repoSelector = 'div[data-testid="results-list"] .search-title a'
break
default:
return
}
if (pageType === 'user-repositories') {
const repoItems = document.querySelectorAll('li[itemprop="owns"]')
repoItems.forEach(item => {
const repoName = item.querySelector('a[itemprop="name codeRepository"]').textContent.trim()
const ownerName = window.location.pathname.split('/')[1]
const deleteButton = document.createElement('button')
deleteButton.textContent = 'Delete'
deleteButton.classList.add('delete-repo-btn')
deleteButton.onclick = function () {
}
github.insertDelBtn(ownerName, repoName, false, 'dialog-show-repo-delete-user-repositories', item)
})
}
// Get all the repo links
let filterHref
document.querySelectorAll(repoSelector).forEach(async (elem) => {
// Get json data from github api to extract the size
const tkn = config.TOKEN
var href = elem.getAttribute('href')
href = help.extractPath(href)
if (filterHref == href) {
return
} else {
filterHref = href
}
if (pageType === 'repo') {
const parts = href.split('/')
const owner = parts[1]
const name = parts[2]
fork.insertActiveForks(owner, name, !help.isMobileDevice())
fork.insertOssInsightButton(owner, name, !help.isMobileDevice())
if (github.isLoggedInUser_f()) github.insertDelBtn(owner, name, !help.isMobileDevice())
}
console.log(href)
const headers = tkn ? { authorization: `token ${tkn}` } : {}
const jsn = await (
await fetch(`https://api.github.com/repos${href}`, {
headers: headers
})
).json()
// If JSON failed to load, skip
if (jsn.message) return
if (pageType === 'repo' && config.WARNING) {
checkCommitDate(jsn.pushed_at)
}
if (pageType === 'repo') {
const reposApi = github.isLoggedInUser(jsn.owner.avatar_url)
? (config.TOKEN ? 'https://api.github.com/user/repos' : jsn.owner.repos_url)
: jsn.owner.repos_url
if (!document.querySelector('#view-user-repos')) {
github.fetchReposWithCache(jsn.owner.login, reposApi, headers)
}
}
// Get parent element to append the size to
let parent = elem.parentElement
if (pageType === 'repo') parent = elem.parentElement.parentElement
// Create the size container
let sizeContainer = parent.querySelector('#mshll-repo-size')
if (sizeContainer === null) {
sizeContainer = document.createElement('span')
sizeContainer.id = 'mshll-repo-size'
sizeContainer.className = 'tooltipped tooltipped-s'
sizeContainer.classList.add(
'Label',
'Label--info',
'v-align-middle',
'ml-1'
)
sizeContainer.setAttribute('aria-label', 'Repository size')
sizeContainer.innerText = '-'
// Create the size icon
let sizeSVG = document.createElementNS(
'http://www.w3.org/2000/svg',
'svg'
)
sizeSVG.setAttribute('aria-hidden', 'true')
sizeSVG.setAttribute('viewBox', '-4 -4 22 22')
sizeSVG.setAttribute('width', '16')
sizeSVG.setAttribute('height', '16')
sizeSVG.setAttribute('fill', 'currentColor')
sizeSVG.setAttribute('data-view-component', 'true')
sizeSVG.classList.add('octicon', 'octicon-file-directory', 'mr-1')
let sizeSVGPath = document.createElementNS(
'http://www.w3.org/2000/svg',
'path'
)
sizeSVGPath.setAttribute('fill-rule', 'evenodd')
sizeSVGPath.setAttribute(
'd',
'M1 3.5c0-.626.292-1.165.7-1.59.406-.422.956-.767 1.579-1.041C4.525.32 6.195 0 8 0c1.805 0 3.475.32 4.722.869.622.274 1.172.62 1.578 1.04.408.426.7.965.7 1.591v9c0 .626-.292 1.165-.7 1.59-.406.422-.956.767-1.579 1.041C11.476 15.68 9.806 16 8 16c-1.805 0-3.475-.32-4.721-.869-.623-.274-1.173-.62-1.579-1.04-.408-.426-.7-.965-.7-1.591Zm1.5 0c0 .133.058.318.282.551.227.237.591.483 1.101.707C4.898 5.205 6.353 5.5 8 5.5c1.646 0 3.101-.295 4.118-.742.508-.224.873-.471 1.1-.708.224-.232.282-.417.282-.55 0-.133-.058-.318-.282-.551-.227-.237-.591-.483-1.101-.707C11.102 1.795 9.647 1.5 8 1.5c-1.646 0-3.101.295-4.118.742-.508.224-.873.471-1.1.708-.224.232-.282.417-.282.55Zm0 4.5c0 .133.058.318.282.551.227.237.591.483 1.101.707C4.898 9.705 6.353 10 8 10c1.646 0 3.101-.295 4.118-.742.508-.224.873-.471 1.1-.708.224-.232.282-.417.282-.55V5.724c-.241.15-.503.286-.778.407C11.475 6.68 9.805 7 8 7c-1.805 0-3.475-.32-4.721-.869a6.15 6.15 0 0 1-.779-.407Zm0 2.225V12.5c0 .133.058.318.282.55.227.237.592.484 1.1.708 1.016.447 2.471.742 4.118.742 1.647 0 3.102-.295 4.117-.742.51-.224.874-.47 1.101-.707.224-.233.282-.418.282-.551v-2.275c-.241.15-.503.285-.778.406-1.247.549-2.917.869-4.722.869-1.805 0-3.475-.32-4.721-.869a6.327 6.327 0 0 1-.779-.406Z'
)
sizeSVG.appendChild(sizeSVGPath)
const size = jsn.size * 1024
const humanReadableSize = help.getHumanReadableSize(jsn.size)
// Insert the size into the size container
sizeContainer.innerHTML = `${humanReadableSize}`
sizeContainer.prepend(sizeSVG)
// Insert the size container into the DOM
if (pageType === 'code_search') {
parent.style.direction = 'ltr'
}
if (!size) {
sizeContainer.style.color = 'red'
sizeContainer.style.border = '1px solid red'
}
parent.appendChild(sizeContainer)
}
})
}