diff --git a/res/css/structures/_TabbedView.scss b/res/css/structures/_TabbedView.scss index 6e435b8e75..29e7c401e6 100644 --- a/res/css/structures/_TabbedView.scss +++ b/res/css/structures/_TabbedView.scss @@ -64,7 +64,7 @@ limitations under the License. background-color: $tab-label-icon-bg-color; mask-repeat: no-repeat; mask-size: 16px; - width: 14px; + width: 16px; height: 22px; mask-position: center; content: ''; diff --git a/res/css/views/elements/_ImageView.scss b/res/css/views/elements/_ImageView.scss index 9bf23b1025..52b6a63699 100644 --- a/res/css/views/elements/_ImageView.scss +++ b/res/css/views/elements/_ImageView.scss @@ -77,7 +77,8 @@ limitations under the License. .mx_ImageView_cancel { position: absolute; - top: 0px; + // hack for mx_Dialog having a top padding of 40px + top: 40px; right: 0px; padding: 35px; cursor: pointer; diff --git a/res/css/views/rooms/_EventTile.scss b/res/css/views/rooms/_EventTile.scss index a8f34565b5..24a23a0f98 100644 --- a/res/css/views/rooms/_EventTile.scss +++ b/res/css/views/rooms/_EventTile.scss @@ -278,6 +278,10 @@ limitations under the License. /* End to end encryption stuff */ +.mx_EventTile_e2eIcon:hover { + opacity: 1; +} + .mx_EventTile_e2eIcon { display: block; position: absolute; @@ -289,6 +293,7 @@ limitations under the License. mask-size: 14px; mask-repeat: no-repeat; mask-position: 0; + opacity: 0.2; } .mx_EventTile_e2eIcon_undecryptable, .mx_EventTile_e2eIcon_unverified { diff --git a/src/components/structures/LoggedInView.js b/src/components/structures/LoggedInView.js index 2303083d98..2e1b91fe0e 100644 --- a/src/components/structures/LoggedInView.js +++ b/src/components/structures/LoggedInView.js @@ -31,6 +31,7 @@ import sessionStore from '../../stores/SessionStore'; import MatrixClientPeg from '../../MatrixClientPeg'; import SettingsStore from "../../settings/SettingsStore"; import RoomListStore from "../../stores/RoomListStore"; +import { getHomePageUrl } from '../../utils/pages'; import TagOrderActions from '../../actions/TagOrderActions'; import RoomListActions from '../../actions/RoomListActions'; @@ -459,17 +460,7 @@ const LoggedInView = React.createClass({ case PageTypes.HomePage: { - const pagesConfig = this.props.config.embeddedPages; - let pageUrl = null; - if (pagesConfig) { - pageUrl = pagesConfig.homeUrl; - } - if (!pageUrl) { - // This is a deprecated config option for the home page - // (despite the name, given we also now have a welcome - // page, which is not the same). - pageUrl = this.props.config.welcomePageUrl; - } + const pageUrl = getHomePageUrl(this.props.config); pageElement = <EmbeddedPage className="mx_HomePage" url={pageUrl} scrollbar={true} diff --git a/src/components/structures/MatrixChat.js b/src/components/structures/MatrixChat.js index e534ced577..8bc1fbdd07 100644 --- a/src/components/structures/MatrixChat.js +++ b/src/components/structures/MatrixChat.js @@ -40,6 +40,7 @@ import * as Lifecycle from '../../Lifecycle'; // LifecycleStore is not used but does listen to and dispatch actions require('../../stores/LifecycleStore'); import PageTypes from '../../PageTypes'; +import { getHomePageUrl } from '../../utils/pages'; import createRoom from "../../createRoom"; import KeyRequestHandler from '../../KeyRequestHandler'; @@ -1198,8 +1199,12 @@ export default React.createClass({ } else { if (MatrixClientPeg.get().isGuest()) { dis.dispatch({action: 'view_welcome_page'}); - } else { + } else if (getHomePageUrl(this.props.config)) { dis.dispatch({action: 'view_home_page'}); + } else { + this.firstSyncPromise.promise.then(() => { + dis.dispatch({action: 'view_next_room'}); + }); } } }, diff --git a/src/components/structures/ScrollPanel.js b/src/components/structures/ScrollPanel.js index 1df5e876e8..a1a7d08e0b 100644 --- a/src/components/structures/ScrollPanel.js +++ b/src/components/structures/ScrollPanel.js @@ -211,6 +211,14 @@ module.exports = React.createClass({ // forget what we wanted, so don't overwrite the saved state unless // this appears to be a user-initiated scroll. if (sn.scrollTop != this._lastSetScroll) { + // when scrolling, we don't care about disappearing typing notifs shrinking the timeline + // this might cause the scrollbar to resize in case the max-height was not correct + // but that's better than ending up with a lot of whitespace at the bottom of the timeline. + // we need to above check because when showing the typing notifs, an onScroll event is also triggered + if (!this.isAtBottom()) { + this.clearBlockShrinking(); + } + this._saveScrollState(); } else { debuglog("Ignoring scroll echo"); diff --git a/src/components/views/dialogs/RedesignFeedbackDialog.js b/src/components/views/dialogs/RedesignFeedbackDialog.js index c428aca16a..8f345bdd92 100644 --- a/src/components/views/dialogs/RedesignFeedbackDialog.js +++ b/src/components/views/dialogs/RedesignFeedbackDialog.js @@ -20,14 +20,12 @@ import { _t } from '../../../languageHandler'; export default (props) => { const existingIssuesUrl = "https://github.com/vector-im/riot-web/issues" + - "?q=is%3Aopen+is%3Aissue+label%3Aredesign+sort%3Areactions-%2B1-desc"; - const newIssueUrl = "https://github.com/vector-im/riot-web/issues/new" + - "?assignees=&labels=redesign&template=redesign_issue.md&title="; + "?q=is%3Aopen+is%3Aissue+sort%3Areactions-%2B1-desc"; + const newIssueUrl = "https://github.com/vector-im/riot-web/issues/new"; const description1 = - _t("Thanks for testing the Riot Redesign. " + - "If you run into any bugs or visual issues, " + - "please let us know on GitHub."); + _t("If you run into any bugs or have feedback you'd like to share, " + + "please let us know on GitHub."); const description2 = _t("To help avoid duplicate issues, " + "please <existingIssuesLink>view existing issues</existingIssuesLink> " + "first (and add a +1) or <newIssueLink>create a new issue</newIssueLink> " + diff --git a/src/components/views/elements/LazyRenderList.js b/src/components/views/elements/LazyRenderList.js index 1c1cc127d6..d7d2a0ab99 100644 --- a/src/components/views/elements/LazyRenderList.js +++ b/src/components/views/elements/LazyRenderList.js @@ -73,12 +73,6 @@ export default class LazyRenderList extends React.Component { } } - shouldComponentUpdate(nextProps, nextState) { - const itemsChanged = nextProps.items !== this.props.items; - const rangeChanged = nextState.renderRange !== this.state.renderRange; - return itemsChanged || rangeChanged; - } - render() { const {itemHeight, items, renderItem} = this.props; diff --git a/src/components/views/settings/tabs/HelpSettingsTab.js b/src/components/views/settings/tabs/HelpSettingsTab.js index 524bddf3b1..4ad62451cb 100644 --- a/src/components/views/settings/tabs/HelpSettingsTab.js +++ b/src/components/views/settings/tabs/HelpSettingsTab.js @@ -126,6 +126,26 @@ export default class HelpSettingsTab extends React.Component { ); } + _renderCredits() { + // Note: This is not translated because it is legal text. + // Also, is ugly but necessary. + return ( + <div className='mx_SettingsTab_section'> + <span className='mx_SettingsTab_subheading'>{_t("Credits")}</span> + <ul> + <li> + The <a href="themes/riot/img/backgrounds/valley.jpg" rel="noopener" target="_blank"> + default cover photo</a> is (C) + <a href="https://www.flickr.com/golan" rel="noopener" target="_blank">Jesús Roncero</a> + used under the terms of + <a href="https://creativecommons.org/licenses/by-sa/4.0/" rel="noopener" target="_blank"> + CC-BY-SA 4.0</a>. No warranties are given. + </li> + </ul> + </div> + ); + } + render() { let faqText = _t('For help with using Riot, click <a>here</a>.', {}, { 'a': (sub) => <a href="https://about.riot.im/need-help/" rel='noopener' target='_blank'>{sub}</a>, @@ -211,6 +231,7 @@ export default class HelpSettingsTab extends React.Component { </div> </div> {this._renderLegal()} + {this._renderCredits()} <div className='mx_SettingsTab_section mx_HelpSettingsTab_versions'> <span className='mx_SettingsTab_subheading'>{_t("Advanced")}</span> <div className='mx_SettingsTab_subsectionText'> diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index fe41beb7ae..6c40e395ba 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -528,6 +528,7 @@ "Deactivating your account is a permanent action - be careful!": "Deactivating your account is a permanent action - be careful!", "Deactivate Account": "Deactivate Account", "Legal": "Legal", + "Credits": "Credits", "For help with using Riot, click <a>here</a>.": "For help with using Riot, click <a>here</a>.", "For help with using Riot, click <a>here</a> or start a chat with our bot using the button below.": "For help with using Riot, click <a>here</a> or start a chat with our bot using the button below.", "Chat with Riot Bot": "Chat with Riot Bot", @@ -1106,7 +1107,7 @@ "Manually export keys": "Manually export keys", "You'll lose access to your encrypted messages": "You'll lose access to your encrypted messages", "Are you sure you want to sign out?": "Are you sure you want to sign out?", - "Thanks for testing the Riot Redesign. If you run into any bugs or visual issues, please let us know on GitHub.": "Thanks for testing the Riot Redesign. If you run into any bugs or visual issues, please let us know on GitHub.", + "If you run into any bugs or have feedback you'd like to share, please let us know on GitHub.": "If you run into any bugs or have feedback you'd like to share, please let us know on GitHub.", "To help avoid duplicate issues, please <existingIssuesLink>view existing issues</existingIssuesLink> first (and add a +1) or <newIssueLink>create a new issue</newIssueLink> if you can't find it.": "To help avoid duplicate issues, please <existingIssuesLink>view existing issues</existingIssuesLink> first (and add a +1) or <newIssueLink>create a new issue</newIssueLink> if you can't find it.", "Report bugs & give feedback": "Report bugs & give feedback", "Go back": "Go back", diff --git a/src/settings/Settings.js b/src/settings/Settings.js index 4108848033..bb3cf9330c 100644 --- a/src/settings/Settings.js +++ b/src/settings/Settings.js @@ -324,12 +324,12 @@ export const SETTINGS = { "pinMentionedRooms": { supportedLevels: LEVELS_ACCOUNT_SETTINGS, displayName: _td("Pin rooms I'm mentioned in to the top of the room list"), - default: false, + default: true, }, "pinUnreadRooms": { supportedLevels: LEVELS_ACCOUNT_SETTINGS, displayName: _td("Pin unread rooms to the top of the room list"), - default: false, + default: true, }, "enableWidgetScreenshots": { supportedLevels: LEVELS_ACCOUNT_SETTINGS, diff --git a/src/utils/pages.js b/src/utils/pages.js new file mode 100644 index 0000000000..d63ca3f2c7 --- /dev/null +++ b/src/utils/pages.js @@ -0,0 +1,31 @@ +/* +Copyright 2019 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. +*/ + +export function getHomePageUrl(appConfig) { + const pagesConfig = appConfig.embeddedPages; + let pageUrl = null; + if (pagesConfig) { + pageUrl = pagesConfig.homeUrl; + } + if (!pageUrl) { + // This is a deprecated config option for the home page + // (despite the name, given we also now have a welcome + // page, which is not the same). + pageUrl = appConfig.welcomePageUrl; + } + + return pageUrl; +}