mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			126 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			4.4 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/users/me/subscriptions',
 | 
						|
            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(i18n.t("Already subscribed to __stream__", {stream: true_stream_name}),
 | 
						|
                                      $status_message);
 | 
						|
                }
 | 
						|
            }, function (xhr) {
 | 
						|
                ui.report_error(i18n.t("Error adding subscription"), xhr, $status_message);
 | 
						|
            }
 | 
						|
        );
 | 
						|
    }
 | 
						|
 | 
						|
    function remove_sub(stream_name, $status_message) {
 | 
						|
        channel.del({
 | 
						|
            url: '/json/users/me/subscriptions',
 | 
						|
            data: {
 | 
						|
                subscriptions: JSON.stringify([stream_name]),
 | 
						|
            },
 | 
						|
        }).then(
 | 
						|
            function () {
 | 
						|
                $status_message.hide();
 | 
						|
            }, function (xhr) {
 | 
						|
                ui.report_error(i18n.t("Error removing subscription"), xhr, $status_message);
 | 
						|
            }
 | 
						|
        );
 | 
						|
    }
 | 
						|
 | 
						|
    function display_subscribe($button, stream_name) {
 | 
						|
        $button.text(i18n.t('Subscribe to __stream__', {stream: stream_data.canonicalized_name(stream_name)}))
 | 
						|
            .removeClass('btn-success')
 | 
						|
            .addClass('btn-default');
 | 
						|
    }
 | 
						|
 | 
						|
    function display_unsubscribe($button, stream_name) {
 | 
						|
        $button.text(i18n.t('Unsubscribe from __stream__', {stream: stream_data.canonicalized_name(stream_name)}))
 | 
						|
            .removeClass('btn-default')
 | 
						|
            .addClass('btn-success');
 | 
						|
    }
 | 
						|
 | 
						|
    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').attr('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;
 | 
						|
        var $button;
 | 
						|
        var stream_name;
 | 
						|
        var id;
 | 
						|
        $inline_subscribe = $(e.target).find('.inline-subscribe');
 | 
						|
        if ($inline_subscribe.length === 0) {
 | 
						|
            return;
 | 
						|
        }
 | 
						|
        stream_name = $inline_subscribe.attr('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;
 | 
						|
}
 |