add icon indicators for muted and blocked contacts

This commit is contained in:
or-else
2019-04-07 09:28:54 +03:00
parent 545b0c79cb
commit 4bd0052d9f
8 changed files with 78 additions and 28 deletions
+6
View File
@@ -1528,6 +1528,12 @@ ul.tabbar li.active > a:after {
vertical-align: middle; vertical-align: middle;
} }
.material-icons.as-badge {
padding-left: 0.2rem;
font-size: 1.25rem;
color: #bbb;
}
/* Badge with a label, like [you], [muted], etc */ /* Badge with a label, like [you], [muted], etc */
.badge { .badge {
font-family: 'Roboto Mono', Courier, monospace, sans-serif; font-family: 'Roboto Mono', Courier, monospace, sans-serif;
+1 -1
View File
File diff suppressed because one or more lines are too long
+11 -5
View File
@@ -1,17 +1,23 @@
import React from 'react'; import React from 'react';
/* Contact's labels: [you], [muted], [blocked], etc */ const icon_mapping = {'muted': 'notifications_off', 'banned': 'block'};
// FIXME: this class is unused.
/* Contact's labels: [you], or icons [muted], [blocked] */
export default class ContactBadges extends React.PureComponent { export default class ContactBadges extends React.PureComponent {
render() { render() {
let badges = null; let badges = null;
if (this.props.badges && this.props.badges.length > 0) { if (this.props.badges && this.props.badges.length > 0) {
badges = []; badges = [];
this.props.badges.map(function(b) { this.props.badges.map(function(b) {
let style = 'badge' + (b.color ? ' ' + b.color : ''); if (b.icon) {
badges.push(<span className={style} key={b.key || b.name}>{b.name}</span>); badges.push(<i className="material-icons as-badge" key={b.key || b.icon}>{icon_mapping[b.icon]}</i>);
} else {
const style = 'badge' + (b.color ? ' ' + b.color : '');
badges.push(<span className={style} key={b.key || b.name}>{b.name}</span>);
}
}); });
return <React.Fragment>{badges}</React.Fragment>;
} }
return <span>{badges}</span>; return null;
} }
}; };
+13 -4
View File
@@ -39,8 +39,17 @@ export default class Contact extends React.Component {
const online = this.props.now ? 'online' : 'offline'; const online = this.props.now ? 'online' : 'offline';
const avatar = this.props.avatar ? this.props.avatar : true; const avatar = this.props.avatar ? this.props.avatar : true;
const badges = this.props.badges ? this.props.badges.slice() : []; const badges = this.props.badges ? this.props.badges.slice() : [];
if (this.props.showMode && this.props.acs) { const icon_badges = [];
badges.push({name: this.props.acs.getMode(), key: 'mode'}); if (this.props.acs) {
if (this.props.showMode) {
badges.push({name: this.props.acs.getMode(), key: 'mode'});
}
if (this.props.acs.isMuted()) {
icon_badges.push({icon: 'muted'});
}
if (!this.props.acs.isJoiner()) {
icon_badges.push({icon: 'banned'});
}
} }
return ( return (
@@ -58,10 +67,10 @@ export default class Contact extends React.Component {
</div> </div>
<div className="text-box"> <div className="text-box">
<div><span className="contact-title">{title}</span> <div><span className="contact-title">{title}</span>
{this.props.unread > 0 ? <UnreadBadge count={this.props.unread} /> : null} <UnreadBadge count={this.props.unread} /><ContactBadges badges={icon_badges} />
</div> </div>
{this.props.comment ? <div className="contact-comment">{this.props.comment}</div> : null} {this.props.comment ? <div className="contact-comment">{this.props.comment}</div> : null}
<ContactBadges badges={badges} /> <span><ContactBadges badges={badges} /></span>
</div> </div>
{this.props.showContextMenu ? {this.props.showContextMenu ?
<span className="menuTrigger"> <span className="menuTrigger">
+44 -15
View File
@@ -6888,6 +6888,10 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function"
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
var icon_mapping = {
'muted': 'notifications_off',
'banned': 'block'
};
var ContactBadges = function (_React$PureComponent) { var ContactBadges = function (_React$PureComponent) {
_inherits(ContactBadges, _React$PureComponent); _inherits(ContactBadges, _React$PureComponent);
@@ -6906,15 +6910,23 @@ var ContactBadges = function (_React$PureComponent) {
if (this.props.badges && this.props.badges.length > 0) { if (this.props.badges && this.props.badges.length > 0) {
badges = []; badges = [];
this.props.badges.map(function (b) { this.props.badges.map(function (b) {
var style = 'badge' + (b.color ? ' ' + b.color : ''); if (b.icon) {
badges.push(react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", { badges.push(react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("i", {
className: style, className: "material-icons as-badge",
key: b.key || b.name key: b.key || b.icon
}, b.name)); }, icon_mapping[b.icon]));
} else {
var style = 'badge' + (b.color ? ' ' + b.color : '');
badges.push(react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
className: style,
key: b.key || b.name
}, b.name));
}
}); });
return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, badges);
} }
return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", null, badges); return null;
} }
}]); }]);
@@ -7180,12 +7192,27 @@ var Contact = function (_React$Component) {
var online = this.props.now ? 'online' : 'offline'; var online = this.props.now ? 'online' : 'offline';
var avatar = this.props.avatar ? this.props.avatar : true; var avatar = this.props.avatar ? this.props.avatar : true;
var badges = this.props.badges ? this.props.badges.slice() : []; var badges = this.props.badges ? this.props.badges.slice() : [];
var icon_badges = [];
if (this.props.showMode && this.props.acs) { if (this.props.acs) {
badges.push({ if (this.props.showMode) {
name: this.props.acs.getMode(), badges.push({
key: 'mode' name: this.props.acs.getMode(),
}); key: 'mode'
});
}
if (this.props.acs.isMuted()) {
icon_badges.push({
icon: 'muted'
});
}
if (!this.props.acs.isJoiner()) {
icon_badges.push({
icon: 'banned'
});
}
} }
return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("li", { return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("li", {
@@ -7205,13 +7232,15 @@ var Contact = function (_React$Component) {
className: "text-box" className: "text-box"
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", { }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
className: "contact-title" className: "contact-title"
}, title), this.props.unread > 0 ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_unread_badge_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], { }, title), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_unread_badge_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], {
count: this.props.unread count: this.props.unread
}) : null), this.props.comment ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_contact_badges_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
badges: icon_badges
})), this.props.comment ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
className: "contact-comment" className: "contact-comment"
}, this.props.comment) : null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_contact_badges_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], { }, this.props.comment) : null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_contact_badges_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
badges: badges badges: badges
})), this.props.showContextMenu ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", { }))), this.props.showContextMenu ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
className: "menuTrigger" className: "menuTrigger"
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("a", { }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("a", {
href: "javascript:;", href: "javascript:;",
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long