diff --git a/.travis.yml b/.travis.yml index ff58bf374c..c68279a269 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,17 @@ language: node_js node_js: - - 6 # node v6, to match jenkins + # make sure we work with a range of node versions. + # As of the time of writing: + # - 4.x is still in LTS (until April 2018), but some of our deps (notably + # extract-zip) don't work with it + # - 5.x has been EOLed for nearly a year. + # - 6.x is the current 'LTS' version + # - 7.x is the current 'current' version (until October 2017) + # + # see: https://github.com/nodejs/LTS/ + - 6.0 + - 6 + - 7 install: - scripts/fetch-develop.deps.sh - npm install diff --git a/README.md b/README.md index 4c5452e146..be3f3a8b4b 100644 --- a/README.md +++ b/README.md @@ -55,9 +55,10 @@ Building From Source Riot is a modular webapp built with modern ES6 and requires a npm build system to build. -1. Install or update `node.js` so that your `npm` is at least at version `2.0.0` -1. Clone the repo: `git clone https://github.com/vector-im/riot-web.git` -1. Switch to the riot-web directory: `cd riot-web` +1. Install or update `node.js` so that your `node` is at least v6.0.0 (and `npm` + is at least v3.8.6). +1. Clone the repo: `git clone https://github.com/vector-im/riot-web.git`. +1. Switch to the riot-web directory: `cd riot-web`. 1. If you're using the `develop` branch, install the develop versions of the dependencies, as the released ones will be too old: ``` @@ -65,7 +66,7 @@ to build. ``` Whenever you git pull on riot-web you will also probably need to force an update to these dependencies - the simplest way is to re-run the script, but you can also - manually update and reuild them: + manually update and rebuild them: ``` cd matrix-js-sdk git pull @@ -85,10 +86,10 @@ to build. up-to-date. Or just use https://riot.im/develop - the continuous integration release of the develop branch. (Note that we don't reference the develop versions in git directly due to - https://github.com/npm/npm/issues/3055) -1. Install the prerequisites: `npm install` + https://github.com/npm/npm/issues/3055.) +1. Install the prerequisites: `npm install`. 1. Configure the app by copying `config.sample.json` to `config.json` and - modifying it (see below for details) + modifying it (see below for details). 1. `npm run dist` to build a tarball to deploy. Untaring this file will give a version-specific directory containing all the files that need to go on your web server. diff --git a/config.sample.json b/config.sample.json index 3c513f7ab2..c9b3d65b0f 100644 --- a/config.sample.json +++ b/config.sample.json @@ -10,5 +10,9 @@ "servers": [ "matrix.org" ] + }, + "piwik": { + "url": "https://piwik.riot.im/", + "siteId": 1 } } diff --git a/electron_app/riot.im/config.json b/electron_app/riot.im/config.json index 80526f4ab8..1303985ecd 100644 --- a/electron_app/riot.im/config.json +++ b/electron_app/riot.im/config.json @@ -12,5 +12,9 @@ "servers": [ "matrix.org" ] + }, + "piwik": { + "url": "https://piwik.riot.im/", + "siteId": 1 } } diff --git a/src/components/structures/RightPanel.js b/src/components/structures/RightPanel.js index c7f5394bf1..230572002d 100644 --- a/src/components/structures/RightPanel.js +++ b/src/components/structures/RightPanel.js @@ -22,6 +22,7 @@ import sdk from 'matrix-react-sdk'; import Matrix from "matrix-js-sdk"; import dis from 'matrix-react-sdk/lib/dispatcher'; import MatrixClientPeg from 'matrix-react-sdk/lib/MatrixClientPeg'; +import Analytics from 'matrix-react-sdk/lib/Analytics'; import rate_limited_func from 'matrix-react-sdk/lib/ratelimitedfunc'; import Modal from 'matrix-react-sdk/lib/Modal'; import AccessibleButton from 'matrix-react-sdk/lib/components/views/elements/AccessibleButton'; @@ -61,24 +62,26 @@ module.exports = React.createClass({ return { phase: this.Phase.MemberInfo, member: member, - } - } - else { + }; + } else { return { phase: this.Phase.MemberList - } + }; } }, onMemberListButtonClick: function() { + Analytics.trackEvent('Right Panel', 'Member List Button', 'click'); this.setState({ phase: this.Phase.MemberList }); }, onFileListButtonClick: function() { + Analytics.trackEvent('Right Panel', 'File List Button', 'click'); this.setState({ phase: this.Phase.FilePanel }); }, onNotificationListButtonClick: function() { + Analytics.trackEvent('Right Panel', 'Notification List Button', 'click'); this.setState({ phase: this.Phase.NotificationPanel }); }, diff --git a/src/components/views/globals/MatrixToolbar.js b/src/components/views/globals/MatrixToolbar.js index 6d47ad1b9e..488b5def47 100644 --- a/src/components/views/globals/MatrixToolbar.js +++ b/src/components/views/globals/MatrixToolbar.js @@ -16,11 +16,10 @@ limitations under the License. 'use strict'; -var React = require('react'); +import React from 'react'; import { _t } from 'matrix-react-sdk/lib/languageHandler'; -var Notifier = require("matrix-react-sdk/lib/Notifier"); -var sdk = require('matrix-react-sdk') -var AccessibleButton = require('matrix-react-sdk/lib/components/views/elements/AccessibleButton'); +import Notifier from 'matrix-react-sdk/lib/Notifier'; +import AccessibleButton from 'matrix-react-sdk/lib/components/views/elements/AccessibleButton'; module.exports = React.createClass({ displayName: 'MatrixToolbar', @@ -43,5 +42,5 @@ module.exports = React.createClass({ ); - } + }, }); diff --git a/src/vector/index.js b/src/vector/index.js index 14f8bb4b36..432710fbc2 100644 --- a/src/vector/index.js +++ b/src/vector/index.js @@ -56,7 +56,7 @@ if (process.env.NODE_ENV !== 'production') { var RunModernizrTests = require("./modernizr"); // this side-effects a global var ReactDOM = require("react-dom"); var sdk = require("matrix-react-sdk"); -var PlatformPeg = require("matrix-react-sdk/lib/PlatformPeg"); +const PlatformPeg = require("matrix-react-sdk/lib/PlatformPeg"); sdk.loadSkin(require('../component-index')); var VectorConferenceHandler = require('../VectorConferenceHandler'); var UpdateChecker = require("./updater"); @@ -143,7 +143,7 @@ var onNewScreen = function(screen) { var hash = '#/' + screen; lastLocationHashSet = hash; window.location.hash = hash; -} +}; // We use this to work out what URL the SDK should // pass through when registering to allow the user to @@ -295,8 +295,7 @@ async function loadApp() { />, document.getElementById('matrixchat') ); - } - else { + } else { console.error("Browser is missing required features."); // take to a different landing page to AWOOOOOGA at the user var CompatibilityPage = sdk.getComponent("structures.CompatibilityPage"); diff --git a/src/vector/platform/ElectronPlatform.js b/src/vector/platform/ElectronPlatform.js index bf930a674f..13604cdabe 100644 --- a/src/vector/platform/ElectronPlatform.js +++ b/src/vector/platform/ElectronPlatform.js @@ -67,6 +67,10 @@ export default class ElectronPlatform extends VectorBasePlatform { dis.register(_onAction); } + getHumanReadableName(): string { + return 'Electron Platform'; + } + setNotificationCount(count: number) { if (this.notificationCount === count) return; super.setNotificationCount(count); diff --git a/src/vector/platform/VectorBasePlatform.js b/src/vector/platform/VectorBasePlatform.js index 00c9c47c30..04caecdc2d 100644 --- a/src/vector/platform/VectorBasePlatform.js +++ b/src/vector/platform/VectorBasePlatform.js @@ -35,6 +35,10 @@ export default class VectorBasePlatform extends BasePlatform { this._updateFavicon(); } + getHumanReadableName(): string { + return 'Vector Base Platform'; + } + _updateFavicon() { try { // This needs to be in in a try block as it will throw diff --git a/src/vector/platform/WebPlatform.js b/src/vector/platform/WebPlatform.js index cdff7344a6..1a3c46fb0b 100644 --- a/src/vector/platform/WebPlatform.js +++ b/src/vector/platform/WebPlatform.js @@ -31,6 +31,10 @@ export default class WebPlatform extends VectorBasePlatform { this.runningVersion = null; } + getHumanReadableName(): string { + return 'Web Platform'; + } + /** * Returns true if the platform supports displaying * notifications, otherwise false.