mirror of
https://github.com/coreui/coreui-icons.git
synced 2025-08-27 18:20:01 +02:00
refactor: remove build scripts
This commit is contained in:
@@ -1,58 +0,0 @@
|
|||||||
const fs = require('fs')
|
|
||||||
const mkdirp = require('mkdirp')
|
|
||||||
const path = require('path')
|
|
||||||
const rimraf = require('rimraf')
|
|
||||||
const walkSync = require('./walk-sync.js')
|
|
||||||
|
|
||||||
const dataDir = path.join(__dirname, '../data')
|
|
||||||
const examplesDir = path.join(__dirname, '../examples')
|
|
||||||
|
|
||||||
const prefixes = {
|
|
||||||
brand: 'cib-',
|
|
||||||
duotone: 'cid-',
|
|
||||||
flag: 'cif-',
|
|
||||||
free: 'cil-',
|
|
||||||
linear: 'cil-',
|
|
||||||
solid: 'cis-'
|
|
||||||
}
|
|
||||||
|
|
||||||
const unique = (array, key) => array.map(e => e[key]).map((e, i, final) => final.indexOf(e) === i && i).filter(e => array[e]).map(e => array[e])
|
|
||||||
|
|
||||||
const main = () => {
|
|
||||||
rimraf.sync(examplesDir)
|
|
||||||
mkdirp(examplesDir).then(() => {
|
|
||||||
|
|
||||||
const files = walkSync(dataDir).filter(element => path.extname(element) === '.json')
|
|
||||||
files.forEach(file => {
|
|
||||||
const rawdata = fs.readFileSync(file)
|
|
||||||
const icons = JSON.parse(rawdata).icons.sort((a,b) => (a.name > b.name) ? 1 : ((b.name > a.name) ? -1 : 0))
|
|
||||||
|
|
||||||
const type = path.basename(file).replace('.json', '')
|
|
||||||
const prefix = prefixes[type.toLowerCase()]
|
|
||||||
|
|
||||||
let html = `<!DOCTYPE html>\n<html lang="en">\n<head>\n <meta charset="UTF-8">\n`
|
|
||||||
html += ` <title>CoreUI Icons - ${type}</title>\n`
|
|
||||||
html += ` <link rel="stylesheet" type="text/css" href="https://unpkg.com/@coreui/coreui@3.0.0/dist/css/coreui.min.css">\n`
|
|
||||||
html += ` <link rel="stylesheet" type="text/css" href="../css/${type.toLowerCase()}.min.css">\n`
|
|
||||||
html += `</head>\n<body>\n`
|
|
||||||
|
|
||||||
html += ` <div class="row">\n`
|
|
||||||
unique(icons, 'name').forEach(icon => {
|
|
||||||
const name = icon.name
|
|
||||||
html += ` <div class="col-1 py-4 text-center"><i class="c-icon c-icon-2xl ${prefix}${name.toLowerCase()}"></i></div>\n`
|
|
||||||
})
|
|
||||||
html += ` </div>\n<hr>\n`
|
|
||||||
html += ` <div class="row">\n`
|
|
||||||
unique(icons, 'name').forEach(icon => {
|
|
||||||
const name = icon.name
|
|
||||||
html += ` <div class="col-1 py-4 text-center"><svg class="c-icon c-icon-2xl"><use xlink:href="../sprites/${type.toLowerCase()}.svg#${prefix}${name.toLowerCase()}"></use></svg></div>\n`
|
|
||||||
})
|
|
||||||
html += ` </div>\n`
|
|
||||||
html += `</body>\n</html>`
|
|
||||||
|
|
||||||
fs.writeFileSync(path.join(examplesDir, path.basename(file).replace('.json', '.html')), html)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
main()
|
|
@@ -1,84 +0,0 @@
|
|||||||
const fs = require('fs')
|
|
||||||
const mkdirp = require('mkdirp');
|
|
||||||
const path = require('path')
|
|
||||||
const webfont = require('webfont').default
|
|
||||||
|
|
||||||
const argv = require('minimist')(process.argv.slice(2), {
|
|
||||||
string: ['src', 'name', 'prefix']
|
|
||||||
})
|
|
||||||
|
|
||||||
const dataDir = path.join(__dirname, '../data')
|
|
||||||
const fontDir = path.join(__dirname, '../fonts')
|
|
||||||
const svgDir = path.join(__dirname, '../svg', argv.src.toLowerCase())
|
|
||||||
|
|
||||||
webfont({
|
|
||||||
files: `${svgDir}/**/*.svg`,
|
|
||||||
fontName: argv.name,
|
|
||||||
fontHeight: 5000,
|
|
||||||
startUnicode: 'ec0f',
|
|
||||||
verbose: true,
|
|
||||||
}).then(result => {
|
|
||||||
|
|
||||||
mkdirp(fontDir).then(() => {
|
|
||||||
|
|
||||||
fs.writeFile(`${path.join(fontDir, argv.name)}.eot`, result.eot, (err) => {
|
|
||||||
if (err) throw err
|
|
||||||
console.log(`The ${path.join(fontDir, argv.name)}.eot file has been saved!`)
|
|
||||||
})
|
|
||||||
|
|
||||||
fs.writeFile(`${path.join(fontDir, argv.name)}.svg`, result.svg, (err) => {
|
|
||||||
if (err) throw err
|
|
||||||
console.log(`The ${path.join(fontDir, argv.name)}.eot file has been saved!`)
|
|
||||||
})
|
|
||||||
|
|
||||||
fs.writeFile(`${path.join(fontDir, argv.name)}.ttf`, result.ttf, (err) => {
|
|
||||||
if (err) throw err
|
|
||||||
console.log(`The ${path.join(fontDir, argv.name)}.eot file has been saved!`)
|
|
||||||
})
|
|
||||||
|
|
||||||
fs.writeFile(`${path.join(fontDir, argv.name)}.woff`, result.woff, (err) => {
|
|
||||||
if (err) throw err
|
|
||||||
console.log(`The ${path.join(fontDir, argv.name)}.eot file has been saved!`)
|
|
||||||
})
|
|
||||||
|
|
||||||
fs.writeFile(`${path.join(fontDir, argv.name)}.woff2`, result.woff2, (err) => {
|
|
||||||
if (err) throw err
|
|
||||||
console.log(`The ${path.join(fontDir, argv.name)}.eot file has been saved!`)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
const iconsList = []
|
|
||||||
|
|
||||||
result.glyphsData.forEach(element => {
|
|
||||||
const name = element.metadata.name
|
|
||||||
const unicode = element.metadata.unicode
|
|
||||||
|
|
||||||
iconsList.push({
|
|
||||||
name: name.replace(`${argv.prefix}-`,''),
|
|
||||||
unicode: `\\${unicode[0].codePointAt(0).toString(16)}`
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
// Add unicodes to icons lists
|
|
||||||
fs.readFile(`${dataDir}/${argv.name.replace('CoreUI-Icons-', '')}.json`, 'utf8', function readFileCallback(err, data){
|
|
||||||
if (err) throw err
|
|
||||||
obj = JSON.parse(data)
|
|
||||||
|
|
||||||
const mergeByName = (a1, a2) => a1.map(itm => ({
|
|
||||||
...a2.find((item) => (item.name === itm.name) && item),
|
|
||||||
...itm
|
|
||||||
}))
|
|
||||||
|
|
||||||
json = JSON.stringify(mergeByName(obj, iconsList), null, 2)
|
|
||||||
|
|
||||||
fs.writeFileSync(`${dataDir}/${argv.name.replace('CoreUI-Icons-', '')}.json`, json)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
.catch(error => {
|
|
||||||
throw error
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
// formats: [ 'svg', 'ttf', 'eot', 'woff', 'woff2' ]
|
|
||||||
// Bufer ttf, eot, woff
|
|
@@ -1,123 +0,0 @@
|
|||||||
const fs = require('fs')
|
|
||||||
const mkdirp = require('mkdirp')
|
|
||||||
const path = require('path')
|
|
||||||
const { extname } = path
|
|
||||||
|
|
||||||
const dirnames = process.mainModule.filename.includes('pro') ?
|
|
||||||
['solid', 'linear', 'duotone', 'brand', 'flag']
|
|
||||||
: ['free', 'brand', 'flag']
|
|
||||||
|
|
||||||
let allNames = {}
|
|
||||||
dirnames.forEach(setName => {
|
|
||||||
mkdirp(`js/${setName}/`).then(() => {
|
|
||||||
const dirname = `svg/${setName}/`
|
|
||||||
let contents = {}
|
|
||||||
let names = []
|
|
||||||
fs.readdirSync(dirname).forEach(filename => {
|
|
||||||
console.log(filename)
|
|
||||||
if (extname(filename) === '.svg') {
|
|
||||||
const content = fs.readFileSync(dirname + filename, {encoding:'utf8'})
|
|
||||||
const variableName = toCamel(filename.replace('.svg', ''))
|
|
||||||
const jsFilename = filename.replace('.svg', '.js')
|
|
||||||
const tsFilename = filename.replace('.svg', '.d.ts')
|
|
||||||
const viewBox = getAttributeValue(content, 'viewBox').split(' ')
|
|
||||||
const dimensions = `${viewBox[2]} ${viewBox[3]}`
|
|
||||||
|
|
||||||
let iconData = []
|
|
||||||
if (dimensions !== '64 64') {
|
|
||||||
iconData.push(dimensions)
|
|
||||||
}
|
|
||||||
const computedContent =
|
|
||||||
content
|
|
||||||
.replace(/(<svg([^>]+)>)|(<\/svg>)/ig, '')
|
|
||||||
.replace(/\n\s\s+/g, '')
|
|
||||||
.replace(/\n/g, '')
|
|
||||||
.replace(/"/g, '\'')
|
|
||||||
iconData.push(computedContent)
|
|
||||||
|
|
||||||
contents[variableName] = iconData
|
|
||||||
|
|
||||||
importName = validate(variableName)
|
|
||||||
|
|
||||||
names.push({
|
|
||||||
jsFilename,
|
|
||||||
variableName,
|
|
||||||
importName
|
|
||||||
})
|
|
||||||
|
|
||||||
// Create single icon
|
|
||||||
fs.writeFileSync(
|
|
||||||
`js/${setName}/${jsFilename}`,
|
|
||||||
`export const ${importName} = ` + JSON.stringify(iconData)
|
|
||||||
)
|
|
||||||
|
|
||||||
// Create typings for single icon
|
|
||||||
fs.writeFileSync(
|
|
||||||
`js/${setName}/${tsFilename}`,
|
|
||||||
`export declare const ${importName}: any[];`
|
|
||||||
)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
fs.writeFileSync(`js/${setName}/${setName}-set.js`, `export const ${setName}Set = ` + JSON.stringify(contents))
|
|
||||||
fs.writeFileSync(`js/${setName}/${setName}-set.d.ts`, typings(names, setName, false))
|
|
||||||
fs.writeFileSync(`js/${setName}/index.js`, getImports(names, setName))
|
|
||||||
fs.writeFileSync(`js/${setName}/index.d.ts`, typings(names, setName))
|
|
||||||
|
|
||||||
allNames[setName] = names
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
let imports = ''
|
|
||||||
Object.keys(allNames).forEach(set => {
|
|
||||||
imports += getImports(allNames[set], set, true)
|
|
||||||
imports += '\n\n\n'
|
|
||||||
})
|
|
||||||
fs.writeFileSync(`index.js`, imports)
|
|
||||||
|
|
||||||
const getAttributeValue = (string, attribute) => {
|
|
||||||
const regex = new RegExp(`${attribute}="([^"]+)"`, 'g')
|
|
||||||
return string.match(regex, '')[0]
|
|
||||||
.match(/"(.*?)"/ig, '')[0]
|
|
||||||
.replace(/"/g, '')
|
|
||||||
}
|
|
||||||
|
|
||||||
const toCamel = (str) => {
|
|
||||||
return str.replace(/([-_][a-z0-9])/ig, ($1) => {
|
|
||||||
return $1.toUpperCase().replace('-', '')
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const validate = (str) => {
|
|
||||||
if (!isNaN(str.charAt(0))) {
|
|
||||||
return 'n' + str
|
|
||||||
} else {
|
|
||||||
return str
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const getImports = (names, setName, deep = false) => {
|
|
||||||
const folder = deep ? `/js/${setName}/` : '/'
|
|
||||||
const defaultImport = `import { ${setName}Set } from '.${folder}${setName}-set.js' \n`
|
|
||||||
const defaultExport = `export { ${setName}Set } \n\n`
|
|
||||||
const importString = names.map(name => {
|
|
||||||
return `import { ${name.importName} } from '.${folder}${name.jsFilename}'`
|
|
||||||
}).join('\n')
|
|
||||||
const exportString = names.map(name => {
|
|
||||||
return `export { ${name.importName} }`
|
|
||||||
}).join('\n')
|
|
||||||
return defaultImport + defaultExport + importString + '\n' + exportString
|
|
||||||
}
|
|
||||||
|
|
||||||
const typings = (names, setName, all = true) => {
|
|
||||||
const icons = names.map(name => {
|
|
||||||
return ` "${name.importName}": any[];`
|
|
||||||
}).join('\n')
|
|
||||||
const set = `export declare const ${setName}Set: {\n${icons}\n}`
|
|
||||||
|
|
||||||
const exportString = names.map(name => {
|
|
||||||
return `export declare const ${name.importName}: any[];`
|
|
||||||
}).join('\n')
|
|
||||||
|
|
||||||
return all ? set + '\n' + exportString : set
|
|
||||||
}
|
|
@@ -1,37 +0,0 @@
|
|||||||
const sharp = require('sharp')
|
|
||||||
const fs = require('fs')
|
|
||||||
const mkdirp = require('mkdirp');
|
|
||||||
const dirnames = process.mainModule.filename.includes('pro') ?
|
|
||||||
['solid', 'linear', 'duotone', 'brand', 'flag']
|
|
||||||
: ['free', 'brand', 'flag']
|
|
||||||
const dest = 'png/'
|
|
||||||
let sizes
|
|
||||||
|
|
||||||
const argv = require('minimist')(process.argv.slice(2), {
|
|
||||||
array: ['sizes']
|
|
||||||
})
|
|
||||||
|
|
||||||
argv.sizes ? sizes = argv.sizes : sizes = [16, 32, 64]
|
|
||||||
|
|
||||||
dirnames.forEach(setName => {
|
|
||||||
const dirname = `svg/${setName}/`
|
|
||||||
const svgs = fs.readdirSync(dirname)
|
|
||||||
|
|
||||||
sizes.forEach(size => {
|
|
||||||
mkdirp(`${dest}${setName}/${size}x${size}/`).then(() => {
|
|
||||||
svgs.forEach((svg) => {
|
|
||||||
const file = dirname + svg
|
|
||||||
sharp(file, { density: 72 * size / 16 })
|
|
||||||
.png()
|
|
||||||
.resize(size, size, {fit: 'inside'})
|
|
||||||
.toFile(`${dest}${setName}/${size}x${size}/${svg.replace('svg', 'png')}`)
|
|
||||||
.then(function(info) {
|
|
||||||
console.log(info)
|
|
||||||
})
|
|
||||||
.catch(function(err) {
|
|
||||||
console.log(err)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
@@ -1,54 +0,0 @@
|
|||||||
const fs = require('fs')
|
|
||||||
const mkdirp = require('mkdirp');
|
|
||||||
const path = require('path')
|
|
||||||
const dirnames = process.mainModule.filename.includes('pro') ?
|
|
||||||
['solid', 'linear', 'duotone', 'brand', 'flag']
|
|
||||||
: ['free', 'brand', 'flag']
|
|
||||||
|
|
||||||
const prefixes = {
|
|
||||||
brand: 'cib-',
|
|
||||||
duotone: 'cid-',
|
|
||||||
flag: 'cif-',
|
|
||||||
free: 'cil-',
|
|
||||||
linear: 'cil-',
|
|
||||||
solid: 'cis-'
|
|
||||||
}
|
|
||||||
|
|
||||||
const getAttributeValue = (string, attribute) => {
|
|
||||||
const regex = new RegExp(`${attribute}="([^"]+)"`, 'g')
|
|
||||||
return string.match(regex, '')[0]
|
|
||||||
.match(/"(.*?)"/ig, '')[0]
|
|
||||||
.replace(/"/g, '')
|
|
||||||
}
|
|
||||||
|
|
||||||
mkdirp('sprites/').then(() => {
|
|
||||||
dirnames.forEach(setName => {
|
|
||||||
const dirname = `svg/${setName}/`
|
|
||||||
const svgs = fs.readdirSync(dirname).filter(element => path.extname(element) === '.svg')
|
|
||||||
let symbols = []
|
|
||||||
svgs.forEach((svg, idx, svgs) => {
|
|
||||||
let symbol = {}
|
|
||||||
const file = dirname + svg
|
|
||||||
const content = fs.readFileSync(file, 'utf8')
|
|
||||||
const viewBox = getAttributeValue(content, 'viewBox')
|
|
||||||
const computedContent =
|
|
||||||
content
|
|
||||||
.replace(/(<svg([^>]+)>)|(<\/svg>)/ig, '')
|
|
||||||
.replace(/\n\s\s+/g, '')
|
|
||||||
.replace(/\n/g, '')
|
|
||||||
.replace(/"/g, '\'')
|
|
||||||
.replace('<!-- Generated by IcoMoon.io -->', '')
|
|
||||||
symbol = `<symbol id="${svg.replace('.svg', '').toLowerCase()}" viewBox="${viewBox}">\n ${computedContent}\n</symbol>`
|
|
||||||
idx === svgs.length - 1 ? symbols.push(symbol) : symbols.push(`${symbol}\n`)
|
|
||||||
})
|
|
||||||
fs.writeFile(
|
|
||||||
`sprites/${setName}.svg`,
|
|
||||||
`<svg aria-hidden="true" style="position: absolute; width: 0; height: 0; overflow: hidden;" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
||||||
<defs>
|
|
||||||
${symbols.join('')}
|
|
||||||
</defs>
|
|
||||||
</svg>`,
|
|
||||||
() => ''
|
|
||||||
)
|
|
||||||
})
|
|
||||||
})
|
|
@@ -1,46 +0,0 @@
|
|||||||
const fs = require('fs')
|
|
||||||
const path = require('path')
|
|
||||||
|
|
||||||
const argv = require('minimist')(process.argv.slice(2), {
|
|
||||||
string: ['type', 'prefix'],
|
|
||||||
boolean: ['font']
|
|
||||||
})
|
|
||||||
|
|
||||||
const dataDir = path.join(__dirname, '../data')
|
|
||||||
const scssDir = path.join(__dirname, '../scss', argv.type.toLowerCase())
|
|
||||||
|
|
||||||
const json = path.join(dataDir, `${argv.type}.json`)
|
|
||||||
|
|
||||||
const unique = (array, key) => array.map(e => e[key]).map((e, i, final) => final.indexOf(e) === i && i).filter(e => array[e]).map(e => array[e])
|
|
||||||
|
|
||||||
const main = () => {
|
|
||||||
const rawdata = fs.readFileSync(json)
|
|
||||||
const icons = JSON.parse(rawdata).sort((a,b) => (a.name > b.name) ? 1 : ((b.name > a.name) ? -1 : 0))
|
|
||||||
let content = `$coreui-icons-prefix: "${argv.prefix}-" !default;\n`
|
|
||||||
|
|
||||||
if (argv.font) {
|
|
||||||
content += `$coreui-icons-font-path: "../fonts" !default;\n`
|
|
||||||
}
|
|
||||||
|
|
||||||
content += `\n$icons: (\n`
|
|
||||||
|
|
||||||
unique(icons, 'name').forEach(icon => {
|
|
||||||
const name = icon.name
|
|
||||||
const unicode = icon.unicode
|
|
||||||
|
|
||||||
if (unicode) {
|
|
||||||
content += ` "${name}": ${unicode},\n`
|
|
||||||
} else {
|
|
||||||
content += ` "${name}",\n`
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
content += ') !default;'
|
|
||||||
|
|
||||||
fs.writeFile(path.join(scssDir, '_variables.scss'), content, (err) => {
|
|
||||||
if (err) throw err
|
|
||||||
console.log('The _variables.scss file has been saved!')
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
main()
|
|
@@ -1,42 +0,0 @@
|
|||||||
const fs = require('fs')
|
|
||||||
const mkdirp = require('mkdirp')
|
|
||||||
const path = require('path')
|
|
||||||
const rimraf = require('rimraf')
|
|
||||||
const { basename } = path
|
|
||||||
const walkSync = require('./walk-sync.js')
|
|
||||||
|
|
||||||
const argv = require('minimist')(process.argv.slice(2), {
|
|
||||||
string: ['src', 'prefix']
|
|
||||||
})
|
|
||||||
|
|
||||||
const rawDir = path.join(__dirname, '../raw', argv.src)
|
|
||||||
const svgDir = path.join(__dirname, '../svg', argv.src.toLowerCase())
|
|
||||||
|
|
||||||
const main = () => {
|
|
||||||
rimraf.sync(svgDir)
|
|
||||||
mkdirp(svgDir, (err) => {
|
|
||||||
if (err) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
const files = walkSync(rawDir).filter(element => path.extname(element) === '.svg')
|
|
||||||
files.forEach(file => {
|
|
||||||
if (basename(file).indexOf('#') !== -1) {
|
|
||||||
const arrayOfFiles = basename(file).replace('.svg', '').split('#')
|
|
||||||
arrayOfFiles.forEach(singleFile => {
|
|
||||||
fs.copyFile(file, path.join(svgDir, `${argv.prefix}-${singleFile}.svg`), (err) => {
|
|
||||||
if (err) throw err
|
|
||||||
console.log(`${basename(file)} was copied ${svgDir}`)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
fs.copyFile(file, path.join(svgDir, `${argv.prefix}-${basename(file)}`), (err) => {
|
|
||||||
if (err) throw err
|
|
||||||
console.log(`${basename(file)} was copied ${svgDir}`)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
main()
|
|
@@ -1,14 +0,0 @@
|
|||||||
'use strict'
|
|
||||||
|
|
||||||
const fs = require('fs')
|
|
||||||
const path = require('path')
|
|
||||||
|
|
||||||
// Get list of all files in directory
|
|
||||||
const walkSync = (dir, filelist = []) => {
|
|
||||||
fs.readdirSync(dir).forEach(file => {
|
|
||||||
filelist = fs.statSync(path.join(dir, file)).isDirectory() ? walkSync(path.join(dir, file), filelist) : filelist.concat(path.join(dir, file))
|
|
||||||
})
|
|
||||||
return filelist
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = walkSync
|
|
Reference in New Issue
Block a user