CVE-2020-14194: Use noopener/noreferrer for external links.

We fixed the main issue of this form in CVE-2020-9444, but the audit
done at that time only included links found in rendered_markdown; this
change completes our audit for links with target=_blank anywhere in
the codebase.
This commit is contained in:
Tim Abbott
2020-05-25 20:15:21 -07:00
parent 2e2004b6c3
commit 6d0c39fd7e
39 changed files with 100 additions and 93 deletions

View File

@@ -5,7 +5,7 @@
</td> </td>
<td> <td>
<span class="emoji_image"> <span class="emoji_image">
<a href="{{source_url}}" target="_blank"> <a href="{{source_url}}" target="_blank" rel="noopener noreferrer">
<img src="{{source_url}}" alt="{{display_name}}" /> <img src="{{source_url}}" alt="{{display_name}}" />
</a> </a>
</span> </span>

View File

@@ -2,7 +2,11 @@
<tr class="invite_row"> <tr class="invite_row">
<td> <td>
{{#if is_multiuse}} {{#if is_multiuse}}
<span class="email"><a href="{{link_url}}" target="_blank">{{t 'Invite link'}}</a></span> <span class="email">
<a href="{{link_url}}" target="_blank" rel="noopener noreferrer">
{{t 'Invite link'}}
</a>
</span>
{{else}} {{else}}
<span class="email">{{email}}</span> <span class="email">{{email}}</span>
{{/if}} {{/if}}

View File

@@ -32,7 +32,7 @@
</span><span class="recipient_bar_controls no-select"> </span><span class="recipient_bar_controls no-select">
{{! exterior links (e.g. to a trac ticket) }} {{! exterior links (e.g. to a trac ticket) }}
{{#each topic_links}} {{#each topic_links}}
<a href="{{this}}" target="_blank" class="no-underline"> <a href="{{this}}" target="_blank" rel="noopener noreferrer" class="no-underline">
<i class="fa fa-external-link-square" aria-label="{{t 'External link' }}"></i> <i class="fa fa-external-link-square" aria-label="{{t 'External link' }}"></i>
</a> </a>
{{/each}} {{/each}}

View File

@@ -39,7 +39,7 @@
{{#if page_params.two_fa_enabled }} {{#if page_params.two_fa_enabled }}
<p for="two_factor_auth" class="inline-block title"> <p for="two_factor_auth" class="inline-block title">
{{t "Two factor authentication" }}: {{#if page_params.two_fa_enabled_user }}{{t "Enabled" }}{{else}}{{t "Disabled" }}{{/if}} {{t "Two factor authentication" }}: {{#if page_params.two_fa_enabled_user }}{{t "Enabled" }}{{else}}{{t "Disabled" }}{{/if}}
<a target="_blank" id="two_factor_auth" href="/account/two_factor/" title="{{t 'Setup two factor authentication' }}">[{{t "Setup" }}]</a> <a target="_blank" rel="noopener noreferrer" id="two_factor_auth" href="/account/two_factor/" title="{{t 'Setup two factor authentication' }}">[{{t "Setup" }}]</a>
</p> </p>
{{/if}} {{/if}}
@@ -99,7 +99,7 @@
<label for="old_password" class="title">{{t "Old password" }}</label> <label for="old_password" class="title">{{t "Old password" }}</label>
<input type="password" autocomplete="off" name="old_password" id="old_password" class="w-200 inline-block" value="" /> <input type="password" autocomplete="off" name="old_password" id="old_password" class="w-200 inline-block" value="" />
<div class="info"> <div class="info">
<a href="/accounts/password/reset/" class="sea-green" target="_blank">{{t "Forgotten it?" }}</a> <a href="/accounts/password/reset/" class="sea-green" target="_blank" rel="noopener noreferrer">{{t "Forgotten it?" }}</a>
</div> </div>
</div> </div>
@@ -160,7 +160,7 @@
&times; &times;
</span> </span>
<div id="user-avatar-source"> <div id="user-avatar-source">
<a href="https://en.gravatar.com/" target="_blank">{{t "Avatar from Gravatar" }}</a> <a href="https://en.gravatar.com/" target="_blank" rel="noopener noreferrer">{{t "Avatar from Gravatar" }}</a>
</div> </div>
</div> </div>
<input type="file" name="user_avatar_file_input" class="notvisible" id="user_avatar_file_input" value="{{t 'Upload profile picture' }}" /> <input type="file" name="user_avatar_file_input" class="notvisible" id="user_avatar_file_input" value="{{t 'Upload profile picture' }}" />

View File

@@ -11,7 +11,10 @@
<div id="password_confirmation"> <div id="password_confirmation">
<form id="api_key_form"> <form id="api_key_form">
<p>{{t "Please re-enter your password to confirm your identity." }} <p>{{t "Please re-enter your password to confirm your identity." }}
<a href="/accounts/password/reset/" target="_blank">{{t "Never had one? Forgotten it?" }}</a></p> <a href="/accounts/password/reset/" target="_blank" rel="noopener noreferrer">
{{t "Never had one? Forgotten it?" }}
</a>
</p>
<div class="control-group"> <div class="control-group">
<label for="password" class="control-label">{{t "Current password" }}</label> <label for="password" class="control-label">{{t "Current password" }}</label>
<input type="password" autocomplete="off" name="password" id="get_api_key_password" value="" /> <input type="password" autocomplete="off" name="password" id="get_api_key_password" value="" />

View File

@@ -2,7 +2,7 @@
<div class="bot-settings-form"> <div class="bot-settings-form">
{{#unless page_params.is_guest}} {{#unless page_params.is_guest}}
<div class="tip"> <div class="tip">
{{#tr this}}Looking for our <a href="/integrations" target="_blank">Integrations</a> or <a href="/api" target="_blank">API</a> documentation?{{/tr}} {{#tr this}}Looking for our <a href="/integrations" target="_blank" rel="noopener noreferrer">Integrations</a> or <a href="/api" rel="noopener noreferrer" target="_blank">API</a> documentation?{{/tr}}
</div> </div>
<div class="tip bot-settings-tip"></div> <div class="tip bot-settings-tip"></div>

View File

@@ -1,6 +1,6 @@
<div id="data-exports" class="settings-section" data-name="data-exports-admin"> <div id="data-exports" class="settings-section" data-name="data-exports-admin">
<h3>{{t "Data exports" }} <h3>{{t "Data exports" }}
<a href="/help/export-your-organization" target="_blank"> <a href="/help/export-your-organization" target="_blank" rel="noopener noreferrer">
<i class="fa fa-question-circle-o" aria-hidden="true"></i> <i class="fa fa-question-circle-o" aria-hidden="true"></i>
</a> </a>
</h3> </h3>
@@ -10,7 +10,7 @@
{{t 'Depending on the size of your organization, an export can take anywhere from seconds to an hour.' }} {{t 'Depending on the size of your organization, an export can take anywhere from seconds to an hour.' }}
</p> </p>
<p> <p>
{{#tr this}}<a href="/help/export-your-organization" target="_blank">Click here</a> to learn about exporting private streams and messages.{{/tr}} {{#tr this}}<a href="/help/export-your-organization" target="_blank" rel="noopener noreferrer">Click here</a> to learn about exporting private streams and messages.{{/tr}}
{{t 'Note that organizations are limited to five exports per week.' }} {{t 'Note that organizations are limited to five exports per week.' }}
</p> </p>

View File

@@ -1,6 +1,6 @@
<div id="admin-deactivated-users-list" class="settings-section" data-name="deactivated-users-admin"> <div id="admin-deactivated-users-list" class="settings-section" data-name="deactivated-users-admin">
<h3 class="inline-block">{{t "Deactivated users" }} <h3 class="inline-block">{{t "Deactivated users" }}
<a href="/help/deactivate-or-reactivate-a-user" target="_blank"> <a href="/help/deactivate-or-reactivate-a-user" target="_blank" rel="noopener noreferrer">
<i class="fa fa-question-circle-o" aria-hidden="true"></i> <i class="fa fa-question-circle-o" aria-hidden="true"></i>
</a> </a>
</h3> </h3>

View File

@@ -31,7 +31,7 @@
<div class="input-group"> <div class="input-group">
<label for="demote_inactive_streams" class="dropdown-title">{{t "Demote inactive streams" }} <label for="demote_inactive_streams" class="dropdown-title">{{t "Demote inactive streams" }}
<a href="/help/manage-inactive-streams" target="_blank"> <a href="/help/manage-inactive-streams" target="_blank" rel="noopener noreferrer">
<i class="fa fa-question-circle-o" aria-hidden="true"></i> <i class="fa fa-question-circle-o" aria-hidden="true"></i>
</a> </a>
</label> </label>

View File

@@ -36,7 +36,7 @@
</ul> </ul>
<p> <p>
{{#tr this}} {{#tr this}}
More details are available <a href="/help/add-a-custom-linkification-filter" target="_blank">in the Help Center article</a>. More details are available <a href="/help/add-a-custom-linkification-filter" target="_blank" rel="noopener noreferrer">in the Help Center article</a>.
{{/tr}} {{/tr}}
</p> </p>

View File

@@ -68,7 +68,7 @@
<div class="input-group"> <div class="input-group">
<label for="realm_waiting_period_setting" class="dropdown-title"> <label for="realm_waiting_period_setting" class="dropdown-title">
{{t "Waiting period before new members turn into full members" }} {{t "Waiting period before new members turn into full members" }}
<a href="/help/restrict-permissions-of-new-members" target="_blank"> <a href="/help/restrict-permissions-of-new-members" target="_blank" rel="noopener noreferrer">
<i class="fa fa-question-circle-o" aria-hidden="true"></i> <i class="fa fa-question-circle-o" aria-hidden="true"></i>
</a> </a>
</label> </label>
@@ -132,7 +132,7 @@
<div class="input-group"> <div class="input-group">
<label for="realm_email_address_visibility">{{t "Who can access user email addresses" }} <label for="realm_email_address_visibility">{{t "Who can access user email addresses" }}
<a href="/help/restrict-visibility-of-email-addresses" target="_blank"> <a href="/help/restrict-visibility-of-email-addresses" target="_blank" rel="noopener noreferrer">
<i class="fa fa-question-circle-o" aria-hidden="true"></i> <i class="fa fa-question-circle-o" aria-hidden="true"></i>
</a> </a>
</label> </label>

View File

@@ -5,7 +5,7 @@
<div id="org-org-profile" class="org-subsection-parent"> <div id="org-org-profile" class="org-subsection-parent">
<div class="subsection-header"> <div class="subsection-header">
<h3>{{t "Organization profile" }} <h3>{{t "Organization profile" }}
<a href="/help/create-your-organization-profile" target="_blank"> <a href="/help/create-your-organization-profile" target="_blank" rel="noopener noreferrer">
<i class="fa fa-question-circle-o" aria-hidden="true"></i> <i class="fa fa-question-circle-o" aria-hidden="true"></i>
</a> </a>
</h3> </h3>
@@ -45,20 +45,20 @@
id="realm_icon_delete_button">{{t 'Delete profile picture' }}</button> id="realm_icon_delete_button">{{t 'Delete profile picture' }}</button>
</div> </div>
</div> </div>
<a href="/login/?preview=true" target="_blank" class="button rounded sea-green w-200 block" id="id_org_profile_preview"> <a href="/login/?preview=true" target="_blank" rel="noopener noreferrer" class="button rounded sea-green w-200 block" id="id_org_profile_preview">
{{t 'Preview organization profile' }} {{t 'Preview organization profile' }}
<i class="fa fa-external-link" aria-hidden="true" title="{{t 'Preview organization profile' }}"></i> <i class="fa fa-external-link" aria-hidden="true" title="{{t 'Preview organization profile' }}"></i>
</a> </a>
<div class="subsection-header"> <div class="subsection-header">
<h3>{{t "Organization logo" }} <h3>{{t "Organization logo" }}
<a href="/help/create-your-organization-profile#add-a-wide-logo" target="_blank"> <a href="/help/create-your-organization-profile#add-a-wide-logo" target="_blank" rel="noopener noreferrer">
<i class="fa fa-question-circle-o" aria-hidden="true"></i> <i class="fa fa-question-circle-o" aria-hidden="true"></i>
</a> </a>
</h3> </h3>
<div> <div>
{{#unless plan_includes_wide_organization_logo}} {{#unless plan_includes_wide_organization_logo}}
<a href="/upgrade" class="upgrade-tip" target="_blank"> <a href="/upgrade" class="upgrade-tip" target="_blank" rel="noopener noreferrer">
{{upgrade_text_for_wide_organization_logo}} {{upgrade_text_for_wide_organization_logo}}
</a> </a>
{{/unless}} {{/unless}}

View File

@@ -6,7 +6,7 @@
<div id="org-msg-editing" class="org-subsection-parent"> <div id="org-msg-editing" class="org-subsection-parent">
<div class="subsection-header"> <div class="subsection-header">
<h3>{{t "Message editing" }} <h3>{{t "Message editing" }}
<a href="/help/configure-message-editing-and-deletion" target="_blank"> <a href="/help/configure-message-editing-and-deletion" target="_blank" rel="noopener noreferrer">
<i class="fa fa-question-circle-o" aria-hidden="true"></i> <i class="fa fa-question-circle-o" aria-hidden="true"></i>
</a> </a>
</h3> </h3>
@@ -191,7 +191,7 @@
{{/each}} {{/each}}
</select> </select>
<div id="google_hangouts_domain"> <div id="google_hangouts_domain">
<label>{{t 'Domain for your <a href="https://gsuite.google.com" target="_blank">G Suite team</a> (required)' }}:</label> <label>{{t 'Domain for your <a href="https://gsuite.google.com" target="_blank" rel="noopener noreferrer">G Suite team</a> (required)' }}:</label>
<input type="text" id="id_realm_google_hangouts_domain" <input type="text" id="id_realm_google_hangouts_domain"
name="realm_google_hangouts_domain" name="realm_google_hangouts_domain"
autocomplete="off" autocomplete="off"

View File

@@ -1,4 +1,4 @@
<span> <span>
{{#tr this}}Organization using __percent_used__% of __upload_quota__.{{/tr}} {{#tr this}}Organization using __percent_used__% of __upload_quota__.{{/tr}}
{{#if show_upgrade_message}}{{#tr this}}<a href="/upgrade" target="_blank">Upgrade</a> for more space.{{/tr}}{{/if}} {{#if show_upgrade_message}}{{#tr this}}<a href="/upgrade" target="_blank" rel="noopener noreferrer">Upgrade</a> for more space.{{/tr}}{{/if}}
</span> </span>

View File

@@ -24,7 +24,7 @@
{{t "Stream permissions" }} {{t "Stream permissions" }}
</div> </div>
<div class="stream-creation-info"> <div class="stream-creation-info">
{{t 'These settings are explained in detail in the <a target="_blank" href="/help/stream-permissions">help center</a>.'}} {{t 'These settings are explained in detail in the <a target="_blank" rel="noopener noreferrer" href="/help/stream-permissions">help center</a>.'}}
</div> </div>
{{> stream_types is_public=true }} {{> stream_types is_public=true }}

View File

@@ -74,7 +74,7 @@
<div class="stream-email-box" {{#unless sub.email_address}}style="display: none;"{{/unless}}> <div class="stream-email-box" {{#unless sub.email_address}}style="display: none;"{{/unless}}>
<label class="sub_settings_title"> <label class="sub_settings_title">
{{t "Email address" }} {{t "Email address" }}
<a href="/help/message-a-stream-by-email" target="_blank"> <a href="/help/message-a-stream-by-email" target="_blank" rel="noopener noreferrer">
<i class="fa fa-question-circle-o" aria-hidden="true"></i> <i class="fa fa-question-circle-o" aria-hidden="true"></i>
</a> </a>
</label> </label>

View File

@@ -31,7 +31,7 @@
<div class="nothing-selected"> <div class="nothing-selected">
{{#if can_create_streams}} {{#if can_create_streams}}
<button type="button" class="create_stream_button button small rounded">{{t 'Create stream' }}</button> <button type="button" class="create_stream_button button small rounded">{{t 'Create stream' }}</button>
<span>{{t 'First time? Read our <a href="/help/getting-your-organization-started-with-zulip#create-streams" target="_blank">guidelines</a> for creating and naming streams.' }}</span> <span>{{t 'First time? Read our <a href="/help/getting-your-organization-started-with-zulip#create-streams" target="_blank" rel="noopener noreferrer">guidelines</a> for creating and naming streams.' }}</span>
{{/if}} {{/if}}
</div> </div>
<div class="settings" data-simplebar data-simplebar-auto-hide="false"> <div class="settings" data-simplebar data-simplebar-auto-hide="false">

View File

@@ -1,7 +1,7 @@
{{#with attachment}} {{#with attachment}}
<tr class="uploaded_file_row" id="{{name}}" data-attachment-id="{{id}}"> <tr class="uploaded_file_row" id="{{name}}" data-attachment-id="{{id}}">
<td> <td>
<a type="submit" href="/user_uploads/{{path_id}}" target="_blank" title="{{t 'View file' }}"> <a type="submit" href="/user_uploads/{{path_id}}" target="_blank" rel="noopener noreferrer" title="{{t 'View file' }}">
{{ name }} {{ name }}
</a> </a>
</td> </td>

View File

@@ -9,7 +9,7 @@
{{#unless is_guest}} {{#unless is_guest}}
<p> <p>
{{#tr this}}User groups allow you to <a href="/help/mention-a-user-or-group" target="_blank">mention</a> multiple users at once. When you mention a user group, everyone in the group is notified as if they were individually mentioned.{{/tr}} {{#tr this}}User groups allow you to <a href="/help/mention-a-user-or-group" target="_blank" rel="noopener noreferrer">mention</a> multiple users at once. When you mention a user group, everyone in the group is notified as if they were individually mentioned.{{/tr}}
</p> </p>
{{#if (or is_admin (eq realm_user_group_edit_policy USER_GROUP_EDIT_POLICY_MEMBERS))}} {{#if (or is_admin (eq realm_user_group_edit_policy USER_GROUP_EDIT_POLICY_MEMBERS))}}
<form class="form-horizontal admin-user-group-form"> <form class="form-horizontal admin-user-group-form">

View File

@@ -50,9 +50,9 @@
<div class="input" contenteditable="false" style="display: none;"></div> <div class="input" contenteditable="false" style="display: none;"></div>
</div> </div>
{{else if this.is_link}} {{else if this.is_link}}
<a href="{{this.value}}" target="_blank" class="value">{{this.value}}</a> <a href="{{this.value}}" target="_blank" rel="noopener noreferrer" class="value">{{this.value}}</a>
{{else if this.is_external_account}} {{else if this.is_external_account}}
<a href="{{this.link}}" target="_blank" class="value">{{this.value}}</a> <a href="{{this.link}}" target="_blank" rel="noopener noreferrer" class="value">{{this.value}}</a>
{{else}} {{else}}
{{#if this.rendered_value}} {{#if this.rendered_value}}
<div class="value rendered_markdown">{{rendered_markdown this.rendered_value}}</div> <div class="value rendered_markdown">{{rendered_markdown this.rendered_value}}</div>

View File

@@ -1,8 +1,8 @@
<span class="label">realm</span> <span class="label">realm</span>
<h3><img src="{{ realm_icon_url(realm) }}" class="support-realm-icon"> {{ realm.name }}</h3> <h3><img src="{{ realm_icon_url(realm) }}" class="support-realm-icon"> {{ realm.name }}</h3>
<b>URL</b>: <a target="_blank" href="{{ realm.uri }}">{{ realm.uri }}</a> | <b>URL</b>: <a target="_blank" rel="noopener noreferrer" href="{{ realm.uri }}">{{ realm.uri }}</a> |
<a target="_blank" href="/stats/realm/{{ realm.string_id }}/">stats</a> | <a target="_blank" rel="noopener noreferrer" href="/stats/realm/{{ realm.string_id }}/">stats</a> |
<a target="_blank" href="/realm_activity/{{ realm.string_id }}/">activity</a><br> <a target="_blank" rel="noopener noreferrer" href="/realm_activity/{{ realm.string_id }}/">activity</a><br>
<b>Date created</b>: {{ realm.date_created|timesince }} ago<br> <b>Date created</b>: {{ realm.date_created|timesince }} ago<br>
<b>Admins</b>: {{ realm_admin_emails(realm) }} <b>Admins</b>: {{ realm_admin_emails(realm) }}
<a title="Copy emails" class="copy-button" data-copytext="{{ realm_admin_emails(realm) }}"> <a title="Copy emails" class="copy-button" data-copytext="{{ realm_admin_emails(realm) }}">

View File

@@ -40,7 +40,7 @@ the registration flow has its own (nearly identical) copy of the fields below in
<input id="id_terms" class="required" type="checkbox" name="terms" <input id="id_terms" class="required" type="checkbox" name="terms"
{% if form.terms.value() %}checked="checked"{% endif %} /> {% if form.terms.value() %}checked="checked"{% endif %} />
<span></span> <span></span>
{% trans %}I agree to the <a href="{{ root_domain_uri }}/terms" target="_blank">Terms of Service</a>.{% endtrans %} {% trans %}I agree to the <a href="{{ root_domain_uri }}/terms" target="_blank" rel="noopener noreferrer">Terms of Service</a>.{% endtrans %}
</label> </label>
{% if form.terms.errors %} {% if form.terms.errors %}
{% for error in form.terms.errors %} {% for error in form.terms.errors %}

View File

@@ -13,7 +13,7 @@
<i class="fa fa-exclamation-circle" aria-hidden="true"></i> <i class="fa fa-exclamation-circle" aria-hidden="true"></i>
{% trans %} {% trans %}
Some older messages are unavailable. Some older messages are unavailable.
<a href="/plans/" target="_blank">Upgrade your organization</a> <a href="/plans/" target="_blank" rel="noopener noreferrer">Upgrade your organization</a>
to access your full message history. to access your full message history.
{% endtrans %} {% endtrans %}
</p> </p>
@@ -24,7 +24,7 @@
{% trans %} {% trans %}
End of results from your End of results from your
<a href="/help/search-for-messages#searching-shared-history" <a href="/help/search-for-messages#searching-shared-history"
target="_blank">personal history</a>. target="_blank" rel="noopener noreferrer">personal history</a>.
Consider <a class="search-shared-history" href="">searching all public streams</a>. Consider <a class="search-shared-history" href="">searching all public streams</a>.
{% endtrans %} {% endtrans %}
</p> </p>

View File

@@ -78,7 +78,7 @@
We recommend that We recommend that
you <a class="webathena_login">give Zulip the ability to mirror the messages for you via you <a class="webathena_login">give Zulip the ability to mirror the messages for you via
WebAthena</a>. If you'd prefer, you can instead WebAthena</a>. If you'd prefer, you can instead
<a href="/zephyr-mirror" target="_blank">run the <a href="/zephyr-mirror" target="_blank" rel="noopener noreferrer">run the
Zephyr mirror script yourself</a> in a screen Zephyr mirror script yourself</a> in a screen
session. session.
</span> </span>

View File

@@ -308,6 +308,6 @@
</table> </table>
</div> </div>
<hr/> <hr/>
<a href="/help/keyboard-shortcuts" target="_blank">{% trans %}Detailed keyboard shortcuts documentation{% endtrans %}</a> <a href="/help/keyboard-shortcuts" target="_blank" rel="noopener noreferrer">{% trans %}Detailed keyboard shortcuts documentation{% endtrans %}</a>
</div> </div>
</div> </div>

View File

@@ -10,7 +10,7 @@
<div class="title">{{ _('Pan &amp; Zoom') }}</div> <div class="title">{{ _('Pan &amp; Zoom') }}</div>
<div class="status" data-disabled="{{ _('Disabled') }}" data-enabled="{{ _('Enabled') }}"></div> <div class="status" data-disabled="{{ _('Disabled') }}" data-enabled="{{ _('Enabled') }}"></div>
</div> </div>
<a class="button small open" target="_blank">{{ _('Open') }}</a> <a class="button small open" rel="noopener noreferrer" target="_blank">{{ _('Open') }}</a>
<a class="button small download" download>{{ _('Download') }}</a> <a class="button small download" download>{{ _('Download') }}</a>
</div> </div>
<div class="clear-float"></div> <div class="clear-float"></div>

View File

@@ -26,7 +26,7 @@
</tr> </tr>
<tr> <tr>
<td>[Zulip website](https://zulip.org) (or <kbd>Ctrl + Shift + L</kbd>)</td> <td>[Zulip website](https://zulip.org) (or <kbd>Ctrl + Shift + L</kbd>)</td>
<td class="rendered_markdown"><a href="https://zulip.org" target="_blank">Zulip website</a></td> <td class="rendered_markdown"><a href="https://zulip.org" target="_blank" rel="noopener noreferrer">Zulip website</a></td>
</tr> </tr>
<tr> <tr>
<td>* Milk<br/> <td>* Milk<br/>
@@ -61,7 +61,7 @@
</td> </td>
</tr> </tr>
<tr> <tr>
<td>:heart: (and <a href="http://www.emoji-cheat-sheet.com/" target="_blank">many others</a>, from the <a href="https://code.google.com/p/noto/" target="_blank">Noto Project</a>)</td> <td>:heart: (and <a href="http://www.emoji-cheat-sheet.com/" target="_blank" rel="noopener noreferrer">many others</a>, from the <a href="https://code.google.com/p/noto/" target="_blank" rel="noopener noreferrer">Noto Project</a>)</td>
<td class="rendered_markdown"><img alt=":heart:" class="emoji" src="/static/generated/emoji/images/emoji/heart.png" title=":heart:" /></td> <td class="rendered_markdown"><img alt=":heart:" class="emoji" src="/static/generated/emoji/images/emoji/heart.png" title=":heart:" /></td>
</tr> </tr>
<tr> <tr>
@@ -113,7 +113,7 @@ def zulip():
</tr> </tr>
<tr> <tr>
<td colspan="2">{% trans %}To add syntax highlighting to a multi-line code block, <td colspan="2">{% trans %}To add syntax highlighting to a multi-line code block,
add the language's <b>first</b> <a target="_blank" href="http://pygments.org/docs/lexers/">Pygments short name</a> add the language's <b>first</b> <a target="_blank" rel="noopener noreferrer" href="http://pygments.org/docs/lexers/">Pygments short name</a>
after the first set of back-ticks. after the first set of back-ticks.
You can also make a code block by indenting each line with 4 spaces.{% endtrans %}</td> You can also make a code block by indenting each line with 4 spaces.{% endtrans %}</td>
</tr> </tr>
@@ -143,9 +143,9 @@ Quoted block
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="rendered_markdown" colspan="2">{% trans %}You can also make <a target="_blank" <td class="rendered_markdown" colspan="2">{% trans %}You can also make <a target="_blank" rel="noopener noreferrer"
href="https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#wiki-tables">tables</a> href="https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#wiki-tables">tables</a>
with this <a target="_blank" with this <a target="_blank" rel="noopener noreferrer"
href="https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#wiki-tables">Markdown-ish href="https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#wiki-tables">Markdown-ish
table syntax</a>.{% endtrans %}</td> table syntax</a>.{% endtrans %}</td>
</tr> </tr>
@@ -153,6 +153,6 @@ Quoted block
</table> </table>
</div> </div>
<hr/> <hr/>
<a href="/help/format-your-message-using-markdown" target="_blank">Detailed message formatting documentation</a> <a href="/help/format-your-message-using-markdown" target="_blank" rel="noopener noreferrer">Detailed message formatting documentation</a>
</div> </div>
</div> </div>

View File

@@ -80,7 +80,7 @@
</li> </li>
<li class="divider"></li> <li class="divider"></li>
<li role="presentation"> <li role="presentation">
<a href="/help" target="_blank" role="menuitem"> <a href="/help" target="_blank" rel="noopener noreferrer" role="menuitem">
<i class="fa fa-question-circle" aria-hidden="true"></i> {{ _('Help center') }} <i class="fa fa-question-circle" aria-hidden="true"></i> {{ _('Help center') }}
</a> </a>
</li> </li>
@@ -101,23 +101,23 @@
</li> </li>
<li class="divider" role="presentation"></li> <li class="divider" role="presentation"></li>
<li role="presentation"> <li role="presentation">
<a href="{{ apps_page_url }}" target="_blank" role="menuitem"> <a href="{{ apps_page_url }}" target="_blank" rel="noopener noreferrer" role="menuitem">
<i class="fa fa-desktop" aria-hidden="true"></i> {{ _('Desktop & mobile apps') }} <i class="fa fa-desktop" aria-hidden="true"></i> {{ _('Desktop & mobile apps') }}
</a> </a>
</li> </li>
<li role="presentation"> <li role="presentation">
<a href="/integrations" target="_blank" role="menuitem"> <a href="/integrations" target="_blank" rel="noopener noreferrer" role="menuitem">
<i class="fa fa-github" aria-hidden="true"></i> {{ _('Integrations') }} <i class="fa fa-github" aria-hidden="true"></i> {{ _('Integrations') }}
</a> </a>
</li> </li>
<li role="presentation"> <li role="presentation">
<a href="/api" target="_blank" role="menuitem"> <a href="/api" target="_blank" rel="noopener noreferrer" role="menuitem">
<i class="fa fa-sitemap" aria-hidden="true"></i> {{ _('API documentation') }} <i class="fa fa-sitemap" aria-hidden="true"></i> {{ _('API documentation') }}
</a> </a>
</li> </li>
{% if not is_guest %} {% if not is_guest %}
<li role="presentation"> <li role="presentation">
<a href="/stats" target="_blank" role="menuitem"> <a href="/stats" target="_blank" rel="noopener noreferrer" role="menuitem">
<i class="fa fa-bar-chart" aria-hidden="true"></i> <i class="fa fa-bar-chart" aria-hidden="true"></i>
<span>{{ _('Statistics') }}</span> <span>{{ _('Statistics') }}</span>
</a> </a>
@@ -125,14 +125,14 @@
{% endif %} {% endif %}
{% if show_plans %} {% if show_plans %}
<li role="presentation"> <li role="presentation">
<a href="/plans" target="_blank" role="menuitem"> <a href="/plans" target="_blank" rel="noopener noreferrer" role="menuitem">
<i class="fa fa-rocket" aria-hidden="true"></i> {{ _('Plans and pricing') }} <i class="fa fa-rocket" aria-hidden="true"></i> {{ _('Plans and pricing') }}
</a> </a>
</li> </li>
{% endif %} {% endif %}
{% if show_billing %} {% if show_billing %}
<li role="presentation"> <li role="presentation">
<a href="/billing" target="_blank" role="menuitem"> <a href="/billing" target="_blank" rel="noopener noreferrer" role="menuitem">
<i class="fa fa-credit-card" aria-hidden="true"></i> {{ _('Billing') }} <i class="fa fa-credit-card" aria-hidden="true"></i> {{ _('Billing') }}
</a> </a>
</li> </li>

View File

@@ -21,7 +21,7 @@
<span class="close" data-dismiss="alert" aria-label="{{ _('Close') }}">&times;</span> <span class="close" data-dismiss="alert" aria-label="{{ _('Close') }}">&times;</span>
<div data-step="1"> <div data-step="1">
{% trans %}Zulip needs to send email to confirm users' addresses and send notifications.{% endtrans %} {% trans %}Zulip needs to send email to confirm users' addresses and send notifications.{% endtrans %}
<a class="alert-link" href="https://zulip.readthedocs.io/en/latest/production/email.html" target="_blank"> <a class="alert-link" href="https://zulip.readthedocs.io/en/latest/production/email.html" target="_blank" rel="noopener noreferrer">
{% trans %}See how to configure email.{% endtrans %} {% trans %}See how to configure email.{% endtrans %}
</a> </a>
</div> </div>
@@ -31,7 +31,7 @@
<div data-step="1"> <div data-step="1">
{% trans %} {% trans %}
You are using an old version of the Zulip desktop app with known security bugs. You are using an old version of the Zulip desktop app with known security bugs.
<a class="alert-link" href="https://zulipchat.com/apps" target="_blank"> <a class="alert-link" href="https://zulipchat.com/apps" target="_blank" rel="noopener noreferrer">
Download the latest version. Download the latest version.
</a> </a>
{% endtrans %} {% endtrans %}

View File

@@ -113,6 +113,6 @@
{% endtrans %} {% endtrans %}
</p> </p>
<hr/> <hr/>
<a href="/help/search-for-messages#search-operators" target="_blank">{% trans %}Detailed search operators documentation{% endtrans %}</a> <a href="/help/search-for-messages#search-operators" target="_blank" rel="noopener noreferrer">{% trans %}Detailed search operators documentation{% endtrans %}</a>
</div> </div>
</div> </div>

View File

@@ -22,7 +22,7 @@
<div class="cta"> <div class="cta">
<h1>Zulip for <span class="platform"></span></h1> <h1>Zulip for <span class="platform"></span></h1>
<p class="description"></p> <p class="description"></p>
<p class="download-instructions">For download instructions, go to the <a class="silver bold" href="/help/desktop-app-install-guide" target="_blank">desktop app install guide</a>.</p> <p class="download-instructions">For download instructions, go to the <a class="silver bold" href="/help/desktop-app-install-guide" target="_blank" rel="noopener noreferrer">desktop app install guide</a>.</p>
<a class="link no-action" href=""><span class="button green">Download Zulip for <span class="platform"></span></span></a> <a class="link no-action" href=""><span class="button green">Download Zulip for <span class="platform"></span></span></a>
<span id="download-android-apk"><a href="https://github.com/zulip/zulip-mobile/releases/latest">or manually download APK</a></span> <span id="download-android-apk"><a href="https://github.com/zulip/zulip-mobile/releases/latest">or manually download APK</a></span>
</div> </div>

View File

@@ -37,7 +37,7 @@
{% else %} {% else %}
<p> <p>
Please have a look at our Please have a look at our
<a target="_blank" href="https://zulip.readthedocs.io/en/latest/subsystems/email.html#development-and-testing"> <a target="_blank" rel="noopener noreferrer" href="https://zulip.readthedocs.io/en/latest/subsystems/email.html#development-and-testing">
setup guide</a> for forwarding emails sent in development setup guide</a> for forwarding emails sent in development
environment to an email account. environment to an email account.
</p> </p>

View File

@@ -49,7 +49,7 @@
<br/> <br/>
<div class="alert alert-info"> <div class="alert alert-info">
You must setup SMTP as described You must setup SMTP as described
<a target="_blank" href="https://zulip.readthedocs.io/en/latest/subsystems/email.html#development-and-testing"> <a target="_blank" rel="noopener noreferrer" href="https://zulip.readthedocs.io/en/latest/subsystems/email.html#development-and-testing">
here</a> first before enabling this. here</a> first before enabling this.
</div> </div>
</form> </form>

View File

@@ -94,7 +94,7 @@
<p>Communicate as efficiently as you use your favorite <p>Communicate as efficiently as you use your favorite
text editor. Anything you can do with a mouse, you text editor. Anything you can do with a mouse, you
can do even faster from the keyboard. can do even faster from the keyboard.
<a class="cta" href="/help/keyboard-shortcuts" target="_blank"> <a class="cta" href="/help/keyboard-shortcuts" target="_blank" rel="noopener noreferrer">
Learn more about keyboard shortcuts.</a> Learn more about keyboard shortcuts.</a>
</p> </p>
</div> </div>
@@ -104,7 +104,7 @@
<section> <section>
<h2>Apps, Integrations, and API</h2> <h2>Apps, Integrations, and API</h2>
<a class="feature-block" href="/integrations" target="_blank"> <a class="feature-block" href="/integrations" target="_blank" rel="noopener noreferrer">
<h3>INTEGRATIONS</h3> <h3>INTEGRATIONS</h3>
<p> <p>
Get alerts and updates from your favorite services with Get alerts and updates from your favorite services with
@@ -112,7 +112,7 @@
Jenkins, and more. Jenkins, and more.
</p> </p>
</a> </a>
<a class="feature-block" href="/api" target="_blank"> <a class="feature-block" href="/api" target="_blank" rel="noopener noreferrer">
<h3>API</h3> <h3>API</h3>
<p> <p>
Want to roll your own notifications? We've got a Want to roll your own notifications? We've got a
@@ -120,12 +120,12 @@
integrations—both sending and receiving—a snap! integrations—both sending and receiving—a snap!
</p> </p>
</a> </a>
<a class="feature-block" href="/apps" target="_blank"> <a class="feature-block" href="/apps" target="_blank" rel="noopener noreferrer">
<h3>MOBILE APPS</h3> <h3>MOBILE APPS</h3>
<p>Keep up while on the go with our native quality iOS and <p>Keep up while on the go with our native quality iOS and
Android apps.</p> Android apps.</p>
</a> </a>
<a class="feature-block" href="/apps" target="_blank"> <a class="feature-block" href="/apps" target="_blank" rel="noopener noreferrer">
<h3>DESKTOP APPS</h3> <h3>DESKTOP APPS</h3>
<p>Prefer Zulip in its own window and rich, OS-level <p>Prefer Zulip in its own window and rich, OS-level
notifications? Enjoy Zulip on your desktop.</p> notifications? Enjoy Zulip on your desktop.</p>
@@ -139,14 +139,14 @@
<section> <section>
<h2>And everything else you need...</h2> <h2>And everything else you need...</h2>
<a class="feature-block" href="/security" target="_blank"> <a class="feature-block" href="/security" target="_blank" rel="noopener noreferrer">
<h3>ENTERPRISE-GRADE SECURITY</h3> <h3>ENTERPRISE-GRADE SECURITY</h3>
<p> <p>
Zulip is used by some of the most security-conscious Zulip is used by some of the most security-conscious
organizations in the world. organizations in the world.
</p> </p>
</a> </a>
<a class="feature-block" href="/help/search-for-messages" target="_blank"> <a class="feature-block" href="/help/search-for-messages" target="_blank" rel="noopener noreferrer">
<h3>FULL-TEXT FULL-HISTORY SEARCH</h3> <h3>FULL-TEXT FULL-HISTORY SEARCH</h3>
<p> <p>
Search is both snappy and smart, helping you look for Search is both snappy and smart, helping you look for
@@ -154,31 +154,31 @@
search operators for fine-grained control. search operators for fine-grained control.
</p> </p>
</a> </a>
<a class="feature-block" href="/help/stream-permissions" target="_blank"> <a class="feature-block" href="/help/stream-permissions" target="_blank" rel="noopener noreferrer">
<h3>HISTORY</h3> <h3>HISTORY</h3>
<p>Join a stream and see its history, so even new team <p>Join a stream and see its history, so even new team
members are never out of the loop.</p> members are never out of the loop.</p>
</a> </a>
<a class="feature-block" href="/help/star-a-message" target="_blank"> <a class="feature-block" href="/help/star-a-message" target="_blank" rel="noopener noreferrer">
<h3>STARRED MESSAGES</h3> <h3>STARRED MESSAGES</h3>
<p>Keep a todo list of messages to come back to, or keep <p>Keep a todo list of messages to come back to, or keep
track of interesting conversations.</p> track of interesting conversations.</p>
</a> </a>
<a class="feature-block" href="/help/analytics" target="_blank"> <a class="feature-block" href="/help/analytics" target="_blank" rel="noopener noreferrer">
<h3>STATISTICS</h3> <h3>STATISTICS</h3>
<p>Zulip has a powerful set of analytics available to <p>Zulip has a powerful set of analytics available to
help you see how your organization communicates.</p> help you see how your organization communicates.</p>
</a> </a>
<a class="feature-block" href="/help/private-messages" target="_blank"> <a class="feature-block" href="/help/private-messages" target="_blank" rel="noopener noreferrer">
<h3>ONE-ON-ONE AND GROUP PRIVATE CONVERSATIONS</h3> <h3>ONE-ON-ONE AND GROUP PRIVATE CONVERSATIONS</h3>
<p>Lightweight private conversations with one or as many people as you need.</p> <p>Lightweight private conversations with one or as many people as you need.</p>
</a> </a>
<a class="feature-block" href="/help/status-and-availability" target="_blank"> <a class="feature-block" href="/help/status-and-availability" target="_blank" rel="noopener noreferrer">
<h3>TEAM AVAILABILITY</h3> <h3>TEAM AVAILABILITY</h3>
<p>See who is currently online at a glance.</p> <p>See who is currently online at a glance.</p>
</a> </a>
<a class="feature-block" href="/help/stream-permissions" target="_blank"> <a class="feature-block" href="/help/stream-permissions" target="_blank" rel="noopener noreferrer">
<h3>PRIVATE STREAMS</h3> <h3>PRIVATE STREAMS</h3>
<p>Enjoy the benefits of threaded conversations while <p>Enjoy the benefits of threaded conversations while
controlling your audience and privacy.</p> controlling your audience and privacy.</p>
@@ -188,7 +188,7 @@
<p>We're always receiving messages for you, even when <p>We're always receiving messages for you, even when
you're logged out or away from your computer.</p> you're logged out or away from your computer.</p>
</div> </div>
<a class="feature-block" href="/help/edit-or-delete-a-message" target="_blank"> <a class="feature-block" href="/help/edit-or-delete-a-message" target="_blank" rel="noopener noreferrer">
<h3>MESSAGE EDITING</h3> <h3>MESSAGE EDITING</h3>
<p>Don't worry, you can always fix that typo, either in <p>Don't worry, you can always fix that typo, either in
the body of message or its topic.</p> the body of message or its topic.</p>
@@ -197,12 +197,12 @@
<h3>TYPING NOTIFICATIONS</h3> <h3>TYPING NOTIFICATIONS</h3>
<p>Know when other users are composing messages to you.</p> <p>Know when other users are composing messages to you.</p>
</div> </div>
<a class="feature-block" href="/help/view-and-edit-your-message-drafts" target="_blank"> <a class="feature-block" href="/help/view-and-edit-your-message-drafts" target="_blank" rel="noopener noreferrer">
<h3>SAVED DRAFTS</h3> <h3>SAVED DRAFTS</h3>
<p>Zulip's drafts make it easy to write longer messages <p>Zulip's drafts make it easy to write longer messages
without worrying about losing your work.</p> without worrying about losing your work.</p>
</a> </a>
<a class="feature-block" href="https://zulip.readthedocs.io/en/latest/contributing/accessibility.html" target="_blank"> <a class="feature-block" href="https://zulip.readthedocs.io/en/latest/contributing/accessibility.html" target="_blank" rel="noopener noreferrer">
<h3>ACCESSIBILITY</h3> <h3>ACCESSIBILITY</h3>
<p> <p>
Zulip follows best practices for accessibility, and has Zulip follows best practices for accessibility, and has
@@ -210,22 +210,22 @@
tools. tools.
</p> </p>
</a> </a>
<a class="feature-block" href="/help/about-streams-and-topics" target="_blank"> <a class="feature-block" href="/help/about-streams-and-topics" target="_blank" rel="noopener noreferrer">
<h3>CONVERSATIONS THREADED BY TOPIC</h3> <h3>CONVERSATIONS THREADED BY TOPIC</h3>
<p>Participate in several conversations with the same <p>Participate in several conversations with the same
group at once, without getting lost or overwhelmed.</p> group at once, without getting lost or overwhelmed.</p>
</a> </a>
<a class="feature-block" href="/help/reading-strategies" target="_blank"> <a class="feature-block" href="/help/reading-strategies" target="_blank" rel="noopener noreferrer">
<h3>CATCH UP IN NO TIME</h3> <h3>CATCH UP IN NO TIME</h3>
<p>With topics, hotkeys and snappy performance, usefully <p>With topics, hotkeys and snappy performance, usefully
reviewing hundreds of messages takes just minutes.</p> reviewing hundreds of messages takes just minutes.</p>
</a> </a>
<a class="feature-block" href="/help/change-your-language" target="_blank"> <a class="feature-block" href="/help/change-your-language" target="_blank" rel="noopener noreferrer">
<h3>FULLY INTERNATIONALIZED</h3> <h3>FULLY INTERNATIONALIZED</h3>
<p>The Zulip UI is fully internationalized and has been <p>The Zulip UI is fully internationalized and has been
translated into over a dozen languages.</p> translated into over a dozen languages.</p>
</a> </a>
<a class="feature-block" href="/help/configure-authentication-methods" target="_blank"> <a class="feature-block" href="/help/configure-authentication-methods" target="_blank" rel="noopener noreferrer">
<h3>CUSTOMIZABLE LOGIN AND REGISTRATION</h3> <h3>CUSTOMIZABLE LOGIN AND REGISTRATION</h3>
<p> <p>
Customize the available authentication methods and Customize the available authentication methods and
@@ -233,35 +233,35 @@
organization using Markdown. organization using Markdown.
</p> </p>
</a> </a>
<a class="feature-block" href="/help/start-a-call" target="_blank"> <a class="feature-block" href="/help/start-a-call" target="_blank" rel="noopener noreferrer">
<h3>VIDEO CALLS</h3> <h3>VIDEO CALLS</h3>
<p> <p>
Create and join video calls with a single click. Powered Create and join video calls with a single click. Powered
by your choice of Zoom, Jitsi Meet, or Google Hangouts. by your choice of Zoom, Jitsi Meet, or Google Hangouts.
</p> </p>
</a> </a>
<a class="feature-block" href="/help/configure-authentication-methods" target="_blank"> <a class="feature-block" href="/help/configure-authentication-methods" target="_blank" rel="noopener noreferrer">
<h3>FLEXIBLE AUTHENTICATION</h3> <h3>FLEXIBLE AUTHENTICATION</h3>
<p> <p>
Supported authentication providers include LDAP, SAML, Supported authentication providers include LDAP, SAML,
Google, GitHub, and more. Google, GitHub, and more.
</p> </p>
</a> </a>
<a class="feature-block" href="/help/import-from-slack" target="_blank"> <a class="feature-block" href="/help/import-from-slack" target="_blank" rel="noopener noreferrer">
<h3>DATA IMPORT</h3> <h3>DATA IMPORT</h3>
<p> <p>
Import an existing Slack, Mattermost, HipChat, Stride, Import an existing Slack, Mattermost, HipChat, Stride,
or Gitter workspace into Zulip. or Gitter workspace into Zulip.
</p> </p>
</a> </a>
<a class="feature-block" href="/help/add-custom-profile-fields" target="_blank"> <a class="feature-block" href="/help/add-custom-profile-fields" target="_blank" rel="noopener noreferrer">
<h3>CUSTOM PROFILE FIELDS</h3> <h3>CUSTOM PROFILE FIELDS</h3>
<p> <p>
Use Zulip to store directory information, links to social Use Zulip to store directory information, links to social
media profiles, food preferences, or anything else. media profiles, food preferences, or anything else.
</p> </p>
</a> </a>
<a class="feature-block" href="/help/roles-and-permissions" target="_blank"> <a class="feature-block" href="/help/roles-and-permissions" target="_blank" rel="noopener noreferrer">
<h3>GUESTS</h3> <h3>GUESTS</h3>
<p> <p>
Guests cannot see or join streams unless they are explicitly Guests cannot see or join streams unless they are explicitly
@@ -269,33 +269,33 @@
contractors. contractors.
</p> </p>
</a> </a>
<a class="feature-block" href="/help/create-your-organization-profile" target="_blank"> <a class="feature-block" href="/help/create-your-organization-profile" target="_blank" rel="noopener noreferrer">
<h3>CUSTOM BRANDING</h3> <h3>CUSTOM BRANDING</h3>
<p> <p>
Use your logo instead of Zulip's in the desktop and webapp. Use your logo instead of Zulip's in the desktop and webapp.
</p> </p>
</a> </a>
<a class="feature-block" href="/integrations/communication" target="_blank"> <a class="feature-block" href="/integrations/communication" target="_blank" rel="noopener noreferrer">
<h3>INTEGRATE WITH IRC, MATRIX, OR SLACK</h3> <h3>INTEGRATE WITH IRC, MATRIX, OR SLACK</h3>
<p> <p>
Two way integrations with IRC and Matrix, and one way Two way integrations with IRC and Matrix, and one way
integration with Slack. integration with Slack.
</p> </p>
</a> </a>
<a class="feature-block" href="/help/moderating-open-organizations" target="_blank"> <a class="feature-block" href="/help/moderating-open-organizations" target="_blank" rel="noopener noreferrer">
<h3>MODERATION</h3> <h3>MODERATION</h3>
<p> <p>
A full suite of tools for moderating open communities. A full suite of tools for moderating open communities.
</p> </p>
</a> </a>
<a class="feature-block" href="/help/export-your-organization" target="_blank"> <a class="feature-block" href="/help/export-your-organization" target="_blank" rel="noopener noreferrer">
<h3>DATA EXPORTS</h3> <h3>DATA EXPORTS</h3>
<p> <p>
No vendor lock-in. Export your hosted Zulip to an No vendor lock-in. Export your hosted Zulip to an
on-premises installation at any time. on-premises installation at any time.
</p> </p>
</a> </a>
<a class="feature-block" href="https://github.com/zulip/zulip/" target="_blank"> <a class="feature-block" href="https://github.com/zulip/zulip/" target="_blank" rel="noopener noreferrer">
<h3>YOUR FEATURE HERE</h3> <h3>YOUR FEATURE HERE</h3>
<p>Zulip is open source, so if something important for <p>Zulip is open source, so if something important for
your use case is missing, you can make it happen!</p> your use case is missing, you can make it happen!</p>

View File

@@ -26,7 +26,7 @@
{% endif %} {% endif %}
<p> <p>
<a href="https://zulipchat.com/apps" target="_blank"> <a href="https://zulipchat.com/apps" target="_blank" rel="noopener noreferrer">
{{ _("Download the latest release.") }} {{ _("Download the latest release.") }}
</a> </a>
</p> </p>

View File

@@ -150,7 +150,7 @@
<div class="pricing-details"> <div class="pricing-details">
Pricing varies with support required Pricing varies with support required
</div> </div>
<a href="mailto:sales@zulipchat.com" target="_blank" class="no-action button green"> <a href="mailto:sales@zulipchat.com" target="_blank" rel="noopener noreferrer" class="no-action button green">
Contact sales Contact sales
</a> </a>
</div> </div>

View File

@@ -32,7 +32,7 @@
<button id="enter-realm-button" type="submit">{{ _('Next') }}</button> <button id="enter-realm-button" type="submit">{{ _('Next') }}</button>
<p class="bottom-text"> <p class="bottom-text">
{{ _("Don't know your organization URL?") }} {{ _("Don't know your organization URL?") }}
<a target="_blank" href="/accounts/find/">{{ _("Find your organization.") }}</a> <a target="_blank" rel="noopener noreferrer" href="/accounts/find/">{{ _("Find your organization.") }}</a>
</p> </p>
</div> </div>
</form> </form>
@@ -40,7 +40,7 @@
</div> </div>
<div class="bottom-text"> <div class="bottom-text">
{{ _("Need to get your group started on Zulip?") }} <a target="_blank" href="/new/">{{ _("Create a new organization.") }}</a> {{ _("Need to get your group started on Zulip?") }} <a target="_blank" rel="noopener noreferrer" href="/new/">{{ _("Create a new organization.") }}</a>
</div> </div>
</div> </div>

View File

@@ -217,7 +217,7 @@ Form is validated both client-side using jquery-validate (see signup.js) and ser
<input id="id_terms" class="required" type="checkbox" name="terms" <input id="id_terms" class="required" type="checkbox" name="terms"
{% if form.terms.value() %}checked="checked"{% endif %} /> {% if form.terms.value() %}checked="checked"{% endif %} />
<span></span> <span></span>
{% trans %}I agree to the <a href="{{ root_domain_uri }}/terms" target="_blank">Terms of Service</a>.{% endtrans %} {% trans %}I agree to the <a href="{{ root_domain_uri }}/terms" target="_blank" rel="noopener noreferrer">Terms of Service</a>.{% endtrans %}
</label> </label>
{% if form.terms.errors %} {% if form.terms.errors %}
{% for error in form.terms.errors %} {% for error in form.terms.errors %}

View File

@@ -123,7 +123,7 @@
<!-- Compiled using underscore --> <!-- Compiled using underscore -->
<script type="text/template" id="contributors-template"> <script type="text/template" id="contributors-template">
<div class="person"> <div class="person">
<a href="https://github.com/<%= name %>" target="_blank" class="no-underline"> <a href="https://github.com/<%= name %>" target="_blank" rel="noopener noreferrer" class="no-underline">
<div class="avatar"> <div class="avatar">
<img class="avatar_img" src="<%= avatar %>" alt="{{ _('Avatar') }}" /> <img class="avatar_img" src="<%= avatar %>" alt="{{ _('Avatar') }}" />
</div> </div>