mirror of https://github.com/zulip/zulip.git
web: Save a needless 301 redirect from /integrations to /integrations/.
This commit is contained in:
parent
5967dda35d
commit
a1570ff3dd
|
@ -16,7 +16,7 @@ Zulip:
|
||||||
* Adding an incoming webhook integration (detailed on this page),
|
* Adding an incoming webhook integration (detailed on this page),
|
||||||
where all the logic for formatting the Zulip messages lives in the
|
where all the logic for formatting the Zulip messages lives in the
|
||||||
Zulip server. This is how most of [Zulip's official
|
Zulip server. This is how most of [Zulip's official
|
||||||
integrations](/integrations) work, because they enable Zulip to
|
integrations](/integrations/) work, because they enable Zulip to
|
||||||
support third-party services that just have an "outgoing webhook"
|
support third-party services that just have an "outgoing webhook"
|
||||||
feature (without the third party needing to do any work specific to
|
feature (without the third party needing to do any work specific to
|
||||||
Zulip).
|
Zulip).
|
||||||
|
|
|
@ -4,7 +4,7 @@ Zulip's APIs allow you to integrate other services with Zulip. This
|
||||||
guide should help you find the API you need:
|
guide should help you find the API you need:
|
||||||
|
|
||||||
* First, check if the tool you'd like to integrate with Zulip
|
* First, check if the tool you'd like to integrate with Zulip
|
||||||
[already has a native integration](/integrations).
|
[already has a native integration](/integrations/).
|
||||||
* Next, check if [Zapier](https://zapier.com/apps) or
|
* Next, check if [Zapier](https://zapier.com/apps) or
|
||||||
[IFTTT](https://ifttt.com/search) has an integration.
|
[IFTTT](https://ifttt.com/search) has an integration.
|
||||||
[Zulip's Zapier integration](/integrations/doc/zapier) and
|
[Zulip's Zapier integration](/integrations/doc/zapier) and
|
||||||
|
|
|
@ -16,7 +16,7 @@ possible.
|
||||||
Most existing integrations send content from a third-party product into
|
Most existing integrations send content from a third-party product into
|
||||||
Zulip.
|
Zulip.
|
||||||
|
|
||||||
* Search Zulip's [list of native integrations](/integrations) for the
|
* Search Zulip's [list of native integrations](/integrations/) for the
|
||||||
third-party product. Each integration has a page describing how to set it
|
third-party product. Each integration has a page describing how to set it
|
||||||
up.
|
up.
|
||||||
|
|
||||||
|
|
|
@ -107,7 +107,7 @@ See our guide on [writing help center articles](helpcenter.md).
|
||||||
|
|
||||||
### Integrations documentation
|
### Integrations documentation
|
||||||
|
|
||||||
Zulip's [integrations documentation](https://zulip.com/integrations)
|
Zulip's [integrations documentation](https://zulip.com/integrations/)
|
||||||
is user-facing documentation explaining to end users how to set up each
|
is user-facing documentation explaining to end users how to set up each
|
||||||
of Zulip's more than 100 integrations. There is a detailed [guide on
|
of Zulip's more than 100 integrations. There is a detailed [guide on
|
||||||
documenting integrations](integrations.md), including style guidelines
|
documenting integrations](integrations.md), including style guidelines
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
The main Zulip codebase is at <https://github.com/zulip/zulip>. It
|
The main Zulip codebase is at <https://github.com/zulip/zulip>. It
|
||||||
contains the Zulip backend (written in Python 3.x and Django), the
|
contains the Zulip backend (written in Python 3.x and Django), the
|
||||||
web app (written in JavaScript and TypeScript) and our library of
|
web app (written in JavaScript and TypeScript) and our library of
|
||||||
incoming webhook [integrations](https://zulip.com/integrations)
|
incoming webhook [integrations](https://zulip.com/integrations/)
|
||||||
with other services and applications (see [the directory structure
|
with other services and applications (see [the directory structure
|
||||||
guide](directory-structure.md)).
|
guide](directory-structure.md)).
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ A bot that sends content to or from another product is often called an
|
||||||
Zulip natively supports integrations with over one hundred products, and with
|
Zulip natively supports integrations with over one hundred products, and with
|
||||||
almost a thousand more through Zapier and IFTTT. If you're looking to add an
|
almost a thousand more through Zapier and IFTTT. If you're looking to add an
|
||||||
integration with an existing product, see our
|
integration with an existing product, see our
|
||||||
[list of integrations](/integrations), along with those of
|
[list of integrations](/integrations/), along with those of
|
||||||
[Zapier](https://zapier.com/apps) and [IFTTT](https://ifttt.com/search).
|
[Zapier](https://zapier.com/apps) and [IFTTT](https://ifttt.com/search).
|
||||||
|
|
||||||
## Anatomy of a bot
|
## Anatomy of a bot
|
||||||
|
|
|
@ -5,7 +5,7 @@ organization URL is a disruptive operation for users:
|
||||||
|
|
||||||
* Users will be logged out of existing sessions on the web, mobile and
|
* Users will be logged out of existing sessions on the web, mobile and
|
||||||
desktop apps and need to log in again.
|
desktop apps and need to log in again.
|
||||||
* Any [API clients](/api) or [integrations](/integrations) will need
|
* Any [API clients](/api) or [integrations](/integrations/) will need
|
||||||
to be updated to point to the new organization URL.
|
to be updated to point to the new organization URL.
|
||||||
|
|
||||||
We recommend using a [wildcard
|
We recommend using a [wildcard
|
||||||
|
|
|
@ -163,7 +163,7 @@ Once the import process is completed, you will need to:
|
||||||
4. Share the URL for your new Zulip organization, and (recommended) the [Getting
|
4. Share the URL for your new Zulip organization, and (recommended) the [Getting
|
||||||
started with Zulip guide](/help/getting-started-with-zulip).
|
started with Zulip guide](/help/getting-started-with-zulip).
|
||||||
|
|
||||||
5. Migrate any [integrations](/integrations).
|
5. Migrate any [integrations](/integrations/).
|
||||||
|
|
||||||
{end_tabs}
|
{end_tabs}
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,6 @@ Once the import process is completed, you will need to:
|
||||||
3. Share the URL for your new Zulip organization, and (recommended) the [Getting
|
3. Share the URL for your new Zulip organization, and (recommended) the [Getting
|
||||||
started with Zulip guide](/help/getting-started-with-zulip).
|
started with Zulip guide](/help/getting-started-with-zulip).
|
||||||
|
|
||||||
4. Migrate any [integrations](/integrations).
|
4. Migrate any [integrations](/integrations/).
|
||||||
|
|
||||||
{end_tabs}
|
{end_tabs}
|
||||||
|
|
|
@ -6,7 +6,7 @@ more through [Zapier](/integrations/doc/zapier) and
|
||||||
[Sentry](/integrations/doc/sentry) and
|
[Sentry](/integrations/doc/sentry) and
|
||||||
[Twitter](/integrations/doc/twitter).
|
[Twitter](/integrations/doc/twitter).
|
||||||
|
|
||||||
* The [integrations page](/integrations) has instructions for
|
* The [integrations page](/integrations/) has instructions for
|
||||||
integrating with each product.
|
integrating with each product.
|
||||||
* If you don't see an integration you need, you can [request it](/help/request-an-integration).
|
* If you don't see an integration you need, you can [request it](/help/request-an-integration).
|
||||||
* You can also [create custom integrations](/api/integrations-overview) using our API.
|
* You can also [create custom integrations](/api/integrations-overview) using our API.
|
||||||
|
|
|
@ -94,7 +94,7 @@ topics](/help/restrict-moving-messages).
|
||||||
* Resolving a topic works by moving the messages to a new topic.
|
* Resolving a topic works by moving the messages to a new topic.
|
||||||
* Like with all topic editing, Zulip clients update instantly, so
|
* Like with all topic editing, Zulip clients update instantly, so
|
||||||
human users will likely only send messages to the resolved topic.
|
human users will likely only send messages to the resolved topic.
|
||||||
* [Integrations](/integrations) will usually send new messages to the
|
* [Integrations](/integrations/) will usually send new messages to the
|
||||||
original topic (`example topic`) after a topic is resolved. This is
|
original topic (`example topic`) after a topic is resolved. This is
|
||||||
useful for alerting integrations, where a repeating alert might have a
|
useful for alerting integrations, where a repeating alert might have a
|
||||||
different cause. You can mark the topic resolved (as normal) once
|
different cause. You can mark the topic resolved (as normal) once
|
||||||
|
|
|
@ -321,7 +321,7 @@ more through [Zapier](/integrations/doc/zapier) and
|
||||||
[IFTTT](/integrations/doc/ifttt). Popular Zulip integrations include
|
[IFTTT](/integrations/doc/ifttt). Popular Zulip integrations include
|
||||||
[GitHub](/integrations/doc/github) and
|
[GitHub](/integrations/doc/github) and
|
||||||
[Twitter](/integrations/doc/twitter). The [integrations
|
[Twitter](/integrations/doc/twitter). The [integrations
|
||||||
page](/integrations) has instructions for integrating with each
|
page](/integrations/) has instructions for integrating with each
|
||||||
product.
|
product.
|
||||||
|
|
||||||
## Cleaning up at the end of a class
|
## Cleaning up at the end of a class
|
||||||
|
|
|
@ -110,7 +110,7 @@ python-magic
|
||||||
# The Zulip API bindings, from its own repository. We integrate with
|
# The Zulip API bindings, from its own repository. We integrate with
|
||||||
# these tightly, including fetching content not included in the official
|
# these tightly, including fetching content not included in the official
|
||||||
# PyPI release tarballs, such as logos, assets and documentation files
|
# PyPI release tarballs, such as logos, assets and documentation files
|
||||||
# that we render on our /integrations page. Therefore, we need to pin
|
# that we render on our /integrations/ page. Therefore, we need to pin
|
||||||
# the version from Git rather than a PyPI release. Keeping everything in
|
# the version from Git rather than a PyPI release. Keeping everything in
|
||||||
# one repository simplifies the process of implementing and documenting
|
# one repository simplifies the process of implementing and documenting
|
||||||
# new bots for new contributors.
|
# new bots for new contributors.
|
||||||
|
|
|
@ -109,7 +109,7 @@
|
||||||
<section>
|
<section>
|
||||||
<h2>Apps, integrations, and API.</h2>
|
<h2>Apps, integrations, and API.</h2>
|
||||||
|
|
||||||
<a class="feature-block" href="/integrations" target="_blank" rel="noopener noreferrer">
|
<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
|
||||||
|
|
|
@ -243,7 +243,7 @@
|
||||||
<div class="list-content">
|
<div class="list-content">
|
||||||
Native integrations for GitHub, Jira,
|
Native integrations for GitHub, Jira,
|
||||||
PagerDuty, Sentry
|
PagerDuty, Sentry
|
||||||
and <a href="/integrations">hundreds of
|
and <a href="/integrations/">hundreds of
|
||||||
other tools</a> can initiate new topics,
|
other tools</a> can initiate new topics,
|
||||||
creating lightweight discussion spaces for
|
creating lightweight discussion spaces for
|
||||||
each issue.
|
each issue.
|
||||||
|
|
|
@ -260,7 +260,7 @@
|
||||||
<li>10,000 messages of search history</li>
|
<li>10,000 messages of search history</li>
|
||||||
<li>File storage up to 5 GB total</li>
|
<li>File storage up to 5 GB total</li>
|
||||||
<li><a href="/features">Full-featured</a> team chat service</li>
|
<li><a href="/features">Full-featured</a> team chat service</li>
|
||||||
<li><a href="/integrations">Hundreds of integrations</a></li>
|
<li><a href="/integrations/">Hundreds of integrations</a></li>
|
||||||
<li>Advanced <a href="/help/roles-and-permissions">roles</a> and <a href="/help/stream-permissions">permissions</a></li>
|
<li>Advanced <a href="/help/roles-and-permissions">roles</a> and <a href="/help/stream-permissions">permissions</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -474,7 +474,7 @@
|
||||||
<li>
|
<li>
|
||||||
<div class="list-content">
|
<div class="list-content">
|
||||||
Native integrations for GitHub, Jira, Twitter, Sentry
|
Native integrations for GitHub, Jira, Twitter, Sentry
|
||||||
and <a href="/integrations">hundreds of
|
and <a href="/integrations/">hundreds of
|
||||||
other tools</a> can initiate new topics,
|
other tools</a> can initiate new topics,
|
||||||
creating lightweight discussion spaces for
|
creating lightweight discussion spaces for
|
||||||
each issue.
|
each issue.
|
||||||
|
|
|
@ -396,7 +396,7 @@
|
||||||
and
|
and
|
||||||
<a href="/integrations/doc/ifttt">IFTTT</a>.
|
<a href="/integrations/doc/ifttt">IFTTT</a>.
|
||||||
</p>
|
</p>
|
||||||
<p><a href="/integrations">See all available integrations.</a></p>
|
<p><a href="/integrations/">See all available integrations.</a></p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="integration-icons">
|
<div class="integration-icons">
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
<li>10,000 messages of search history</li>
|
<li>10,000 messages of search history</li>
|
||||||
<li>File storage up to 5 GB total</li>
|
<li>File storage up to 5 GB total</li>
|
||||||
<li><a href="/features">Full-featured</a> team chat service</li>
|
<li><a href="/features">Full-featured</a> team chat service</li>
|
||||||
<li><a href="/integrations">Hundreds of integrations</a></li>
|
<li><a href="/integrations/">Hundreds of integrations</a></li>
|
||||||
<li>Advanced <a href="/help/roles-and-permissions">roles</a> and <a href="/help/stream-permissions">permissions</a></li>
|
<li>Advanced <a href="/help/roles-and-permissions">roles</a> and <a href="/help/stream-permissions">permissions</a></li>
|
||||||
<li><a href="/help/roles-and-permissions">Guest accounts</a></li>
|
<li><a href="/help/roles-and-permissions">Guest accounts</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
|
@ -48,7 +48,7 @@
|
||||||
<i class="fa fa-angle-down" aria-hidden="true"></i>
|
<i class="fa fa-angle-down" aria-hidden="true"></i>
|
||||||
</div>
|
</div>
|
||||||
<div class="dropdown-list">
|
<div class="dropdown-list">
|
||||||
<a href="/integrations">
|
<a href="/integrations/">
|
||||||
<h4 class="integration-category selected" data-category="all">All</h4>
|
<h4 class="integration-category selected" data-category="all">All</h4>
|
||||||
</a>
|
</a>
|
||||||
{% for category in categories_dict.keys() %}
|
{% for category in categories_dict.keys() %}
|
||||||
|
@ -74,7 +74,7 @@
|
||||||
<div class="catalog">
|
<div class="catalog">
|
||||||
<div class="integration-categories-sidebar">
|
<div class="integration-categories-sidebar">
|
||||||
<h3>{% trans %}Categories{% endtrans %}</h3>
|
<h3>{% trans %}Categories{% endtrans %}</h3>
|
||||||
<a href="/integrations">
|
<a href="/integrations/">
|
||||||
<h4 data-category="all" class="integration-category selected">{% trans %}All{% endtrans %}</h4>
|
<h4 data-category="all" class="integration-category selected">{% trans %}All{% endtrans %}</h4>
|
||||||
</a>
|
</a>
|
||||||
{% for category in categories_dict.keys() %}
|
{% for category in categories_dict.keys() %}
|
||||||
|
@ -143,7 +143,7 @@
|
||||||
<div id="integration-instructions-group">
|
<div id="integration-instructions-group">
|
||||||
<div id="integration-instruction-block" class="integration-instruction-block">
|
<div id="integration-instruction-block" class="integration-instruction-block">
|
||||||
<div class="categories"></div>
|
<div class="categories"></div>
|
||||||
<a href="/integrations" id="integration-list-link" class="no-underline"><i class="fa fa-arrow-circle-left" aria-hidden="true"></i><span>Back to list</span></a>
|
<a href="/integrations/" id="integration-list-link" class="no-underline"><i class="fa fa-arrow-circle-left" aria-hidden="true"></i><span>Back to list</span></a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% for integration in integrations_dict.values() %}
|
{% for integration in integrations_dict.values() %}
|
||||||
|
|
|
@ -69,7 +69,7 @@ class PorticoDocumentationSpider(BaseDocumentationSpider):
|
||||||
"http://localhost:9981/plans",
|
"http://localhost:9981/plans",
|
||||||
"http://localhost:9981/team",
|
"http://localhost:9981/team",
|
||||||
"http://localhost:9981/apps",
|
"http://localhost:9981/apps",
|
||||||
"http://localhost:9981/integrations",
|
"http://localhost:9981/integrations/",
|
||||||
"http://localhost:9981/terms",
|
"http://localhost:9981/terms",
|
||||||
"http://localhost:9981/privacy",
|
"http://localhost:9981/privacy",
|
||||||
"http://localhost:9981/features",
|
"http://localhost:9981/features",
|
||||||
|
|
|
@ -361,7 +361,7 @@ function integration_events() {
|
||||||
});
|
});
|
||||||
|
|
||||||
$(window).on("popstate", () => {
|
$(window).on("popstate", () => {
|
||||||
if (window.location.pathname.startsWith("/integrations")) {
|
if (window.location.pathname.startsWith("/integrations/")) {
|
||||||
dispatch("LOAD_PATH");
|
dispatch("LOAD_PATH");
|
||||||
} else {
|
} else {
|
||||||
window.location = window.location.href;
|
window.location = window.location.href;
|
||||||
|
|
|
@ -124,7 +124,7 @@
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li role="presentation" class="hidden-for-spectators">
|
<li role="presentation" class="hidden-for-spectators">
|
||||||
<a href="/integrations" target="_blank" rel="noopener noreferrer" role="menuitem">
|
<a href="/integrations/" target="_blank" rel="noopener noreferrer" role="menuitem">
|
||||||
<i class="fa fa-github" aria-hidden="true"></i> {{t 'Integrations' }}
|
<i class="fa fa-github" aria-hidden="true"></i> {{t 'Integrations' }}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
<div class="tip">
|
<div class="tip">
|
||||||
{{#tr}}
|
{{#tr}}
|
||||||
Looking for our <z-integrations>integrations</z-integrations> or <z-api>API</z-api> documentation?
|
Looking for our <z-integrations>integrations</z-integrations> or <z-api>API</z-api> documentation?
|
||||||
{{#*inline "z-integrations"}}<a href="/integrations" target="_blank" rel="noopener noreferrer">{{> @partial-block}}</a>{{/inline}}
|
{{#*inline "z-integrations"}}<a href="/integrations/" target="_blank" rel="noopener noreferrer">{{> @partial-block}}</a>{{/inline}}
|
||||||
{{#*inline "z-api"}}<a href="/api" target="_blank" rel="noopener noreferrer">{{> @partial-block}}</a>{{/inline}}
|
{{#*inline "z-api"}}<a href="/api" target="_blank" rel="noopener noreferrer">{{> @partial-block}}</a>{{/inline}}
|
||||||
{{/tr}}
|
{{/tr}}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -12,7 +12,7 @@ from zerver.lib.storage import static_path
|
||||||
|
|
||||||
"""This module declares all of the (documented) integrations available
|
"""This module declares all of the (documented) integrations available
|
||||||
in the Zulip server. The Integration class is used as part of
|
in the Zulip server. The Integration class is used as part of
|
||||||
generating the documentation on the /integrations page, while the
|
generating the documentation on the /integrations/ page, while the
|
||||||
WebhookIntegration class is also used to generate the URLs in
|
WebhookIntegration class is also used to generate the URLs in
|
||||||
`zproject/urls.py` for webhook integrations.
|
`zproject/urls.py` for webhook integrations.
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@ gear_info = {
|
||||||
"manage-streams": ["Manage streams", "/#streams/subscribed"],
|
"manage-streams": ["Manage streams", "/#streams/subscribed"],
|
||||||
"settings": ["Personal Settings", "/#settings/profile"],
|
"settings": ["Personal Settings", "/#settings/profile"],
|
||||||
"organization-settings": ["Organization settings", "/#organization/organization-profile"],
|
"organization-settings": ["Organization settings", "/#organization/organization-profile"],
|
||||||
"integrations": ["Integrations", "/integrations"],
|
"integrations": ["Integrations", "/integrations/"],
|
||||||
"stats": ["Usage statistics", "/stats"],
|
"stats": ["Usage statistics", "/stats"],
|
||||||
"plans": ["Plans and pricing", "/plans"],
|
"plans": ["Plans and pricing", "/plans"],
|
||||||
"billing": ["Billing", "/billing"],
|
"billing": ["Billing", "/billing"],
|
||||||
|
|
Loading…
Reference in New Issue