extjs_iconpack
Version:
package to add icons
159 lines (129 loc) • 4.57 kB
JavaScript
const fs = require('fs');
const path = require('path');
const cwd = process.cwd();
const ICON_TYPES = require('./constants');
const aliases = {
[ICON_TYPES.project]: {
// 'cancel': ['close'],
'excel': ['exel'],
'arrow-down': ['expand-bottom'],
'star-16': ['star_16px'],
},
[ICON_TYPES.fa]: {
},
};
const addAlias = (files, iconName, iconType) => {
// comprationObj -> {iconName: ['aliasName']}
// aliases {comprationObj[]}
const rootIconName = aliases[iconType]?.[iconName];
if (rootIconName) {
console.log(rootIconName)
const iconNames = aliases[iconType][iconName];
for (const iName of iconNames) {
files.push({key: iName, value: iconName});
}
}
};
const makeIconList = (iconPath, styleFilename, ext, iconType) => {
const files = [];
// read all icon files to get names
fs.readdirSync(path.join(cwd, iconPath))
.forEach((filename) => {
const filepath = path.resolve(iconPath, filename);
const stat = fs.statSync(filepath);
if (!stat.isFile()) {
return;
}
const {name} = path.parse(filename);
if (filename.endsWith(ext)) {
files.push({key: name, value: name});
addAlias(files, name, iconType);
};
});
const styles = fs.readFileSync(styleFilename, {encoding: 'utf8'})
.replace(/[\t\r]+/g, '')
.split('\n');
const startIdx = styles.findIndex((line) => line.includes('IconList.start'));
const endIdx = styles.findIndex((line) => line.includes('IconList.end'));
const result = {
start: [],
end: [],
};
result.end = styles.splice(endIdx, styles.length);
result.start = styles.splice(0, startIdx + 1);
// result.content = files.map((file) => ` "${file}",`);
result.content = files.map((file) => ` "${file.key}": "${file.value}",`);
const icons = result.start.concat(result.content, result.end).join('\n');
fs.writeFileSync(
styleFilename,
icons,
'utf-8',
function(err) {
if (err) {
return console.log(err);
}
});
return files;
};
const generateIcons = (icons, iconPath) => {
// // read file and split by line
// const styles = fs.readFileSync(filename, {encoding: 'utf8'})
// .replace(/[\t\r]+/g, '')
// .split('\n');
// // get all icons to icons array
// const iconListStartIdx = styles.findIndex((line) => line.trim() === markerStart);
// let tempIdxToReadStyles = iconListStartIdx + 1;
// const icons = [];
// let iconsIdx = 0;
// while (styles[tempIdxToReadStyles].trim() !== markerEnd) {
// icons[iconsIdx] = styles[tempIdxToReadStyles];
// iconsIdx += 1;
// tempIdxToReadStyles += 1;
// }
// generate iconList to render pug layout
const iconList = icons.map((icon) => {
// const name = icon.split(':')[0].trim();
const name = icon.value;
const svgFilename = name;// icon.split(':')[1].replace(/['", ]+/g, '');
return {
source: `${iconPath}/${svgFilename}.svg`,
name,
alt: name,
};
});
return {
icons,
iconList,
};
};
const generateIconStore = (iconStoreFileName, marker, prefix, icons, iconType) => {
const file = fs.readFileSync(iconStoreFileName, {encoding: 'utf8'})
.replace(/[\t\r]+/g, '')
.split('\n');
const startIdx = file.findIndex((line) => line.includes(`${marker}.start`));
const endIdx = file.findIndex((line) => line.includes(`${marker}.end`));
// array of stringify objects
const storeElements = icons.map((icon) => {
// const description = icon.split(':')[0].trim();
const description = icon.key;
const value = `svg-${iconType ||'icon'} ${prefix}-${description}`;
return ` {value: \'${value}\', description: \'${description}\'},`;
});
const result = {
start: [],
end: [],
};
result.end = file.splice(endIdx, file.length);
result.start = file.splice(0, startIdx + 1);
result.content = storeElements;
fs.writeFileSync(iconStoreFileName, result.start.concat(result.content, result.end).join('\n'), 'utf-8', function(err) {
if (err) {
return console.log(err);
}
});
};
module.exports = {
makeIconList,
generateIcons,
generateIconStore,
};