diff --git a/.eslintignore.errorfiles b/.eslintignore.errorfiles
new file mode 100644
index 0000000000..f1b63d7367
--- /dev/null
+++ b/.eslintignore.errorfiles
@@ -0,0 +1,187 @@
+# autogenerated file: run scripts/generate-eslint-error-ignore-file to update.
+
+src/AddThreepid.js
+src/async-components/views/dialogs/EncryptedEventDialog.js
+src/autocomplete/AutocompleteProvider.js
+src/autocomplete/Autocompleter.js
+src/autocomplete/Components.js
+src/autocomplete/DuckDuckGoProvider.js
+src/autocomplete/EmojiProvider.js
+src/autocomplete/RoomProvider.js
+src/autocomplete/UserProvider.js
+src/Avatar.js
+src/BasePlatform.js
+src/CallHandler.js
+src/component-index.js
+src/components/structures/ContextualMenu.js
+src/components/structures/CreateRoom.js
+src/components/structures/FilePanel.js
+src/components/structures/InteractiveAuth.js
+src/components/structures/LoggedInView.js
+src/components/structures/login/ForgotPassword.js
+src/components/structures/login/Login.js
+src/components/structures/login/PostRegistration.js
+src/components/structures/login/Registration.js
+src/components/structures/MatrixChat.js
+src/components/structures/MessagePanel.js
+src/components/structures/NotificationPanel.js
+src/components/structures/RoomStatusBar.js
+src/components/structures/RoomView.js
+src/components/structures/ScrollPanel.js
+src/components/structures/TimelinePanel.js
+src/components/structures/UploadBar.js
+src/components/structures/UserSettings.js
+src/components/views/avatars/BaseAvatar.js
+src/components/views/avatars/MemberAvatar.js
+src/components/views/avatars/RoomAvatar.js
+src/components/views/create_room/CreateRoomButton.js
+src/components/views/create_room/Presets.js
+src/components/views/create_room/RoomAlias.js
+src/components/views/dialogs/ChatCreateOrReuseDialog.js
+src/components/views/dialogs/ChatInviteDialog.js
+src/components/views/dialogs/DeactivateAccountDialog.js
+src/components/views/dialogs/InteractiveAuthDialog.js
+src/components/views/dialogs/SetMxIdDialog.js
+src/components/views/dialogs/UnknownDeviceDialog.js
+src/components/views/elements/AccessibleButton.js
+src/components/views/elements/ActionButton.js
+src/components/views/elements/AddressSelector.js
+src/components/views/elements/AddressTile.js
+src/components/views/elements/CreateRoomButton.js
+src/components/views/elements/DeviceVerifyButtons.js
+src/components/views/elements/DirectorySearchBox.js
+src/components/views/elements/Dropdown.js
+src/components/views/elements/EditableText.js
+src/components/views/elements/EditableTextContainer.js
+src/components/views/elements/HomeButton.js
+src/components/views/elements/LanguageDropdown.js
+src/components/views/elements/MemberEventListSummary.js
+src/components/views/elements/PowerSelector.js
+src/components/views/elements/ProgressBar.js
+src/components/views/elements/RoomDirectoryButton.js
+src/components/views/elements/SettingsButton.js
+src/components/views/elements/StartChatButton.js
+src/components/views/elements/TintableSvg.js
+src/components/views/elements/TruncatedList.js
+src/components/views/elements/UserSelector.js
+src/components/views/login/CaptchaForm.js
+src/components/views/login/CasLogin.js
+src/components/views/login/CountryDropdown.js
+src/components/views/login/CustomServerDialog.js
+src/components/views/login/InteractiveAuthEntryComponents.js
+src/components/views/login/LoginHeader.js
+src/components/views/login/PasswordLogin.js
+src/components/views/login/RegistrationForm.js
+src/components/views/login/ServerConfig.js
+src/components/views/messages/MAudioBody.js
+src/components/views/messages/MessageEvent.js
+src/components/views/messages/MFileBody.js
+src/components/views/messages/MImageBody.js
+src/components/views/messages/MVideoBody.js
+src/components/views/messages/RoomAvatarEvent.js
+src/components/views/messages/TextualBody.js
+src/components/views/messages/TextualEvent.js
+src/components/views/room_settings/AliasSettings.js
+src/components/views/room_settings/ColorSettings.js
+src/components/views/room_settings/UrlPreviewSettings.js
+src/components/views/rooms/Autocomplete.js
+src/components/views/rooms/AuxPanel.js
+src/components/views/rooms/EntityTile.js
+src/components/views/rooms/EventTile.js
+src/components/views/rooms/LinkPreviewWidget.js
+src/components/views/rooms/MemberDeviceInfo.js
+src/components/views/rooms/MemberInfo.js
+src/components/views/rooms/MemberList.js
+src/components/views/rooms/MemberTile.js
+src/components/views/rooms/MessageComposer.js
+src/components/views/rooms/MessageComposerInput.js
+src/components/views/rooms/MessageComposerInputOld.js
+src/components/views/rooms/PresenceLabel.js
+src/components/views/rooms/ReadReceiptMarker.js
+src/components/views/rooms/RoomHeader.js
+src/components/views/rooms/RoomList.js
+src/components/views/rooms/RoomNameEditor.js
+src/components/views/rooms/RoomPreviewBar.js
+src/components/views/rooms/RoomSettings.js
+src/components/views/rooms/RoomTile.js
+src/components/views/rooms/RoomTopicEditor.js
+src/components/views/rooms/SearchableEntityList.js
+src/components/views/rooms/SearchResultTile.js
+src/components/views/rooms/TabCompleteBar.js
+src/components/views/rooms/TopUnreadMessagesBar.js
+src/components/views/rooms/UserTile.js
+src/components/views/settings/AddPhoneNumber.js
+src/components/views/settings/ChangeAvatar.js
+src/components/views/settings/ChangeDisplayName.js
+src/components/views/settings/ChangePassword.js
+src/components/views/settings/DevicesPanel.js
+src/components/views/settings/DevicesPanelEntry.js
+src/components/views/settings/EnableNotificationsButton.js
+src/components/views/voip/CallView.js
+src/components/views/voip/IncomingCallBox.js
+src/components/views/voip/VideoFeed.js
+src/components/views/voip/VideoView.js
+src/ContentMessages.js
+src/createRoom.js
+src/DateUtils.js
+src/email.js
+src/Entities.js
+src/extend.js
+src/HtmlUtils.js
+src/ImageUtils.js
+src/Invite.js
+src/languageHandler.js
+src/linkify-matrix.js
+src/Login.js
+src/Markdown.js
+src/MatrixClientPeg.js
+src/Modal.js
+src/Notifier.js
+src/ObjectUtils.js
+src/PasswordReset.js
+src/PlatformPeg.js
+src/Presence.js
+src/ratelimitedfunc.js
+src/Resend.js
+src/RichText.js
+src/Roles.js
+src/RoomListSorter.js
+src/RoomNotifs.js
+src/Rooms.js
+src/RtsClient.js
+src/ScalarAuthClient.js
+src/ScalarMessaging.js
+src/SdkConfig.js
+src/Skinner.js
+src/SlashCommands.js
+src/stores/LifecycleStore.js
+src/TabComplete.js
+src/TabCompleteEntries.js
+src/TextForEvent.js
+src/Tinter.js
+src/UiEffects.js
+src/Unread.js
+src/UserActivity.js
+src/utils/DecryptFile.js
+src/utils/DMRoomMap.js
+src/utils/FormattingUtils.js
+src/utils/MultiInviter.js
+src/utils/Receipt.js
+src/Velociraptor.js
+src/VelocityBounce.js
+src/WhoIsTyping.js
+src/wrappers/WithMatrixClient.js
+test/all-tests.js
+test/components/structures/login/Registration-test.js
+test/components/structures/MessagePanel-test.js
+test/components/structures/ScrollPanel-test.js
+test/components/structures/TimelinePanel-test.js
+test/components/stub-component.js
+test/components/views/dialogs/InteractiveAuthDialog-test.js
+test/components/views/elements/MemberEventListSummary-test.js
+test/components/views/login/RegistrationForm-test.js
+test/components/views/rooms/MessageComposerInput-test.js
+test/mock-clock.js
+test/skinned-sdk.js
+test/stores/RoomViewStore-test.js
+test/test-utils.js
diff --git a/.gitignore b/.gitignore
index b99c9f1145..f828c37393 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,3 +12,5 @@ npm-debug.log
/.idea
/src/component-index.js
+
+.DS_Store
diff --git a/.travis.yml b/.travis.yml
index a405b9ef35..918cec696b 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -5,6 +5,4 @@ install:
- npm install
- (cd node_modules/matrix-js-sdk && npm install)
script:
- # don't run the riot tests unless the react-sdk tests pass, otherwise
- # the output is confusing.
- - npm run test && ./.travis-test-riot.sh
+ ./scripts/travis.sh
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d9d39f0dfd..66e4627afd 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,21 @@
+Changes in [0.9.2](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v0.9.2) (2017-06-06)
+===================================================================================================
+[Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v0.9.1...v0.9.2)
+
+ * Hotfix: Allow password reset when logged in
+ [\#1044](https://github.com/matrix-org/matrix-react-sdk/pull/1044)
+
+Changes in [0.9.1](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v0.9.1) (2017-06-02)
+===================================================================================================
+[Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v0.9.0...v0.9.1)
+
+ * Update from Weblate.
+ [\#1012](https://github.com/matrix-org/matrix-react-sdk/pull/1012)
+ * typo, missing import and mis-casing
+ [\#1014](https://github.com/matrix-org/matrix-react-sdk/pull/1014)
+ * Update from Weblate.
+ [\#1010](https://github.com/matrix-org/matrix-react-sdk/pull/1010)
+
Changes in [0.9.0](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v0.9.0) (2017-06-02)
===================================================================================================
[Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v0.9.0-rc.2...v0.9.0)
diff --git a/jenkins.sh b/jenkins.sh
index 6a77911c27..d9bb62855b 100755
--- a/jenkins.sh
+++ b/jenkins.sh
@@ -21,6 +21,11 @@ npm run test
# run eslint
npm run lintall -- -f checkstyle -o eslint.xml || true
+# re-run the linter, excluding any files known to have errors or warnings.
+./node_modules/.bin/eslint --max-warnings 0 \
+ --ignore-path .eslintignore.errorfiles \
+ src test
+
# delete the old tarball, if it exists
rm -f matrix-react-sdk-*.tgz
diff --git a/package.json b/package.json
index 6afec3400b..15a903c25a 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "matrix-react-sdk",
- "version": "0.9.0",
+ "version": "0.9.2",
"description": "SDK for matrix.org using React",
"author": "matrix.org",
"repository": {
@@ -66,6 +66,7 @@
"lodash": "^4.13.1",
"matrix-js-sdk": "0.7.10",
"optimist": "^0.6.1",
+ "prop-types": "^15.5.8",
"q": "^1.4.1",
"react": "^15.4.0",
"react-addons-css-transition-group": "15.3.2",
diff --git a/scripts/fix-i18n.pl b/scripts/fix-i18n.pl
index 247b2b663f..def352463d 100755
--- a/scripts/fix-i18n.pl
+++ b/scripts/fix-i18n.pl
@@ -61,6 +61,16 @@ You are already in a call.
You cannot place VoIP calls in this browser.
You cannot place a call with yourself.
Your email address does not appear to be associated with a Matrix ID on this Homeserver.
+Guest users can't upload files. Please register to upload.
+Some of your messages have not been sent.
+This room is private or inaccessible to guests. You may be able to join if you register.
+Tried to load a specific point in this room's timeline, but was unable to find it.
+Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.
+This action cannot be performed by a guest user. Please register to be able to do this.
+Tried to load a specific point in this room's timeline, but was unable to find it.
+Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.
+You are trying to access %(roomName)s.
+You will not be able to undo this change as you are promoting the user to have the same power level as yourself.
EOT
)];
}
@@ -84,7 +94,7 @@ if ($_ =~ m/^(\s+)"(.*?)"(: *)"(.*?)"(,?)$/) {
$sub = 1;
}
- if ($src eq $fixup && $dst !~ /\.$/) {
+ if ($ARGV !~ /(zh_Hans|zh_Hant|th)\.json$/ && $src eq $fixup && $dst !~ /\.$/) {
print STDERR "fixing up dst: $dst\n";
$dst .= '.';
$sub = 1;
diff --git a/scripts/generate-eslint-error-ignore-file b/scripts/generate-eslint-error-ignore-file
new file mode 100755
index 0000000000..3a635f5a7d
--- /dev/null
+++ b/scripts/generate-eslint-error-ignore-file
@@ -0,0 +1,21 @@
+#!/bin/sh
+#
+# generates .eslintignore.errorfiles to list the files which have errors in,
+# so that they can be ignored in future automated linting.
+
+out=.eslintignore.errorfiles
+
+cd `dirname $0`/..
+
+echo "generating $out"
+
+{
+ cat <
@@ -130,7 +130,7 @@ export default React.createClass({ 'careful to keep it secure. To help with this, you should enter ' + 'a passphrase below, which will be used to encrypt the exported ' + 'data. It will only be possible to import the data by using the ' + - 'same passphrase.' + 'same passphrase.', ) }
{ _t( 'The export file will be protected with a passphrase. ' + - 'You should enter the passphrase here, to decrypt the file.' + 'You should enter the passphrase here, to decrypt the file.', ) }