mirror of https://github.com/zulip/zulip.git
123 lines
4.2 KiB
JavaScript
123 lines
4.2 KiB
JavaScript
|
var custom_markdown = (function () {
|
||
|
|
||
|
var exports = {};
|
||
|
|
||
|
(function () {
|
||
|
// Javascript for bugdown.StreamSubscribeButton
|
||
|
|
||
|
// A map of stream names to ids to select inline subscribe node without
|
||
|
// needing to escape the CSS selectors.
|
||
|
var inline_subscribe_id_map = {};
|
||
|
|
||
|
function add_sub(stream_name, $status_message) {
|
||
|
channel.post({
|
||
|
url: '/json/subscriptions/add',
|
||
|
data: {
|
||
|
subscriptions: JSON.stringify([{'name': stream_name}])
|
||
|
}
|
||
|
}).then(
|
||
|
function (data) {
|
||
|
if (!$.isEmptyObject(data.already_subscribed)) {
|
||
|
// Display the canonical stream capitalization.
|
||
|
var true_stream_name = data.already_subscribed[page_params.email][0];
|
||
|
ui.report_success("Already subscribed to " + true_stream_name,
|
||
|
$status_message);
|
||
|
}
|
||
|
}, function (xhr) {
|
||
|
ui.report_error("Error adding subscription", xhr, $status_message);
|
||
|
}
|
||
|
);
|
||
|
}
|
||
|
|
||
|
function remove_sub(stream_name, $status_message) {
|
||
|
channel.post({
|
||
|
url: '/json/subscriptions/remove',
|
||
|
data: {
|
||
|
subscriptions: JSON.stringify([stream_name])
|
||
|
}
|
||
|
}).then(
|
||
|
function (data) {
|
||
|
$status_message.hide();
|
||
|
}, function (xhr) {
|
||
|
ui.report_error("Error removing subscription", xhr, $status_message);
|
||
|
}
|
||
|
);
|
||
|
}
|
||
|
|
||
|
function display_subscribe($button, stream_name) {
|
||
|
$button.text('Subscribe to ' + stream_data.canonicalized_name(stream_name))
|
||
|
.removeClass('green-button')
|
||
|
.addClass('gray-button');
|
||
|
}
|
||
|
|
||
|
function display_unsubscribe($button, stream_name) {
|
||
|
$button.text('Unsubscribe from ' + stream_data.canonicalized_name(stream_name))
|
||
|
.removeClass('gray-button')
|
||
|
.addClass('green-button');
|
||
|
}
|
||
|
|
||
|
function update_button_display($button, stream_name) {
|
||
|
if (stream_data.is_subscribed(stream_name)) {
|
||
|
display_unsubscribe($button, stream_name);
|
||
|
} else {
|
||
|
display_subscribe($button, stream_name);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$(function () {
|
||
|
$('#main_div').delegate('.inline-subscribe-button', 'click', function (e) {
|
||
|
var $button = $(e.target);
|
||
|
var stream_name = $button.closest('.inline-subscribe').data('stream-name');
|
||
|
var $status_message = $button.siblings('.inline-subscribe-error');
|
||
|
e.preventDefault();
|
||
|
e.stopPropagation();
|
||
|
|
||
|
if (stream_data.is_subscribed(stream_name)) {
|
||
|
remove_sub(stream_name, $status_message);
|
||
|
} else {
|
||
|
add_sub(stream_name, $status_message);
|
||
|
}
|
||
|
});
|
||
|
});
|
||
|
|
||
|
$(document).on('message_rendered.zulip', function (e) {
|
||
|
var $inline_subscribe, $button, stream_name, id;
|
||
|
$inline_subscribe = $(e.target).find('.inline-subscribe');
|
||
|
if ($inline_subscribe.length === 0) {
|
||
|
return;
|
||
|
}
|
||
|
stream_name = $inline_subscribe.data('stream-name');
|
||
|
$button = $inline_subscribe.find('.inline-subscribe-button');
|
||
|
|
||
|
if (inline_subscribe_id_map[stream_name]) {
|
||
|
id = inline_subscribe_id_map[stream_name];
|
||
|
} else {
|
||
|
id = _.uniqueId('inline-subscribe-id-');
|
||
|
inline_subscribe_id_map[stream_name] = id;
|
||
|
}
|
||
|
// Can not use data here, jQuery only stores into expando so our jQuery
|
||
|
// selectors will not be able to find it.
|
||
|
$inline_subscribe.attr('data-stream-ui-id', id);
|
||
|
|
||
|
update_button_display($button, stream_name);
|
||
|
});
|
||
|
|
||
|
var sub_event_handler = function (e) {
|
||
|
var stream_name = e.sub.name;
|
||
|
var id = inline_subscribe_id_map[stream_name];
|
||
|
var $button = $('#main_div').
|
||
|
find('.inline-subscribe[data-stream-ui-id="'+ id + '"] .inline-subscribe-button');
|
||
|
update_button_display($button, stream_name);
|
||
|
};
|
||
|
$(document).on('subscription_add_done.zulip', sub_event_handler);
|
||
|
$(document).on('subscription_remove_done.zulip', sub_event_handler);
|
||
|
}());
|
||
|
|
||
|
|
||
|
return exports;
|
||
|
|
||
|
}());
|
||
|
if (typeof module !== 'undefined') {
|
||
|
module.exports = custom_markdown;
|
||
|
}
|