From c99f5c0df87a0894c61888a057a280019326aa99 Mon Sep 17 00:00:00 2001
From: Will Hunt
{ _t('Are you sure you want to upload the following files?') }
+{ _t('The following files cannot be uploaded:') }
+{ _t('Are you sure you want to upload the following files?') }
-{ _t('Reason') + ": " + fileAcceptedOrError}
\n Use the long description to introduce new members to the community, or distribute\n some important links\n
\n\n You can even use 'img' tags\n
\n": "\n Përhskrimin e gjatë përdoreni për t’u paraqitur përdoruesve të rinj bashkësinë, ose për të dhënë\n një a disa lidhje të rëndësishme\n
\n\n Mund të përdorni madje etiketa 'img'\n
\n", + "Failed to add the following rooms to the summary of %(groupId)s:": "S’u arrit të shtoheshin dhomat vijuese te përmbledhja e %(groupId)s:", + "Failed to remove the room from the summary of %(groupId)s": "S’u arrit të hiqej dhoma prej përmbledhjes së %(groupId)s", + "Failed to remove a user from the summary of %(groupId)s": "S’u arrit të hiqej një përdorues nga përmbledhja e %(groupId)s", + "Changes made to your community\n Use the long description to introduce new members to the community, or distribute\n some important links\n
\n\n You can even use 'img' tags\n
\n": "\n Përhskrimin e gjatë përdoreni për t’u paraqitur përdoruesve të rinj bashkësinë, ose për të dhënë\n një a disa lidhje të rëndësishme\n
\n\n Mund të përdorni madje etiketa 'img'\n
\n", + "\n Use the long description to introduce new members to the community, or distribute\n some important links\n
\n\n You can even use 'img' tags\n
\n": "\n Përshkrimin e gjatë përdoreni për t’u paraqitur përdoruesve të rinj bashkësinë, ose për të dhënë\n një a disa lidhje të rëndësishme\n
\n\n Mund të përdorni madje etiketa 'img'\n
\n", "Failed to add the following rooms to the summary of %(groupId)s:": "S’u arrit të shtoheshin dhomat vijuese te përmbledhja e %(groupId)s:", "Failed to remove the room from the summary of %(groupId)s": "S’u arrit të hiqej dhoma prej përmbledhjes së %(groupId)s", "Failed to remove a user from the summary of %(groupId)s": "S’u arrit të hiqej një përdorues nga përmbledhja e %(groupId)s", @@ -1259,5 +1259,22 @@ "This Home Server does not support login using email address.": "Ky shërbyes Home nuk mbulon hyrje përmes adresash email.", "This homeserver doesn't offer any login flows which are supported by this client.": "Ky shërbyes home nuk ofron ndonjë mënyrë hyrjesh që mbulohet nga ky klient.", "Unable to query for supported registration methods": "S’arrihet të kërkohet për metoda regjistrimi që mbulohen", - "The exported file will allow anyone who can read it to decrypt any encrypted messages that you can see, so you should be 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.": "Kartela e eksportuar do t’i lejojë kujtdo që e lexon të shfshehtëzojë çfarëdo mesazhesh të fshehtëzuar që mund të shihni, ndaj duhet të jeni i kujdesshëm për ta mbajtur të parrezikuar. Si ndihmë për këtë, duhet të jepni më poshtë një frazëkalim, që do të përdoret për të fshehtëzuar të dhënat e eksportuara. Importimi i të dhënave do të jetë i mundur vetëm duke përdorur të njëjtin frazëkalim." + "The exported file will allow anyone who can read it to decrypt any encrypted messages that you can see, so you should be 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.": "Kartela e eksportuar do t’i lejojë kujtdo që e lexon të shfshehtëzojë çfarëdo mesazhesh të fshehtëzuar që mund të shihni, ndaj duhet të jeni i kujdesshëm për ta mbajtur të parrezikuar. Si ndihmë për këtë, duhet të jepni më poshtë një frazëkalim, që do të përdoret për të fshehtëzuar të dhënat e eksportuara. Importimi i të dhënave do të jetë i mundur vetëm duke përdorur të njëjtin frazëkalim.", + "Not a valid Riot keyfile": "S’është kartelë kyçesh Riot e vlefshme", + "Revoke Moderator": "Shfuqizoje Si Moderator", + "You have no historical rooms": "S’keni dhoma të dikurshme", + "Historical": "Të dikurshme", + "Flair": "Simbole", + "Showing flair for these communities:": "Shfaqen simbole për këto bashkësi:", + "This room is not showing flair for any communities": "Kjo dhomë nuk shfaq simbole për ndonjë bashkësi", + "Robot check is currently unavailable on desktop - please use a web browser": "Kontrolli për robot hëpërhë s’është i përdorshëm në desktop - ju lutemi, përdorni një shfletues", + "Please review and accept all of the homeserver's policies": "Ju lutemi, shqyrtoni dhe pranoni krejt rregullat e këtij shërbyesi home", + "Flair will appear if enabled in room settings": "Simbolet do të shfaqen nëse aktivizohen te rregullimet e dhomës", + "Flair will not appear": "Simbolet nuk do të shfaqen", + "Display your community flair in rooms configured to show it.": "Shfaqni simbolet e bashkësisë tuaj në dhoma të formësuara për t’i shfaqur ato.", + "Are you sure you wish to remove (delete) this event? Note that if you delete a room name or topic change, it could undo the change.": "Jeni i sigurt se doni të hiqet (fshihet) ky akt? Mbani parasysh se nëse fshini emrin e një dhome ose ndryshimin e temës, kjo mund të sjellë zhbërjen e ndryshimit.", + "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of Riot to do this": "Që të shmanget humbja e historikut të fjalosjes tuaj, duhet të eksportoni kyçet e dhomës tuaj përpara se të dilni nga llogari. Që ta bëni këtë, duhe të riktheheni te versioni më i ri i Riot-it", + "You've previously used a newer version of Riot on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Më parë përdorët një version më të ri të Riot-it në %(host)s. Që ta përdorni sërish këtë version me fshehtëzim skaj-më-skaj, duhet të dilni dhe rihyni te llogaria juaj. ", + "Incompatible Database": "Bazë të dhënash e Papërputhshme", + "Continue With Encryption Disabled": "Vazhdo Me Fshehtëzimin të Çaktivizuar" } From dbb8de50d0b59eb518465f13d4562fcea070d243 Mon Sep 17 00:00:00 2001 From: Szimszon{_t("Secure your encrypted message history with a Recovery Passphrase.")}
{_t("You'll need it if you log out or lose access to this device.")}
{_t("Make a copy of this Recovery Key and keep it safe.")}
-{_t("As a safety net, you can use it to restore your encrypted message history if you forget your Recovery Passphrase.")}
+{bodyText}
diff --git a/src/components/views/login/RegistrationForm.js b/src/components/views/login/RegistrationForm.js
index fe977025ae..137aeada91 100644
--- a/src/components/views/login/RegistrationForm.js
+++ b/src/components/views/login/RegistrationForm.js
@@ -25,7 +25,7 @@ import { looksValid as phoneNumberLooksValid } from '../../../phonenumber';
import Modal from '../../../Modal';
import { _t } from '../../../languageHandler';
import SdkConfig from '../../../SdkConfig';
-import SettingsStore from "../../../settings/SettingsStore";
+import { SAFE_LOCALPART_REGEX } from '../../../Registration';
const FIELD_EMAIL = 'field_email';
const FIELD_PHONE_COUNTRY = 'field_phone_country';
@@ -194,9 +194,8 @@ module.exports = React.createClass({
} else this.markFieldValid(field_id, phoneNumberValid, "RegistrationForm.ERR_PHONE_NUMBER_INVALID");
break;
case FIELD_USERNAME:
- // XXX: SPEC-1
- var username = this.refs.username.value.trim();
- if (encodeURIComponent(username) != username) {
+ const username = this.refs.username.value.trim();
+ if (!SAFE_LOCALPART_REGEX.test(username)) {
this.markFieldValid(
field_id,
false,
diff --git a/src/components/views/room_settings/AliasSettings.js b/src/components/views/room_settings/AliasSettings.js
index de5d3db625..f68670b2f9 100644
--- a/src/components/views/room_settings/AliasSettings.js
+++ b/src/components/views/room_settings/AliasSettings.js
@@ -130,7 +130,7 @@ module.exports = React.createClass({
},
isAliasValid: function(alias) {
- // XXX: FIXME SPEC-1
+ // XXX: FIXME https://github.com/matrix-org/matrix-doc/issues/668
return (alias.match(/^#([^\/:,]+?):(.+)$/) && encodeURI(alias) === alias);
},
diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json
index 92fb545b4e..c3282c8bf8 100644
--- a/src/i18n/strings/en_EN.json
+++ b/src/i18n/strings/en_EN.json
@@ -985,10 +985,11 @@
"Unable to verify email address.": "Unable to verify email address.",
"This will allow you to reset your password and receive notifications.": "This will allow you to reset your password and receive notifications.",
"Skip": "Skip",
- "User names may only contain letters, numbers, dots, hyphens and underscores.": "User names may only contain letters, numbers, dots, hyphens and underscores.",
+ "Only use lower case letters, numbers and '=_-./'": "Only use lower case letters, numbers and '=_-./'",
"Username not available": "Username not available",
"Username invalid: %(errMessage)s": "Username invalid: %(errMessage)s",
"An error occurred: %(error_string)s": "An error occurred: %(error_string)s",
+ "Checking...": "Checking...",
"Username available": "Username available",
"To get started, please pick a username!": "To get started, please pick a username!",
"This will be your account name on the homeserver, or you can pick a different server.": "This will be your account name on the homeserver, or you can pick a different server.",
From 576bfedfb54e5625bcda2b976b1ca62aadfb0e11 Mon Sep 17 00:00:00 2001
From: Travis Ralston
{_t( + "A new recovery passphrase and key for Secure " + + "Messages has been detected.", + )}
+{_t( + "Setting up Secure Messages on this device " + + "will re-encrypt this device's message history with " + + "the new recovery method.", + )}
+{_t( + "If you didn't set the new recovery method, an " + + "attacker may be trying to access your account. " + + "Change your account password and set a new recovery " + + "method immediately in Settings.", + )}
+{description1}
{description2}
{_t("Make a copy of this Recovery Key and keep it safe.")}
{bodyText}
-
{this._keyBackupInfo.recovery_key}
+ {this._keyBackupInfo.recovery_key}
+ {_t("You'll need it if you log out or lose access to this device.")}
{this._keyBackupInfo.recovery_key}
With paragraphs
'); - expect(longDescElement.innerHTML).toInclude('With paragraphs
'); + expect(longDescElement.innerHTML).toContain('{_t("Secure your encrypted message history with a Recovery Passphrase.")}
{_t("You'll need it if you log out or lose access to this device.")}
{_t(
- "If you don't want encrypted message history to be availble on other devices, "+
+ "If you don't want encrypted message history to be available on other devices, "+
"
{_t("Make a copy of this Recovery Key and keep it safe.")}
-{_t("As a safety net, you can use it to restore your encrypted message history if you forget your Recovery Passphrase.")}
+{bodyText}
{_t( + "Without setting up Secure Message Recovery, " + + "you'll lose your secure message history when you " + + "log out.", + )}
+{_t( + "If you don't want to set this up now, you can later " + + "in Settings.", + )}
+{_t( + "A new recovery passphrase and key for Secure " + + "Messages has been detected.", + )}
+{_t( + "Setting up Secure Messages on this device " + + "will re-encrypt this device's message history with " + + "the new recovery method.", + )}
+{_t( + "If you didn't set the new recovery method, an " + + "attacker may be trying to access your account. " + + "Change your account password and set a new recovery " + + "method immediately in Settings.", + )}
+diff --git a/src/components/views/elements/AppTile.js b/src/components/views/elements/AppTile.js index 23b24adbb4..f4f929a3c2 100644 --- a/src/components/views/elements/AppTile.js +++ b/src/components/views/elements/AppTile.js @@ -22,7 +22,6 @@ import qs from 'querystring'; import React from 'react'; import PropTypes from 'prop-types'; import MatrixClientPeg from '../../../MatrixClientPeg'; -import PlatformPeg from '../../../PlatformPeg'; import ScalarAuthClient from '../../../ScalarAuthClient'; import WidgetMessaging from '../../../WidgetMessaging'; import TintableSvgButton from './TintableSvgButton'; @@ -49,7 +48,6 @@ export default class AppTile extends React.Component { this.state = this._getNewState(props); this._onAction = this._onAction.bind(this); - this._onMessage = this._onMessage.bind(this); this._onLoaded = this._onLoaded.bind(this); this._onEditClick = this._onEditClick.bind(this); this._onDeleteClick = this._onDeleteClick.bind(this); @@ -143,10 +141,6 @@ export default class AppTile extends React.Component { } componentDidMount() { - // Legacy Jitsi widget messaging -- TODO replace this with standard widget - // postMessaging API - window.addEventListener('message', this._onMessage, false); - // Widget action listeners this.dispatcherRef = dis.register(this._onAction); } @@ -155,9 +149,6 @@ export default class AppTile extends React.Component { // Widget action listeners dis.unregister(this.dispatcherRef); - // Jitsi listener - window.removeEventListener('message', this._onMessage); - // if it's not remaining on screen, get rid of the PersistedElement container if (!ActiveWidgetStore.getWidgetPersistence(this.props.id)) { ActiveWidgetStore.destroyPersistentWidget(); @@ -233,32 +224,6 @@ export default class AppTile extends React.Component { } } - // Legacy Jitsi widget messaging - // TODO -- This should be replaced with the new widget postMessaging API - _onMessage(event) { - if (this.props.type !== 'jitsi') { - return; - } - if (!event.origin) { - event.origin = event.originalEvent.origin; - } - - const widgetUrlObj = url.parse(this.state.widgetUrl); - const eventOrigin = url.parse(event.origin); - if ( - eventOrigin.protocol !== widgetUrlObj.protocol || - eventOrigin.host !== widgetUrlObj.host - ) { - return; - } - - if (event.data.widgetAction === 'jitsi_iframe_loaded') { - const iframe = this.refs.appFrame.contentWindow - .document.querySelector('iframe[id^="jitsiConferenceFrame"]'); - PlatformPeg.get().setupScreenSharingForIframe(iframe); - } - } - _canUserModify() { // User widgets should always be modifiable by their creator if (this.props.userWidget && MatrixClientPeg.get().credentials.userId === this.props.creatorUserId) { @@ -544,7 +509,7 @@ export default class AppTile extends React.Component { // Additional iframe feature pemissions // (see - https://sites.google.com/a/chromium.org/dev/Home/chromium-security/deprecating-permissions-in-cross-origin-iframes and https://wicg.github.io/feature-policy/) - const iframeFeatures = "microphone; camera; encrypted-media;"; + const iframeFeatures = "microphone; camera; encrypted-media; autoplay;"; const appTileBodyClass = 'mx_AppTileBody' + (this.props.miniMode ? '_mini ' : ' '); diff --git a/src/components/views/elements/TintableSvg.js b/src/components/views/elements/TintableSvg.js index e04bf87793..08628c8ca9 100644 --- a/src/components/views/elements/TintableSvg.js +++ b/src/components/views/elements/TintableSvg.js @@ -29,6 +29,7 @@ var TintableSvg = React.createClass({ width: PropTypes.string.isRequired, height: PropTypes.string.isRequired, className: PropTypes.string, + forceColors: PropTypes.arrayOf(PropTypes.string), }, statics: { @@ -50,6 +51,12 @@ var TintableSvg = React.createClass({ delete TintableSvg.mounts[this.id]; }, + componentDidUpdate: function(prevProps, prevState) { + if (prevProps.forceColors !== this.props.forceColors) { + this.calcAndApplyFixups(this.refs.svgContainer); + } + }, + tint: function() { // TODO: only bother running this if the global tint settings have changed // since we loaded! @@ -57,8 +64,13 @@ var TintableSvg = React.createClass({ }, onLoad: function(event) { - // console.log("TintableSvg.onLoad for " + this.props.src); - this.fixups = Tinter.calcSvgFixups([event.target]); + this.calcAndApplyFixups(event.target); + }, + + calcAndApplyFixups: function(target) { + if (!target) return; + // console.log("TintableSvg.calcAndApplyFixups for " + this.props.src); + this.fixups = Tinter.calcSvgFixups([target], this.props.forceColors); Tinter.applySvgFixups(this.fixups); }, @@ -71,6 +83,7 @@ var TintableSvg = React.createClass({ height={this.props.height} onLoad={this.onLoad} tabIndex="-1" + ref="svgContainer" /> ); }, diff --git a/src/components/views/groups/GroupMemberList.js b/src/components/views/groups/GroupMemberList.js index 46653f1599..9a8196f12b 100644 --- a/src/components/views/groups/GroupMemberList.js +++ b/src/components/views/groups/GroupMemberList.js @@ -37,7 +37,9 @@ export default React.createClass({ getInitialState: function() { return { members: null, + membersError: null, invitedMembers: null, + invitedMembersError: null, truncateAt: INITIAL_LOAD_NUM_MEMBERS, }; }, @@ -55,6 +57,19 @@ export default React.createClass({ GroupStore.registerListener(groupId, () => { this._fetchMembers(); }); + GroupStore.on('error', (err, errorGroupId, stateKey) => { + if (this._unmounted || groupId !== errorGroupId) return; + if (stateKey === GroupStore.STATE_KEY.GroupMembers) { + this.setState({ + membersError: err, + }); + } + if (stateKey === GroupStore.STATE_KEY.GroupInvitedMembers) { + this.setState({ + invitedMembersError: err, + }); + } + }); }, _fetchMembers: function() { @@ -88,7 +103,11 @@ export default React.createClass({ this.setState({ searchQuery: ev.target.value }); }, - makeGroupMemberTiles: function(query, memberList) { + makeGroupMemberTiles: function(query, memberList, memberListError) { + if (memberListError) { + return
{ _t('Reason') + ": " + fileAcceptedOrError}
+{ _t('Are you sure you want to upload the following files?') }
+{ _t('The following files cannot be uploaded:') }
+{ _t('Are you sure you want to upload the following files?') }
-\n Use the long description to introduce new members to the community, or distribute\n some important links\n
\n\n You can even use 'img' tags\n
\n": "\n Përshkrimin e gjatë përdoreni për t’u paraqitur përdoruesve të rinj bashkësinë, ose për të dhënë\n një a disa lidhje të rëndësishme\n
\n\n Mund të përdorni madje etiketa 'img'\n
\n", + "Failed to add the following rooms to the summary of %(groupId)s:": "S’u arrit të shtoheshin dhomat vijuese te përmbledhja e %(groupId)s:", + "Failed to remove the room from the summary of %(groupId)s": "S’u arrit të hiqej dhoma prej përmbledhjes së %(groupId)s", + "Failed to remove a user from the summary of %(groupId)s": "S’u arrit të hiqej një përdorues nga përmbledhja e %(groupId)s", + "Changes made to your community{_t("Secure your encrypted message history with a Recovery Passphrase.")}
{_t("You'll need it if you log out or lose access to this device.")}
{_t(
- "If you don't want encrypted message history to be available on other devices, "+
+ "If you don't want encrypted message history to be availble on other devices, "+
"
{_t("Make a copy of this Recovery Key and keep it safe.")}
-{bodyText}
+{_t("As a safety net, you can use it to restore your encrypted message history if you forget your Recovery Passphrase.")}
{_t( - "Without setting up Secure Message Recovery, " + - "you'll lose your secure message history when you " + - "log out.", - )}
-{_t( - "If you don't want to set this up now, you can later " + - "in Settings.", - )}
-{_t( - "A new recovery passphrase and key for Secure " + - "Messages has been detected.", - )}
-{_t( - "Setting up Secure Messages on this device " + - "will re-encrypt this device's message history with " + - "the new recovery method.", - )}
-{_t( - "If you didn't set the new recovery method, an " + - "attacker may be trying to access your account. " + - "Change your account password and set a new recovery " + - "method immediately in Settings.", - )}
-diff --git a/src/components/views/elements/AppTile.js b/src/components/views/elements/AppTile.js index f4f929a3c2..23b24adbb4 100644 --- a/src/components/views/elements/AppTile.js +++ b/src/components/views/elements/AppTile.js @@ -22,6 +22,7 @@ import qs from 'querystring'; import React from 'react'; import PropTypes from 'prop-types'; import MatrixClientPeg from '../../../MatrixClientPeg'; +import PlatformPeg from '../../../PlatformPeg'; import ScalarAuthClient from '../../../ScalarAuthClient'; import WidgetMessaging from '../../../WidgetMessaging'; import TintableSvgButton from './TintableSvgButton'; @@ -48,6 +49,7 @@ export default class AppTile extends React.Component { this.state = this._getNewState(props); this._onAction = this._onAction.bind(this); + this._onMessage = this._onMessage.bind(this); this._onLoaded = this._onLoaded.bind(this); this._onEditClick = this._onEditClick.bind(this); this._onDeleteClick = this._onDeleteClick.bind(this); @@ -141,6 +143,10 @@ export default class AppTile extends React.Component { } componentDidMount() { + // Legacy Jitsi widget messaging -- TODO replace this with standard widget + // postMessaging API + window.addEventListener('message', this._onMessage, false); + // Widget action listeners this.dispatcherRef = dis.register(this._onAction); } @@ -149,6 +155,9 @@ export default class AppTile extends React.Component { // Widget action listeners dis.unregister(this.dispatcherRef); + // Jitsi listener + window.removeEventListener('message', this._onMessage); + // if it's not remaining on screen, get rid of the PersistedElement container if (!ActiveWidgetStore.getWidgetPersistence(this.props.id)) { ActiveWidgetStore.destroyPersistentWidget(); @@ -224,6 +233,32 @@ export default class AppTile extends React.Component { } } + // Legacy Jitsi widget messaging + // TODO -- This should be replaced with the new widget postMessaging API + _onMessage(event) { + if (this.props.type !== 'jitsi') { + return; + } + if (!event.origin) { + event.origin = event.originalEvent.origin; + } + + const widgetUrlObj = url.parse(this.state.widgetUrl); + const eventOrigin = url.parse(event.origin); + if ( + eventOrigin.protocol !== widgetUrlObj.protocol || + eventOrigin.host !== widgetUrlObj.host + ) { + return; + } + + if (event.data.widgetAction === 'jitsi_iframe_loaded') { + const iframe = this.refs.appFrame.contentWindow + .document.querySelector('iframe[id^="jitsiConferenceFrame"]'); + PlatformPeg.get().setupScreenSharingForIframe(iframe); + } + } + _canUserModify() { // User widgets should always be modifiable by their creator if (this.props.userWidget && MatrixClientPeg.get().credentials.userId === this.props.creatorUserId) { @@ -509,7 +544,7 @@ export default class AppTile extends React.Component { // Additional iframe feature pemissions // (see - https://sites.google.com/a/chromium.org/dev/Home/chromium-security/deprecating-permissions-in-cross-origin-iframes and https://wicg.github.io/feature-policy/) - const iframeFeatures = "microphone; camera; encrypted-media; autoplay;"; + const iframeFeatures = "microphone; camera; encrypted-media;"; const appTileBodyClass = 'mx_AppTileBody' + (this.props.miniMode ? '_mini ' : ' '); diff --git a/src/components/views/elements/TintableSvg.js b/src/components/views/elements/TintableSvg.js index 08628c8ca9..e04bf87793 100644 --- a/src/components/views/elements/TintableSvg.js +++ b/src/components/views/elements/TintableSvg.js @@ -29,7 +29,6 @@ var TintableSvg = React.createClass({ width: PropTypes.string.isRequired, height: PropTypes.string.isRequired, className: PropTypes.string, - forceColors: PropTypes.arrayOf(PropTypes.string), }, statics: { @@ -51,12 +50,6 @@ var TintableSvg = React.createClass({ delete TintableSvg.mounts[this.id]; }, - componentDidUpdate: function(prevProps, prevState) { - if (prevProps.forceColors !== this.props.forceColors) { - this.calcAndApplyFixups(this.refs.svgContainer); - } - }, - tint: function() { // TODO: only bother running this if the global tint settings have changed // since we loaded! @@ -64,13 +57,8 @@ var TintableSvg = React.createClass({ }, onLoad: function(event) { - this.calcAndApplyFixups(event.target); - }, - - calcAndApplyFixups: function(target) { - if (!target) return; - // console.log("TintableSvg.calcAndApplyFixups for " + this.props.src); - this.fixups = Tinter.calcSvgFixups([target], this.props.forceColors); + // console.log("TintableSvg.onLoad for " + this.props.src); + this.fixups = Tinter.calcSvgFixups([event.target]); Tinter.applySvgFixups(this.fixups); }, @@ -83,7 +71,6 @@ var TintableSvg = React.createClass({ height={this.props.height} onLoad={this.onLoad} tabIndex="-1" - ref="svgContainer" /> ); }, diff --git a/src/components/views/groups/GroupMemberList.js b/src/components/views/groups/GroupMemberList.js index 9a8196f12b..46653f1599 100644 --- a/src/components/views/groups/GroupMemberList.js +++ b/src/components/views/groups/GroupMemberList.js @@ -37,9 +37,7 @@ export default React.createClass({ getInitialState: function() { return { members: null, - membersError: null, invitedMembers: null, - invitedMembersError: null, truncateAt: INITIAL_LOAD_NUM_MEMBERS, }; }, @@ -57,19 +55,6 @@ export default React.createClass({ GroupStore.registerListener(groupId, () => { this._fetchMembers(); }); - GroupStore.on('error', (err, errorGroupId, stateKey) => { - if (this._unmounted || groupId !== errorGroupId) return; - if (stateKey === GroupStore.STATE_KEY.GroupMembers) { - this.setState({ - membersError: err, - }); - } - if (stateKey === GroupStore.STATE_KEY.GroupInvitedMembers) { - this.setState({ - invitedMembersError: err, - }); - } - }); }, _fetchMembers: function() { @@ -103,11 +88,7 @@ export default React.createClass({ this.setState({ searchQuery: ev.target.value }); }, - makeGroupMemberTiles: function(query, memberList, memberListError) { - if (memberListError) { - return
{ _t('Reason') + ": " + fileAcceptedOrError}
-{ _t('Are you sure you want to upload the following files?') }
-{ _t('The following files cannot be uploaded:') }
-{ _t('Are you sure you want to upload the following files?') }
+\n Use the long description to introduce new members to the community, or distribute\n some important links\n
\n\n You can even use 'img' tags\n
\n": "\n Përshkrimin e gjatë përdoreni për t’u paraqitur përdoruesve të rinj bashkësinë, ose për të dhënë\n një a disa lidhje të rëndësishme\n
\n\n Mund të përdorni madje etiketa 'img'\n
\n", - "Failed to add the following rooms to the summary of %(groupId)s:": "S’u arrit të shtoheshin dhomat vijuese te përmbledhja e %(groupId)s:", - "Failed to remove the room from the summary of %(groupId)s": "S’u arrit të hiqej dhoma prej përmbledhjes së %(groupId)s", - "Failed to remove a user from the summary of %(groupId)s": "S’u arrit të hiqej një përdorues nga përmbledhja e %(groupId)s", - "Changes made to your community