forked from matrix/element-web
Merge branch 'develop' into rob/electron-screensharing
This commit is contained in:
commit
44c0fb77da
47
CHANGELOG.md
47
CHANGELOG.md
|
@ -1,3 +1,50 @@
|
||||||
|
Changes in [0.12.6](https://github.com/vector-im/riot-web/releases/tag/v0.12.6) (2017-09-21)
|
||||||
|
============================================================================================
|
||||||
|
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.5...v0.12.6)
|
||||||
|
|
||||||
|
* Use matrix-js-sdk v0.8.4 to fix build
|
||||||
|
|
||||||
|
Changes in [0.12.5](https://github.com/vector-im/riot-web/releases/tag/v0.12.5) (2017-09-21)
|
||||||
|
============================================================================================
|
||||||
|
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.4...v0.12.5)
|
||||||
|
|
||||||
|
* Use react-sdk v0.10.5 to fix build
|
||||||
|
|
||||||
|
Changes in [0.12.4](https://github.com/vector-im/riot-web/releases/tag/v0.12.4) (2017-09-20)
|
||||||
|
============================================================================================
|
||||||
|
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.4-rc.1...v0.12.4)
|
||||||
|
|
||||||
|
* No changes
|
||||||
|
|
||||||
|
Changes in [0.12.4-rc.1](https://github.com/vector-im/riot-web/releases/tag/v0.12.4-rc.1) (2017-09-19)
|
||||||
|
======================================================================================================
|
||||||
|
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.3...v0.12.4-rc.1)
|
||||||
|
|
||||||
|
* Fix test for new behaviour of 'joining' flag
|
||||||
|
[\#5053](https://github.com/vector-im/riot-web/pull/5053)
|
||||||
|
* fix really dumb blunder/typo preventing system from going to sleep.
|
||||||
|
[\#5080](https://github.com/vector-im/riot-web/pull/5080)
|
||||||
|
* T3chguy/devtools
|
||||||
|
[\#4735](https://github.com/vector-im/riot-web/pull/4735)
|
||||||
|
* CSS for unignore button in UserSettings
|
||||||
|
[\#5042](https://github.com/vector-im/riot-web/pull/5042)
|
||||||
|
* Fix alias on home page for identity room
|
||||||
|
[\#5044](https://github.com/vector-im/riot-web/pull/5044)
|
||||||
|
* generic contextual menu for tooltip/responses
|
||||||
|
[\#4989](https://github.com/vector-im/riot-web/pull/4989)
|
||||||
|
* Update from Weblate.
|
||||||
|
[\#5018](https://github.com/vector-im/riot-web/pull/5018)
|
||||||
|
* Avoid re-rendering RoomList on room switch
|
||||||
|
[\#5015](https://github.com/vector-im/riot-web/pull/5015)
|
||||||
|
* Fix menu on change keyboard language issue #4345
|
||||||
|
[\#4623](https://github.com/vector-im/riot-web/pull/4623)
|
||||||
|
* Make isInvite default to false
|
||||||
|
[\#4999](https://github.com/vector-im/riot-web/pull/4999)
|
||||||
|
* Revert "Implement sticky date separators"
|
||||||
|
[\#4991](https://github.com/vector-im/riot-web/pull/4991)
|
||||||
|
* Implement sticky date separators
|
||||||
|
[\#4939](https://github.com/vector-im/riot-web/pull/4939)
|
||||||
|
|
||||||
Changes in [0.12.3](https://github.com/vector-im/riot-web/releases/tag/v0.12.3) (2017-09-06)
|
Changes in [0.12.3](https://github.com/vector-im/riot-web/releases/tag/v0.12.3) (2017-09-06)
|
||||||
============================================================================================
|
============================================================================================
|
||||||
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.3-rc.3...v0.12.3)
|
[Full Changelog](https://github.com/vector-im/riot-web/compare/v0.12.3-rc.3...v0.12.3)
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
"name": "riot-web",
|
"name": "riot-web",
|
||||||
"productName": "Riot",
|
"productName": "Riot",
|
||||||
"main": "src/electron-main.js",
|
"main": "src/electron-main.js",
|
||||||
"version": "0.12.3",
|
"version": "0.12.6",
|
||||||
"description": "A feature-rich client for Matrix.org",
|
"description": "A feature-rich client for Matrix.org",
|
||||||
"author": "Vector Creations Ltd.",
|
"author": "Vector Creations Ltd.",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
|
@ -84,7 +84,7 @@ let powerSaveBlockerId;
|
||||||
electron.ipcMain.on('app_onAction', function(ev, payload) {
|
electron.ipcMain.on('app_onAction', function(ev, payload) {
|
||||||
switch (payload.action) {
|
switch (payload.action) {
|
||||||
case 'call_state':
|
case 'call_state':
|
||||||
if (powerSaveBlockerId && powerSaveBlockerId.isStarted(powerSaveBlockerId)) {
|
if (powerSaveBlockerId && electron.powerSaveBlocker.isStarted(powerSaveBlockerId)) {
|
||||||
if (payload.state === 'ended') {
|
if (payload.state === 'ended') {
|
||||||
electron.powerSaveBlocker.stop(powerSaveBlockerId);
|
electron.powerSaveBlocker.stop(powerSaveBlockerId);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
"name": "riot-web",
|
"name": "riot-web",
|
||||||
"productName": "Riot",
|
"productName": "Riot",
|
||||||
"main": "electron_app/src/electron-main.js",
|
"main": "electron_app/src/electron-main.js",
|
||||||
"version": "0.12.3",
|
"version": "0.12.6",
|
||||||
"description": "A feature-rich client for Matrix.org",
|
"description": "A feature-rich client for Matrix.org",
|
||||||
"author": "Vector Creations Ltd.",
|
"author": "Vector Creations Ltd.",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
@ -47,7 +47,7 @@
|
||||||
"lint": "eslint src/",
|
"lint": "eslint src/",
|
||||||
"lintall": "eslint src/ test/",
|
"lintall": "eslint src/ test/",
|
||||||
"clean": "rimraf lib webapp electron_app/dist",
|
"clean": "rimraf lib webapp electron_app/dist",
|
||||||
"prepublish": "npm run build:compile",
|
"prepublish": "npm run clean && npm run build:compile",
|
||||||
"test": "karma start --single-run=true --autoWatch=false --browsers ChromeHeadless",
|
"test": "karma start --single-run=true --autoWatch=false --browsers ChromeHeadless",
|
||||||
"test-multi": "karma start"
|
"test-multi": "karma start"
|
||||||
},
|
},
|
||||||
|
@ -66,10 +66,11 @@
|
||||||
"gfm.css": "^1.1.1",
|
"gfm.css": "^1.1.1",
|
||||||
"highlight.js": "^9.0.0",
|
"highlight.js": "^9.0.0",
|
||||||
"linkifyjs": "^2.1.3",
|
"linkifyjs": "^2.1.3",
|
||||||
"matrix-js-sdk": "0.8.2",
|
"matrix-js-sdk": "0.8.4",
|
||||||
"matrix-react-sdk": "0.10.3",
|
"matrix-react-sdk": "0.10.6",
|
||||||
"modernizr": "^3.1.0",
|
"modernizr": "^3.1.0",
|
||||||
"pako": "^1.0.5",
|
"pako": "^1.0.5",
|
||||||
|
"prop-types": "^15.5.10",
|
||||||
"react": "^15.6.0",
|
"react": "^15.6.0",
|
||||||
"react-dnd": "^2.1.4",
|
"react-dnd": "^2.1.4",
|
||||||
"react-dnd-html5-backend": "^2.1.2",
|
"react-dnd-html5-backend": "^2.1.2",
|
||||||
|
|
|
@ -249,7 +249,7 @@
|
||||||
<span class="mx_HomePage_desc">_t("Implementing VoIP services with Matrix")</span>
|
<span class="mx_HomePage_desc">_t("Implementing VoIP services with Matrix")</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="mx_HomePage_room">
|
<div class="mx_HomePage_room">
|
||||||
<a href="#/room/#identity:matrix.org">
|
<a href="#/room/#matrix-identity:matrix.org">
|
||||||
<img class="mx_HomePage_icon" src="home/rooms/identity.jpg">
|
<img class="mx_HomePage_icon" src="home/rooms/identity.jpg">
|
||||||
<span class="mx_HomePage_name">Matrix Identity</span>
|
<span class="mx_HomePage_name">Matrix Identity</span>
|
||||||
</a>
|
</a>
|
||||||
|
|
|
@ -17,6 +17,7 @@ const INCLUDE_LANGS = [
|
||||||
{'value': 'eo', 'label': 'Esperanto'},
|
{'value': 'eo', 'label': 'Esperanto'},
|
||||||
{'value': 'es', 'label': 'Español'},
|
{'value': 'es', 'label': 'Español'},
|
||||||
{'value': 'eu', 'label': 'Euskal'},
|
{'value': 'eu', 'label': 'Euskal'},
|
||||||
|
{'value': 'fi', 'label': 'Suomi'},
|
||||||
{'value': 'fr', 'label': 'Français'},
|
{'value': 'fr', 'label': 'Français'},
|
||||||
{'value': 'hu', 'label': 'Magyar'},
|
{'value': 'hu', 'label': 'Magyar'},
|
||||||
{'value': 'ko', 'label': '한국어'},
|
{'value': 'ko', 'label': '한국어'},
|
||||||
|
|
|
@ -14,6 +14,7 @@ import subprocess
|
||||||
import sys
|
import sys
|
||||||
import tarfile
|
import tarfile
|
||||||
import shutil
|
import shutil
|
||||||
|
import glob
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# python3
|
# python3
|
||||||
|
@ -66,7 +67,7 @@ class Deployer:
|
||||||
self.bundles_path = None
|
self.bundles_path = None
|
||||||
self.should_clean = False
|
self.should_clean = False
|
||||||
# filename -> symlink path e.g 'config.localhost.json' => '../localhost/config.json'
|
# filename -> symlink path e.g 'config.localhost.json' => '../localhost/config.json'
|
||||||
self.config_locations = {}
|
self.symlink_paths = {}
|
||||||
self.verify_signature = True
|
self.verify_signature = True
|
||||||
|
|
||||||
def deploy(self, tarball, extract_path):
|
def deploy(self, tarball, extract_path):
|
||||||
|
@ -98,11 +99,11 @@ class Deployer:
|
||||||
|
|
||||||
print ("Extracted into: %s" % extracted_dir)
|
print ("Extracted into: %s" % extracted_dir)
|
||||||
|
|
||||||
if self.config_locations:
|
if self.symlink_paths:
|
||||||
for config_filename, config_loc in self.config_locations.iteritems():
|
for link_path, file_path in self.symlink_paths.iteritems():
|
||||||
create_relative_symlink(
|
create_relative_symlink(
|
||||||
target=config_loc,
|
target=file_path,
|
||||||
linkname=os.path.join(extracted_dir, config_filename)
|
linkname=os.path.join(extracted_dir, link_path)
|
||||||
)
|
)
|
||||||
|
|
||||||
if self.bundles_path:
|
if self.bundles_path:
|
||||||
|
@ -165,9 +166,10 @@ if __name__ == "__main__":
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--config", nargs='?', default='./config.json', help=(
|
"--include", nargs='*', default='./config*.json', help=(
|
||||||
"Write a symlink at config.json in the extracted tarball to this \
|
"Symlink these files into the root of the deployed tarball. \
|
||||||
location. (Default: '%(default)s')"
|
Useful for config files and home pages. Supports glob syntax. \
|
||||||
|
(Default: '%(default)s')"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
|
@ -182,8 +184,8 @@ if __name__ == "__main__":
|
||||||
deployer.packages_path = args.packages_dir
|
deployer.packages_path = args.packages_dir
|
||||||
deployer.bundles_path = args.bundles_dir
|
deployer.bundles_path = args.bundles_dir
|
||||||
deployer.should_clean = args.clean
|
deployer.should_clean = args.clean
|
||||||
deployer.config_locations = {
|
|
||||||
"config.json": args.config,
|
for include in args.include:
|
||||||
}
|
deployer.symlink_paths.update({ os.path.basename(pth): pth for pth in glob.iglob(include) })
|
||||||
|
|
||||||
deployer.deploy(args.tarball, args.extract_path)
|
deployer.deploy(args.tarball, args.extract_path)
|
||||||
|
|
|
@ -15,6 +15,7 @@ import json, requests, tarfile, argparse, os, errno
|
||||||
import time
|
import time
|
||||||
import traceback
|
import traceback
|
||||||
from urlparse import urljoin
|
from urlparse import urljoin
|
||||||
|
import glob
|
||||||
|
|
||||||
from flask import Flask, jsonify, request, abort
|
from flask import Flask, jsonify, request, abort
|
||||||
|
|
||||||
|
@ -188,15 +189,12 @@ if __name__ == "__main__":
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
def _raise(ex):
|
# --include ../../config.json ./localhost.json homepages/*
|
||||||
raise ex
|
|
||||||
|
|
||||||
# --config config.json=../../config.json --config config.localhost.json=./localhost.json
|
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--config", action="append", dest="configs",
|
"--include", nargs='*', default='./config*.json', help=(
|
||||||
type=lambda kv: kv.split("=", 1) if "=" in kv else _raise(Exception("Missing =")), help=(
|
"Symlink these files into the root of the deployed tarball. \
|
||||||
"A list of configs to symlink into the extracted tarball. \
|
Useful for config files and home pages. Supports glob syntax. \
|
||||||
For example, --config config.json=../config.json config2.json=../test/config.json"
|
(Default: '%(default)s')"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
|
@ -220,7 +218,9 @@ if __name__ == "__main__":
|
||||||
deployer = Deployer()
|
deployer = Deployer()
|
||||||
deployer.bundles_path = args.bundles_dir
|
deployer.bundles_path = args.bundles_dir
|
||||||
deployer.should_clean = args.clean
|
deployer.should_clean = args.clean
|
||||||
deployer.config_locations = dict(args.configs) if args.configs else {}
|
|
||||||
|
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
|
# we don't pgp-sign jenkins artifacts; instead we rely on HTTPS access to
|
||||||
|
@ -234,13 +234,13 @@ if __name__ == "__main__":
|
||||||
deploy_tarball(args.tarball_uri, build_dir)
|
deploy_tarball(args.tarball_uri, build_dir)
|
||||||
else:
|
else:
|
||||||
print(
|
print(
|
||||||
"Listening on port %s. Extracting to %s%s. Symlinking to %s. Jenkins URL: %s. Config locations: %s" %
|
"Listening on port %s. Extracting to %s%s. Symlinking to %s. Jenkins URL: %s. Include files: %s" %
|
||||||
(args.port,
|
(args.port,
|
||||||
arg_extract_path,
|
arg_extract_path,
|
||||||
" (clean after)" if deployer.should_clean else "",
|
" (clean after)" if deployer.should_clean else "",
|
||||||
arg_symlink,
|
arg_symlink,
|
||||||
arg_jenkins_url,
|
arg_jenkins_url,
|
||||||
deployer.config_locations,
|
deployer.symlink_paths,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
app.run(host="0.0.0.0", port=args.port, debug=True)
|
app.run(host="0.0.0.0", port=args.port, debug=True)
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
/*
|
/*
|
||||||
Copyright 2015, 2016 OpenMarket Ltd
|
Copyright 2015, 2016 OpenMarket Ltd
|
||||||
|
Copyright 2017 Vector Creations Ltd
|
||||||
|
Copyright 2017 New Vector Ltd
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
|
@ -14,8 +16,6 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||||
import sdk from 'matrix-react-sdk';
|
import sdk from 'matrix-react-sdk';
|
||||||
|
@ -26,26 +26,31 @@ import Analytics from 'matrix-react-sdk/lib/Analytics';
|
||||||
import rate_limited_func from 'matrix-react-sdk/lib/ratelimitedfunc';
|
import rate_limited_func from 'matrix-react-sdk/lib/ratelimitedfunc';
|
||||||
import Modal from 'matrix-react-sdk/lib/Modal';
|
import Modal from 'matrix-react-sdk/lib/Modal';
|
||||||
import AccessibleButton from 'matrix-react-sdk/lib/components/views/elements/AccessibleButton';
|
import AccessibleButton from 'matrix-react-sdk/lib/components/views/elements/AccessibleButton';
|
||||||
|
import { showGroupInviteDialog } from 'matrix-react-sdk/lib/GroupInvite';
|
||||||
|
|
||||||
module.exports = React.createClass({
|
module.exports = React.createClass({
|
||||||
displayName: 'RightPanel',
|
displayName: 'RightPanel',
|
||||||
|
|
||||||
propTypes: {
|
propTypes: {
|
||||||
// TODO: This should not be a prop, it should be received from the RoomViewStore
|
// TODO: We're trying to move away from these being props, but we need to know
|
||||||
|
// whether we should be displaying a room or group member list
|
||||||
roomId: React.PropTypes.string, // if showing panels for a given room, this is set
|
roomId: React.PropTypes.string, // if showing panels for a given room, this is set
|
||||||
|
groupId: React.PropTypes.string, // if showing panels for a given group, this is set
|
||||||
collapsed: React.PropTypes.bool, // currently unused property to request for a minimized view of the panel
|
collapsed: React.PropTypes.bool, // currently unused property to request for a minimized view of the panel
|
||||||
},
|
},
|
||||||
|
|
||||||
Phase: {
|
Phase: {
|
||||||
MemberList: 'MemberList',
|
RoomMemberList: 'RoomMemberList',
|
||||||
|
GroupMemberList: 'GroupMemberList',
|
||||||
FilePanel: 'FilePanel',
|
FilePanel: 'FilePanel',
|
||||||
NotificationPanel: 'NotificationPanel',
|
NotificationPanel: 'NotificationPanel',
|
||||||
MemberInfo: 'MemberInfo',
|
RoomMemberInfo: 'RoomMemberInfo',
|
||||||
|
GroupMemberInfo: 'GroupMemberInfo',
|
||||||
},
|
},
|
||||||
|
|
||||||
componentWillMount: function() {
|
componentWillMount: function() {
|
||||||
this.dispatcherRef = dis.register(this.onAction);
|
this.dispatcherRef = dis.register(this.onAction);
|
||||||
var cli = MatrixClientPeg.get();
|
const cli = MatrixClientPeg.get();
|
||||||
cli.on("RoomState.members", this.onRoomStateMember);
|
cli.on("RoomState.members", this.onRoomStateMember);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -57,14 +62,20 @@ module.exports = React.createClass({
|
||||||
},
|
},
|
||||||
|
|
||||||
getInitialState: function() {
|
getInitialState: function() {
|
||||||
|
if (this.props.groupId) {
|
||||||
return {
|
return {
|
||||||
phase: this.Phase.MemberList
|
phase: this.Phase.GroupMemberList,
|
||||||
};
|
};
|
||||||
|
} else {
|
||||||
|
return {
|
||||||
|
phase: this.Phase.RoomMemberList,
|
||||||
|
};
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
onMemberListButtonClick: function() {
|
onMemberListButtonClick: function() {
|
||||||
Analytics.trackEvent('Right Panel', 'Member List Button', 'click');
|
Analytics.trackEvent('Right Panel', 'Member List Button', 'click');
|
||||||
this.setState({ phase: this.Phase.MemberList });
|
this.setState({ phase: this.Phase.RoomMemberList });
|
||||||
},
|
},
|
||||||
|
|
||||||
onFileListButtonClick: function() {
|
onFileListButtonClick: function() {
|
||||||
|
@ -89,19 +100,23 @@ module.exports = React.createClass({
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// call ChatInviteDialog
|
if (this.state.phase === this.Phase.GroupMemberList) {
|
||||||
|
showGroupInviteDialog(this.props.groupId);
|
||||||
|
} else {
|
||||||
|
// call AddressPickerDialog
|
||||||
dis.dispatch({
|
dis.dispatch({
|
||||||
action: 'view_invite',
|
action: 'view_invite',
|
||||||
roomId: this.props.roomId,
|
roomId: this.props.roomId,
|
||||||
});
|
});
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
onRoomStateMember: function(ev, state, member) {
|
onRoomStateMember: function(ev, state, member) {
|
||||||
// redraw the badge on the membership list
|
// redraw the badge on the membership list
|
||||||
if (this.state.phase == this.Phase.MemberList && member.roomId === this.props.roomId) {
|
if (this.state.phase == this.Phase.RoomMemberList && member.roomId === this.props.roomId) {
|
||||||
this._delayedUpdate();
|
this._delayedUpdate();
|
||||||
}
|
}
|
||||||
else if (this.state.phase === this.Phase.MemberInfo && member.roomId === this.props.roomId &&
|
else if (this.state.phase === this.Phase.RoomMemberInfo && member.roomId === this.props.roomId &&
|
||||||
member.userId === this.state.member.userId) {
|
member.userId === this.state.member.userId) {
|
||||||
// refresh the member info (e.g. new power level)
|
// refresh the member info (e.g. new power level)
|
||||||
this._delayedUpdate();
|
this._delayedUpdate();
|
||||||
|
@ -119,39 +134,55 @@ module.exports = React.createClass({
|
||||||
});
|
});
|
||||||
if (payload.member) {
|
if (payload.member) {
|
||||||
this.setState({
|
this.setState({
|
||||||
phase: this.Phase.MemberInfo,
|
phase: this.Phase.RoomMemberInfo,
|
||||||
|
member: payload.member,
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
if (this.props.roomId) {
|
||||||
|
this.setState({
|
||||||
|
phase: this.Phase.RoomMemberList
|
||||||
|
});
|
||||||
|
} else if (this.props.groupId) {
|
||||||
|
this.setState({
|
||||||
|
phase: this.Phase.GroupMemberList,
|
||||||
|
groupId: payload.groupId,
|
||||||
member: payload.member,
|
member: payload.member,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else {
|
}
|
||||||
|
} else if (payload.action === "view_group") {
|
||||||
this.setState({
|
this.setState({
|
||||||
phase: this.Phase.MemberList
|
phase: this.Phase.GroupMemberList,
|
||||||
|
groupId: payload.groupId,
|
||||||
|
member: null,
|
||||||
});
|
});
|
||||||
}
|
} else if (payload.action === "view_group_user") {
|
||||||
}
|
|
||||||
else if (payload.action === "view_room") {
|
|
||||||
if (this.state.phase === this.Phase.MemberInfo) {
|
|
||||||
this.setState({
|
this.setState({
|
||||||
phase: this.Phase.MemberList
|
phase: this.Phase.GroupMemberInfo,
|
||||||
|
groupId: payload.groupId,
|
||||||
|
member: payload.member,
|
||||||
|
});
|
||||||
|
} else if (payload.action === "view_room") {
|
||||||
|
this.setState({
|
||||||
|
phase: this.Phase.RoomMemberList
|
||||||
});
|
});
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
render: function() {
|
render: function() {
|
||||||
var MemberList = sdk.getComponent('rooms.MemberList');
|
const MemberList = sdk.getComponent('rooms.MemberList');
|
||||||
var NotificationPanel = sdk.getComponent('structures.NotificationPanel');
|
const GroupMemberList = sdk.getComponent('groups.GroupMemberList');
|
||||||
var FilePanel = sdk.getComponent('structures.FilePanel');
|
const NotificationPanel = sdk.getComponent('structures.NotificationPanel');
|
||||||
var TintableSvg = sdk.getComponent("elements.TintableSvg");
|
const FilePanel = sdk.getComponent('structures.FilePanel');
|
||||||
var buttonGroup;
|
const TintableSvg = sdk.getComponent("elements.TintableSvg");
|
||||||
var inviteGroup;
|
let inviteGroup;
|
||||||
var panel;
|
let panel;
|
||||||
|
|
||||||
var filesHighlight;
|
let filesHighlight;
|
||||||
var membersHighlight;
|
let membersHighlight;
|
||||||
var notificationsHighlight;
|
let notificationsHighlight;
|
||||||
if (!this.props.collapsed) {
|
if (!this.props.collapsed) {
|
||||||
if (this.state.phase == this.Phase.MemberList || this.state.phase === this.Phase.MemberInfo) {
|
if (this.state.phase == this.Phase.RoomMemberList || this.state.phase === this.Phase.RoomMemberInfo) {
|
||||||
membersHighlight = <div className="mx_RightPanel_headerButton_highlight"></div>;
|
membersHighlight = <div className="mx_RightPanel_headerButton_highlight"></div>;
|
||||||
}
|
}
|
||||||
else if (this.state.phase == this.Phase.FilePanel) {
|
else if (this.state.phase == this.Phase.FilePanel) {
|
||||||
|
@ -162,11 +193,11 @@ module.exports = React.createClass({
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var membersBadge;
|
let membersBadge;
|
||||||
if ((this.state.phase == this.Phase.MemberList || this.state.phase === this.Phase.MemberInfo) && this.props.roomId) {
|
if ((this.state.phase == this.Phase.RoomMemberList || this.state.phase === this.Phase.RoomMemberInfo) && this.props.roomId) {
|
||||||
var cli = MatrixClientPeg.get();
|
const cli = MatrixClientPeg.get();
|
||||||
var room = cli.getRoom(this.props.roomId);
|
const room = cli.getRoom(this.props.roomId);
|
||||||
var user_is_in_room;
|
let user_is_in_room;
|
||||||
if (room) {
|
if (room) {
|
||||||
membersBadge = room.getJoinedMembers().length;
|
membersBadge = room.getJoinedMembers().length;
|
||||||
user_is_in_room = room.hasMembershipState(
|
user_is_in_room = room.hasMembershipState(
|
||||||
|
@ -186,48 +217,72 @@ module.exports = React.createClass({
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let headerButtons = [];
|
||||||
if (this.props.roomId) {
|
if (this.props.roomId) {
|
||||||
buttonGroup =
|
headerButtons.push(
|
||||||
<div className="mx_RightPanel_headerButtonGroup">
|
<AccessibleButton className="mx_RightPanel_headerButton" key="_membersButton"
|
||||||
<AccessibleButton className="mx_RightPanel_headerButton"
|
|
||||||
title={ _t('Members') } onClick={ this.onMemberListButtonClick }>
|
title={ _t('Members') } onClick={ this.onMemberListButtonClick }>
|
||||||
<div className="mx_RightPanel_headerButton_badge">{ membersBadge ? membersBadge : <span> </span>}</div>
|
<div className="mx_RightPanel_headerButton_badge">{ membersBadge ? membersBadge : <span> </span>}</div>
|
||||||
<TintableSvg src="img/icons-people.svg" width="25" height="25"/>
|
<TintableSvg src="img/icons-people.svg" width="25" height="25"/>
|
||||||
{ membersHighlight }
|
{ membersHighlight }
|
||||||
</AccessibleButton>
|
</AccessibleButton>
|
||||||
|
);
|
||||||
|
headerButtons.push(
|
||||||
<AccessibleButton
|
<AccessibleButton
|
||||||
className="mx_RightPanel_headerButton mx_RightPanel_filebutton"
|
className="mx_RightPanel_headerButton mx_RightPanel_filebutton" key="_filesButton"
|
||||||
title={ _t('Files') } onClick={ this.onFileListButtonClick }>
|
title={ _t('Files') } onClick={ this.onFileListButtonClick }>
|
||||||
<div className="mx_RightPanel_headerButton_badge"> </div>
|
<div className="mx_RightPanel_headerButton_badge"> </div>
|
||||||
<TintableSvg src="img/icons-files.svg" width="25" height="25"/>
|
<TintableSvg src="img/icons-files.svg" width="25" height="25"/>
|
||||||
{ filesHighlight }
|
{ filesHighlight }
|
||||||
</AccessibleButton>
|
</AccessibleButton>
|
||||||
|
);
|
||||||
|
headerButtons.push(
|
||||||
<AccessibleButton
|
<AccessibleButton
|
||||||
className="mx_RightPanel_headerButton mx_RightPanel_notificationbutton"
|
className="mx_RightPanel_headerButton mx_RightPanel_notificationbutton" key="_notifsButton"
|
||||||
title={ _t('Notifications') } onClick={ this.onNotificationListButtonClick }>
|
title={ _t('Notifications') } onClick={ this.onNotificationListButtonClick }>
|
||||||
<div className="mx_RightPanel_headerButton_badge"> </div>
|
<div className="mx_RightPanel_headerButton_badge"> </div>
|
||||||
<TintableSvg src="img/icons-notifications.svg" width="25" height="25"/>
|
<TintableSvg src="img/icons-notifications.svg" width="25" height="25"/>
|
||||||
{ notificationsHighlight }
|
{ notificationsHighlight }
|
||||||
</AccessibleButton>
|
</AccessibleButton>
|
||||||
<div className="mx_RightPanel_headerButton mx_RightPanel_collapsebutton" title={ _t("Hide panel") } onClick={ this.onCollapseClick }>
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.props.roomId || this.props.groupId) {
|
||||||
|
// Hiding the right panel hides it completely and relies on an 'expand' button
|
||||||
|
// being put in the RoomHeader or GroupView header, so only show the minimise
|
||||||
|
// button on these 2 screens or you won't be able to re-expand the panel.
|
||||||
|
headerButtons.push(
|
||||||
|
<div className="mx_RightPanel_headerButton mx_RightPanel_collapsebutton" key="_minimizeButton"
|
||||||
|
title={ _t("Hide panel") } onClick={ this.onCollapseClick }
|
||||||
|
>
|
||||||
<TintableSvg src="img/minimise.svg" width="10" height="16"/>
|
<TintableSvg src="img/minimise.svg" width="10" height="16"/>
|
||||||
</div>
|
</div>
|
||||||
</div>;
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this.props.collapsed) {
|
if (!this.props.collapsed) {
|
||||||
if(this.props.roomId && this.state.phase == this.Phase.MemberList) {
|
if (this.props.roomId && this.state.phase == this.Phase.RoomMemberList) {
|
||||||
panel = <MemberList roomId={this.props.roomId} key={this.props.roomId} />
|
panel = <MemberList roomId={this.props.roomId} key={this.props.roomId} />
|
||||||
}
|
} else if (this.props.groupId && this.state.phase == this.Phase.GroupMemberList) {
|
||||||
else if(this.state.phase == this.Phase.MemberInfo) {
|
panel = <GroupMemberList groupId={this.props.groupId} key={this.props.groupId} />;
|
||||||
var MemberInfo = sdk.getComponent('rooms.MemberInfo');
|
inviteGroup = (
|
||||||
|
<AccessibleButton className="mx_RightPanel_invite" onClick={ this.onInviteButtonClick } >
|
||||||
|
<div className="mx_RightPanel_icon" >
|
||||||
|
<TintableSvg src="img/icon-invite-people.svg" width="35" height="35" />
|
||||||
|
</div>
|
||||||
|
<div className="mx_RightPanel_message">{ _t('Invite to this group') }</div>
|
||||||
|
</AccessibleButton>
|
||||||
|
);
|
||||||
|
} else if (this.state.phase == this.Phase.RoomMemberInfo) {
|
||||||
|
const MemberInfo = sdk.getComponent('rooms.MemberInfo');
|
||||||
panel = <MemberInfo member={this.state.member} key={this.props.roomId || this.state.member.userId} />
|
panel = <MemberInfo member={this.state.member} key={this.props.roomId || this.state.member.userId} />
|
||||||
}
|
} else if (this.state.phase == this.Phase.GroupMemberInfo) {
|
||||||
else if (this.state.phase == this.Phase.NotificationPanel) {
|
const GroupMemberInfo = sdk.getComponent('groups.GroupMemberInfo');
|
||||||
panel = <NotificationPanel />
|
panel = <GroupMemberInfo groupMember={this.state.member} groupId={this.props.groupId} key={this.state.member.user_id} />;
|
||||||
}
|
} else if (this.state.phase == this.Phase.NotificationPanel) {
|
||||||
else if (this.state.phase == this.Phase.FilePanel) {
|
panel = <NotificationPanel />;
|
||||||
panel = <FilePanel roomId={this.props.roomId} />
|
} else if (this.state.phase == this.Phase.FilePanel) {
|
||||||
|
panel = <FilePanel roomId={this.props.roomId} />;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -235,7 +290,7 @@ module.exports = React.createClass({
|
||||||
panel = <div className="mx_RightPanel_blank"></div>;
|
panel = <div className="mx_RightPanel_blank"></div>;
|
||||||
}
|
}
|
||||||
|
|
||||||
var classes = "mx_RightPanel mx_fadable";
|
let classes = "mx_RightPanel mx_fadable";
|
||||||
if (this.props.collapsed) {
|
if (this.props.collapsed) {
|
||||||
classes += " collapsed";
|
classes += " collapsed";
|
||||||
}
|
}
|
||||||
|
@ -243,7 +298,9 @@ module.exports = React.createClass({
|
||||||
return (
|
return (
|
||||||
<aside className={classes} style={{ opacity: this.props.opacity }}>
|
<aside className={classes} style={{ opacity: this.props.opacity }}>
|
||||||
<div className="mx_RightPanel_header">
|
<div className="mx_RightPanel_header">
|
||||||
{ buttonGroup }
|
<div className="mx_RightPanel_headerButtonGroup">
|
||||||
|
{headerButtons}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{ panel }
|
{ panel }
|
||||||
<div className="mx_RightPanel_footer">
|
<div className="mx_RightPanel_footer">
|
||||||
|
|
|
@ -88,6 +88,7 @@ var RoomSubList = React.createClass({
|
||||||
searchFilter: React.PropTypes.string,
|
searchFilter: React.PropTypes.string,
|
||||||
emptyContent: React.PropTypes.node, // content shown if the list is empty
|
emptyContent: React.PropTypes.node, // content shown if the list is empty
|
||||||
headerItems: React.PropTypes.node, // content shown in the sublist header
|
headerItems: React.PropTypes.node, // content shown in the sublist header
|
||||||
|
extraTiles: React.PropTypes.arrayOf(React.PropTypes.node), // extra elements added beneath tiles
|
||||||
},
|
},
|
||||||
|
|
||||||
getInitialState: function() {
|
getInitialState: function() {
|
||||||
|
@ -102,6 +103,7 @@ var RoomSubList = React.createClass({
|
||||||
return {
|
return {
|
||||||
onHeaderClick: function() {}, // NOP
|
onHeaderClick: function() {}, // NOP
|
||||||
onShowMoreRooms: function() {}, // NOP
|
onShowMoreRooms: function() {}, // NOP
|
||||||
|
extraTiles: [],
|
||||||
isInvite: false,
|
isInvite: false,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
@ -534,13 +536,14 @@ var RoomSubList = React.createClass({
|
||||||
var label = this.props.collapsed ? null : this.props.label;
|
var label = this.props.collapsed ? null : this.props.label;
|
||||||
|
|
||||||
let content;
|
let content;
|
||||||
if (this.state.sortedList.length == 0 && !this.props.searchFilter) {
|
if (this.state.sortedList.length == 0 && !this.props.searchFilter && !this.props.extraTiles) {
|
||||||
content = this.props.emptyContent;
|
content = this.props.emptyContent;
|
||||||
} else {
|
} else {
|
||||||
content = this.makeRoomTiles();
|
content = this.makeRoomTiles();
|
||||||
|
content.push(...this.props.extraTiles);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.state.sortedList.length > 0 || this.props.editable) {
|
if (this.state.sortedList.length > 0 || this.props.extraTiles.length > 0 || this.props.editable) {
|
||||||
var subList;
|
var subList;
|
||||||
var classes = "mx_RoomSubList";
|
var classes = "mx_RoomSubList";
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
/*
|
||||||
|
Copyright 2017 Michael Telatynski <7t3chguy@gmail.com>
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
import React from 'react';
|
||||||
|
import PropTypes from 'prop-types';
|
||||||
|
|
||||||
|
export default class GenericTextContextMenu extends React.Component {
|
||||||
|
static PropTypes = {
|
||||||
|
message: PropTypes.string.isRequired,
|
||||||
|
};
|
||||||
|
|
||||||
|
render() {
|
||||||
|
return <div>{ this.props.message }</div>;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,350 @@
|
||||||
|
/*
|
||||||
|
Copyright 2017 Michael Telatynski <7t3chguy@gmail.com>
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import React from 'react';
|
||||||
|
import sdk from 'matrix-react-sdk';
|
||||||
|
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||||
|
import MatrixClientPeg from 'matrix-react-sdk/lib/MatrixClientPeg';
|
||||||
|
|
||||||
|
class SendCustomEvent extends React.Component {
|
||||||
|
static propTypes = {
|
||||||
|
roomId: React.PropTypes.string.isRequired,
|
||||||
|
onBack: React.PropTypes.func.isRequired,
|
||||||
|
|
||||||
|
eventType: React.PropTypes.string.isRequired,
|
||||||
|
evContent: React.PropTypes.string.isRequired,
|
||||||
|
};
|
||||||
|
|
||||||
|
static defaultProps = {
|
||||||
|
eventType: '',
|
||||||
|
evContent: '{\n\n}',
|
||||||
|
};
|
||||||
|
|
||||||
|
constructor(props, context) {
|
||||||
|
super(props, context);
|
||||||
|
this._send = this._send.bind(this);
|
||||||
|
this.onBack = this.onBack.bind(this);
|
||||||
|
this._onChange = this._onChange.bind(this);
|
||||||
|
|
||||||
|
this.state = {
|
||||||
|
message: null,
|
||||||
|
input_eventType: this.props.eventType,
|
||||||
|
input_evContent: this.props.evContent,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
onBack() {
|
||||||
|
if (this.state.message) {
|
||||||
|
this.setState({ message: null });
|
||||||
|
} else {
|
||||||
|
this.props.onBack();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_buttons() {
|
||||||
|
return <div className="mx_Dialog_buttons">
|
||||||
|
<button onClick={this.onBack}>{ _t('Back') }</button>
|
||||||
|
{!this.state.message && <button onClick={this._send}>{ _t('Send') }</button>}
|
||||||
|
</div>;
|
||||||
|
}
|
||||||
|
|
||||||
|
send(content) {
|
||||||
|
return MatrixClientPeg.get().sendEvent(this.props.roomId, this.state.input_eventType, content);
|
||||||
|
}
|
||||||
|
|
||||||
|
async _send() {
|
||||||
|
if (this.state.input_eventType === '') {
|
||||||
|
this.setState({ message: _t('You must specify an event type!') });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let message;
|
||||||
|
try {
|
||||||
|
const content = JSON.parse(this.state.input_evContent);
|
||||||
|
await this.send(content);
|
||||||
|
message = _t('Event sent!');
|
||||||
|
} catch (e) {
|
||||||
|
message = _t('Failed to send custom event.') + ' (' + e.toString() + ')';
|
||||||
|
}
|
||||||
|
this.setState({ message });
|
||||||
|
}
|
||||||
|
|
||||||
|
_additionalFields() {
|
||||||
|
return <div/>;
|
||||||
|
}
|
||||||
|
|
||||||
|
_onChange(e) {
|
||||||
|
this.setState({[`input_${e.target.id}`]: e.target.value});
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
if (this.state.message) {
|
||||||
|
return <div>
|
||||||
|
<div className="mx_Dialog_content">
|
||||||
|
{this.state.message}
|
||||||
|
</div>
|
||||||
|
{this._buttons()}
|
||||||
|
</div>;
|
||||||
|
}
|
||||||
|
|
||||||
|
return <div>
|
||||||
|
<div className="mx_Dialog_content">
|
||||||
|
{this._additionalFields()}
|
||||||
|
<div className="mx_TextInputDialog_label">
|
||||||
|
<label htmlFor="eventType"> { _t('Event Type') } </label>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<input id="eventType" onChange={this._onChange} value={this.state.input_eventType} className="mx_TextInputDialog_input" size="64" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="mx_TextInputDialog_label">
|
||||||
|
<label htmlFor="evContent"> { _t('Event Content') } </label>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<textarea id="evContent" onChange={this._onChange} value={this.state.input_evContent} className="mx_TextInputDialog_input" cols="63" rows="5" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{this._buttons()}
|
||||||
|
</div>;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class SendCustomStateEvent extends SendCustomEvent {
|
||||||
|
static propTypes = {
|
||||||
|
roomId: React.PropTypes.string.isRequired,
|
||||||
|
onBack: React.PropTypes.func.isRequired,
|
||||||
|
|
||||||
|
eventType: React.PropTypes.string.isRequired,
|
||||||
|
evContent: React.PropTypes.string.isRequired,
|
||||||
|
stateKey: React.PropTypes.string.isRequired,
|
||||||
|
};
|
||||||
|
|
||||||
|
static defaultProps = {
|
||||||
|
eventType: '',
|
||||||
|
evContent: '{\n\n}',
|
||||||
|
stateKey: '',
|
||||||
|
};
|
||||||
|
|
||||||
|
constructor(props, context) {
|
||||||
|
super(props, context);
|
||||||
|
this.state['input_stateKey'] = this.props.stateKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
send(content) {
|
||||||
|
const cli = MatrixClientPeg.get();
|
||||||
|
return cli.sendStateEvent(this.props.roomId, this.state.input_eventType, content, this.state.input_stateKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
_additionalFields() {
|
||||||
|
return <div>
|
||||||
|
<div className="mx_TextInputDialog_label">
|
||||||
|
<label htmlFor="stateKey"> { _t('State Key') } </label>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<input id="stateKey" onChange={this._onChange} value={this.state.input_stateKey} className="mx_TextInputDialog_input" size="64" />
|
||||||
|
</div>
|
||||||
|
</div>;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class RoomStateExplorer extends React.Component {
|
||||||
|
static propTypes = {
|
||||||
|
setMode: React.PropTypes.func.isRequired,
|
||||||
|
roomId: React.PropTypes.string.isRequired,
|
||||||
|
onBack: React.PropTypes.func.isRequired,
|
||||||
|
};
|
||||||
|
|
||||||
|
constructor(props, context) {
|
||||||
|
super(props, context);
|
||||||
|
|
||||||
|
const room = MatrixClientPeg.get().getRoom(this.props.roomId);
|
||||||
|
this.roomStateEvents = room.currentState.events;
|
||||||
|
|
||||||
|
this.onBack = this.onBack.bind(this);
|
||||||
|
this.editEv = this.editEv.bind(this);
|
||||||
|
this.onQuery = this.onQuery.bind(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
state = {
|
||||||
|
query: '',
|
||||||
|
eventType: null,
|
||||||
|
event: null,
|
||||||
|
};
|
||||||
|
|
||||||
|
browseEventType(eventType) {
|
||||||
|
return () => {
|
||||||
|
this.setState({ eventType });
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
onViewSourceClick(event) {
|
||||||
|
return () => {
|
||||||
|
this.setState({ event });
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
onBack() {
|
||||||
|
if (this.state.event) {
|
||||||
|
this.setState({ event: null });
|
||||||
|
} else if (this.state.eventType) {
|
||||||
|
this.setState({ eventType: null });
|
||||||
|
} else {
|
||||||
|
this.props.onBack();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
editEv() {
|
||||||
|
const ev = this.state.event;
|
||||||
|
this.props.setMode(SendCustomStateEvent, {
|
||||||
|
eventType: ev.getType(),
|
||||||
|
evContent: JSON.stringify(ev.getContent(), null, '\t'),
|
||||||
|
stateKey: ev.getStateKey(),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
onQuery(ev) {
|
||||||
|
this.setState({ query: ev.target.value });
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
if (this.state.event) {
|
||||||
|
return <div className="mx_ViewSource">
|
||||||
|
<div className="mx_Dialog_content">
|
||||||
|
<pre>{JSON.stringify(this.state.event.event, null, 2)}</pre>
|
||||||
|
</div>
|
||||||
|
<div className="mx_Dialog_buttons">
|
||||||
|
<button onClick={this.onBack}>{ _t('Back') }</button>
|
||||||
|
<button onClick={this.editEv}>{ _t('Edit') }</button>
|
||||||
|
</div>
|
||||||
|
</div>;
|
||||||
|
}
|
||||||
|
|
||||||
|
const rows = [];
|
||||||
|
|
||||||
|
if (this.state.eventType === null) {
|
||||||
|
Object.keys(this.roomStateEvents).forEach((evType) => {
|
||||||
|
// Skip this entry if does not contain search query
|
||||||
|
if (this.state.query && !evType.includes(this.state.query)) return;
|
||||||
|
|
||||||
|
const stateGroup = this.roomStateEvents[evType];
|
||||||
|
const stateKeys = Object.keys(stateGroup);
|
||||||
|
|
||||||
|
let onClickFn;
|
||||||
|
if (stateKeys.length > 1) {
|
||||||
|
onClickFn = this.browseEventType(evType);
|
||||||
|
} else if (stateKeys.length === 1) {
|
||||||
|
onClickFn = this.onViewSourceClick(stateGroup[stateKeys[0]]);
|
||||||
|
}
|
||||||
|
|
||||||
|
rows.push(<button className="mx_DevTools_RoomStateExplorer_button" key={evType} onClick={onClickFn}>
|
||||||
|
{ evType }
|
||||||
|
</button>);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
const evType = this.state.eventType;
|
||||||
|
const stateGroup = this.roomStateEvents[evType];
|
||||||
|
Object.keys(stateGroup).forEach((stateKey) => {
|
||||||
|
// Skip this entry if does not contain search query
|
||||||
|
if (this.state.query && !stateKey.includes(this.state.query)) return;
|
||||||
|
|
||||||
|
const ev = stateGroup[stateKey];
|
||||||
|
rows.push(<button className="mx_DevTools_RoomStateExplorer_button" key={stateKey}
|
||||||
|
onClick={this.onViewSourceClick(ev)}>
|
||||||
|
{ stateKey }
|
||||||
|
</button>);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return <div>
|
||||||
|
<div className="mx_Dialog_content">
|
||||||
|
<input onChange={this.onQuery} placeholder={_t('Filter results')} size="64" className="mx_TextInputDialog_input mx_DevTools_RoomStateExplorer_query" value={this.state.query} />
|
||||||
|
{rows}
|
||||||
|
</div>
|
||||||
|
<div className="mx_Dialog_buttons">
|
||||||
|
<button onClick={this.onBack}>{ _t('Back') }</button>
|
||||||
|
</div>
|
||||||
|
</div>;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default class DevtoolsDialog extends React.Component {
|
||||||
|
static propTypes = {
|
||||||
|
roomId: React.PropTypes.string.isRequired,
|
||||||
|
onFinished: React.PropTypes.func.isRequired,
|
||||||
|
};
|
||||||
|
|
||||||
|
state = {
|
||||||
|
mode: null,
|
||||||
|
modeArgs: {},
|
||||||
|
};
|
||||||
|
|
||||||
|
constructor(props, context) {
|
||||||
|
super(props, context);
|
||||||
|
this.onBack = this.onBack.bind(this);
|
||||||
|
this.setMode = this.setMode.bind(this);
|
||||||
|
this.onCancel = this.onCancel.bind(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
componentWillUnmount() {
|
||||||
|
this._unmounted = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
_setMode(mode) {
|
||||||
|
return () => {
|
||||||
|
this.setMode(mode);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
setMode(mode, modeArgs={}) {
|
||||||
|
this.setState({ mode, modeArgs });
|
||||||
|
}
|
||||||
|
|
||||||
|
onBack() {
|
||||||
|
this.setState({ mode: null });
|
||||||
|
}
|
||||||
|
|
||||||
|
onCancel() {
|
||||||
|
this.props.onFinished(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
let body;
|
||||||
|
|
||||||
|
if (this.state.mode) {
|
||||||
|
body =
|
||||||
|
<this.state.mode {...this.props} {...this.state.modeArgs} onBack={this.onBack} setMode={this.setMode} />;
|
||||||
|
} else {
|
||||||
|
body = <div>
|
||||||
|
<div className="mx_Dialog_content">
|
||||||
|
<button onClick={this._setMode(SendCustomEvent)}>{ _t('Send Custom Event') }</button>
|
||||||
|
<button onClick={this._setMode(SendCustomStateEvent)}>{ _t('Send Custom State Event') }</button>
|
||||||
|
<button onClick={this._setMode(RoomStateExplorer)}>{ _t('Explore Room State') }</button>
|
||||||
|
</div>
|
||||||
|
<div className="mx_Dialog_buttons">
|
||||||
|
<button onClick={this.onCancel}>{ _t('Cancel') }</button>
|
||||||
|
</div>
|
||||||
|
</div>;
|
||||||
|
}
|
||||||
|
|
||||||
|
const BaseDialog = sdk.getComponent('views.dialogs.BaseDialog');
|
||||||
|
return (
|
||||||
|
<BaseDialog className="mx_QuestionDialog" onFinished={this.props.onFinished} title={_t('Developer Tools')}>
|
||||||
|
<div>Room ID: { this.props.roomId }</div>
|
||||||
|
{ body }
|
||||||
|
</BaseDialog>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -24,7 +24,7 @@
|
||||||
"Couldn't find a matching Matrix room": "لا يمكن إيجاد غرفة مايتركس متطابقة",
|
"Couldn't find a matching Matrix room": "لا يمكن إيجاد غرفة مايتركس متطابقة",
|
||||||
"Custom Server Options": "إعدادات السيرفر خاصة",
|
"Custom Server Options": "إعدادات السيرفر خاصة",
|
||||||
"delete the alias.": "إلغاء المُعرف.",
|
"delete the alias.": "إلغاء المُعرف.",
|
||||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "إلغاء مُعرف الغرفة %(alias) وحذف %(name) من الدليل؟",
|
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "إلغاء مُعرف الغرفة %(alias)s وحذف %(name)s من الدليل؟",
|
||||||
"Describe your problem here.": "صِف مشكلتك هنا.",
|
"Describe your problem here.": "صِف مشكلتك هنا.",
|
||||||
"Direct Chat": "دردشة مباشرة",
|
"Direct Chat": "دردشة مباشرة",
|
||||||
"Directory": "دليل",
|
"Directory": "دليل",
|
||||||
|
|
|
@ -0,0 +1,116 @@
|
||||||
|
{
|
||||||
|
"A new version of Riot is available.": "Hi ha una nova versió del Riot disponible.",
|
||||||
|
"All messages": "Tots els missatges",
|
||||||
|
"Cancel": "Cancel·la",
|
||||||
|
"Close": "Tanca",
|
||||||
|
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s a %(osName)s",
|
||||||
|
"Failed to change password. Is your password correct?": "Hi ha hagut un error al canviar la vostra contrasenya. És correcte la vostra contrasenya?",
|
||||||
|
"Continue": "Continua",
|
||||||
|
"All Rooms": "Totes les sales",
|
||||||
|
"Create new room": "Crea una nova sala",
|
||||||
|
"Couldn't find a matching Matrix room": "No s'ha pogut trobar una sala de Matrix que coincideixi",
|
||||||
|
"Failed to add tag %(tagName)s to room": "No s'ha pogut afegir l'etiqueta %(tagName)s a la sala",
|
||||||
|
"Failed to forget room %(errCode)s": "No s'ha pogut oblidar la sala %(errCode)s",
|
||||||
|
"Failed to get public room list": "No s'ha pogut obtenir el llistat de sales públiques",
|
||||||
|
"Failed to join the room": "No s'ha pogut unir a la sala",
|
||||||
|
"Failed to remove tag %(tagName)s from room": "No s'ha pogut esborrar l'etiqueta %(tagName)s de la sala",
|
||||||
|
"Filter room names": "Filtra els noms de les sales",
|
||||||
|
"Couldn't load home page": "No s'ha pogut carregar la pàgina d'inici",
|
||||||
|
"All messages (loud)": "Tots els missatges (sorollós)",
|
||||||
|
"Mentions only": "Només mencions",
|
||||||
|
"Mute": "Silenciat",
|
||||||
|
"Direct Chat": "Xat directe",
|
||||||
|
"Directory": "Directori",
|
||||||
|
"Failed to set direct chat tag": "No s'ha pogut establir l'etiqueta del xat directe",
|
||||||
|
"Room directory": "Directori de sales",
|
||||||
|
"Start chat": "Inicia un xat",
|
||||||
|
"Invite to this room": "Convida a aquesta sala",
|
||||||
|
"No rooms to show": "No hi ha sales a mostrar",
|
||||||
|
"Riot does not know how to join a room on this network": "El Riot no sap com unir-se a una sala en aquesta xarxa",
|
||||||
|
"Room not found": "No s'ha trobat la sala",
|
||||||
|
"Unnamed room": "Sala sense nom",
|
||||||
|
"#example": "#exemple",
|
||||||
|
"Settings": "Paràmetres",
|
||||||
|
"Failed to change settings": "No s'han pogut modificar els paràmetres",
|
||||||
|
"Enable audible notifications in web client": "Habilita les notificacions d'àudio al client web",
|
||||||
|
"Enable desktop notifications": "Habilita les notificacions d'escriptori",
|
||||||
|
"Enable email notifications": "Habilita les notificacions per correu electrònic",
|
||||||
|
"Enable notifications for this account": "Habilita les notificacions per aquest compte",
|
||||||
|
"Low Priority": "Baixa prioritat",
|
||||||
|
"Members": "Membres",
|
||||||
|
"Changelog": "Registre de canvis",
|
||||||
|
"Describe your problem here.": "Descriu aquí el teu problema.",
|
||||||
|
"Download this file": "Descarrega aquest fitxer",
|
||||||
|
"Enable them now": "Habilita-ho ara",
|
||||||
|
"Error": "Error",
|
||||||
|
"Favourite": "Favorit",
|
||||||
|
"Files": "Fitxers",
|
||||||
|
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "També funcionen el <a href=\"http://apple.com/safari\">Safari</a> i l'<a href=\"http://opera.com\">Opera</a>.",
|
||||||
|
"Add an email address above to configure email notifications": "Afegiu una adreça de correu electrònic més amunt per configurar les notificacions",
|
||||||
|
"Advanced notification settings": "Paràmetres avançats de notificacions",
|
||||||
|
"All notifications are currently disabled for all targets.": "Actualment totes les notificacions estan inhabilitades per a tots els objectius.",
|
||||||
|
"An error occurred whilst saving your email notification preferences.": "Hi ha hagut un error al desar les vostres preferències de notificació per correu electrònic.",
|
||||||
|
"Bug report sent": "S'ha enviat l'informe d'error",
|
||||||
|
"Call invitation": "Invitació a la trucada",
|
||||||
|
"Can't update user notification settings": "No es poden actualitzar els paràmetres de notificació de l'usuari",
|
||||||
|
"Collecting app version information": "Recol·lectant la informació de la versió de l'aplicació",
|
||||||
|
"Collecting logs": "Recol·lectant els registres",
|
||||||
|
"Custom Server Options": "Opcions de servidor personalitzat",
|
||||||
|
"Dismiss": "Omet",
|
||||||
|
"Enter keywords separated by a comma:": "Introdueix paraules clau separades per una coma:",
|
||||||
|
"Login": "Inicia sessió",
|
||||||
|
"Leave": "Abandona",
|
||||||
|
"Messages containing <span>keywords</span>": "Missatges que contenen <span>paraules clau</span>",
|
||||||
|
"Messages containing my user name": "Missatges que contenen el meu nom d'usuari",
|
||||||
|
"Messages in group chats": "Missatges a xats de grup",
|
||||||
|
"Messages containing my display name": "Missatges que contenen el meu nom",
|
||||||
|
"Messages in one-to-one chats": "Missatges en xats un a un",
|
||||||
|
"Messages sent by bot": "Missatges enviats pel bot",
|
||||||
|
"more": "més",
|
||||||
|
"Noisy": "Sorollós",
|
||||||
|
"Notification targets": "Objectius de notificació",
|
||||||
|
"Notifications": "Notificacions",
|
||||||
|
"Notify me for anything else": "Notifica'm per qualsevol altra cosa",
|
||||||
|
"Notify for all other messages/rooms": "Notifica per a tots els altres missatges/sales",
|
||||||
|
"Off": "Apagat",
|
||||||
|
"On": "Engegat",
|
||||||
|
"Permalink": "Enllaç permanent",
|
||||||
|
"Remove": "Elimina",
|
||||||
|
"remove %(name)s from the directory.": "elimina %(name)s del directori.",
|
||||||
|
"Remove from Directory": "Elimina del directori",
|
||||||
|
"Report a bug": "Informa d'una errada",
|
||||||
|
"Resend": "Reenvia",
|
||||||
|
"Search…": "Cerca…",
|
||||||
|
"Send": "Envia",
|
||||||
|
"Source URL": "URL origen",
|
||||||
|
"The server may be unavailable or overloaded": "El servidor pot no estar disponible o sobrecarregat",
|
||||||
|
"This Room": "Aquesta sala",
|
||||||
|
" to room": " a la sala",
|
||||||
|
"Unavailable": "No disponible",
|
||||||
|
"Unknown device": "Dispositiu desconegut",
|
||||||
|
"unknown error code": "codi d'error desconegut",
|
||||||
|
"What's New": "Novetats",
|
||||||
|
"What's new?": "Què hi ha de nou?",
|
||||||
|
"Waiting for response from server": "Esperant una resposta del servidor",
|
||||||
|
"You cannot delete this image. (%(code)s)": "No podeu eliminar aquesta imatge. (%(code)s)",
|
||||||
|
"You cannot delete this message. (%(code)s)": "No podeu eliminar aquest missatge. (%(code)s)",
|
||||||
|
"You are not receiving desktop notifications": "No esteu rebent notificacions d'escriptori",
|
||||||
|
"Thank you!": "Gràcies!",
|
||||||
|
"Sunday": "Diumenge",
|
||||||
|
"Monday": "Dilluns",
|
||||||
|
"Tuesday": "Dimarts",
|
||||||
|
"Wednesday": "Dimecres",
|
||||||
|
"Thursday": "Dijous",
|
||||||
|
"Friday": "Divendres",
|
||||||
|
"Saturday": "Dissabte",
|
||||||
|
"Today": "Avui",
|
||||||
|
"Yesterday": "Ahir",
|
||||||
|
"OK": "D'acord",
|
||||||
|
"Warning": "Advertència",
|
||||||
|
"Checking for an update...": "Comprovant si hi ha actualitzacions...",
|
||||||
|
"No update available.": "No hi ha cap actualització disponible.",
|
||||||
|
"Downloading update...": "Descarregant l'actualització...",
|
||||||
|
"Welcome page": "Pàgina de benvinguda",
|
||||||
|
"Welcome to Riot.im": "Benvingut a Riot.im",
|
||||||
|
"Chat with Riot Bot": "Conversa amb el Bot de Riot"
|
||||||
|
}
|
|
@ -30,7 +30,7 @@
|
||||||
"Error": "Chyba",
|
"Error": "Chyba",
|
||||||
"Failed to change settings": "Nepodařilo se změnit nastavení",
|
"Failed to change settings": "Nepodařilo se změnit nastavení",
|
||||||
"Failed to get public room list": "Nepodařilo se získat seznam veřejných místností",
|
"Failed to get public room list": "Nepodařilo se získat seznam veřejných místností",
|
||||||
"Failed to join the room": "Nepodařilo se vstoupit do místnosti",
|
"Failed to join the room": "Vstup do místnosti se nezdařil",
|
||||||
"Favourite": "V oblíbených",
|
"Favourite": "V oblíbených",
|
||||||
"Guests can join": "Hosté mohou vstoupit",
|
"Guests can join": "Hosté mohou vstoupit",
|
||||||
"Guest users can't invite users. Please register to invite.": "Hosté nemohou zvát uživatele. Zaregistrujte se a budete moci zvát.",
|
"Guest users can't invite users. Please register to invite.": "Hosté nemohou zvát uživatele. Zaregistrujte se a budete moci zvát.",
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
"All Rooms": "All Rooms",
|
"All Rooms": "All Rooms",
|
||||||
"All notifications are currently disabled for all targets.": "All notifications are currently disabled for all targets.",
|
"All notifications are currently disabled for all targets.": "All notifications are currently disabled for all targets.",
|
||||||
"An error occurred whilst saving your email notification preferences.": "An error occurred whilst saving your email notification preferences.",
|
"An error occurred whilst saving your email notification preferences.": "An error occurred whilst saving your email notification preferences.",
|
||||||
|
"Back": "Back",
|
||||||
"Bug report sent": "Bug report sent",
|
"Bug report sent": "Bug report sent",
|
||||||
"Call invitation": "Call invitation",
|
"Call invitation": "Call invitation",
|
||||||
"Cancel": "Cancel",
|
"Cancel": "Cancel",
|
||||||
|
@ -26,6 +27,7 @@
|
||||||
"delete the alias.": "delete the alias.",
|
"delete the alias.": "delete the alias.",
|
||||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Delete the room alias %(alias)s and remove %(name)s from the directory?",
|
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Delete the room alias %(alias)s and remove %(name)s from the directory?",
|
||||||
"Describe your problem here.": "Describe your problem here.",
|
"Describe your problem here.": "Describe your problem here.",
|
||||||
|
"Developer Tools": "Developer Tools",
|
||||||
"Direct Chat": "Direct Chat",
|
"Direct Chat": "Direct Chat",
|
||||||
"Directory": "Directory",
|
"Directory": "Directory",
|
||||||
"Dismiss": "Dismiss",
|
"Dismiss": "Dismiss",
|
||||||
|
@ -50,12 +52,14 @@
|
||||||
"Failed to get public room list": "Failed to get public room list",
|
"Failed to get public room list": "Failed to get public room list",
|
||||||
"Failed to join the room": "Failed to join the room",
|
"Failed to join the room": "Failed to join the room",
|
||||||
"Failed to remove tag %(tagName)s from room": "Failed to remove tag %(tagName)s from room",
|
"Failed to remove tag %(tagName)s from room": "Failed to remove tag %(tagName)s from room",
|
||||||
|
"Failed to send custom event.": "Failed to send custom event.",
|
||||||
"Failed to send report: ": "Failed to send report: ",
|
"Failed to send report: ": "Failed to send report: ",
|
||||||
"Failed to set direct chat tag": "Failed to set direct chat tag",
|
"Failed to set direct chat tag": "Failed to set direct chat tag",
|
||||||
"Failed to set Direct Message status of room": "Failed to set Direct Message status of room",
|
"Failed to set Direct Message status of room": "Failed to set Direct Message status of room",
|
||||||
"Favourite": "Favourite",
|
"Favourite": "Favourite",
|
||||||
"Fetching third party location failed": "Fetching third party location failed",
|
"Fetching third party location failed": "Fetching third party location failed",
|
||||||
"Files": "Files",
|
"Files": "Files",
|
||||||
|
"Filter results": "Filter results",
|
||||||
"Filter room names": "Filter room names",
|
"Filter room names": "Filter room names",
|
||||||
"Forget": "Forget",
|
"Forget": "Forget",
|
||||||
"Forward Message": "Forward Message",
|
"Forward Message": "Forward Message",
|
||||||
|
@ -117,6 +121,9 @@
|
||||||
"Search for a room": "Search for a room",
|
"Search for a room": "Search for a room",
|
||||||
"Send": "Send",
|
"Send": "Send",
|
||||||
"Send logs": "Send logs",
|
"Send logs": "Send logs",
|
||||||
|
"Send Custom Event": "Send Custom Event",
|
||||||
|
"Send Custom State Event": "Send Custom State Event",
|
||||||
|
"Explore Room State": "Explore Room State",
|
||||||
"Settings": "Settings",
|
"Settings": "Settings",
|
||||||
"Source URL": "Source URL",
|
"Source URL": "Source URL",
|
||||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Sorry, your browser is <b>not</b> able to run Riot.",
|
"Sorry, your browser is <b>not</b> able to run Riot.": "Sorry, your browser is <b>not</b> able to run Riot.",
|
||||||
|
@ -150,6 +157,7 @@
|
||||||
"You are not receiving desktop notifications": "You are not receiving desktop notifications",
|
"You are not receiving desktop notifications": "You are not receiving desktop notifications",
|
||||||
"You are Rioting as a guest. <a>Register</a> or <a>sign in</a> to access more rooms and features!": "You are Rioting as a guest. <a>Register</a> or <a>sign in</a> to access more rooms and features!",
|
"You are Rioting as a guest. <a>Register</a> or <a>sign in</a> to access more rooms and features!": "You are Rioting as a guest. <a>Register</a> or <a>sign in</a> to access more rooms and features!",
|
||||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply",
|
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply",
|
||||||
|
"You must specify an event type!": "You must specify an event type!",
|
||||||
"Thank you!": "Thank you!",
|
"Thank you!": "Thank you!",
|
||||||
"Sunday": "Sunday",
|
"Sunday": "Sunday",
|
||||||
"Monday": "Monday",
|
"Monday": "Monday",
|
||||||
|
@ -164,6 +172,10 @@
|
||||||
"Warning": "Warning",
|
"Warning": "Warning",
|
||||||
"Checking for an update...": "Checking for an update...",
|
"Checking for an update...": "Checking for an update...",
|
||||||
"Error encountered (%(errorDetail)s).": "Error encountered (%(errorDetail)s).",
|
"Error encountered (%(errorDetail)s).": "Error encountered (%(errorDetail)s).",
|
||||||
|
"Event sent!": "Event sent!",
|
||||||
|
"Event Type": "Event Type",
|
||||||
|
"Event Content": "Event Content",
|
||||||
|
"State Key": "State Key",
|
||||||
"No update available.": "No update available.",
|
"No update available.": "No update available.",
|
||||||
"Downloading update...": "Downloading update...",
|
"Downloading update...": "Downloading update...",
|
||||||
"You need to be using HTTPS to place a screen-sharing call.": "You need to be using HTTPS to place a screen-sharing call.",
|
"You need to be using HTTPS to place a screen-sharing call.": "You need to be using HTTPS to place a screen-sharing call.",
|
||||||
|
@ -207,5 +219,6 @@
|
||||||
"Remember, you can always set an email address in user settings if you change your mind.": "Remember, you can always set an email address in user settings if you change your mind.",
|
"Remember, you can always set an email address in user settings if you change your mind.": "Remember, you can always set an email address in user settings if you change your mind.",
|
||||||
"To return to your account in future you need to <u>set a password</u>": "To return to your account in future you need to <u>set a password</u>",
|
"To return to your account in future you need to <u>set a password</u>": "To return to your account in future you need to <u>set a password</u>",
|
||||||
"Set Password": "Set Password",
|
"Set Password": "Set Password",
|
||||||
"Couldn't load home page": "Couldn't load home page"
|
"Couldn't load home page": "Couldn't load home page",
|
||||||
|
"Invite to this group": "Invite to this group"
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,14 +5,14 @@
|
||||||
"An error occurred whilst saving your email notification preferences.": "Se ha producido un error al guardar las preferencias de notificación por email.",
|
"An error occurred whilst saving your email notification preferences.": "Se ha producido un error al guardar las preferencias de notificación por email.",
|
||||||
"Call invitation": "Invitación a la llamada",
|
"Call invitation": "Invitación a la llamada",
|
||||||
"Cancel Sending": "Cancelar envío",
|
"Cancel Sending": "Cancelar envío",
|
||||||
"Can't update user notification settings": "No se puede actualizar la configuración de notificación de usuario",
|
"Can't update user notification settings": "No se puede actualizar la configuración de notificaciones del usuario",
|
||||||
"Close": "Cerrar",
|
"Close": "Cerrar",
|
||||||
"Create new room": "Crear nueva sala",
|
"Create new room": "Crear nueva sala",
|
||||||
"Couldn't find a matching Matrix room": "No se encontró una sala Matrix que coincidiera",
|
"Couldn't find a matching Matrix room": "No se encontró una sala Matrix que coincidiera",
|
||||||
"Custom Server Options": "Opciones de Servidor Personalizado",
|
"Custom Server Options": "Opciones de Servidor Personalizado",
|
||||||
"customServer_text": "Puedes utilizar las opciones de servidor personalizadas para iniciar sesión en otros servidores Matrix especificando una URL de Home server distinta.<br/>Esto te permite usar Riot con una cuenta Matrix existente en un Home server distinto.<br/><br/>También puedes configurar un servidor de identidad personalizado, pero no podrás invitar usuarios por dirección de email, ni ser invitado por email por ti mismo.",
|
"customServer_text": "Puedes utilizar las opciones de servidor personalizadas para iniciar sesión en otros servidores Matrix especificando una URL de Home server distinta.<br/>Esto te permite usar Riot con una cuenta Matrix existente en un Home server distinto.<br/><br/>También puedes configurar un servidor de identidad personalizado, pero no podrás ni invitar usuarios ni ser invitado a través de tu dirección de correo electrónico.",
|
||||||
"delete the alias.": "borrar el alias.",
|
"delete the alias.": "borrar el alias.",
|
||||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "¿Borrar la sala alias %(alias)s y retirar %(name)s del directorio?",
|
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "¿Borrar el alias de la sala %(alias)s y eliminar %(name)s del directorio?",
|
||||||
"Direct Chat": "Conversación directa",
|
"Direct Chat": "Conversación directa",
|
||||||
"Directory": "Directorio",
|
"Directory": "Directorio",
|
||||||
"Download this file": "Descargar este archivo",
|
"Download this file": "Descargar este archivo",
|
||||||
|
@ -30,9 +30,9 @@
|
||||||
"Failed to change settings": "Error al cambiar la configuración",
|
"Failed to change settings": "Error al cambiar la configuración",
|
||||||
"Failed to forget room %(errCode)s": "Falló al olvidar la sala %(errCode)s",
|
"Failed to forget room %(errCode)s": "Falló al olvidar la sala %(errCode)s",
|
||||||
"Failed to update keywords": "Error al actualizar las palabras clave",
|
"Failed to update keywords": "Error al actualizar las palabras clave",
|
||||||
"Failed to get protocol list from Home Server": "Error al obtener la lista de protocolos de Home Server",
|
"Failed to get protocol list from Home Server": "Error al obtener la lista de protocolos desde el Home Server",
|
||||||
"Failed to get public room list": "No se pudo obtener la lista de salas públicas",
|
"Failed to get public room list": "No se pudo obtener la lista de salas públicas",
|
||||||
"Failed to join the room": "Falló al unirse a la sala",
|
"Failed to join the room": "Error al unirse a la sala",
|
||||||
"Failed to remove tag %(tagName)s from room": "Error al eliminar la etiqueta %(tagName)s de la sala",
|
"Failed to remove tag %(tagName)s from room": "Error al eliminar la etiqueta %(tagName)s de la sala",
|
||||||
"Failed to set direct chat tag": "Error al establecer la etiqueta de chat directo",
|
"Failed to set direct chat tag": "Error al establecer la etiqueta de chat directo",
|
||||||
"Failed to set Direct Message status of room": "No se pudo establecer el estado de Mensaje Directo de la sala",
|
"Failed to set Direct Message status of room": "No se pudo establecer el estado de Mensaje Directo de la sala",
|
||||||
|
@ -50,7 +50,7 @@
|
||||||
"Low Priority": "Baja Prioridad",
|
"Low Priority": "Baja Prioridad",
|
||||||
"Members": "Miembros",
|
"Members": "Miembros",
|
||||||
"Mentions only": "Sólo menciones",
|
"Mentions only": "Sólo menciones",
|
||||||
"Messages containing my display name": "Mensajes que contienen mi nombre para mostrar",
|
"Messages containing my display name": "Mensajes que contienen mi nombre",
|
||||||
"Messages containing my user name": "Mensajes que contienen mi nombre de usuario",
|
"Messages containing my user name": "Mensajes que contienen mi nombre de usuario",
|
||||||
"Messages in group chats": "Mensajes en chats de grupo",
|
"Messages in group chats": "Mensajes en chats de grupo",
|
||||||
"Messages in one-to-one chats": "Mensajes en chats uno a uno",
|
"Messages in one-to-one chats": "Mensajes en chats uno a uno",
|
||||||
|
@ -125,54 +125,54 @@
|
||||||
"Hide panel": "Ocultar panel",
|
"Hide panel": "Ocultar panel",
|
||||||
"(HTTP status %(httpStatus)s)": "(estado HTTP %(httpStatus)s)",
|
"(HTTP status %(httpStatus)s)": "(estado HTTP %(httpStatus)s)",
|
||||||
"I understand the risks and wish to continue": "Entiendo los riesgos y deseo continuar",
|
"I understand the risks and wish to continue": "Entiendo los riesgos y deseo continuar",
|
||||||
"Changelog": "Bitácora de cambios",
|
"Changelog": "Registro de cambios",
|
||||||
"Collapse panel": "Colapsar panel",
|
"Collapse panel": "Colapsar panel",
|
||||||
"Remember, you can always set an email address in user settings if you change your mind.": "Recuerde que, si es necesario, puede establecer una dirección de email en las preferencias de usuario.",
|
"Remember, you can always set an email address in user settings if you change your mind.": "Recuerde que, si es necesario, puede establecer una dirección de email en las preferencias de usuario.",
|
||||||
"All Rooms": "Todas las salas",
|
"All Rooms": "Todas las salas",
|
||||||
"Expand panel": "Expandir panel",
|
"Expand panel": "Expandir panel",
|
||||||
"Failed to": "Falló",
|
"Failed to": "Falló",
|
||||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Para diagnosticar los problemas, las trazas de este cliente serán enviadas adjuntas a este informe de defecto. Si quisiera enviar el texto anterior solamente, entonces desmarque:",
|
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Para diagnosticar los problemas, los registros de este cliente serán enviados adjuntos a este informe de fallo. Si quisiera enviar el texto anterior solamente, entonces desmarque:",
|
||||||
"Login": "Abrir sesión",
|
"Login": "Iniciar sesión",
|
||||||
"Report a bug": "Informe un defecto",
|
"Report a bug": "Informe de un fallo",
|
||||||
"Search…": "Buscar…",
|
"Search…": "Buscar…",
|
||||||
"Send": "Enviar",
|
"Send": "Enviar",
|
||||||
"Send logs": "Enviar trazas",
|
"Send logs": "Enviar registros",
|
||||||
"Sorry, your browser is <b>not</b> able to run Riot.": "¡Lo sentimos! Su navegador <b>no puede</b> ejecutar Riot.",
|
"Sorry, your browser is <b>not</b> able to run Riot.": "¡Lo sentimos! Su navegador <b>no puede</b> ejecutar Riot.",
|
||||||
"This Room": "Esta sala",
|
"This Room": "Esta sala",
|
||||||
"Unavailable": "No disponible",
|
"Unavailable": "No disponible",
|
||||||
"Unknown device": "Dispositivo desconocido",
|
"Unknown device": "Dispositivo desconocido",
|
||||||
"Update": "Actualizar",
|
"Update": "Actualizar",
|
||||||
"Uploading report": "Enviando informe",
|
"Uploading report": "Enviando informe",
|
||||||
"What's New": "Lo que hay de nuevo",
|
"What's New": "Novedades",
|
||||||
"What's new?": "¿Qué hay de nuevo?",
|
"What's new?": "¿Qué hay de nuevo?",
|
||||||
"Waiting for response from server": "Esperando una respuesta del servidor",
|
"Waiting for response from server": "Esperando una respuesta del servidor",
|
||||||
"You have successfully set a password and an email address!": "¡Ha establecido exitosamente la contraseña y la dirección de email!",
|
"You have successfully set a password and an email address!": "¡Ha establecido exitosamente la contraseña y la dirección de email!",
|
||||||
"You have successfully set a password!": "¡Ha establecido exitosamente una contraseña!",
|
"You have successfully set a password!": "¡Ha establecido exitosamente una contraseña!",
|
||||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s en %(osName)s",
|
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s en %(osName)s",
|
||||||
"All messages (loud)": "Todos los mensajes (ruidoso)",
|
"All messages (loud)": "Todos los mensajes (ruidoso)",
|
||||||
"All notifications are currently disabled for all targets.": "Las notificaciones estan desactivadas en todos los objetivos.",
|
"All notifications are currently disabled for all targets.": "Las notificaciones estan desactivadas para todos los objetivos.",
|
||||||
"Collecting app version information": "Recolectando información de la versión de la aplicación",
|
"Collecting app version information": "Recolectando información de la versión de la aplicación",
|
||||||
"Collecting logs": "Recolectando registros",
|
"Collecting logs": "Recolectando registros",
|
||||||
"Dismiss": "Omitir",
|
"Dismiss": "Omitir",
|
||||||
"Failed to send report: ": "Error al enviar reporte: ",
|
"Failed to send report: ": "Error al enviar informe: ",
|
||||||
"Loading bug report module": "Cargando módulo de reporte de errores",
|
"Loading bug report module": "Cargando módulo de reporte de errores",
|
||||||
"Messages containing <span>keywords</span>": "Mensajes que contienen <span>palabras clave</span>",
|
"Messages containing <span>keywords</span>": "Mensajes que contienen <span>palabras clave</span>",
|
||||||
"Notify for all other messages/rooms": "Notificar para todos los demás mensajes/salas",
|
"Notify for all other messages/rooms": "Notificar para todos los demás mensajes/salas",
|
||||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Por favor describa el error. Qué acción ejecutó? Cuál era el resultado que esperaba? Que pasó realmente?",
|
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Por favor describa el error. ¿Qué acción ejecutó? ¿Cuál era el resultado que esperaba? ¿Que pasó realmente?",
|
||||||
"Please describe the bug and/or send logs.": "Por favor describa el error y/o envíe los registros.",
|
"Please describe the bug and/or send logs.": "Por favor describa el error y/o envíe los registros.",
|
||||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Por favor instale <a href=\"https://www.google.com/chrome\">Google Chrome</a> o <a href=\"https://getfirefox.com\">Mozilla Firefox</a> para una mejor experiencia.",
|
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Por favor instale <a href=\"https://www.google.com/chrome\">Google Chrome</a> o <a href=\"https://getfirefox.com\">Mozilla Firefox</a> para una mejor experiencia.",
|
||||||
"powered by Matrix": "con el poder de Matrix",
|
"powered by Matrix": "con el poder de Matrix",
|
||||||
"Riot Desktop on %(platformName)s": "Riot Desktop en %(platformName)s",
|
"Riot Desktop on %(platformName)s": "Riot Desktop en %(platformName)s",
|
||||||
"Riot is not supported on mobile web. Install the app?": "Riot no está soportado en navegadores Web móviles. Quieres instalar la aplicación?",
|
"Riot is not supported on mobile web. Install the app?": "Riot no está soportado en navegadores Web móviles. ¿Quieres instalar la aplicación?",
|
||||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot usa muchas características avanzadas del navegador, algunas de las cuales no están disponibles en su navegador actual.",
|
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot usa muchas características avanzadas del navegador, algunas de las cuales no están disponibles en su navegador actual.",
|
||||||
"You are Rioting as a guest. <a>Register</a> or <a>sign in</a> to access more rooms and features!": "Está usando Riot como invitado. ¡<a>Regístrese</a> o <a>inicie sesión</a> para acceder más salas y características!",
|
"You are Rioting as a guest. <a>Register</a> or <a>sign in</a> to access more rooms and features!": "Está usando Riot como invitado. ¡<a>Regístrese</a> o <a>inicie sesión</a> para acceder más salas y características!",
|
||||||
"You need to be using HTTPS to place a screen-sharing call.": "Debes usar HTTPS para hacer una llamada con pantalla compartida.",
|
"You need to be using HTTPS to place a screen-sharing call.": "Debes usar HTTPS para hacer una llamada con pantalla compartida.",
|
||||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "En su navegador actual, la apariencia de la aplicación puede ser completamente incorrecta, y algunas de las características podrían no funcionar. Si aún desea probarlo puede continuar, pero ¡no podremos ofrecer soporte por cualquier problema que pudiese tener!",
|
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "En su navegador actual, la apariencia y comportamiento de la aplicación puede ser completamente incorrecta, y algunas de las características podrían no funcionar. Si aún desea probarlo puede continuar, pero ¡no podremos ofrecer soporte por cualquier problema que pudiese tener!",
|
||||||
"Welcome to Riot.im": "Bienvenido a Riot.im",
|
"Welcome to Riot.im": "Bienvenido a Riot.im",
|
||||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Conversaciones & colaboración cifradas y descentralizadas con el poder de [matrix]",
|
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Conversaciones & colaboración cifradas y descentralizadas con el poder de [matrix]",
|
||||||
"Search the room directory": "Buscar en el directorio de salas",
|
"Search the room directory": "Buscar en el directorio de salas",
|
||||||
"Chat with Riot Bot": "Conversar con el Bot de Riot",
|
"Chat with Riot Bot": "Conversar con el Bot de Riot",
|
||||||
"Get started with some tips from Riot Bot!": "¡Comenzar con algunos tips de Riot Bot!",
|
"Get started with some tips from Riot Bot!": "¡Comenzar con algunos consejos de Riot Bot!",
|
||||||
"General discussion about Matrix and Riot": "Discusión general sobre Matrix y Riot",
|
"General discussion about Matrix and Riot": "Discusión general sobre Matrix y Riot",
|
||||||
"Discussion of all things Matrix!": "¡Discusión sobre todas las cosas de Matrix!",
|
"Discussion of all things Matrix!": "¡Discusión sobre todas las cosas de Matrix!",
|
||||||
"Riot/Web & Desktop chat": "Conversaciones de Riot/Web & Desktop",
|
"Riot/Web & Desktop chat": "Conversaciones de Riot/Web & Desktop",
|
||||||
|
@ -206,5 +206,7 @@
|
||||||
"To return to your account in future you need to <u>set a password</u>": "Para regresar a su cuenta en el futuro Ud. debe <u>establecer una contraseña</u>",
|
"To return to your account in future you need to <u>set a password</u>": "Para regresar a su cuenta en el futuro Ud. debe <u>establecer una contraseña</u>",
|
||||||
"Set Password": "Establezca la contraseña",
|
"Set Password": "Establezca la contraseña",
|
||||||
"Error encountered (%(errorDetail)s).": "Error encontrado (%(errorDetail)s).",
|
"Error encountered (%(errorDetail)s).": "Error encontrado (%(errorDetail)s).",
|
||||||
"Couldn't load home page": "No se puede cargar la página principal"
|
"Couldn't load home page": "No se puede cargar la página principal",
|
||||||
|
"Bug report sent": "Informe de fallo enviado",
|
||||||
|
"Thank you!": "¡Gracias!"
|
||||||
}
|
}
|
||||||
|
|
|
@ -195,5 +195,17 @@
|
||||||
"You have successfully set a password and an email address!": "Olet onnistuneesti asettanut salasanan ja sähköpostiosoitteen!",
|
"You have successfully set a password and an email address!": "Olet onnistuneesti asettanut salasanan ja sähköpostiosoitteen!",
|
||||||
"Remember, you can always set an email address in user settings if you change your mind.": "Muista että voit aina asettaa sähköpostiosoitteen käyttäjäasetuksista jos muutat mielesi.",
|
"Remember, you can always set an email address in user settings if you change your mind.": "Muista että voit aina asettaa sähköpostiosoitteen käyttäjäasetuksista jos muutat mielesi.",
|
||||||
"To return to your account in future you need to <u>set a password</u>": "Voidaksesi tulevaisuudessa palata tilillesi sinut pitää <u>asettaa salasana</u>",
|
"To return to your account in future you need to <u>set a password</u>": "Voidaksesi tulevaisuudessa palata tilillesi sinut pitää <u>asettaa salasana</u>",
|
||||||
"Couldn't load home page": "Kotisivun lataus epäonnistui"
|
"Couldn't load home page": "Kotisivun lataus epäonnistui",
|
||||||
|
"Bug report sent": "Virheraportti lähetetty",
|
||||||
|
"Failed to set Direct Message status of room": "Huoneen suoran viestittelyn tilan asettaminen epäonnistui",
|
||||||
|
"(HTTP status %(httpStatus)s)": "(HTTP tila %(httpStatus)s)",
|
||||||
|
"Notify for all other messages/rooms": "Ilmoita kaikista muista viesteistä/huoneista",
|
||||||
|
"powered by Matrix": "Matrix-pohjainen",
|
||||||
|
"Riot is not supported on mobile web. Install the app?": "Riot ei tue mobiiliselaimia. Asenna sovellus?",
|
||||||
|
"Thank you!": "Kiitos!",
|
||||||
|
"Design and implementation of E2E in Matrix": "Matrix päästä-päähän salauksen suunnittelu ja implementointi",
|
||||||
|
"Contributing code to Matrix and Riot": "Osallistu Matrix ja Riot kehitykseen",
|
||||||
|
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s selaimella %(browserName)s käyttöjärjestelmällä %(osName)s",
|
||||||
|
"There are advanced notifications which are not shown here": "On kehittyneitä ilmoituksia joita ei näytetä tässä",
|
||||||
|
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Matrix-pohjainen hajautettu, salattu viestittely ja yhteistyö"
|
||||||
}
|
}
|
||||||
|
|
|
@ -129,7 +129,7 @@
|
||||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "A jelenlegi bőngésződdel teljesen hibás lehet az alkalmazás kinézete és bizonyos funkciók, ha nem az összes, nem fog működni. Ha mindenképpen ki akarod próbálni, folytathatod de egyedül vagy minden felbukkanó problémával!",
|
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "A jelenlegi bőngésződdel teljesen hibás lehet az alkalmazás kinézete és bizonyos funkciók, ha nem az összes, nem fog működni. Ha mindenképpen ki akarod próbálni, folytathatod de egyedül vagy minden felbukkanó problémával!",
|
||||||
"Messages containing <span>keywords</span>": "Az üzenet <span>kulcsszavakat</span> tartalmaz",
|
"Messages containing <span>keywords</span>": "Az üzenet <span>kulcsszavakat</span> tartalmaz",
|
||||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s alkalmazás %(browserName)s böngészőn %(osName)s rendszeren",
|
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s alkalmazás %(browserName)s böngészőn %(osName)s rendszeren",
|
||||||
"A new version of Riot is available.": "Új verzió érhető el a Riot-ból.",
|
"A new version of Riot is available.": "Elérhető egy új Riot verzió.",
|
||||||
"All Rooms": "Minden szobában",
|
"All Rooms": "Minden szobában",
|
||||||
"Cancel": "Mégse",
|
"Cancel": "Mégse",
|
||||||
"Changelog": "Változások",
|
"Changelog": "Változások",
|
||||||
|
@ -206,5 +206,7 @@
|
||||||
"Error encountered (%(errorDetail)s).": "Hiba történt (%(errorDetail)s).",
|
"Error encountered (%(errorDetail)s).": "Hiba történt (%(errorDetail)s).",
|
||||||
"No update available.": "Frissítés nem érthető el.",
|
"No update available.": "Frissítés nem érthető el.",
|
||||||
"Downloading update...": "Frissítés letöltése...",
|
"Downloading update...": "Frissítés letöltése...",
|
||||||
"Couldn't load home page": "Kezdőképernyő betöltése sikertelen"
|
"Couldn't load home page": "Kezdőképernyő betöltése sikertelen",
|
||||||
|
"Bug report sent": "Hibajelentés elküldve",
|
||||||
|
"Thank you!": "Köszönjük!"
|
||||||
}
|
}
|
||||||
|
|
|
@ -94,13 +94,13 @@
|
||||||
"powered by Matrix": "offerto da Matrix",
|
"powered by Matrix": "offerto da Matrix",
|
||||||
"Quote": "Cita",
|
"Quote": "Cita",
|
||||||
"Reject": "Rifiuta",
|
"Reject": "Rifiuta",
|
||||||
"Remove %(name)s from the directory?": "Rimuovere %(name) dalla lista?",
|
"Remove %(name)s from the directory?": "Rimuovere %(name)s dalla lista?",
|
||||||
"Remove": "Rimuovi",
|
"Remove": "Rimuovi",
|
||||||
"remove %(name)s from the directory.": "rimuovi %(name) dalla lista.",
|
"remove %(name)s from the directory.": "rimuovi %(name)s dalla lista.",
|
||||||
"Remove from Directory": "Rimuovi dalla lista",
|
"Remove from Directory": "Rimuovi dalla lista",
|
||||||
"Report a bug": "Segnala un errore",
|
"Report a bug": "Segnala un errore",
|
||||||
"Resend": "Reinvia",
|
"Resend": "Reinvia",
|
||||||
"Riot Desktop on %(platformName)s": "Riot Desktop su %(platformName)",
|
"Riot Desktop on %(platformName)s": "Riot Desktop su %(platformName)s",
|
||||||
"Riot does not know how to join a room on this network": "Riot non sa come entrare nella stanza su questa rete",
|
"Riot does not know how to join a room on this network": "Riot non sa come entrare nella stanza su questa rete",
|
||||||
"Riot is not supported on mobile web. Install the app?": "Riot non è supportato sul web mobile. Vuoi installare l'applicazione?",
|
"Riot is not supported on mobile web. Install the app?": "Riot non è supportato sul web mobile. Vuoi installare l'applicazione?",
|
||||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot utilizza molte funzioni avanzate del browser, alcune delle quali non sono disponibili o sono sperimentali nel tuo browser attuale.",
|
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot utilizza molte funzioni avanzate del browser, alcune delle quali non sono disponibili o sono sperimentali nel tuo browser attuale.",
|
||||||
|
@ -205,5 +205,6 @@
|
||||||
"Discussion of all things Matrix!": "Discussione su tutto quanto riguardi Matrix!",
|
"Discussion of all things Matrix!": "Discussione su tutto quanto riguardi Matrix!",
|
||||||
"Dev chat for the Riot/Web dev team": "Chat per gli sviluppatori di Riot/Web",
|
"Dev chat for the Riot/Web dev team": "Chat per gli sviluppatori di Riot/Web",
|
||||||
"Dev chat for the Dendrite dev team": "Chat per gli sviluppatori di Dendrite",
|
"Dev chat for the Dendrite dev team": "Chat per gli sviluppatori di Dendrite",
|
||||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Esistono già molte stanze in Matrix, collegate a reti già esistenti (Slack, IRC, Gitter ecc) o indipendenti. Dai un'occhiata all'elenco!"
|
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Esistono già molte stanze in Matrix, collegate a reti già esistenti (Slack, IRC, Gitter ecc) o indipendenti. Dai un'occhiata all'elenco!",
|
||||||
|
"Thank you!": "Grazie!"
|
||||||
}
|
}
|
||||||
|
|
|
@ -153,7 +153,7 @@
|
||||||
"OK": "ശരി",
|
"OK": "ശരി",
|
||||||
"Warning": "മുന്നറിയിപ്പ്",
|
"Warning": "മുന്നറിയിപ്പ്",
|
||||||
"Checking for an update...": "അപ്ഡേറ്റ് ഉണ്ടോ എന്ന് തിരയുന്നു...",
|
"Checking for an update...": "അപ്ഡേറ്റ് ഉണ്ടോ എന്ന് തിരയുന്നു...",
|
||||||
"Error encountered (%(errorDetail)s).": "എറര് നേരിട്ടു (%errorDetail)s).",
|
"Error encountered (%(errorDetail)s).": "എറര് നേരിട്ടു (%(errorDetail)s).",
|
||||||
"No update available.": "അപ്ഡേറ്റുകള് ലഭ്യമല്ല.",
|
"No update available.": "അപ്ഡേറ്റുകള് ലഭ്യമല്ല.",
|
||||||
"Downloading update...": "അപ്ഡേറ്റ് ഡൌണ്ലോഡ് ചെയ്യുന്നു...",
|
"Downloading update...": "അപ്ഡേറ്റ് ഡൌണ്ലോഡ് ചെയ്യുന്നു...",
|
||||||
"You need to be using HTTPS to place a screen-sharing call.": "സ്ക്രീന് ഷെയറിങ്ങ് കോള് നടത്തണമെങ്കില് https ഉപയോഗിക്കണം.",
|
"You need to be using HTTPS to place a screen-sharing call.": "സ്ക്രീന് ഷെയറിങ്ങ് കോള് നടത്തണമെങ്കില് https ഉപയോഗിക്കണം.",
|
||||||
|
|
|
@ -86,7 +86,7 @@
|
||||||
"Settings": "Instellingen",
|
"Settings": "Instellingen",
|
||||||
"Source URL": "Bron-URL",
|
"Source URL": "Bron-URL",
|
||||||
"Start chat": "Gesprek starten",
|
"Start chat": "Gesprek starten",
|
||||||
"The Home Server may be too old to support third party networks": "De home server is misschien te oud om netwerken van derde partijen te ondersteunen",
|
"The Home Server may be too old to support third party networks": "De thuisserver is misschien te oud om netwerken van derde partijen te ondersteunen",
|
||||||
"There are advanced notifications which are not shown here": "Er zijn geavanceerde notificaties die hier niet getoond worden",
|
"There are advanced notifications which are not shown here": "Er zijn geavanceerde notificaties die hier niet getoond worden",
|
||||||
"The server may be unavailable or overloaded": "De server is misschien niet beschikbaar of overbelast",
|
"The server may be unavailable or overloaded": "De server is misschien niet beschikbaar of overbelast",
|
||||||
"This room is inaccessible to guests. You may be able to join if you register.": "Deze kamer is niet toegankelijk voor gasten. Je zou misschien kunnen deelnemen als je geregistreerd bent.",
|
"This room is inaccessible to guests. You may be able to join if you register.": "Deze kamer is niet toegankelijk voor gasten. Je zou misschien kunnen deelnemen als je geregistreerd bent.",
|
||||||
|
@ -196,15 +196,17 @@
|
||||||
"Discussion of the Identity Service API": "Discussie over de Identity Service API",
|
"Discussion of the Identity Service API": "Discussie over de Identity Service API",
|
||||||
"Support for those using, running and writing other bridges": "Ondersteuning voor het gebruiken, draaien en ontwikkelen aan andere bruggen",
|
"Support for those using, running and writing other bridges": "Ondersteuning voor het gebruiken, draaien en ontwikkelen aan andere bruggen",
|
||||||
"Dev chat for the Riot/Web dev team": "Dev-chat voor het Riot/Web ontwikkelteam",
|
"Dev chat for the Riot/Web dev team": "Dev-chat voor het Riot/Web ontwikkelteam",
|
||||||
"Dev chat for the Dendrite dev team": "Dev-chat voor het Dendrite ontwikkelteam",
|
"Dev chat for the Dendrite dev team": "Dev-chat voor het Dendrite-ontwikkelteam",
|
||||||
"You have successfully set a password and an email address!": "Het instellen van een wachtwoord en e-mailadres is geslaagd!",
|
"You have successfully set a password and an email address!": "Het instellen van een wachtwoord en e-mailadres is geslaagd!",
|
||||||
"Remember, you can always set an email address in user settings if you change your mind.": "Onthoud dat u altijd een e-mailadres in kan stellen in de gebruikersinstellingen als u zich bedenkt.",
|
"Remember, you can always set an email address in user settings if you change your mind.": "Onthoud dat u altijd een e-mailadres in kan stellen in de gebruikersinstellingen als u zich bedenkt.",
|
||||||
"Warning": "Waarschuwing",
|
"Warning": "Waarschuwing",
|
||||||
"Checking for an update...": "Aan het kijken voor een update...",
|
"Checking for an update...": "Aan het kijken voor een update...",
|
||||||
"Error encountered (%(errorDetail)s).": "Fout ondervonden (%errorDetail)s).",
|
"Error encountered (%(errorDetail)s).": "Fout ondervonden (%(errorDetail)s).",
|
||||||
"No update available.": "Geen update beschikbaar.",
|
"No update available.": "Geen update beschikbaar.",
|
||||||
"Downloading update...": "Update aan het downloaden...",
|
"Downloading update...": "Update aan het downloaden...",
|
||||||
"To return to your account in future you need to <u>set a password</u>": "Om in de toekomst naar je account terug te gaan moet je <u>een wachtwoord instellen</u>",
|
"To return to your account in future you need to <u>set a password</u>": "Om in de toekomst naar je account terug te gaan moet je <u>een wachtwoord instellen</u>",
|
||||||
"Set Password": "Wachtwoord instellen",
|
"Set Password": "Wachtwoord instellen",
|
||||||
"Couldn't load home page": "Kon de home pagina niet laden"
|
"Couldn't load home page": "Kon de home pagina niet laden",
|
||||||
|
"Bug report sent": "Bug report verzonden",
|
||||||
|
"Thank you!": "Bedankt!"
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
"Collapse panel": "Ukryj panel",
|
"Collapse panel": "Ukryj panel",
|
||||||
"customServer_text": "Możesz używać opcji serwera niestandardowego do logowania się na inne serwery Matrix, określając inny adres URL serwera domowego.<br/>Pozwala to na wykorzystanie Riot z istniejącym kontem Matrix na innym serwerze domowym.<br/><br/>Można również ustawić niestandardowy serwer tożsamości, ale nie będzie można zapraszać użytkowników adresem e-mail, ani być zaproszonym przez adres e-mailowy.",
|
"customServer_text": "Możesz używać opcji serwera niestandardowego do logowania się na inne serwery Matrix, określając inny adres URL serwera domowego.<br/>Pozwala to na wykorzystanie Riot z istniejącym kontem Matrix na innym serwerze domowym.<br/><br/>Można również ustawić niestandardowy serwer tożsamości, ale nie będzie można zapraszać użytkowników adresem e-mail, ani być zaproszonym przez adres e-mailowy.",
|
||||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Usuń alias %(alias)s i usuń %(name)s z katalogu?",
|
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Usuń alias %(alias)s i usuń %(name)s z katalogu?",
|
||||||
"Dismiss": "Zdymisjonować",
|
"Dismiss": "Zamknij",
|
||||||
"Drop here %(toAction)s": "Upuść tutaj %(toAction)s",
|
"Drop here %(toAction)s": "Upuść tutaj %(toAction)s",
|
||||||
"Enable audible notifications in web client": "Włącz dźwiękowe powiadomienia w kliencie internetowym",
|
"Enable audible notifications in web client": "Włącz dźwiękowe powiadomienia w kliencie internetowym",
|
||||||
"Enable email notifications": "Włącz powiadomienia e-mailowe",
|
"Enable email notifications": "Włącz powiadomienia e-mailowe",
|
||||||
|
@ -206,5 +206,7 @@
|
||||||
"Error encountered (%(errorDetail)s).": "Wystąpił błąd (%(errorDetail)s).",
|
"Error encountered (%(errorDetail)s).": "Wystąpił błąd (%(errorDetail)s).",
|
||||||
"Downloading update...": "Pobieranie aktualizacji...",
|
"Downloading update...": "Pobieranie aktualizacji...",
|
||||||
"Checking for an update...": "Sprawdzanie aktualizacji...",
|
"Checking for an update...": "Sprawdzanie aktualizacji...",
|
||||||
"Couldn't load home page": "Nie można załadować strony startowej"
|
"Couldn't load home page": "Nie można załadować strony startowej",
|
||||||
|
"Bug report sent": "Raport błędu wysłany",
|
||||||
|
"Thank you!": "Dziękujemy!"
|
||||||
}
|
}
|
||||||
|
|
|
@ -206,5 +206,7 @@
|
||||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk-chatt",
|
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk-chatt",
|
||||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk-chatt",
|
"Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk-chatt",
|
||||||
"Admin support for Dendrite": "Hjälp för administratörer av Dendrite",
|
"Admin support for Dendrite": "Hjälp för administratörer av Dendrite",
|
||||||
"Building services on Matrix": "Bygga tjänster med Matrix"
|
"Building services on Matrix": "Bygga tjänster med Matrix",
|
||||||
|
"Bug report sent": "Buggraporten skickades",
|
||||||
|
"Thank you!": "Tack!"
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,12 +62,12 @@
|
||||||
"Enter keywords separated by a comma:": "ஒரு comma மூலம் முக்கிய வார்த்தைகளை உள்ளிடவும்:",
|
"Enter keywords separated by a comma:": "ஒரு comma மூலம் முக்கிய வார்த்தைகளை உள்ளிடவும்:",
|
||||||
"Error saving email notification preferences": "மின்னஞ்சல் அறிவிப்பு விருப்பங்களை சேமிப்பதில் கோளாறு",
|
"Error saving email notification preferences": "மின்னஞ்சல் அறிவிப்பு விருப்பங்களை சேமிப்பதில் கோளாறு",
|
||||||
"Failed to get protocol list from Home Server": "முகப்பு சேவையகத்திலிருந்து நெறிமுறை பட்டியலைப் பெறுவதில் தோல்வி",
|
"Failed to get protocol list from Home Server": "முகப்பு சேவையகத்திலிருந்து நெறிமுறை பட்டியலைப் பெறுவதில் தோல்வி",
|
||||||
"Failed to remove tag %(tagName)s from room": "அறையில் இருந்து குறிச்சொல்% (tagName) களை அகற்றுவது தோல்வியடைந்தது",
|
"Failed to remove tag %(tagName)s from room": "அறையில் இருந்து குறிச்சொல் %(tagName)s களை அகற்றுவது தோல்வியடைந்தது",
|
||||||
"Failed to set direct chat tag": "நேரடி அரட்டை குறியை அமைப்பதில் தோல்வி",
|
"Failed to set direct chat tag": "நேரடி அரட்டை குறியை அமைப்பதில் தோல்வி",
|
||||||
"Failed to set Direct Message status of room": "அறையின் நேரடி செய்தி நிலையை அமைக்க தவறிவிட்டது",
|
"Failed to set Direct Message status of room": "அறையின் நேரடி செய்தி நிலையை அமைக்க தவறிவிட்டது",
|
||||||
"Fetching third party location failed": "மூன்றாம் இடத்தில் உள்ள இடம் தோல்வி",
|
"Fetching third party location failed": "மூன்றாம் இடத்தில் உள்ள இடம் தோல்வி",
|
||||||
"Forward Message": "முன்னோடி செய்தி",
|
"Forward Message": "முன்னோடி செய்தி",
|
||||||
"(HTTP status %(httpStatus)s)": "(HTTP நிலைகள்% (httpStatus) )",
|
"(HTTP status %(httpStatus)s)": "(HTTP நிலைகள் %(httpStatus)s)",
|
||||||
"customServer_text": "நீங்கள் மற்ற Matrix வழங்கிகள் உள்நுழைய உங்கள் விருப்பமான வழங்கி இடப்புகளை உபயோகப்படுத்தலாம்.<br/>இது மற்ற வழங்கியில் உங்கள் Matrix கணக்கிணை Riot மூலம் பயன்படுத்த உதவும்.<br/><br/>நீங்கள் மற்ற அடையாள வழங்கியையும் பயன்படுத்தலாம், ஆனால் நீங்கள் மற்ற பயனர்களை மின்னஞ்சல் மூலம் அழைக்கவோ, நீங்கள் அழைக்கப்படவோ இயலாது.",
|
"customServer_text": "நீங்கள் மற்ற Matrix வழங்கிகள் உள்நுழைய உங்கள் விருப்பமான வழங்கி இடப்புகளை உபயோகப்படுத்தலாம்.<br/>இது மற்ற வழங்கியில் உங்கள் Matrix கணக்கிணை Riot மூலம் பயன்படுத்த உதவும்.<br/><br/>நீங்கள் மற்ற அடையாள வழங்கியையும் பயன்படுத்தலாம், ஆனால் நீங்கள் மற்ற பயனர்களை மின்னஞ்சல் மூலம் அழைக்கவோ, நீங்கள் அழைக்கப்படவோ இயலாது.",
|
||||||
"Guest users can't invite users. Please register to invite.": "விருந்தினர் பயனர்கள் பயனர்களை அழைக்க முடியாது. தயவுசெய்து அழைக்கவும்.",
|
"Guest users can't invite users. Please register to invite.": "விருந்தினர் பயனர்கள் பயனர்களை அழைக்க முடியாது. தயவுசெய்து அழைக்கவும்.",
|
||||||
"I understand the risks and wish to continue": "நான் அபாயங்களைப் புரிந்துகொண்டு தொடர விரும்புகிறேன்",
|
"I understand the risks and wish to continue": "நான் அபாயங்களைப் புரிந்துகொண்டு தொடர விரும்புகிறேன்",
|
||||||
|
@ -96,9 +96,9 @@
|
||||||
"powered by Matrix": "Matrix-ஆல் ஆனது",
|
"powered by Matrix": "Matrix-ஆல் ஆனது",
|
||||||
"Quote": "மேற்கோள்",
|
"Quote": "மேற்கோள்",
|
||||||
"Reject": "நிராகரி",
|
"Reject": "நிராகரி",
|
||||||
"Remove %(name)s from the directory?": "அடைவிலிருந்து %(name)-ஐ நீக்கலாமா?",
|
"Remove %(name)s from the directory?": "அடைவிலிருந்து %(name)s-ஐ நீக்கலாமா?",
|
||||||
"Remove": "நீக்கு",
|
"Remove": "நீக்கு",
|
||||||
"remove %(name)s from the directory.": "அடைவிலிருந்து %(name)-ஐ நீக்கு.",
|
"remove %(name)s from the directory.": "அடைவிலிருந்து %(name)s-ஐ நீக்கு.",
|
||||||
"Remove from Directory": "அடைவிலிருந்து நீக்கு",
|
"Remove from Directory": "அடைவிலிருந்து நீக்கு",
|
||||||
"Report a bug": "வழுவைத் தெரியப்படுத்து",
|
"Report a bug": "வழுவைத் தெரியப்படுத்து",
|
||||||
"Resend": "மீண்டும் அனுப்பு",
|
"Resend": "மீண்டும் அனுப்பு",
|
||||||
|
@ -143,5 +143,6 @@
|
||||||
"World readable": "உலகமே படிக்கும்படி",
|
"World readable": "உலகமே படிக்கும்படி",
|
||||||
"You cannot delete this image. (%(code)s)": "இந்த படத்தை நீங்கள் அழிக்க முடியாது. (%(code)s)",
|
"You cannot delete this image. (%(code)s)": "இந்த படத்தை நீங்கள் அழிக்க முடியாது. (%(code)s)",
|
||||||
"You cannot delete this message. (%(code)s)": "இந்த செய்தியை நீங்கள் அழிக்க முடியாது. (%(code)s)",
|
"You cannot delete this message. (%(code)s)": "இந்த செய்தியை நீங்கள் அழிக்க முடியாது. (%(code)s)",
|
||||||
"You are not receiving desktop notifications": "திரை அறிவிப்புகளை நீங்கள் பெறவில்லை"
|
"You are not receiving desktop notifications": "திரை அறிவிப்புகளை நீங்கள் பெறவில்லை",
|
||||||
|
"Bug report sent": "வழு அறிக்கை அனுப்பப்பட்டது"
|
||||||
}
|
}
|
||||||
|
|
|
@ -139,7 +139,7 @@
|
||||||
"Uploaded on %(date)s by %(user)s": "由 %(user)s 在 %(date)s 上传",
|
"Uploaded on %(date)s by %(user)s": "由 %(user)s 在 %(date)s 上传",
|
||||||
"Uploading report": "上传报告",
|
"Uploading report": "上传报告",
|
||||||
"View Decrypted Source": "查看解密的来源",
|
"View Decrypted Source": "查看解密的来源",
|
||||||
"View Source": "查看来源",
|
"View Source": "查看源码",
|
||||||
"What's New": "新鲜事",
|
"What's New": "新鲜事",
|
||||||
"What's new?": "有什么新闻?",
|
"What's new?": "有什么新闻?",
|
||||||
"Waiting for response from server": "正在等待来自服务器的回应",
|
"Waiting for response from server": "正在等待来自服务器的回应",
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
@import "./matrix-react-sdk/views/elements/_ProgressBar.scss";
|
@import "./matrix-react-sdk/views/elements/_ProgressBar.scss";
|
||||||
@import "./matrix-react-sdk/views/elements/_RichText.scss";
|
@import "./matrix-react-sdk/views/elements/_RichText.scss";
|
||||||
@import "./matrix-react-sdk/views/elements/_RoleButton.scss";
|
@import "./matrix-react-sdk/views/elements/_RoleButton.scss";
|
||||||
|
@import "./matrix-react-sdk/views/groups/_GroupInviteTile.scss";
|
||||||
@import "./matrix-react-sdk/views/login/_InteractiveAuthEntryComponents.scss";
|
@import "./matrix-react-sdk/views/login/_InteractiveAuthEntryComponents.scss";
|
||||||
@import "./matrix-react-sdk/views/login/_ServerConfig.scss";
|
@import "./matrix-react-sdk/views/login/_ServerConfig.scss";
|
||||||
@import "./matrix-react-sdk/views/messages/_MEmoteBody.scss";
|
@import "./matrix-react-sdk/views/messages/_MEmoteBody.scss";
|
||||||
|
@ -74,6 +75,7 @@
|
||||||
@import "./vector-web/views/context_menus/_MessageContextMenu.scss";
|
@import "./vector-web/views/context_menus/_MessageContextMenu.scss";
|
||||||
@import "./vector-web/views/context_menus/_RoomTileContextMenu.scss";
|
@import "./vector-web/views/context_menus/_RoomTileContextMenu.scss";
|
||||||
@import "./vector-web/views/dialogs/_ChangelogDialog.scss";
|
@import "./vector-web/views/dialogs/_ChangelogDialog.scss";
|
||||||
|
@import "./vector-web/views/dialogs/_DevtoolsDialog.scss";
|
||||||
@import "./vector-web/views/dialogs/_SetEmailDialog.scss";
|
@import "./vector-web/views/dialogs/_SetEmailDialog.scss";
|
||||||
@import "./vector-web/views/dialogs/_SetPasswordDialog.scss";
|
@import "./vector-web/views/dialogs/_SetPasswordDialog.scss";
|
||||||
@import "./vector-web/views/directory/_NetworkDropdown.scss";
|
@import "./vector-web/views/directory/_NetworkDropdown.scss";
|
||||||
|
|
|
@ -70,8 +70,12 @@ limitations under the License.
|
||||||
flex: 1;
|
flex: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_GroupView_saveButton, .mx_GroupView_cancelButton {
|
.mx_GroupView_header_rightCol {
|
||||||
display: table-cell;
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_GroupView_textButton {
|
||||||
|
display: inline-block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_GroupView_header_groupid {
|
.mx_GroupView_header_groupid {
|
||||||
|
@ -126,6 +130,31 @@ limitations under the License.
|
||||||
top: 5px;
|
top: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mx_GroupView_membershipSection {
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
margin-bottom: 11px;
|
||||||
|
color: $greyed-fg-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_GroupView_membershipSubSection {
|
||||||
|
justify-content: space-between;
|
||||||
|
display: flex;
|
||||||
|
margin-top: 2px;
|
||||||
|
margin-bottom: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_GroupView_membershipSection_description {
|
||||||
|
/* To match textButton */
|
||||||
|
line-height: 34px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_GroupView_membershipSection .mx_GroupView_textButton {
|
||||||
|
margin-right: 0px;
|
||||||
|
margin-top: 0px;
|
||||||
|
margin-left: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
.mx_GroupView_featuredThings {
|
.mx_GroupView_featuredThings {
|
||||||
margin-top: 20px;
|
margin-top: 20px;
|
||||||
}
|
}
|
||||||
|
@ -142,9 +171,41 @@ limitations under the License.
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mx_GroupView_featuredThings_container {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_GroupView_featuredThings_addButton,
|
||||||
.mx_GroupView_featuredThing {
|
.mx_GroupView_featuredThing {
|
||||||
cursor: pointer;
|
|
||||||
display: table-cell;
|
display: table-cell;
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
width: 100px;
|
||||||
|
margin: 0px 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_GroupView_featuredThing {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_GroupView_featuredThing .mx_GroupView_featuredThing_deleteButton {
|
||||||
|
position: absolute;
|
||||||
|
top: -7px;
|
||||||
|
right: 11px;
|
||||||
|
opacity: 0.4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_GroupView_featuredThing .mx_BaseAvatar {
|
||||||
|
/* To prevent misalignment with mx_TintableSvg (in addButton) */
|
||||||
|
vertical-align: initial;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_GroupView_featuredThings_addButton object {
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_GroupView_featuredThing_name {
|
||||||
|
word-wrap: break-word;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_GroupView_uploadInput {
|
.mx_GroupView_uploadInput {
|
||||||
|
|
|
@ -80,6 +80,16 @@ limitations under the License.
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mx_UserSettings_button.mx_UserSettings_buttonSmall {
|
||||||
|
height: 36px;
|
||||||
|
padding: 4px;
|
||||||
|
padding-left: 7px;
|
||||||
|
padding-right: 7px;
|
||||||
|
font-size: 12px;
|
||||||
|
margin-right: 5px;
|
||||||
|
line-height: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
.mx_UserSettings_button.danger {
|
.mx_UserSettings_button.danger {
|
||||||
background-color: $warning-color;
|
background-color: $warning-color;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,74 @@
|
||||||
|
/*
|
||||||
|
Copyright 2017 New Vector Ltd
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.mx_GroupInviteTile {
|
||||||
|
position: relative;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 13px;
|
||||||
|
display: block;
|
||||||
|
height: 34px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_GroupInviteTile_nameContainer {
|
||||||
|
display: inline-block;
|
||||||
|
width: 180px;
|
||||||
|
height: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_GroupInviteTile_avatarContainer {
|
||||||
|
display: inline-block;
|
||||||
|
padding-top: 5px;
|
||||||
|
padding-bottom: 5px;
|
||||||
|
padding-left: 16px;
|
||||||
|
padding-right: 6px;
|
||||||
|
width: 24px;
|
||||||
|
height: 24px;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_GroupInviteTile_name {
|
||||||
|
display: inline-block;
|
||||||
|
position: relative;
|
||||||
|
width: 165px;
|
||||||
|
vertical-align: middle;
|
||||||
|
padding-left: 6px;
|
||||||
|
padding-right: 6px;
|
||||||
|
padding-top: 2px;
|
||||||
|
padding-bottom: 3px;
|
||||||
|
color: $roomtile-name-color;
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_GroupInviteTile_badge {
|
||||||
|
display: inline-block;
|
||||||
|
min-width: 15px;
|
||||||
|
height: 15px;
|
||||||
|
position: absolute;
|
||||||
|
right: 8px; /*gutter */
|
||||||
|
top: 9px;
|
||||||
|
border-radius: 8px;
|
||||||
|
color: $accent-fg-color;
|
||||||
|
background-color: $group-alert-color;
|
||||||
|
font-weight: 600;
|
||||||
|
font-size: 10px;
|
||||||
|
text-align: center;
|
||||||
|
padding-top: 1px;
|
||||||
|
padding-left: 4px;
|
||||||
|
padding-right: 4px;
|
||||||
|
}
|
||||||
|
|
|
@ -45,7 +45,6 @@ limitations under the License.
|
||||||
|
|
||||||
.mx_EventTile .mx_SenderProfile {
|
.mx_EventTile .mx_SenderProfile {
|
||||||
color: $primary-fg-color;
|
color: $primary-fg-color;
|
||||||
opacity: 0.5;
|
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
display: block; /* anti-zalgo, with overflow hidden */
|
display: block; /* anti-zalgo, with overflow hidden */
|
||||||
overflow-y: hidden;
|
overflow-y: hidden;
|
||||||
|
@ -57,6 +56,15 @@ limitations under the License.
|
||||||
line-height: 22px;
|
line-height: 22px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mx_EventTile .mx_SenderProfile .mx_SenderProfile_name,
|
||||||
|
.mx_EventTile .mx_SenderProfile .mx_SenderProfile_aux {
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_EventTile .mx_SenderProfile .mx_Flair {
|
||||||
|
opacity: 0.7;
|
||||||
|
}
|
||||||
|
|
||||||
.mx_EventTile .mx_MessageTimestamp {
|
.mx_EventTile .mx_MessageTimestamp {
|
||||||
display: block;
|
display: block;
|
||||||
visibility: hidden;
|
visibility: hidden;
|
||||||
|
|
|
@ -21,9 +21,7 @@ limitations under the License.
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_RoomSettings_leaveButton,
|
.mx_RoomSettings_leaveButton,
|
||||||
.mx_RoomSettings_unbanButton,
|
.mx_RoomSettings_unbanButton {
|
||||||
.mx_RoomSettings_integrationsButton,
|
|
||||||
.mx_RoomSettings_integrationsButton_error {
|
|
||||||
position: relative;
|
position: relative;
|
||||||
height: 36px;
|
height: 36px;
|
||||||
background-color: $accent-color;
|
background-color: $accent-color;
|
||||||
|
@ -36,25 +34,37 @@ limitations under the License.
|
||||||
padding-left: 12px;
|
padding-left: 12px;
|
||||||
padding-right: 12px;
|
padding-right: 12px;
|
||||||
}
|
}
|
||||||
|
.mx_RoomSettings_integrationsButton_error {
|
||||||
|
position: relative;
|
||||||
|
cursor: not-allowed;
|
||||||
|
}
|
||||||
|
.mx_RoomSettings_integrationsButton_error img {
|
||||||
|
position: absolute;
|
||||||
|
right: -5px;
|
||||||
|
top: -5px;
|
||||||
|
}
|
||||||
.mx_RoomSettings_leaveButton,
|
.mx_RoomSettings_leaveButton,
|
||||||
.mx_RoomSettings_integrationsButton,
|
|
||||||
.mx_RoomSettings_integrationsButton_error {
|
.mx_RoomSettings_integrationsButton_error {
|
||||||
float: right;
|
float: right;
|
||||||
}
|
}
|
||||||
.mx_RoomSettings_integrationsButton_error {
|
.mx_RoomSettings_integrationsButton_error .mx_RoomSettings_integrationsButton_errorPopup {
|
||||||
pointer: not-allowed;
|
display: none;
|
||||||
|
}
|
||||||
|
.mx_RoomSettings_integrationsButton_error:hover .mx_RoomSettings_integrationsButton_errorPopup {
|
||||||
|
display: inline;
|
||||||
}
|
}
|
||||||
.mx_RoomSettings_integrationsButton_errorPopup {
|
.mx_RoomSettings_integrationsButton_errorPopup {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 110%;
|
top: 110%;
|
||||||
left: -26%;
|
left: -125%;
|
||||||
width: 150%;
|
width: 348%;
|
||||||
padding: 2%;
|
padding: 2%;
|
||||||
font-size: 10pt;
|
font-size: 10pt;
|
||||||
line-height: 1.5em;
|
line-height: 1.5em;
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
background-color: $accent-color;
|
background-color: $accent-color;
|
||||||
color: $accent-fg-color;
|
color: $accent-fg-color;
|
||||||
|
text-align: center;
|
||||||
}
|
}
|
||||||
.mx_RoomSettings_unbanButton {
|
.mx_RoomSettings_unbanButton {
|
||||||
display: inline;
|
display: inline;
|
||||||
|
|
|
@ -22,6 +22,8 @@ $warning-color: #ff0064;
|
||||||
$mention-user-pill-bg-color: #ff0064;
|
$mention-user-pill-bg-color: #ff0064;
|
||||||
$other-user-pill-bg-color: rgba(0, 0, 0, 0.1);
|
$other-user-pill-bg-color: rgba(0, 0, 0, 0.1);
|
||||||
|
|
||||||
|
$group-alert-color: #774f7e;
|
||||||
|
|
||||||
$preview-bar-bg-color: #f7f7f7;
|
$preview-bar-bg-color: #f7f7f7;
|
||||||
|
|
||||||
// left-panel style muted accent color
|
// left-panel style muted accent color
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
/*
|
||||||
|
Copyright 2017 Michael Telatynski <7t3chguy@gmail.com>
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.mx_DevTools_RoomStateExplorer_button, .mx_DevTools_RoomStateExplorer_query {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
|
@ -176,8 +176,9 @@ describe('joining a room', function () {
|
||||||
|
|
||||||
return Promise.delay(1);
|
return Promise.delay(1);
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
// We've joined, expect this to false
|
// NB. we don't expect the 'joining' flag to reset at any point:
|
||||||
expect(roomView.state.joining).toBe(false);
|
// it will stay set and we observe whether we have Room object for
|
||||||
|
// the room and whether our member event shows we're joined.
|
||||||
|
|
||||||
// now send the room down the /sync pipe
|
// now send the room down the /sync pipe
|
||||||
httpBackend.when('GET', '/sync').
|
httpBackend.when('GET', '/sync').
|
||||||
|
|
Loading…
Reference in New Issue