diff --git a/build/iconsScript.js b/build/iconsScript.js new file mode 100644 index 000000000..8e0b2be41 --- /dev/null +++ b/build/iconsScript.js @@ -0,0 +1,63 @@ +let fs = require('fs') +let dirname = 'svg/' +fs.readdir(dirname, function(e, filenames) { + if (e) { + return + } + let contents = {} + filenames.forEach(function(filename) { + fs.readFile(dirname + filename, 'utf-8', function(e, content) { + if (e) { + return + } else { + let name = filename.replace('.svg', '') + let computedContent = content.replace(/(]+)>)|(<\/svg>)/ig, '') + .replace(/\n/g, '') + .split('').pop() + + contents[name] = computedContent + + fs.writeFile( + `js/${name}.js`, + `export const ${toPascalCase(name)} = ` + JSON.stringify(computedContent), + () => '' + ) + } + }) + }) + setTimeout(() => { + fs.writeFile( + 'js/iconsGenerated.js', + 'export const Icons = ' + JSON.stringify(contents), + () => '' + ) + fs.writeFile( + 'js/index.js', + getImports(Object.keys(contents)), + () => '' + ) + }, 1000) + +}) + +const toPascalCase = function (name) { + return name.match(/[A-Za-z0-9]+/gi) + .map(function (word) { + return word.charAt(0).toUpperCase() + word.substr(1).toLowerCase() + }) + .join('') +} + +function getImports(filenames) { + const defaultImport = "import { Icons } from './iconsGenerated.js' \n" + const defaultExport = "export default Icons \n\n\n" + const importString = filenames.map(name => { + let computedName = toPascalCase(name) + return `import { ${computedName} } from './${name}.js'` + }).join('\n') + const exportString = filenames.map(name => { + let computedName = toPascalCase(name) + return `export { ${computedName} }` + }).join('\n') + return defaultImport + defaultExport + importString + '\n' + exportString +} diff --git a/package.json b/package.json index 1bfac0abb..d1b1abc84 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,8 @@ "css-prefix": "postcss --config build/postcss.config.js --replace \"css/*.css\" \"!css/*.min.css\"", "css-minify": "cleancss --level 1 --source-map --source-map-inline-sources --output css/coreui-icons.min.css css/coreui-icons.css", "dist": "npm-run-all --parallel css", - "watch-css": "nodemon --ignore dist/ -e scss -x \"npm run css\"" + "watch-css": "nodemon --ignore dist/ -e scss -x \"npm run css\"", + "iconsJsBuild": "node build/iconsScript.js" }, "repository": { "type": "git",