mirror of https://github.com/zulip/zulip.git
docs: Convert many http URLs to https.
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
This commit is contained in:
parent
586f78cb32
commit
7ff9b22500
|
@ -101,5 +101,5 @@ This Code of Conduct is adapted from the
|
||||||
[Citizen Code of Conduct](http://citizencodeofconduct.org/) and the
|
[Citizen Code of Conduct](http://citizencodeofconduct.org/) and the
|
||||||
[Django Code of Conduct](https://www.djangoproject.com/conduct/), and is
|
[Django Code of Conduct](https://www.djangoproject.com/conduct/), and is
|
||||||
under a
|
under a
|
||||||
[Creative Commons BY-SA](http://creativecommons.org/licenses/by-sa/4.0/)
|
[Creative Commons BY-SA](https://creativecommons.org/licenses/by-sa/4.0/)
|
||||||
license.
|
license.
|
||||||
|
|
|
@ -47,7 +47,7 @@ don't require touching the codebase at all. We list a few of them below:
|
||||||
* [Translating](https://zulip.readthedocs.io/en/latest/translating/translating.html)
|
* [Translating](https://zulip.readthedocs.io/en/latest/translating/translating.html)
|
||||||
Zulip.
|
Zulip.
|
||||||
* [Outreach](#zulip-outreach): Star us on GitHub, upvote us
|
* [Outreach](#zulip-outreach): Star us on GitHub, upvote us
|
||||||
on product comparison sites, or write for [the Zulip blog](http://blog.zulip.org/).
|
on product comparison sites, or write for [the Zulip blog](https://blog.zulip.org/).
|
||||||
|
|
||||||
## Your first (codebase) contribution
|
## Your first (codebase) contribution
|
||||||
|
|
||||||
|
@ -333,7 +333,7 @@ have been using Zulip for a while and want to contribute more.
|
||||||
about a technical aspect of Zulip can be a great way to spread the word
|
about a technical aspect of Zulip can be a great way to spread the word
|
||||||
about Zulip.
|
about Zulip.
|
||||||
|
|
||||||
We also occasionally [publish](http://blog.zulip.org/) long-form
|
We also occasionally [publish](https://blog.zulip.org/) long-form
|
||||||
articles related to Zulip. Our posts typically get tens of thousands
|
articles related to Zulip. Our posts typically get tens of thousands
|
||||||
of views, and we always have good ideas for blog posts that we can
|
of views, and we always have good ideas for blog posts that we can
|
||||||
outline but don't have time to write. If you are an experienced writer
|
outline but don't have time to write. If you are an experienced writer
|
||||||
|
|
|
@ -69,7 +69,7 @@ You might be interested in:
|
||||||
programs](https://zulip.readthedocs.io/en/latest/overview/contributing.html#outreach-programs)**
|
programs](https://zulip.readthedocs.io/en/latest/overview/contributing.html#outreach-programs)**
|
||||||
like Google Summer of Code.
|
like Google Summer of Code.
|
||||||
|
|
||||||
You may also be interested in reading our [blog](http://blog.zulip.org/) or
|
You may also be interested in reading our [blog](https://blog.zulip.org/) or
|
||||||
following us on [twitter](https://twitter.com/zulip).
|
following us on [twitter](https://twitter.com/zulip).
|
||||||
Zulip is distributed under the
|
Zulip is distributed under the
|
||||||
[Apache 2.0](https://github.com/zulip/zulip/blob/master/LICENSE) license.
|
[Apache 2.0](https://github.com/zulip/zulip/blob/master/LICENSE) license.
|
||||||
|
|
|
@ -330,7 +330,7 @@ def setup(app: Any) -> None:
|
||||||
}, True)
|
}, True)
|
||||||
|
|
||||||
# Enable `eval_rst`, and any other features enabled in recommonmark_config.
|
# Enable `eval_rst`, and any other features enabled in recommonmark_config.
|
||||||
# Docs: http://recommonmark.readthedocs.io/en/latest/auto_structify.html
|
# Docs: https://recommonmark.readthedocs.io/en/latest/auto_structify.html
|
||||||
# (But NB those docs are for master, not latest release.)
|
# (But NB those docs are for master, not latest release.)
|
||||||
app.add_transform(AutoStructify)
|
app.add_transform(AutoStructify)
|
||||||
|
|
||||||
|
|
|
@ -40,11 +40,11 @@ with many of the WCAG guidelines. Here are some of the more useful ones:
|
||||||
* [aXe](https://www.deque.com/products/axe/) An open source Chrome and Firefox
|
* [aXe](https://www.deque.com/products/axe/) An open source Chrome and Firefox
|
||||||
extension which runs a somewhat different set of checks than Google's Chrome
|
extension which runs a somewhat different set of checks than Google's Chrome
|
||||||
extension.
|
extension.
|
||||||
* [Wave](http://wave.webaim.org/) This web application takes a URL and loads
|
* [Wave](https://wave.webaim.org/) This web application takes a URL and loads
|
||||||
it in a frame, reporting on all the issues it finds with links to more
|
it in a frame, reporting on all the issues it finds with links to more
|
||||||
information. Has the advantage of not requiring installation, but requires
|
information. Has the advantage of not requiring installation, but requires
|
||||||
a URL which can be directly accessed by an external site.
|
a URL which can be directly accessed by an external site.
|
||||||
* [Web Developer](http://chrispederick.com/work/web-developer/) This browser
|
* [Web Developer](https://chrispederick.com/work/web-developer/) This browser
|
||||||
extension has many useful features, including a convenient link for opening
|
extension has many useful features, including a convenient link for opening
|
||||||
the current URL in Wave to get an accessibility report.
|
the current URL in Wave to get an accessibility report.
|
||||||
|
|
||||||
|
@ -70,16 +70,16 @@ If you want to help make Zulip more accessible, here is a list of the
|
||||||
For more information about making Zulip accessible to as many users as
|
For more information about making Zulip accessible to as many users as
|
||||||
possible, the following resources may be useful.
|
possible, the following resources may be useful.
|
||||||
|
|
||||||
* [Font Awesome accessibility guide](http://fontawesome.io/accessibility/),
|
* [Font Awesome accessibility guide](https://fontawesome.com/how-to-use/on-the-web/other-topics/accessibility),
|
||||||
which is especially helpful since Zulip uses Font Awesome for its icons.
|
which is especially helpful since Zulip uses Font Awesome for its icons.
|
||||||
* [Web Content Accessibility Guidelines (WCAG) 2.0](https://www.w3.org/TR/WCAG/)
|
* [Web Content Accessibility Guidelines (WCAG) 2.0](https://www.w3.org/TR/WCAG/)
|
||||||
* [WAI-ARIA](https://www.w3.org/WAI/intro/aria) - Web Accessibility Initiative
|
* [WAI-ARIA](https://www.w3.org/WAI/intro/aria) - Web Accessibility Initiative
|
||||||
Accessible Rich Internet Application Suite
|
Accessible Rich Internet Application Suite
|
||||||
* [WebAIM](http://webaim.org/) - Web Accessibility in Mind
|
* [WebAIM](https://webaim.org/) - Web Accessibility in Mind
|
||||||
* The [MDN page on accessibility](https://developer.mozilla.org/en-US/docs/Web/Accessibility)
|
* The [MDN page on accessibility](https://developer.mozilla.org/en-US/docs/Web/Accessibility)
|
||||||
* The [Open edX Accessibility Guidelines][openedx-guidelines] for developers
|
* The [Open edX Accessibility Guidelines][openedx-guidelines] for developers
|
||||||
|
|
||||||
|
|
||||||
[chrome-webstore]: https://chrome.google.com/webstore/detail/accessibility-developer-t/fpkknkljclfencbdbgkenhalefipecmb
|
[chrome-webstore]: https://chrome.google.com/webstore/detail/accessibility-developer-t/fpkknkljclfencbdbgkenhalefipecmb
|
||||||
[openedx-guidelines]: http://edx.readthedocs.io/projects/edx-developer-guide/en/latest/conventions/accessibility.html
|
[openedx-guidelines]: https://edx.readthedocs.io/projects/edx-developer-guide/en/latest/conventions/accessibility.html
|
||||||
[accessibility-issues]: https://github.com/zulip/zulip/issues?q=is%3Aissue+is%3Aopen+label%3A%22area%3A%20accessibility%22
|
[accessibility-issues]: https://github.com/zulip/zulip/issues?q=is%3Aissue+is%3Aopen+label%3A%22area%3A%20accessibility%22
|
||||||
|
|
|
@ -187,7 +187,7 @@ the maintainer time and get the PR merged quicker.
|
||||||
|
|
||||||
We also strongly recommend reviewers to go through the following resources.
|
We also strongly recommend reviewers to go through the following resources.
|
||||||
|
|
||||||
* [The Gentle Art of Patch Review](http://sage.thesharps.us/2014/09/01/the-gentle-art-of-patch-review/)
|
* [The Gentle Art of Patch Review](https://sage.thesharps.us/2014/09/01/the-gentle-art-of-patch-review/)
|
||||||
article by Sarah Sharp
|
article by Sarah Sharp
|
||||||
* [Zulip & Good Code Review](https://www.harihareswara.net/sumana/2016/05/17/0)
|
* [Zulip & Good Code Review](https://www.harihareswara.net/sumana/2016/05/17/0)
|
||||||
article by Sumana Harihareswara
|
article by Sumana Harihareswara
|
||||||
|
|
|
@ -22,8 +22,8 @@ The Vagrant setup process runs this for you.
|
||||||
|
|
||||||
`lint` runs many lint checks in parallel, including
|
`lint` runs many lint checks in parallel, including
|
||||||
|
|
||||||
- JavaScript ([ESLint](http://eslint.org/))
|
- JavaScript ([ESLint](https://eslint.org/))
|
||||||
- Python ([Pyflakes](http://pypi.python.org/pypi/pyflakes))
|
- Python ([Pyflakes](https://pypi.python.org/pypi/pyflakes))
|
||||||
- templates
|
- templates
|
||||||
- Puppet configuration
|
- Puppet configuration
|
||||||
- custom checks (e.g. trailing whitespace and spaces-not-tabs)
|
- custom checks (e.g. trailing whitespace and spaces-not-tabs)
|
||||||
|
@ -154,9 +154,9 @@ Always declare JavaScript variables using `const` or `let` rather than
|
||||||
### JavaScript and TypeScript `for (i in myArray)`
|
### JavaScript and TypeScript `for (i in myArray)`
|
||||||
|
|
||||||
Don't use it:
|
Don't use it:
|
||||||
[[1]](http://stackoverflow.com/questions/500504/javascript-for-in-with-arrays),
|
[[1]](https://stackoverflow.com/questions/500504/javascript-for-in-with-arrays),
|
||||||
[[2]](https://google.github.io/styleguide/javascriptguide.xml#for-in_loop),
|
[[2]](https://google.github.io/styleguide/javascriptguide.xml#for-in_loop),
|
||||||
[[3]](http://www.jslint.com/help.html#forin)
|
[[3]](https://www.jslint.com/help.html#forin)
|
||||||
|
|
||||||
### Translation tags
|
### Translation tags
|
||||||
|
|
||||||
|
@ -187,7 +187,7 @@ syntax](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operat
|
||||||
and so on. Our Babel configuration automatically transpiles and
|
and so on. Our Babel configuration automatically transpiles and
|
||||||
polyfills these using [`core-js`](https://github.com/zloirock/core-js)
|
polyfills these using [`core-js`](https://github.com/zloirock/core-js)
|
||||||
when necessary. We used to use the
|
when necessary. We used to use the
|
||||||
[Underscore](http://underscorejs.org/) library, but that should be
|
[Underscore](https://underscorejs.org/) library, but that should be
|
||||||
avoided in new code.
|
avoided in new code.
|
||||||
|
|
||||||
## More arbitrary style things
|
## More arbitrary style things
|
||||||
|
|
|
@ -54,7 +54,7 @@ materials](https://developers.google.com/open-source/gsoc/resources/manual).
|
||||||
need help learning, and time-saving tricks.
|
need help learning, and time-saving tricks.
|
||||||
|
|
||||||
- If you need feedback from the community / decisions made, ask in the
|
- If you need feedback from the community / decisions made, ask in the
|
||||||
appropriate public stream on [chat.zulip.org](http://chat.zulip.org). Often
|
appropriate public stream on [chat.zulip.org](https://chat.zulip.org). Often
|
||||||
someone can provide important context that you need to succeed in your
|
someone can provide important context that you need to succeed in your
|
||||||
project.
|
project.
|
||||||
|
|
||||||
|
|
|
@ -126,7 +126,7 @@ don't have a favorite, here are some suggestions:
|
||||||
|
|
||||||
* [atom](https://atom.io/)
|
* [atom](https://atom.io/)
|
||||||
* [emacs](https://www.gnu.org/software/emacs/)
|
* [emacs](https://www.gnu.org/software/emacs/)
|
||||||
* [vim](http://www.vim.org/)
|
* [vim](https://www.vim.org/)
|
||||||
* [spacemacs](https://github.com/syl20bnr/spacemacs)
|
* [spacemacs](https://github.com/syl20bnr/spacemacs)
|
||||||
* [sublime](https://www.sublimetext.com/)
|
* [sublime](https://www.sublimetext.com/)
|
||||||
|
|
||||||
|
@ -220,7 +220,7 @@ Two editors often available by default on Linux systems are:
|
||||||
recommended it for quick edits to things like configuration files. Launch by
|
recommended it for quick edits to things like configuration files. Launch by
|
||||||
running command `nano <filename>`. Exit by pressing *control-X*.
|
running command `nano <filename>`. Exit by pressing *control-X*.
|
||||||
|
|
||||||
* **[Vim](http://www.vim.org/)**: A very powerful editor that can take a while
|
* **[Vim](https://www.vim.org/)**: A very powerful editor that can take a while
|
||||||
to learn. Launch by running `vim <filename>`. Quit Vim by pressing *escape*,
|
to learn. Launch by running `vim <filename>`. Quit Vim by pressing *escape*,
|
||||||
typing `:q`, and then pressing *return*. Vim comes with a program to learn it
|
typing `:q`, and then pressing *return*. Vim comes with a program to learn it
|
||||||
called `vimtutor` (just run that command to start it).
|
called `vimtutor` (just run that command to start it).
|
||||||
|
|
|
@ -750,7 +750,7 @@ If this is already enabled in your BIOS, double-check that you are running a
|
||||||
64-bit operating system.
|
64-bit operating system.
|
||||||
|
|
||||||
For further information about troubleshooting vagrant timeout errors [see
|
For further information about troubleshooting vagrant timeout errors [see
|
||||||
this post](http://stackoverflow.com/questions/22575261/vagrant-stuck-connection-timeout-retrying#22575302).
|
this post](https://stackoverflow.com/questions/22575261/vagrant-stuck-connection-timeout-retrying#22575302).
|
||||||
|
|
||||||
#### Vagrant was unable to communicate with the guest machine
|
#### Vagrant was unable to communicate with the guest machine
|
||||||
|
|
||||||
|
@ -1016,10 +1016,10 @@ If at any time you wish to revert back to the default settings, simply
|
||||||
remove the `GUEST_CPUS` and `GUEST_MEMORY_MB` lines from
|
remove the `GUEST_CPUS` and `GUEST_MEMORY_MB` lines from
|
||||||
`~/.zulip-vagrant-config`.
|
`~/.zulip-vagrant-config`.
|
||||||
|
|
||||||
[cygwin-dl]: http://cygwin.com/
|
[cygwin-dl]: https://cygwin.com/
|
||||||
[vagrant-dl]: https://www.vagrantup.com/downloads.html
|
[vagrant-dl]: https://www.vagrantup.com/downloads.html
|
||||||
[vbox-dl]: https://www.virtualbox.org/wiki/Downloads
|
[vbox-dl]: https://www.virtualbox.org/wiki/Downloads
|
||||||
[vmware-fusion-dl]: http://www.vmware.com/products/fusion.html
|
[vmware-fusion-dl]: https://www.vmware.com/products/fusion.html
|
||||||
[vagrant-vmware-fusion-dl]: https://www.vagrantup.com/vmware/
|
[vagrant-vmware-fusion-dl]: https://www.vagrantup.com/vmware/
|
||||||
[install-advanced]: ../development/setup-advanced.md
|
[install-advanced]: ../development/setup-advanced.md
|
||||||
[rtd-git-guide]: ../git/index.md
|
[rtd-git-guide]: ../git/index.md
|
||||||
|
|
|
@ -229,7 +229,7 @@ above.
|
||||||
"fixture"). The easiest way to do this is add an appropriate print
|
"fixture"). The easiest way to do this is add an appropriate print
|
||||||
statement (usually `json.dumps(result, indent=4, sort_keys=True)`),
|
statement (usually `json.dumps(result, indent=4, sort_keys=True)`),
|
||||||
and then run `tools/test-api`. You can also use
|
and then run `tools/test-api`. You can also use
|
||||||
<http://jsonformatter.curiousconcept.com/> to format the JSON
|
<https://jsonformatter.curiousconcept.com/> to format the JSON
|
||||||
fixtures. Add the fixture to the `example` subsection of the
|
fixtures. Add the fixture to the `example` subsection of the
|
||||||
`responses` section for the endpoint in
|
`responses` section for the endpoint in
|
||||||
`zerver/openapi/zulip.yaml`.
|
`zerver/openapi/zulip.yaml`.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# OpenAPI configuration
|
# OpenAPI configuration
|
||||||
|
|
||||||
The [OpenAPI](http://swagger.io/specification/) (formerly known as
|
The [OpenAPI](https://swagger.io/specification/) (formerly known as
|
||||||
Swagger) specification is a standardized way to describe how an API
|
Swagger) specification is a standardized way to describe how an API
|
||||||
functions. This description then can then be used by any tool that
|
functions. This description then can then be used by any tool that
|
||||||
supports the standard.
|
supports the standard.
|
||||||
|
@ -14,7 +14,7 @@ may contain other objects, or reference objects defined
|
||||||
elsewhere. Larger API specifications may be split into multiple
|
elsewhere. Larger API specifications may be split into multiple
|
||||||
files. There are more types of objects than mentioned here, you can
|
files. There are more types of objects than mentioned here, you can
|
||||||
find the complete details at
|
find the complete details at
|
||||||
[Swagger/OpenAPI specification page](http://swagger.io/specification).
|
[Swagger/OpenAPI specification page](https://swagger.io/specification/).
|
||||||
|
|
||||||
This library isn't in production use yet, but it is our current plan
|
This library isn't in production use yet, but it is our current plan
|
||||||
for how Zulip's API documentation will work.
|
for how Zulip's API documentation will work.
|
||||||
|
@ -52,16 +52,16 @@ info:
|
||||||
|
|
||||||
### Endpoint definitions
|
### Endpoint definitions
|
||||||
|
|
||||||
The [Paths Object](http://swagger.io/specification/#pathsObject)
|
The [Paths Object](https://swagger.io/specification/#pathsObject)
|
||||||
contains
|
contains
|
||||||
[Path Item Objects](http://swagger.io/specification/#pathItemObject)
|
[Path Item Objects](https://swagger.io/specification/#pathItemObject)
|
||||||
for each endpoint. It describes in detail the methods and parameters
|
for each endpoint. It describes in detail the methods and parameters
|
||||||
the endpoint accepts and responses it returns.
|
the endpoint accepts and responses it returns.
|
||||||
|
|
||||||
There is one Path Item Object for each supported method, containing a
|
There is one Path Item Object for each supported method, containing a
|
||||||
[Parameters Definition Object](http://swagger.io/specification/#parametersDefinitionObject)
|
[Parameters Definition Object](https://swagger.io/specification/#parametersDefinitionObject)
|
||||||
describing the required and optional inputs. A
|
describing the required and optional inputs. A
|
||||||
[Response Object](http://swagger.io/specification/#responseObject)
|
[Response Object](https://swagger.io/specification/#responseObject)
|
||||||
similarly specifies the content of the response. They may reference
|
similarly specifies the content of the response. They may reference
|
||||||
schemas from a global Definitions Object (see [Schemas](#schemas),
|
schemas from a global Definitions Object (see [Schemas](#schemas),
|
||||||
below.)
|
below.)
|
||||||
|
@ -69,9 +69,9 @@ below.)
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
The `/users/{user}/presence` endpoint (defined in a
|
The `/users/{user}/presence` endpoint (defined in a
|
||||||
[Path Item Object](http://swagger.io/specification/#pathItemObject))
|
[Path Item Object](https://swagger.io/specification/#pathItemObject))
|
||||||
expects a GET request with one
|
expects a GET request with one
|
||||||
[parameter](http://swagger.io/specification/#parameterObject), HTTP
|
[parameter](https://swagger.io/specification/#parameterObject), HTTP
|
||||||
Basic authentication, and returns a JSON response containing `msg`,
|
Basic authentication, and returns a JSON response containing `msg`,
|
||||||
`result`, and `presence` values.
|
`result`, and `presence` values.
|
||||||
|
|
||||||
|
@ -109,7 +109,7 @@ Basic authentication, and returns a JSON response containing `msg`,
|
||||||
### Schemas
|
### Schemas
|
||||||
|
|
||||||
The
|
The
|
||||||
[Definitions Object](http://swagger.io/specification/#definitionsObject)
|
[Definitions Object](https://swagger.io/specification/#definitionsObject)
|
||||||
contains schemas referenced by other objects. For example,
|
contains schemas referenced by other objects. For example,
|
||||||
`MessageResponse`, the response from the `/messages` endpoint,
|
`MessageResponse`, the response from the `/messages` endpoint,
|
||||||
contains three required parameters. Two are strings, and one is an
|
contains three required parameters. Two are strings, and one is an
|
||||||
|
@ -151,13 +151,13 @@ characters are not permitted. If your editor has an option to replace
|
||||||
tabs with spaces, this is helpful.
|
tabs with spaces, this is helpful.
|
||||||
|
|
||||||
You can also use the
|
You can also use the
|
||||||
[Swagger Editor](http://swagger.io/swagger-editor), which validates
|
[Swagger Editor](https://swagger.io/swagger-editor), which validates
|
||||||
YAML and understands the Swagger specification. Download and run it
|
YAML and understands the Swagger specification. Download and run it
|
||||||
locally, or use the online version. If you aren't using a YAML-aware
|
locally, or use the online version. If you aren't using a YAML-aware
|
||||||
editor, make small changes and check your additions often.
|
editor, make small changes and check your additions often.
|
||||||
|
|
||||||
Note: if you are working with
|
Note: if you are working with
|
||||||
[Swagger UI](http://swagger.io/swagger-ui/) in a local development
|
[Swagger UI](https://swagger.io/swagger-ui/) in a local development
|
||||||
environment, it uses an online validator that must be able to access
|
environment, it uses an online validator that must be able to access
|
||||||
your file. You may see a red "ERROR" button at the bottom of your API
|
your file. You may see a red "ERROR" button at the bottom of your API
|
||||||
docs page instead of the green "VALID" one even if your file is
|
docs page instead of the green "VALID" one even if your file is
|
||||||
|
|
|
@ -31,9 +31,9 @@ These three systems are documented in detail.
|
||||||
What you are reading right now is part of the collection of
|
What you are reading right now is part of the collection of
|
||||||
documentation targeted at developers and people running their own
|
documentation targeted at developers and people running their own
|
||||||
Zulip servers. These docs are written in
|
Zulip servers. These docs are written in
|
||||||
[Commonmark Markdown](http://commonmark.org/) with a small bit of rST.
|
[Commonmark Markdown](https://commonmark.org/) with a small bit of rST.
|
||||||
We've chosen Markdown because it is
|
We've chosen Markdown because it is
|
||||||
[easy to write](http://commonmark.org/help). The source for Zulip's
|
[easy to write](https://commonmark.org/help/). The source for Zulip's
|
||||||
developer documentation is at `docs/` in the Zulip git repository, and
|
developer documentation is at `docs/` in the Zulip git repository, and
|
||||||
they are served in production at
|
they are served in production at
|
||||||
[zulip.readthedocs.io](https://zulip.readthedocs.io/en/latest/).
|
[zulip.readthedocs.io](https://zulip.readthedocs.io/en/latest/).
|
||||||
|
|
|
@ -58,7 +58,7 @@ And, if none of the above are to your liking, try [one of these][gitbook-guis].
|
||||||
[gitbook-setup]: https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup
|
[gitbook-setup]: https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup
|
||||||
[gitbook-other-envs-bash]: https://git-scm.com/book/en/v2/Git-in-Other-Environments-Git-in-Bash
|
[gitbook-other-envs-bash]: https://git-scm.com/book/en/v2/Git-in-Other-Environments-Git-in-Bash
|
||||||
[gitbook-other-envs-zsh]: https://git-scm.com/book/en/v2/Git-in-Other-Environments-Git-in-Zsh
|
[gitbook-other-envs-zsh]: https://git-scm.com/book/en/v2/Git-in-Other-Environments-Git-in-Zsh
|
||||||
[gitgui-gitcola]: http://git-cola.github.io/
|
[gitgui-gitcola]: https://git-cola.github.io/
|
||||||
[gitgui-gitg]: https://wiki.gnome.org/Apps/Gitg
|
[gitgui-gitg]: https://wiki.gnome.org/Apps/Gitg
|
||||||
[gitgui-gitk]: https://git-scm.com/docs/gitk
|
[gitgui-gitk]: https://git-scm.com/docs/gitk
|
||||||
[gitgui-gitx]: https://github.com/gitx/gitx/
|
[gitgui-gitx]: https://github.com/gitx/gitx/
|
||||||
|
|
|
@ -61,4 +61,4 @@ Here are the top things to know:
|
||||||
current branch with `git commit`.
|
current branch with `git commit`.
|
||||||
|
|
||||||
[gitbook-basics]: https://git-scm.com/book/en/v2/Getting-Started-Git-Basics
|
[gitbook-basics]: https://git-scm.com/book/en/v2/Getting-Started-Git-Basics
|
||||||
[understanding-git]: http://web.mit.edu/nelhage/Public/git-slides-2009.pdf
|
[understanding-git]: https://web.mit.edu/nelhage/Public/git-slides-2009.pdf
|
||||||
|
|
|
@ -69,7 +69,7 @@ Components
|
||||||
|
|
||||||
Zulip is primarily implemented in the
|
Zulip is primarily implemented in the
|
||||||
[Django](https://www.djangoproject.com/) Python web framework. We
|
[Django](https://www.djangoproject.com/) Python web framework. We
|
||||||
also make use of [Tornado](http://www.tornadoweb.org) for the
|
also make use of [Tornado](https://www.tornadoweb.org) for the
|
||||||
real-time push system.
|
real-time push system.
|
||||||
|
|
||||||
Django is the main web application server; Tornado runs the
|
Django is the main web application server; Tornado runs the
|
||||||
|
|
|
@ -50,7 +50,7 @@ using a "transactional email" service like
|
||||||
[Mailgun](https://documentation.mailgun.com/en/latest/quickstart-sending.html#send-via-smtp),
|
[Mailgun](https://documentation.mailgun.com/en/latest/quickstart-sending.html#send-via-smtp),
|
||||||
[SendGrid](https://sendgrid.com/docs/API_Reference/SMTP_API/integrating_with_the_smtp_api.html),
|
[SendGrid](https://sendgrid.com/docs/API_Reference/SMTP_API/integrating_with_the_smtp_api.html),
|
||||||
or, for AWS users,
|
or, for AWS users,
|
||||||
[Amazon SES](http://docs.aws.amazon.com/ses/latest/DeveloperGuide/send-email-smtp.html).
|
[Amazon SES](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/send-email-smtp.html).
|
||||||
These services are designed to send email from servers, and are by far
|
These services are designed to send email from servers, and are by far
|
||||||
the easiest way to get outgoing email working reliably (Mailgun has
|
the easiest way to get outgoing email working reliably (Mailgun has
|
||||||
the best documentation).
|
the best documentation).
|
||||||
|
|
|
@ -54,6 +54,6 @@ zxcvbn rarely underestimates the strength of a password too severely,
|
||||||
and only about 10% of users do worse than this without prompting.
|
and only about 10% of users do worse than this without prompting.
|
||||||
|
|
||||||
[zxcvbn]: https://github.com/dropbox/zxcvbn
|
[zxcvbn]: https://github.com/dropbox/zxcvbn
|
||||||
[BHOS15]: http://www.cl.cam.ac.uk/~fms27/papers/2015-BonneauHerOorSta-passwords.pdf
|
[BHOS15]: https://www.cl.cam.ac.uk/~fms27/papers/2015-BonneauHerOorSta-passwords.pdf
|
||||||
[zxcvbn-paper]: https://www.usenix.org/system/files/conference/usenixsecurity16/sec16_paper_wheeler.pdf
|
[zxcvbn-paper]: https://www.usenix.org/system/files/conference/usenixsecurity16/sec16_paper_wheeler.pdf
|
||||||
[Bon12]: http://ieeexplore.ieee.org/document/6234435/
|
[Bon12]: https://ieeexplore.ieee.org/document/6234435
|
||||||
|
|
|
@ -23,7 +23,7 @@ browsers, but not others and not the Zulip mobile and desktop apps.
|
||||||
The desktop apps support [configuring a custom CA][desktop-certs] to
|
The desktop apps support [configuring a custom CA][desktop-certs] to
|
||||||
allow validation of certificates generated by an internal CA.
|
allow validation of certificates generated by an internal CA.
|
||||||
|
|
||||||
[nginx-chains]: http://nginx.org/en/docs/http/configuring_https_servers.html#chains
|
[nginx-chains]: https://nginx.org/en/docs/http/configuring_https_servers.html#chains
|
||||||
|
|
||||||
### Testing
|
### Testing
|
||||||
|
|
||||||
|
@ -172,7 +172,7 @@ To resolve this issue, update your server to support TLS 1.2,
|
||||||
and preferably also TLS 1.3. For nginx, see [the `ssl_protocols`
|
and preferably also TLS 1.3. For nginx, see [the `ssl_protocols`
|
||||||
directive][nginx-doc-protocols] in your configuration.
|
directive][nginx-doc-protocols] in your configuration.
|
||||||
|
|
||||||
[nginx-doc-protocols]: http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_protocols
|
[nginx-doc-protocols]: https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_protocols
|
||||||
|
|
||||||
|
|
||||||
### The Android app connects to the server on some devices but not others
|
### The Android app connects to the server on some devices but not others
|
||||||
|
@ -197,7 +197,7 @@ control the offered curves with `ssl_ecdh_curve` in the `nginx`
|
||||||
configuration on your server. See [nginx docs][nginx-doc-curve] for
|
configuration on your server. See [nginx docs][nginx-doc-curve] for
|
||||||
details.
|
details.
|
||||||
|
|
||||||
[nginx-doc-curve]: http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_ecdh_curve
|
[nginx-doc-curve]: https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_ecdh_curve
|
||||||
|
|
||||||
Two signs for diagnosing this issue in contrast to some other root
|
Two signs for diagnosing this issue in contrast to some other root
|
||||||
cause:
|
cause:
|
||||||
|
|
|
@ -330,4 +330,4 @@ usually one needs to think about making changes in 3 places:
|
||||||
[yarn]: https://yarnpkg.com/
|
[yarn]: https://yarnpkg.com/
|
||||||
[npm]: https://npmjs.com/
|
[npm]: https://npmjs.com/
|
||||||
[iamcal]: https://github.com/iamcal/emoji-data
|
[iamcal]: https://github.com/iamcal/emoji-data
|
||||||
[pygments]: http://pygments.org/
|
[pygments]: https://pygments.org/
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Zulip supports full-text search, which can be combined arbitrarily
|
Zulip supports full-text search, which can be combined arbitrarily
|
||||||
with Zulip's full suite of narrowing operators. By default, it only
|
with Zulip's full suite of narrowing operators. By default, it only
|
||||||
supports English text, but there is an experimental
|
supports English text, but there is an experimental
|
||||||
[PGroonga](http://pgroonga.github.io/) integration that provides
|
[PGroonga](https://pgroonga.github.io/) integration that provides
|
||||||
full-text search for all languages.
|
full-text search for all languages.
|
||||||
|
|
||||||
The user interface and feature set for Zulip's full-text search is
|
The user interface and feature set for Zulip's full-text search is
|
||||||
|
@ -13,7 +13,7 @@ app's gear menu.
|
||||||
## The default full-text search implementation
|
## The default full-text search implementation
|
||||||
|
|
||||||
Zulip's uses [PostgreSQL's built-in full-text search
|
Zulip's uses [PostgreSQL's built-in full-text search
|
||||||
feature](http://www.postgresql.org/docs/current/static/textsearch.html),
|
feature](https://www.postgresql.org/docs/current/textsearch.html),
|
||||||
with a custom set of English stop words to improve the quality of the
|
with a custom set of English stop words to improve the quality of the
|
||||||
search results.
|
search results.
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ application server instead.
|
||||||
|
|
||||||
## An optional full-text search implementation
|
## An optional full-text search implementation
|
||||||
|
|
||||||
Zulip now supports using [PGroonga](http://pgroonga.github.io/) for
|
Zulip now supports using [PGroonga](https://pgroonga.github.io/) for
|
||||||
full-text search. PGroonga is a PostgreSQL extension that provides
|
full-text search. PGroonga is a PostgreSQL extension that provides
|
||||||
full-text search feature. PostgreSQL's built-in full-text search
|
full-text search feature. PostgreSQL's built-in full-text search
|
||||||
feature supports only one language at a time (in Zulip's case,
|
feature supports only one language at a time (in Zulip's case,
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
## Zulip CSS organization
|
## Zulip CSS organization
|
||||||
|
|
||||||
The Zulip application's CSS can be found in the `static/styles/`
|
The Zulip application's CSS can be found in the `static/styles/`
|
||||||
directory. Zulip uses [Bootstrap](http://getbootstrap.com/) as its
|
directory. Zulip uses [Bootstrap](https://getbootstrap.com/) as its
|
||||||
main third-party CSS library.
|
main third-party CSS library.
|
||||||
|
|
||||||
Zulip uses SCSS for its CSS files. There are two high-level sections
|
Zulip uses SCSS for its CSS files. There are two high-level sections
|
||||||
|
|
|
@ -236,14 +236,14 @@ be non-standard.
|
||||||
things like `t.co/foo`.
|
things like `t.co/foo`.
|
||||||
|
|
||||||
* Force links to be absolute. `[foo](google.com)` will go to
|
* Force links to be absolute. `[foo](google.com)` will go to
|
||||||
`http://google.com`, and not `http://zulip.com/google.com` which
|
`http://google.com`, and not `https://zulip.com/google.com` which
|
||||||
is the default behavior.
|
is the default behavior.
|
||||||
|
|
||||||
* Set `target="_blank"` and `title=`(the url) on every link tag so
|
* Set `target="_blank"` and `title=`(the url) on every link tag so
|
||||||
clicking always opens a new window.
|
clicking always opens a new window.
|
||||||
|
|
||||||
* Disable link-by-reference syntax,
|
* Disable link-by-reference syntax,
|
||||||
`[foo][bar]` ... `[bar]: http://google.com`.
|
`[foo][bar]` ... `[bar]: https://google.com`.
|
||||||
|
|
||||||
* Enable linking to other streams using `#**streamName**`.
|
* Enable linking to other streams using `#**streamName**`.
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ prevent common coding errors.
|
||||||
We borrow some open source tools for much of our linting, and the links
|
We borrow some open source tools for much of our linting, and the links
|
||||||
below will direct you to the official documentation for these projects.
|
below will direct you to the official documentation for these projects.
|
||||||
|
|
||||||
- [eslint](http://eslint.org)
|
- [eslint](https://eslint.org)
|
||||||
- [mypy](http://mypy-lang.org/)
|
- [mypy](http://mypy-lang.org/)
|
||||||
- [puppet](https://puppet.com/) (puppet provides its own mechanism for
|
- [puppet](https://puppet.com/) (puppet provides its own mechanism for
|
||||||
validating manifests)
|
validating manifests)
|
||||||
|
|
|
@ -17,10 +17,10 @@ def get_user(email: str, realm: Realm) -> UserProfile:
|
||||||
You can learn more about it at:
|
You can learn more about it at:
|
||||||
|
|
||||||
* The
|
* The
|
||||||
[mypy cheat sheet for Python 3](http://mypy.readthedocs.io/en/latest/cheat_sheet_py3.html)
|
[mypy cheat sheet for Python 3](https://mypy.readthedocs.io/en/latest/cheat_sheet_py3.html)
|
||||||
is the best resource for quickly understanding how to write the PEP
|
is the best resource for quickly understanding how to write the PEP
|
||||||
484 type annotations used by mypy correctly. The
|
484 type annotations used by mypy correctly. The
|
||||||
[Python 2 cheat sheet](http://mypy.readthedocs.io/en/latest/cheat_sheet.html)
|
[Python 2 cheat sheet](https://mypy.readthedocs.io/en/latest/cheat_sheet.html)
|
||||||
is useful for understanding the type comment syntax needed for our
|
is useful for understanding the type comment syntax needed for our
|
||||||
few modules that need to support both Python 2 and 3.
|
few modules that need to support both Python 2 and 3.
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,7 @@ trying to use the Casper debugging tools are:
|
||||||
### Print debugging
|
### Print debugging
|
||||||
|
|
||||||
If you need to use print debugging in casper, you can do using
|
If you need to use print debugging in casper, you can do using
|
||||||
`casper.log`; see <https://web.archive.org/web/20200108115113if_/http://docs.casperjs.org/en/latest/logging.html> for
|
`casper.log`; see <https://web.archive.org/web/20200108115113if_/https://docs.casperjs.org/en/latest/logging.html> for
|
||||||
details.
|
details.
|
||||||
|
|
||||||
You can also enable casper's verbose logging mode using the `--verbose` flag. This
|
You can also enable casper's verbose logging mode using the `--verbose` flag. This
|
||||||
|
@ -111,9 +111,9 @@ for writing Casper tests in addition to the debugging notes below:
|
||||||
will ensure that the UI has finished updating from the previous
|
will ensure that the UI has finished updating from the previous
|
||||||
step before Casper attempts to next step. The various wait
|
step before Casper attempts to next step. The various wait
|
||||||
functions supported in Casper are documented in the Casper here:
|
functions supported in Casper are documented in the Casper here:
|
||||||
<https://web.archive.org/web/20200108100925if_/http://docs.casperjs.org/en/latest/modules/casper.html#waitforselector>
|
<https://web.archive.org/web/20200108100925if_/https://docs.casperjs.org/en/latest/modules/casper.html#waitforselector>
|
||||||
and the various assert statements available are documented here:
|
and the various assert statements available are documented here:
|
||||||
<https://web.archive.org/web/20190814204845if_/http://docs.casperjs.org/en/latest/modules/tester.html#the-tester-prototype>
|
<https://web.archive.org/web/20190814204845if_/https://docs.casperjs.org/en/latest/modules/tester.html#the-tester-prototype>
|
||||||
|
|
||||||
- The `casper.wait` style functions (`waitWhileVisible`,
|
- The `casper.wait` style functions (`waitWhileVisible`,
|
||||||
`waitUntilVisible`, etc.) cannot be chained together in certain
|
`waitUntilVisible`, etc.) cannot be chained together in certain
|
||||||
|
@ -183,4 +183,4 @@ for writing Casper tests in addition to the debugging notes below:
|
||||||
which can lead to confusing failures where the new code you write in
|
which can lead to confusing failures where the new code you write in
|
||||||
between two `casper.then` blocks actually runs before either of
|
between two `casper.then` blocks actually runs before either of
|
||||||
them. See this for more details about how Casper works:
|
them. See this for more details about how Casper works:
|
||||||
<https://web.archive.org/web/20200107035425if_/http://docs.casperjs.org/en/latest/faq.html#how-does-then-and-the-step-stack-work>
|
<https://web.archive.org/web/20200107035425if_/https://docs.casperjs.org/en/latest/faq.html#how-does-then-and-the-step-stack-work>
|
||||||
|
|
|
@ -183,7 +183,7 @@ For users to be able to join to an "invite-only" stream, they must have been
|
||||||
invited by some user in this stream. This type of stream is equivalent to
|
invited by some user in this stream. This type of stream is equivalent to
|
||||||
Facebook's "closed" groups, which in turn translates to "geschlossen" in German.
|
Facebook's "closed" groups, which in turn translates to "geschlossen" in German.
|
||||||
This translation seems to be appropriate, for example [Linguee](
|
This translation seems to be appropriate, for example [Linguee](
|
||||||
http://www.linguee.de/englisch-deutsch/uebersetzung/invite-only.html)
|
https://www.linguee.de/englisch-deutsch/uebersetzung/invite-only.html)
|
||||||
search returns only paraphrases of this term.
|
search returns only paraphrases of this term.
|
||||||
|
|
||||||
*"Geschlossener Stream" (Transifex), "Geschlossene Gruppe" (Facebook),
|
*"Geschlossener Stream" (Transifex), "Geschlossene Gruppe" (Facebook),
|
||||||
|
@ -227,7 +227,7 @@ This one is tricky, since one might initially think of "Alarmwort" as a proper
|
||||||
translation. "Alarm", however, has a negative connotation, people link it to
|
translation. "Alarm", however, has a negative connotation, people link it to
|
||||||
unpleasant events. "Signal", on the other hand, is neutral, just like
|
unpleasant events. "Signal", on the other hand, is neutral, just like
|
||||||
"alert word". Nevertheless, [Linguee](
|
"alert word". Nevertheless, [Linguee](
|
||||||
http://www.linguee.de/deutsch-englisch/search?source=auto&query=alert+word)
|
https://www.linguee.de/deutsch-englisch/search?source=auto&query=alert+word)
|
||||||
shows that some websites misuse "Alarm" for the translation.
|
shows that some websites misuse "Alarm" for the translation.
|
||||||
|
|
||||||
*"Signalwort" (Transifex), "Wort-Alarm" (Linguee)*
|
*"Signalwort" (Transifex), "Wort-Alarm" (Linguee)*
|
||||||
|
|
|
@ -24,7 +24,7 @@ Use informal Spanish for translation:
|
||||||
to decide what wouldn't sound awkward / rude in Spanish.
|
to decide what wouldn't sound awkward / rude in Spanish.
|
||||||
|
|
||||||
* Latest RAE rule ("solo" should
|
* Latest RAE rule ("solo" should
|
||||||
[**never**](http://www.rae.es/consultas/el-adverbio-solo-y-los-pronombres-demostrativos-sin-tilde)
|
[**never**](https://www.rae.es/consultas/el-adverbio-solo-y-los-pronombres-demostrativos-sin-tilde)
|
||||||
have accent, even when it can be replaced with "solamente").
|
have accent, even when it can be replaced with "solamente").
|
||||||
|
|
||||||
Some terms are very tricky to translate, so be sure to communicate
|
Some terms are very tricky to translate, so be sure to communicate
|
||||||
|
|
|
@ -7,7 +7,7 @@ Zulip codebase, and dive deep into how each part works.
|
||||||
We will use as our example the creation of users through the API, but we
|
We will use as our example the creation of users through the API, but we
|
||||||
will also highlight how alternative requests are handled.
|
will also highlight how alternative requests are handled.
|
||||||
|
|
||||||
## A request is sent to the server, and handled by [Nginx](http://nginx.org/en/docs/)
|
## A request is sent to the server, and handled by [Nginx](https://nginx.org/en/docs/)
|
||||||
|
|
||||||
When Zulip is deployed in production, all requests go through nginx.
|
When Zulip is deployed in production, all requests go through nginx.
|
||||||
For the most part we don't need to know how this works, except for when
|
For the most part we don't need to know how this works, except for when
|
||||||
|
@ -84,7 +84,7 @@ For example, the `/features` page (preview
|
||||||
|
|
||||||
Note the `zh-hans` prefix--that url pattern gets added by `i18n_patterns`.
|
Note the `zh-hans` prefix--that url pattern gets added by `i18n_patterns`.
|
||||||
|
|
||||||
## API endpoints use [REST](http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm)
|
## API endpoints use [REST](https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm)
|
||||||
|
|
||||||
Our example is a REST API endpoint. It's a PUT to `/users`.
|
Our example is a REST API endpoint. It's a PUT to `/users`.
|
||||||
|
|
||||||
|
@ -114,7 +114,7 @@ idempotent, and we like to write API endpoints in an idempotent fashion,
|
||||||
as much as possible.
|
as much as possible.
|
||||||
|
|
||||||
This [cookbook](http://restcookbook.com/) and
|
This [cookbook](http://restcookbook.com/) and
|
||||||
[tutorial](http://www.restapitutorial.com/) can be helpful if you are
|
[tutorial](https://www.restapitutorial.com/) can be helpful if you are
|
||||||
new to REST web applications.
|
new to REST web applications.
|
||||||
|
|
||||||
### PUT is only for creating new things
|
### PUT is only for creating new things
|
||||||
|
|
|
@ -28,7 +28,7 @@ Some titles have been shortened for organizational purposes.
|
||||||
|
|
||||||
*Blog* - [Idle Words talks transcripts][]
|
*Blog* - [Idle Words talks transcripts][]
|
||||||
|
|
||||||
[Idle Words talks transcripts]: http://idlewords.com/talks
|
[Idle Words talks transcripts]: https://idlewords.com/talks
|
||||||
|
|
||||||
*Tutorial* - [HTTP Can Do That?!, by Sumana Harihareswara (PyCon 2016)][]
|
*Tutorial* - [HTTP Can Do That?!, by Sumana Harihareswara (PyCon 2016)][]
|
||||||
|
|
||||||
|
@ -60,15 +60,15 @@ Some titles have been shortened for organizational purposes.
|
||||||
|
|
||||||
*Article* - [Effective Learning Strategies for Programmers][]
|
*Article* - [Effective Learning Strategies for Programmers][]
|
||||||
|
|
||||||
[Effective Learning Strategies for Programmers]: http://akaptur.com/blog/2015/10/10/effective-learning-strategies-for-programmers/
|
[Effective Learning Strategies for Programmers]: https://akaptur.com/blog/2015/10/10/effective-learning-strategies-for-programmers/
|
||||||
|
|
||||||
*Article* - [Readme Driven Development][]
|
*Article* - [Readme Driven Development][]
|
||||||
|
|
||||||
[Readme Driven Development]: http://tom.preston-werner.com/2010/08/23/readme-driven-development.html
|
[Readme Driven Development]: https://tom.preston-werner.com/2010/08/23/readme-driven-development.html
|
||||||
|
|
||||||
*Article* - [Systematic Debugging][]
|
*Article* - [Systematic Debugging][]
|
||||||
|
|
||||||
[Systematic Debugging]: http://akaptur.com/blog/2013/07/24/systematic-debugging
|
[Systematic Debugging]: https://akaptur.com/blog/2013/07/24/systematic-debugging
|
||||||
|
|
||||||
*Paper* - [Floating-Point Arithmetic][]
|
*Paper* - [Floating-Point Arithmetic][]
|
||||||
|
|
||||||
|
@ -86,11 +86,11 @@ Some titles have been shortened for organizational purposes.
|
||||||
|
|
||||||
*Video* - [Build & break a Python sandbox, by Jessica McKellar (PyCon 2014)][]
|
*Video* - [Build & break a Python sandbox, by Jessica McKellar (PyCon 2014)][]
|
||||||
|
|
||||||
[Build & break a Python sandbox, by Jessica McKellar (PyCon 2014)]: http://pyvideo.org/pycon-us-2014/building-and-breaking-a-python-sandbox.html
|
[Build & break a Python sandbox, by Jessica McKellar (PyCon 2014)]: https://pyvideo.org/pycon-us-2014/building-and-breaking-a-python-sandbox.html
|
||||||
|
|
||||||
*Video* - [Cache me if you can, by Guillaume Ardaud (PyCon 2014)][]
|
*Video* - [Cache me if you can, by Guillaume Ardaud (PyCon 2014)][]
|
||||||
|
|
||||||
[Cache me if you can, by Guillaume Ardaud (PyCon 2014)]: http://pyvideo.org/pycon-us-2014/cache-me-if-you-can-memcached-caching-patterns.html
|
[Cache me if you can, by Guillaume Ardaud (PyCon 2014)]: https://pyvideo.org/pycon-us-2014/cache-me-if-you-can-memcached-caching-patterns.html
|
||||||
|
|
||||||
*Video* - [Loop like a native, by Ned Batchelder (PyCon 2013)][]
|
*Video* - [Loop like a native, by Ned Batchelder (PyCon 2013)][]
|
||||||
|
|
||||||
|
@ -106,15 +106,15 @@ Some titles have been shortened for organizational purposes.
|
||||||
|
|
||||||
*Video* - [The Mighty Dictionary, by Brandon Rhodes (PyCon 2010)][]
|
*Video* - [The Mighty Dictionary, by Brandon Rhodes (PyCon 2010)][]
|
||||||
|
|
||||||
[The Mighty Dictionary, by Brandon Rhodes (PyCon 2010)]: http://pyvideo.org/pycon-us-2010/the-mighty-dictionary-55.html
|
[The Mighty Dictionary, by Brandon Rhodes (PyCon 2010)]: https://pyvideo.org/pycon-us-2010/the-mighty-dictionary-55.html
|
||||||
|
|
||||||
*Article* - [Static types in Python, oh my(py)!][]
|
*Article* - [Static types in Python, oh my(py)!][]
|
||||||
|
|
||||||
[Static types in Python, oh my(py)!]: http://blog.zulip.org/2016/10/13/static-types-in-python-oh-mypy
|
[Static types in Python, oh my(py)!]: https://blog.zulip.org/2016/10/13/static-types-in-python-oh-mypy
|
||||||
|
|
||||||
*Guide* - [The Hitchhiker’s Guide to Python!][]
|
*Guide* - [The Hitchhiker’s Guide to Python!][]
|
||||||
|
|
||||||
[The Hitchhiker’s Guide to Python!]: http://docs.python-guide.org/en/latest
|
[The Hitchhiker’s Guide to Python!]: https://docs.python-guide.org/
|
||||||
|
|
||||||
## Java/Android
|
## Java/Android
|
||||||
|
|
||||||
|
@ -124,7 +124,7 @@ Some titles have been shortened for organizational purposes.
|
||||||
|
|
||||||
*Blog* - [Java Tutorials for Beginners][]
|
*Blog* - [Java Tutorials for Beginners][]
|
||||||
|
|
||||||
[Java Tutorials for Beginners]: http://www.geeksforgeeks.org/java/
|
[Java Tutorials for Beginners]: https://www.geeksforgeeks.org/java/
|
||||||
|
|
||||||
## JavaScript/ECMAScript
|
## JavaScript/ECMAScript
|
||||||
|
|
||||||
|
@ -138,7 +138,7 @@ Some titles have been shortened for organizational purposes.
|
||||||
|
|
||||||
*Slides* - [TypeScript vs. CoffeeScript vs. ES6][]
|
*Slides* - [TypeScript vs. CoffeeScript vs. ES6][]
|
||||||
|
|
||||||
[TypeScript vs. CoffeeScript vs. ES6]: http://www.slideshare.net/NeilGreen1/type-script-vs-coffeescript-vs-es6
|
[TypeScript vs. CoffeeScript vs. ES6]: https://www.slideshare.net/NeilGreen1/type-script-vs-coffeescript-vs-es6
|
||||||
|
|
||||||
## TypeScript
|
## TypeScript
|
||||||
|
|
||||||
|
@ -164,7 +164,7 @@ You may want to take a look first at our [Git and GitHub guide][].
|
||||||
|
|
||||||
*Blog* - [GeeksforGeeks][]
|
*Blog* - [GeeksforGeeks][]
|
||||||
|
|
||||||
[GeeksforGeeks]: http://www.geeksforgeeks.org
|
[GeeksforGeeks]: https://www.geeksforgeeks.org
|
||||||
|
|
||||||
*Book* [Introduction to Algorithms][] (*Not free!*)
|
*Book* [Introduction to Algorithms][] (*Not free!*)
|
||||||
|
|
||||||
|
@ -172,7 +172,7 @@ You may want to take a look first at our [Git and GitHub guide][].
|
||||||
|
|
||||||
*Blog* - [Setosa data visualization and visual explanations][]
|
*Blog* - [Setosa data visualization and visual explanations][]
|
||||||
|
|
||||||
[Setosa data visualization and visual explanations]: http://setosa.io
|
[Setosa data visualization and visual explanations]: https://setosa.io
|
||||||
|
|
||||||
*Course* - [Algorithms, Part I][]
|
*Course* - [Algorithms, Part I][]
|
||||||
|
|
||||||
|
@ -190,7 +190,7 @@ You may want to take a look first at our [Git and GitHub guide][].
|
||||||
|
|
||||||
*Book* - [Producing Open Source Software][]
|
*Book* - [Producing Open Source Software][]
|
||||||
|
|
||||||
[Producing Open Source Software]: http://producingoss.com/en/
|
[Producing Open Source Software]: https://producingoss.com/en/
|
||||||
|
|
||||||
*Article* - [Advice on Starting And Running A New Open Source Project][]
|
*Article* - [Advice on Starting And Running A New Open Source Project][]
|
||||||
|
|
||||||
|
@ -220,7 +220,7 @@ You may want to take a look first at our [Git and GitHub guide][].
|
||||||
|
|
||||||
[CodeForces][]
|
[CodeForces][]
|
||||||
|
|
||||||
[CodeForces]: http://codeforces.com
|
[CodeForces]: https://codeforces.com
|
||||||
|
|
||||||
[Free Code Camp][]
|
[Free Code Camp][]
|
||||||
|
|
||||||
|
@ -238,7 +238,7 @@ You may want to take a look first at our [Git and GitHub guide][].
|
||||||
|
|
||||||
[MIT OpenCourseWare][]
|
[MIT OpenCourseWare][]
|
||||||
|
|
||||||
[MIT OpenCourseWare]: http://ocw.mit.edu
|
[MIT OpenCourseWare]: https://ocw.mit.edu
|
||||||
|
|
||||||
[Udacity][]
|
[Udacity][]
|
||||||
|
|
||||||
|
|
|
@ -45,7 +45,7 @@ to checkout your branch.
|
||||||
- [Gyazo GIF](https://gyazo.com/en)
|
- [Gyazo GIF](https://gyazo.com/en)
|
||||||
|
|
||||||
### Windows
|
### Windows
|
||||||
- [ScreenToGif](http://www.screentogif.com)
|
- [ScreenToGif](https://www.screentogif.com)
|
||||||
- [Gyazo GIF](https://gyazo.com/en)
|
- [Gyazo GIF](https://gyazo.com/en)
|
||||||
- [Monosnap](https://www.monosnap.com/welcome)
|
- [Monosnap](https://www.monosnap.com/welcome)
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@ at `(venv)john@laptop:~$`:
|
||||||
|
|
||||||
- `(venv)` informs the user that they're currently in a virtual environment
|
- `(venv)` informs the user that they're currently in a virtual environment
|
||||||
(more on [Python virtual
|
(more on [Python virtual
|
||||||
environments](http://docs.python-guide.org/en/latest/dev/virtualenvs/))
|
environments](https://docs.python-guide.org/dev/virtualenvs/))
|
||||||
- the `john` before `@` is the username
|
- the `john` before `@` is the username
|
||||||
- the `laptop` is the host machine name
|
- the `laptop` is the host machine name
|
||||||
- the `~` after the colon informs the user they're currently in the home
|
- the `~` after the colon informs the user they're currently in the home
|
||||||
|
@ -316,7 +316,7 @@ cases, `#!/bin/bash` or `#!/bin/sh` is used.
|
||||||
Frequently, you may find commands that you don't understand, or don't
|
Frequently, you may find commands that you don't understand, or don't
|
||||||
know what they do. You can use `man <command>` to see the **man**ual page for
|
know what they do. You can use `man <command>` to see the **man**ual page for
|
||||||
that specific command. Also, you may find useful
|
that specific command. Also, you may find useful
|
||||||
[explainshell](http://explainshell.com/), a webpage that explains what most
|
[explainshell](https://explainshell.com/), a webpage that explains what most
|
||||||
commands do, part by part.
|
commands do, part by part.
|
||||||
Finally, [docopt](http://docopt.org/) can help you understand the syntax used
|
Finally, [docopt](http://docopt.org/) can help you understand the syntax used
|
||||||
by command-line tools to describe their interface, and make sense of strings like
|
by command-line tools to describe their interface, and make sense of strings like
|
||||||
|
|
|
@ -35,7 +35,7 @@ exports.initialize_casper = function () {
|
||||||
// casper.start has been called.
|
// casper.start has been called.
|
||||||
|
|
||||||
// Fail if we get a JavaScript error in the page's context.
|
// Fail if we get a JavaScript error in the page's context.
|
||||||
// Based on the example at http://phantomjs.org/release-1.5.html
|
// Based on the example at https://phantomjs.org/release-1.5.html
|
||||||
//
|
//
|
||||||
// casper.on('error') doesn't work (it never gets called) so we
|
// casper.on('error') doesn't work (it never gets called) so we
|
||||||
// set this at the PhantomJS level.
|
// set this at the PhantomJS level.
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Provides a few utility functions.
|
// Provides a few utility functions.
|
||||||
// See https://web.archive.org/web/20200110122733if_/http://docs.casperjs.org/en/latest/modules/utils.html
|
// See https://web.archive.org/web/20200110122733if_/https://docs.casperjs.org/en/latest/modules/utils.html
|
||||||
// For example, utils.dump() prints an Object with nice formatting.
|
// For example, utils.dump() prints an Object with nice formatting.
|
||||||
var common = require('../casper_lib/common.js');
|
var common = require('../casper_lib/common.js');
|
||||||
|
|
||||||
|
|
|
@ -120,7 +120,7 @@ for device in macs.values():
|
||||||
assert(gateway is not None)
|
assert(gateway is not None)
|
||||||
|
|
||||||
# Horrible hack to route return packets on the correct interface
|
# Horrible hack to route return packets on the correct interface
|
||||||
# See http://unix.stackexchange.com/a/4421/933
|
# See https://unix.stackexchange.com/a/4421/933
|
||||||
subprocess.check_call(
|
subprocess.check_call(
|
||||||
['/sbin/ip', 'rule', 'add', 'fwmark', dev_num, 'table', dev_num])
|
['/sbin/ip', 'rule', 'add', 'fwmark', dev_num, 'table', dev_num])
|
||||||
subprocess.check_call(
|
subprocess.check_call(
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// Convert an sRGB value in [0, 255] to a linear intensity
|
// Convert an sRGB value in [0, 255] to a linear intensity
|
||||||
// value in [0, 1].
|
// value in [0, 1].
|
||||||
//
|
//
|
||||||
// http://en.wikipedia.org/wiki/SRGB#The_reverse_transformation
|
// https://en.wikipedia.org/wiki/SRGB#The_reverse_transformation
|
||||||
exports.sRGB_to_linear = function (v) {
|
exports.sRGB_to_linear = function (v) {
|
||||||
v = v / 255.0;
|
v = v / 255.0;
|
||||||
if (v <= 0.04045) {
|
if (v <= 0.04045) {
|
||||||
|
@ -19,7 +19,7 @@ exports.rgb_luminance = function (channel) {
|
||||||
// Convert luminance (photometric, CIE Y)
|
// Convert luminance (photometric, CIE Y)
|
||||||
// to lightness (perceptual, CIE L*)
|
// to lightness (perceptual, CIE L*)
|
||||||
//
|
//
|
||||||
// http://en.wikipedia.org/wiki/Lab_color_space#Forward_transformation
|
// https://en.wikipedia.org/wiki/Lab_color_space#Forward_transformation
|
||||||
exports.luminance_to_lightness = function (luminance) {
|
exports.luminance_to_lightness = function (luminance) {
|
||||||
let v;
|
let v;
|
||||||
if (luminance <= 216 / 24389) {
|
if (luminance <= 216 / 24389) {
|
||||||
|
|
|
@ -242,7 +242,7 @@ function handle_keyup(e) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// http://stackoverflow.com/questions/3380458/looking-for-a-better-workaround-to-chrome-select-on-focus-bug
|
// https://stackoverflow.com/questions/3380458/looking-for-a-better-workaround-to-chrome-select-on-focus-bug
|
||||||
function select_on_focus(field_id) {
|
function select_on_focus(field_id) {
|
||||||
// A select event appears to trigger a focus event under certain
|
// A select event appears to trigger a focus event under certain
|
||||||
// conditions in Chrome so we need to protect against infinite
|
// conditions in Chrome so we need to protect against infinite
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
const util = require("./util");
|
const util = require("./util");
|
||||||
// How to determine the direction of a paragraph (P1-P3): http://www.unicode.org/reports/tr9/tr9-35.html#The_Paragraph_Level
|
// How to determine the direction of a paragraph (P1-P3): https://www.unicode.org/reports/tr9/tr9-35.html#The_Paragraph_Level
|
||||||
// Embedding level: http://www.unicode.org/reports/tr9/tr9-35.html#BD2
|
// Embedding level: https://www.unicode.org/reports/tr9/tr9-35.html#BD2
|
||||||
// How to find the matching PDI for an isolation initiator: http://www.unicode.org/reports/tr9/tr9-35.html#BD9
|
// How to find the matching PDI for an isolation initiator: https://www.unicode.org/reports/tr9/tr9-35.html#BD9
|
||||||
// Bidirectional character types: http://www.unicode.org/reports/tr9/tr9-35.html#Table_Bidirectional_Character_Types
|
// Bidirectional character types: https://www.unicode.org/reports/tr9/tr9-35.html#Table_Bidirectional_Character_Types
|
||||||
|
|
||||||
// Ranges data is extracted from: http://www.unicode.org/Public/9.0.0/ucd/extracted/DerivedBidiClass.txt
|
// Ranges data is extracted from: https://www.unicode.org/Public/9.0.0/ucd/extracted/DerivedBidiClass.txt
|
||||||
// References:
|
// References:
|
||||||
// http://www.unicode.org/reports/tr44/tr44-18.html#UnicodeData.txt
|
// https://www.unicode.org/reports/tr44/tr44-18.html#UnicodeData.txt
|
||||||
// http://www.unicode.org/reports/tr44/tr44-18.html#Extracted_Properties_Table
|
// https://www.unicode.org/reports/tr44/tr44-18.html#Extracted_Properties_Table
|
||||||
// http://www.unicode.org/Public/9.0.0/ucd/UnicodeData.txt
|
// https://www.unicode.org/Public/9.0.0/ucd/UnicodeData.txt
|
||||||
// http://www.unicode.org/Public/9.0.0/ucd/extracted/DerivedBidiClass.txt
|
// https://www.unicode.org/Public/9.0.0/ucd/extracted/DerivedBidiClass.txt
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -5,7 +5,7 @@ exports.change_tab_to = function (tabname) {
|
||||||
$('#gear-menu a[href="' + tabname + '"]').tab('show');
|
$('#gear-menu a[href="' + tabname + '"]').tab('show');
|
||||||
};
|
};
|
||||||
|
|
||||||
// http://stackoverflow.com/questions/4233265/contenteditable-set-caret-at-the-end-of-the-text-cross-browser
|
// https://stackoverflow.com/questions/4233265/contenteditable-set-caret-at-the-end-of-the-text-cross-browser
|
||||||
exports.place_caret_at_end = function (el) {
|
exports.place_caret_at_end = function (el) {
|
||||||
el.focus();
|
el.focus();
|
||||||
|
|
||||||
|
|
|
@ -199,7 +199,7 @@
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
vertical-align: bottom; /* See http://stackoverflow.com/a/43266155/ */
|
vertical-align: bottom; /* See https://stackoverflow.com/a/43266155/ */
|
||||||
padding: 3px 10px;
|
padding: 3px 10px;
|
||||||
background-color: hsl(0, 0%, 100%);
|
background-color: hsl(0, 0%, 100%);
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
{{#if should_display_edit_and_view_source}}
|
{{#if should_display_edit_and_view_source}}
|
||||||
<li>
|
<li>
|
||||||
<a href="#" class="popover_edit_message" data-message-id="{{message_id}}">
|
<a href="#" class="popover_edit_message" data-message-id="{{message_id}}">
|
||||||
{{! Can consider http://fontawesome.io/icon/file-code-o/ when we upgrade to font awesome 4.}}
|
{{! Can consider https://fontawesome.com/v4.7.0/icon/file-code-o when we upgrade to font awesome 4.}}
|
||||||
<i class="{{#if use_edit_icon}}fa fa-pencil{{else}}fa fa-file-text-o{{/if}}" aria-hidden="true"></i> {{editability_menu_item}}
|
<i class="{{#if use_edit_icon}}fa fa-pencil{{else}}fa fa-file-text-o{{/if}}" aria-hidden="true"></i> {{editability_menu_item}}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
|
@ -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="https://www.webfx.com/tools/emoji-cheat-sheet/" target="_blank">many others</a>, from the <a href="https://code.google.com/p/noto/" target="_blank">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" href="https://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>
|
||||||
|
|
|
@ -60,7 +60,7 @@
|
||||||
<div id="third-party-apps">
|
<div id="third-party-apps">
|
||||||
Zulip also works great in pinned browser tabs and
|
Zulip also works great in pinned browser tabs and
|
||||||
multi-protocol desktop chat apps
|
multi-protocol desktop chat apps
|
||||||
like <a href="http://rambox.pro">Rambox</a>
|
like <a href="https://rambox.pro">Rambox</a>
|
||||||
and <a href="https://meetfranz.com">Franz</a>.
|
and <a href="https://meetfranz.com">Franz</a>.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -108,7 +108,7 @@ You can also use `~~~` to start codeblocks, or just indent the code 4 or more sp
|
||||||
|
|
||||||
Zulip supports syntax highlighting for hundreds of languages, and a
|
Zulip supports syntax highlighting for hundreds of languages, and a
|
||||||
typeahead will pop up when you start typing after the ` ``` `. If you can't
|
typeahead will pop up when you start typing after the ` ``` `. If you can't
|
||||||
find your language, search for it [here](http://pygments.org/docs/lexers)
|
find your language, search for it [here](https://pygments.org/docs/lexers/)
|
||||||
and try the **short names** listed for the lexers for your language.
|
and try the **short names** listed for the lexers for your language.
|
||||||
|
|
||||||
## Latex
|
## Latex
|
||||||
|
|
|
@ -4,7 +4,7 @@ At present, there are a few alpha-quality implementations of a terminal
|
||||||
client for Zulip:
|
client for Zulip:
|
||||||
|
|
||||||
* [Zulip Terminal](https://github.com/zulip/zulip-terminal) provides a
|
* [Zulip Terminal](https://github.com/zulip/zulip-terminal) provides a
|
||||||
terminal interface for Zulip using [Urwid](https://urwid.org). It is
|
terminal interface for Zulip using [Urwid](http://urwid.org). It is
|
||||||
written in python and is being very actively developed; feedback and
|
written in python and is being very actively developed; feedback and
|
||||||
bug reports are very welcome!
|
bug reports are very welcome!
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,7 @@ creating that file.
|
||||||
at a different time. See [Capistrano's Before/After Hooks page][1]
|
at a different time. See [Capistrano's Before/After Hooks page][1]
|
||||||
for more information!
|
for more information!
|
||||||
|
|
||||||
[1]: http://capistranorb.com/documentation/getting-started/before-after/
|
[1]: https://capistranorb.com/documentation/getting-started/before-after/
|
||||||
|
|
||||||
{!congrats.md!}
|
{!congrats.md!}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
Run your favorite chatbot in Zulip!
|
Run your favorite chatbot in Zulip!
|
||||||
|
|
||||||
0. [Install errbot](http://errbot.io/en/latest/user_guide/setup.html)
|
0. [Install errbot](https://errbot.readthedocs.io/en/latest/user_guide/setup.html)
|
||||||
and follow to instructions to setup a `config.py`.
|
and follow to instructions to setup a `config.py`.
|
||||||
|
|
||||||
0. Check our our [Errbot integration package for Zulip](https://github.com/zulip/errbot-backend-zulip)
|
0. Check our our [Errbot integration package for Zulip](https://github.com/zulip/errbot-backend-zulip)
|
||||||
|
@ -37,7 +37,7 @@ Run your favorite chatbot in Zulip!
|
||||||
|
|
||||||
Sections you need to edit are marked with `<>`.
|
Sections you need to edit are marked with `<>`.
|
||||||
|
|
||||||
7. [Start ErrBot](http://errbot.io/en/latest/user_guide/setup.html#starting-the-daemon).
|
7. [Start ErrBot](https://errbot.readthedocs.io/en/latest/user_guide/setup.html#starting-the-daemon).
|
||||||
|
|
||||||
{!congrats.md!}
|
{!congrats.md!}
|
||||||
|
|
||||||
|
|
|
@ -52,7 +52,7 @@ notifications:
|
||||||
web_url = "http://hg.example.com:8000/"
|
web_url = "http://hg.example.com:8000/"
|
||||||
site = {{ api_url }}
|
site = {{ api_url }}
|
||||||
|
|
||||||
[1]: http://mercurial.selenic.com/wiki/QuickStart#Network_support
|
[1]: https://www.mercurial-scm.org/wiki/QuickStart#Network_support
|
||||||
|
|
||||||
#### Branch whitelists and blacklists
|
#### Branch whitelists and blacklists
|
||||||
|
|
||||||
|
|
|
@ -52,7 +52,7 @@ using the `Send custom service notification` command in the
|
||||||
`Service Commands` section of any individual service’s page
|
`Service Commands` section of any individual service’s page
|
||||||
on your Nagios instance.
|
on your Nagios instance.
|
||||||
|
|
||||||
[1]: http://nagios.sourceforge.net/docs/3_0/extcommands.html
|
[1]: https://assets.nagios.com/downloads/nagioscore/docs/nagioscore/3/en/extcommands.html
|
||||||
|
|
||||||
**Troubleshooting**
|
**Troubleshooting**
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ Zulip supports integration with Perforce as a [trigger][1]
|
||||||
that fires once a changelist is submitted and committed.
|
that fires once a changelist is submitted and committed.
|
||||||
To do this:
|
To do this:
|
||||||
|
|
||||||
[1]: http://www.perforce.com/perforce/doc.current/manuals/p4sag/chapter.scripting.html
|
[1]: https://www.perforce.com/manuals/p4sag/Content/P4SAG/chapter.scripting.html
|
||||||
|
|
||||||
{!download-python-bindings.md!}
|
{!download-python-bindings.md!}
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ something like the following:
|
||||||
|
|
||||||
notify_zulip change-commit //depot/... "/usr/local/share/zulip/integrations/perforce/zulip_change-commit.py %change% %changeroot%"
|
notify_zulip change-commit //depot/... "/usr/local/share/zulip/integrations/perforce/zulip_change-commit.py %change% %changeroot%"
|
||||||
|
|
||||||
[2]: http://www.perforce.com/perforce/doc.current/manuals/p4sag/chapter.scripting.html#d0e14583
|
[2]: https://www.perforce.com/manuals/p4sag/Content/P4SAG/chapter.scripting.html#d0e14583
|
||||||
|
|
||||||
By default, this hook will send to streams of the form
|
By default, this hook will send to streams of the form
|
||||||
`depot_subdirectory-commits`. So, a changelist that modifies
|
`depot_subdirectory-commits`. So, a changelist that modifies
|
||||||
|
|
|
@ -55,5 +55,5 @@ project's **Settings** page, and select the **Zulip** tab.
|
||||||
|
|
||||||
![](/static/images/integrations/redmine/001.png)
|
![](/static/images/integrations/redmine/001.png)
|
||||||
|
|
||||||
[1]: http://www.redmine.org/projects/redmine/wiki/Plugins
|
[1]: https://www.redmine.org/projects/redmine/wiki/Plugins
|
||||||
[2]: https://github.com/zulip/zulip-redmine-plugin
|
[2]: https://github.com/zulip/zulip-redmine-plugin
|
||||||
|
|
|
@ -543,7 +543,7 @@ css_rules = RuleList(
|
||||||
'description': "Missing whitespace before '{' in CSS.",
|
'description': "Missing whitespace before '{' in CSS.",
|
||||||
'good_lines': ["input {", "body {"],
|
'good_lines': ["input {", "body {"],
|
||||||
'bad_lines': ["input{", "body{"]},
|
'bad_lines': ["input{", "body{"]},
|
||||||
{'pattern': 'https://',
|
{'pattern': r'^(?:(?!/\*).)*https?://',
|
||||||
'description': "Zulip CSS should have no dependencies on external resources",
|
'description': "Zulip CSS should have no dependencies on external resources",
|
||||||
'good_lines': ['background: url(/static/images/landing-page/pycon.jpg);'],
|
'good_lines': ['background: url(/static/images/landing-page/pycon.jpg);'],
|
||||||
'bad_lines': ['background: url(https://example.com/image.png);']},
|
'bad_lines': ['background: url(https://example.com/image.png);']},
|
||||||
|
|
|
@ -113,7 +113,7 @@ EMOJI_NAME_MAPS = {
|
||||||
'1f925': {'canonical_name': 'lying', 'aliases': []},
|
'1f925': {'canonical_name': 'lying', 'aliases': []},
|
||||||
# seems like best emoji for nervous/anxious
|
# seems like best emoji for nervous/anxious
|
||||||
'1f62c': {'canonical_name': 'grimacing', 'aliases': ['nervous', 'anxious']},
|
'1f62c': {'canonical_name': 'grimacing', 'aliases': ['nervous', 'anxious']},
|
||||||
# zip_it from http://mashable.com/2015/10/23/ios-9-1-emoji-guide,
|
# zip_it from https://mashable.com/2015/10/23/ios-9-1-emoji-guide/,
|
||||||
# lips_sealed from https://emojipedia.org/zipper-mouth-face/, rest seemed
|
# lips_sealed from https://emojipedia.org/zipper-mouth-face/, rest seemed
|
||||||
# like reasonable additions
|
# like reasonable additions
|
||||||
'1f910': {'canonical_name': 'silence', 'aliases': ['quiet', 'hush', 'zip_it', 'lips_are_sealed']},
|
'1f910': {'canonical_name': 'silence', 'aliases': ['quiet', 'hush', 'zip_it', 'lips_are_sealed']},
|
||||||
|
@ -122,7 +122,7 @@ EMOJI_NAME_MAPS = {
|
||||||
'1f927': {'canonical_name': 'sneezing', 'aliases': []},
|
'1f927': {'canonical_name': 'sneezing', 'aliases': []},
|
||||||
# cant_talk from https://beebom.com/emoji-meanings/
|
# cant_talk from https://beebom.com/emoji-meanings/
|
||||||
'1f637': {'canonical_name': 'cant_talk', 'aliases': ['mask']},
|
'1f637': {'canonical_name': 'cant_talk', 'aliases': ['mask']},
|
||||||
# flu from http://mashable.com/2015/10/23/ios-9-1-emoji-guide, sick from
|
# flu from https://mashable.com/2015/10/23/ios-9-1-emoji-guide/, sick from
|
||||||
# https://emojipedia.org/face-with-thermometer/, face_with_thermometer so
|
# https://emojipedia.org/face-with-thermometer/, face_with_thermometer so
|
||||||
# it shows up in typeahead (thermometer taken by Objects/82)
|
# it shows up in typeahead (thermometer taken by Objects/82)
|
||||||
'1f912': {'canonical_name': 'sick', 'aliases': ['flu', 'face_with_thermometer', 'ill', 'fever']},
|
'1f912': {'canonical_name': 'sick', 'aliases': ['flu', 'face_with_thermometer', 'ill', 'fever']},
|
||||||
|
@ -205,7 +205,7 @@ EMOJI_NAME_MAPS = {
|
||||||
# seems like best emoji for high_five, raised_hand_with_fingers_splayed
|
# seems like best emoji for high_five, raised_hand_with_fingers_splayed
|
||||||
# doesn't seem that useful
|
# doesn't seem that useful
|
||||||
'1f590': {'canonical_name': 'high_five', 'aliases': ['palm']},
|
'1f590': {'canonical_name': 'high_five', 'aliases': ['palm']},
|
||||||
# http://mashable.com/2015/10/23/ios-9-1-emoji-guide
|
# https://mashable.com/2015/10/23/ios-9-1-emoji-guide/
|
||||||
'1f596': {'canonical_name': 'spock', 'aliases': ['live_long_and_prosper']},
|
'1f596': {'canonical_name': 'spock', 'aliases': ['live_long_and_prosper']},
|
||||||
# People/119 is a better 'hi', but 'hi' will never show up in the typeahead
|
# People/119 is a better 'hi', but 'hi' will never show up in the typeahead
|
||||||
# due to 'high_five'
|
# due to 'high_five'
|
||||||
|
@ -259,7 +259,7 @@ EMOJI_NAME_MAPS = {
|
||||||
'1f477': {'canonical_name': 'construction_worker', 'aliases': []},
|
'1f477': {'canonical_name': 'construction_worker', 'aliases': []},
|
||||||
'1f482': {'canonical_name': 'guard', 'aliases': []},
|
'1f482': {'canonical_name': 'guard', 'aliases': []},
|
||||||
# detective from gemoji, sneaky from
|
# detective from gemoji, sneaky from
|
||||||
# http://mashable.com/2015/10/23/ios-9-1-emoji-guide/, agent seems a
|
# https://mashable.com/2015/10/23/ios-9-1-emoji-guide/, agent seems a
|
||||||
# reasonable addition
|
# reasonable addition
|
||||||
'1f575': {'canonical_name': 'detective', 'aliases': ['spy', 'sleuth', 'agent', 'sneaky']},
|
'1f575': {'canonical_name': 'detective', 'aliases': ['spy', 'sleuth', 'agent', 'sneaky']},
|
||||||
# mrs_claus from https://emojipedia.org/mother-christmas/
|
# mrs_claus from https://emojipedia.org/mother-christmas/
|
||||||
|
@ -327,7 +327,7 @@ EMOJI_NAME_MAPS = {
|
||||||
# king and queen seem like good additions
|
# king and queen seem like good additions
|
||||||
'1f451': {'canonical_name': 'crown', 'aliases': ['queen', 'king']},
|
'1f451': {'canonical_name': 'crown', 'aliases': ['queen', 'king']},
|
||||||
# safety and invincibility inspired by
|
# safety and invincibility inspired by
|
||||||
# http://mashable.com/2015/10/23/ios-9-1-emoji-guide. hard_hat and
|
# https://mashable.com/2015/10/23/ios-9-1-emoji-guide/. hard_hat and
|
||||||
# rescue_worker seem like good additions
|
# rescue_worker seem like good additions
|
||||||
'26d1': {'canonical_name': 'helmet', 'aliases': ['hard_hat', 'rescue_worker', 'safety_first', 'invincible']}, # ignorelongline
|
'26d1': {'canonical_name': 'helmet', 'aliases': ['hard_hat', 'rescue_worker', 'safety_first', 'invincible']}, # ignorelongline
|
||||||
# backpack from gemoji, dominates satchel on google trends
|
# backpack from gemoji, dominates satchel on google trends
|
||||||
|
@ -377,7 +377,7 @@ EMOJI_NAME_MAPS = {
|
||||||
'1f426': {'canonical_name': 'bird', 'aliases': []},
|
'1f426': {'canonical_name': 'bird', 'aliases': []},
|
||||||
'1f424': {'canonical_name': 'chick', 'aliases': ['baby_chick']},
|
'1f424': {'canonical_name': 'chick', 'aliases': ['baby_chick']},
|
||||||
'1f423': {'canonical_name': 'hatching', 'aliases': ['hatching_chick']},
|
'1f423': {'canonical_name': 'hatching', 'aliases': ['hatching_chick']},
|
||||||
# http://www.iemoji.com/view/emoji/668/animals-nature/front-facing-baby-chick
|
# https://www.iemoji.com/view/emoji/668/animals-nature/front-facing-baby-chick
|
||||||
'1f425': {'canonical_name': 'new_baby', 'aliases': []},
|
'1f425': {'canonical_name': 'new_baby', 'aliases': []},
|
||||||
'1f986': {'canonical_name': 'duck', 'aliases': []},
|
'1f986': {'canonical_name': 'duck', 'aliases': []},
|
||||||
'1f985': {'canonical_name': 'eagle', 'aliases': []},
|
'1f985': {'canonical_name': 'eagle', 'aliases': []},
|
||||||
|
@ -752,7 +752,7 @@ EMOJI_NAME_MAPS = {
|
||||||
'1f3c7': {'canonical_name': 'horse_racing', 'aliases': ['horse_riding']},
|
'1f3c7': {'canonical_name': 'horse_racing', 'aliases': ['horse_riding']},
|
||||||
# at least in the US: this = cyclist, Activity/53 = mountain biker, and
|
# at least in the US: this = cyclist, Activity/53 = mountain biker, and
|
||||||
# motorcyclist = biker. Mainly from googling around and personal
|
# motorcyclist = biker. Mainly from googling around and personal
|
||||||
# experience. E.g. http://grammarist.com/usage/cyclist-biker/ for cyclist
|
# experience. E.g. https://grammarist.com/usage/cyclist-biker/ for cyclist
|
||||||
# and biker,
|
# and biker,
|
||||||
# https://www.theguardian.com/lifeandstyle/2010/oct/24/bike-snobs-guide-cycling-tribes
|
# https://www.theguardian.com/lifeandstyle/2010/oct/24/bike-snobs-guide-cycling-tribes
|
||||||
# for mountain biker (I've never heard the term "mountain cyclist", and
|
# for mountain biker (I've never heard the term "mountain cyclist", and
|
||||||
|
@ -914,7 +914,7 @@ EMOJI_NAME_MAPS = {
|
||||||
'1f6a6': {'canonical_name': 'traffic_light', 'aliases': ['vertical_traffic_light']},
|
'1f6a6': {'canonical_name': 'traffic_light', 'aliases': ['vertical_traffic_light']},
|
||||||
# see Places/57
|
# see Places/57
|
||||||
'1f6a5': {'canonical_name': 'horizontal_traffic_light', 'aliases': []},
|
'1f6a5': {'canonical_name': 'horizontal_traffic_light', 'aliases': []},
|
||||||
# road_trip from http://mashable.com/2015/10/23/ios-9-1-emoji-guide
|
# road_trip from https://mashable.com/2015/10/23/ios-9-1-emoji-guide/
|
||||||
'1f5fa': {'canonical_name': 'map', 'aliases': ['world_map', 'road_trip']},
|
'1f5fa': {'canonical_name': 'map', 'aliases': ['world_map', 'road_trip']},
|
||||||
# rock_carving, statue, and tower seem more general and less culturally
|
# rock_carving, statue, and tower seem more general and less culturally
|
||||||
# specific, for Places/60, 61, and 63.
|
# specific, for Places/60, 61, and 63.
|
||||||
|
@ -1019,7 +1019,7 @@ EMOJI_NAME_MAPS = {
|
||||||
# vise seems like a reasonable addition
|
# vise seems like a reasonable addition
|
||||||
'1f5dc': {'canonical_name': 'compression', 'aliases': ['vise']},
|
'1f5dc': {'canonical_name': 'compression', 'aliases': ['vise']},
|
||||||
# gold record seems more useful, idea came from
|
# gold record seems more useful, idea came from
|
||||||
# http://www.11points.com/Web-Tech/11_Emoji_With_Different_Meanings_Than_You_Think
|
# https://11points.com/11-emoji-different-meanings-think/
|
||||||
'1f4bd': {'canonical_name': 'gold_record', 'aliases': ['minidisc']},
|
'1f4bd': {'canonical_name': 'gold_record', 'aliases': ['minidisc']},
|
||||||
'1f4be': {'canonical_name': 'floppy_disk', 'aliases': []},
|
'1f4be': {'canonical_name': 'floppy_disk', 'aliases': []},
|
||||||
'1f4bf': {'canonical_name': 'cd', 'aliases': []},
|
'1f4bf': {'canonical_name': 'cd', 'aliases': []},
|
||||||
|
@ -1065,7 +1065,7 @@ EMOJI_NAME_MAPS = {
|
||||||
'1f56f': {'canonical_name': 'candle', 'aliases': []},
|
'1f56f': {'canonical_name': 'candle', 'aliases': []},
|
||||||
# seems like a reasonable addition
|
# seems like a reasonable addition
|
||||||
'1f5d1': {'canonical_name': 'wastebasket', 'aliases': ['trash_can']},
|
'1f5d1': {'canonical_name': 'wastebasket', 'aliases': ['trash_can']},
|
||||||
# http://www.iemoji.com/view/emoji/1173/objects/oil-drum
|
# https://www.iemoji.com/view/emoji/1173/objects/oil-drum
|
||||||
'1f6e2': {'canonical_name': 'oil_drum', 'aliases': ['commodities']},
|
'1f6e2': {'canonical_name': 'oil_drum', 'aliases': ['commodities']},
|
||||||
# losing money from https://emojipedia.org/money-with-wings/,
|
# losing money from https://emojipedia.org/money-with-wings/,
|
||||||
# easy_come_easy_go seems like a reasonable addition
|
# easy_come_easy_go seems like a reasonable addition
|
||||||
|
@ -1095,10 +1095,10 @@ EMOJI_NAME_MAPS = {
|
||||||
'26d3': {'canonical_name': 'chains', 'aliases': []},
|
'26d3': {'canonical_name': 'chains', 'aliases': []},
|
||||||
'1f52b': {'canonical_name': 'gun', 'aliases': []},
|
'1f52b': {'canonical_name': 'gun', 'aliases': []},
|
||||||
'1f4a3': {'canonical_name': 'bomb', 'aliases': []},
|
'1f4a3': {'canonical_name': 'bomb', 'aliases': []},
|
||||||
# betrayed from http://www.iemoji.com/view/emoji/786/objects/kitchen-knife
|
# betrayed from https://www.iemoji.com/view/emoji/786/objects/kitchen-knife
|
||||||
'1f52a': {'canonical_name': 'knife', 'aliases': ['hocho', 'betrayed']},
|
'1f52a': {'canonical_name': 'knife', 'aliases': ['hocho', 'betrayed']},
|
||||||
# rated_for_violence from
|
# rated_for_violence from
|
||||||
# http://www.iemoji.com/view/emoji/1085/objects/dagger. hate (also
|
# https://www.iemoji.com/view/emoji/1085/objects/dagger. hate (also
|
||||||
# suggested there) seems too strong, as does just "violence".
|
# suggested there) seems too strong, as does just "violence".
|
||||||
'1f5e1': {'canonical_name': 'dagger', 'aliases': ['rated_for_violence']},
|
'1f5e1': {'canonical_name': 'dagger', 'aliases': ['rated_for_violence']},
|
||||||
'2694': {'canonical_name': 'duel', 'aliases': ['swords']},
|
'2694': {'canonical_name': 'duel', 'aliases': ['swords']},
|
||||||
|
@ -1115,7 +1115,7 @@ EMOJI_NAME_MAPS = {
|
||||||
'2697': {'canonical_name': 'alchemy', 'aliases': ['alembic']},
|
'2697': {'canonical_name': 'alchemy', 'aliases': ['alembic']},
|
||||||
'1f52d': {'canonical_name': 'telescope', 'aliases': []},
|
'1f52d': {'canonical_name': 'telescope', 'aliases': []},
|
||||||
# science seems useful to have. scientist inspired by
|
# science seems useful to have. scientist inspired by
|
||||||
# http://www.iemoji.com/view/emoji/787/objects/microscope
|
# https://www.iemoji.com/view/emoji/787/objects/microscope
|
||||||
'1f52c': {'canonical_name': 'science', 'aliases': ['microscope', 'scientist']},
|
'1f52c': {'canonical_name': 'science', 'aliases': ['microscope', 'scientist']},
|
||||||
'1f573': {'canonical_name': 'hole', 'aliases': []},
|
'1f573': {'canonical_name': 'hole', 'aliases': []},
|
||||||
'1f48a': {'canonical_name': 'medicine', 'aliases': ['pill']},
|
'1f48a': {'canonical_name': 'medicine', 'aliases': ['pill']},
|
||||||
|
@ -1127,11 +1127,11 @@ EMOJI_NAME_MAPS = {
|
||||||
'1f6c1': {'canonical_name': 'bathtub', 'aliases': []},
|
'1f6c1': {'canonical_name': 'bathtub', 'aliases': []},
|
||||||
'1f6c0': {'canonical_name': 'bath', 'aliases': []},
|
'1f6c0': {'canonical_name': 'bath', 'aliases': []},
|
||||||
# reception and services from
|
# reception and services from
|
||||||
# http://www.iemoji.com/view/emoji/1169/objects/bellhop-bell
|
# https://www.iemoji.com/view/emoji/1169/objects/bellhop-bell
|
||||||
'1f6ce': {'canonical_name': 'bellhop_bell', 'aliases': ['reception', 'services', 'ding']},
|
'1f6ce': {'canonical_name': 'bellhop_bell', 'aliases': ['reception', 'services', 'ding']},
|
||||||
'1f511': {'canonical_name': 'key', 'aliases': []},
|
'1f511': {'canonical_name': 'key', 'aliases': []},
|
||||||
# encrypted from http://www.iemoji.com/view/emoji/1081/objects/old-key,
|
# encrypted from https://www.iemoji.com/view/emoji/1081/objects/old-key,
|
||||||
# secret from http://mashable.com/2015/10/23/ios-9-1-emoji-guide
|
# secret from https://mashable.com/2015/10/23/ios-9-1-emoji-guide/
|
||||||
'1f5dd': {'canonical_name': 'secret', 'aliases': ['dungeon', 'old_key', 'encrypted', 'clue', 'hint']},
|
'1f5dd': {'canonical_name': 'secret', 'aliases': ['dungeon', 'old_key', 'encrypted', 'clue', 'hint']},
|
||||||
'1f6aa': {'canonical_name': 'door', 'aliases': []},
|
'1f6aa': {'canonical_name': 'door', 'aliases': []},
|
||||||
'1f6cb': {'canonical_name': 'living_room', 'aliases': ['furniture', 'couch_and_lamp', 'lifestyles']},
|
'1f6cb': {'canonical_name': 'living_room', 'aliases': ['furniture', 'couch_and_lamp', 'lifestyles']},
|
||||||
|
@ -1210,7 +1210,7 @@ EMOJI_NAME_MAPS = {
|
||||||
'1f516': {'canonical_name': 'bookmark', 'aliases': []},
|
'1f516': {'canonical_name': 'bookmark', 'aliases': []},
|
||||||
'1f517': {'canonical_name': 'link', 'aliases': []},
|
'1f517': {'canonical_name': 'link', 'aliases': []},
|
||||||
'1f4ce': {'canonical_name': 'paperclip', 'aliases': ['attachment']},
|
'1f4ce': {'canonical_name': 'paperclip', 'aliases': ['attachment']},
|
||||||
# office_supplies from http://mashable.com/2015/10/23/ios-9-1-emoji-guide
|
# office_supplies from https://mashable.com/2015/10/23/ios-9-1-emoji-guide/
|
||||||
'1f587': {'canonical_name': 'office_supplies', 'aliases': ['paperclip_chain', 'linked']},
|
'1f587': {'canonical_name': 'office_supplies', 'aliases': ['paperclip_chain', 'linked']},
|
||||||
'1f4d0': {'canonical_name': 'carpenter_square', 'aliases': ['triangular_ruler']},
|
'1f4d0': {'canonical_name': 'carpenter_square', 'aliases': ['triangular_ruler']},
|
||||||
'1f4cf': {'canonical_name': 'ruler', 'aliases': ['straightedge']},
|
'1f4cf': {'canonical_name': 'ruler', 'aliases': ['straightedge']},
|
||||||
|
|
|
@ -257,7 +257,7 @@ def list_of_tlds() -> List[str]:
|
||||||
# HACK we manually blacklist a few domains
|
# HACK we manually blacklist a few domains
|
||||||
blacklist = ['PY\n', "MD\n"]
|
blacklist = ['PY\n', "MD\n"]
|
||||||
|
|
||||||
# tlds-alpha-by-domain.txt comes from http://data.iana.org/TLD/tlds-alpha-by-domain.txt
|
# tlds-alpha-by-domain.txt comes from https://data.iana.org/TLD/tlds-alpha-by-domain.txt
|
||||||
tlds_file = os.path.join(os.path.dirname(__file__), 'tlds-alpha-by-domain.txt')
|
tlds_file = os.path.join(os.path.dirname(__file__), 'tlds-alpha-by-domain.txt')
|
||||||
tlds = [tld.lower().strip() for tld in open(tlds_file, 'r')
|
tlds = [tld.lower().strip() for tld in open(tlds_file, 'r')
|
||||||
if tld not in blacklist and not tld[0].startswith('#')]
|
if tld not in blacklist and not tld[0].startswith('#')]
|
||||||
|
@ -664,7 +664,7 @@ class InlineInterestingLinkProcessor(markdown.treeprocessors.Treeprocessor):
|
||||||
if parsed_url.netloc == 'pasteboard.co':
|
if parsed_url.netloc == 'pasteboard.co':
|
||||||
return False
|
return False
|
||||||
|
|
||||||
# List from http://support.google.com/chromeos/bin/answer.py?hl=en&answer=183093
|
# List from https://support.google.com/chromeos/bin/answer.py?hl=en&answer=183093
|
||||||
for ext in [".bmp", ".gif", ".jpg", "jpeg", ".png", ".webp"]:
|
for ext in [".bmp", ".gif", ".jpg", "jpeg", ".png", ".webp"]:
|
||||||
if parsed_url.path.lower().endswith(ext):
|
if parsed_url.path.lower().endswith(ext):
|
||||||
return True
|
return True
|
||||||
|
@ -735,7 +735,7 @@ class InlineInterestingLinkProcessor(markdown.treeprocessors.Treeprocessor):
|
||||||
def youtube_id(self, url: str) -> Optional[str]:
|
def youtube_id(self, url: str) -> Optional[str]:
|
||||||
if not self.markdown.image_preview_enabled:
|
if not self.markdown.image_preview_enabled:
|
||||||
return None
|
return None
|
||||||
# Youtube video id extraction regular expression from http://pastebin.com/KyKAFv1s
|
# Youtube video id extraction regular expression from https://pastebin.com/KyKAFv1s
|
||||||
# Slightly modified to support URLs of the forms
|
# Slightly modified to support URLs of the forms
|
||||||
# - youtu.be/<id>
|
# - youtu.be/<id>
|
||||||
# - youtube.com/playlist?v=<id>&list=<list-id>
|
# - youtube.com/playlist?v=<id>&list=<list-id>
|
||||||
|
|
|
@ -133,7 +133,7 @@ def der_encode_ticket(tkt: Dict[str, Any]) -> bytes:
|
||||||
base64.b64decode(tkt["encPart"]["cipher"]))])]))
|
base64.b64decode(tkt["encPart"]["cipher"]))])]))
|
||||||
|
|
||||||
# Kerberos ccache writing code. Using format documentation from here:
|
# Kerberos ccache writing code. Using format documentation from here:
|
||||||
# http://www.gnu.org/software/shishi/manual/html_node/The-Credential-Cache-Binary-File-Format.html
|
# https://www.gnu.org/software/shishi/manual/html_node/The-Credential-Cache-Binary-File-Format.html
|
||||||
|
|
||||||
def ccache_counted_octet_string(data: bytes) -> bytes:
|
def ccache_counted_octet_string(data: bytes) -> bytes:
|
||||||
if not isinstance(data, bytes):
|
if not isinstance(data, bytes):
|
||||||
|
|
|
@ -16,7 +16,7 @@ from typing import Optional
|
||||||
logger = logging.getLogger('zulip.debug')
|
logger = logging.getLogger('zulip.debug')
|
||||||
|
|
||||||
# Interactive debugging code from
|
# Interactive debugging code from
|
||||||
# http://stackoverflow.com/questions/132058/showing-the-stack-trace-from-a-running-python-application
|
# https://stackoverflow.com/questions/132058/showing-the-stack-trace-from-a-running-python-application
|
||||||
# (that link also points to code for an interactive remote debugger
|
# (that link also points to code for an interactive remote debugger
|
||||||
# setup, which we might want if we move Tornado to run in a daemon
|
# setup, which we might want if we move Tornado to run in a daemon
|
||||||
# rather than via screen).
|
# rather than via screen).
|
||||||
|
|
|
@ -43,7 +43,7 @@ ZULIP_RESERVED_SUBDOMAINS = frozenset([
|
||||||
|
|
||||||
# Most of this list was curated from the following sources:
|
# Most of this list was curated from the following sources:
|
||||||
# http://wiki.dwscoalition.org/notes/List_of_reserved_subdomains (license: CC-BY-SA 3.0)
|
# http://wiki.dwscoalition.org/notes/List_of_reserved_subdomains (license: CC-BY-SA 3.0)
|
||||||
# http://stackoverflow.com/questions/11868191/which-saas-subdomains-to-block (license: CC-BY-SA 2.5)
|
# https://stackoverflow.com/questions/11868191/which-saas-subdomains-to-block (license: CC-BY-SA 2.5)
|
||||||
GENERIC_RESERVED_SUBDOMAINS = frozenset([
|
GENERIC_RESERVED_SUBDOMAINS = frozenset([
|
||||||
'about', 'abuse', 'account', 'ad', 'admanager', 'admin', 'admindashboard',
|
'about', 'abuse', 'account', 'ad', 'admanager', 'admin', 'admindashboard',
|
||||||
'administrator', 'adsense', 'adword', 'affiliate', 'alpha', 'anonymous',
|
'administrator', 'adsense', 'adword', 'affiliate', 'alpha', 'anonymous',
|
||||||
|
|
|
@ -291,7 +291,7 @@ def send_android_push_notification(devices: List[DeviceToken], data: Dict[str, A
|
||||||
|
|
||||||
# res.canonical will contain results when there are duplicate registrations for the same
|
# res.canonical will contain results when there are duplicate registrations for the same
|
||||||
# device. The "canonical" registration is the latest registration made by the device.
|
# device. The "canonical" registration is the latest registration made by the device.
|
||||||
# Ref: http://developer.android.com/google/gcm/adv.html#canonical
|
# Ref: https://developer.android.com/google/gcm/adv.html#canonical
|
||||||
if 'canonical' in res:
|
if 'canonical' in res:
|
||||||
for reg_id, new_reg_id in res['canonical'].items():
|
for reg_id, new_reg_id in res['canonical'].items():
|
||||||
if reg_id == new_reg_id:
|
if reg_id == new_reg_id:
|
||||||
|
|
|
@ -16,7 +16,7 @@ import redis
|
||||||
import time
|
import time
|
||||||
|
|
||||||
# Implement a rate-limiting scheme inspired by the one described here, but heavily modified
|
# Implement a rate-limiting scheme inspired by the one described here, but heavily modified
|
||||||
# http://blog.domaintools.com/2013/04/rate-limiting-with-redis/
|
# https://www.domaintools.com/resources/blog/rate-limiting-with-redis
|
||||||
|
|
||||||
client = get_redis_client()
|
client = get_redis_client()
|
||||||
rules = settings.RATE_LIMITING_RULES # type: Dict[str, List[Tuple[int, int]]]
|
rules = settings.RATE_LIMITING_RULES # type: Dict[str, List[Tuple[int, int]]]
|
||||||
|
|
|
@ -7,7 +7,7 @@ import time
|
||||||
import ctypes
|
import ctypes
|
||||||
import threading
|
import threading
|
||||||
|
|
||||||
# Based on http://code.activestate.com/recipes/483752/
|
# Based on https://code.activestate.com/recipes/483752/
|
||||||
|
|
||||||
class TimeoutExpired(Exception):
|
class TimeoutExpired(Exception):
|
||||||
'''Exception raised when a function times out.'''
|
'''Exception raised when a function times out.'''
|
||||||
|
@ -71,7 +71,7 @@ def timeout(timeout: float, func: Callable[..., ResultT], *args: Any, **kwargs:
|
||||||
|
|
||||||
if thread.is_alive():
|
if thread.is_alive():
|
||||||
# Gamely try to kill the thread, following the dodgy approach from
|
# Gamely try to kill the thread, following the dodgy approach from
|
||||||
# http://stackoverflow.com/a/325528/90777
|
# https://stackoverflow.com/a/325528/90777
|
||||||
#
|
#
|
||||||
# We need to retry, because an async exception received while the
|
# We need to retry, because an async exception received while the
|
||||||
# thread is in a system call is simply ignored.
|
# thread is in a system call is simply ignored.
|
||||||
|
@ -84,7 +84,7 @@ def timeout(timeout: float, func: Callable[..., ResultT], *args: Any, **kwargs:
|
||||||
|
|
||||||
if thread.exc_info:
|
if thread.exc_info:
|
||||||
# Raise the original stack trace so our error messages are more useful.
|
# Raise the original stack trace so our error messages are more useful.
|
||||||
# from http://stackoverflow.com/a/4785766/90777
|
# from https://stackoverflow.com/a/4785766/90777
|
||||||
six.reraise(thread.exc_info[0], thread.exc_info[1], thread.exc_info[2])
|
six.reraise(thread.exc_info[0], thread.exc_info[1], thread.exc_info[2])
|
||||||
assert thread.result is not None # assured if above did not reraise
|
assert thread.result is not None # assured if above did not reraise
|
||||||
return thread.result
|
return thread.result
|
||||||
|
|
|
@ -263,7 +263,7 @@ class ZulipUploadBackend:
|
||||||
def get_bucket(conn: S3Connection, bucket_name: str) -> Bucket:
|
def get_bucket(conn: S3Connection, bucket_name: str) -> Bucket:
|
||||||
# Calling get_bucket() with validate=True can apparently lead
|
# Calling get_bucket() with validate=True can apparently lead
|
||||||
# to expensive S3 bills:
|
# to expensive S3 bills:
|
||||||
# http://www.appneta.com/blog/s3-list-get-bucket-default/
|
# https://www.appneta.com/blog/s3-list-get-bucket-default/
|
||||||
# The benefits of validation aren't completely clear to us, and
|
# The benefits of validation aren't completely clear to us, and
|
||||||
# we want to save on our bills, so we set the validate flag to False.
|
# we want to save on our bills, so we set the validate flag to False.
|
||||||
# (We think setting validate to True would cause us to fail faster
|
# (We think setting validate to True would cause us to fail faster
|
||||||
|
|
|
@ -25,7 +25,7 @@ unfortunately isn't extensible, so we can:
|
||||||
We are currently doing that last thing. It turns out there we are lucky
|
We are currently doing that last thing. It turns out there we are lucky
|
||||||
for once: It's simply a matter of extending two regular expressions.
|
for once: It's simply a matter of extending two regular expressions.
|
||||||
Credit for the approach goes to:
|
Credit for the approach goes to:
|
||||||
http://stackoverflow.com/questions/2090717
|
https://stackoverflow.com/questions/2090717
|
||||||
|
|
||||||
"""
|
"""
|
||||||
import glob
|
import glob
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
# This file contains the Swagger UI configuration and API definitions
|
# This file contains the Swagger UI configuration and API definitions
|
||||||
# for the Zulip REST API.
|
# for the Zulip REST API.
|
||||||
#
|
#
|
||||||
# For details on the Swagger/OpenAPI specification, see http://swagger.io/specification
|
# For details on the Swagger/OpenAPI specification, see https://swagger.io/specification
|
||||||
#
|
#
|
||||||
# Our own documentation lives at
|
# Our own documentation lives at
|
||||||
#
|
#
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# This file contains the API definitions for the Zulip REST API.
|
# This file contains the API definitions for the Zulip REST API.
|
||||||
#
|
#
|
||||||
# For details on the OpenAPI specification, see http://swagger.io/specification
|
# For details on the OpenAPI specification, see https://swagger.io/specification
|
||||||
#
|
#
|
||||||
# Our own documentation lives at
|
# Our own documentation lives at
|
||||||
#
|
#
|
||||||
|
|
|
@ -115,7 +115,7 @@ MANAGERS = ADMINS
|
||||||
########################################################################
|
########################################################################
|
||||||
|
|
||||||
# Local time zone for this installation. Choices can be found here:
|
# Local time zone for this installation. Choices can be found here:
|
||||||
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
|
# https://en.wikipedia.org/wiki/List_of_tz_zones_by_name
|
||||||
# although not all choices may be available on all operating systems.
|
# although not all choices may be available on all operating systems.
|
||||||
# In a Windows environment this must be set to your system time zone.
|
# In a Windows environment this must be set to your system time zone.
|
||||||
TIME_ZONE = 'UTC'
|
TIME_ZONE = 'UTC'
|
||||||
|
|
Loading…
Reference in New Issue