mirror of
https://github.com/zulip/zulip.git
synced 2025-10-29 11:03:54 +00:00
reminders: Add various design improvements for the UI/reminder msg.
This commit is contained in:
committed by
Tim Abbott
parent
81a677e02b
commit
e41d32a15a
@@ -371,6 +371,7 @@ exports.render_actions_remind_popover = function (element, id) {
|
||||
current_flatpickr_instance = $('.remind.custom[data-message-id="'+message.id+'"]').flatpickr({
|
||||
enableTime: true,
|
||||
clickOpens: false,
|
||||
defaultDate: moment().format(),
|
||||
minDate: 'today',
|
||||
plugins: [new confirmDatePlugin({})], // eslint-disable-line new-cap, no-undef
|
||||
});
|
||||
|
||||
@@ -44,7 +44,7 @@ function patch_request_for_scheduling(request) {
|
||||
if (command_line.slice(command.length, command.length + 1) !== ' ') {
|
||||
compose.compose_error(i18n.t('Invalid slash command. Check if you are missing a space after the command.'), $('#compose-textarea'));
|
||||
} else if (deliver_at.trim() === '') {
|
||||
compose.compose_error(i18n.t('Please specify time for your reminder.'), $('#compose-textarea'));
|
||||
compose.compose_error(i18n.t('Please specify a date or time'), $('#compose-textarea'));
|
||||
} else {
|
||||
compose.compose_error(i18n.t('Your reminder note is empty!'), $('#compose-textarea'));
|
||||
}
|
||||
@@ -97,11 +97,39 @@ exports.schedule_message = function (request) {
|
||||
};
|
||||
|
||||
exports.do_set_reminder_for_message = function (msgid, timestamp) {
|
||||
var row = $("[zid='" + msgid + "']");
|
||||
function error() {
|
||||
row.find(".alert-msg")
|
||||
.text(i18n.t("Reminder not set!"))
|
||||
.css("display", "block")
|
||||
.css("color", "#b94a48")
|
||||
.delay(1000).fadeOut(300, function () {
|
||||
$(this).css("color", "");
|
||||
});
|
||||
}
|
||||
|
||||
var message = current_msg_list.get(msgid);
|
||||
|
||||
if (!message.raw_content) {
|
||||
var msg_list = current_msg_list;
|
||||
channel.get({
|
||||
url: '/json/messages/' + message.id,
|
||||
idempotent: true,
|
||||
success: function (data) {
|
||||
if (current_msg_list === msg_list) {
|
||||
message.raw_content = data.raw_content;
|
||||
exports.do_set_reminder_for_message(msgid, timestamp);
|
||||
}
|
||||
},
|
||||
error: error,
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
var link_to_msg = narrow.by_conversation_and_time_uri(message, true);
|
||||
var command = deferred_message_types.reminders.slash_command;
|
||||
var reminder_timestamp = timestamp;
|
||||
var custom_msg = '[this message](' + link_to_msg + ') at ' + reminder_timestamp;
|
||||
var custom_msg = message.raw_content + '\n\n[Link to conversation](' + link_to_msg + ')';
|
||||
var reminder_msg_content = command + ' ' + reminder_timestamp + '\n' + custom_msg;
|
||||
var reminder_message = {
|
||||
type: "private",
|
||||
@@ -117,8 +145,6 @@ exports.do_set_reminder_for_message = function (msgid, timestamp) {
|
||||
reminder_message.private_message_recipient = recipient;
|
||||
reminder_message.to_user_ids = people.email_list_to_user_ids_string(emails);
|
||||
|
||||
var row = $("[zid='" + msgid + "']");
|
||||
|
||||
function success() {
|
||||
row.find(".alert-msg")
|
||||
.text(i18n.t("Reminder set!"))
|
||||
@@ -126,13 +152,6 @@ exports.do_set_reminder_for_message = function (msgid, timestamp) {
|
||||
.delay(1000).fadeOut(300);
|
||||
}
|
||||
|
||||
function error() {
|
||||
row.find(".alert-msg")
|
||||
.text(i18n.t("Setting reminder failed!"))
|
||||
.css("display", "block")
|
||||
.delay(1000).fadeOut(300);
|
||||
}
|
||||
|
||||
do_schedule_message(reminder_message, success, error);
|
||||
};
|
||||
|
||||
|
||||
@@ -1,25 +1,20 @@
|
||||
{{! Contents of the "remind me about this actions" popup }}
|
||||
<ul class="nav nav-list remind_me_popover">
|
||||
<li>
|
||||
<a href="#" class="remind_icon" data-message-id="{{message.id}}">
|
||||
<i class="fa fa-bell" aria-hidden="true"></i>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#" class="remind in_20m" data-message-id="{{message.id}}">
|
||||
{{t "In 20 minutes" }}
|
||||
{{t "in 20 minutes" }}
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="#" class="remind in_1h" data-message-id="{{message.id}}">
|
||||
{{t "In 1 hour" }}
|
||||
{{t "in 1 hour" }}
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="#" class="remind in_3h" data-message-id="{{message.id}}">
|
||||
{{t "In 3 hour" }}
|
||||
{{t "in 3 hours" }}
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
@@ -96,6 +96,10 @@ IGNORED_PHRASES = [
|
||||
r"more topics",
|
||||
# For consistency with "more topics"
|
||||
r"more conversations",
|
||||
# Capital 'i' looks weird in reminders popover
|
||||
r"in 1 hour",
|
||||
r"in 20 minutes",
|
||||
r"in 3 hours",
|
||||
# We should probably just delete this string from translations
|
||||
r'activation key',
|
||||
# this is used as a topic
|
||||
|
||||
@@ -44,8 +44,6 @@ Usage: ./manage.py deliver_scheduled_messages
|
||||
message.sender = original_sender
|
||||
elif delivery_type == ScheduledMessage.REMIND:
|
||||
message.sender = get_user(settings.REMINDER_BOT, original_sender.realm)
|
||||
whos_reminding = ('%s asked me to do a reminder about:\n' % (original_sender.full_name))
|
||||
message.content = whos_reminding + message.content
|
||||
|
||||
return {'message': message, 'stream': scheduled_message.stream,
|
||||
'realm': scheduled_message.realm}
|
||||
|
||||
@@ -1566,7 +1566,7 @@ class ScheduledMessageTest(ZulipTestCase):
|
||||
|
||||
result = self.do_schedule_message('stream', 'Verona',
|
||||
content + ' 1', defer_until_str)
|
||||
self.assert_json_error(result, 'Invalid timestamp for scheduling message. Choose a time in future.')
|
||||
self.assert_json_error(result, 'Time must be in the future.')
|
||||
|
||||
def test_invalid_timestamp(self) -> None:
|
||||
# Scheduling a message from which timestamp couldn't be parsed
|
||||
@@ -1576,7 +1576,7 @@ class ScheduledMessageTest(ZulipTestCase):
|
||||
|
||||
result = self.do_schedule_message('stream', 'Verona',
|
||||
content + ' 1', defer_until)
|
||||
self.assert_json_error(result, 'Invalid timestamp for scheduling message.')
|
||||
self.assert_json_error(result, 'Invalid time format')
|
||||
|
||||
def test_missing_deliver_at(self) -> None:
|
||||
content = "Test message"
|
||||
|
||||
@@ -1123,7 +1123,7 @@ def handle_deferred_message(sender: UserProfile, client: Client,
|
||||
try:
|
||||
deliver_at = dateparser(defer_until)
|
||||
except ValueError:
|
||||
return json_error(_("Invalid timestamp for scheduling message."))
|
||||
return json_error(_("Invalid time format"))
|
||||
|
||||
deliver_at_usertz = deliver_at
|
||||
if deliver_at_usertz.tzinfo is None:
|
||||
@@ -1133,7 +1133,7 @@ def handle_deferred_message(sender: UserProfile, client: Client,
|
||||
deliver_at = convert_to_UTC(deliver_at_usertz)
|
||||
|
||||
if deliver_at <= timezone_now():
|
||||
return json_error(_("Invalid timestamp for scheduling message. Choose a time in future."))
|
||||
return json_error(_("Time must be in the future."))
|
||||
|
||||
check_schedule_message(sender, client, message_type_name, message_to,
|
||||
topic_name, message_content, delivery_type,
|
||||
|
||||
Reference in New Issue
Block a user