diff --git a/CHANGELOG.md b/CHANGELOG.md index 94ad4602..2103aad1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,122 @@ +Changes in [0.7.4-r1](https://github.com/vector-im/vector-web/releases/tag/v0.7.4-r1) (2016-08-12) +================================================================================================== +[Full Changelog](https://github.com/vector-im/vector-web/compare/v0.7.4...v0.7.4-r1) + * Update to matrix-react-sdk 0.6.4-r1 to fix inviting multiple people + + +Changes in [0.7.4](https://github.com/vector-im/vector-web/releases/tag/v0.7.4) (2016-08-11) +============================================================================================ +[Full Changelog](https://github.com/vector-im/vector-web/compare/v0.7.3...v0.7.4) + + * Don't show border on composer when not in RTE mode + [\#1954](https://github.com/vector-im/vector-web/pull/1954) + * Wmwragg/room tag menu + [\#1941](https://github.com/vector-im/vector-web/pull/1941) + * Don't redirect to mobile app if verifying 3pid + [\#1951](https://github.com/vector-im/vector-web/pull/1951) + * Make sure that we clear localstorage before *all* tests + [\#1950](https://github.com/vector-im/vector-web/pull/1950) + * Basic CSS for multi-invite dialog + [\#1942](https://github.com/vector-im/vector-web/pull/1942) + * More tests for the loading process: + [\#1947](https://github.com/vector-im/vector-web/pull/1947) + * Support for refactored login token handling + [\#1946](https://github.com/vector-im/vector-web/pull/1946) + * Various fixes and improvements to emojification. + [\#1935](https://github.com/vector-im/vector-web/pull/1935) + * More app-loading tests + [\#1938](https://github.com/vector-im/vector-web/pull/1938) + * Some tests of the application load process + [\#1936](https://github.com/vector-im/vector-web/pull/1936) + * Add 'enable labs' setting to sample config + [\#1930](https://github.com/vector-im/vector-web/pull/1930) + * Matthew/scalar + [\#1928](https://github.com/vector-im/vector-web/pull/1928) + * Fix unit tests + [\#1929](https://github.com/vector-im/vector-web/pull/1929) + * Wmwragg/mute mention state fix + [\#1926](https://github.com/vector-im/vector-web/pull/1926) + * CSS for deactivate account dialog + [\#1919](https://github.com/vector-im/vector-web/pull/1919) + * Wmwragg/mention state menu + [\#1900](https://github.com/vector-im/vector-web/pull/1900) + * Fix UnknownBody styling for #1901 + [\#1913](https://github.com/vector-im/vector-web/pull/1913) + * Exclude olm from the webpack + [\#1914](https://github.com/vector-im/vector-web/pull/1914) + * Wmwragg/button updates + [\#1912](https://github.com/vector-im/vector-web/pull/1912) + * Wmwragg/button updates + [\#1828](https://github.com/vector-im/vector-web/pull/1828) + * CSS for device management UI + [\#1909](https://github.com/vector-im/vector-web/pull/1909) + * Fix a warning from RoomSubList + [\#1908](https://github.com/vector-im/vector-web/pull/1908) + * Fix notifications warning layout + [\#1907](https://github.com/vector-im/vector-web/pull/1907) + * Remove relayoutOnUpdate prop on gemini-scrollbar + [\#1883](https://github.com/vector-im/vector-web/pull/1883) + * Bump dependency versions + [\#1842](https://github.com/vector-im/vector-web/pull/1842) + * Wmwragg/mention state indicator round 2 + [\#1835](https://github.com/vector-im/vector-web/pull/1835) + * Wmwragg/spinner fix + [\#1822](https://github.com/vector-im/vector-web/pull/1822) + * Wmwragg/mention state indicator + [\#1823](https://github.com/vector-im/vector-web/pull/1823) + * Revert "Presentation for inline link" + [\#1809](https://github.com/vector-im/vector-web/pull/1809) + * Wmwragg/modal restyle + [\#1806](https://github.com/vector-im/vector-web/pull/1806) + * Presentation for inline link + [\#1799](https://github.com/vector-im/vector-web/pull/1799) + * CSS for offline user colours + [\#1798](https://github.com/vector-im/vector-web/pull/1798) + * Wmwragg/typography updates + [\#1776](https://github.com/vector-im/vector-web/pull/1776) + * webpack: always use the olm from vector-web + [\#1766](https://github.com/vector-im/vector-web/pull/1766) + * feat: large emoji support + [\#1718](https://github.com/vector-im/vector-web/pull/1718) + * Autocomplete + [\#1717](https://github.com/vector-im/vector-web/pull/1717) + * #1664 Set a maximum height for codeblocks + [\#1670](https://github.com/vector-im/vector-web/pull/1670) + * CSS for device blocking + [\#1688](https://github.com/vector-im/vector-web/pull/1688) + * Fix joining rooms by typing the alias + [\#1685](https://github.com/vector-im/vector-web/pull/1685) + * Add ability to delete an alias from room directory + [\#1680](https://github.com/vector-im/vector-web/pull/1680) + * package.json: add olm as optionalDependency + [\#1678](https://github.com/vector-im/vector-web/pull/1678) + * Another go at enabling olm on vector.im/develop + [\#1675](https://github.com/vector-im/vector-web/pull/1675) + * CSS for unverify button + [\#1661](https://github.com/vector-im/vector-web/pull/1661) + * CSS fix for rooms with crypto enabled + [\#1660](https://github.com/vector-im/vector-web/pull/1660) + * Karma: fix warning by ignoring olm + [\#1652](https://github.com/vector-im/vector-web/pull/1652) + * Update for react-sdk dbkr/fix_peeking branch + [\#1639](https://github.com/vector-im/vector-web/pull/1639) + * Update README.md + [\#1641](https://github.com/vector-im/vector-web/pull/1641) + * Fix karma tests + [\#1643](https://github.com/vector-im/vector-web/pull/1643) + * Rich Text Editor + [\#1553](https://github.com/vector-im/vector-web/pull/1553) + * Fix RoomDirectory to join by alias whenever possible. + [\#1615](https://github.com/vector-im/vector-web/pull/1615) + * Make the config optional + [\#1612](https://github.com/vector-im/vector-web/pull/1612) + * CSS support for device verification + [\#1610](https://github.com/vector-im/vector-web/pull/1610) + * Don't use SdkConfig + [\#1609](https://github.com/vector-im/vector-web/pull/1609) + * serve config.json statically instead of bundling it + [\#1516](https://github.com/vector-im/vector-web/pull/1516) + Changes in [0.7.3](https://github.com/vector-im/vector-web/releases/tag/v0.7.3) (2016-06-03) ============================================================================================ [Full Changelog](https://github.com/vector-im/vector-web/compare/v0.7.2...v0.7.3) diff --git a/README.md b/README.md index 540c5750..a940da64 100644 --- a/README.md +++ b/README.md @@ -173,6 +173,10 @@ will watch for changes to the files and rebuild automatically. If you add or remove any components from the Vector skin, you will need to rebuild the skin's index by running, `npm run reskindex`. +If any of these steps error with, `file table overflow`, you are probably on a mac +which has a very low limit on max open files. Run `ulimit -Sn 1024` and try again. +You'll need to do this in each new terminal you open before building vector. + Filing issues ============= diff --git a/package.json b/package.json index 3863cd14..be87139b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "vector-web", - "version": "0.7.3", + "version": "0.7.4-r1", "description": "Vector webapp", "author": "matrix.org", "repository": { @@ -18,7 +18,7 @@ "build:compile": "babel --source-maps -d lib src", "build:bundle": "NODE_ENV=production webpack -p lib/vector/index.js vector/bundle.js", "build:bundle:dev": "NODE_ENV=production webpack --optimize-occurence-order lib/vector/index.js vector/bundle.js", - "build:staticfiles": "scripts/staticfiles.js", + "build:staticfiles": "cpx -v node_modules/olm/olm.js vector/", "build": "npm run build:staticfiles && npm run build:emojione && npm run build:css && npm run build:compile && npm run build:bundle", "build:dev": "npm run build:staticfiles && npm run build:emojione && npm run build:css && npm run build:compile && npm run build:bundle:dev", "package": "scripts/package.sh", @@ -26,9 +26,10 @@ "start:js": "webpack -w src/vector/index.js vector/bundle.js", "start:js:prod": "NODE_ENV=production webpack -w src/vector/index.js vector/bundle.js", "start:skins:css": "catw \"src/skins/vector/css/**/*.css\" -o vector/components.css", + "start:staticfiles": "cpx -Lwv node_modules/olm/olm.js vector/", "//cache": "Note the -c 1 below due to https://code.google.com/p/chromium/issues/detail?id=508270", - "start": "parallelshell \"npm run build:staticfiles\" \"npm run start:emojione\" \"npm run start:js\" \"npm run start:skins:css\" \"http-server -c 1 vector\"", - "start:prod": "parallelshell \"npm run build:staticfiles\" \"npm run start:emojione\" \"npm run start:js:prod\" \"npm run start:skins:css\" \"http-server -c 1 vector\"", + "start": "parallelshell \"npm run start:staticfiles\" \"npm run start:emojione\" \"npm run start:js\" \"npm run start:skins:css\" \"http-server -c 1 vector\"", + "start:prod": "parallelshell \"npm run start:staticfiles\" \"npm run start:emojione\" \"npm run start:js:prod\" \"npm run start:skins:css\" \"http-server -c 1 vector\"", "clean": "rimraf lib vector/olm.js vector/bundle.css vector/bundle.js vector/bundle.js.map vector/webpack.css* vector/emojione", "prepublish": "npm run build:css && npm run build:compile", "test": "karma start --single-run=true --autoWatch=false --browsers PhantomJS --colors=false", @@ -55,7 +56,9 @@ "react-dnd-html5-backend": "^2.1.2", "react-dom": "^15.2.1", "react-gemini-scrollbar": "matrix-org/react-gemini-scrollbar#5e97aef", - "sanitize-html": "^1.11.1" + "sanitize-html": "^1.11.1", + "ua-parser-js": "^0.7.10", + "url": "^0.11.0" }, "devDependencies": { "babel": "^5.8.23", diff --git a/scripts/staticfiles.js b/scripts/staticfiles.js deleted file mode 100755 index 3dbf451c..00000000 --- a/scripts/staticfiles.js +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env node - -// copy static files from node_modules to the vector directory -// - -var fs = require('fs-extra'); - -function exists(f) { - try { - fs.statSync(f); - return true; - } catch(e) { - return false; - } -} - -const olm = 'node_modules/olm/olm.js'; -if (exists(olm)) { - console.log("copy", olm, "-> vector"); - fs.copySync(olm, 'vector/olm.js'); -} diff --git a/src/components/views/context_menus/NotificationStateContextMenu.js b/src/components/views/context_menus/NotificationStateContextMenu.js index 8430f8ef..243275db 100644 --- a/src/components/views/context_menus/NotificationStateContextMenu.js +++ b/src/components/views/context_menus/NotificationStateContextMenu.js @@ -19,8 +19,8 @@ limitations under the License. var q = require("q"); var React = require('react'); var classNames = require('classnames'); +var RoomNotifs = require('matrix-react-sdk/lib/RoomNotifs'); var MatrixClientPeg = require('matrix-react-sdk/lib/MatrixClientPeg'); -var dis = require('matrix-react-sdk/lib/dispatcher'); module.exports = React.createClass({ displayName: 'NotificationStateContextMenu', @@ -31,95 +31,86 @@ module.exports = React.createClass({ onFinished: React.PropTypes.func, }, - getInitialState: function() { - var areNotifsMuted = false; - var cli = MatrixClientPeg.get(); - if (!cli.isGuest()) { - var roomPushRule = cli.getRoomPushRule("global", this.props.room.roomId); - if (roomPushRule) { - if (0 <= roomPushRule.actions.indexOf("dont_notify")) { - areNotifsMuted = true; - } - } - } - + getInitialState() { return { - areNotifsMuted: areNotifsMuted, - }; + roomNotifState: RoomNotifs.getRoomNotifsState(this.props.room.roomId), + } }, - _save: function( areNotifsMuted ) { - var self = this; + componentWillMount: function() { + this._unmounted = false; + }, + + componentWillUnmount: function() { + this._unmounted = true; + }, + + _save: function(newState) { + const oldState = this.state.roomNotifState; const roomId = this.props.room.roomId; var cli = MatrixClientPeg.get(); - if (!cli.isGuest()) { - // Wrapping this in a q promise, as setRoomMutePushRule can return - // a promise or a value - q(cli.setRoomMutePushRule("global", roomId, areNotifsMuted)) - .then(function() { - self.setState({areNotifsMuted: areNotifsMuted}); + if (cli.isGuest()) return; - // delay slightly so that the user can see their state change - // before closing the menu - return q.delay(500).then(function() { - // tell everyone that wants to know of the change in - // notification state - dis.dispatch({ - action: 'notification_change', - roomId: self.props.room.roomId, - areNotifsMuted: areNotifsMuted, - }); - - // Close the context menu - if (self.props.onFinished) { - self.props.onFinished(); - }; - }); - }).fail(function(error) { - // TODO: some form of error notification to the user - // to inform them that their state change failed. + this.setState({ + roomNotifState: newState, + }); + RoomNotifs.setRoomNotifsState(this.props.room.roomId, newState).done(() => { + // delay slightly so that the user can see their state change + // before closing the menu + return q.delay(500).then(() => { + if (this._unmounted) return; + // Close the context menu + if (this.props.onFinished) { + this.props.onFinished(); + }; }); - } + }, (error) => { + // TODO: some form of error notification to the user + // to inform them that their state change failed. + // For now we at least set the state back + if (this._unmounted) return; + this.setState({ + roomNotifState: oldState, + }); + }); }, _onClickAlertMe: function() { - // Placeholder + this._save(RoomNotifs.ALL_MESSAGES_LOUD); }, _onClickAllNotifs: function() { - this._save(false); + this._save(RoomNotifs.ALL_MESSAGES); }, _onClickMentions: function() { - this._save(true); + this._save(RoomNotifs.MENTIONS_ONLY); }, _onClickMute: function() { - // Placeholder + this._save(RoomNotifs.MUTE); }, render: function() { - var cli = MatrixClientPeg.get(); - var alertMeClasses = classNames({ 'mx_NotificationStateContextMenu_field': true, - 'mx_NotificationStateContextMenu_fieldDisabled': true, + 'mx_NotificationStateContextMenu_fieldSet': this.state.roomNotifState == RoomNotifs.ALL_MESSAGES_LOUD, }); var allNotifsClasses = classNames({ 'mx_NotificationStateContextMenu_field': true, - 'mx_NotificationStateContextMenu_fieldSet': !this.state.areNotifsMuted, + 'mx_NotificationStateContextMenu_fieldSet': this.state.roomNotifState == RoomNotifs.ALL_MESSAGES, }); var mentionsClasses = classNames({ 'mx_NotificationStateContextMenu_field': true, - 'mx_NotificationStateContextMenu_fieldSet': this.state.areNotifsMuted, + 'mx_NotificationStateContextMenu_fieldSet': this.state.roomNotifState == RoomNotifs.MENTIONS_ONLY, }); var muteNotifsClasses = classNames({ 'mx_NotificationStateContextMenu_field': true, - 'mx_NotificationStateContextMenu_fieldDisabled': true, + 'mx_NotificationStateContextMenu_fieldSet': this.state.roomNotifState == RoomNotifs.MUTE, }); return ( diff --git a/src/components/views/elements/ImageView.js b/src/components/views/elements/ImageView.js index 38ca2e58..c47fecfe 100644 --- a/src/components/views/elements/ImageView.js +++ b/src/components/views/elements/ImageView.js @@ -80,7 +80,7 @@ module.exports = React.createClass({ getName: function () { var name = this.props.name; if (name && this.props.link) { - name = { name }; + name = { name }; } return name; }, @@ -169,7 +169,7 @@ module.exports = React.createClass({ { this.getName() } { eventMeta } - +
Download this file
{ size_res } diff --git a/src/notifications/VectorPushRulesDefinitions.js b/src/notifications/VectorPushRulesDefinitions.js index dfbc06c0..2e90e576 100644 --- a/src/notifications/VectorPushRulesDefinitions.js +++ b/src/notifications/VectorPushRulesDefinitions.js @@ -65,7 +65,7 @@ module.exports = { // Messages containing user's display name // (skip contains_user_name which is too geeky) ".m.rule.contains_display_name": new VectorPushRuleDefinition({ - kind: "underride", + kind: "override", description: "Messages containing my name", vectorStateToActions: { // The actions for each vector state, or null to disable the rule. on: StandardActions.ACTION_NOTIFY, diff --git a/src/skins/vector/img/icons-video.svg b/src/skins/vector/img/icons-video.svg index 3571ec7f..a35df49b 100644 --- a/src/skins/vector/img/icons-video.svg +++ b/src/skins/vector/img/icons-video.svg @@ -8,8 +8,8 @@ - - + + diff --git a/src/vector/index.js b/src/vector/index.js index 07501094..fff61bed 100644 --- a/src/vector/index.js +++ b/src/vector/index.js @@ -44,6 +44,8 @@ var VectorConferenceHandler = require('../VectorConferenceHandler'); var UpdateChecker = require("./updater"); var q = require('q'); var request = require('browser-request'); + +import UAParser from 'ua-parser-js'; import url from 'url'; import {parseQs, parseQsFromFragment} from './url_utils'; @@ -134,6 +136,19 @@ var makeRegistrationUrl = function() { '#/register'; } + +function getDefaultDeviceDisplayName() { + // strip query-string and fragment from uri + let u = url.parse(window.location.href); + u.search = ""; + u.hash = ""; + let app_name = u.format(); + + let ua = new UAParser(); + return app_name + " via " + ua.getBrowser().name + + " on " + ua.getOS().name; +} + window.addEventListener('hashchange', onHashChange); window.onload = function() { console.log("window.onload"); @@ -238,6 +253,7 @@ async function loadApp() { startingFragmentQueryParams={fragparts.params} enableGuest={true} onLoadCompleted={onLoadCompleted} + defaultDeviceDisplayName={getDefaultDeviceDisplayName()} />, document.getElementById('matrixchat') );