Compare commits
108 Commits
travis/tes
...
v1.2.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7446799e4b | ||
|
|
947e5ab582 | ||
|
|
6b93053a80 | ||
|
|
7c03bd128b | ||
|
|
2af3d20a71 | ||
|
|
fde9a7a7ba | ||
|
|
d6fb0bc24f | ||
|
|
f4b1e3307d | ||
|
|
52b2dbec85 | ||
|
|
aa10d7aeed | ||
|
|
7f7b3e747c | ||
|
|
59fa374491 | ||
|
|
001b7fb799 | ||
|
|
260f819e38 | ||
|
|
6306bc0c90 | ||
|
|
913bc6da93 | ||
|
|
6ac035f0b1 | ||
|
|
fa1b2fe70f | ||
|
|
4cbe6c1000 | ||
|
|
c203d3356b | ||
|
|
d617d8ebb3 | ||
|
|
43d2c3bbc8 | ||
|
|
3e17e9f00d | ||
|
|
b54a53d1ac | ||
|
|
bdb0f5e81c | ||
|
|
29398a0ab5 | ||
|
|
6f8c6bf13e | ||
|
|
45e8c26864 | ||
|
|
3123b429f7 | ||
|
|
05a2cb1020 | ||
|
|
5aa88abacc | ||
|
|
e749420196 | ||
|
|
8ac5957186 | ||
|
|
d0def4a80f | ||
|
|
5a6be9a665 | ||
|
|
734221cc3f | ||
|
|
f5e7dd5164 | ||
|
|
da9cde6d18 | ||
|
|
5aa8326dfc | ||
|
|
e4ed0994ce | ||
|
|
875d1b209a | ||
|
|
8ed44e6b64 | ||
|
|
814b5297ad | ||
|
|
2ab8db3c0c | ||
|
|
94979f7ff5 | ||
|
|
5c46bd37e8 | ||
|
|
c81b9bab79 | ||
|
|
818bab9fa4 | ||
|
|
ee0b7e9c82 | ||
|
|
03b2766ca8 | ||
|
|
eee2468a01 | ||
|
|
9cd4ac1df4 | ||
|
|
c612633402 | ||
|
|
0c36849c0f | ||
|
|
1a1f2254e5 | ||
|
|
908a72e00e | ||
|
|
2fe6b5074d | ||
|
|
a7756fc876 | ||
|
|
8cb7eeecd2 | ||
|
|
d4de7f5df3 | ||
|
|
989b75502c | ||
|
|
bb675fde0c | ||
|
|
6df5c35b4e | ||
|
|
9957149115 | ||
|
|
f98870db1f | ||
|
|
7c5e39e170 | ||
|
|
ebe2ab504b | ||
|
|
e4f997113d | ||
|
|
cb155769d5 | ||
|
|
49efece6c6 | ||
|
|
846797be76 | ||
|
|
d6d4d95b20 | ||
|
|
cc8eaea5a7 | ||
|
|
269a995a01 | ||
|
|
77dff119db | ||
|
|
0718d438b8 | ||
|
|
3a2541d3bf | ||
|
|
00d33599f0 | ||
|
|
f49732b036 | ||
|
|
73144c3493 | ||
|
|
c5e7e82b46 | ||
|
|
af6ad9355d | ||
|
|
6c4c908678 | ||
|
|
ae62a46a97 | ||
|
|
bf84c64ea9 | ||
|
|
5ac8a42681 | ||
|
|
03b1914112 | ||
|
|
ff21bde839 | ||
|
|
c62da0eda6 | ||
|
|
932d3a054c | ||
|
|
a67fd48720 | ||
|
|
afc2b48073 | ||
|
|
093d30121d | ||
|
|
1b8583fa51 | ||
|
|
ea37e777cf | ||
|
|
cc5911b4aa | ||
|
|
28d50100d8 | ||
|
|
8ef464597f | ||
|
|
2c64a4f3a1 | ||
|
|
8002d98f50 | ||
|
|
9519ad46a1 | ||
|
|
a263ca8cb3 | ||
|
|
eeae5dbcad | ||
|
|
1bb70930fa | ||
|
|
8e76cf2c13 | ||
|
|
9bf5828079 | ||
|
|
e47fae034a | ||
|
|
045b0b9889 |
21
.babelrc
21
.babelrc
@@ -1,4 +1,21 @@
|
||||
{
|
||||
"presets": ["react", "es2015", "es2016"],
|
||||
"plugins": ["transform-class-properties", "transform-object-rest-spread", "transform-async-to-bluebird", "transform-runtime", "add-module-exports"]
|
||||
"presets": [
|
||||
"react",
|
||||
"es2015",
|
||||
"es2016"
|
||||
],
|
||||
"plugins": [
|
||||
[
|
||||
"transform-builtin-extend",
|
||||
{
|
||||
"globals": ["Error"]
|
||||
}
|
||||
],
|
||||
"transform-class-properties",
|
||||
"transform-object-rest-spread",
|
||||
"transform-async-to-bluebird",
|
||||
"transform-runtime",
|
||||
"add-module-exports",
|
||||
"syntax-dynamic-import"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -31,3 +31,16 @@ steps:
|
||||
- docker#v3.0.1:
|
||||
image: "node:10"
|
||||
propagate-environment: true
|
||||
|
||||
- label: ":hammer: Package"
|
||||
command:
|
||||
- "echo '--- Fetching Dependencies'"
|
||||
- "./scripts/fetch-develop.deps.sh --depth 1"
|
||||
- "yarn install"
|
||||
- "echo '+++ Packaging'"
|
||||
- "./scripts/ci_package.sh"
|
||||
branches: "develop"
|
||||
artifact_paths: "dist/riot-*.tar.gz"
|
||||
plugins:
|
||||
- docker#v3.0.1:
|
||||
image: "node:10"
|
||||
|
||||
11
.dockerignore
Normal file
11
.dockerignore
Normal file
@@ -0,0 +1,11 @@
|
||||
# Exclude a bunch of stuff which can make the build context a larger than it needs to be
|
||||
.git/
|
||||
test/
|
||||
webapp/
|
||||
lib/
|
||||
node_modules/
|
||||
electron_app/
|
||||
karma-reports/
|
||||
.idea/
|
||||
.tmp/
|
||||
config.json*
|
||||
@@ -2,7 +2,7 @@
|
||||
name: User Interface or Usability Bug report
|
||||
about: Please include screenshots in UI/UX bug reports
|
||||
title: ''
|
||||
labels: ''
|
||||
labels: bug, ui/ux
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,7 +1,6 @@
|
||||
/build
|
||||
/cert.pem
|
||||
/dist
|
||||
/karma-reports
|
||||
/key.pem
|
||||
/lib
|
||||
/node_modules
|
||||
|
||||
107
CHANGELOG.md
107
CHANGELOG.md
@@ -1,3 +1,110 @@
|
||||
Changes in [1.2.1](https://github.com/vector-im/riot-web/releases/tag/v1.2.1) (2019-05-31)
|
||||
==========================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.2.0...v1.2.1)
|
||||
|
||||
* Upgrade JS SDK to 2.0.0 and React SDK to 1.2.1 to fix key backup and native emoji height
|
||||
|
||||
Changes in [1.2.0](https://github.com/vector-im/riot-web/releases/tag/v1.2.0) (2019-05-29)
|
||||
==========================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.2.0-rc.1...v1.2.0)
|
||||
|
||||
* Upgrade to JS SDK v1.2.0 and React SDK v1.2.0 to fix some regressions
|
||||
|
||||
Changes in [1.2.0-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.2.0-rc.1) (2019-05-23)
|
||||
====================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.1.2...v1.2.0-rc.1)
|
||||
|
||||
* Update from Weblate
|
||||
[\#9802](https://github.com/vector-im/riot-web/pull/9802)
|
||||
* remove emojione
|
||||
[\#9766](https://github.com/vector-im/riot-web/pull/9766)
|
||||
* Make Dockerfile work for develop and other branches
|
||||
[\#9736](https://github.com/vector-im/riot-web/pull/9736)
|
||||
* add description of new labs feature for message editing
|
||||
[\#9728](https://github.com/vector-im/riot-web/pull/9728)
|
||||
* Remove karma junit output
|
||||
[\#9628](https://github.com/vector-im/riot-web/pull/9628)
|
||||
* yarn upgrade
|
||||
[\#9626](https://github.com/vector-im/riot-web/pull/9626)
|
||||
* Respond quickly to buildkite pokes
|
||||
[\#9617](https://github.com/vector-im/riot-web/pull/9617)
|
||||
* Delay creating the `Favico` instance
|
||||
[\#9616](https://github.com/vector-im/riot-web/pull/9616)
|
||||
* Add reactions feature to config sample
|
||||
[\#9598](https://github.com/vector-im/riot-web/pull/9598)
|
||||
|
||||
Changes in [1.1.2](https://github.com/vector-im/riot-web/releases/tag/v1.1.2) (2019-05-15)
|
||||
==========================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.1.1...v1.1.2)
|
||||
|
||||
* react-sdk v1.1.2 to fix single sign-on and GIF autoplaying
|
||||
|
||||
Changes in [1.1.1](https://github.com/vector-im/riot-web/releases/tag/v1.1.1) (2019-05-14)
|
||||
==========================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.1.0...v1.1.1)
|
||||
|
||||
* react-sdk v1.1.1 to fix regressions with registration
|
||||
|
||||
Changes in [1.1.0](https://github.com/vector-im/riot-web/releases/tag/v1.1.0) (2019-05-07)
|
||||
==========================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.1.0-rc.1...v1.1.0)
|
||||
|
||||
* Add Dockerfile
|
||||
[\#9632](https://github.com/vector-im/riot-web/pull/9632)
|
||||
* Add Dockerfile (part 2)
|
||||
[\#9426](https://github.com/vector-im/riot-web/pull/9426)
|
||||
* Add new scalar staging url
|
||||
[\#9601](https://github.com/vector-im/riot-web/pull/9601)
|
||||
|
||||
Changes in [1.1.0-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.1.0-rc.1) (2019-04-30)
|
||||
====================================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.0.8...v1.1.0-rc.1)
|
||||
|
||||
* Convert redeploy.py to buildkite
|
||||
[\#9577](https://github.com/vector-im/riot-web/pull/9577)
|
||||
* Add package step to buildkite pipeline
|
||||
[\#9568](https://github.com/vector-im/riot-web/pull/9568)
|
||||
* Don't fail if there's no local config to remove
|
||||
[\#9571](https://github.com/vector-im/riot-web/pull/9571)
|
||||
* Change jenkins script to package script
|
||||
[\#9567](https://github.com/vector-im/riot-web/pull/9567)
|
||||
* Remove config.json from package dir
|
||||
[\#9555](https://github.com/vector-im/riot-web/pull/9555)
|
||||
* use the release version of olm 3.1.0
|
||||
[\#9550](https://github.com/vector-im/riot-web/pull/9550)
|
||||
* Fix default for --include arg
|
||||
[\#9517](https://github.com/vector-im/riot-web/pull/9517)
|
||||
* update installation instructions with new repo
|
||||
[\#9500](https://github.com/vector-im/riot-web/pull/9500)
|
||||
* Use packages.matrix.org for Olm
|
||||
[\#9498](https://github.com/vector-im/riot-web/pull/9498)
|
||||
* Add separate platform electron build commands
|
||||
[\#9412](https://github.com/vector-im/riot-web/pull/9412)
|
||||
* Add support for custom profile directory
|
||||
[\#9408](https://github.com/vector-im/riot-web/pull/9408)
|
||||
* Improved mobile install guide
|
||||
[\#9410](https://github.com/vector-im/riot-web/pull/9410)
|
||||
* Remove vector-electron-desktop from README
|
||||
[\#9404](https://github.com/vector-im/riot-web/pull/9404)
|
||||
* Update from Weblate
|
||||
[\#9398](https://github.com/vector-im/riot-web/pull/9398)
|
||||
* bump olm version to 3.1.0-pre3
|
||||
[\#9392](https://github.com/vector-im/riot-web/pull/9392)
|
||||
* Add expiration to mobile guide cookie
|
||||
[\#9383](https://github.com/vector-im/riot-web/pull/9383)
|
||||
* Fix autolaunch setting appearing toggled off
|
||||
[\#9368](https://github.com/vector-im/riot-web/pull/9368)
|
||||
* Don't try to save files the user didn't want to save
|
||||
[\#9352](https://github.com/vector-im/riot-web/pull/9352)
|
||||
* Setup crypto store for restore session tests
|
||||
[\#9325](https://github.com/vector-im/riot-web/pull/9325)
|
||||
* Update from Weblate
|
||||
[\#9333](https://github.com/vector-im/riot-web/pull/9333)
|
||||
* Add "Save image as..." button to context menu on images
|
||||
[\#9326](https://github.com/vector-im/riot-web/pull/9326)
|
||||
* Configure auth footer links through Riot config
|
||||
[\#9297](https://github.com/vector-im/riot-web/pull/9297)
|
||||
|
||||
Changes in [1.0.8](https://github.com/vector-im/riot-web/releases/tag/v1.0.8) (2019-04-16)
|
||||
==========================================================================================
|
||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.0.7...v1.0.8)
|
||||
|
||||
31
Dockerfile
Normal file
31
Dockerfile
Normal file
@@ -0,0 +1,31 @@
|
||||
# Builder
|
||||
FROM node:10-alpine as builder
|
||||
|
||||
# Support custom branches of the react-sdk and js-sdk. This also helps us build
|
||||
# images of riot-web develop.
|
||||
ARG USE_CUSTOM_SDKS=false
|
||||
ARG REACT_SDK_REPO="https://github.com/matrix-org/matrix-react-sdk.git"
|
||||
ARG REACT_SDK_BRANCH="master"
|
||||
ARG JS_SDK_REPO="https://github.com/matrix-org/matrix-js-sdk.git"
|
||||
ARG JS_SDK_BRANCH="master"
|
||||
|
||||
RUN apk add --no-cache git dos2unix
|
||||
|
||||
WORKDIR /src
|
||||
|
||||
COPY . /src
|
||||
RUN dos2unix /src/scripts/docker-link-repos.sh && sh /src/scripts/docker-link-repos.sh
|
||||
RUN yarn --network-timeout=100000 install
|
||||
RUN yarn build
|
||||
|
||||
# Copy the config now so that we don't create another layer in the app image
|
||||
RUN cp /src/config.sample.json /src/webapp/config.json
|
||||
|
||||
|
||||
# App
|
||||
FROM nginx:latest
|
||||
|
||||
COPY --from=builder /src/webapp /app
|
||||
|
||||
RUN rm -rf /usr/share/nginx/html \
|
||||
&& ln -s /app /usr/share/nginx/html
|
||||
59
README.md
59
README.md
@@ -31,21 +31,8 @@ Note that Chrome does not allow microphone or webcam access for sites served
|
||||
over http (except localhost), so for working VoIP you will need to serve Riot
|
||||
over https.
|
||||
|
||||
### Desktop Installation for Debian Stretch
|
||||
|
||||
1. Add the repository to your sources.list using either of the following two options:
|
||||
- Directly to sources.list:
|
||||
`echo "deb https://packages.riot.im/debian/ stretch main" | sudo tee -a /etc/apt/sources.list`
|
||||
- As a separate entry in sources.list.d:
|
||||
`echo "deb https://packages.riot.im/debian/ stretch main" | sudo tee /etc/apt/sources.list.d/riot.list`
|
||||
2. Download and add the gpg signing key used to authenticate the packages from the riot repository to your system's list of trusted keys:
|
||||
`curl -s https://packages.riot.im/debian/riot-im-archive-keyring.asc | sudo apt-key add -`
|
||||
- Optional: if you had the old Riot.im signing key in your apt keyring, delete it, as it is no longer considered trusted:
|
||||
`sudo apt-key del 0x48E8F4A1`
|
||||
3. Update your package lists:
|
||||
`sudo apt update`
|
||||
4. Install Riot:
|
||||
`sudo apt install riot-web`
|
||||
To install Riot as a desktop application, see [Running as a desktop
|
||||
app](#running-as-a-desktop-app) below.
|
||||
|
||||
Important Security Note
|
||||
=======================
|
||||
@@ -202,10 +189,10 @@ Running as a Desktop app
|
||||
========================
|
||||
|
||||
Riot can also be run as a desktop app, wrapped in electron. You can download a
|
||||
pre-built version from https://riot.im/desktop.html or, if you prefer,
|
||||
build it yourself. Requires Electron >=1.6.0
|
||||
pre-built version from https://riot.im/download/desktop/ or, if you prefer,
|
||||
build it yourself.
|
||||
|
||||
To run as a desktop app:
|
||||
To build it yourself, follow the instructions below.
|
||||
|
||||
1. Follow the instructions in 'Building From Source' above, but run
|
||||
`yarn build` instead of `yarn dist` (since we don't need the tarball).
|
||||
@@ -266,6 +253,42 @@ To change the config.json for the desktop app, create a config file which will b
|
||||
|
||||
In the paths above, `$NAME` is typically `Riot`, unless you use `--profile $PROFILE` in which case it becomes `Riot-$PROFILE`.
|
||||
|
||||
Running from Docker
|
||||
===================
|
||||
|
||||
The Docker image can be used to serve riot-web as a web server. The easiest way to use
|
||||
it is to use the prebuilt image:
|
||||
```bash
|
||||
docker run -p 80:80 vectorim/riot-web
|
||||
```
|
||||
|
||||
To supply your own custom `config.json`, map a volume to `/app/config.json`. For example,
|
||||
if your custom config was located at `/etc/riot-web/config.json` then your Docker command
|
||||
would be:
|
||||
```bash
|
||||
docker run -p 80:80 -v /etc/riot-web/config.json:/app/config.json vectorim/riot-web
|
||||
```
|
||||
|
||||
To build the image yourself:
|
||||
```bash
|
||||
git clone https://github.com/vector-im/riot-web.git riot-web
|
||||
cd riot-web
|
||||
git checkout master
|
||||
docker build -t vectorim/riot-web .
|
||||
```
|
||||
|
||||
If you're building a custom branch, or want to use the develop branch, check out the appropriate
|
||||
riot-web branch and then run:
|
||||
```bash
|
||||
docker build -t vectorim/riot-web:develop \
|
||||
--build-arg USE_CUSTOM_SDKS=true \
|
||||
--build-arg REACT_SDK_REPO="https://github.com/matrix-org/matrix-react-sdk.git" \
|
||||
--build-arg REACT_SDK_BRANCH="develop" \
|
||||
--build-arg JS_SDK_REPO="https://github.com/matrix-org/matrix-js-sdk.git" \
|
||||
--build-arg JS_SDK_BRANCH="develop" \
|
||||
.
|
||||
```
|
||||
|
||||
Labs Features
|
||||
=============
|
||||
|
||||
|
||||
@@ -12,7 +12,9 @@
|
||||
"bug_report_endpoint_url": "https://riot.im/bugreports/submit",
|
||||
"features": {
|
||||
"feature_groups": "labs",
|
||||
"feature_pinning": "labs"
|
||||
"feature_pinning": "labs",
|
||||
"feature_reactions": "labs",
|
||||
"feature_message_editing": "labs"
|
||||
},
|
||||
"default_federate": true,
|
||||
"default_theme": "light",
|
||||
|
||||
17
docs/labs.md
17
docs/labs.md
@@ -1,4 +1,4 @@
|
||||
# riot-web Labs features
|
||||
# Labs features
|
||||
|
||||
Some notes on the features you can enable by going to `Settings->Labs`. Not exhaustive, chat in
|
||||
[#riot-web:matrix.org] for more information.
|
||||
@@ -29,4 +29,17 @@ Once enabled, send a custom state event to a room to set values:
|
||||
|
||||
That's it. Now should see your new counter under the header.
|
||||
|
||||
[#riot-web:matrix.org]: https://matrix.to/#/#riot-web:matrix.org
|
||||
## Reactions
|
||||
|
||||
`feature_reactions` allows reacting to messages with emoji and displaying
|
||||
reactions from other people. This feature is currently under active development,
|
||||
and only portions have been implemented so far.
|
||||
|
||||
## Message editing
|
||||
|
||||
`feature_message_editing` allows editing messages after they have been sent,
|
||||
accessible from the reaction/context bar when hovering a message.
|
||||
This feature is currently under active development,
|
||||
and only portions have been implemented so far.
|
||||
|
||||
[#riot-web:matrix.org]: https://matrix.to/#/#riot-web:matrix.org
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"name": "riot-web",
|
||||
"productName": "Riot",
|
||||
"main": "src/electron-main.js",
|
||||
"version": "1.0.8",
|
||||
"version": "1.2.1",
|
||||
"description": "A feature-rich client for Matrix.org",
|
||||
"author": "New Vector Ltd.",
|
||||
"dependencies": {
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
"integrations_ui_url": "https://scalar.vector.im/",
|
||||
"integrations_rest_url": "https://scalar.vector.im/api",
|
||||
"integrations_widgets_urls": [
|
||||
"https://scalar-staging.vector.im/api",
|
||||
"https://scalar-staging.riot.im/scalar/api",
|
||||
"https://scalar.vector.im/api"
|
||||
],
|
||||
|
||||
@@ -100,7 +100,7 @@ module.exports = function (config) {
|
||||
|
||||
// test results reporter to use
|
||||
// available reporters: https://npmjs.org/browse/keyword/karma-reporter
|
||||
reporters: ['logcapture', 'spec', 'junit', 'summary'],
|
||||
reporters: ['logcapture', 'spec', 'summary'],
|
||||
|
||||
specReporter: {
|
||||
suppressErrorSummary: false, // do print error summary
|
||||
@@ -159,10 +159,6 @@ module.exports = function (config) {
|
||||
// how many browser should be started simultaneous
|
||||
concurrency: Infinity,
|
||||
|
||||
junitReporter: {
|
||||
outputDir: 'karma-reports',
|
||||
},
|
||||
|
||||
webpack: webpack_config,
|
||||
|
||||
webpackMiddleware: {
|
||||
|
||||
14
package.json
14
package.json
@@ -2,7 +2,7 @@
|
||||
"name": "riot-web",
|
||||
"productName": "Riot",
|
||||
"main": "electron_app/src/electron-main.js",
|
||||
"version": "1.0.8",
|
||||
"version": "1.2.1",
|
||||
"description": "A feature-rich client for Matrix.org",
|
||||
"author": "New Vector Ltd.",
|
||||
"repository": {
|
||||
@@ -73,10 +73,10 @@
|
||||
"gemini-scrollbar": "github:matrix-org/gemini-scrollbar#b302279",
|
||||
"gfm.css": "^1.1.2",
|
||||
"highlight.js": "^9.13.1",
|
||||
"matrix-js-sdk": "1.0.4",
|
||||
"matrix-react-sdk": "1.0.7",
|
||||
"matrix-js-sdk": "2.0.0",
|
||||
"matrix-react-sdk": "1.2.1",
|
||||
"modernizr": "^3.6.0",
|
||||
"olm": "https://packages.matrix.org/npm/olm/olm-3.1.0-pre3.tgz",
|
||||
"olm": "https://packages.matrix.org/npm/olm/olm-3.1.0.tgz",
|
||||
"prop-types": "^15.6.2",
|
||||
"react": "^15.6.0",
|
||||
"react-dom": "^15.6.0",
|
||||
@@ -91,7 +91,9 @@
|
||||
"babel-eslint": "^8.1.1",
|
||||
"babel-loader": "^7.1.5",
|
||||
"babel-plugin-add-module-exports": "^0.2.1",
|
||||
"babel-plugin-syntax-dynamic-import": "^6.18.0",
|
||||
"babel-plugin-transform-async-to-bluebird": "^1.1.1",
|
||||
"babel-plugin-transform-builtin-extend": "^1.1.2",
|
||||
"babel-plugin-transform-class-properties": "^6.24.1",
|
||||
"babel-plugin-transform-object-rest-spread": "^6.26.0",
|
||||
"babel-plugin-transform-runtime": "^6.23.0",
|
||||
@@ -108,7 +110,6 @@
|
||||
"electron-builder": "^20.38.5",
|
||||
"electron-builder-squirrel-windows": "^20.38.5",
|
||||
"electron-devtools-installer": "^2.2.4",
|
||||
"emojione": "^2.2.7",
|
||||
"eslint": "^5.8.0",
|
||||
"eslint-config-google": "^0.7.1",
|
||||
"eslint-plugin-babel": "^4.1.2",
|
||||
@@ -122,7 +123,6 @@
|
||||
"karma": "^3.1.2",
|
||||
"karma-chrome-launcher": "^2.2.0",
|
||||
"karma-cli": "^1.0.1",
|
||||
"karma-junit-reporter": "^2.0.0",
|
||||
"karma-logcapture-reporter": "0.0.1",
|
||||
"karma-mocha": "^1.3.0",
|
||||
"karma-sourcemap-loader": "^0.3.7",
|
||||
@@ -153,7 +153,7 @@
|
||||
},
|
||||
"build": {
|
||||
"appId": "im.riot.app",
|
||||
"electronVersion": "4.1.3",
|
||||
"electronVersion": "4.2.2",
|
||||
"files": [
|
||||
"node_modules/**",
|
||||
"src/**",
|
||||
|
||||
@@ -1 +1 @@
|
||||
signing_id: packages@riot.im
|
||||
signing_id: releases@riot.im
|
||||
|
||||
@@ -1,13 +1,11 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Runs package.sh setting the version to git hashes of the riot-web,
|
||||
# react-sdk & js-sdk checkouts, for the case where these dependencies
|
||||
# are git checkouts.
|
||||
|
||||
set -ex
|
||||
|
||||
# check out corresponding branches of dependencies.
|
||||
# clone the deps with depth 1: we know we will only ever need that one commit.
|
||||
`dirname $0`/fetch-develop.deps.sh --depth 1
|
||||
|
||||
yarn install
|
||||
|
||||
rm dist/riot-*.tar.gz || true # rm previous artifacts without failing if it doesn't exist
|
||||
|
||||
# Since the deps are fetched from git, we can rev-parse
|
||||
@@ -57,8 +57,6 @@ const COPY_LIST = [
|
||||
["res/themes/**", "webapp/themes"],
|
||||
["res/vector-icons/**", "webapp/vector-icons"],
|
||||
["node_modules/matrix-react-sdk/res/media/**", "webapp/media"],
|
||||
["node_modules/emojione/assets/svg/*", "webapp/emojione/svg/"],
|
||||
["node_modules/emojione/assets/png/*", "webapp/emojione/png/"],
|
||||
["node_modules/olm/olm_legacy.js", "webapp", { directwatch: 1 }],
|
||||
["./config.json", "webapp", { directwatch: 1 }],
|
||||
];
|
||||
|
||||
30
scripts/docker-link-repos.sh
Normal file
30
scripts/docker-link-repos.sh
Normal file
@@ -0,0 +1,30 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -ex
|
||||
|
||||
if [ $USE_CUSTOM_SDKS == false ]
|
||||
then
|
||||
echo "skipping react-sdk and js-sdk installs: USE_CUSTOM_SDKS is false"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "Linking js-sdk"
|
||||
git clone $JS_SDK_REPO js-sdk
|
||||
cd js-sdk
|
||||
git checkout $JS_SDK_BRANCH
|
||||
yarn link
|
||||
yarn --network-timeout=100000 install
|
||||
cd ../
|
||||
|
||||
echo "Linking react-sdk"
|
||||
git clone $REACT_SDK_REPO react-sdk
|
||||
cd react-sdk
|
||||
git checkout $REACT_SDK_BRANCH
|
||||
yarn link
|
||||
yarn link matrix-js-sdk
|
||||
yarn --network-timeout=100000 install
|
||||
cd ../
|
||||
|
||||
echo "Setting up riot-web with react-sdk and js-sdk packages"
|
||||
yarn link matrix-js-sdk
|
||||
yarn link matrix-react-sdk
|
||||
@@ -23,6 +23,9 @@ cp config.sample.json webapp/
|
||||
mkdir -p dist
|
||||
cp -r webapp riot-$version
|
||||
|
||||
# Just in case you have a local config, remove it before packaging
|
||||
rm riot-$version/config.json || true
|
||||
|
||||
# if $version looks like semver with leading v, strip it before writing to file
|
||||
if [[ ${version} =~ ^v[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+(-.+)?$ ]]; then
|
||||
echo ${version:1} > riot-$version/version
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
#
|
||||
# auto-deploy script for https://riot.im/develop
|
||||
#
|
||||
# Listens for HTTP hits. When it gets one, downloads the artifact from jenkins
|
||||
# Listens for buildkite webhook pokes (https://buildkite.com/docs/apis/webhooks)
|
||||
# When it gets one, downloads the artifact from buildkite
|
||||
# and deploys it as the new version.
|
||||
#
|
||||
# Requires the following python packages:
|
||||
@@ -16,6 +17,10 @@ import time
|
||||
import traceback
|
||||
from urlparse import urljoin
|
||||
import glob
|
||||
import re
|
||||
import shutil
|
||||
import threading
|
||||
from Queue import Queue
|
||||
|
||||
from flask import Flask, jsonify, request, abort
|
||||
|
||||
@@ -23,10 +28,13 @@ from deploy import Deployer, DeployException
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
arg_jenkins_url = None
|
||||
deployer = None
|
||||
arg_extract_path = None
|
||||
arg_symlink = None
|
||||
arg_webhook_token = None
|
||||
arg_api_token = None
|
||||
|
||||
workQueue = Queue()
|
||||
|
||||
def create_symlink(source, linkname):
|
||||
try:
|
||||
@@ -39,81 +47,117 @@ def create_symlink(source, linkname):
|
||||
else:
|
||||
raise e
|
||||
|
||||
def req_headers():
|
||||
return {
|
||||
"Authorization": "Bearer %s" % (arg_api_token,),
|
||||
}
|
||||
|
||||
# Buildkite considers a poke to have failed if it has to wait more than 10s for
|
||||
# data (any data, not just the initial response) and it normally takes longer than
|
||||
# that to download an artifact from buildkite. Apparently there is no way in flask
|
||||
# to finish the response and then keep doing stuff, so instead this has to involve
|
||||
# threading. Sigh.
|
||||
def worker_thread():
|
||||
while True:
|
||||
toDeploy = workQueue.get()
|
||||
deploy_buildkite_artifact(*toDeploy)
|
||||
|
||||
@app.route("/", methods=["POST"])
|
||||
def on_receive_jenkins_poke():
|
||||
# {
|
||||
# "name": "VectorWebDevelop",
|
||||
# "build": {
|
||||
# "number": 8
|
||||
# }
|
||||
# }
|
||||
def on_receive_buildkite_poke():
|
||||
got_webhook_token = request.headers.get('X-Buildkite-Token')
|
||||
if got_webhook_token != arg_webbook_token:
|
||||
print("Denying request with incorrect webhook token: %s" % (got_webhook_token,))
|
||||
abort(400, "Incorrect webhook token")
|
||||
return
|
||||
|
||||
required_api_prefix = None
|
||||
if arg_buildkite_org is not None:
|
||||
required_api_prefix = 'https://api.buildkite.com/v2/organizations/%s' % (arg_buildkite_org,)
|
||||
|
||||
incoming_json = request.get_json()
|
||||
if not incoming_json:
|
||||
abort(400, "No JSON provided!")
|
||||
return
|
||||
print("Incoming JSON: %s" % (incoming_json,))
|
||||
|
||||
job_name = incoming_json.get("name")
|
||||
if not isinstance(job_name, basestring):
|
||||
abort(400, "Bad job name: %s" % (job_name,))
|
||||
event = incoming_json.get("event")
|
||||
if event is None:
|
||||
abort(400, "No 'event' specified")
|
||||
return
|
||||
|
||||
build_num = incoming_json.get("build", {}).get("number", 0)
|
||||
if not build_num or build_num <= 0 or not isinstance(build_num, int):
|
||||
abort(400, "Missing or bad build number")
|
||||
if event == 'ping':
|
||||
print("Got ping request - responding")
|
||||
return jsonify({'response': 'pong!'})
|
||||
|
||||
if event != 'build.finished':
|
||||
print("Rejecting '%s' event")
|
||||
abort(400, "Unrecognised event")
|
||||
return
|
||||
|
||||
return fetch_jenkins_build(job_name, build_num)
|
||||
|
||||
def fetch_jenkins_build(job_name, build_num):
|
||||
artifact_url = urljoin(
|
||||
arg_jenkins_url, "job/%s/%s/api/json" % (job_name, build_num)
|
||||
)
|
||||
artifact_response = requests.get(artifact_url).json()
|
||||
|
||||
# {
|
||||
# "actions": [],
|
||||
# "artifacts": [
|
||||
# {
|
||||
# "displayPath": "vector-043f6991a4ed-react-20f77d1224ef-js-0a7efe3e8bd5.tar.gz",
|
||||
# "fileName": "vector-043f6991a4ed-react-20f77d1224ef-js-0a7efe3e8bd5.tar.gz",
|
||||
# "relativePath": "vector-043f6991a4ed-react-20f77d1224ef-js-0a7efe3e8bd5.tar.gz"
|
||||
# }
|
||||
# ],
|
||||
# "building": false,
|
||||
# "description": null,
|
||||
# "displayName": "#11",
|
||||
# "duration": 137976,
|
||||
# "estimatedDuration": 132008,
|
||||
# "executor": null,
|
||||
# "fullDisplayName": "VectorWebDevelop #11",
|
||||
# "id": "11",
|
||||
# "keepLog": false,
|
||||
# "number": 11,
|
||||
# "queueId": 12254,
|
||||
# "result": "SUCCESS",
|
||||
# "timestamp": 1454432640079,
|
||||
# "url": "http://matrix.org/jenkins/job/VectorWebDevelop/11/",
|
||||
# "builtOn": "",
|
||||
# "changeSet": {},
|
||||
# "culprits": []
|
||||
# }
|
||||
if artifact_response.get("result") != "SUCCESS":
|
||||
abort(404, "Not deploying. Build was not marked as SUCCESS.")
|
||||
build_obj = incoming_json.get("build")
|
||||
if build_obj is None:
|
||||
abort(400, "No 'build' object")
|
||||
return
|
||||
|
||||
if len(artifact_response.get("artifacts", [])) != 1:
|
||||
abort(404, "Not deploying. Build has an unexpected number of artifacts.")
|
||||
build_url = build_obj.get('url')
|
||||
if build_url is None:
|
||||
abort(400, "build has no url")
|
||||
return
|
||||
|
||||
tar_gz_path = artifact_response["artifacts"][0]["relativePath"]
|
||||
if not tar_gz_path.endswith(".tar.gz"):
|
||||
abort(404, "Not deploying. Artifact is not a .tar.gz file")
|
||||
if required_api_prefix is not None and not build_url.startswith(required_api_prefix):
|
||||
print("Denying poke for build url with incorrect prefix: %s" % (build_url,))
|
||||
abort(400, "Invalid build url")
|
||||
return
|
||||
|
||||
tar_gz_url = urljoin(
|
||||
arg_jenkins_url, "job/%s/%s/artifact/%s" % (job_name, build_num, tar_gz_path)
|
||||
)
|
||||
build_num = build_obj.get('number')
|
||||
if build_num is None:
|
||||
abort(400, "build has no number")
|
||||
return
|
||||
|
||||
pipeline_obj = incoming_json.get("pipeline")
|
||||
if pipeline_obj is None:
|
||||
abort(400, "No 'pipeline' object")
|
||||
return
|
||||
|
||||
pipeline_name = pipeline_obj.get('name')
|
||||
if pipeline_name is None:
|
||||
abort(400, "pipeline has no name")
|
||||
return
|
||||
|
||||
artifacts_url = build_url + "/artifacts"
|
||||
artifacts_resp = requests.get(artifacts_url, headers=req_headers())
|
||||
artifacts_resp.raise_for_status()
|
||||
artifacts_array = artifacts_resp.json()
|
||||
|
||||
artifact_to_deploy = None
|
||||
for artifact in artifacts_array:
|
||||
if re.match(r"dist/.*.tar.gz", artifact['path']):
|
||||
artifact_to_deploy = artifact
|
||||
if artifact_to_deploy is None:
|
||||
print("No suitable artifacts found")
|
||||
return jsonify({})
|
||||
|
||||
# double paranoia check: make sure the artifact is on the right org too
|
||||
if required_api_prefix is not None and not artifact_to_deploy['url'].startswith(required_api_prefix):
|
||||
print("Denying poke for build url with incorrect prefix: %s" % (artifact_to_deploy['url'],))
|
||||
abort(400, "Refusing to deploy artifact from URL %s", artifact_to_deploy['url'])
|
||||
return
|
||||
|
||||
# there's no point building up a queue of things to deploy, so if there are any pending jobs,
|
||||
# remove them
|
||||
while not workQueue.empty():
|
||||
try:
|
||||
workQueue.get(False)
|
||||
except:
|
||||
pass
|
||||
workQueue.put([artifact_to_deploy, pipeline_name, build_num])
|
||||
|
||||
return jsonify({})
|
||||
|
||||
def deploy_buildkite_artifact(artifact, pipeline_name, build_num):
|
||||
artifact_response = requests.get(artifact['url'], headers=req_headers())
|
||||
artifact_response.raise_for_status()
|
||||
artifact_obj = artifact_response.json()
|
||||
|
||||
# we extract into a directory based on the build number. This avoids the
|
||||
# problem of multiple builds building the same git version and thus having
|
||||
@@ -122,18 +166,16 @@ def fetch_jenkins_build(job_name, build_num):
|
||||
# a good deploy with a bad one
|
||||
# (b) we'll be overwriting the live deployment, which means people might
|
||||
# see half-written files.
|
||||
build_dir = os.path.join(arg_extract_path, "%s-#%s" % (job_name, build_num))
|
||||
build_dir = os.path.join(arg_extract_path, "%s-#%s" % (pipeline_name, build_num))
|
||||
try:
|
||||
extracted_dir = deploy_tarball(tar_gz_url, build_dir)
|
||||
extracted_dir = deploy_tarball(artifact_obj, build_dir)
|
||||
except DeployException as e:
|
||||
traceback.print_exc()
|
||||
abort(400, e.message)
|
||||
|
||||
create_symlink(source=extracted_dir, linkname=arg_symlink)
|
||||
|
||||
return jsonify({})
|
||||
|
||||
def deploy_tarball(tar_gz_url, build_dir):
|
||||
def deploy_tarball(artifact, build_dir):
|
||||
"""Download a tarball from jenkins and unpack it
|
||||
|
||||
Returns:
|
||||
@@ -145,20 +187,25 @@ def deploy_tarball(tar_gz_url, build_dir):
|
||||
)
|
||||
os.mkdir(build_dir)
|
||||
|
||||
print("Fetching artifact %s -> %s..." % (artifact['download_url'], artifact['filename']))
|
||||
|
||||
# Download the tarball here as buildkite needs auth to do this
|
||||
# we don't pgp-sign buildkite artifacts, relying on HTTPS and buildkite
|
||||
# not being evil. If that's not good enough for you, don't use riot.im/develop.
|
||||
resp = requests.get(artifact['download_url'], stream=True, headers=req_headers())
|
||||
resp.raise_for_status()
|
||||
with open(artifact['filename'], 'wb') as ofp:
|
||||
shutil.copyfileobj(resp.raw, ofp)
|
||||
print("...download complete. Deploying...")
|
||||
|
||||
# we rely on the fact that flask only serves one request at a time to
|
||||
# ensure that we do not overwrite a tarball from a concurrent request.
|
||||
|
||||
return deployer.deploy(tar_gz_url, build_dir)
|
||||
return deployer.deploy(artifact['filename'], build_dir)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser("Runs a Vector redeployment server.")
|
||||
parser.add_argument(
|
||||
"-j", "--jenkins", dest="jenkins", default="https://matrix.org/jenkins/", help=(
|
||||
"The base URL of the Jenkins web server. This will be hit to get the\
|
||||
built artifacts (the .gz file) for redeploying."
|
||||
)
|
||||
)
|
||||
parser.add_argument(
|
||||
"-p", "--port", dest="port", default=4000, type=int, help=(
|
||||
"The port to listen on for requests from Jenkins."
|
||||
@@ -204,13 +251,33 @@ if __name__ == "__main__":
|
||||
),
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"--webhook-token", dest="webhook_token", help=(
|
||||
"Only accept pokes with this buildkite token."
|
||||
), required=True,
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"--api-token", dest="api_token", help=(
|
||||
"API access token for buildkite. Require read_artifacts scope."
|
||||
), required=True,
|
||||
)
|
||||
|
||||
# We require a matching webhook token, but because we take everything else
|
||||
# about what to deploy from the poke body, we can be a little more paranoid
|
||||
# and only accept builds / artifacts from a specific buildkite org
|
||||
parser.add_argument(
|
||||
"--org", dest="buildkite_org", help=(
|
||||
"Lock down to this buildkite org"
|
||||
)
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
if args.jenkins.endswith("/"): # important for urljoin
|
||||
arg_jenkins_url = args.jenkins
|
||||
else:
|
||||
arg_jenkins_url = args.jenkins + "/"
|
||||
arg_extract_path = args.extract
|
||||
arg_symlink = args.symlink
|
||||
arg_webbook_token = args.webhook_token
|
||||
arg_api_token = args.api_token
|
||||
arg_buildkite_org = args.buildkite_org
|
||||
|
||||
if not os.path.isdir(arg_extract_path):
|
||||
os.mkdir(arg_extract_path)
|
||||
@@ -222,25 +289,20 @@ if __name__ == "__main__":
|
||||
for include in args.include:
|
||||
deployer.symlink_paths.update({ os.path.basename(pth): pth for pth in glob.iglob(include) })
|
||||
|
||||
|
||||
# we don't pgp-sign jenkins artifacts; instead we rely on HTTPS access to
|
||||
# the jenkins server (and the jenkins server not being compromised and/or
|
||||
# github not serving it compromised source). If that's not good enough for
|
||||
# you, don't use riot.im/develop.
|
||||
deployer.verify_signature = False
|
||||
|
||||
if args.tarball_uri is not None:
|
||||
build_dir = os.path.join(arg_extract_path, "test-%i" % (time.time()))
|
||||
deploy_tarball(args.tarball_uri, build_dir)
|
||||
else:
|
||||
print(
|
||||
"Listening on port %s. Extracting to %s%s. Symlinking to %s. Jenkins URL: %s. Include files: %s" %
|
||||
"Listening on port %s. Extracting to %s%s. Symlinking to %s. Include files: %s" %
|
||||
(args.port,
|
||||
arg_extract_path,
|
||||
" (clean after)" if deployer.should_clean else "",
|
||||
arg_symlink,
|
||||
arg_jenkins_url,
|
||||
deployer.symlink_paths,
|
||||
)
|
||||
)
|
||||
app.run(host="0.0.0.0", port=args.port, debug=True)
|
||||
fred = threading.Thread(target=worker_thread)
|
||||
fred.daemon = True
|
||||
fred.start()
|
||||
app.run(port=args.port, debug=False)
|
||||
|
||||
@@ -41,5 +41,6 @@
|
||||
"Create Account": "Krei konton",
|
||||
"Need help?": "Ĉu vi bezonas helpon?",
|
||||
"Explore rooms": "Esplori ĉambrojn",
|
||||
"Room Directory": "Ĉambra dosierujo"
|
||||
"Room Directory": "Ĉambra dosierujo",
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Vi povas uzi proprajn servilajn elekteblojn por saluti aliajn servilojn de Matrix, donante alian hejmeservilan URL-on. Tio povigos vin uzi programon Riot kun jama konto de Matrix en alia hejmservilo."
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Voit käyttää edistyksellisiä asetuksia kirjautuaksesi muille Matrix palvelimille, määrittelemällä kotipalvelimen URL-osoitteen.<br/>Tämän avulla voit käyttää Riot:ia olemassa olevalla toisen Matrix palvelimen käyttäjätilillä.<br/><br/>Voit myös asettaa valinnaisen identiteettipalvelimen, mutta et voi kutsua käyttäjiä sähköpostiosoitteella tai tulla kutsutuksi.",
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Voit käyttää mukautettuja palvelinasetuksia kirjautuaksesi muihin Matrix-palvelimiin. Tämä mahdollistaa Riotin käyttämisen toisella kotipalvelimella olevalla Matrix-tilillä.",
|
||||
"You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Voit myös määrittää toisen identiteettipalvelimen, mutta et voi kutsua muita käyttäjiä sähköpostin perusteella tai saada itse kutsua sähköpostin perusteella.",
|
||||
"Sign In": "Kirjaudu sisään",
|
||||
"Sign In": "Kirjaudu",
|
||||
"Create Account": "Luo tili",
|
||||
"Need help?": "Tarvitsetko apua?",
|
||||
"Explore rooms": "Etsi huoneita",
|
||||
|
||||
@@ -34,5 +34,12 @@
|
||||
"Dev chat for the Riot/Web dev team": "Riot/Web izstrādātāju komandas čats",
|
||||
"Dev chat for the Dendrite dev team": "Dendrite izstrādatāju komandas čats",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Matrix-ā pastāv daudzas neatkarīgas un/vai eksistējošiem tīmekļa resursiem (Slack, IRC, Gitter u.tml.) piesaistītas istabas. Ieskaties katalogā!",
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Tu vari lietot \"custom\" servera opcijas, lai ielogotos citos Matrix serveros, norādot citu Bāzes servera URL.<br> Tas atļaus tev lietot Riot ar esošo Matrix kontu uz cita Bāzes servera.<br/><br/>Tu arī vari uzstādīt atsevišķu Identitāšu serveri, taču tad Tev nebūs iespēju uzaicināt lietotājus, izmantojot epasta adresi, vai pašam tikt uzaicinātam, izmantojot epasta adresi."
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Tu vari lietot \"custom\" servera opcijas, lai ielogotos citos Matrix serveros, norādot citu Bāzes servera URL.<br> Tas atļaus tev lietot Riot ar esošo Matrix kontu uz cita Bāzes servera.<br/><br/>Tu arī vari uzstādīt atsevišķu Identitāšu serveri, taču tad Tev nebūs iespēju uzaicināt lietotājus, izmantojot epasta adresi, vai pašam tikt uzaicinātam, izmantojot epasta adresi.",
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Varat izmantot pielāgotās servera opcijas, lai pierakstītos citos Matrix serveros, norādot citu mājas servera URL. Tas ļauj jums izmantot Riot ar esošu Matrix kontu citā mājas serverī.",
|
||||
"You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Varat arī iestatīt pielāgotu identitātes serveri, bet jūs nevarēsiet uzaicināt lietotājus izmantojot e-pasta adresi, kā arī tikt uzaicināts pēc e-pasta adreses.",
|
||||
"Sign In": "Ienākt",
|
||||
"Create Account": "Izveidot kontu",
|
||||
"Need help?": "Nepieciešama palīdzība?",
|
||||
"Explore rooms": "Atklāt istabas",
|
||||
"Room Directory": "Istabu Katalogs"
|
||||
}
|
||||
|
||||
@@ -39,5 +39,6 @@
|
||||
"Create Account": "Stwórz konto",
|
||||
"Sign In": "Zaloguj",
|
||||
"Need help?": "Potrzebujesz pomocy?",
|
||||
"Room Directory": "Katalog pokojów"
|
||||
"Room Directory": "Katalog pokojów",
|
||||
"Explore rooms": "Przeglądaj pokoje"
|
||||
}
|
||||
|
||||
@@ -1 +1,21 @@
|
||||
{}
|
||||
{
|
||||
"Riot Desktop on %(platformName)s": "Namizni Riot za %(platformName)s",
|
||||
"Unknown device": "Neznana naprava",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s s %(browserName)s na %(osName)s",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Za klic s skupno rabo zaslona potrebujete HTTPS.",
|
||||
"powered by Matrix": "poganja Matrix",
|
||||
"Custom Server Options": "Možnosti strežnika po meri",
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Možnosti strežnika po meri lahko uporabite za prijavo v druge Matrix strežnike, s tem da podate drug URL domačega strežnika. To vam omogoča, da uporabljate Riot z obstoječim Matrix računom na drugem strežniku.",
|
||||
"You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Nastavite lahko tudi strežnik za identiteto po meri, vendar ne boste mogli povabiti uporabnikov prek e-pošte, prav tako pa vas ne bodo mogli povabiti drugi.",
|
||||
"Dismiss": "Opusti",
|
||||
"Welcome to Riot.im": "Dobrodošli v Riot.im",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizirano šifrirano sporočanje & sodelovanje s pomočjo [matrix]",
|
||||
"Sign In": "Prijava",
|
||||
"Create Account": "Registracija",
|
||||
"Need help?": "Potrebujete pomoč?",
|
||||
"Chat with Riot Bot": "Klepetajte z Riot Botom",
|
||||
"Explore rooms": "Raziščite sobe",
|
||||
"Room Directory": "Imenik sob",
|
||||
"Search the room directory": "Preiščite imenik sob",
|
||||
"Get started with some tips from Riot Bot!": "Začnite z nekaterimi nasveti Riot Bota!"
|
||||
}
|
||||
|
||||
@@ -235,7 +235,7 @@ body {
|
||||
</a>
|
||||
<h3 class="mx_Spacer">Android</h3>
|
||||
<p>If you have an Android device, install the Android Riot app from Google Play or F-droid.</p>
|
||||
<a href="https://play.google.com/store/apps/details?id=im.vector.alpha" target="_blank" class="mx_ClearDecoration">
|
||||
<a href="https://play.google.com/store/apps/details?id=im.vector.app" target="_blank" class="mx_ClearDecoration">
|
||||
<svg width="162px" height="48px" viewBox="0 0 162 48" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 51.2 (57519) - http://www.bohemiancoding.com/sketch -->
|
||||
<desc>Created with Sketch.</desc>
|
||||
|
||||
@@ -39,14 +39,7 @@ export default class VectorBasePlatform extends BasePlatform {
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
// The 'animations' are really low framerate and look terrible.
|
||||
// Also it re-starts the animation every time you set the badge,
|
||||
// and we set the state each time, even if the value hasn't changed,
|
||||
// so we'd need to fix that if enabling the animation.
|
||||
this.favicon = new Favico({animation: 'none'});
|
||||
this.showUpdateCheck = false;
|
||||
this._updateFavicon();
|
||||
|
||||
this.startUpdateCheck = this.startUpdateCheck.bind(this);
|
||||
this.stopUpdateCheck = this.stopUpdateCheck.bind(this);
|
||||
}
|
||||
@@ -55,6 +48,24 @@ export default class VectorBasePlatform extends BasePlatform {
|
||||
return 'Vector Base Platform'; // no translation required: only used for analytics
|
||||
}
|
||||
|
||||
/**
|
||||
* Delay creating the `Favico` instance until first use (on the first notification) as
|
||||
* it uses canvas, which can trigger a permission prompt in Firefox's resist
|
||||
* fingerprinting mode.
|
||||
* See https://github.com/vector-im/riot-web/issues/9605.
|
||||
*/
|
||||
get favicon() {
|
||||
if (this._favicon) {
|
||||
return this._favicon;
|
||||
}
|
||||
// The 'animations' are really low framerate and look terrible.
|
||||
// Also it re-starts the animation every time you set the badge,
|
||||
// and we set the state each time, even if the value hasn't changed,
|
||||
// so we'd need to fix that if enabling the animation.
|
||||
this._favicon = new Favico({ animation: 'none' });
|
||||
return this._favicon;
|
||||
}
|
||||
|
||||
_updateFavicon() {
|
||||
try {
|
||||
// This needs to be in in a try block as it will throw
|
||||
|
||||
@@ -71,7 +71,7 @@ module.exports = {
|
||||
},
|
||||
},
|
||||
{
|
||||
test: /\.(gif|png|svg|ttf|xml|ico)$/,
|
||||
test: /\.(gif|png|svg|ttf|woff|woff2|xml|ico)$/,
|
||||
// Use a content-based hash in the name so that we can set a long cache
|
||||
// lifetime for assets while still delivering changes quickly.
|
||||
oneOf: [
|
||||
|
||||
Reference in New Issue
Block a user