diff --git a/package.json b/package.json
index 95bb75b35d..7be54d235a 100644
--- a/package.json
+++ b/package.json
@@ -118,6 +118,7 @@
"@babel/register": "^7.7.4",
"@peculiar/webcrypto": "^1.0.22",
"@types/classnames": "^2.2.10",
+ "@types/modernizr": "^3.5.3",
"@types/react": "16.9",
"babel-eslint": "^10.0.3",
"babel-jest": "^24.9.0",
diff --git a/res/css/structures/auth/_Login.scss b/res/css/structures/auth/_Login.scss
index 4ce90cc6bd..02436833a2 100644
--- a/res/css/structures/auth/_Login.scss
+++ b/res/css/structures/auth/_Login.scss
@@ -89,3 +89,13 @@ limitations under the License.
.mx_Login_underlinedServerName {
border-bottom: 1px dashed $accent-color;
}
+
+div.mx_AccessibleButton_kind_link.mx_Login_forgot {
+ // style it as a link
+ font-size: inherit;
+ padding: 0;
+
+ &.mx_AccessibleButton_disabled {
+ cursor: not-allowed;
+ }
+}
diff --git a/res/css/views/auth/_AuthBody.scss b/res/css/views/auth/_AuthBody.scss
index 468a4b3d62..4b2d6b1bf1 100644
--- a/res/css/views/auth/_AuthBody.scss
+++ b/res/css/views/auth/_AuthBody.scss
@@ -119,6 +119,24 @@ limitations under the License.
margin-right: 0;
}
+.mx_AuthBody_paddedFooter {
+ height: 80px; // height of the submit button + register link
+ padding-top: 28px;
+ text-align: center;
+
+ .mx_AuthBody_paddedFooter_title {
+ margin-top: 16px;
+ font-size: $font-15px;
+ line-height: $font-24px;
+ }
+
+ .mx_AuthBody_paddedFooter_subtitle {
+ margin-top: 8px;
+ font-size: $font-10px;
+ line-height: $font-14px;
+ }
+}
+
.mx_AuthBody_changeFlow {
display: block;
text-align: center;
diff --git a/res/css/views/context_menus/_MessageContextMenu.scss b/res/css/views/context_menus/_MessageContextMenu.scss
index d15d566bdb..2ecb93e734 100644
--- a/res/css/views/context_menus/_MessageContextMenu.scss
+++ b/res/css/views/context_menus/_MessageContextMenu.scss
@@ -19,6 +19,7 @@ limitations under the License.
}
.mx_MessageContextMenu_field {
+ display: block;
padding: 3px 6px 3px 6px;
cursor: pointer;
white-space: nowrap;
diff --git a/res/css/views/directory/_NetworkDropdown.scss b/res/css/views/directory/_NetworkDropdown.scss
index 269b507e3c..bd5c67c7ed 100644
--- a/res/css/views/directory/_NetworkDropdown.scss
+++ b/res/css/views/directory/_NetworkDropdown.scss
@@ -35,6 +35,8 @@ limitations under the License.
border-radius: 4px;
border: 1px solid $dialog-close-fg-color;
background-color: $primary-bg-color;
+ max-height: calc(100vh - 20px); // allow 10px padding on both top and bottom
+ overflow-y: auto;
}
.mx_NetworkDropdown_menu_network {
@@ -51,15 +53,16 @@ limitations under the License.
font-weight: 600;
line-height: $font-20px;
margin-bottom: 4px;
+ position: relative;
// remove server button
.mx_AccessibleButton {
position: absolute;
display: inline;
- right: 12px;
+ right: 10px;
height: 16px;
width: 16px;
- margin-top: 4px;
+ margin-top: 2px;
&::after {
content: "";
diff --git a/res/css/views/elements/_Dropdown.scss b/res/css/views/elements/_Dropdown.scss
index 0dd9656c9c..32a68d5252 100644
--- a/res/css/views/elements/_Dropdown.scss
+++ b/res/css/views/elements/_Dropdown.scss
@@ -33,6 +33,10 @@ limitations under the License.
user-select: none;
}
+.mx_Dropdown_input.mx_AccessibleButton_disabled {
+ cursor: not-allowed;
+}
+
.mx_Dropdown_input:focus {
border-color: $input-focused-border-color;
}
diff --git a/res/css/views/elements/_ImageView.scss b/res/css/views/elements/_ImageView.scss
index 0a4ed2a194..983ef074f2 100644
--- a/res/css/views/elements/_ImageView.scss
+++ b/res/css/views/elements/_ImageView.scss
@@ -37,7 +37,7 @@ limitations under the License.
order: 2;
/* min-width hack needed for FF */
min-width: 0px;
- height: 90%;
+ max-height: 90%;
flex: 15 15 0;
display: flex;
align-items: center;
diff --git a/res/css/views/elements/_RichText.scss b/res/css/views/elements/_RichText.scss
index e3f88cc779..e01b1f8938 100644
--- a/res/css/views/elements/_RichText.scss
+++ b/res/css/views/elements/_RichText.scss
@@ -14,8 +14,11 @@
}
a.mx_Pill {
- word-break: break-all;
- display: inline;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ overflow: hidden;
+ vertical-align: text-bottom;
+ max-width: calc(100% - 1ch);
}
/* More specific to override `.markdown-body a` text-decoration */
diff --git a/res/css/views/rooms/_EventTile.scss b/res/css/views/rooms/_EventTile.scss
index e015f30e48..0dc60226b8 100644
--- a/res/css/views/rooms/_EventTile.scss
+++ b/res/css/views/rooms/_EventTile.scss
@@ -661,3 +661,23 @@ div.mx_EventTile_notSent.mx_EventTile_redacted .mx_UnknownBody {
}
}
}
+
+.mx_EventTile_tileError {
+ color: red;
+ text-align: center;
+
+ // Remove some of the default tile padding so that the error is centered
+ margin-right: 0;
+ .mx_EventTile_line {
+ padding-left: 0;
+ margin-right: 0;
+ }
+
+ .mx_EventTile_line span {
+ padding: 4px 8px;
+ }
+
+ a {
+ margin-left: 1em;
+ }
+}
diff --git a/res/css/views/rooms/_RoomTile.scss b/res/css/views/rooms/_RoomTile.scss
index 7be2a4e3d4..de018bf178 100644
--- a/res/css/views/rooms/_RoomTile.scss
+++ b/res/css/views/rooms/_RoomTile.scss
@@ -24,6 +24,20 @@ limitations under the License.
margin: 0;
padding: 0 8px 0 10px;
position: relative;
+
+ .mx_RoomTile_menuButton {
+ display: none;
+ flex: 0 0 16px;
+ height: 16px;
+ background-image: url('$(res)/img/icon_context.svg');
+ background-repeat: no-repeat;
+ background-position: center;
+ }
+
+ .mx_UserOnlineDot {
+ display: block;
+ margin-right: 5px;
+ }
}
.mx_RoomTile:focus {
@@ -31,15 +45,6 @@ limitations under the License.
background-color: $roomtile-focused-bg-color;
}
-.mx_RoomTile_menuButton {
- display: none;
- flex: 0 0 16px;
- height: 16px;
- background-image: url('$(res)/img/icon_context.svg');
- background-repeat: no-repeat;
- background-position: center;
-}
-
.mx_RoomTile_tooltip {
display: inline-block;
position: relative;
@@ -151,7 +156,10 @@ limitations under the License.
}
.mx_RoomTile_menuButton {
- display: none; //no design for this for now
+ display: none; // no design for this for now
+ }
+ .mx_UserOnlineDot {
+ display: none; // no design for this for now
}
}
@@ -164,6 +172,9 @@ limitations under the License.
.mx_RoomTile_menuButton {
display: block;
}
+ .mx_UserOnlineDot {
+ display: none;
+ }
}
.mx_RoomTile_unreadNotify .mx_RoomTile_badge,
diff --git a/res/css/views/rooms/_UserOnlineDot.scss b/res/css/views/rooms/_UserOnlineDot.scss
index 339e5cc48a..f9da8648ed 100644
--- a/res/css/views/rooms/_UserOnlineDot.scss
+++ b/res/css/views/rooms/_UserOnlineDot.scss
@@ -17,7 +17,7 @@ limitations under the License.
.mx_UserOnlineDot {
border-radius: 50%;
background-color: $accent-color;
- height: 5px;
- width: 5px;
+ height: 6px;
+ width: 6px;
display: inline-block;
}
diff --git a/res/img/icon_person.svg b/res/img/icon_person.svg
deleted file mode 100644
index 4be70df0db..0000000000
--- a/res/img/icon_person.svg
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
diff --git a/scripts/ci/end-to-end-tests.sh b/scripts/ci/end-to-end-tests.sh
index 2f907dffa2..1233677db4 100755
--- a/scripts/ci/end-to-end-tests.sh
+++ b/scripts/ci/end-to-end-tests.sh
@@ -13,7 +13,6 @@ handle_error() {
trap 'handle_error' ERR
-
echo "--- Building Riot"
scripts/ci/layered-riot-web.sh
cd ../riot-web
diff --git a/src/@types/global.d.ts b/src/@types/global.d.ts
new file mode 100644
index 0000000000..1931c0b1d0
--- /dev/null
+++ b/src/@types/global.d.ts
@@ -0,0 +1,40 @@
+/*
+Copyright 2020 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 * as ModernizrStatic from "modernizr";
+
+declare global {
+ interface Window {
+ Modernizr: ModernizrStatic;
+ Olm: {
+ init: () => Promise
{_t( "We'll store an encrypted copy of your keys on our server. " + - "Protect your backup with a passphrase to keep it secure.", + "Secure your backup with a recovery passphrase.", )}
{_t("For maximum security, this should be different from your account password.")}
@@ -307,7 +297,7 @@ export default class CreateKeyBackupDialog extends React.PureComponent { onChange={this._onPassPhraseChange} value={this.state.passPhrase} className="mx_CreateKeyBackupDialog_passPhraseInput" - placeholder={_t("Enter a passphrase...")} + placeholder={_t("Enter a recovery passphrase...")} autoFocus={true} />