From 7ee534388b177d4f2f8f54663527ddbbdbe1d657 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Wed, 18 Apr 2018 10:20:35 +0100 Subject: [PATCH] convert VectorHomePage into ES6 and have it nicely override HomePage --- src/components/structures/VectorHomePage.js | 95 +++------------------ 1 file changed, 10 insertions(+), 85 deletions(-) diff --git a/src/components/structures/VectorHomePage.js b/src/components/structures/VectorHomePage.js index 52c9226f8f..5bca577872 100644 --- a/src/components/structures/VectorHomePage.js +++ b/src/components/structures/VectorHomePage.js @@ -18,97 +18,22 @@ limitations under the License. 'use strict'; import React from 'react'; -import request from 'browser-request'; -import { _t } from 'matrix-react-sdk/lib/languageHandler'; +import HomePage from 'matrix-react-sdk/lib/components/structures/HomePage'; import sanitizeHtml from 'sanitize-html'; -import sdk from 'matrix-react-sdk/lib'; +import { _t } from 'matrix-react-sdk/lib/languageHandler'; -module.exports = React.createClass({ - displayName: 'VectorHomePage', - statics: { - replaces: 'HomePage', - }, +class VectorHomePage extends HomePage { + displayName = 'VectorHomePage' + static replaces = 'HomePage' - propTypes: { - // URL base of the team server. Optional. - teamServerUrl: React.PropTypes.string, - // Team token. Optional. If set, used to get the static homepage of the team - // associated. If unset, homePageUrl will be used. - teamToken: React.PropTypes.string, - // URL to use as the iFrame src. Defaults to /home.html. - homePageUrl: React.PropTypes.string, - }, - - getInitialState: function() { - return { - iframeSrc: '', - page: '', - }; - }, - - translate: function(s) { + // we're overriding the base component here, for Riot-specific tweaks + translate(s) { s = sanitizeHtml(_t(s)); // ugly fix for https://github.com/vector-im/riot-web/issues/4243 s = s.replace(/Riot\.im/, 'Riot.im'); s = s.replace(/\[matrix\]/, '[matrix]'); return s; - }, - - componentWillMount: function() { - this._unmounted = false; - - if (this.props.teamToken && this.props.teamServerUrl) { - this.setState({ - iframeSrc: `${this.props.teamServerUrl}/static/${this.props.teamToken}/home.html` - }); - } - else { - // we use request() to inline the homepage into the react component - // so that it can inherit CSS and theming easily rather than mess around - // with iframes and trying to synchronise document.stylesheets. - - let src = this.props.homePageUrl || 'home.html'; - - request( - { method: "GET", url: src }, - (err, response, body) => { - if (this._unmounted) { - return; - } - - if (err || response.status < 200 || response.status >= 300) { - console.warn(`Error loading home page: ${err}`); - this.setState({ page: _t("Couldn't load home page") }); - return; - } - - body = body.replace(/_t\(['"]([\s\S]*?)['"]\)/mg, (match, g1)=>this.translate(g1)); - this.setState({ page: body }); - } - ); - } - }, - - componentWillUnmount: function() { - this._unmounted = true; - }, - - render: function() { - if (this.state.iframeSrc) { - return ( -
-