Merge remote-tracking branch 'origin/develop' into develop

pull/8546/head
Weblate 2019-02-13 09:39:14 +00:00
commit 8e2529f068
5 changed files with 54 additions and 50 deletions

View File

@ -127,6 +127,11 @@ For a good example, see https://riot.im/develop/config.json
release to release. release to release.
1. `brand`: String to pass to your homeserver when configuring email notifications, to let the 1. `brand`: String to pass to your homeserver when configuring email notifications, to let the
homeserver know what email template to use when talking to you. homeserver know what email template to use when talking to you.
1. `branding`: Configures various branding and logo details, such as:
1. `welcomeBackgroundUrl`: An image to use as a wallpaper outside the app
during authentication flows
1. `authHeaderLogoUrl`: An logo image that is shown in the header during
authentication flows
1. `integrations_ui_url`: URL to the web interface for the integrations server. The integrations 1. `integrations_ui_url`: URL to the web interface for the integrations server. The integrations
server is not Riot and normally not your homeserver either. The integration server settings server is not Riot and normally not your homeserver either. The integration server settings
may be left blank to disable integrations. may be left blank to disable integrations.

View File

@ -78,7 +78,7 @@ module.exports = function (config) {
watched: false, included: false, served: true, nocache: false, watched: false, included: false, served: true, nocache: false,
}, },
{ {
pattern: 'res/themes/**', pattern: 'res/**',
watched: false, included: false, served: true, nocache: false, watched: false, included: false, served: true, nocache: false,
}, },
], ],
@ -87,6 +87,8 @@ module.exports = function (config) {
// redirect img links to the karma server. See above. // redirect img links to the karma server. See above.
"/img/": "/base/node_modules/matrix-react-sdk/res/img/", "/img/": "/base/node_modules/matrix-react-sdk/res/img/",
"/themes/": "/base/res/themes/", "/themes/": "/base/res/themes/",
"/welcome.html": "/base/res/welcome.html",
"/welcome/": "/base/res/welcome/",
}, },
// preprocess matching files before serving them to the browser // preprocess matching files before serving them to the browser

View File

@ -19,23 +19,26 @@ limitations under the License.
import React from 'react'; import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import SdkConfig from 'matrix-react-sdk/lib/SdkConfig';
const LOGO_URI = "themes/riot/img/logos/riot-im-logo-black-text.svg"; export default class VectorAuthHeaderLogo extends React.PureComponent {
static replaces = 'AuthHeaderLogo'
module.exports = React.createClass({ static propTypes = {
displayName: 'VectorAuthHeaderLogo',
statics: {
replaces: 'AuthHeaderLogo',
},
propTypes: {
icon: PropTypes.string, icon: PropTypes.string,
}, }
render() {
const brandingConfig = SdkConfig.get().branding;
let logoUrl = "themes/riot/img/logos/riot-im-logo-black-text.svg";
if (brandingConfig && brandingConfig.authHeaderLogoUrl) {
logoUrl = brandingConfig.authHeaderLogoUrl;
}
render: function() {
return ( return (
<div className="mx_AuthHeaderLogo"> <div className="mx_AuthHeaderLogo">
<img src={LOGO_URI} alt="Riot" /> <img src={logoUrl} alt="Riot" />
</div> </div>
); );
}, }
}); }

View File

@ -16,21 +16,24 @@ limitations under the License.
'use strict'; 'use strict';
const React = require('react'); import React from 'react';
import sdk from 'matrix-react-sdk/lib/index'; import sdk from 'matrix-react-sdk/lib/index';
import SdkConfig from 'matrix-react-sdk/lib/SdkConfig';
module.exports = React.createClass({ export default class VectorAuthPage extends React.PureComponent {
displayName: 'VectorAuthPage', static replaces = 'AuthPage'
statics: { render() {
replaces: 'AuthPage',
},
render: function() {
const AuthFooter = sdk.getComponent('auth.AuthFooter'); const AuthFooter = sdk.getComponent('auth.AuthFooter');
const brandingConfig = SdkConfig.get().branding;
let backgroundUrl = "themes/riot/img/backgrounds/valley.jpg";
if (brandingConfig && brandingConfig.welcomeBackgroundUrl) {
backgroundUrl = brandingConfig.welcomeBackgroundUrl;
}
const pageStyle = { const pageStyle = {
background: 'center/cover fixed url(themes/riot/img/backgrounds/valley.jpg)', background: `center/cover fixed url(${backgroundUrl})`,
}; };
const modalStyle = { const modalStyle = {
@ -66,5 +69,5 @@ module.exports = React.createClass({
<AuthFooter /> <AuthFooter />
</div> </div>
); );
}, }
}); }

View File

@ -222,8 +222,7 @@ describe('loading:', function() {
}).done(done, done); }).done(done, done);
}); });
// TODO: Repair this test in https://github.com/vector-im/riot-web/issues/8468 it('should follow the original link after successful login', function(done) {
/* it('should follow the original link after successful login', function(done) {
loadApp({ loadApp({
uriFragment: "#/room/!room:id", uriFragment: "#/room/!room:id",
}); });
@ -258,10 +257,9 @@ describe('loading:', function() {
expect(localStorage.getItem('mx_hs_url')).toEqual(DEFAULT_HS_URL); expect(localStorage.getItem('mx_hs_url')).toEqual(DEFAULT_HS_URL);
expect(localStorage.getItem('mx_is_url')).toEqual(DEFAULT_IS_URL); expect(localStorage.getItem('mx_is_url')).toEqual(DEFAULT_IS_URL);
}).done(done, done); }).done(done, done);
}); */ });
// TODO: Repair this test in https://github.com/vector-im/riot-web/issues/8468 it('should not register as a guest when using a #/login link', function() {
/* it('should not register as a guest when using a #/login link', function() {
loadApp({ loadApp({
uriFragment: "#/login", uriFragment: "#/login",
}); });
@ -288,7 +286,7 @@ describe('loading:', function() {
matrixChat, sdk.getComponent('structures.EmbeddedPage')); matrixChat, sdk.getComponent('structures.EmbeddedPage'));
expect(windowLocation.hash).toEqual("#/home"); expect(windowLocation.hash).toEqual("#/home");
}); });
}); */ });
}); });
describe("MatrixClient rehydrated from stored credentials:", function() { describe("MatrixClient rehydrated from stored credentials:", function() {
@ -300,8 +298,7 @@ describe('loading:', function() {
localStorage.setItem("mx_last_room_id", "!last_room:id"); localStorage.setItem("mx_last_room_id", "!last_room:id");
}); });
// TODO: Repair this test in https://github.com/vector-im/riot-web/issues/8468 it('shows the last known room by default', function() {
/* it('shows the last known room by default', function() {
httpBackend.when('GET', '/pushrules').respond(200, {}); httpBackend.when('GET', '/pushrules').respond(200, {});
httpBackend.when('POST', '/filter').respond(200, { filter_id: 'fid' }); httpBackend.when('POST', '/filter').respond(200, { filter_id: 'fid' });
@ -357,7 +354,7 @@ describe('loading:', function() {
httpBackend.verifyNoOutstandingExpectation(); httpBackend.verifyNoOutstandingExpectation();
expect(windowLocation.hash).toEqual("#/room/!room:id"); expect(windowLocation.hash).toEqual("#/room/!room:id");
}).done(done, done); }).done(done, done);
}); */ });
describe('/#/login link:', function() { describe('/#/login link:', function() {
beforeEach(function() { beforeEach(function() {
@ -387,8 +384,7 @@ describe('loading:', function() {
} }
}); });
// TODO: Repair this test in https://github.com/vector-im/riot-web/issues/8468 it('shows the homepage after login', function() {
/* it('shows the homepage after login', function() {
return completeLogin(matrixChat).then(() => { return completeLogin(matrixChat).then(() => {
// we should see a home page, even though we previously had // we should see a home page, even though we previously had
// a stored mx_last_room_id // a stored mx_last_room_id
@ -396,13 +392,12 @@ describe('loading:', function() {
matrixChat, sdk.getComponent('structures.EmbeddedPage')); matrixChat, sdk.getComponent('structures.EmbeddedPage'));
expect(windowLocation.hash).toEqual("#/home"); expect(windowLocation.hash).toEqual("#/home");
}); });
}); */ });
}); });
}); });
describe('Guest auto-registration:', function() { describe('Guest auto-registration:', function() {
// TODO: Repair this test in https://github.com/vector-im/riot-web/issues/8468 it('shows a welcome page by default', function(done) {
/* it('shows a welcome page by default', function(done) {
loadApp(); loadApp();
Promise.delay(1).then(() => { Promise.delay(1).then(() => {
@ -430,10 +425,9 @@ describe('loading:', function() {
matrixChat, sdk.getComponent('auth.Welcome')); matrixChat, sdk.getComponent('auth.Welcome'));
expect(windowLocation.hash).toEqual("#/welcome"); expect(windowLocation.hash).toEqual("#/welcome");
}).done(done, done); }).done(done, done);
}); */ });
// TODO: Repair this test in https://github.com/vector-im/riot-web/issues/8468 it('uses the default homeserver to register with', function(done) {
/* it('uses the default homeserver to register with', function(done) {
loadApp(); loadApp();
Promise.delay(1).then(() => { Promise.delay(1).then(() => {
@ -457,15 +451,15 @@ describe('loading:', function() {
}).then((req) => { }).then((req) => {
expect(req.path).toStartWith(DEFAULT_HS_URL); expect(req.path).toStartWith(DEFAULT_HS_URL);
// once the sync completes, we should have a home page // once the sync completes, we should have a welcome page
httpBackend.verifyNoOutstandingExpectation(); httpBackend.verifyNoOutstandingExpectation();
ReactTestUtils.findRenderedComponentWithType( ReactTestUtils.findRenderedComponentWithType(
matrixChat, sdk.getComponent('structures.EmbeddedPage')); matrixChat, sdk.getComponent('auth.Welcome'));
expect(windowLocation.hash).toEqual("#/home"); expect(windowLocation.hash).toEqual("#/welcome");
expect(MatrixClientPeg.get().baseUrl).toEqual(DEFAULT_HS_URL); expect(MatrixClientPeg.get().baseUrl).toEqual(DEFAULT_HS_URL);
expect(MatrixClientPeg.get().idBaseUrl).toEqual(DEFAULT_IS_URL); expect(MatrixClientPeg.get().idBaseUrl).toEqual(DEFAULT_IS_URL);
}).done(done, done); }).done(done, done);
}); */ });
it('shows a room view if we followed a room link', function(done) { it('shows a room view if we followed a room link', function(done) {
loadApp({ loadApp({
@ -534,15 +528,14 @@ describe('loading:', function() {
}); });
}); });
// TODO: Repair this test in https://github.com/vector-im/riot-web/issues/8468 it('should give us a login page', function() {
/* it('should give us a login page', function() {
expect(windowLocation.hash).toEqual("#/login"); expect(windowLocation.hash).toEqual("#/login");
// we expect a single <Login> component // we expect a single <Login> component
ReactTestUtils.findRenderedComponentWithType( ReactTestUtils.findRenderedComponentWithType(
matrixChat, sdk.getComponent('structures.auth.Login'), matrixChat, sdk.getComponent('structures.auth.Login'),
); );
}); */ });
/* /*
// ILAG renders this obsolete. I think. // ILAG renders this obsolete. I think.
@ -684,8 +677,6 @@ function awaitSyncingSpinner(matrixChat, retryLimit, retryCount) {
console.log(Date.now() + " Awaiting sync spinner: load complete."); console.log(Date.now() + " Awaiting sync spinner: load complete.");
// state looks good, check the rendered output
assertAtSyncingSpinner(matrixChat);
return Promise.resolve(); return Promise.resolve();
} }