mirror of
https://github.com/EnixCoda/Gitako.git
synced 2026-03-11 08:54:44 +00:00
fix: handle not well-formatted icon data input
This commit is contained in:
parent
02b33776b7
commit
c62ea95e12
2 changed files with 66 additions and 57 deletions
|
|
@ -1,62 +1,71 @@
|
|||
const languageIds = require('./language-id-ext.json')
|
||||
|
||||
const records = []
|
||||
function generateCSV() {
|
||||
const records = []
|
||||
|
||||
document.body
|
||||
.querySelector('table')
|
||||
.querySelectorAll('tbody tr')
|
||||
.forEach(tr => {
|
||||
const [name, id, dark, light] = Array.from(tr.querySelectorAll('td'))
|
||||
const exts = []
|
||||
const names = []
|
||||
id.innerHTML
|
||||
.replace(/<sub>|<\/sub>/g, '')
|
||||
.split(', ')
|
||||
.map(part => {
|
||||
const match = part.match(/<(\w+)>(.*?)<\/\1>/)
|
||||
if (match) {
|
||||
const [, tag, content] = match
|
||||
if (tag === 'strong') {
|
||||
// filenames in bold
|
||||
names.push(content)
|
||||
} else if (tag === 'code') {
|
||||
// language ids in code block
|
||||
const map = Object.values(languageIds).find(({ ids }) =>
|
||||
(Array.isArray(ids) ? ids : [ids]).includes(content),
|
||||
)
|
||||
if (map && map.exts) exts.push(map.exts)
|
||||
} else {
|
||||
console.warn(`Found unrecognized format`, part) // unknown
|
||||
document.body
|
||||
.querySelector('table')
|
||||
.querySelectorAll('tbody tr')
|
||||
.forEach(tr => {
|
||||
const [name, id, dark, light] = Array.from(tr.querySelectorAll('td'))
|
||||
const exts = []
|
||||
const names = []
|
||||
id.innerHTML
|
||||
.replace(/<sub>|<\/sub>/g, '')
|
||||
.split(', ')
|
||||
.map(part => {
|
||||
const tags = part.match(/<(\w+)>(.*?)<\/\1>/g)
|
||||
if (tags) {
|
||||
tags.forEach(subPart => {
|
||||
const match = subPart.match(/<(\w+)>(.*?)<\/\1>/)
|
||||
if (match) {
|
||||
const [, tag, content] = match
|
||||
if (tag === 'strong') {
|
||||
// filenames in bold
|
||||
names.push(content)
|
||||
} else if (tag === 'code') {
|
||||
// language ids in code block
|
||||
const map = Object.values(languageIds).find(({ ids }) =>
|
||||
(Array.isArray(ids) ? ids : [ids]).includes(content),
|
||||
)
|
||||
if (map && map.exts) exts.push(map.exts)
|
||||
} else {
|
||||
console.warn(`Found unrecognized format`, subPart, tag) // unknown
|
||||
}
|
||||
}
|
||||
})
|
||||
} else if (part) {
|
||||
// extensions are in regular fonts
|
||||
exts.push(part.replace(/^\./, ''))
|
||||
}
|
||||
} else if (part) {
|
||||
// extensions are in regular fonts
|
||||
exts.push(part.replace(/^\./, ''))
|
||||
}
|
||||
})
|
||||
records.push({
|
||||
name: name.innerText,
|
||||
exts,
|
||||
names,
|
||||
icon: getSrc(dark.querySelector('img')) || getSrc(light.querySelector('img')),
|
||||
})
|
||||
records.push({
|
||||
name: name.innerText,
|
||||
exts,
|
||||
names,
|
||||
icon: getSrc(dark.querySelector('img')) || getSrc(light.querySelector('img')),
|
||||
})
|
||||
})
|
||||
|
||||
function getSrc(img) {
|
||||
return img && img.src
|
||||
function getSrc(img) {
|
||||
return img && img.src
|
||||
}
|
||||
|
||||
const prepend = 'https://github.com/vscode-icons/vscode-icons/raw/master/icons/file_type_'
|
||||
const append = '.svg?sanitize=true'
|
||||
const separator = ':'
|
||||
const csv = records
|
||||
.map(({ name, names, exts, icon }) =>
|
||||
[
|
||||
name,
|
||||
names.join(separator),
|
||||
exts.join(separator),
|
||||
// icon.replace(prepend, '').replace(append, ''), // assumption: name is equal to this
|
||||
].join(','),
|
||||
)
|
||||
.join('\n')
|
||||
|
||||
return csv
|
||||
}
|
||||
|
||||
const prepend = 'https://github.com/vscode-icons/vscode-icons/raw/master/icons/file_type_'
|
||||
const append = '.svg?sanitize=true'
|
||||
const separator = ':'
|
||||
const csv = records
|
||||
.map(({ name, names, exts, icon }) =>
|
||||
[
|
||||
name,
|
||||
names.join(separator),
|
||||
exts.join(separator),
|
||||
// icon.replace(prepend, '').replace(append, ''), // assumption: name is equal to this
|
||||
].join(','),
|
||||
)
|
||||
.join('\n')
|
||||
|
||||
console.log(csv)
|
||||
console.log(generateCSV())
|
||||
|
|
|
|||
|
|
@ -171,8 +171,8 @@ delphi,,pas:pas
|
|||
django,,djt:html:html
|
||||
dlang,,d:d:d:d
|
||||
diff,,diff
|
||||
docker,docker-compose.yml:docker-compose.ci-build.yml:docker-compose.override.yml:docker-compose.vs.debug.yml:docker-compose.vs.release.yml:docker-cloud.yml,dockerignore
|
||||
docker2,docker-compose.yml:docker-compose.ci-build.yml:docker-compose.override.yml:docker-compose.vs.debug.yml:docker-compose.vs.release.yml:docker-cloud.yml,dockerignore
|
||||
docker,docker-compose.yml:docker-compose.ci-build.yml:docker-compose.override.yml:docker-compose.vs.debug.yml:docker-compose.vs.release.yml:docker-cloud.yml,dockerfile:dockerignore
|
||||
docker2,docker-compose.yml:docker-compose.ci-build.yml:docker-compose.override.yml:docker-compose.vs.debug.yml:docker-compose.vs.release.yml:docker-cloud.yml,dockerfile:dockerignore
|
||||
dockertest,docker-compose.test.yml,
|
||||
dockertest2,docker-compose.test.yml,
|
||||
docpad,,eco
|
||||
|
|
@ -399,7 +399,7 @@ nodemon,nodemon.json,
|
|||
npm,.npmignore:.npmrc:package.json:package-lock.json:npm-shrinkwrap.json,
|
||||
nsi,,nsi:nsi:nsi:nsi
|
||||
nsri,.nsrirc:.nsriignore:.nsrirc.js:.nsrirc.json:.nsrirc.yaml:.nsrirc.yml:.nsrirc.config.js,
|
||||
nsri-integrity,.integrity.json,,nsri-integrity
|
||||
nsri-integrity,.integrity.json,
|
||||
nuget,,nupkg:nuspec:psmdcp
|
||||
nunjucks,,nunj:njs:nunjucks
|
||||
nuxt,nuxt.config.js:nuxt.config.ts,
|
||||
|
|
@ -612,7 +612,7 @@ volt,,volt
|
|||
vscode,.vscodeignore:launch.json:tasks.json:vscodeignore.json,
|
||||
vscode2,.vscodeignore:launch.json:tasks.json:vscodeignore.json,
|
||||
vscode3,.vscodeignore:launch.json:tasks.json:vscodeignore.json,
|
||||
vscode-insiders,.vscodeignore:launch.json:tasks.json:vscodeignore.json,,vscode-insiders
|
||||
vscode-insiders,.vscodeignore:launch.json:tasks.json:vscodeignore.json,
|
||||
vsix,,vsix
|
||||
vsixmanifest,,vsixmanifest
|
||||
vue,,vue
|
||||
|
|
|
|||
|
Can't render this file because it has a wrong number of fields in line 402.
|
Loading…
Reference in a new issue