Merge branch 'develop' of https://github.com/vector-im/riot-web into develop
Conflicts: src/i18n/strings/eo.jsonpull/5777/head
commit
a6155c98ec
40
README.md
40
README.md
|
@ -128,7 +128,7 @@ You can configure the app by copying `config.sample.json` to
|
|||
1. `cross_origin_renderer_url`: URL to a static HTML page hosting code to help display
|
||||
encrypted file attachments. This MUST be hosted on a completely separate domain to
|
||||
anything else since it is used to isolate the privileges of file attachments to this
|
||||
domain. Default: `usercontent.riot.im`. This needs to contain v1.html from
|
||||
domain. Default: `https://usercontent.riot.im/v1.html`. This needs to contain v1.html from
|
||||
https://github.com/matrix-org/usercontent/blob/master/v1.html
|
||||
1. `piwik`: an object containing the following properties:
|
||||
1. `url`: The URL of the Piwik instance to use for collecting Analytics
|
||||
|
@ -319,31 +319,51 @@ For a developer guide, see the [translating dev doc](docs/translating-dev.md).
|
|||
Triaging issues
|
||||
===============
|
||||
|
||||
Issues will be triaged by the core team using the following primary set of tags:
|
||||
Issues will be triaged by the core team using the below set of tags.
|
||||
|
||||
priority:
|
||||
Tags are meant to be used in combination - e.g.:
|
||||
* P1 critical bug == really urgent stuff that should be next in the bugfixing todo list
|
||||
* "release blocker" == stuff which is blocking us from cutting the next release.
|
||||
* P1 feature type:voip == what VoIP features should we be working on next?
|
||||
|
||||
* P1: top priority; typically blocks releases
|
||||
priority: **compulsory**
|
||||
|
||||
* P1: top priority - i.e. pool of stuff which we should be working on next
|
||||
* P2: still need to fix, but lower than P1
|
||||
* P3: non-urgent
|
||||
* P4: intereseting idea - bluesky some day
|
||||
* P4: interesting idea - bluesky some day
|
||||
* P5: recorded for posterity/to avoid duplicates. No intention to resolves right now.
|
||||
|
||||
bug or feature:
|
||||
bug or feature: **compulsory**
|
||||
|
||||
* bug
|
||||
* feature
|
||||
|
||||
bug severity:
|
||||
bug severity: **compulsory, if bug**
|
||||
|
||||
* cosmetic - feature works functionally but UI/UX is broken
|
||||
* critical - whole app doesn't work
|
||||
* major - entire feature doesn't work
|
||||
* minor - partially broken feature (but still usable)
|
||||
* cosmetic - feature works functionally but UI/UX is broken
|
||||
|
||||
additional categories:
|
||||
types
|
||||
* type:* - refers to a particular part of the app; used to filter bugs
|
||||
on a given topic - e.g. VOIP, signup, timeline, etc.
|
||||
|
||||
additional categories (self-explanatory):
|
||||
|
||||
* release blocker
|
||||
* ui/ux (think of this as cosmetic)
|
||||
* network (specific to network conditions)
|
||||
* platform (platform specific)
|
||||
* platform specific
|
||||
* accessibility
|
||||
* maintenance
|
||||
* performance
|
||||
* i18n
|
||||
* blocked - whether this issue currently can't be progressed due to outside factors
|
||||
|
||||
community engagement
|
||||
* easy
|
||||
* hacktoberfest
|
||||
* bounty? - proposal to be included in a bounty programme
|
||||
* bounty - included in Status Open Bounty
|
||||
|
|
|
@ -24,7 +24,7 @@ import sdk from 'matrix-react-sdk';
|
|||
import dis from 'matrix-react-sdk/lib/dispatcher';
|
||||
import { MatrixClient } from 'matrix-js-sdk';
|
||||
import Analytics from 'matrix-react-sdk/lib/Analytics';
|
||||
import rate_limited_func from 'matrix-react-sdk/lib/ratelimitedfunc';
|
||||
import RateLimitedFunc from 'matrix-react-sdk/lib/ratelimitedfunc';
|
||||
import AccessibleButton from 'matrix-react-sdk/lib/components/views/elements/AccessibleButton';
|
||||
import { showGroupInviteDialog, showGroupAddRoomDialog } from 'matrix-react-sdk/lib/GroupAddressPicker';
|
||||
import GroupStoreCache from 'matrix-react-sdk/lib/stores/GroupStoreCache';
|
||||
|
@ -58,8 +58,8 @@ class HeaderButton extends React.Component {
|
|||
<div className="mx_RightPanel_headerButton_badge">
|
||||
{ this.props.badge ? this.props.badge : <span> </span> }
|
||||
</div>
|
||||
<TintableSvg src={this.props.iconSrc} width="25" height="25"/>
|
||||
{ this.props.isHighlighted ? <div className="mx_RightPanel_headerButton_highlight"></div> : <div/> }
|
||||
<TintableSvg src={this.props.iconSrc} width="25" height="25" />
|
||||
{ this.props.isHighlighted ? <div className="mx_RightPanel_headerButton_highlight" /> : <div /> }
|
||||
|
||||
</AccessibleButton>;
|
||||
}
|
||||
|
@ -184,18 +184,17 @@ module.exports = React.createClass({
|
|||
|
||||
onRoomStateMember: function(ev, state, member) {
|
||||
// redraw the badge on the membership list
|
||||
if (this.state.phase == this.Phase.RoomMemberList && member.roomId === this.props.roomId) {
|
||||
if (this.state.phase === this.Phase.RoomMemberList && member.roomId === this.props.roomId) {
|
||||
this._delayedUpdate();
|
||||
}
|
||||
else if (this.state.phase === this.Phase.RoomMemberInfo && member.roomId === this.props.roomId &&
|
||||
} else if (this.state.phase === this.Phase.RoomMemberInfo && member.roomId === this.props.roomId &&
|
||||
member.userId === this.state.member.userId) {
|
||||
// refresh the member info (e.g. new power level)
|
||||
this._delayedUpdate();
|
||||
}
|
||||
},
|
||||
|
||||
_delayedUpdate: new rate_limited_func(function() {
|
||||
this.forceUpdate();
|
||||
_delayedUpdate: new RateLimitedFunc(function() {
|
||||
this.forceUpdate(); // eslint-disable-line babel/no-invalid-this
|
||||
}, 500),
|
||||
|
||||
onAction: function(payload) {
|
||||
|
@ -266,22 +265,23 @@ module.exports = React.createClass({
|
|||
let inviteGroup;
|
||||
|
||||
let membersBadge;
|
||||
if ((this.state.phase == this.Phase.RoomMemberList || this.state.phase === this.Phase.RoomMemberInfo)
|
||||
let membersTitle = _t('Members');
|
||||
if ((this.state.phase === this.Phase.RoomMemberList || this.state.phase === this.Phase.RoomMemberInfo)
|
||||
&& this.props.roomId
|
||||
) {
|
||||
const cli = this.context.matrixClient;
|
||||
const room = cli.getRoom(this.props.roomId);
|
||||
let userIsInRoom;
|
||||
let isUserInRoom;
|
||||
if (room) {
|
||||
membersBadge = formatCount(room.getJoinedMembers().length);
|
||||
userIsInRoom = room.hasMembershipState(
|
||||
this.context.matrixClient.credentials.userId, 'join',
|
||||
);
|
||||
const numMembers = room.getJoinedMembers().length;
|
||||
membersTitle = _t('%(count)s Members', { count: numMembers });
|
||||
membersBadge = <div title={membersTitle}>{ formatCount(numMembers) }</div>;
|
||||
isUserInRoom = room.hasMembershipState(this.context.matrixClient.credentials.userId, 'join');
|
||||
}
|
||||
|
||||
if (userIsInRoom) {
|
||||
if (isUserInRoom) {
|
||||
inviteGroup =
|
||||
<AccessibleButton className="mx_RightPanel_invite" onClick={ this.onInviteButtonClick } >
|
||||
<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>
|
||||
|
@ -292,13 +292,13 @@ module.exports = React.createClass({
|
|||
|
||||
const isPhaseGroup = [
|
||||
this.Phase.GroupMemberInfo,
|
||||
this.Phase.GroupMemberList
|
||||
this.Phase.GroupMemberList,
|
||||
].includes(this.state.phase);
|
||||
|
||||
let headerButtons = [];
|
||||
if (this.props.roomId) {
|
||||
headerButtons = [
|
||||
<HeaderButton key="_membersButton" title={_t('Members')} iconSrc="img/icons-people.svg"
|
||||
<HeaderButton key="_membersButton" title={membersTitle} iconSrc="img/icons-people.svg"
|
||||
isHighlighted={[this.Phase.RoomMemberList, this.Phase.RoomMemberInfo].includes(this.state.phase)}
|
||||
clickPhase={this.Phase.RoomMemberList}
|
||||
badge={membersBadge}
|
||||
|
@ -336,54 +336,54 @@ module.exports = React.createClass({
|
|||
// 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") } aria-label={ _t("Hide panel") } onClick={ this.onCollapseClick }
|
||||
title={_t("Hide panel")} aria-label={_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>,
|
||||
);
|
||||
}
|
||||
|
||||
let panel = <div />;
|
||||
if (!this.props.collapsed) {
|
||||
if (this.props.roomId && this.state.phase == this.Phase.RoomMemberList) {
|
||||
if (this.props.roomId && this.state.phase === this.Phase.RoomMemberList) {
|
||||
panel = <MemberList roomId={this.props.roomId} key={this.props.roomId} />;
|
||||
} else if (this.props.groupId && this.state.phase == this.Phase.GroupMemberList) {
|
||||
} else if (this.props.groupId && this.state.phase === this.Phase.GroupMemberList) {
|
||||
panel = <GroupMemberList groupId={this.props.groupId} key={this.props.groupId} />;
|
||||
} else if (this.state.phase === this.Phase.GroupRoomList) {
|
||||
panel = <GroupRoomList groupId={this.props.groupId} key={this.props.groupId} />;
|
||||
} else if (this.state.phase == this.Phase.RoomMemberInfo) {
|
||||
} else if (this.state.phase === this.Phase.RoomMemberInfo) {
|
||||
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.GroupMemberInfo) {
|
||||
panel = <GroupMemberInfo
|
||||
groupMember={this.state.member}
|
||||
groupId={this.props.groupId}
|
||||
key={this.state.member.user_id} />;
|
||||
} else if (this.state.phase == this.Phase.GroupRoomInfo) {
|
||||
} else if (this.state.phase === this.Phase.GroupRoomInfo) {
|
||||
panel = <GroupRoomInfo
|
||||
groupRoomId={this.state.groupRoomId}
|
||||
groupId={this.props.groupId}
|
||||
key={this.state.groupRoomId} />;
|
||||
} else if (this.state.phase == this.Phase.NotificationPanel) {
|
||||
} else if (this.state.phase === this.Phase.NotificationPanel) {
|
||||
panel = <NotificationPanel />;
|
||||
} else if (this.state.phase == this.Phase.FilePanel) {
|
||||
} else if (this.state.phase === this.Phase.FilePanel) {
|
||||
panel = <FilePanel roomId={this.props.roomId} />;
|
||||
}
|
||||
}
|
||||
|
||||
if (!panel) {
|
||||
panel = <div className="mx_RightPanel_blank"></div>;
|
||||
panel = <div className="mx_RightPanel_blank" />;
|
||||
}
|
||||
|
||||
if (this.props.groupId && this.state.isUserPrivilegedInGroup) {
|
||||
inviteGroup = isPhaseGroup ? (
|
||||
<AccessibleButton className="mx_RightPanel_invite" onClick={ this.onInviteButtonClick } >
|
||||
<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 community') }</div>
|
||||
</AccessibleButton>
|
||||
) : (
|
||||
<AccessibleButton className="mx_RightPanel_invite" onClick={ this.onInviteButtonClick } >
|
||||
<AccessibleButton className="mx_RightPanel_invite" onClick={this.onInviteButtonClick}>
|
||||
<div className="mx_RightPanel_icon" >
|
||||
<TintableSvg src="img/icons-room-add.svg" width="35" height="35" />
|
||||
</div>
|
||||
|
@ -392,19 +392,16 @@ module.exports = React.createClass({
|
|||
);
|
||||
}
|
||||
|
||||
let classes = classNames(
|
||||
"mx_RightPanel", "mx_fadable",
|
||||
{
|
||||
"collapsed": this.props.collapsed,
|
||||
"mx_fadable_faded": this.props.disabled,
|
||||
}
|
||||
);
|
||||
const classes = classNames("mx_RightPanel", "mx_fadable", {
|
||||
"collapsed": this.props.collapsed,
|
||||
"mx_fadable_faded": this.props.disabled,
|
||||
});
|
||||
|
||||
return (
|
||||
<aside className={classes}>
|
||||
<div className="mx_RightPanel_header">
|
||||
<div className="mx_RightPanel_headerButtonGroup">
|
||||
{headerButtons}
|
||||
{ headerButtons }
|
||||
</div>
|
||||
</div>
|
||||
{ panel }
|
||||
|
|
|
@ -16,14 +16,17 @@ limitations under the License.
|
|||
|
||||
'use strict';
|
||||
|
||||
var React = require('react');
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import SyntaxHighlight from '../views/elements/SyntaxHighlight';
|
||||
|
||||
|
||||
module.exports = React.createClass({
|
||||
displayName: 'ViewSource',
|
||||
|
||||
propTypes: {
|
||||
content: React.PropTypes.object.isRequired,
|
||||
onFinished: React.PropTypes.func.isRequired,
|
||||
content: PropTypes.object.isRequired,
|
||||
onFinished: PropTypes.func.isRequired,
|
||||
},
|
||||
|
||||
componentDidMount: function() {
|
||||
|
@ -45,9 +48,9 @@ module.exports = React.createClass({
|
|||
render: function() {
|
||||
return (
|
||||
<div className="mx_ViewSource">
|
||||
<pre>
|
||||
{JSON.stringify(this.props.content, null, 2)}
|
||||
</pre>
|
||||
<SyntaxHighlight className="json">
|
||||
{ JSON.stringify(this.props.content, null, 2) }
|
||||
</SyntaxHighlight>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -275,7 +275,7 @@ module.exports = React.createClass({
|
|||
<div className={ alertMeClasses } onClick={this._onClickAlertMe} >
|
||||
<img className="mx_RoomTileContextMenu_notif_activeIcon" src="img/notif-active.svg" width="12" height="12" />
|
||||
<img className="mx_RoomTileContextMenu_notif_icon mx_filterFlipColor" src="img/icon-context-mute-off-copy.svg" width="16" height="12" />
|
||||
{ _t('All messages (loud)') }
|
||||
{ _t('All messages (noisy)') }
|
||||
</div>
|
||||
<div className={ allNotifsClasses } onClick={this._onClickAllNotifs} >
|
||||
<img className="mx_RoomTileContextMenu_notif_activeIcon" src="img/notif-active.svg" width="12" height="12" />
|
||||
|
|
|
@ -17,6 +17,7 @@ limitations under the License.
|
|||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import sdk from 'matrix-react-sdk';
|
||||
import SyntaxHighlight from '../elements/SyntaxHighlight';
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
import MatrixClientPeg from 'matrix-react-sdk/lib/MatrixClientPeg';
|
||||
|
||||
|
@ -244,24 +245,22 @@ class SendAccountData extends GenericEditor {
|
|||
class FilteredList extends React.Component {
|
||||
static propTypes = {
|
||||
children: PropTypes.any,
|
||||
query: PropTypes.string,
|
||||
onChange: PropTypes.func,
|
||||
};
|
||||
|
||||
constructor(props, context) {
|
||||
super(props, context);
|
||||
this.onQuery = this.onQuery.bind(this);
|
||||
|
||||
this.state = {
|
||||
query: '',
|
||||
};
|
||||
}
|
||||
|
||||
onQuery(ev) {
|
||||
this.setState({ query: ev.target.value });
|
||||
if (this.props.onChange) this.props.onChange(ev.target.value);
|
||||
}
|
||||
|
||||
filterChildren() {
|
||||
if (this.state.query) {
|
||||
const lowerQuery = this.state.query.toLowerCase();
|
||||
if (this.props.query) {
|
||||
const lowerQuery = this.props.query.toLowerCase();
|
||||
return this.props.children.filter((child) => child.key.toLowerCase().includes(lowerQuery));
|
||||
}
|
||||
return this.props.children;
|
||||
|
@ -271,7 +270,7 @@ class FilteredList extends React.Component {
|
|||
return <div>
|
||||
<input size="64"
|
||||
onChange={this.onQuery}
|
||||
value={this.state.query}
|
||||
value={this.props.query}
|
||||
placeholder={_t('Filter results')}
|
||||
className="mx_TextInputDialog_input mx_DevTools_RoomStateExplorer_query" />
|
||||
{ this.filterChildren() }
|
||||
|
@ -295,11 +294,16 @@ class RoomStateExplorer extends DevtoolsComponent {
|
|||
|
||||
this.onBack = this.onBack.bind(this);
|
||||
this.editEv = this.editEv.bind(this);
|
||||
this.onQueryEventType = this.onQueryEventType.bind(this);
|
||||
this.onQueryStateKey = this.onQueryStateKey.bind(this);
|
||||
|
||||
this.state = {
|
||||
eventType: null,
|
||||
event: null,
|
||||
editing: false,
|
||||
|
||||
queryEventType: '',
|
||||
queryStateKey: '',
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -331,6 +335,14 @@ class RoomStateExplorer extends DevtoolsComponent {
|
|||
this.setState({ editing: true });
|
||||
}
|
||||
|
||||
onQueryEventType(filterEventType) {
|
||||
this.setState({ queryEventType: filterEventType });
|
||||
}
|
||||
|
||||
onQueryStateKey(filterStateKey) {
|
||||
this.setState({ queryStateKey: filterStateKey });
|
||||
}
|
||||
|
||||
render() {
|
||||
if (this.state.event) {
|
||||
if (this.state.editing) {
|
||||
|
@ -343,7 +355,9 @@ class RoomStateExplorer extends DevtoolsComponent {
|
|||
|
||||
return <div className="mx_ViewSource">
|
||||
<div className="mx_Dialog_content">
|
||||
<pre>{ JSON.stringify(this.state.event.event, null, 2) }</pre>
|
||||
<SyntaxHighlight className="json">
|
||||
{ JSON.stringify(this.state.event.event, null, 2) }
|
||||
</SyntaxHighlight>
|
||||
</div>
|
||||
<div className="mx_Dialog_buttons">
|
||||
<button onClick={this.onBack}>{ _t('Back') }</button>
|
||||
|
@ -352,41 +366,47 @@ class RoomStateExplorer extends DevtoolsComponent {
|
|||
</div>;
|
||||
}
|
||||
|
||||
const rows = [];
|
||||
let list = null;
|
||||
|
||||
const classes = 'mx_DevTools_RoomStateExplorer_button';
|
||||
if (this.state.eventType === null) {
|
||||
Object.keys(this.roomStateEvents).forEach((evType) => {
|
||||
const stateGroup = this.roomStateEvents[evType];
|
||||
const stateKeys = Object.keys(stateGroup);
|
||||
list = <FilteredList query={this.state.queryEventType} onChange={this.onQueryEventType}>
|
||||
{
|
||||
Object.keys(this.roomStateEvents).map((evType) => {
|
||||
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]]);
|
||||
let onClickFn;
|
||||
if (stateKeys.length > 1) {
|
||||
onClickFn = this.browseEventType(evType);
|
||||
} else if (stateKeys.length === 1) {
|
||||
onClickFn = this.onViewSourceClick(stateGroup[stateKeys[0]]);
|
||||
}
|
||||
|
||||
return <button className={classes} key={evType} onClick={onClickFn}>
|
||||
{ evType }
|
||||
</button>;
|
||||
})
|
||||
}
|
||||
|
||||
rows.push(<button className={classes} key={evType} onClick={onClickFn}>
|
||||
{ evType }
|
||||
</button>);
|
||||
});
|
||||
</FilteredList>;
|
||||
} else {
|
||||
const evType = this.state.eventType;
|
||||
const stateGroup = this.roomStateEvents[evType];
|
||||
Object.keys(stateGroup).forEach((stateKey) => {
|
||||
const ev = stateGroup[stateKey];
|
||||
rows.push(<button className={classes} key={stateKey} onClick={this.onViewSourceClick(ev)}>
|
||||
{ stateKey }
|
||||
</button>);
|
||||
});
|
||||
const stateGroup = this.roomStateEvents[this.state.eventType];
|
||||
|
||||
list = <FilteredList query={this.state.queryStateKey} onChange={this.onQueryStateKey}>
|
||||
{
|
||||
Object.keys(stateGroup).map((stateKey) => {
|
||||
const ev = stateGroup[stateKey];
|
||||
return <button className={classes} key={stateKey} onClick={this.onViewSourceClick(ev)}>
|
||||
{ stateKey }
|
||||
</button>;
|
||||
})
|
||||
}
|
||||
</FilteredList>;
|
||||
}
|
||||
|
||||
return <div>
|
||||
<div className="mx_Dialog_content">
|
||||
<FilteredList>
|
||||
{ rows }
|
||||
</FilteredList>
|
||||
{ list }
|
||||
</div>
|
||||
<div className="mx_Dialog_buttons">
|
||||
<button onClick={this.onBack}>{ _t('Back') }</button>
|
||||
|
@ -408,11 +428,14 @@ class AccountDataExplorer extends DevtoolsComponent {
|
|||
this.onBack = this.onBack.bind(this);
|
||||
this.editEv = this.editEv.bind(this);
|
||||
this._onChange = this._onChange.bind(this);
|
||||
this.onQueryEventType = this.onQueryEventType.bind(this);
|
||||
|
||||
this.state = {
|
||||
isRoomAccountData: false,
|
||||
event: null,
|
||||
editing: false,
|
||||
|
||||
queryEventType: '',
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -448,6 +471,10 @@ class AccountDataExplorer extends DevtoolsComponent {
|
|||
this.setState({ editing: true });
|
||||
}
|
||||
|
||||
onQueryEventType(queryEventType) {
|
||||
this.setState({ queryEventType });
|
||||
}
|
||||
|
||||
render() {
|
||||
if (this.state.event) {
|
||||
if (this.state.editing) {
|
||||
|
@ -459,7 +486,9 @@ class AccountDataExplorer extends DevtoolsComponent {
|
|||
|
||||
return <div className="mx_ViewSource">
|
||||
<div className="mx_Dialog_content">
|
||||
<pre>{ JSON.stringify(this.state.event.event, null, 2) }</pre>
|
||||
<SyntaxHighlight className="json">
|
||||
{ JSON.stringify(this.state.event.event, null, 2) }
|
||||
</SyntaxHighlight>
|
||||
</div>
|
||||
<div className="mx_Dialog_buttons">
|
||||
<button onClick={this.onBack}>{ _t('Back') }</button>
|
||||
|
@ -482,7 +511,7 @@ class AccountDataExplorer extends DevtoolsComponent {
|
|||
|
||||
return <div>
|
||||
<div className="mx_Dialog_content">
|
||||
<FilteredList>
|
||||
<FilteredList query={this.state.queryEventType} onChange={this.onQueryEventType}>
|
||||
{ rows }
|
||||
</FilteredList>
|
||||
</div>
|
||||
|
|
|
@ -0,0 +1,53 @@
|
|||
/*
|
||||
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 PropTypes from 'prop-types';
|
||||
import {highlightBlock} from 'highlight.js';
|
||||
|
||||
export default class SyntaxHighlight extends React.Component {
|
||||
static propTypes = {
|
||||
className: PropTypes.string,
|
||||
children: PropTypes.node,
|
||||
};
|
||||
|
||||
constructor(props, context) {
|
||||
super(props, context);
|
||||
|
||||
this._ref = this._ref.bind(this);
|
||||
}
|
||||
|
||||
// componentDidUpdate used here for reusability
|
||||
// componentWillReceiveProps fires too early to call highlightBlock on.
|
||||
componentDidUpdate() {
|
||||
if (this._el) highlightBlock(this._el);
|
||||
}
|
||||
|
||||
// call componentDidUpdate because _ref is fired on initial render
|
||||
// which does not fire componentDidUpdate
|
||||
_ref(el) {
|
||||
this._el = el;
|
||||
this.componentDidUpdate();
|
||||
}
|
||||
|
||||
render() {
|
||||
const { className, children } = this.props;
|
||||
|
||||
return <pre className={`${className} mx_SyntaxHighlight`} ref={this._ref}>
|
||||
<code>{ children }</code>
|
||||
</pre>;
|
||||
}
|
||||
}
|
|
@ -8,7 +8,7 @@
|
|||
"All Rooms": "كل الغُرف",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">متصفح سافاري</a> و <a href=\"http://opera.com\">متصفح أوبرا</a> يعملان أيضاً.",
|
||||
"Add an email address above to configure email notifications": "أضف بريداً إلكترونياً أعلاه من أجل تعديل إعدادت تنبيهات البريد الإلكتروني",
|
||||
"All messages (loud)": "كل الرسائل (صوت مرتفع)",
|
||||
"All messages (noisy)": "كل الرسائل (صوت مرتفع)",
|
||||
"All notifications are currently disabled for all targets.": "كل التنبيهات غير مفعلة حالياً للجميع.",
|
||||
"An error occurred whilst saving your email notification preferences.": "حدث خطأ ما خلال حفظ إعدادات التنبيهات للبريد الإلكتروني.",
|
||||
"Call invitation": "دعوة لمحادثة",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"Add an email address above to configure email notifications": "Дадайце адрас электроннай пошты вышэй, каб наладзіць апавяшчэнні",
|
||||
"All messages": "Усе паведамленні",
|
||||
"All messages (loud)": "Усе паведамленні (гучна)",
|
||||
"All messages (noisy)": "Усе паведамленні (гучна)",
|
||||
"All notifications are currently disabled for all targets.": "Усе апавяшчэнні ў цяперашні час адключаныя для ўсіх мэтаў.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Адбылася памылка падчас захавання налады апавяшчэнняў па электроннай пошце.",
|
||||
"Cancel Sending": "Адмяніць адпраўку",
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
"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)",
|
||||
"All messages (noisy)": "Tots els missatges (sorollós)",
|
||||
"Mentions only": "Només mencions",
|
||||
"Mute": "Silencia",
|
||||
"Direct Chat": "Xat directe",
|
||||
|
|
|
@ -42,7 +42,7 @@
|
|||
"Messages sent by bot": "Zprávy poslané robotem",
|
||||
"more": "více",
|
||||
"Mute": "Ztlumit",
|
||||
"All messages (loud)": "Všechny zprávy (hlasitě)",
|
||||
"All messages (noisy)": "Všechny zprávy (hlasitě)",
|
||||
"Couldn't load home page": "Nepodařilo se nahrát úvodní stránku",
|
||||
"All notifications are currently disabled for all targets.": "Veškeré notifikace jsou aktuálně pro všechny cíle vypnuty.",
|
||||
"Cancel Sending": "Zrušit odesílání",
|
||||
|
|
|
@ -62,7 +62,7 @@
|
|||
"On": "An",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Du hast sie eventuell auf einem anderen Matrix-Client und nicht in Riot konfiguriert. Sie können in Riot nicht verändert werden, gelten aber trotzdem",
|
||||
"All messages": "Alle Nachrichten",
|
||||
"All messages (loud)": "Alle Nachrichten (laut)",
|
||||
"All messages (noisy)": "Alle Nachrichten (laut)",
|
||||
"Cancel Sending": "Senden abbrechen",
|
||||
"Close": "Schließen",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Soll der Raum-Alias %(alias)s gelöscht und der %(name)s aus dem Verzeichnis entfernt werden?",
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
"Collecting app version information": "Συγκέντρωση πληροφοριών σχετικά με την έκδοση της εφαρμογής",
|
||||
"customServer_text": "Μπορείτε να χρησιμοποιήσετε τις προσαρμοσμένες ρυθμίσεις για να εισέλθετε σε άλλους διακομιστές Matrix επιλέγοντας μια διαφορετική διεύθυνση για το διακομιστή.<br/> Αυτό σας επιτρέπει να χρησιμοποιήσετε την εφαρμογή Riot με έναν υπάρχοντα λογαριασμό σε διαφορετικό διακομιστή.<br/><br/>Επίσης μπορείτε να επιλέξετε ένα διαφορετικό διακομιστή ταυτότητας αλλά δεν θα έχετε τη δυνατότητα να προσκαλέσετε άλλους χρήστες ή να σας προσκαλέσουν μέσω μηνυμάτων ηλεκτρονικής αλληλογραφίας.",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s μέσω %(browserName)s σε %(osName)s",
|
||||
"All messages (loud)": "Όλα τα μηνύματα (δυνατά)",
|
||||
"All messages (noisy)": "Όλα τα μηνύματα (δυνατά)",
|
||||
"delete the alias.": "διέγραψε το ψευδώνυμο.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Διαγραφή του ψευδώνυμου %(alias)s και αφαίρεση του %(name)s από το ευρετήριο;",
|
||||
"Dismiss": "Απόρριψη",
|
||||
|
|
|
@ -137,7 +137,7 @@
|
|||
"Failed to set Direct Message status of room": "Failed to set Direct Message status of room",
|
||||
"unknown error code": "unknown error code",
|
||||
"Failed to forget room %(errCode)s": "Failed to forget room %(errCode)s",
|
||||
"All messages (loud)": "All messages (loud)",
|
||||
"All messages (noisy)": "All messages (noisy)",
|
||||
"All messages": "All messages",
|
||||
"Mentions only": "Mentions only",
|
||||
"Mute": "Mute",
|
||||
|
@ -158,6 +158,8 @@
|
|||
"Register": "Register",
|
||||
"Invite to this room": "Invite to this room",
|
||||
"Members": "Members",
|
||||
"%(count)s Members|other": "%(count)s Members",
|
||||
"%(count)s Members|one": "%(count)s Member",
|
||||
"Files": "Files",
|
||||
"Notifications": "Notifications",
|
||||
"Rooms": "Rooms",
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
"Add an email address above to configure email notifications": "Add an email address above to configure email notifications",
|
||||
"Advanced notification settings": "Advanced notification settings",
|
||||
"All messages": "All messages",
|
||||
"All messages (loud)": "All messages (loud)",
|
||||
"All messages (noisy)": "All messages (noisy)",
|
||||
"All Rooms": "All Rooms",
|
||||
"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 while saving your email notification preferences.",
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
{
|
||||
"A new version of Riot is available.": "Nova versio de Riot haveblas.",
|
||||
"All messages": "Ĉiuj mesaĝoj",
|
||||
"All messages (loud)": "Ĉiuj mesaĝoj (laŭte)",
|
||||
"All Rooms": "Ĉiuj ĉambroj",
|
||||
"All messages (noisy)": "Ĉiuj mesaĝoj (lauta)",
|
||||
"All Rooms": "Ĉiuj babilejoj",
|
||||
"Cancel": "Nuligi",
|
||||
"delete the alias.": "forigi la kromnomon.",
|
||||
"Describe your problem here.": "Priskribu vian problemon ĉi tie.",
|
||||
|
|
|
@ -135,7 +135,7 @@
|
|||
"You have successfully set a password and an email address!": "¡Has establecido una nueva contraseña y dirección de correo electrónico!",
|
||||
"You have successfully set a password!": "¡Has establecido una nueva contraseña!",
|
||||
"%(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 (noisy)": "Todos los mensajes (ruidoso)",
|
||||
"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 logs": "Recolectando registros",
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
"Add an email address above to configure email notifications": "Gehitu e-mail helbide bat goian e-mail bidezko jakinarazpenak konfiguratzeko",
|
||||
"Advanced notification settings": "Jakinarazpen aurreratuen ezarpenak",
|
||||
"All messages": "Mezu guztiak",
|
||||
"All messages (loud)": "Mezu guztiak (ozen)",
|
||||
"All messages (noisy)": "Mezu guztiak (ozen)",
|
||||
"All Rooms": "Gela guztiak",
|
||||
"All notifications are currently disabled for all targets.": "Une honetan jakinarazpen guztiak helburu guztietarako desgaituta daude.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Errore bat gertatu da zure e-mail bidezko jakinarazpenen hobespenak gordetzean.",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"A new version of Riot is available.": "نسخهی جدید از رایوت موجود است.",
|
||||
"All messages": "همهی پیامها",
|
||||
"All messages (loud)": "همهی پیامها(بلند)",
|
||||
"All messages (noisy)": "همهی پیامها(بلند)",
|
||||
"All Rooms": "همهی گپها",
|
||||
"Cancel Sending": "فرستادن را لغو کن",
|
||||
"Changelog": "تغییراتِ بهوجودآمده",
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
"Add an email address above to configure email notifications": "Lisää sähköpostiosoite yllä saadaksesi ilmoituksia sähköpostiisi",
|
||||
"Advanced notification settings": "Lisäasetukset ilmoituksille",
|
||||
"All messages": "Kaikki viestit",
|
||||
"All messages (loud)": "Kaikki viestit (äänekkäästi)",
|
||||
"All messages (noisy)": "Kaikki viestit (äänekkäästi)",
|
||||
"All Rooms": "Kaikki huoneet",
|
||||
"All notifications are currently disabled for all targets.": "Kaikki ilmoitukset on kytketty pois kaikilta kohteilta.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Sähköposti-ilmoitusasetuksia tallettaessa tapahtui virhe.",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"Add an email address above to configure email notifications": "Ajouter une adresse e-mail pour la configuration des notifications par e-mail",
|
||||
"All messages": "Tous les messages",
|
||||
"All messages (loud)": "Tous les messages (fort)",
|
||||
"All messages (noisy)": "Tous les messages (fort)",
|
||||
"All notifications are currently disabled for all targets.": "Toutes les notifications sont désactivées pour tous les appareils.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Une erreur est survenue lors de la sauvegarde de vos préférences de notification par e-mail.",
|
||||
"Cancel Sending": "Annuler l'envoi",
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
"Add an email address above to configure email notifications": "Engada un enderezo de correo electrónico para configurar as notificacións",
|
||||
"Advanced notification settings": "Axustes avanzados de notificación",
|
||||
"All messages": "Todas as mensaxes",
|
||||
"All messages (loud)": "Todas as mensaxes (alto)",
|
||||
"All messages (noisy)": "Todas as mensaxes (alto)",
|
||||
"All Rooms": "Todas as Salas",
|
||||
"All notifications are currently disabled for all targets.": "Todas as notificacións están deshabilitadas para todos os destinos.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Algo fallou mentras se gardaban as súas preferencias de notificaicón.",
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
"Add an email address above to configure email notifications": "הוסף כתובת דואר אלקטורני למעלה בכדי להגדיר התראות",
|
||||
"Advanced notification settings": "הגדרות מתקדמות להתראות",
|
||||
"All messages": "כל ההודעות",
|
||||
"All messages (loud)": "כל ההודעות (צעקה)",
|
||||
"All messages (noisy)": "כל ההודעות (צעקה)",
|
||||
"All Rooms": "כל החדרים",
|
||||
"All notifications are currently disabled for all targets.": "התראות מנוטרלות לכלל המערכת.",
|
||||
"An error occurred whilst saving your email notification preferences.": "קרתה שגיאה בזמן שמירת הגדרות התראה באמצעות הדואר האלקטרוני.",
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"Add an email address above to configure email notifications": "E-mail értesítés beállításához írd be az e-mail címed",
|
||||
"Advanced notification settings": "Haladó értesítési beállítások",
|
||||
"All messages": "Minden üzenet",
|
||||
"All messages (loud)": "Minden üzenet (hangos)",
|
||||
"All messages (noisy)": "Minden üzenet (hangos)",
|
||||
"All notifications are currently disabled for all targets.": "Minden céleszközön minden értesítés tiltva van.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Hiba történt az e-mail értesítés beállításánál.",
|
||||
"Call invitation": "Hívás meghívó",
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
"Add an email address above to configure email notifications": "Tambahkan alamat email di atas untuk konfigurasi notifikasi email",
|
||||
"Advanced notification settings": "Pengaturan notifikasi lanjutan",
|
||||
"All messages": "Semua pesan",
|
||||
"All messages (loud)": "Semua pesan (keras)",
|
||||
"All messages (noisy)": "Semua pesan (keras)",
|
||||
"All Rooms": "Semua Ruang",
|
||||
"All notifications are currently disabled for all targets.": "Semua notifikasi saat ini dinonaktifkan untuk semua target.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Terjadi kesalahan saat menyimpan preferensi notifikasi email Anda.",
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
"Add an email address above to configure email notifications": "Aggiungi un indirizzo email sopra per configurare le notifiche via email",
|
||||
"Advanced notification settings": "Impostazioni di notifica avanzate",
|
||||
"All messages": "Tutti i messaggi",
|
||||
"All messages (loud)": "Tutti i messaggi (rumoroso)",
|
||||
"All messages (noisy)": "Tutti i messaggi (rumoroso)",
|
||||
"All Rooms": "Tutte le stanze",
|
||||
"An error occurred whilst saving your email notification preferences.": "Si è verificato un errore durante il salvataggio delle tue preferenze sulle notifiche email.",
|
||||
"Call invitation": "Invito ad una chiamata",
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"All messages": "全ての発言",
|
||||
"All messages (loud)": "全ての発言(通知音あり)",
|
||||
"All messages (noisy)": "全ての発言(通知音あり)",
|
||||
"Cancel": "取消",
|
||||
"Close": "閉じる",
|
||||
"Direct Chat": "対話",
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
"Add an email address above to configure email notifications": "이메일 알림을 설정하기 위해 이메일 주소를 추가해주세요",
|
||||
"Advanced notification settings": "고급 알림 설정",
|
||||
"All messages": "모든 메시지",
|
||||
"All messages (loud)": "모든 메시지 (크게)",
|
||||
"All messages (noisy)": "모든 메시지 (크게)",
|
||||
"All Rooms": "모든 방",
|
||||
"All notifications are currently disabled for all targets.": "현재 모든 알림이 모든 상대에게서 꺼졌어요.",
|
||||
"An error occurred whilst saving your email notification preferences.": "이메일 알림을 설정하다가 오류가 일어났어요.",
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
"Add an email address above to configure email notifications": "Pievieno augšā epasta adresi, lai konfigurētu epasta notifikāciju paziņojumus",
|
||||
"Advanced notification settings": "Īpašie notifikāciju uzstādījumi",
|
||||
"All messages": "Visas ziņas",
|
||||
"All messages (loud)": "Visas ziņas (skaļi)",
|
||||
"All messages (noisy)": "Visas ziņas (skaļi)",
|
||||
"All Rooms": "Visas istabas",
|
||||
"All notifications are currently disabled for all targets.": "Visi notifikāciju paziņojumi ir atspējoti visiem saņēmējiem.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Radās kļūda saglabājot tavus epasta notifikāciju ziņu uzstādījumus.",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"Add an email address above to configure email notifications": "ഇ മെയില് അറിയിപ്പുകൾ ലഭിക്കാന് മുകളില് ഇ-മെയില് വിലാസം നല്കൂ",
|
||||
"All messages": "എല്ലാ സന്ദേശങ്ങളും",
|
||||
"All messages (loud)": "എല്ലാ സന്ദേശങ്ങളും (ഉച്ചത്തിൽ)",
|
||||
"All messages (noisy)": "എല്ലാ സന്ദേശങ്ങളും (ഉച്ചത്തിൽ)",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(osName)sല് %(browserName)s വഴി %(appName)s",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">സഫാരിയിലും</a>പിന്നെ <a href=\"http://opera.com\">ഓപ്പേറയിലും</a>പ്രവര്ത്തിക്കുന്നു.",
|
||||
"A new version of Riot is available.": "റയട്ടിന്റെ ഒരു പുതിയ പതിപ്പ് ലഭ്യമാണ്.",
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"Add an email address above to configure email notifications": "Legg til en epost adresse for å sette opp epost varsling",
|
||||
"Advanced notification settings": "Avanserte varslingsinnstillinger",
|
||||
"All messages": "Alle meldinger",
|
||||
"All messages (loud)": "Alle meldinger (høy)",
|
||||
"All messages (noisy)": "Alle meldinger (høy)",
|
||||
"All notifications are currently disabled for all targets.": "Alle varsler er deaktivert for alle mottakere.",
|
||||
"An error occurred whilst saving your email notification preferences.": "En feil oppsto i forbindelse med lagring av epost varsel innstillinger.",
|
||||
"Cancel Sending": "Avbryt sending",
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"Add an email address above to configure email notifications": "Voeg een e-mailadres toe om e-mailmeldingen te ontvangen",
|
||||
"Advanced notification settings": "Geavanceerde meldingsinstellingen",
|
||||
"All messages": "Alle berichten",
|
||||
"All messages (loud)": "Alle berichten (luid)",
|
||||
"All messages (noisy)": "Alle berichten (luid)",
|
||||
"All notifications are currently disabled for all targets.": "Alle meldingen zijn momenteel uitgeschakeld voor alle doelen.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Er is een fout opgetreden tijdens het opslaan van uw e-mailmeldingsvoorkeuren.",
|
||||
"Call invitation": "Oproep-uitnodiging",
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
"Add an email address above to configure email notifications": "Dodaj adres e-mail powyżej, aby skonfigurować powiadomienia e-mailowe",
|
||||
"Advanced notification settings": "Zaawansowane ustawienia powiadomień",
|
||||
"All messages": "Wszystkie wiadomości",
|
||||
"All messages (loud)": "Wszystkie wiadomości (głośno)",
|
||||
"All messages (noisy)": "Wszystkie wiadomości (głośno)",
|
||||
"All Rooms": "Wszystkie pokoje",
|
||||
"All notifications are currently disabled for all targets.": "Wszystkie powiadomienia są obecnie wyłączone dla wszystkich celów.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Podczas zapisywania ustawień powiadomień e-mail wystąpił błąd.",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"Add an email address above to configure email notifications": "Insira um endereço de email no campo acima para configurar as notificações por email",
|
||||
"All messages": "Todas as mensagens",
|
||||
"All messages (loud)": "Todas as mensagens (alto)",
|
||||
"All messages (noisy)": "Todas as mensagens (alto)",
|
||||
"An error occurred whilst saving your email notification preferences.": "Ocorreu um erro ao guardar as suas preferências de notificação por email.",
|
||||
"Call invitation": "Convite para chamada",
|
||||
"Cancel Sending": "Cancelar o envio",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"Add an email address above to configure email notifications": "Insira um endereço de email no campo acima para configurar suas notificações por email",
|
||||
"All messages": "Todas as mensagens",
|
||||
"All messages (loud)": "Todas as mensagens (alto)",
|
||||
"All messages (noisy)": "Todas as mensagens (alto)",
|
||||
"An error occurred whilst saving your email notification preferences.": "Um erro ocorreu enquanto o sistema estava salvando suas preferências de notificação por email.",
|
||||
"Call invitation": "Convite para chamada",
|
||||
"Cancel Sending": "Cancelar o envio",
|
||||
|
|
|
@ -63,7 +63,7 @@
|
|||
"You are not receiving desktop notifications": "Вы не получаете уведомления на рабочем столе",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Возможно вы настроили их не в Riot, а в другом Matrix-клиенте. Настроить их в Riot не удастся, но они будут в нем применяться",
|
||||
"All messages": "Все сообщения",
|
||||
"All messages (loud)": "Все сообщения (со звуком)",
|
||||
"All messages (noisy)": "Все сообщения (со звуком)",
|
||||
"Cancel Sending": "Отменить отправку",
|
||||
"Close": "Закрыть",
|
||||
"Download this file": "Скачать этот файл",
|
||||
|
|
|
@ -135,7 +135,7 @@
|
|||
"Failed to set Direct Message status of room": "Nepodarilo sa nastaviť stav miestnosti priama konverzácia",
|
||||
"unknown error code": "neznámy kód chyby",
|
||||
"Failed to forget room %(errCode)s": "Nepodarilo sa zabudnuť miestnosť %(errCode)s",
|
||||
"All messages (loud)": "Všetky správy (hlučné)",
|
||||
"All messages (noisy)": "Všetky správy (hlučné)",
|
||||
"All messages": "Všetky správy",
|
||||
"Mentions only": "Len zmienky",
|
||||
"Mute": "Umlčať",
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"Add an email address above to configure email notifications": "Lägg till en epostadress här för att konfigurera epostaviseringar",
|
||||
"Advanced notification settings": "Avancerade aviseringsinställingar",
|
||||
"All messages": "Alla meddelanden",
|
||||
"All messages (loud)": "Alla meddelanden (högljudd)",
|
||||
"All messages (noisy)": "Alla meddelanden (högljudd)",
|
||||
"All notifications are currently disabled for all targets.": "Alla aviseringar är för tillfället avstängda för alla mål.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Ett fel uppstod då epostaviseringsinställningarna sparades.",
|
||||
"Call invitation": "Inbjudan till samtal",
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
"Add an email address above to configure email notifications": "மின்னஞ்சல் மூலம் அறிவிப்புகளை பெற உங்கள் மின்னஞ்சல் முகவரியை மேலே இணைக்கவும்",
|
||||
"Advanced notification settings": "மேம்பட்ட அறிவிப்பிற்கான அமைப்புகள்",
|
||||
"All messages": "அனைத்து செய்திகள்",
|
||||
"All messages (loud)": "அனைத்து செய்திகள் (உரக்க)",
|
||||
"All messages (noisy)": "அனைத்து செய்திகள் (உரக்க)",
|
||||
"All Rooms": "அனைத்து அறைகள்",
|
||||
"All notifications are currently disabled for all targets.": "அனைத்து இலக்குகளுக்கான அனைத்து அறிவுப்புகளும் தற்போது முடக்கி வைக்கப்பட்டுள்ளது.",
|
||||
"An error occurred whilst saving your email notification preferences.": "உங்கள் மின்னஞ்சல் அறிவிப்பு விருப்பங்களை சேமிப்பதில் ஏதோ பிழை ஏற்பட்டுள்ளது.",
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
"Add an email address above to configure email notifications": "ఇమెయిల్ ప్రకటనలను రూపశిల్పం చేయడానికి ఎగువ ఇమెయిల్ చిరునామాను జోడించండి",
|
||||
"Advanced notification settings": "ఆధునిక తాఖీదు అమరిక",
|
||||
"All messages": "అన్ని సందేశాలు",
|
||||
"All messages (loud)": "అన్ని సందేశాలు (గట్టిగ)",
|
||||
"All messages (noisy)": "అన్ని సందేశాలు (గట్టిగ)",
|
||||
"All Rooms": "అన్ని గదులు",
|
||||
"Call invitation": "మాట్లాడడానికి ఆహ్వానం",
|
||||
"Cancel Sending": "పంపడాన్ని ఆపేయండి",
|
||||
|
|
|
@ -81,7 +81,7 @@
|
|||
"Riot is not supported on mobile web. Install the app?": "Riot ไม่รองรับเว็บบนอุปกรณ์พกพา ติดตั้งแอป?",
|
||||
"Riot does not know how to join a room on this network": "Riot ไม่รู้วิธีเข้าร่วมห้องในเครือข่ายนี้",
|
||||
"Direct Chat": "แชทโดยตรง",
|
||||
"All messages (loud)": "ทุกข้อความ (เสียงดัง)",
|
||||
"All messages (noisy)": "ทุกข้อความ (เสียงดัง)",
|
||||
"Custom Server Options": "กำหนดเซิร์ฟเวอร์เอง",
|
||||
"Directory": "ไดเรกทอรี",
|
||||
"Enable audible notifications in web client": "เปิดใช้งานเสียงแจ้งเตือนบนเว็บไคลเอนต์",
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
"Add an email address above to configure email notifications": "E-posta bildirimlerini yapılandırmak için yukarıya bir e-posta adresi ekleyin",
|
||||
"Advanced notification settings": "Gelişmiş bildirim ayarları",
|
||||
"All messages": "Tüm mesajlar",
|
||||
"All messages (loud)": "Tüm mesajlar (uzun)",
|
||||
"All messages (noisy)": "Tüm mesajlar (uzun)",
|
||||
"All Rooms": "Tüm Odalar",
|
||||
"All notifications are currently disabled for all targets.": "Tüm bildirimler şu anda tüm hedefler için devre dışı bırakılmıştır.",
|
||||
"An error occurred whilst saving your email notification preferences.": "E-posta bildirim tercihlerinizi kaydetme işlemi sırasında bir hata oluştu.",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"A new version of Riot is available.": "Доступне оновлення для Riot.",
|
||||
"All messages": "Усі повідомлення",
|
||||
"All messages (loud)": "Усі повідомлення (гучно)",
|
||||
"All messages (noisy)": "Усі повідомлення (гучно)",
|
||||
"All Rooms": "Усі кімнати",
|
||||
"All notifications are currently disabled for all targets.": "Сповіщення для усіх цілей на даний момент вимкнені.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Під час збереження налаштувань сповіщень е-поштою трапилася помилка.",
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
"Add an email address above to configure email notifications": "请在上方输入电子邮件地址以接收邮件通知",
|
||||
"Advanced notification settings": "通知高级设置",
|
||||
"All messages": "全部消息",
|
||||
"All messages (loud)": "全部消息(高亮)",
|
||||
"All messages (noisy)": "全部消息(高亮)",
|
||||
"All Rooms": "全部聊天室",
|
||||
"All notifications are currently disabled for all targets.": "当前所有目标的通知均已禁用。",
|
||||
"An error occurred whilst saving your email notification preferences.": "保存邮件通知首选项设定时出现错误。",
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a> 與 <a href=\"http://opera.com\">Opera</a> 也能使用。",
|
||||
"Advanced notification settings": "進階通知設定",
|
||||
"All messages": "所有訊息",
|
||||
"All messages (loud)": "所有訊息(吵鬧)",
|
||||
"All messages (noisy)": "所有訊息(吵鬧)",
|
||||
"All Rooms": "所有的聊天室",
|
||||
"Call invitation": "通話邀請",
|
||||
"Cancel": "取消",
|
||||
|
|
|
@ -96,6 +96,7 @@
|
|||
@import "./vector-web/views/elements/_ImageView.scss";
|
||||
@import "./vector-web/views/elements/_InlineSpinner.scss";
|
||||
@import "./vector-web/views/elements/_Spinner.scss";
|
||||
@import "./vector-web/views/elements/_SyntaxHighlight.scss";
|
||||
@import "./vector-web/views/globals/_MatrixToolbar.scss";
|
||||
@import "./vector-web/views/messages/_DateSeparator.scss";
|
||||
@import "./vector-web/views/messages/_MessageTimestamp.scss";
|
||||
|
|
|
@ -96,6 +96,10 @@ limitations under the License.
|
|||
line-height: 22px;
|
||||
}
|
||||
|
||||
.mx_EventTile_quote {
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.mx_EventTile_info .mx_EventTile_line {
|
||||
padding-left: 83px;
|
||||
}
|
||||
|
@ -115,7 +119,7 @@ limitations under the License.
|
|||
background-color: $event-selected-color;
|
||||
}
|
||||
|
||||
.mx_EventTile:hover .mx_EventTile_line,
|
||||
.mx_EventTile:hover .mx_EventTile_line:not(.mx_EventTile_quote),
|
||||
.mx_EventTile.menu .mx_EventTile_line
|
||||
{
|
||||
background-color: $event-selected-color;
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
/*
|
||||
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_SyntaxHighlight {
|
||||
/* inhibit hljs styling */
|
||||
background: none !important;
|
||||
color: $light-fg-color !important;
|
||||
}
|
Loading…
Reference in New Issue