generate iconFont
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

131 lines
3.5 KiB

var express = require('express');
var router = express.Router();
const fontDb = require('../models/iconFontmodels');
const font = fontDb.font
const iconFont = fontDb.iconfont
const svgtofont = require('svgtofont');
const fs = require('fs');
const path = require('path');
const { where } = require('sequelize');
const { resolve } = require('path/posix');
router.post('/createIconFont', async (req, res) => {
svgFiles = []
let fontId = await font.findOne( {
where : {
name : req.body.fontName,
}
})
let svgList = await font.findAll({
include : [{model: iconFont , where : {
varient : "Bulks",
iconfontID :fontId.dataValues.id,
}}, ],
})
svgList = svgList[0].dataValues.iconfonts
res.send(svgList)
const cssFileGenerator = `
@font-face {
font-family: ${req.body.fontName};
src: url('${req.body.fontName}.eot'); /* IE9*/
src: url('${req.body.fontName}.eot') format('embedded-opentype'), /* IE6-IE8 */
url("${req.body.fontName}.woff2") format("woff2"),
url("${req.body.fontName}.woff") format("woff"),
url('${req.body.fontName}.ttf') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
url('${req.body.fontName}.svg') format('svg'); /* iOS 4.1- */
}
.characters {
font-family: '${req.body.fontName}' !important;
font-size:16px;
font-style:normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
`
fs.unlink('iconFont/iconFontsOf'+req.body.fontName ,function(err){
if(err) return console.log(err);
console.log('file deleted successfully');
});
if (!fs.existsSync('iconFont/iconFontsOf'+req.body.fontName )){
fs.mkdirSync('iconFont/iconFontsOf'+req.body.fontName );
}
fs.appendFile('iconFont/iconFontsOf'+req.body.fontName + "/"+req.body.fontName+".css", cssFileGenerator, err => {
if (err) {
console.error(err);
}
// file written successfully
});
svgtofont({
src: path.resolve('svgs/'+req.body.fontName),
dist: path.resolve('iconFont/iconFontsOf'+req.body.fontName),
fontName: req.body.fontName,
// emptyDist: true,
useNameAsUnicode : true,
});
});
router.post('/addIcon', async (req, res) => {
let fontId = await font.findOne({
where : {
name : req.body.fontName,
}
})
const svgsFolder = "svgs/"+ req.body.fontName
async function nameGenerator(){
nameGeneratorCounter = 500
fs.readdirSync(svgsFolder).forEach(file => {
fs.rename("svgs/iconsax2/"+file ,"svgs/iconsax2/" +String.fromCharCode(parseInt(nameGeneratorCounter))+ ".svg",function(err) {
if ( err ) console.log('ERROR: ' + err);
} )
console.log(file)
nameGeneratorCounter+=1
});
}
await nameGenerator();
await iconFont.destroy({
where : { id : fontId.id }
})
fs.readdirSync(svgsFolder).forEach(file => {
const iconCreate = iconFont.create(
{
name : req.body.fontName,
iconfontID : fontId.id,
char : file.substring(0,1) ,
svgFile : svgsFolder + '/' + file,
varient : req.body.varient,
description : file,
}
)
}
)
res.send("svgs added successfully.")
});
router.post('/createfont', async (req, res) => {
font.create(
{
name : req.body.fontName,
})
const list = font.findAll()
res.send(list);
});
module.exports = router