diff --git a/src/component-index.js b/src/component-index.js index b4c73a4b..dfe54993 100644 --- a/src/component-index.js +++ b/src/component-index.js @@ -37,6 +37,7 @@ module.exports.components['structures.ViewSource'] = require('./components/struc module.exports.components['views.context_menus.MessageContextMenu'] = require('./components/views/context_menus/MessageContextMenu'); module.exports.components['views.context_menus.NotificationStateContextMenu'] = require('./components/views/context_menus/NotificationStateContextMenu'); module.exports.components['views.context_menus.RoomTagContextMenu'] = require('./components/views/context_menus/RoomTagContextMenu'); +module.exports.components['views.dialogs.ChangelogDialog'] = require('./components/views/dialogs/ChangelogDialog'); module.exports.components['views.elements.ImageView'] = require('./components/views/elements/ImageView'); module.exports.components['views.elements.Spinner'] = require('./components/views/elements/Spinner'); module.exports.components['views.globals.GuestWarningBar'] = require('./components/views/globals/GuestWarningBar'); diff --git a/src/components/views/dialogs/ChangelogDialog.js b/src/components/views/dialogs/ChangelogDialog.js new file mode 100644 index 00000000..823c205b --- /dev/null +++ b/src/components/views/dialogs/ChangelogDialog.js @@ -0,0 +1,83 @@ +/* + Copyright 2016 Aviral Dasgupta + + 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 React from 'react'; +import sdk from 'matrix-react-sdk'; +import 'whatwg-fetch'; +import request from 'browser-request'; + +const REPOS = ['vector-im/vector-web', 'matrix-org/matrix-react-sdk', 'matrix-org/matrix-js-sdk']; + +export default class ChangelogDialog extends React.Component { + constructor(props) { + super(props); + + this.state = {}; + } + + componentDidMount() { + const version = this.props.newVersion.split('-'); + const version2 = this.props.version.split('-'); + if(version == null || version2 == null) return; + for(let i=0; i { + if(body == null) return; + this.setState({[REPOS[i]]: JSON.parse(body).commits}); + }); + } + } + + render() { + const Spinner = sdk.getComponent('views.elements.Spinner'); + const QuestionDialog = sdk.getComponent('dialogs.QuestionDialog'); + + const logs = REPOS.map(repo => { + if (this.state[repo] == null) return ; + return ( +
+

{repo}

+ {this.state[repo].map(commit => +
{commit.commit.message}
+ )} +
+ ) + }); + + const content = ( +
+ {this.props.version == null || this.props.newVersion == null ?

Unavailable

: logs} +
+ ); + + + return ( + + ) + } +} + +ChangelogDialog.propTypes = { + version: React.PropTypes.string.isRequired, + newVersion: React.PropTypes.string.isRequired, + onFinished: React.PropTypes.func.isRequired, +}; diff --git a/src/components/views/globals/NewVersionBar.js b/src/components/views/globals/NewVersionBar.js index 83dccf5d..8d819323 100644 --- a/src/components/views/globals/NewVersionBar.js +++ b/src/components/views/globals/NewVersionBar.js @@ -17,20 +17,36 @@ limitations under the License. 'use strict'; var React = require('react'); -var sdk = require('matrix-react-sdk') +var sdk = require('matrix-react-sdk'); +import Modal from 'matrix-react-sdk/lib/Modal'; -module.exports = React.createClass({ - displayName: 'NewVersionBar', +export default function NewVersionBar(props) { + const onChangelogClicked = () => { + const ChangelogDialog = sdk.getComponent('dialogs.ChangelogDialog'); - render: function() { - return ( -
- /!\ -
- A new version of Vector is available. Refresh your browser. -
+ Modal.createDialog(ChangelogDialog, { + version: props.version, + newVersion: props.newVersion, + onFinished: (update) => { + if(update) { + window.location.reload(); + } + } + }); + }; + + return ( +
+ /!\ +
+ A new version of Vector is available. Refresh your browser.
- ); - } -}); + +
+ ); +} +NewVersionBar.propTypes = { + version: React.PropTypes.string.isRequired, + newVersion: React.PropTypes.string.isRequired, +}; \ No newline at end of file diff --git a/src/skins/vector/css/vector-web/views/dialogs/ChangelogDialog.css b/src/skins/vector/css/vector-web/views/dialogs/ChangelogDialog.css new file mode 100644 index 00000000..37b865d9 --- /dev/null +++ b/src/skins/vector/css/vector-web/views/dialogs/ChangelogDialog.css @@ -0,0 +1,20 @@ +/* +Copyright 2016 Aviral Dasgupta + +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_ChangelogDialog_content { + max-height: 300px; + overflow: auto; +} diff --git a/src/skins/vector/css/vector-web/views/globals/MatrixToolbar.css b/src/skins/vector/css/vector-web/views/globals/MatrixToolbar.css index a8297f46..4e214e11 100644 --- a/src/skins/vector/css/vector-web/views/globals/MatrixToolbar.css +++ b/src/skins/vector/css/vector-web/views/globals/MatrixToolbar.css @@ -54,3 +54,7 @@ limitations under the License. float: right; margin-right: 10px; } + +.mx_MatrixToolbar_action { + margin-right: 16px; +}