diff --git a/src/components/views/context_menus/MessageContextMenu.js b/src/components/views/context_menus/MessageContextMenu.js
index e6292cbfc2..56758b2f30 100644
--- a/src/components/views/context_menus/MessageContextMenu.js
+++ b/src/components/views/context_menus/MessageContextMenu.js
@@ -40,6 +40,31 @@ module.exports = React.createClass({
onFinished: React.PropTypes.func,
},
+ getInitialState: function() {
+ return {
+ canRedact: false,
+ };
+ },
+
+ componentWillMount: function() {
+ MatrixClientPeg.get().on('RoomMember.powerLevel', this._checkCanRedact);
+ this._checkCanRedact();
+ },
+
+ componentWillUnmount: function() {
+ const cli = MatrixClientPeg.get();
+ if (cli) {
+ cli.removeListener('RoomMember.powerLevel', this._checkCanRedact);
+ }
+ },
+
+ _checkCanRedact: function() {
+ const cli = MatrixClientPeg.get();
+ const room = cli.getRoom(this.props.mxEvent.getRoomId());
+ const canRedact = room.currentState.maySendRedactionForEvent(this.props.mxEvent, cli.credentials.userId);
+ this.setState({canRedact});
+ },
+
onResendClick: function() {
Resend.resend(this.props.mxEvent);
if (this.props.onFinished) this.props.onFinished();
@@ -136,7 +161,7 @@ module.exports = React.createClass({
);
}
- if (!eventStatus && !this.props.mxEvent.isRedacted()) { // sent and not redacted
+ if (this.state.canRedact) {
redactButton = (
{ _t('Remove') }
@@ -206,7 +231,7 @@ module.exports = React.createClass({
externalURLButton = (
{ _t('Source URL') }
+ rel="noopener" target="_blank" onClick={ this.closeMenu }>{ _t('Source URL') }
);
}
diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json
index d030e29d1a..cbe617b20c 100644
--- a/src/i18n/strings/de_DE.json
+++ b/src/i18n/strings/de_DE.json
@@ -5,15 +5,15 @@
"Files": "Dateien",
"Notifications": "Benachrichtigungen",
"Invite to this room": "In diesen Raum einladen",
- "Filter room names": "Raum Namen filtern",
+ "Filter room names": "Raum-Namen filtern",
"Start chat": "Neuen Chat starten",
"Room directory": "Raum-Verzeichnis",
"Create new room": "Neuen Raum erstellen",
"Settings": "Einstellungen",
- "powered by Matrix": "gebaut mit Matrix",
+ "powered by Matrix": "basierend auf Matrix",
"Custom Server Options": "Optionen für eigenen Server",
"Dismiss": "ausblenden",
- "Failed to get protocol list from Home Server": "Fehler beim Abrufen der Protokollliste vom Home Server",
+ "Failed to get protocol list from Home Server": "Fehler beim Abrufen der Protokoll-Liste vom Home-Server",
"The Home Server may be too old to support third party networks": "Der Home-Server ist eventuell zu alt, um Drittanbieter-Netzwerke zu unterstützen",
"Directory": "Raum Verzeichnis",
"#example:": "#beispiel:",
@@ -21,25 +21,25 @@
"No rooms to show": "Keine Räume zum anzeigen",
"World readable": "Jeder kann lesen",
"Guests can join": "Gäste können beitreten",
- "You are not receiving desktop notifications": "Du erhältst keine Desktop Benachrichtigungen",
+ "You are not receiving desktop notifications": "Du erhältst keine Desktop-Benachrichtigungen",
"Enable them now": "Aktiviere diese jetzt",
"Add an email address above to configure email notifications": "Füge eine E-Mail Adresse hinzu um Benachrichtigungen via E-Mail zu erhalten",
"All notifications are currently disabled for all targets.": "Im Moment sind alle Benachrichtigungen für alle Ziele deaktiviert.",
- "An error occurred whilst saving your email notification preferences.": "Ein Fehler trat auf während deine E-Mail Einstellungen gespeichert wurden.",
+ "An error occurred whilst saving your email notification preferences.": "Beim Speichern deiner E-Mail-Benachrichtigungseinstellungen ist ein Fehler aufgetreten.",
"and remove": "und entfernen",
"Can't update user notification settings": "Kann Benutzerdefinierte Einstellungen nicht aktualisieren",
- "Couldn't find a matching Matrix room": "Kann keinen entsprechenden Matrix Raum finden",
+ "Couldn't find a matching Matrix room": "Konnte keinen entsprechenden Matrix-Raum finden",
"delete the alias": "Lösche den Alias",
"Delete the room alias": "Lösche den Raum Alias",
"Direct Chat": "Privater Chat",
"Drop here to": "Hier ablegen",
- "Enable audible notifications in web client": "Aktiviere Audio Benachrichtigungen",
- "Enable desktop notifications": "Aktiviere Desktop Benachrichtigungen",
+ "Enable audible notifications in web client": "Audio-Benachrichtigungen im Web-Client aktivieren",
+ "Enable desktop notifications": "Desktop-Benachrichtigungen aktivieren",
"Enable email notifications": "Aktiviere E-Mail Benachrichtigungen",
"Enable notifications for this account": "Aktiviere Benachrichtigungen für diesen Benutzer",
- "Enter keywords separated by a comma:": "Trage Schlagworte, mit Komma getrennt, ein",
+ "Enter keywords separated by a comma:": "Kommagetrennte Schlagworte eingeben:",
"Error": "Fehler",
- "Error saving email notification preferences": "Fehler beim Speichern der E-Mail Benachrichtigungseinstellungen",
+ "Error saving email notification preferences": "Fehler beim Speichern der E-Mail-Benachrichtigungseinstellungen",
"#example": "#Beispiel",
"Failed to": "Konnte nicht",
"Failed to add tag ": "Konnte Tag nicht hinzufügen ",
@@ -55,18 +55,18 @@
"from the directory": "aus dem Verzeichnis",
" from room": " aus dem Raum",
"Guest users can't invite users. Please register to invite": "Gastnutzer können keine Nutzer einladen. Bitte registriere dich um Nutzer einzuladen",
- "Keywords": "Suchbegriff",
+ "Keywords": "Schlüsselwörter",
"Leave": "Verlassen",
"Low Priority": "Niedrige Priorität",
"Noisy": "Laut",
- "Notification targets": "Benachrichtigungsziel",
+ "Notification targets": "Benachrichtigungsziele",
"Notifications on the following keywords follow rules which can’t be displayed here:": "Benachrichtigungen zu folgenden Stichwörtern folgen Regeln, die hier nicht angezeigt werden können:",
- "Notify for all other messages/rooms": "Benachrichtigung für alle anderen Mitteilungen/ Räume",
+ "Notify for all other messages/rooms": "Benachrichtigungen für alle anderen Mitteilungen/Räume aktivieren",
"Operation failed": "Aktion fehlgeschlagen",
"Reject": "ablehnen",
- "Remove": "Entferne",
+ "Remove": "Entfernen",
"remove": "Entferner",
- "Remove from Directory": "Vom Raum Verzeichnis entfernen",
+ "Remove from Directory": "Aus dem Raum-Verzeichnis entfernen",
"Riot does not know how to join a room on this network": "Riot weiß nicht, wie es einem Raum auf diesem Netzwerk beitreten soll",
"Room not found": "Raum nicht gefunden",
"There are advanced notifications which are not shown here": "Es existieren erweiterte Benachrichtigungen, welche hier nicht angezeigt werden",
@@ -79,9 +79,9 @@
"Notify me for anything else": "Benachrichtige mich für alles andere",
"Off": "Aus",
"On": "An",
- "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Du hast sie eventuell auf einem anderen Client als Riot konfiguriert. Sie sind in Riot nicht anpassbar gelten aber trotzdem",
+ "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Du hast sie eventuell auf einem anderen Client als Riot konfiguriert. Sie können in Riot nicht verändert werden, gelten aber trotzdem",
" to room": " an Raum",
- "Drop here %(toAction)s": "%(toAction)s hierher ziehen",
+ "Drop here %(toAction)s": "Hierher ziehen: %(toAction)s",
"All messages": "Alle Nachrichten",
"All messages (loud)": "Alle Nachrichten (laut)",
"Cancel Sending": "Senden abbrechen",
@@ -107,7 +107,7 @@
"View Decrypted Source": "Entschlüsselten Quellcode ansehen",
"View Source": "Quellcode ansehen",
"You cannot delete this image. (%(code)s)": "Das Bild kann nicht gelöscht werden. (%(code)s)",
- "You cannot delete this message. (%(code)s)": "Die Nachricht kann nicht gelöscht werden. (%(code)s)",
+ "You cannot delete this message. (%(code)s)": "Diese Nachricht kann nicht gelöscht werden. (%(code)s)",
"Today": "Heute",
"Wednesday": "Mittwoch",
"Thursday": "Donnerstag",
@@ -122,10 +122,10 @@
"Call invitation": "Anruf-Einladung",
"Messages containing my display name": "Nachrichten, die meinen Anzeigenamen enthalten",
"Messages containing my user name": "Nachrichten, die meinen Nutzernamen enthalten",
- "Messages in group chats": "Nachrichten in Chat-Gruppen",
+ "Messages in group chats": "Nachrichten in Gruppen-Chats",
"Messages in one-to-one chats": "Nachrichten in Eins-zu-Eins-Chats",
"Messages sent by bot": "Nachrichten von Bots",
"more": "mehr",
"When I'm invited to a room": "Wenn ich in einen Raum eingeladen werde",
- "customServer_text": "Du kannst die erweiterten Server-Optioen nutzen um dich an anderen Matrix-Servern mittels anderer Heimserver-URL anzumelden.
Dies erlaubt dir Riot mit einem existierendem Konto auf einem anderen Heimserver zu nutzen.
Du kannst auch einen benutzerdefinierten Identitäts-Server setzen, aber du wirst dann nicht in der Lage sein, Nutzer per E-Mail-Adresse einzuladen oder selbst mit E-Mail-Adresse eingeladen zu werden."
+ "customServer_text": "Du kannst die erweiterten Server-Optionen nutzen, um dich auf anderen Matrix-Servern anzumelden, indem du eine andere Heimserver-URL eingibst.
Dies ermöglicht es dir, Riot mit einem bereits existierenden Matrix-Konto auf einem anderen Heimserver zu nutzen.
Du kannst auch einen benutzerdefinierten Identitäts-Server eingeben, allerdings wirst du dann nicht in der Lage sein, andere Benutzer per E-Mail-Adresse einzuladen oder selbst Einladungen per E-Mail-Adresse zu erhalten."
}
diff --git a/src/i18n/strings/uk.json b/src/i18n/strings/uk.json
new file mode 100644
index 0000000000..9e26dfeeb6
--- /dev/null
+++ b/src/i18n/strings/uk.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file