Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified assets/icons/ZulipIcons.ttf
Binary file not shown.
4 changes: 4 additions & 0 deletions assets/icons/link.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
8 changes: 8 additions & 0 deletions assets/l10n/app_en.arb
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,10 @@
"@actionSheetOptionMarkChannelAsRead": {
"description": "Label for marking a channel as read."
},
"actionSheetOptionCopyChannelLink": "Copy link to channel",
"@actionSheetOptionCopyChannelLink": {
"description": "Label for copy channel link button on action sheet."
},
"actionSheetOptionListOfTopics": "List of topics",
"@actionSheetOptionListOfTopics": {
"description": "Label for navigating to a channel's topic-list page."
Expand Down Expand Up @@ -357,6 +361,10 @@
"@successMessageLinkCopied": {
"description": "Message when link of a message was copied to the user's system clipboard."
},
"successChannelLinkCopied": "Channel link copied",
"@successChannelLinkCopied": {
"description": "Message when link of a channel was copied to the user's system clipboard."
},
"errorBannerDeactivatedDmLabel": "You cannot send messages to deactivated users.",
"@errorBannerDeactivatedDmLabel": {
"description": "Label text for error banner when sending a message to one or multiple deactivated users."
Expand Down
12 changes: 12 additions & 0 deletions lib/generated/l10n/zulip_localizations.dart
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,12 @@ abstract class ZulipLocalizations {
/// **'Mark channel as read'**
String get actionSheetOptionMarkChannelAsRead;

/// Label for copy channel link button on action sheet.
///
/// In en, this message translates to:
/// **'Copy link to channel'**
String get actionSheetOptionCopyChannelLink;

/// Label for navigating to a channel's topic-list page.
///
/// In en, this message translates to:
Expand Down Expand Up @@ -619,6 +625,12 @@ abstract class ZulipLocalizations {
/// **'Message link copied'**
String get successMessageLinkCopied;

/// Message when link of a channel was copied to the user's system clipboard.
///
/// In en, this message translates to:
/// **'Channel link copied'**
String get successChannelLinkCopied;

/// Label text for error banner when sending a message to one or multiple deactivated users.
///
/// In en, this message translates to:
Expand Down
6 changes: 6 additions & 0 deletions lib/generated/l10n/zulip_localizations_ar.dart
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,9 @@ class ZulipLocalizationsAr extends ZulipLocalizations {
@override
String get actionSheetOptionMarkChannelAsRead => 'Mark channel as read';

@override
String get actionSheetOptionCopyChannelLink => 'Copy link to channel';

@override
String get actionSheetOptionListOfTopics => 'List of topics';

Expand Down Expand Up @@ -300,6 +303,9 @@ class ZulipLocalizationsAr extends ZulipLocalizations {
@override
String get successMessageLinkCopied => 'Message link copied';

@override
String get successChannelLinkCopied => 'Channel link copied';

@override
String get errorBannerDeactivatedDmLabel =>
'You cannot send messages to deactivated users.';
Expand Down
6 changes: 6 additions & 0 deletions lib/generated/l10n/zulip_localizations_de.dart
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,9 @@ class ZulipLocalizationsDe extends ZulipLocalizations {
String get actionSheetOptionMarkChannelAsRead =>
'Kanal als gelesen markieren';

@override
String get actionSheetOptionCopyChannelLink => 'Copy link to channel';

@override
String get actionSheetOptionListOfTopics => 'Themenliste';

Expand Down Expand Up @@ -313,6 +316,9 @@ class ZulipLocalizationsDe extends ZulipLocalizations {
@override
String get successMessageLinkCopied => 'Nachrichtenlink kopiert';

@override
String get successChannelLinkCopied => 'Channel link copied';

@override
String get errorBannerDeactivatedDmLabel =>
'Du kannst keine Nachrichten an deaktivierte Nutzer:innen senden.';
Expand Down
6 changes: 6 additions & 0 deletions lib/generated/l10n/zulip_localizations_en.dart
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,9 @@ class ZulipLocalizationsEn extends ZulipLocalizations {
@override
String get actionSheetOptionMarkChannelAsRead => 'Mark channel as read';

@override
String get actionSheetOptionCopyChannelLink => 'Copy link to channel';

@override
String get actionSheetOptionListOfTopics => 'List of topics';

Expand Down Expand Up @@ -300,6 +303,9 @@ class ZulipLocalizationsEn extends ZulipLocalizations {
@override
String get successMessageLinkCopied => 'Message link copied';

@override
String get successChannelLinkCopied => 'Channel link copied';

@override
String get errorBannerDeactivatedDmLabel =>
'You cannot send messages to deactivated users.';
Expand Down
6 changes: 6 additions & 0 deletions lib/generated/l10n/zulip_localizations_fr.dart
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,9 @@ class ZulipLocalizationsFr extends ZulipLocalizations {
@override
String get actionSheetOptionMarkChannelAsRead => 'Mark channel as read';

@override
String get actionSheetOptionCopyChannelLink => 'Copy link to channel';

@override
String get actionSheetOptionListOfTopics => 'List of topics';

Expand Down Expand Up @@ -300,6 +303,9 @@ class ZulipLocalizationsFr extends ZulipLocalizations {
@override
String get successMessageLinkCopied => 'Message link copied';

@override
String get successChannelLinkCopied => 'Channel link copied';

@override
String get errorBannerDeactivatedDmLabel =>
'You cannot send messages to deactivated users.';
Expand Down
6 changes: 6 additions & 0 deletions lib/generated/l10n/zulip_localizations_it.dart
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,9 @@ class ZulipLocalizationsIt extends ZulipLocalizations {
@override
String get actionSheetOptionMarkChannelAsRead => 'Segna il canale come letto';

@override
String get actionSheetOptionCopyChannelLink => 'Copy link to channel';

@override
String get actionSheetOptionListOfTopics => 'Elenco degli argomenti';

Expand Down Expand Up @@ -310,6 +313,9 @@ class ZulipLocalizationsIt extends ZulipLocalizations {
@override
String get successMessageLinkCopied => 'Collegamento messaggio copiato';

@override
String get successChannelLinkCopied => 'Channel link copied';

@override
String get errorBannerDeactivatedDmLabel =>
'Non è possibile inviare messaggi agli utenti disattivati.';
Expand Down
6 changes: 6 additions & 0 deletions lib/generated/l10n/zulip_localizations_ja.dart
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,9 @@ class ZulipLocalizationsJa extends ZulipLocalizations {
@override
String get actionSheetOptionMarkChannelAsRead => 'チャンネルを既読にする';

@override
String get actionSheetOptionCopyChannelLink => 'Copy link to channel';

@override
String get actionSheetOptionListOfTopics => 'トピック一覧';

Expand Down Expand Up @@ -297,6 +300,9 @@ class ZulipLocalizationsJa extends ZulipLocalizations {
@override
String get successMessageLinkCopied => 'Message link copied';

@override
String get successChannelLinkCopied => 'Channel link copied';

@override
String get errorBannerDeactivatedDmLabel =>
'You cannot send messages to deactivated users.';
Expand Down
6 changes: 6 additions & 0 deletions lib/generated/l10n/zulip_localizations_nb.dart
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,9 @@ class ZulipLocalizationsNb extends ZulipLocalizations {
@override
String get actionSheetOptionMarkChannelAsRead => 'Mark channel as read';

@override
String get actionSheetOptionCopyChannelLink => 'Copy link to channel';

@override
String get actionSheetOptionListOfTopics => 'List of topics';

Expand Down Expand Up @@ -300,6 +303,9 @@ class ZulipLocalizationsNb extends ZulipLocalizations {
@override
String get successMessageLinkCopied => 'Message link copied';

@override
String get successChannelLinkCopied => 'Channel link copied';

@override
String get errorBannerDeactivatedDmLabel =>
'You cannot send messages to deactivated users.';
Expand Down
6 changes: 6 additions & 0 deletions lib/generated/l10n/zulip_localizations_pl.dart
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,9 @@ class ZulipLocalizationsPl extends ZulipLocalizations {
String get actionSheetOptionMarkChannelAsRead =>
'Oznacz kanał jako przeczytany';

@override
String get actionSheetOptionCopyChannelLink => 'Copy link to channel';

@override
String get actionSheetOptionListOfTopics => 'Lista wątków';

Expand Down Expand Up @@ -308,6 +311,9 @@ class ZulipLocalizationsPl extends ZulipLocalizations {
@override
String get successMessageLinkCopied => 'Skopiowano odnośnik wiadomości';

@override
String get successChannelLinkCopied => 'Channel link copied';

@override
String get errorBannerDeactivatedDmLabel =>
'Nie można wysyłać wiadomości do dezaktywowanych użytkowników.';
Expand Down
6 changes: 6 additions & 0 deletions lib/generated/l10n/zulip_localizations_ru.dart
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,9 @@ class ZulipLocalizationsRu extends ZulipLocalizations {
String get actionSheetOptionMarkChannelAsRead =>
'Отметить канал как прочитанный';

@override
String get actionSheetOptionCopyChannelLink => 'Copy link to channel';

@override
String get actionSheetOptionListOfTopics => 'Список тем';

Expand Down Expand Up @@ -309,6 +312,9 @@ class ZulipLocalizationsRu extends ZulipLocalizations {
@override
String get successMessageLinkCopied => 'Ссылка на сообщение скопирована';

@override
String get successChannelLinkCopied => 'Channel link copied';

@override
String get errorBannerDeactivatedDmLabel =>
'Нельзя отправить сообщение отключенным пользователям.';
Expand Down
6 changes: 6 additions & 0 deletions lib/generated/l10n/zulip_localizations_sk.dart
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,9 @@ class ZulipLocalizationsSk extends ZulipLocalizations {
@override
String get actionSheetOptionMarkChannelAsRead => 'Mark channel as read';

@override
String get actionSheetOptionCopyChannelLink => 'Copy link to channel';

@override
String get actionSheetOptionListOfTopics => 'List of topics';

Expand Down Expand Up @@ -300,6 +303,9 @@ class ZulipLocalizationsSk extends ZulipLocalizations {
@override
String get successMessageLinkCopied => 'Message link copied';

@override
String get successChannelLinkCopied => 'Channel link copied';

@override
String get errorBannerDeactivatedDmLabel =>
'You cannot send messages to deactivated users.';
Expand Down
6 changes: 6 additions & 0 deletions lib/generated/l10n/zulip_localizations_sl.dart
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,9 @@ class ZulipLocalizationsSl extends ZulipLocalizations {
@override
String get actionSheetOptionMarkChannelAsRead => 'Označi kanal kot prebran';

@override
String get actionSheetOptionCopyChannelLink => 'Copy link to channel';

@override
String get actionSheetOptionListOfTopics => 'Seznam tem';

Expand Down Expand Up @@ -320,6 +323,9 @@ class ZulipLocalizationsSl extends ZulipLocalizations {
String get successMessageLinkCopied =>
'Povezava do sporočila je bila kopirana';

@override
String get successChannelLinkCopied => 'Channel link copied';

@override
String get errorBannerDeactivatedDmLabel =>
'Deaktiviranim uporabnikom ne morete pošiljati sporočil.';
Expand Down
6 changes: 6 additions & 0 deletions lib/generated/l10n/zulip_localizations_uk.dart
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,9 @@ class ZulipLocalizationsUk extends ZulipLocalizations {
String get actionSheetOptionMarkChannelAsRead =>
'Позначити канал як прочитаний';

@override
String get actionSheetOptionCopyChannelLink => 'Copy link to channel';

@override
String get actionSheetOptionListOfTopics => 'Список тем';

Expand Down Expand Up @@ -311,6 +314,9 @@ class ZulipLocalizationsUk extends ZulipLocalizations {
String get successMessageLinkCopied =>
'Посилання на повідомлення скопійовано';

@override
String get successChannelLinkCopied => 'Channel link copied';

@override
String get errorBannerDeactivatedDmLabel =>
'Ви не можете надсилати повідомлення деактивованим користувачам.';
Expand Down
6 changes: 6 additions & 0 deletions lib/generated/l10n/zulip_localizations_zh.dart
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,9 @@ class ZulipLocalizationsZh extends ZulipLocalizations {
@override
String get actionSheetOptionMarkChannelAsRead => 'Mark channel as read';

@override
String get actionSheetOptionCopyChannelLink => 'Copy link to channel';

@override
String get actionSheetOptionListOfTopics => 'List of topics';

Expand Down Expand Up @@ -300,6 +303,9 @@ class ZulipLocalizationsZh extends ZulipLocalizations {
@override
String get successMessageLinkCopied => 'Message link copied';

@override
String get successChannelLinkCopied => 'Channel link copied';

@override
String get errorBannerDeactivatedDmLabel =>
'You cannot send messages to deactivated users.';
Expand Down
33 changes: 32 additions & 1 deletion lib/widgets/action_sheet.dart
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,9 @@ void showChannelActionSheet(BuildContext context, {
MarkChannelAsReadButton(pageContext: pageContext, channelId: channelId));
}

optionButtons.add(
CopyChannelLinkButton(channelId: channelId, pageContext: pageContext));

_showActionSheet(pageContext, optionButtons: optionButtons);
}

Expand Down Expand Up @@ -256,6 +259,34 @@ class MarkChannelAsReadButton extends ActionSheetMenuItemButton {
}
}

class CopyChannelLinkButton extends ActionSheetMenuItemButton {
const CopyChannelLinkButton({
super.key,
required this.channelId,
required super.pageContext,
});

final int channelId;

@override
IconData get icon => ZulipIcons.link;

@override
String label(ZulipLocalizations zulipLocalizations) {
return zulipLocalizations.actionSheetOptionCopyChannelLink;
}

@override
void onPressed() async {
final localizations = ZulipLocalizations.of(pageContext);
final store = PerAccountStoreWidget.of(pageContext);

PlatformActions.copyWithPopup(context: pageContext,
successContent: Text(localizations.successChannelLinkCopied),
data: ClipboardData(text: narrowLink(store, ChannelNarrow(channelId)).toString()));
}
}

/// Show a sheet of actions you can take on a topic.
///
/// Needs a [PageRoot] ancestor.
Expand Down Expand Up @@ -1023,7 +1054,7 @@ class CopyMessageTextButton extends MessageActionSheetMenuItemButton {
class CopyMessageLinkButton extends MessageActionSheetMenuItemButton {
CopyMessageLinkButton({super.key, required super.message, required super.pageContext});

@override IconData get icon => Icons.link;
@override IconData get icon => ZulipIcons.link;

@override
String label(ZulipLocalizations zulipLocalizations) {
Expand Down
Loading