1
0
mirror of https://github.com/simple-icons/simple-icons.git synced 2024-12-16 01:10:30 +02:00

Generic get icon function for easier access to brands with "difficult" names (#1522)

* Add URL friendy/slug/file name as property to package icon objects

* Test new property

* Build index from template

* Add .get function to index.js export

* Test new .get function in index.js export

* Use Uglify-JS to minify the code in the package's index.js

* Update API in README.md

* Renaem test using "slug" instead of "name"
This commit is contained in:
Eric Cornelissen 2019-07-14 20:05:38 +01:00 committed by Johan Fagerberg
parent e1c7f20914
commit c6a9346985
6 changed files with 49 additions and 11 deletions

View File

@ -42,7 +42,7 @@ The API can then be used as follows:
```javascript
const simpleIcons = require('simple-icons');
console.log(simpleIcons['Simple Icons']);
console.log(simpleIcons.get('Simple Icons'));
/*
{

7
package-lock.json generated
View File

@ -868,8 +868,7 @@
"version": "2.20.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz",
"integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==",
"dev": true,
"optional": true
"dev": true
},
"compare-versions": {
"version": "3.4.0",
@ -5629,7 +5628,6 @@
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz",
"integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==",
"dev": true,
"optional": true,
"requires": {
"commander": "~2.20.0",
"source-map": "~0.6.1"
@ -5639,8 +5637,7 @@
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true,
"optional": true
"dev": true
}
}
},

View File

@ -21,7 +21,8 @@
"editorconfig-checker": "^2.0.8",
"jest": "^24.1.0",
"jsonlint2": "^1.7.1",
"svglint": "^1.0.4"
"svglint": "^1.0.4",
"uglify-js": "^3.6.0"
},
"scripts": {
"jsonlint": "jsonlint _data/simple-icons.json -q -V .jsonlintschema",

View File

@ -7,12 +7,16 @@
* Also generates an index.js that exports all icons by title, but is not tree-shakeable
*/
const fs = require("fs");
const util = require("util");
const minify = require("uglify-js").minify;
const dataFile = "../_data/simple-icons.json";
const indexFile = `${__dirname}/../index.js`;
const iconsDir = `${__dirname}/../icons`;
const data = require(dataFile);
const fs = require("fs");
const indexTemplateFile = `${__dirname}/templates/index.js`;
const data = require(dataFile);
const { titleToFilename } = require("./utils");
// Local helper functions
@ -39,5 +43,10 @@ data.icons.forEach(icon => {
});
// write our generic index.js
const iconsString = icons.map(iconToKeyValue).join(',');
fs.writeFileSync(indexFile, `module.exports={${iconsString}};`);
const indexTemplate = fs.readFileSync(indexTemplateFile, "utf8");
const { error, code } = minify(util.format(indexTemplate, icons.map(iconToKeyValue).join(',')));
if (error) {
process.exit(1);
} else {
fs.writeFileSync(indexFile, code);
}

View File

@ -0,0 +1,17 @@
var icons = {%s};
module.exports = icons;
module.exports.get = function(targetName) {
if (icons[targetName]) {
return icons[targetName];
} else {
var normalizedName = targetName.toLowerCase();
for (var iconName in icons) {
var icon = icons[iconName];
if ((icon.title && icon.title.toLowerCase() === normalizedName)
|| (icon.slug && icon.slug === normalizedName)) {
return icon;
}
}
}
}

View File

@ -1,5 +1,6 @@
const { icons } = require('../_data/simple-icons.json');
const simpleIcons = require('../index.js');
const { titleToFilename } = require("../scripts/utils.js");
icons.forEach(icon => {
const subject = simpleIcons[icon.title];
@ -29,4 +30,17 @@ icons.forEach(icon => {
test(`${icon.title} has a "slug"`, () => {
expect(typeof subject.slug).toBe('string');
});
test(`${icon.title} can be found by it's title`, () => {
const found = simpleIcons.get(icon.title);
expect(found).toBeDefined();
expect(found.title).toEqual(icon.title);
});
test(`${icon.title} can be found by it's slug`, () => {
const name = titleToFilename(icon.title);
const found = simpleIcons.get(name);
expect(found).toBeDefined();
expect(found.title).toEqual(icon.title);
});
});