mirror of https://github.com/vector-im/riot-web
Add settings base for Mjolnir rules
parent
57013f0523
commit
23383419e8
|
@ -45,6 +45,10 @@ limitations under the License.
|
||||||
mask-image: url('$(res)/img/feather-customised/flag.svg');
|
mask-image: url('$(res)/img/feather-customised/flag.svg');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mx_UserSettingsDialog_mjolnirIcon::before {
|
||||||
|
mask-image: url('$(res)/img/feather-customised/face.svg');
|
||||||
|
}
|
||||||
|
|
||||||
.mx_UserSettingsDialog_flairIcon::before {
|
.mx_UserSettingsDialog_flairIcon::before {
|
||||||
mask-image: url('$(res)/img/feather-customised/flair.svg');
|
mask-image: url('$(res)/img/feather-customised/flair.svg');
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Copyright 2019 New Vector Ltd
|
Copyright 2019 New Vector Ltd
|
||||||
|
Copyright 2019 The Matrix.org Foundation C.I.C.
|
||||||
|
|
||||||
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.
|
||||||
|
@ -29,12 +30,34 @@ import HelpUserSettingsTab from "../settings/tabs/user/HelpUserSettingsTab";
|
||||||
import FlairUserSettingsTab from "../settings/tabs/user/FlairUserSettingsTab";
|
import FlairUserSettingsTab from "../settings/tabs/user/FlairUserSettingsTab";
|
||||||
import sdk from "../../../index";
|
import sdk from "../../../index";
|
||||||
import SdkConfig from "../../../SdkConfig";
|
import SdkConfig from "../../../SdkConfig";
|
||||||
|
import MjolnirUserSettingsTab from "../settings/tabs/user/MjolnirUserSettingsTab";
|
||||||
|
|
||||||
export default class UserSettingsDialog extends React.Component {
|
export default class UserSettingsDialog extends React.Component {
|
||||||
static propTypes = {
|
static propTypes = {
|
||||||
onFinished: PropTypes.func.isRequired,
|
onFinished: PropTypes.func.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
|
||||||
|
this.state = {
|
||||||
|
mjolnirEnabled: SettingsStore.isFeatureEnabled("feature_mjolnir"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
componentDidMount(): void {
|
||||||
|
this._mjolnirWatcher = SettingsStore.watchSetting("feature_mjolnir", null, this._mjolnirChanged.bind(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
componentWillUnmount(): void {
|
||||||
|
SettingsStore.unwatchSetting(this._mjolnirWatcher);
|
||||||
|
}
|
||||||
|
|
||||||
|
_mjolnirChanged(settingName, roomId, atLevel, newValue) {
|
||||||
|
// We can cheat because we know what levels a feature is tracked at, and how it is tracked
|
||||||
|
this.setState({mjolnirEnabled: newValue});
|
||||||
|
}
|
||||||
|
|
||||||
_getTabs() {
|
_getTabs() {
|
||||||
const tabs = [];
|
const tabs = [];
|
||||||
|
|
||||||
|
@ -75,6 +98,13 @@ export default class UserSettingsDialog extends React.Component {
|
||||||
<LabsUserSettingsTab />,
|
<LabsUserSettingsTab />,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
if (this.state.mjolnirEnabled) {
|
||||||
|
tabs.push(new Tab(
|
||||||
|
_td("Ignored users"),
|
||||||
|
"mx_UserSettingsDialog_mjolnirIcon",
|
||||||
|
<MjolnirUserSettingsTab />,
|
||||||
|
));
|
||||||
|
}
|
||||||
tabs.push(new Tab(
|
tabs.push(new Tab(
|
||||||
_td("Help & About"),
|
_td("Help & About"),
|
||||||
"mx_UserSettingsDialog_helpIcon",
|
"mx_UserSettingsDialog_helpIcon",
|
||||||
|
|
|
@ -0,0 +1,74 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 The Matrix.org Foundation C.I.C.
|
||||||
|
|
||||||
|
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 {_t} from "../../../../../languageHandler";
|
||||||
|
const sdk = require("../../../../..");
|
||||||
|
|
||||||
|
export default class MjolnirUserSettingsTab extends React.Component {
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<div className="mx_SettingsTab">
|
||||||
|
<div className="mx_SettingsTab_heading">{_t("Ignored users")}</div>
|
||||||
|
<div className="mx_SettingsTab_section">
|
||||||
|
<div className='mx_SettingsTab_subsectionText'>
|
||||||
|
<span className='warning'>{_t("⚠ These settings are meant for advanced users.")}</span><br />
|
||||||
|
<br />
|
||||||
|
{_t(
|
||||||
|
"Add users and servers you want to ignore here. Use asterisks " +
|
||||||
|
"to have Riot match any characters. For example, <code>@bot:*</code> " +
|
||||||
|
"would ignore all users that have the name 'bot' on any server.",
|
||||||
|
{}, {code: (s) => <code>{s}</code>},
|
||||||
|
)}<br />
|
||||||
|
<br />
|
||||||
|
{_t(
|
||||||
|
"Ignoring people is done through ban lists which contain rules for " +
|
||||||
|
"who to ban. Subscribing to a ban list means the users/servers blocked by " +
|
||||||
|
"that list will be hidden from you."
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="mx_SettingsTab_section">
|
||||||
|
<span className="mx_SettingsTab_subheading">{_t("Personal ban list")}</span>
|
||||||
|
<div className='mx_SettingsTab_subsectionText'>
|
||||||
|
{_t(
|
||||||
|
"Your personal ban list holds all the users/servers you personally don't " +
|
||||||
|
"want to see messages from. After ignoring your first user/server, a new room " +
|
||||||
|
"will show up in your room list named 'My Ban List' - stay in this room to keep " +
|
||||||
|
"the ban list in effect.",
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
<p>TODO</p>
|
||||||
|
</div>
|
||||||
|
<div className="mx_SettingsTab_section">
|
||||||
|
<span className="mx_SettingsTab_subheading">{_t("Subscribed lists")}</span>
|
||||||
|
<div className='mx_SettingsTab_subsectionText'>
|
||||||
|
<span className='warning'>{_t("Subscribing to a ban list will cause you to join it!")}</span>
|
||||||
|
|
||||||
|
<span>{_t(
|
||||||
|
"If this isn't what you want, please use a different tool to ignore users.",
|
||||||
|
)}</span>
|
||||||
|
</div>
|
||||||
|
<p>TODO</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -335,6 +335,7 @@
|
||||||
"Render simple counters in room header": "Render simple counters in room header",
|
"Render simple counters in room header": "Render simple counters in room header",
|
||||||
"Multiple integration managers": "Multiple integration managers",
|
"Multiple integration managers": "Multiple integration managers",
|
||||||
"Use the new, consistent UserInfo panel for Room Members and Group Members": "Use the new, consistent UserInfo panel for Room Members and Group Members",
|
"Use the new, consistent UserInfo panel for Room Members and Group Members": "Use the new, consistent UserInfo panel for Room Members and Group Members",
|
||||||
|
"Try out new ways to ignore people (experimental)": "Try out new ways to ignore people (experimental)",
|
||||||
"Use the new, faster, composer for writing messages": "Use the new, faster, composer for writing messages",
|
"Use the new, faster, composer for writing messages": "Use the new, faster, composer for writing messages",
|
||||||
"Enable Emoji suggestions while typing": "Enable Emoji suggestions while typing",
|
"Enable Emoji suggestions while typing": "Enable Emoji suggestions while typing",
|
||||||
"Use compact timeline layout": "Use compact timeline layout",
|
"Use compact timeline layout": "Use compact timeline layout",
|
||||||
|
@ -637,6 +638,15 @@
|
||||||
"Access Token:": "Access Token:",
|
"Access Token:": "Access Token:",
|
||||||
"click to reveal": "click to reveal",
|
"click to reveal": "click to reveal",
|
||||||
"Labs": "Labs",
|
"Labs": "Labs",
|
||||||
|
"Ignored users": "Ignored users",
|
||||||
|
"⚠ These settings are meant for advanced users.": "⚠ These settings are meant for advanced users.",
|
||||||
|
"Add users and servers you want to ignore here. Use asterisks to have Riot match any characters. For example, <code>@bot:*</code> would ignore all users that have the name 'bot' on any server.": "Add users and servers you want to ignore here. Use asterisks to have Riot match any characters. For example, <code>@bot:*</code> would ignore all users that have the name 'bot' on any server.",
|
||||||
|
"Ignoring people is done through ban lists which contain rules for who to ban. Subscribing to a ban list means the users/servers blocked by that list will be hidden from you.": "Ignoring people is done through ban lists which contain rules for who to ban. Subscribing to a ban list means the users/servers blocked by that list will be hidden from you.",
|
||||||
|
"Personal ban list": "Personal ban list",
|
||||||
|
"Your personal ban list holds all the users/servers you personally don't want to see messages from. After ignoring your first user/server, a new room will show up in your room list named 'My Ban List' - stay in this room to keep the ban list in effect.": "Your personal ban list holds all the users/servers you personally don't want to see messages from. After ignoring your first user/server, a new room will show up in your room list named 'My Ban List' - stay in this room to keep the ban list in effect.",
|
||||||
|
"Subscribed lists": "Subscribed lists",
|
||||||
|
"Subscribing to a ban list will cause you to join it!": "Subscribing to a ban list will cause you to join it!",
|
||||||
|
"If this isn't what you want, please use a different tool to ignore users.": "If this isn't what you want, please use a different tool to ignore users.",
|
||||||
"Notifications": "Notifications",
|
"Notifications": "Notifications",
|
||||||
"Start automatically after system login": "Start automatically after system login",
|
"Start automatically after system login": "Start automatically after system login",
|
||||||
"Always show the window menu bar": "Always show the window menu bar",
|
"Always show the window menu bar": "Always show the window menu bar",
|
||||||
|
@ -654,7 +664,6 @@
|
||||||
"Cryptography": "Cryptography",
|
"Cryptography": "Cryptography",
|
||||||
"Device ID:": "Device ID:",
|
"Device ID:": "Device ID:",
|
||||||
"Device key:": "Device key:",
|
"Device key:": "Device key:",
|
||||||
"Ignored users": "Ignored users",
|
|
||||||
"Bulk options": "Bulk options",
|
"Bulk options": "Bulk options",
|
||||||
"Accept all %(invitedRooms)s invites": "Accept all %(invitedRooms)s invites",
|
"Accept all %(invitedRooms)s invites": "Accept all %(invitedRooms)s invites",
|
||||||
"Reject all %(invitedRooms)s invites": "Reject all %(invitedRooms)s invites",
|
"Reject all %(invitedRooms)s invites": "Reject all %(invitedRooms)s invites",
|
||||||
|
|
|
@ -126,6 +126,20 @@ export const SETTINGS = {
|
||||||
supportedLevels: LEVELS_FEATURE,
|
supportedLevels: LEVELS_FEATURE,
|
||||||
default: false,
|
default: false,
|
||||||
},
|
},
|
||||||
|
"feature_mjolnir": {
|
||||||
|
isFeature: true,
|
||||||
|
displayName: _td("Try out new ways to ignore people (experimental)"),
|
||||||
|
supportedLevels: LEVELS_FEATURE,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
"mjolnirRooms": {
|
||||||
|
supportedLevels: ['account'],
|
||||||
|
default: [],
|
||||||
|
},
|
||||||
|
"mjolnirPersonalRoom": {
|
||||||
|
supportedLevels: ['account'],
|
||||||
|
default: null,
|
||||||
|
},
|
||||||
"useCiderComposer": {
|
"useCiderComposer": {
|
||||||
displayName: _td("Use the new, faster, composer for writing messages"),
|
displayName: _td("Use the new, faster, composer for writing messages"),
|
||||||
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
|
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
|
||||||
|
|
Loading…
Reference in New Issue