diff --git a/src/HtmlUtils.js b/src/HtmlUtils.js
index 96934d205e..a31601790f 100644
--- a/src/HtmlUtils.js
+++ b/src/HtmlUtils.js
@@ -111,8 +111,7 @@ var sanitizeHtmlParams = {
allowedTags: [
'font', // custom to matrix for IRC-style font coloring
'del', // for markdown
- // deliberately no h1/h2 to stop people shouting.
- 'h3', 'h4', 'h5', 'h6', 'blockquote', 'p', 'a', 'ul', 'ol',
+ 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'blockquote', 'p', 'a', 'ul', 'ol',
'nl', 'li', 'b', 'i', 'u', 'strong', 'em', 'strike', 'code', 'hr', 'br', 'div',
'table', 'thead', 'caption', 'tbody', 'tr', 'th', 'td', 'pre', 'span',
],
diff --git a/src/autocomplete/EmojiProvider.js b/src/autocomplete/EmojiProvider.js
index a2d77f02a1..d488ac53ae 100644
--- a/src/autocomplete/EmojiProvider.js
+++ b/src/autocomplete/EmojiProvider.js
@@ -14,7 +14,7 @@ let instance = null;
export default class EmojiProvider extends AutocompleteProvider {
constructor() {
super(EMOJI_REGEX);
- this.fuse = new Fuse(EMOJI_SHORTNAMES);
+ this.fuse = new Fuse(EMOJI_SHORTNAMES, {});
}
async getCompletions(query: string, selection: SelectionRange) {
diff --git a/src/components/structures/MessagePanel.js b/src/components/structures/MessagePanel.js
index 8d50789eb0..87f444d607 100644
--- a/src/components/structures/MessagePanel.js
+++ b/src/components/structures/MessagePanel.js
@@ -279,9 +279,7 @@ module.exports = React.createClass({
this.currentGhostEventId = null;
}
- var isMembershipChange = (e) =>
- e.getType() === 'm.room.member'
- && (!e.getPrevContent() || e.getContent().membership !== e.getPrevContent().membership);
+ var isMembershipChange = (e) => e.getType() === 'm.room.member';
for (i = 0; i < this.props.events.length; i++) {
var mxEv = this.props.events[i];
diff --git a/src/components/structures/RoomView.js b/src/components/structures/RoomView.js
index c158b87ff3..8a355a8f6d 100644
--- a/src/components/structures/RoomView.js
+++ b/src/components/structures/RoomView.js
@@ -1280,7 +1280,8 @@ module.exports = React.createClass({
// we want to show the bar if the read-marker is off the top of the
// screen.
- var showBar = (pos < 0);
+ // If pos is null, the event might not be paginated, so show the unread bar!
+ var showBar = pos < 0 || pos === null;
if (this.state.showTopUnreadMessagesBar != showBar) {
this.setState({showTopUnreadMessagesBar: showBar},
diff --git a/src/components/views/dialogs/UnknownDeviceDialog.js b/src/components/views/dialogs/UnknownDeviceDialog.js
index da9c8e8f65..4f3d4301f9 100644
--- a/src/components/views/dialogs/UnknownDeviceDialog.js
+++ b/src/components/views/dialogs/UnknownDeviceDialog.js
@@ -149,7 +149,7 @@ export default React.createClass({
>
- This room contains devices that you haven't seen before.
+ "{this.props.room.name}" contains devices that you haven't seen before.
{ warning }
Unknown devices:
diff --git a/src/components/views/elements/MemberEventListSummary.js b/src/components/views/elements/MemberEventListSummary.js
index d7f876c16e..63bd2a7c39 100644
--- a/src/components/views/elements/MemberEventListSummary.js
+++ b/src/components/views/elements/MemberEventListSummary.js
@@ -221,6 +221,8 @@ module.exports = React.createClass({
"banned": beConjugated + " banned",
"unbanned": beConjugated + " unbanned",
"kicked": beConjugated + " kicked",
+ "changed_name": "changed name",
+ "changed_avatar": "changed avatar",
};
if (Object.keys(map).includes(t)) {
@@ -289,7 +291,24 @@ module.exports = React.createClass({
switch (e.mxEvent.getContent().membership) {
case 'invite': return 'invited';
case 'ban': return 'banned';
- case 'join': return 'joined';
+ case 'join':
+ if (e.mxEvent.getPrevContent().membership === 'join') {
+ if (e.mxEvent.getContent().displayname !==
+ e.mxEvent.getPrevContent().displayname)
+ {
+ return 'changed_name';
+ }
+ else if (e.mxEvent.getContent().avatar_url !==
+ e.mxEvent.getPrevContent().avatar_url)
+ {
+ return 'changed_avatar';
+ }
+ // console.log("MELS ignoring duplicate membership join event");
+ return null;
+ }
+ else {
+ return 'joined';
+ }
case 'leave':
if (e.mxEvent.getSender() === e.mxEvent.getStateKey()) {
switch (e.mxEvent.getPrevContent().membership) {