diff --git a/.jsonlintschema b/.jsonlintschema index aa840e6f..63cb3c34 100644 --- a/.jsonlintschema +++ b/.jsonlintschema @@ -23,7 +23,7 @@ "source": { "description": "The website from which the icon originated", "type": "string", - "pattern": "^https?://", + "pattern": "^https?://[^\\s]+$", "required": true } }, diff --git a/.svglintrc.js b/.svglintrc.js index fd80cab0..2f4aa93f 100644 --- a/.svglintrc.js +++ b/.svglintrc.js @@ -1,3 +1,8 @@ +const data = require("./_data/simple-icons.json"); +const { htmlFriendlyToTitle } = require("./scripts/utils.js"); + +const titleRegexp = /(.+) icon$/; + module.exports = { rules: { elm: { @@ -24,6 +29,23 @@ module.exports = { "rule::selector": "svg > path", "rule::whitelist": true, } + ], + custom: [ + function(reporter, $, ast) { + const iconTitleText = $.find("title").text(); + if (!titleRegexp.test(iconTitleText)) { + reporter.error(" should follow the format \"[ICON_NAME] icon\""); + } else { + const titleMatch = iconTitleText.match(titleRegexp); + // titleMatch = [ "[ICON_NAME] icon", "[ICON_NAME]" ] + const rawIconName = titleMatch[1]; + const iconName = htmlFriendlyToTitle(rawIconName); + const icon = data.icons.find(icon => icon.title === iconName); + if (icon === undefined) { + reporter.error(`No icon with title "${iconName}" found in simple-icons.json`); + } + } + }, ] } }; diff --git a/README.md b/README.md index 08351461..21a7d951 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,8 @@ console.log(simpleIcons['Simple Icons']); title: 'Simple Icons', hex: '111111', source: 'https://simpleicons.org/', - svg: '<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">...</svg>' + svg: '<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">...</svg>', + path: 'M12 12v-1.5c-2.484 ...' } */ ``` @@ -67,7 +68,8 @@ console.log(icon); title: 'Simple Icons', hex: '111111', source: 'https://simpleicons.org/', - svg: '<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">...</svg>' + svg: '<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">...</svg>', + path: 'M12 12v-1.5c-2.484 ...' } */ ``` diff --git a/_data/simple-icons.json b/_data/simple-icons.json index 307daf3e..d5fab2f3 100644 --- a/_data/simple-icons.json +++ b/_data/simple-icons.json @@ -155,6 +155,11 @@ "hex": "D22128", "source": "https://www.apache.org/foundation/press/kit/" }, + { + "title": "Apache Flink", + "hex": "E6526F", + "source": "https://flink.apache.org/material.html" + }, { "title": "Apple", "hex": "999999", @@ -415,6 +420,11 @@ "hex": "117ACA", "source": "https://commons.wikimedia.org/wiki/File:Chase_logo_2007.svg" }, + { + "title": "Chef", + "hex": "F09820", + "source":"https://www.chef.io/" + }, { "title": "Circle", "hex": "8669AE", @@ -520,6 +530,11 @@ "hex": "2F2625", "source": "https://coffeescript.org/" }, + { + "title": "Composer", + "hex": "885630", + "source": "https://getcomposer.org/" + }, { "title": "ComproPago", "hex": "00AAEF", @@ -750,6 +765,11 @@ "hex": "DE5833", "source": "https://duckduckgo.com/" }, + { + "title": "Dynatrace", + "hex": "1496FF", + "source": "https://www.dynatrace.com/company/press-kit/" + }, { "title": "eBay", "hex": "E53238", @@ -760,6 +780,11 @@ "hex": "063A54", "source": "https://www.evry.com/en/" }, + { + "title": "Exercism", + "hex": "009CAB", + "source": "https://github.com/exercism/website-icons/blob/master/exercism/logo-icon.svg" + }, { "title": "Eclipse IDE", "hex": "2C2255", @@ -1140,11 +1165,6 @@ "hex": "4285F4", "source": "https://developers.google.com/search/docs/data-types/podcast" }, - { - "title": "Google+", - "hex": "DC4E41", - "source": "https://developers.google.com/+/branding-guidelines" - }, { "title": "GOV.UK", "hex": "005EA5", @@ -1240,6 +1260,11 @@ "hex": "00A4DE", "source": "http://hatenacorp.jp/press/resource" }, + { + "title": "Haxe", + "hex": "EA8220", + "source": "https://haxe.org/foundation/branding.html" + }, { "title": "HERE", "hex": "48DAD0", diff --git a/icons/adobecreativecloud.svg b/icons/adobecreativecloud.svg index 5c5e55ec..a980f301 100644 --- a/icons/adobecreativecloud.svg +++ b/icons/adobecreativecloud.svg @@ -1 +1 @@ -<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Adobe Creative Cloud \ No newline at end of file +Adobe Creative Cloud icon \ No newline at end of file diff --git a/icons/adobexd.svg b/icons/adobexd.svg index 57b9d932..13e70257 100644 --- a/icons/adobexd.svg +++ b/icons/adobexd.svg @@ -1 +1 @@ -Adobe Xd icon \ No newline at end of file +Adobe XD icon \ No newline at end of file diff --git a/icons/allocine.svg b/icons/allocine.svg index 76ba9d42..30ad1a78 100644 --- a/icons/allocine.svg +++ b/icons/allocine.svg @@ -1 +1 @@ -Allocine icon \ No newline at end of file +AlloCiné icon \ No newline at end of file diff --git a/icons/apacheflink.svg b/icons/apacheflink.svg new file mode 100644 index 00000000..1371ea99 --- /dev/null +++ b/icons/apacheflink.svg @@ -0,0 +1 @@ +Apache Flink icon \ No newline at end of file diff --git a/icons/applepay.svg b/icons/applepay.svg index b473ad3d..a9586044 100644 --- a/icons/applepay.svg +++ b/icons/applepay.svg @@ -1 +1 @@ -Apple pay icon \ No newline at end of file +Apple Pay icon \ No newline at end of file diff --git a/icons/chef.svg b/icons/chef.svg new file mode 100644 index 00000000..e94c9cbc --- /dev/null +++ b/icons/chef.svg @@ -0,0 +1 @@ +Chef icon \ No newline at end of file diff --git a/icons/cirrusci.svg b/icons/cirrusci.svg index e7d920fc..a17e8a13 100644 --- a/icons/cirrusci.svg +++ b/icons/cirrusci.svg @@ -1 +1 @@ -Cirrus CI \ No newline at end of file +Cirrus CI icon \ No newline at end of file diff --git a/icons/codesandbox.svg b/icons/codesandbox.svg index a4e677a9..e99071d7 100644 --- a/icons/codesandbox.svg +++ b/icons/codesandbox.svg @@ -1 +1 @@ -CodeSandbox Icon \ No newline at end of file +CodeSandbox icon \ No newline at end of file diff --git a/icons/composer.svg b/icons/composer.svg new file mode 100644 index 00000000..b11849e8 --- /dev/null +++ b/icons/composer.svg @@ -0,0 +1 @@ +Composer icon \ No newline at end of file diff --git a/icons/dynatrace.svg b/icons/dynatrace.svg new file mode 100644 index 00000000..a30e18fa --- /dev/null +++ b/icons/dynatrace.svg @@ -0,0 +1 @@ +Dynatrace icon \ No newline at end of file diff --git a/icons/elasticsearch.svg b/icons/elasticsearch.svg index ea26d1cb..ebab5bec 100644 --- a/icons/elasticsearch.svg +++ b/icons/elasticsearch.svg @@ -1 +1 @@ -Elastic Search icon \ No newline at end of file +Elasticsearch icon \ No newline at end of file diff --git a/icons/exercism.svg b/icons/exercism.svg new file mode 100644 index 00000000..38ca5475 --- /dev/null +++ b/icons/exercism.svg @@ -0,0 +1 @@ +Exercism icon \ No newline at end of file diff --git a/icons/googleallo.svg b/icons/googleallo.svg index 99a2597f..6809a7d5 100644 --- a/icons/googleallo.svg +++ b/icons/googleallo.svg @@ -1 +1 @@ -Allo icon \ No newline at end of file +Google Allo icon \ No newline at end of file diff --git a/icons/googleplus.svg b/icons/googleplus.svg deleted file mode 100644 index 41f42720..00000000 --- a/icons/googleplus.svg +++ /dev/null @@ -1 +0,0 @@ -Google+ icon \ No newline at end of file diff --git a/icons/groupon.svg b/icons/groupon.svg index 8cfe63f0..10621966 100644 --- a/icons/groupon.svg +++ b/icons/groupon.svg @@ -1 +1 @@ -groupon icon \ No newline at end of file +Groupon icon \ No newline at end of file diff --git a/icons/haxe.svg b/icons/haxe.svg new file mode 100644 index 00000000..c29ffd8f --- /dev/null +++ b/icons/haxe.svg @@ -0,0 +1 @@ +Haxe icon \ No newline at end of file diff --git a/icons/hockeyapp.svg b/icons/hockeyapp.svg index 95ae93d7..c7dd0072 100644 --- a/icons/hockeyapp.svg +++ b/icons/hockeyapp.svg @@ -1 +1 @@ -hockeyapp icon \ No newline at end of file +HockeyApp icon \ No newline at end of file diff --git a/icons/iconjar.svg b/icons/iconjar.svg index ec722311..bf7c9900 100644 --- a/icons/iconjar.svg +++ b/icons/iconjar.svg @@ -1 +1 @@ -iconjar icon \ No newline at end of file +IconJar icon \ No newline at end of file diff --git a/icons/ionic.svg b/icons/ionic.svg index 3727b745..b5855ec4 100644 --- a/icons/ionic.svg +++ b/icons/ionic.svg @@ -1 +1 @@ -Ionic Icon \ No newline at end of file +Ionic icon \ No newline at end of file diff --git a/icons/itch-dot-io.svg b/icons/itch-dot-io.svg index edea81e8..0892fccb 100644 --- a/icons/itch-dot-io.svg +++ b/icons/itch-dot-io.svg @@ -1 +1 @@ -Itch.io Icon \ No newline at end of file +Itch.io icon \ No newline at end of file diff --git a/icons/microsoftonedrive.svg b/icons/microsoftonedrive.svg index f00e682d..161a9e39 100644 --- a/icons/microsoftonedrive.svg +++ b/icons/microsoftonedrive.svg @@ -1 +1 @@ -OneDrive icon \ No newline at end of file +Microsoft OneDrive icon \ No newline at end of file diff --git a/icons/mix.svg b/icons/mix.svg index 7f275c6a..74c39b01 100644 --- a/icons/mix.svg +++ b/icons/mix.svg @@ -1 +1 @@ -mix icon \ No newline at end of file +Mix icon \ No newline at end of file diff --git a/icons/node-dot-js.svg b/icons/node-dot-js.svg index 8f50da48..e4f97700 100644 --- a/icons/node-dot-js.svg +++ b/icons/node-dot-js.svg @@ -1 +1 @@ -Node.JS icon \ No newline at end of file +Node.js icon \ No newline at end of file diff --git a/icons/nuget.svg b/icons/nuget.svg index b6fed9c1..b9872791 100644 --- a/icons/nuget.svg +++ b/icons/nuget.svg @@ -1 +1 @@ -Nuget icon \ No newline at end of file +NuGet icon \ No newline at end of file diff --git a/icons/playstation3.svg b/icons/playstation3.svg index 4928d3e0..1b47124d 100644 --- a/icons/playstation3.svg +++ b/icons/playstation3.svg @@ -1 +1 @@ -Playstation 3 icon \ No newline at end of file +PlayStation 3 icon \ No newline at end of file diff --git a/icons/playstation4.svg b/icons/playstation4.svg index a1d9bd82..0656dafe 100644 --- a/icons/playstation4.svg +++ b/icons/playstation4.svg @@ -1 +1 @@ -Playstation 4 icon \ No newline at end of file +PlayStation 4 icon \ No newline at end of file diff --git a/icons/safari.svg b/icons/safari.svg index 429fe25d..a1ea2317 100644 --- a/icons/safari.svg +++ b/icons/safari.svg @@ -1 +1 @@ -safari icon \ No newline at end of file +Safari icon \ No newline at end of file diff --git a/icons/scaleway.svg b/icons/scaleway.svg index aeebfe12..aa0005db 100644 --- a/icons/scaleway.svg +++ b/icons/scaleway.svg @@ -1 +1 @@ -Scaleway Icon \ No newline at end of file +Scaleway icon \ No newline at end of file diff --git a/icons/scrutinizerci.svg b/icons/scrutinizerci.svg index 0f51ceb2..367cfb50 100644 --- a/icons/scrutinizerci.svg +++ b/icons/scrutinizerci.svg @@ -1 +1 @@ -Scrutinizer icon \ No newline at end of file +Scrutinizer CI icon \ No newline at end of file diff --git a/icons/stylus.svg b/icons/stylus.svg index 765cbcd3..30c8b54f 100644 --- a/icons/stylus.svg +++ b/icons/stylus.svg @@ -1 +1 @@ -Stylus \ No newline at end of file +Stylus icon \ No newline at end of file diff --git a/icons/wolframmathematica.svg b/icons/wolframmathematica.svg index 29448a78..2be76cf4 100644 --- a/icons/wolframmathematica.svg +++ b/icons/wolframmathematica.svg @@ -1 +1 @@ -Mathematica icon \ No newline at end of file +Wolfram Mathematica icon \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 798da9db..ba525a1e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "simple-icons", - "version": "1.10.0", + "version": "1.11.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -3812,9 +3812,9 @@ } }, "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "version": "4.17.14", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.14.tgz", + "integrity": "sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw==", "dev": true }, "lodash.sortby": { diff --git a/package.json b/package.json index 7a18aa6c..44a4c727 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "simple-icons", - "version": "1.10.0", + "version": "1.11.0", "description": "SVG icons for popular brands https://simpleicons.org", "homepage": "https://www.simpleicons.org", "keywords": [ diff --git a/scripts/utils.js b/scripts/utils.js index ae7b38f8..6b2d0a15 100644 --- a/scripts/utils.js +++ b/scripts/utils.js @@ -21,5 +21,16 @@ module.exports = { .replace(/ò|ó|ô|õ|ö/, "o") .replace(/ù|ú|û|ü/, "u") .replace(/ý|ÿ/, "y") + ), + + /** + * Converts a brand title in HTML friendly format into a brand title (as it + * is seen in simple-icons.json) + * @param {String} htmlFriendlyTitle The title to convert + */ + htmlFriendlyToTitle: htmlFriendlyTitle => ( + htmlFriendlyTitle + .replace(/&/g, "&") + .replace(/'/g, "’") ) }