From f8e00e43e3613f6c71bb6da024a9cf75b6288337 Mon Sep 17 00:00:00 2001
From: Richard Lewis <richard@smetco.co.uk>
Date: Tue, 9 Jan 2018 15:59:04 +0000
Subject: [PATCH 01/28] Show / hide sitckers icons

---
 src/skins/vector/img/icons-hide-stickers.svg | 16 ++++++++++++++++
 src/skins/vector/img/icons-show-stickers.svg | 16 ++++++++++++++++
 2 files changed, 32 insertions(+)
 create mode 100644 src/skins/vector/img/icons-hide-stickers.svg
 create mode 100644 src/skins/vector/img/icons-show-stickers.svg

diff --git a/src/skins/vector/img/icons-hide-stickers.svg b/src/skins/vector/img/icons-hide-stickers.svg
new file mode 100644
index 0000000000..54178f8d26
--- /dev/null
+++ b/src/skins/vector/img/icons-hide-stickers.svg
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="500px" height="500px" viewBox="0 0 500 500" enable-background="new 0 0 500 500" xml:space="preserve">
+<g id="Layer_1_1_">
+	<path id="Oval-109-Copy" fill="#76CFA6" d="M250,500c138.571,0,250-111.429,250-250S388.571,0,250,0S0,111.429,0,250
+		S111.429,500,250,500z"/>
+</g>
+<path fill="#FFFFFF" d="M249,42C133.563,42,41,135.6,41,250c0,114.4,92.563,208,208,208c115.438,0,208-93.6,208-208
+	C457,135.6,363.401,42,249,42z M249,416.4c-91.518,0-166.404-74.883-166.404-166.4c0-91.518,74.887-166.4,166.404-166.4
+	c91.517,0,166.404,74.882,166.404,166.4C415.404,341.518,340.518,416.4,249,416.4z M321.8,229.2c17.684,0,31.201-13.518,31.201-31.2
+	s-13.519-31.2-31.201-31.2c-17.682,0-31.2,13.518-31.2,31.2S304.118,229.2,321.8,229.2z M176.2,229.2
+	c17.682,0,31.2-13.518,31.2-31.2s-13.519-31.2-31.2-31.2c-17.683,0-31.201,13.518-31.201,31.2S158.518,229.2,176.2,229.2z
+	 M249,364.4c48.883,0,89.436-30.164,106.081-72.801H142.919C159.564,334.236,200.117,364.4,249,364.4z"/>
+</svg>
diff --git a/src/skins/vector/img/icons-show-stickers.svg b/src/skins/vector/img/icons-show-stickers.svg
new file mode 100644
index 0000000000..00e70f8cf7
--- /dev/null
+++ b/src/skins/vector/img/icons-show-stickers.svg
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="500px" height="500px" viewBox="0 0 500 500" enable-background="new 0 0 500 500" xml:space="preserve">
+<g id="Layer_1_1_" opacity="0.15">
+	<path id="Oval-109-Copy" fill="#76CFA6" d="M250,500c138.571,0,250-111.429,250-250S388.571,0,250,0S0,111.429,0,250
+		S111.429,500,250,500z"/>
+</g>
+<path fill="#76CFA6" d="M249,42C133.563,42,41,135.6,41,250c0,114.4,92.563,208,208,208c115.438,0,208-93.6,208-208
+	C457,135.6,363.401,42,249,42z M249,416.4c-91.518,0-166.404-74.883-166.404-166.4c0-91.518,74.887-166.4,166.404-166.4
+	c91.517,0,166.404,74.882,166.404,166.4C415.404,341.518,340.518,416.4,249,416.4z M321.8,229.2c17.684,0,31.201-13.518,31.201-31.2
+	s-13.519-31.2-31.201-31.2c-17.682,0-31.2,13.518-31.2,31.2S304.118,229.2,321.8,229.2z M176.2,229.2
+	c17.682,0,31.2-13.518,31.2-31.2s-13.519-31.2-31.2-31.2c-17.683,0-31.201,13.518-31.201,31.2S158.518,229.2,176.2,229.2z
+	 M249,364.4c48.883,0,89.436-30.164,106.081-72.801H142.919C159.564,334.236,200.117,364.4,249,364.4z"/>
+</svg>

From fa1059e2024430bcbee0e81c10797e0c40921599 Mon Sep 17 00:00:00 2001
From: Richard Lewis <richard@smetco.co.uk>
Date: Tue, 9 Jan 2018 15:59:28 +0000
Subject: [PATCH 02/28] Show / hide stickers icon styling

---
 .../css/matrix-react-sdk/views/rooms/_MessageComposer.scss  | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss
index e6b1a1f0d0..41fd3062d6 100644
--- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss
+++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss
@@ -154,7 +154,8 @@ limitations under the License.
 .mx_MessageComposer_hangup,
 .mx_MessageComposer_voicecall,
 .mx_MessageComposer_videocall,
-.mx_MessageComposer_apps {
+.mx_MessageComposer_apps,
+.mx_MessageComposer_stickers {
     /*display: table-cell;*/
     /*vertical-align: middle;*/
     /*padding-left: 10px;*/
@@ -167,7 +168,8 @@ limitations under the License.
 .mx_MessageComposer_hangup object,
 .mx_MessageComposer_voicecall object,
 .mx_MessageComposer_videocall object,
-.mx_MessageComposer_apps object {
+.mx_MessageComposer_apps object,
+.mx_MessageComposer_stickers object {
     pointer-events: none;
 }
 

From 409bb5ff4d448a3ae8eeedb06aea7ba10984fe2d Mon Sep 17 00:00:00 2001
From: Richard Lewis <richard@smetco.co.uk>
Date: Tue, 9 Jan 2018 16:01:33 +0000
Subject: [PATCH 03/28] Improved icons.

---
 src/skins/vector/img/icons-hide-stickers.svg | 12 ++++++------
 src/skins/vector/img/icons-show-stickers.svg | 12 ++++++------
 2 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/src/skins/vector/img/icons-hide-stickers.svg b/src/skins/vector/img/icons-hide-stickers.svg
index 54178f8d26..c138f34bda 100644
--- a/src/skins/vector/img/icons-hide-stickers.svg
+++ b/src/skins/vector/img/icons-hide-stickers.svg
@@ -7,10 +7,10 @@
 	<path id="Oval-109-Copy" fill="#76CFA6" d="M250,500c138.571,0,250-111.429,250-250S388.571,0,250,0S0,111.429,0,250
 		S111.429,500,250,500z"/>
 </g>
-<path fill="#FFFFFF" d="M249,42C133.563,42,41,135.6,41,250c0,114.4,92.563,208,208,208c115.438,0,208-93.6,208-208
-	C457,135.6,363.401,42,249,42z M249,416.4c-91.518,0-166.404-74.883-166.404-166.4c0-91.518,74.887-166.4,166.404-166.4
-	c91.517,0,166.404,74.882,166.404,166.4C415.404,341.518,340.518,416.4,249,416.4z M321.8,229.2c17.684,0,31.201-13.518,31.201-31.2
-	s-13.519-31.2-31.201-31.2c-17.682,0-31.2,13.518-31.2,31.2S304.118,229.2,321.8,229.2z M176.2,229.2
-	c17.682,0,31.2-13.518,31.2-31.2s-13.519-31.2-31.2-31.2c-17.683,0-31.201,13.518-31.201,31.2S158.518,229.2,176.2,229.2z
-	 M249,364.4c48.883,0,89.436-30.164,106.081-72.801H142.919C159.564,334.236,200.117,364.4,249,364.4z"/>
+<path fill="#FFFFFF" d="M249,60C143.553,60,59,145.5,59,250s84.553,190,190,190s190-85.5,190-190S353.501,60,249,60z M249,416.4
+	c-91.518,0-166.404-74.883-166.404-166.4c0-91.518,74.887-166.4,166.404-166.4c91.517,0,166.404,74.882,166.404,166.4
+	C415.404,341.518,340.518,416.4,249,416.4z M321.8,229.2c17.684,0,31.201-13.518,31.201-31.2s-13.519-31.2-31.201-31.2
+	c-17.682,0-31.2,13.518-31.2,31.2S304.118,229.2,321.8,229.2z M176.2,229.2c17.682,0,31.2-13.518,31.2-31.2s-13.519-31.2-31.2-31.2
+	c-17.683,0-31.201,13.518-31.201,31.2S158.518,229.2,176.2,229.2z M249,364.4c48.883,0,89.436-30.164,106.081-72.801H142.919
+	C159.564,334.236,200.117,364.4,249,364.4z"/>
 </svg>
diff --git a/src/skins/vector/img/icons-show-stickers.svg b/src/skins/vector/img/icons-show-stickers.svg
index 00e70f8cf7..300e2c6d5b 100644
--- a/src/skins/vector/img/icons-show-stickers.svg
+++ b/src/skins/vector/img/icons-show-stickers.svg
@@ -7,10 +7,10 @@
 	<path id="Oval-109-Copy" fill="#76CFA6" d="M250,500c138.571,0,250-111.429,250-250S388.571,0,250,0S0,111.429,0,250
 		S111.429,500,250,500z"/>
 </g>
-<path fill="#76CFA6" d="M249,42C133.563,42,41,135.6,41,250c0,114.4,92.563,208,208,208c115.438,0,208-93.6,208-208
-	C457,135.6,363.401,42,249,42z M249,416.4c-91.518,0-166.404-74.883-166.404-166.4c0-91.518,74.887-166.4,166.404-166.4
-	c91.517,0,166.404,74.882,166.404,166.4C415.404,341.518,340.518,416.4,249,416.4z M321.8,229.2c17.684,0,31.201-13.518,31.201-31.2
-	s-13.519-31.2-31.201-31.2c-17.682,0-31.2,13.518-31.2,31.2S304.118,229.2,321.8,229.2z M176.2,229.2
-	c17.682,0,31.2-13.518,31.2-31.2s-13.519-31.2-31.2-31.2c-17.683,0-31.201,13.518-31.201,31.2S158.518,229.2,176.2,229.2z
-	 M249,364.4c48.883,0,89.436-30.164,106.081-72.801H142.919C159.564,334.236,200.117,364.4,249,364.4z"/>
+<path fill="#76CFA6" d="M249,60C143.553,60,59,145.5,59,250s84.553,190,190,190c105.448,0,190-85.5,190-190S353.501,60,249,60z
+	 M249,416.4c-91.518,0-166.404-74.883-166.404-166.4c0-91.518,74.887-166.4,166.404-166.4c91.517,0,166.404,74.882,166.404,166.4
+	C415.404,341.518,340.518,416.4,249,416.4z M321.8,229.2c17.684,0,31.201-13.518,31.201-31.2s-13.519-31.2-31.201-31.2
+	c-17.682,0-31.2,13.518-31.2,31.2S304.118,229.2,321.8,229.2z M176.2,229.2c17.682,0,31.2-13.518,31.2-31.2s-13.519-31.2-31.2-31.2
+	c-17.683,0-31.201,13.518-31.201,31.2S158.518,229.2,176.2,229.2z M249,364.4c48.883,0,89.436-30.164,106.081-72.801H142.919
+	C159.564,334.236,200.117,364.4,249,364.4z"/>
 </svg>

From 50271b71237eaabc81560f34892d433ff18cdbac Mon Sep 17 00:00:00 2001
From: Richard Lewis <richard@smetco.co.uk>
Date: Wed, 10 Jan 2018 20:48:22 +0000
Subject: [PATCH 04/28] Remove padding on last component of MessageComposer
 (sticker toggle icons)

---
 .../css/matrix-react-sdk/views/rooms/_MessageComposer.scss    | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss
index 41fd3062d6..9e46c56381 100644
--- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss
+++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss
@@ -34,6 +34,10 @@ limitations under the License.
     width: 100%;
 }
 
+.mx_MessageComposer_row div:last-child{
+    padding-right: 0;
+}
+
 .mx_MessageComposer .mx_MessageComposer_avatar {
     padding-left: 10px;
     padding-right: 28px;

From a24c3ada53f57282469070d21e484c718f9623d0 Mon Sep 17 00:00:00 2001
From: Richard Lewis <richard@smetco.co.uk>
Date: Fri, 12 Jan 2018 17:36:09 +0000
Subject: [PATCH 05/28] Sticker styling

---
 .../views/rooms/_MessageComposer.scss             | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss
index 9e46c56381..462de6f4df 100644
--- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss
+++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss
@@ -240,3 +240,18 @@ limitations under the License.
         height: 50px;
     }
 }
+
+.mx_PopoverOuterContainer {
+    border-radius: 5px;
+    padding: 2px;
+}
+
+.mx_PopoverOuterContainer .mx_AppTileFullWidth {
+    margin-top: 0 !important;
+    border: none;
+}
+
+.mx_PopoverOuterContainer .mx_StickersContent {
+    border-radius: 5px;
+    overflow: hidden;
+}

From 7924a149b47986aba69615d92c53d53bb5366c61 Mon Sep 17 00:00:00 2001
From: Richard Lewis <richard@smetco.co.uk>
Date: Mon, 15 Jan 2018 11:14:30 +0000
Subject: [PATCH 06/28] Remove transparent background and fix z-index of
 popover.

---
 .../css/matrix-react-sdk/views/rooms/_MessageComposer.scss | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss
index 462de6f4df..ae8a1b87f6 100644
--- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss
+++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss
@@ -244,6 +244,8 @@ limitations under the License.
 .mx_PopoverOuterContainer {
     border-radius: 5px;
     padding: 2px;
+    background-color: white;
+    overflow: 'hidden';
 }
 
 .mx_PopoverOuterContainer .mx_AppTileFullWidth {
@@ -255,3 +257,8 @@ limitations under the License.
     border-radius: 5px;
     overflow: hidden;
 }
+
+// Set z-index for popovers
+.another-react-popover-container {
+    z-index: 1000;
+}

From a7f0b11002b97177a9191af8d556afbdf6731eda Mon Sep 17 00:00:00 2001
From: Richard Lewis <richard@smetco.co.uk>
Date: Tue, 16 Jan 2018 18:15:17 +0000
Subject: [PATCH 07/28] Add generic element context menu / popover.

---
 .../GenericElementContextMenu.js              | 30 +++++++++++++++++++
 .../views/rooms/_MessageComposer.scss         | 10 +++++--
 2 files changed, 37 insertions(+), 3 deletions(-)
 create mode 100644 src/components/views/context_menus/GenericElementContextMenu.js

diff --git a/src/components/views/context_menus/GenericElementContextMenu.js b/src/components/views/context_menus/GenericElementContextMenu.js
new file mode 100644
index 0000000000..2959fbbe7d
--- /dev/null
+++ b/src/components/views/context_menus/GenericElementContextMenu.js
@@ -0,0 +1,30 @@
+/*
+Copyright 2017 New Vector 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';
+
+import React from 'react';
+import PropTypes from 'prop-types';
+
+export default class GenericElementContextMenu extends React.Component {
+    static PropTypes = {
+        element: PropTypes.element.isRequired,
+    };
+
+    render() {
+        return <div>{ this.props.element }</div>;
+    }
+}
diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss
index ae8a1b87f6..5a044297a9 100644
--- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss
+++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss
@@ -258,7 +258,11 @@ limitations under the License.
     overflow: hidden;
 }
 
-// Set z-index for popovers
-.another-react-popover-container {
-    z-index: 1000;
+.mx_StickersContentPlaceholder {
+    display: flex;
+    flex-grow: 1;
+    flex-direction: column;
+    align-items: center;
+    justify-content: center;
+    text-align: center;
 }

From f8643e9a96c9b16b7ba755d424f91c5bc9c7df87 Mon Sep 17 00:00:00 2001
From: Richard Lewis <richard@smetco.co.uk>
Date: Tue, 16 Jan 2018 18:35:04 +0000
Subject: [PATCH 08/28] Add styling and image for stickerpack placeholder.

---
 .../views/rooms/_MessageComposer.scss           |   4 ++++
 .../vector/img/stickerpack-placeholder.png      | Bin 0 -> 31995 bytes
 2 files changed, 4 insertions(+)
 create mode 100644 src/skins/vector/img/stickerpack-placeholder.png

diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss
index 5a044297a9..e6fbeb9e87 100644
--- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss
+++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss
@@ -266,3 +266,7 @@ limitations under the License.
     justify-content: center;
     text-align: center;
 }
+
+.mx_StickersContentPlaceholder p {
+    max-width: 200px;
+}
diff --git a/src/skins/vector/img/stickerpack-placeholder.png b/src/skins/vector/img/stickerpack-placeholder.png
new file mode 100644
index 0000000000000000000000000000000000000000..7980114438527db8e140b9ff0bcd80a7fd8282f2
GIT binary patch
literal 31995
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

literal 0
HcmV?d00001


From 56ae96fc752ae8098ac4588f962fa4c000608720 Mon Sep 17 00:00:00 2001
From: Richard Lewis <richard@smetco.co.uk>
Date: Tue, 16 Jan 2018 21:46:50 +0000
Subject: [PATCH 09/28] Sticker content styling

---
 .../views/rooms/_MessageComposer.scss         | 19 +++++--------------
 1 file changed, 5 insertions(+), 14 deletions(-)

diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss
index e6fbeb9e87..1f1a652f1e 100644
--- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss
+++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss
@@ -241,23 +241,14 @@ limitations under the License.
     }
 }
 
-.mx_PopoverOuterContainer {
-    border-radius: 5px;
-    padding: 2px;
-    background-color: white;
-    overflow: 'hidden';
-}
-
-.mx_PopoverOuterContainer .mx_AppTileFullWidth {
-    margin-top: 0 !important;
-    border: none;
-}
-
-.mx_PopoverOuterContainer .mx_StickersContent {
-    border-radius: 5px;
+.mx_StickersContent {
     overflow: hidden;
 }
 
+.mx_StickersContent .mx_AppTileFullWidth {
+    border: none;
+}
+
 .mx_StickersContentPlaceholder {
     display: flex;
     flex-grow: 1;

From f4816b99ffa0d21992470379678509b0274bc47d Mon Sep 17 00:00:00 2001
From: Richard Lewis <richard@smetco.co.uk>
Date: Wed, 17 Jan 2018 00:05:16 +0000
Subject: [PATCH 10/28] Add stickerpack manage integration link styling.

---
 .../css/matrix-react-sdk/views/rooms/_MessageComposer.scss  | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss
index 1f1a652f1e..6037a41fc9 100644
--- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss
+++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss
@@ -261,3 +261,9 @@ limitations under the License.
 .mx_StickersContentPlaceholder p {
     max-width: 200px;
 }
+
+.mx_Stickerpack_addLink {
+    display: inline;
+    cursor: pointer;
+    text-decoration: underline;
+}

From 854b5376954eea9a72f098d996e105890cdf4937 Mon Sep 17 00:00:00 2001
From: Richard Lewis <richard@smetco.co.uk>
Date: Wed, 17 Jan 2018 11:27:57 +0000
Subject: [PATCH 11/28] Update sticker toggle icons.

---
 src/skins/vector/img/icons-hide-stickers.svg | 18 +++++++++---------
 src/skins/vector/img/icons-show-stickers.svg | 16 ++++++++--------
 2 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/src/skins/vector/img/icons-hide-stickers.svg b/src/skins/vector/img/icons-hide-stickers.svg
index c138f34bda..9b88ba5e64 100644
--- a/src/skins/vector/img/icons-hide-stickers.svg
+++ b/src/skins/vector/img/icons-hide-stickers.svg
@@ -3,14 +3,14 @@
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 	 width="500px" height="500px" viewBox="0 0 500 500" enable-background="new 0 0 500 500" xml:space="preserve">
-<g id="Layer_1_1_">
-	<path id="Oval-109-Copy" fill="#76CFA6" d="M250,500c138.571,0,250-111.429,250-250S388.571,0,250,0S0,111.429,0,250
-		S111.429,500,250,500z"/>
+<g id="Layer_1_1_" opacity="0.6">
+	<path id="Oval-109-Copy" fill="#76CFA6" d="M250,500c138.571,0,250-111.43,250-250C500,111.429,388.571,0,250,0
+		C111.429,0,0,111.429,0,250C0,388.57,111.429,500,250,500z"/>
 </g>
-<path fill="#FFFFFF" d="M249,60C143.553,60,59,145.5,59,250s84.553,190,190,190s190-85.5,190-190S353.501,60,249,60z M249,416.4
-	c-91.518,0-166.404-74.883-166.404-166.4c0-91.518,74.887-166.4,166.404-166.4c91.517,0,166.404,74.882,166.404,166.4
-	C415.404,341.518,340.518,416.4,249,416.4z M321.8,229.2c17.684,0,31.201-13.518,31.201-31.2s-13.519-31.2-31.201-31.2
-	c-17.682,0-31.2,13.518-31.2,31.2S304.118,229.2,321.8,229.2z M176.2,229.2c17.682,0,31.2-13.518,31.2-31.2s-13.519-31.2-31.2-31.2
-	c-17.683,0-31.201,13.518-31.201,31.2S158.518,229.2,176.2,229.2z M249,364.4c48.883,0,89.436-30.164,106.081-72.801H142.919
-	C159.564,334.236,200.117,364.4,249,364.4z"/>
+<path fill="none" stroke="#FFFFFF" stroke-width="12" stroke-miterlimit="10" d="M250,430c-98.996,0-180-81.003-180-180
+	c0-98.998,81.005-180,180-180c98.994,0,180,81.002,180,180C430,348.997,348.995,430,250,430z M322.8,229.2
+	c17.685,0,31.201-13.519,31.201-31.2c0-17.683-13.519-31.2-31.201-31.2c-17.682,0-31.2,13.518-31.2,31.2
+	C291.6,215.682,305.118,229.2,322.8,229.2z M177.2,229.2c17.682,0,31.2-13.519,31.2-31.2c0-17.683-13.519-31.2-31.2-31.2
+	c-17.683,0-31.201,13.518-31.201,31.2C145.999,215.682,159.518,229.2,177.2,229.2z M250,364.4
+	c48.883,0,89.436-30.164,106.081-72.801H143.919C160.564,334.236,201.117,364.4,250,364.4z"/>
 </svg>
diff --git a/src/skins/vector/img/icons-show-stickers.svg b/src/skins/vector/img/icons-show-stickers.svg
index 300e2c6d5b..26779a3940 100644
--- a/src/skins/vector/img/icons-show-stickers.svg
+++ b/src/skins/vector/img/icons-show-stickers.svg
@@ -4,13 +4,13 @@
 <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 	 width="500px" height="500px" viewBox="0 0 500 500" enable-background="new 0 0 500 500" xml:space="preserve">
 <g id="Layer_1_1_" opacity="0.15">
-	<path id="Oval-109-Copy" fill="#76CFA6" d="M250,500c138.571,0,250-111.429,250-250S388.571,0,250,0S0,111.429,0,250
-		S111.429,500,250,500z"/>
+	<path id="Oval-109-Copy" fill="#76CFA6" d="M250,500c138.571,0,250-111.43,250-250C500,111.429,388.571,0,250,0
+		C111.429,0,0,111.429,0,250C0,388.57,111.429,500,250,500z"/>
 </g>
-<path fill="#76CFA6" d="M249,60C143.553,60,59,145.5,59,250s84.553,190,190,190c105.448,0,190-85.5,190-190S353.501,60,249,60z
-	 M249,416.4c-91.518,0-166.404-74.883-166.404-166.4c0-91.518,74.887-166.4,166.404-166.4c91.517,0,166.404,74.882,166.404,166.4
-	C415.404,341.518,340.518,416.4,249,416.4z M321.8,229.2c17.684,0,31.201-13.518,31.201-31.2s-13.519-31.2-31.201-31.2
-	c-17.682,0-31.2,13.518-31.2,31.2S304.118,229.2,321.8,229.2z M176.2,229.2c17.682,0,31.2-13.518,31.2-31.2s-13.519-31.2-31.2-31.2
-	c-17.683,0-31.201,13.518-31.201,31.2S158.518,229.2,176.2,229.2z M249,364.4c48.883,0,89.436-30.164,106.081-72.801H142.919
-	C159.564,334.236,200.117,364.4,249,364.4z"/>
+<path fill="none" stroke="#76CFA6" stroke-width="12" stroke-miterlimit="10" d="M249,430c-98.996,0-180-81.003-180-180
+	c0-98.998,81.005-180,180-180c98.994,0,180,81.001,180,180C429,348.997,347.995,430,249,430z M321.8,229.2
+	c17.685,0,31.201-13.518,31.201-31.2s-13.519-31.2-31.201-31.2c-17.682,0-31.2,13.518-31.2,31.2S304.118,229.2,321.8,229.2z
+	 M176.2,229.2c17.682,0,31.2-13.518,31.2-31.2s-13.519-31.2-31.2-31.2c-17.683,0-31.201,13.518-31.201,31.2
+	S158.518,229.2,176.2,229.2z M249,364.4c48.883,0,89.436-30.164,106.081-72.801H142.919C159.564,334.236,200.117,364.4,249,364.4z"
+	/>
 </svg>

From de597d4f5d95247e6c0df6b32d50ae9cb3ccf2ba Mon Sep 17 00:00:00 2001
From: Richard Lewis <richard@smetco.co.uk>
Date: Wed, 17 Jan 2018 15:13:29 +0000
Subject: [PATCH 12/28] Make background lighter.

---
 src/skins/vector/img/icons-hide-stickers.svg | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/skins/vector/img/icons-hide-stickers.svg b/src/skins/vector/img/icons-hide-stickers.svg
index 9b88ba5e64..f28e8646e6 100644
--- a/src/skins/vector/img/icons-hide-stickers.svg
+++ b/src/skins/vector/img/icons-hide-stickers.svg
@@ -3,14 +3,14 @@
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 	 width="500px" height="500px" viewBox="0 0 500 500" enable-background="new 0 0 500 500" xml:space="preserve">
-<g id="Layer_1_1_" opacity="0.6">
+<g id="Layer_1_1_" opacity="0.4">
 	<path id="Oval-109-Copy" fill="#76CFA6" d="M250,500c138.571,0,250-111.43,250-250C500,111.429,388.571,0,250,0
 		C111.429,0,0,111.429,0,250C0,388.57,111.429,500,250,500z"/>
 </g>
 <path fill="none" stroke="#FFFFFF" stroke-width="12" stroke-miterlimit="10" d="M250,430c-98.996,0-180-81.003-180-180
 	c0-98.998,81.005-180,180-180c98.994,0,180,81.002,180,180C430,348.997,348.995,430,250,430z M322.8,229.2
-	c17.685,0,31.201-13.519,31.201-31.2c0-17.683-13.519-31.2-31.201-31.2c-17.682,0-31.2,13.518-31.2,31.2
-	C291.6,215.682,305.118,229.2,322.8,229.2z M177.2,229.2c17.682,0,31.2-13.519,31.2-31.2c0-17.683-13.519-31.2-31.2-31.2
-	c-17.683,0-31.201,13.518-31.201,31.2C145.999,215.682,159.518,229.2,177.2,229.2z M250,364.4
-	c48.883,0,89.436-30.164,106.081-72.801H143.919C160.564,334.236,201.117,364.4,250,364.4z"/>
+	c17.686,0,31.201-13.519,31.201-31.2c0-17.683-13.519-31.2-31.201-31.2c-17.682,0-31.2,13.518-31.2,31.2S305.118,229.2,322.8,229.2z
+	 M177.2,229.2c17.682,0,31.2-13.519,31.2-31.2c0-17.683-13.519-31.2-31.2-31.2c-17.683,0-31.201,13.518-31.201,31.2
+	S159.518,229.2,177.2,229.2z M250,364.4c48.883,0,89.436-30.164,106.081-72.801H143.919C160.564,334.236,201.117,364.4,250,364.4z"
+	/>
 </svg>

From c340032bd19a50a3f160296e2e5321a084a389fb Mon Sep 17 00:00:00 2001
From: Richard Lewis <richard@smetco.co.uk>
Date: Wed, 17 Jan 2018 15:49:03 +0000
Subject: [PATCH 13/28] Move sticker related CSS to its own file.

---
 src/skins/vector/css/_components.scss         |  1 +
 .../views/rooms/_MessageComposer.scss         | 27 -----------------
 .../views/rooms/_Stickers.scss                | 30 +++++++++++++++++++
 3 files changed, 31 insertions(+), 27 deletions(-)
 create mode 100644 src/skins/vector/css/matrix-react-sdk/views/rooms/_Stickers.scss

diff --git a/src/skins/vector/css/_components.scss b/src/skins/vector/css/_components.scss
index 0dd6a1b1b7..5b04703a27 100644
--- a/src/skins/vector/css/_components.scss
+++ b/src/skins/vector/css/_components.scss
@@ -60,6 +60,7 @@
 @import "./matrix-react-sdk/views/rooms/_MemberInfo.scss";
 @import "./matrix-react-sdk/views/rooms/_MemberList.scss";
 @import "./matrix-react-sdk/views/rooms/_MessageComposer.scss";
+@import "./matrix-react-sdk/views/rooms/_Stickers.scss";
 @import "./matrix-react-sdk/views/rooms/_PinnedEventTile.scss";
 @import "./matrix-react-sdk/views/rooms/_PinnedEventsPanel.scss";
 @import "./matrix-react-sdk/views/rooms/_PresenceLabel.scss";
diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss
index 6037a41fc9..9e46c56381 100644
--- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss
+++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_MessageComposer.scss
@@ -240,30 +240,3 @@ limitations under the License.
         height: 50px;
     }
 }
-
-.mx_StickersContent {
-    overflow: hidden;
-}
-
-.mx_StickersContent .mx_AppTileFullWidth {
-    border: none;
-}
-
-.mx_StickersContentPlaceholder {
-    display: flex;
-    flex-grow: 1;
-    flex-direction: column;
-    align-items: center;
-    justify-content: center;
-    text-align: center;
-}
-
-.mx_StickersContentPlaceholder p {
-    max-width: 200px;
-}
-
-.mx_Stickerpack_addLink {
-    display: inline;
-    cursor: pointer;
-    text-decoration: underline;
-}
diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_Stickers.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_Stickers.scss
new file mode 100644
index 0000000000..ee6c38b24d
--- /dev/null
+++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_Stickers.scss
@@ -0,0 +1,30 @@
+.mx_Stickers_content {
+    overflow: hidden;
+}
+
+.mx_Stickers_content .mx_AppTileFullWidth {
+    border: none;
+}
+
+.mx_Stickers_contentPlaceholder {
+    display: flex;
+    flex-grow: 1;
+    flex-direction: column;
+    align-items: center;
+    justify-content: center;
+    text-align: center;
+}
+
+.mx_Stickers_contentPlaceholder p {
+    max-width: 200px;
+}
+
+.mx_Stickers_addLink {
+    display: inline;
+    cursor: pointer;
+    text-decoration: underline;
+}
+
+.mx_Stickers_hideStickers {
+    z-index: 2001;
+}

From 738b59fd42e27f8290de878c360f98ab95c304e3 Mon Sep 17 00:00:00 2001
From: Richard Lewis <richard@smetco.co.uk>
Date: Thu, 18 Jan 2018 12:01:29 +0000
Subject: [PATCH 14/28] Call for update on window resize.

---
 .../context_menus/GenericElementContextMenu.js    | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/src/components/views/context_menus/GenericElementContextMenu.js b/src/components/views/context_menus/GenericElementContextMenu.js
index 2959fbbe7d..0a8d269293 100644
--- a/src/components/views/context_menus/GenericElementContextMenu.js
+++ b/src/components/views/context_menus/GenericElementContextMenu.js
@@ -24,6 +24,21 @@ export default class GenericElementContextMenu extends React.Component {
         element: PropTypes.element.isRequired,
     };
 
+    componentDidMount() {
+        this.resize = this.resize.bind(this);
+        window.addEventListener("resize", this.resize.bind(this));
+    }
+
+    componentWillUnmount() {
+        window.removeEventListener("resize", this.resize.bind(this));
+    }
+
+    resize() {
+        if (this.props.onResize) {
+            this.props.onResize();
+        }
+    }
+
     render() {
         return <div>{ this.props.element }</div>;
     }

From 095130a569792c61d7dac2b78f408e01c544e321 Mon Sep 17 00:00:00 2001
From: Richard Lewis <richard@smetco.co.uk>
Date: Fri, 9 Feb 2018 13:23:56 +0000
Subject: [PATCH 15/28] Hide apps drawer

---
 .../vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss  | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss
index 2d61ca7743..b6d267b43b 100644
--- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss
+++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss
@@ -18,6 +18,10 @@ limitations under the License.
     margin: 5px;
 }
 
+.mx_AppsDrawer_hidden {
+    display: none;
+}
+
 .mx_AppsContainer {
     display: flex;
     flex-direction: row;

From 9fc7435ea2ef7af161fadf4b3f9abc4a4aadcb73 Mon Sep 17 00:00:00 2001
From: Richard Lewis <rick@matrix.org>
Date: Tue, 6 Mar 2018 10:47:53 +0000
Subject: [PATCH 16/28] Correctly position tooltips relative to parent element.

---
 src/components/views/rooms/RoomTooltip.js       |  2 +-
 .../views/messages/_MImageBody.scss             | 17 ++++++++---------
 .../vector-web/views/rooms/_RoomTooltip.scss    |  3 ++-
 3 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/src/components/views/rooms/RoomTooltip.js b/src/components/views/rooms/RoomTooltip.js
index 714d57ca24..518ceacc4c 100644
--- a/src/components/views/rooms/RoomTooltip.js
+++ b/src/components/views/rooms/RoomTooltip.js
@@ -66,7 +66,7 @@ module.exports = React.createClass({
         // positioned, also taking into account any window zoom
         // NOTE: The additional 6 pixels for the left position, is to take account of the
         // tooltips chevron
-        var parent = ReactDOM.findDOMNode(this);
+        var parent = ReactDOM.findDOMNode(this).parentNode;
         var style = {};
         style.top = parent.getBoundingClientRect().top + window.pageYOffset;
         style.left = 6 + parent.getBoundingClientRect().right + window.pageXOffset;
diff --git a/src/skins/vector/css/matrix-react-sdk/views/messages/_MImageBody.scss b/src/skins/vector/css/matrix-react-sdk/views/messages/_MImageBody.scss
index 1702aac8ad..9d26cacbff 100644
--- a/src/skins/vector/css/matrix-react-sdk/views/messages/_MImageBody.scss
+++ b/src/skins/vector/css/matrix-react-sdk/views/messages/_MImageBody.scss
@@ -15,15 +15,14 @@ limitations under the License.
 */
 
 .mx_MImageBody {
-    display: block;
-    margin-right: 34px;
+  display: block;
+  margin-right: 34px;
 }
 
-.mx_MImageBody_thumbnail {
-    max-width: 100%;
-/*
-    background-color: $primary-bg-color;
-    border: 2px solid $primary-bg-color;
-    border-radius: 1px;
-*/
+.mx_MImageBody_thumbnail_container {
+  display: inline-block;
+}
+
+img.mx_MImageBody_thumbnail {
+  max-width: 100%;
 }
diff --git a/src/skins/vector/css/vector-web/views/rooms/_RoomTooltip.scss b/src/skins/vector/css/vector-web/views/rooms/_RoomTooltip.scss
index 5469a9e6d3..9988425b8f 100644
--- a/src/skins/vector/css/vector-web/views/rooms/_RoomTooltip.scss
+++ b/src/skins/vector/css/vector-web/views/rooms/_RoomTooltip.scss
@@ -49,5 +49,6 @@ limitations under the License.
     line-height: 14px;
     font-size: 13px;
     color: $primary-fg-color;
+    max-width: 600px;
+    margin-right: 50px;
 }
-

From d77ab891a0b10156399711947bb319ad4ff0b2ed Mon Sep 17 00:00:00 2001
From: Richard Lewis <rick@matrix.org>
Date: Tue, 6 Mar 2018 11:25:15 +0000
Subject: [PATCH 17/28] Update tooltip position on scroll.

---
 src/components/views/rooms/RoomTooltip.js | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/components/views/rooms/RoomTooltip.js b/src/components/views/rooms/RoomTooltip.js
index 518ceacc4c..a902045f07 100644
--- a/src/components/views/rooms/RoomTooltip.js
+++ b/src/components/views/rooms/RoomTooltip.js
@@ -39,6 +39,7 @@ module.exports = React.createClass({
         this.tooltipContainer = document.createElement("div");
         this.tooltipContainer.className = "mx_RoomTileTooltip_wrapper";
         document.body.appendChild(this.tooltipContainer);
+        window.addEventListener('scroll', this._renderTooltip, true);
 
         this._renderTooltip();
     },
@@ -57,6 +58,7 @@ module.exports = React.createClass({
 
         ReactDOM.unmountComponentAtNode(this.tooltipContainer);
         document.body.removeChild(this.tooltipContainer);
+        window.removeEventListener('scroll', this._renderTooltip, true);
     },
 
     _renderTooltip: function() {

From 78ae1ada3c3b62c8a42f42c66610fe0fb9c08e19 Mon Sep 17 00:00:00 2001
From: Richard Lewis <rick@matrix.org>
Date: Tue, 6 Mar 2018 14:21:31 +0000
Subject: [PATCH 18/28] Fix tooltip vertical positioning.

---
 src/components/views/rooms/RoomTooltip.js | 23 +++++++++++++++++++++--
 1 file changed, 21 insertions(+), 2 deletions(-)

diff --git a/src/components/views/rooms/RoomTooltip.js b/src/components/views/rooms/RoomTooltip.js
index a902045f07..034f80ecee 100644
--- a/src/components/views/rooms/RoomTooltip.js
+++ b/src/components/views/rooms/RoomTooltip.js
@@ -21,6 +21,8 @@ var ReactDOM = require('react-dom');
 var dis = require('matrix-react-sdk/lib/dispatcher');
 import classNames from 'classnames';
 
+const MIN_TOOLTIP_HEIGHT = 25;
+
 module.exports = React.createClass({
     displayName: 'RoomTooltip',
 
@@ -41,6 +43,12 @@ module.exports = React.createClass({
         document.body.appendChild(this.tooltipContainer);
         window.addEventListener('scroll', this._renderTooltip, true);
 
+        const parent = ReactDOM.findDOMNode(this).parentNode;
+        this.state={
+            parent,
+            parentBox: parent.getBoundingClientRect(),
+        };
+
         this._renderTooltip();
     },
 
@@ -61,6 +69,17 @@ module.exports = React.createClass({
         window.removeEventListener('scroll', this._renderTooltip, true);
     },
 
+    _updatePosition(style) {
+        const parentBox = this.state.parent.getBoundingClientRect();
+        let offset = 0;
+        if (parentBox.height > MIN_TOOLTIP_HEIGHT) {
+            offset = Math.floor((parentBox.height - MIN_TOOLTIP_HEIGHT) / 2);
+        }
+        style.top = (parentBox.top - 2) + window.pageYOffset + offset;
+        style.left = 6 + parentBox.right + window.pageXOffset;
+        return style;
+    },
+
     _renderTooltip: function() {
         var label = this.props.room ? this.props.room.name : this.props.label;
 
@@ -70,8 +89,8 @@ module.exports = React.createClass({
         // tooltips chevron
         var parent = ReactDOM.findDOMNode(this).parentNode;
         var style = {};
-        style.top = parent.getBoundingClientRect().top + window.pageYOffset;
-        style.left = 6 + parent.getBoundingClientRect().right + window.pageXOffset;
+        console.warn('Bounding box', parent.getBoundingClientRect());
+        style = this._updatePosition(style);
         style.display = "block";
 
         const tooltipClasses = classNames(

From 6785d75ad2117f752b35c592eaa25964520025bc Mon Sep 17 00:00:00 2001
From: Richard Lewis <rick@matrix.org>
Date: Tue, 6 Mar 2018 14:46:40 +0000
Subject: [PATCH 19/28] Remove logging.

---
 src/components/views/rooms/RoomTooltip.js | 1 -
 1 file changed, 1 deletion(-)

diff --git a/src/components/views/rooms/RoomTooltip.js b/src/components/views/rooms/RoomTooltip.js
index 034f80ecee..398c96b4de 100644
--- a/src/components/views/rooms/RoomTooltip.js
+++ b/src/components/views/rooms/RoomTooltip.js
@@ -89,7 +89,6 @@ module.exports = React.createClass({
         // tooltips chevron
         var parent = ReactDOM.findDOMNode(this).parentNode;
         var style = {};
-        console.warn('Bounding box', parent.getBoundingClientRect());
         style = this._updatePosition(style);
         style.display = "block";
 

From fe3f0be920ed9ea1d329dba24506ff664935da91 Mon Sep 17 00:00:00 2001
From: Richard Lewis <rick@matrix.org>
Date: Wed, 7 Mar 2018 12:03:28 +0000
Subject: [PATCH 20/28] Ignore local config.

---
 .gitignore | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.gitignore b/.gitignore
index 2ad05012a0..46d294ecf7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,4 +16,5 @@ electron/dist
 electron/pub
 **/.idea
 /config.json
+/config.local*.json
 /src/component-index.js

From 38efebb8d3946f321e6814cbd957afd042505538 Mon Sep 17 00:00:00 2001
From: Richard Lewis <rick@matrix.org>
Date: Thu, 8 Mar 2018 12:31:23 +0000
Subject: [PATCH 21/28] Split out sticker CSS

---
 src/skins/vector/css/_components.scss         |  1 +
 .../views/messages/_MImageBody.scss           |  8 ----
 .../views/messages/_MStickerBody.scss         | 48 +++++++++++++++++++
 3 files changed, 49 insertions(+), 8 deletions(-)
 create mode 100644 src/skins/vector/css/matrix-react-sdk/views/messages/_MStickerBody.scss

diff --git a/src/skins/vector/css/_components.scss b/src/skins/vector/css/_components.scss
index 0ae5af1609..0bcc48c3b8 100644
--- a/src/skins/vector/css/_components.scss
+++ b/src/skins/vector/css/_components.scss
@@ -48,6 +48,7 @@
 @import "./matrix-react-sdk/views/messages/_MEmoteBody.scss";
 @import "./matrix-react-sdk/views/messages/_MFileBody.scss";
 @import "./matrix-react-sdk/views/messages/_MImageBody.scss";
+@import "./matrix-react-sdk/views/messages/_MStickerBody.scss";
 @import "./matrix-react-sdk/views/messages/_MNoticeBody.scss";
 @import "./matrix-react-sdk/views/messages/_MTextBody.scss";
 @import "./matrix-react-sdk/views/messages/_RoomAvatarEvent.scss";
diff --git a/src/skins/vector/css/matrix-react-sdk/views/messages/_MImageBody.scss b/src/skins/vector/css/matrix-react-sdk/views/messages/_MImageBody.scss
index 9d26cacbff..bf483feda3 100644
--- a/src/skins/vector/css/matrix-react-sdk/views/messages/_MImageBody.scss
+++ b/src/skins/vector/css/matrix-react-sdk/views/messages/_MImageBody.scss
@@ -18,11 +18,3 @@ limitations under the License.
   display: block;
   margin-right: 34px;
 }
-
-.mx_MImageBody_thumbnail_container {
-  display: inline-block;
-}
-
-img.mx_MImageBody_thumbnail {
-  max-width: 100%;
-}
diff --git a/src/skins/vector/css/matrix-react-sdk/views/messages/_MStickerBody.scss b/src/skins/vector/css/matrix-react-sdk/views/messages/_MStickerBody.scss
new file mode 100644
index 0000000000..29b77f8846
--- /dev/null
+++ b/src/skins/vector/css/matrix-react-sdk/views/messages/_MStickerBody.scss
@@ -0,0 +1,48 @@
+/*
+Copyright 2018 New Vector 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_MStickerBody {
+  display: block;
+  margin-right: 34px;
+  min-height: 110px;
+}
+
+.mx_MStickerBody_thumbnail_container {
+  display: inline-block;
+  position: relative;
+}
+
+.mx_MStickerBody_thumbnail {
+  max-width: 100%;
+  transition: 500ms;
+  opacity: 0;
+}
+
+.mx_MStickerBody_thumbnail_visible {
+  transition: 500ms;
+  opacity: 1;
+}
+
+.mx_MStickerBody_placeholder {
+  position: absolute;
+  transition: 500ms;
+  opacity: 1;
+}
+
+.mx_MStickerBody_placeholder_invisible {
+  transition: 500ms;
+  opacity: 0;
+}

From 351f9b32ea01dfd7f4417ea32829ec27ac527c90 Mon Sep 17 00:00:00 2001
From: Richard Lewis <rick@matrix.org>
Date: Thu, 8 Mar 2018 23:54:44 +0000
Subject: [PATCH 22/28] Remove broken transitions.

---
 .../css/matrix-react-sdk/views/messages/_MStickerBody.scss    | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/src/skins/vector/css/matrix-react-sdk/views/messages/_MStickerBody.scss b/src/skins/vector/css/matrix-react-sdk/views/messages/_MStickerBody.scss
index 29b77f8846..4d63376a47 100644
--- a/src/skins/vector/css/matrix-react-sdk/views/messages/_MStickerBody.scss
+++ b/src/skins/vector/css/matrix-react-sdk/views/messages/_MStickerBody.scss
@@ -18,6 +18,7 @@ limitations under the License.
   display: block;
   margin-right: 34px;
   min-height: 110px;
+  padding: 20px 0;
 }
 
 .mx_MStickerBody_thumbnail_container {
@@ -27,18 +28,15 @@ limitations under the License.
 
 .mx_MStickerBody_thumbnail {
   max-width: 100%;
-  transition: 500ms;
   opacity: 0;
 }
 
 .mx_MStickerBody_thumbnail_visible {
-  transition: 500ms;
   opacity: 1;
 }
 
 .mx_MStickerBody_placeholder {
   position: absolute;
-  transition: 500ms;
   opacity: 1;
 }
 

From d2f4bb2dd3322f8b778ddd65f7741553e1cd24eb Mon Sep 17 00:00:00 2001
From: Richard Lewis <rick@matrix.org>
Date: Tue, 13 Mar 2018 10:49:55 +0000
Subject: [PATCH 23/28] Fix spinner position / height.

---
 .../matrix-react-sdk/views/rooms/_AppsDrawer.scss    | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss
index b6d267b43b..c464865bd7 100644
--- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss
+++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss
@@ -58,6 +58,7 @@ limitations under the License.
     margin-right: 5px;
     border: 1px solid $primary-hairline-color;
     border-radius: 2px;
+    background-color: $dialog-background-bg-color;
 }
 
 .mx_AppTile:last-child {
@@ -257,12 +258,21 @@ form.mx_Custom_Widget_Form div {
 }
 
 .mx_AppLoading {
-    min-height: 305px;
     display: flex;
     flex-direction: column;
     justify-content: center;
     align-items: center;
     font-weight: bold;
+    position: relative;
+    height: 280px;
+}
+
+.mx_AppLoading .mx_Spinner {
+    position: absolute;
+    top: 0;
+    bottom: 0;
+    left: 0;
+    right: 0;
 }
 
 .mx_AppLoading iframe {

From 8d8580a21330926a5981c2d936b0e5e070952785 Mon Sep 17 00:00:00 2001
From: Richard Lewis <rick@matrix.org>
Date: Tue, 13 Mar 2018 10:57:43 +0000
Subject: [PATCH 24/28] Cleanup comments. Reduce default app tile height to
 280px.

---
 .../css/matrix-react-sdk/views/rooms/_AppsDrawer.scss  | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)

diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss
index c464865bd7..e22207676f 100644
--- a/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss
+++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/_AppsDrawer.scss
@@ -72,8 +72,6 @@ limitations under the License.
     padding: 0;
     border: 1px solid $primary-hairline-color;
     border-radius: 2px;
-    // height: 350px;
-    // display: inline-block;
 }
 
 .mx_AppTile, .mx_AppTileFullWidth {
@@ -108,7 +106,6 @@ limitations under the License.
 }
 
 .mx_AppTileMenuBarWidget {
-    // pointer-events: none;
     cursor: pointer;
     width: 10px;
     height: 10px;
@@ -127,14 +124,14 @@ limitations under the License.
 }
 
 .mx_AppTileBody{
-    height: 350px;
+    height: 280px;
     width: 100%;
     overflow: hidden;
 }
 
 .mx_AppTileBody iframe {
     width: 100%;
-    height: 350px;
+    height: 280px;
     overflow: hidden;
     border: none;
     padding: 0;
@@ -142,9 +139,6 @@ limitations under the License.
     display: block;
 }
 
-// .mx_CloseAppWidget {
-// }
-
 .mx_AppTileMenuBarWidgetPadding {
     margin-right: 5px;
 }

From 85fca9dee8adf8c9380b008380fac0584b17f7f3 Mon Sep 17 00:00:00 2001
From: Richard Lewis <rick@matrix.org>
Date: Wed, 14 Mar 2018 11:11:48 +0000
Subject: [PATCH 25/28] Style sticker content rather than thumbnail.

---
 .../css/matrix-react-sdk/views/messages/_MStickerBody.scss  | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/skins/vector/css/matrix-react-sdk/views/messages/_MStickerBody.scss b/src/skins/vector/css/matrix-react-sdk/views/messages/_MStickerBody.scss
index 4d63376a47..3e6bbe5aa4 100644
--- a/src/skins/vector/css/matrix-react-sdk/views/messages/_MStickerBody.scss
+++ b/src/skins/vector/css/matrix-react-sdk/views/messages/_MStickerBody.scss
@@ -21,17 +21,17 @@ limitations under the License.
   padding: 20px 0;
 }
 
-.mx_MStickerBody_thumbnail_container {
+.mx_MStickerBody_image_container {
   display: inline-block;
   position: relative;
 }
 
-.mx_MStickerBody_thumbnail {
+.mx_MStickerBody_image {
   max-width: 100%;
   opacity: 0;
 }
 
-.mx_MStickerBody_thumbnail_visible {
+.mx_MStickerBody_image_visible {
   opacity: 1;
 }
 

From e36d972d94fea5ad2814e75a7c112631174bda9d Mon Sep 17 00:00:00 2001
From: Richard Lewis <richard@smetco.co.uk>
Date: Mon, 26 Mar 2018 11:36:42 +0100
Subject: [PATCH 26/28] Bind function in constructor.

---
 .../views/context_menus/GenericElementContextMenu.js     | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/src/components/views/context_menus/GenericElementContextMenu.js b/src/components/views/context_menus/GenericElementContextMenu.js
index 0a8d269293..4ae0bfd7dd 100644
--- a/src/components/views/context_menus/GenericElementContextMenu.js
+++ b/src/components/views/context_menus/GenericElementContextMenu.js
@@ -24,13 +24,18 @@ export default class GenericElementContextMenu extends React.Component {
         element: PropTypes.element.isRequired,
     };
 
+    constructor(props) {
+        super(props);
+        this.resize = this.resize.bind(this);
+    }
+
     componentDidMount() {
         this.resize = this.resize.bind(this);
-        window.addEventListener("resize", this.resize.bind(this));
+        window.addEventListener("resize", this.resize);
     }
 
     componentWillUnmount() {
-        window.removeEventListener("resize", this.resize.bind(this));
+        window.removeEventListener("resize", this.resize);
     }
 
     resize() {

From 700515cce34b06e0d9f470f189cd5a56a1469520 Mon Sep 17 00:00:00 2001
From: Richard Lewis <richard@smetco.co.uk>
Date: Mon, 26 Mar 2018 11:48:29 +0100
Subject: [PATCH 27/28] Add some comments.

---
 .../views/context_menus/GenericElementContextMenu.js   | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/src/components/views/context_menus/GenericElementContextMenu.js b/src/components/views/context_menus/GenericElementContextMenu.js
index 4ae0bfd7dd..3f4804dbd1 100644
--- a/src/components/views/context_menus/GenericElementContextMenu.js
+++ b/src/components/views/context_menus/GenericElementContextMenu.js
@@ -19,9 +19,19 @@ limitations under the License.
 import React from 'react';
 import PropTypes from 'prop-types';
 
+/*
+ * This component can be used to display generic HTML content in a contextual
+ * menu.
+ */
+
+
 export default class GenericElementContextMenu extends React.Component {
     static PropTypes = {
         element: PropTypes.element.isRequired,
+        // Function to be called when the parent window is resized
+        // This can be used to reposition or close the menu on resize and
+        // ensure that it is not displayed in a stale position.
+        onResize: PropTypes.func,
     };
 
     constructor(props) {

From e3a3dec8a21782007651b1a44b5c45143d1704ff Mon Sep 17 00:00:00 2001
From: Richard Lewis <richard@smetco.co.uk>
Date: Mon, 26 Mar 2018 11:53:39 +0100
Subject: [PATCH 28/28] Move variables out of state.

---
 src/components/views/rooms/RoomTooltip.js | 12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)

diff --git a/src/components/views/rooms/RoomTooltip.js b/src/components/views/rooms/RoomTooltip.js
index 398c96b4de..5e766a665f 100644
--- a/src/components/views/rooms/RoomTooltip.js
+++ b/src/components/views/rooms/RoomTooltip.js
@@ -43,11 +43,7 @@ module.exports = React.createClass({
         document.body.appendChild(this.tooltipContainer);
         window.addEventListener('scroll', this._renderTooltip, true);
 
-        const parent = ReactDOM.findDOMNode(this).parentNode;
-        this.state={
-            parent,
-            parentBox: parent.getBoundingClientRect(),
-        };
+        this.parent = ReactDOM.findDOMNode(this).parentNode;
 
         this._renderTooltip();
     },
@@ -70,7 +66,7 @@ module.exports = React.createClass({
     },
 
     _updatePosition(style) {
-        const parentBox = this.state.parent.getBoundingClientRect();
+        const parentBox = this.parent.getBoundingClientRect();
         let offset = 0;
         if (parentBox.height > MIN_TOOLTIP_HEIGHT) {
             offset = Math.floor((parentBox.height - MIN_TOOLTIP_HEIGHT) / 2);
@@ -117,8 +113,8 @@ module.exports = React.createClass({
     render: function() {
         // Render a placeholder
         return (
-            <div className={ this.props.className } >
+            <div className={this.props.className} >
             </div>
         );
-    }
+    },
 });