From eae09728208a87734e72be03eff4216145a96f93 Mon Sep 17 00:00:00 2001 From: Erik Johnston Date: Mon, 20 Jul 2015 16:28:23 +0100 Subject: [PATCH] Add files. Add power levels to room settings --- skins/base/css/molecules/RoomSettings.css | 46 ++++++++ skins/base/views/molecules/RoomSettings.js | 128 +++++++++++++++++++++ skins/base/views/organisms/RoomView.js | 1 - src/controllers/molecules/RoomSettings.js | 25 ++++ 4 files changed, 199 insertions(+), 1 deletion(-) create mode 100644 skins/base/css/molecules/RoomSettings.css create mode 100644 skins/base/views/molecules/RoomSettings.js create mode 100644 src/controllers/molecules/RoomSettings.js diff --git a/skins/base/css/molecules/RoomSettings.css b/skins/base/css/molecules/RoomSettings.css new file mode 100644 index 0000000000..5e32529404 --- /dev/null +++ b/skins/base/css/molecules/RoomSettings.css @@ -0,0 +1,46 @@ +/* +Copyright 2015 OpenMarket 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_RoomSettings_power_levels { + display: table; + margin: 5px 0; +} + +.mx_RoomSettings_power_levels > div { + display: table-row; +} + +.mx_RoomSettings_power_levels > div > * { + display: table-cell; + + margin: 0 10px; +} + + +.mx_RoomSettings_user_levels { + display: table; + margin: 5px 0; +} + +.mx_RoomSettings_user_levels > div { + display: table-row; +} + +.mx_RoomSettings_user_levels > div > * { + display: table-cell; + + margin: 0 10px; +} diff --git a/skins/base/views/molecules/RoomSettings.js b/skins/base/views/molecules/RoomSettings.js new file mode 100644 index 0000000000..358764c64b --- /dev/null +++ b/skins/base/views/molecules/RoomSettings.js @@ -0,0 +1,128 @@ +/* +Copyright 2015 OpenMarket 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. +*/ + +'use strict'; + +var React = require('react'); +var MatrixClientPeg = require("../../../../src/MatrixClientPeg"); + +var RoomSettingsController = require("../../../../src/controllers/molecules/RoomSettings"); + +module.exports = React.createClass({ + displayName: 'RoomSettings', + mixins: [RoomSettingsController], + + getTopic: function() { + return this.refs.topic.getDOMNode().value; + }, + + getJoinRules: function() { + return this.refs.is_private.getDOMNode().checked ? "invite" : "public"; + }, + + getHistoryVisibility: function() { + return this.refs.share_history.getDOMNode().checked ? "shared" : "invited"; + }, + + render: function() { + var topic = this.props.room.currentState.getStateEvents('m.room.topic', ''); + if (topic) topic = topic.getContent().topic; + + var join_rule = this.props.room.currentState.getStateEvents('m.room.join_rules', ''); + if (join_rule) join_rule = join_rule.getContent().join_rule; + + var history_visibility = this.props.room.currentState.getStateEvents('m.room.history_visibility', ''); + if (history_visibility) history_visibility = history_visibility.getContent().history_visibility; + + var power_levels = this.props.room.currentState.getStateEvents('m.room.power_levels', ''); + power_levels = power_levels.getContent(); + + var ban_level = parseInt(power_levels.ban); + var kick_level = parseInt(power_levels.kick); + var redact_level = parseInt(power_levels.redact); + var invite_level = parseInt(power_levels.invite); + var send_level = parseInt(power_levels.events_default); + var state_level = parseInt(power_levels.state_default); + var default_user_level = parseInt(power_levels.users_default); + + var user_levels = power_levels.users; + + var user_id = MatrixClientPeg.get().credentials.userId; + + var current_user_level = user_levels[user_id]; + if (current_user_level == undefined) current_user_level = default_user_level; + + var power_level_level = power_levels.events["m.room.power_levels"]; + if (power_level_level == undefined) { + power_level_level = state_level; + } + + var can_change_levels = current_user_level >= power_level_level; + + return ( +
+