Files
zulip/static/js/reminder.js
Anders Kaseorg 28f3dfa284 js: Automatically convert var to let and const in most files.
This commit was originally automatically generated using `tools/lint
--only=eslint --fix`.  It was then modified by tabbott to contain only
changes to a set of files that are unlikely to result in significant
merge conflicts with any open pull request, excluding about 20 files.
His plan is to merge the remaining changes with more precise care,
potentially involving merging parts of conflicting pull requests
before running the `eslint --fix` operation.

Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2019-11-03 12:42:39 -08:00

151 lines
5.3 KiB
JavaScript

const deferred_message_types = {
scheduled: {
delivery_type: 'send_later',
test: /^\/schedule/,
slash_command: '/schedule',
},
reminders: {
delivery_type: 'remind',
test: /^\/remind/,
slash_command: '/remind',
},
};
exports.deferred_message_types = deferred_message_types;
exports.is_deferred_delivery = function (message_content) {
const reminders_test = deferred_message_types.reminders.test;
const scheduled_test = deferred_message_types.scheduled.test;
return reminders_test.test(message_content) ||
scheduled_test.test(message_content);
};
function patch_request_for_scheduling(request, message_content, deliver_at, delivery_type) {
if (request.type === "private") {
request.to = JSON.stringify(request.to);
} else {
request.to = JSON.stringify([request.to]);
}
const new_request = request;
new_request.content = message_content;
new_request.deliver_at = deliver_at;
new_request.delivery_type = delivery_type;
new_request.tz_guess = moment.tz.guess();
return new_request;
}
exports.schedule_message = function (request) {
if (request === undefined) {
request = compose.create_message_object();
}
const raw_message = request.content.split('\n');
const command_line = raw_message[0];
const message = raw_message.slice(1).join('\n');
const deferred_message_type = _.filter(deferred_message_types, function (props) {
return command_line.match(props.test) !== null;
})[0];
const command = command_line.match(deferred_message_type.test)[0];
const deliver_at = command_line.slice(command.length + 1);
if (message.trim() === '' || deliver_at.trim() === '' ||
command_line.slice(command.length, command.length + 1) !== ' ') {
$("#compose-textarea").attr('disabled', false);
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 a date or time'), $('#compose-textarea'));
} else {
compose.compose_error(i18n.t('Your reminder note is empty!'), $('#compose-textarea'));
}
return;
}
request = patch_request_for_scheduling(
request, message, deliver_at, deferred_message_type.delivery_type
);
const success = function (data) {
if (request.delivery_type === deferred_message_types.scheduled.delivery_type) {
notifications.notify_above_composebox('Scheduled your Message to be delivered at: ' + data.deliver_at);
}
$("#compose-textarea").attr('disabled', false);
compose.clear_compose_box();
};
const error = function (response) {
$("#compose-textarea").attr('disabled', false);
compose.compose_error(response, $('#compose-textarea'));
};
/* We are adding a disable on compose under this block because we
want slash commands to be blocking in nature. */
$("#compose-textarea").attr('disabled', true);
transmit.send_message(request, success, error);
};
exports.do_set_reminder_for_message = function (message_id, timestamp) {
const row = $("[zid='" + message_id + "']");
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", "");
});
}
const message = current_msg_list.get(message_id);
if (!message.raw_content) {
const 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(message_id, timestamp);
}
},
error: error,
});
return;
}
const link_to_msg = hash_util.by_conversation_and_time_uri(message);
const reminder_msg_content = message.raw_content + '\n\n[Link to conversation](' + link_to_msg + ')';
let reminder_message = {
type: "private",
sender_id: page_params.user_id,
stream: '',
};
util.set_message_topic(reminder_message, '');
const recipient = page_params.email;
const emails = util.extract_pm_recipients(recipient);
reminder_message.to = emails;
reminder_message.reply_to = recipient;
reminder_message.private_message_recipient = recipient;
reminder_message.to_user_ids = people.email_list_to_user_ids_string(emails);
function success() {
row.find(".alert-msg")
.text(i18n.t("Reminder set!"))
.css("display", "block")
.delay(1000).fadeOut(300);
}
reminder_message = patch_request_for_scheduling(
reminder_message, reminder_msg_content, timestamp,
deferred_message_types.reminders.delivery_type
);
transmit.send_message(reminder_message, success, error);
};
window.reminder = exports;