mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	Some languages such as Japanese use different word order with English. If the stream name must be the last word, translating to these languages is difficult.
		
			
				
	
	
		
			123 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			4.3 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.post({
 | 
						|
            url: '/json/subscriptions/remove',
 | 
						|
            data: {
 | 
						|
                subscriptions: JSON.stringify([stream_name])
 | 
						|
            }
 | 
						|
        }).then(
 | 
						|
            function (data) {
 | 
						|
                $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, $button, stream_name, 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;
 | 
						|
}
 |