diff --git a/frontend_tests/zjsunit/output.js b/frontend_tests/zjsunit/output.js index abb5c90818..9fa7ce48a1 100644 --- a/frontend_tests/zjsunit/output.js +++ b/frontend_tests/zjsunit/output.js @@ -39,6 +39,7 @@ function stylesheets() { data += '\n'; data += '\n'; data += '\n'; + data += '\n'; data += '\n'; data += '\n'; data += '\n'; diff --git a/package.json b/package.json index cbb2c2e3a1..aa52f96999 100644 --- a/package.json +++ b/package.json @@ -54,6 +54,7 @@ "svgo": "0.7.2", "swagger-parser": "3.4.1", "tslint": "5.3.2", + "webfonts-generator": "0.4.0", "webpack-dev-server": "2.4.1", "xmlhttprequest": "1.5.0" }, diff --git a/static/assets/icons/bot.svg b/static/assets/icons/bot.svg new file mode 100644 index 0000000000..361e048773 --- /dev/null +++ b/static/assets/icons/bot.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/fonts/template.hbs b/static/icons/fonts/template.hbs new file mode 100644 index 0000000000..95d89206e7 --- /dev/null +++ b/static/icons/fonts/template.hbs @@ -0,0 +1,39 @@ +/* Custom Zulip icons generated with ./tools/generate-custom-icon-webfont */ + +@font-face { + font-family: '{{fontName}}'; + src: {{{src}}}; + font-weight: normal; + font-style: normal; +} + +i{{baseSelector}} { + font-family: '{{fontName}}' !important; + font-style: normal !important; + font-weight: normal !important; + font-variant: normal !important; + text-transform: none; + font-size: inherit; + line-height: 100%; + + text-decoration: inherit; + text-rendering: auto; + display: inline-block; + speak: none; + + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +{{baseSelector}}::before { + font-family: 'zulip-icons' !important; + font-style: normal; + font-weight: normal !important; + vertical-align: top; +} + +{{#each codepoints}} +{{../baseSelector}}.{{../classPrefix}}{{@key}}::before { + content: "\\{{this}}"; +} +{{/each}} diff --git a/static/icons/fonts/zulip-icons.eot b/static/icons/fonts/zulip-icons.eot new file mode 100755 index 0000000000..7d3096bed2 Binary files /dev/null and b/static/icons/fonts/zulip-icons.eot differ diff --git a/static/icons/fonts/zulip-icons.svg b/static/icons/fonts/zulip-icons.svg new file mode 100755 index 0000000000..5fda42219c --- /dev/null +++ b/static/icons/fonts/zulip-icons.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/fonts/zulip-icons.ttf b/static/icons/fonts/zulip-icons.ttf new file mode 100755 index 0000000000..56eab56391 Binary files /dev/null and b/static/icons/fonts/zulip-icons.ttf differ diff --git a/static/icons/fonts/zulip-icons.woff b/static/icons/fonts/zulip-icons.woff new file mode 100755 index 0000000000..85c2d545b5 Binary files /dev/null and b/static/icons/fonts/zulip-icons.woff differ diff --git a/static/icons/fonts/zulip-icons.woff2 b/static/icons/fonts/zulip-icons.woff2 new file mode 100644 index 0000000000..f3d090fa4b Binary files /dev/null and b/static/icons/fonts/zulip-icons.woff2 differ diff --git a/static/icons/style.css b/static/icons/style.css new file mode 100755 index 0000000000..79caac9147 --- /dev/null +++ b/static/icons/style.css @@ -0,0 +1,39 @@ +/* Custom Zulip icons generated with ./tools/generate-custom-icon-webfont */ + +@font-face { + font-family: 'zulip-icons'; + src: url("fonts/zulip-icons.eot?d6a0487bb617e47dd22f6b30a327cfd4?#iefix") format("embedded-opentype"), +url("fonts/zulip-icons.woff2?d6a0487bb617e47dd22f6b30a327cfd4") format("woff2"), +url("fonts/zulip-icons.woff?d6a0487bb617e47dd22f6b30a327cfd4") format("woff"); + font-weight: normal; + font-style: normal; +} + +i.zulip-icon { + font-family: 'zulip-icons' !important; + font-style: normal !important; + font-weight: normal !important; + font-variant: normal !important; + text-transform: none; + font-size: inherit; + line-height: 100%; + + text-decoration: inherit; + text-rendering: auto; + display: inline-block; + speak: none; + + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.zulip-icon::before { + font-family: 'zulip-icons' !important; + font-style: normal; + font-weight: normal !important; + vertical-align: top; +} + +.zulip-icon.bot::before { + content: "\f101"; +} diff --git a/tools/generate-custom-icon-webfont b/tools/generate-custom-icon-webfont new file mode 100755 index 0000000000..97de41906b --- /dev/null +++ b/tools/generate-custom-icon-webfont @@ -0,0 +1,39 @@ +#!/usr/bin/env node + +const fs = require('fs'); +const webfontsGenerator = require('webfonts-generator'); + +fs.readdir('./static/assets/icons', function (err, files) { + if (err) { + console.error(err); + process.exit(1); + } + + // Filter out any non-SVG files and join by absolute path + const svg = files.filter(function (file) { + return file.slice(-4) === '.svg'; + }).map(function (file) { + return './static/assets/icons/' + file; + }); + + // Generate webfonts + const options = { + files: svg, + dest: './static/icons/fonts', + fontName: 'zulip-icons', + cssDest: './static/icons/style.css', + cssFontsUrl: 'fonts/', + templateOptions: { + classPrefix: '', + baseSelector: '.zulip-icon', + }, + cssTemplate: './static/icons/fonts/template.hbs', + }; + webfontsGenerator(options, function (err) { + if (err) { + console.error(err); + process.exit(1); + } + console.log('SUCCESS! Webfonts generated in /static/icons/fonts.'); + }); +}); diff --git a/tools/linter_lib/custom_check.py b/tools/linter_lib/custom_check.py index e1c2b491f9..ad88def0a7 100644 --- a/tools/linter_lib/custom_check.py +++ b/tools/linter_lib/custom_check.py @@ -199,7 +199,8 @@ def build_custom_checkers(by_lang): 'frontend_tests/zjsunit', 'frontend_tests/casper_lib/common.js', 'frontend_tests/node_tests', - 'static/js/debug.js']), + 'static/js/debug.js', + 'tools/generate-custom-icon-webfont']), 'description': 'console.log and similar should not be used in webapp'}, {'pattern': '[.]text\(["\'][a-zA-Z]', 'description': 'Strings passed to $().text should be wrapped in i18n.t() for internationalization'}, diff --git a/version.py b/version.py index f8e20955ed..091730709e 100644 --- a/version.py +++ b/version.py @@ -1,2 +1,2 @@ ZULIP_VERSION = "1.7.0+git" -PROVISION_VERSION = '11.2' +PROVISION_VERSION = '11.3' diff --git a/zproject/settings.py b/zproject/settings.py index 63b651dcdf..1a2666c63b 100644 --- a/zproject/settings.py +++ b/zproject/settings.py @@ -783,6 +783,7 @@ PIPELINE = { 'styles/portico-signin.css', 'styles/pygments.css', 'third/thirdparty-fonts.css', + 'icons/style.css', 'styles/fonts.css', ), 'output_filename': 'min/portico.css' @@ -799,6 +800,7 @@ PIPELINE = { 'third/bootstrap-notify/css/bootstrap-notify.css', 'third/spectrum/spectrum.css', 'third/thirdparty-fonts.css', + 'icons/style.css', 'styles/components.css', 'styles/app_components.css', 'styles/zulip.css', @@ -826,6 +828,7 @@ PIPELINE = { 'third/bootstrap-notify/css/bootstrap-notify.css', 'third/spectrum/spectrum.css', 'third/thirdparty-fonts.css', + 'icons/style.css', 'node_modules/katex/dist/katex.css', 'styles/components.css', 'styles/app_components.css',