Zulip 服务器和 Web 应用程序。开源团队聊天可帮助团队保持高效和专注。
Go to file
Daniil Fadeev 2f203f4de1 emails: Inline CSS in emails in build_email.
Previously, we had an architecture where CSS inlining for emails was
done at provision time in inline_email_css.py. This was necessary
because the library we were using for this, Premailer, was extremely
slow, and doing the inlining for every outgoing email would have been
prohibitively expensive.

Now that we've migrated to a more modern library that inlines the
small amount of CSS we have into emails nearly instantly, we are able
to remove the complex architecture built to work around Premailer
being slow and just do the CSS inlining as the final step in sending
each individual email.

This has several significant benefits:

* Removes a fiddly provisioning step that made the edit/refresh cycle
  for modifying email templates confusing; there's no longer a CSS
  inlining step that, if you forget to do it, results in your testing a
  stale variant of the email templates.
* Fixes internationalization problems related to translators working
  with pre-CSS-inlined emails, and then Django trying to apply the
  translators to the post-CSS-inlined version.
* Makes the send_custom_email pipeline simpler and easier to improve.

Signed-off-by: Daniil Fadeev <fadeevd@zulip.com>
2023-04-05 12:22:29 -07:00
.github ci: Enable XML coverage report to fix Codecov uploads. 2023-03-31 15:51:43 -07:00
.tx provision: Replace transifex-client with new transifex-cli. 2022-12-13 12:34:08 -08:00
.vscode
analytics test_classes: Add submit_realm_creation_form helper. 2023-03-27 15:44:42 -07:00
api_docs backend-auth: Add user ID to fetch api key responses. 2023-04-04 10:54:49 -07:00
confirmation registration: Create PreregistrationRealm object when creating realm. 2023-03-27 15:44:42 -07:00
corporate portico: Fix incorrect fallback contributors data type. 2023-03-27 22:33:54 -07:00
docs emails: Inline CSS in emails in build_email. 2023-04-05 12:22:29 -07:00
help help: Add a dedicated page on how to format spoiler blocks. 2023-03-30 09:39:35 -07:00
locale i18n: Update translation data from Transifex. 2023-03-15 15:57:26 -07:00
pgroonga migrations: Import BaseDatabaseSchemaEditor from its canonical module. 2023-03-05 14:46:28 -08:00
puppet cron: Move fetch-tor-exit-nodes to not on the hour. 2023-04-05 12:20:30 -07:00
requirements requirements: Upgrade Python requirements. 2023-04-03 22:39:21 -07:00
scripts emails: Inline CSS in emails in build_email. 2023-04-05 12:22:29 -07:00
static help: Add a dedicated page on how to format spoiler blocks. 2023-03-30 09:39:35 -07:00
stubs/taint actions: Split out zerver.actions.message_send. 2022-04-14 17:14:34 -07:00
templates emails: Inline CSS in emails in build_email. 2023-04-05 12:22:29 -07:00
tools emails: Inline CSS in emails in build_email. 2023-04-05 12:22:29 -07:00
var/puppeteer
web help: Fix TypeError on missing article pages. 2023-04-05 12:18:41 -07:00
zerver emails: Inline CSS in emails in build_email. 2023-04-05 12:22:29 -07:00
zilencer python: Update tuple handling pattern; returned by a delete() query. 2023-03-27 16:18:23 -07:00
zproject user_topics: Add a new endpoint to update visibility_policy. 2023-04-03 22:31:49 -07:00
.codecov.yml
.codespellignore codespell: Fix newly found typos. 2023-04-03 22:39:21 -07:00
.editorconfig
.eslintignore web: Move web app to ‘web’ directory. 2023-02-23 16:04:17 -08:00
.eslintrc.json eslint: Loosen no-use-before-define for TS like we do for JS. 2023-03-25 09:40:57 -07:00
.gitattributes
.gitignore dependencies: Switch to pnpm. 2023-03-20 15:48:29 -07:00
.gitlint gitlint-rules: Rename to gitlint_rules. 2023-03-03 18:02:38 -08:00
.mailmap mailmap: Add entry for rht. 2022-11-17 00:05:17 -08:00
.npmignore
.npmrc dependencies: Switch to pnpm. 2023-03-20 15:48:29 -07:00
.prettierignore dependencies: Switch to pnpm. 2023-03-20 15:48:29 -07:00
.pyre_configuration
.readthedocs.yaml readthedocs: Add a configuration file. 2023-02-03 16:36:54 -08:00
.sonarcloud.properties
CODE_OF_CONDUCT.md contributor docs: Add guidelines on moderating the Zulip community. 2022-12-02 16:57:41 -08:00
CONTRIBUTING.md docs: Remove paragraph about getting help finding issues in contributing. 2023-01-17 14:51:53 -08:00
Dockerfile-postgresql docker: Document the PostgreSQL Dockerfile build steps. 2022-04-26 18:00:00 -07:00
LICENSE
manage.py ruff: Fix SIM102 nested if statements. 2023-01-23 11:18:36 -08:00
NOTICE
package.json dependencies: Upgrade JavaScript dependencies. 2023-04-04 10:54:01 -07:00
pnpm-lock.yaml dependencies: Upgrade JavaScript dependencies. 2023-04-04 18:27:11 -07:00
prettier.config.js
pyproject.toml requirements: Upgrade Python requirements. 2023-04-03 22:39:21 -07:00
README.md README: Update Ruff badge. 2023-03-21 11:46:20 -07:00
SECURITY.md
stylelint.config.js styles: Use modern color notation. 2023-03-24 17:26:55 -07:00
tsconfig.json ts: Convert emoji.js to TypeScript. 2023-04-05 10:29:01 -07:00
Vagrantfile vagrant: Add Fedora 36 support. 2022-09-08 16:12:59 -07:00
version.py dependencies: Upgrade JavaScript dependencies. 2023-04-04 18:27:11 -07:00

Zulip overview

Zulip is an open-source team collaboration tool with unique topic-based threading that combines the best of email and chat to make remote work productive and delightful. Fortune 500 companies, leading open source projects, and thousands of other organizations use Zulip every day. Zulip is the only modern team chat app that is designed for both live and asynchronous conversations.

Zulip is built by a distributed community of developers from all around the world, with 74+ people who have each contributed 100+ commits. With over 1000 contributors merging over 500 commits a month, Zulip is the largest and fastest growing open source team chat project.

Come find us on the development community chat!

GitHub Actions build status coverage status Mypy coverage Ruff code style: black code style: prettier GitHub release docs Zulip chat Twitter GitHub Sponsors

Getting started

You may also be interested in reading our blog, and following us on Twitter and LinkedIn.

Zulip is distributed under the Apache 2.0 license.