mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	Before 2017, Zulip's manage streams and settings UIs were tab in the same pane position as our current message feed and recent topics. That original implementation was implemented using Bootstrap tabs; while it hasn't been in use for years, we had a bunch of stale code related to it leftover in this module.
		
			
				
	
	
		
			78 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import $ from "jquery";
 | 
						|
 | 
						|
import * as keydown_util from "./keydown_util";
 | 
						|
 | 
						|
// Add functions to this that have no non-trivial
 | 
						|
// dependencies other than jQuery.
 | 
						|
 | 
						|
// https://stackoverflow.com/questions/4233265/contenteditable-set-caret-at-the-end-of-the-text-cross-browser
 | 
						|
export function place_caret_at_end(el: HTMLElement): void {
 | 
						|
    el.focus();
 | 
						|
 | 
						|
    const range = document.createRange();
 | 
						|
    range.selectNodeContents(el);
 | 
						|
    range.collapse(false);
 | 
						|
    const sel = window.getSelection();
 | 
						|
    sel?.removeAllRanges();
 | 
						|
    sel?.addRange(range);
 | 
						|
}
 | 
						|
 | 
						|
export function blur_active_element(): void {
 | 
						|
    // this blurs anything that may perhaps be actively focused on.
 | 
						|
    if (document.activeElement instanceof HTMLElement) {
 | 
						|
        document.activeElement.blur();
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
export function convert_enter_to_click(e: JQuery.KeyDownEvent): void {
 | 
						|
    if (keydown_util.is_enter_event(e)) {
 | 
						|
        e.preventDefault();
 | 
						|
        e.stopPropagation();
 | 
						|
        $(e.currentTarget).trigger("click");
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
export function update_unread_count_in_dom($unread_count_elem: JQuery, count: number): void {
 | 
						|
    // This function is used to update unread count in top left corner
 | 
						|
    // elements.
 | 
						|
    const $unread_count_span = $unread_count_elem.find(".unread_count");
 | 
						|
 | 
						|
    if (count === 0) {
 | 
						|
        $unread_count_span.hide();
 | 
						|
        $unread_count_span.text("");
 | 
						|
        return;
 | 
						|
    }
 | 
						|
 | 
						|
    $unread_count_span.show();
 | 
						|
    $unread_count_span.text(count);
 | 
						|
}
 | 
						|
 | 
						|
export function update_unread_mention_info_in_dom(
 | 
						|
    $unread_mention_info_elem: JQuery,
 | 
						|
    stream_has_any_unread_mention_messages: Boolean,
 | 
						|
): void {
 | 
						|
    const $unread_mention_info_span = $unread_mention_info_elem.find(".unread_mention_info");
 | 
						|
    if (!stream_has_any_unread_mention_messages) {
 | 
						|
        $unread_mention_info_span.hide();
 | 
						|
        $unread_mention_info_span.text("");
 | 
						|
        return;
 | 
						|
    }
 | 
						|
 | 
						|
    $unread_mention_info_span.show();
 | 
						|
    $unread_mention_info_span.text("@");
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Parse HTML and return a DocumentFragment.
 | 
						|
 *
 | 
						|
 * Like any consumer of HTML, this function must only be given input
 | 
						|
 * from trusted producers of safe HTML, such as auto-escaping
 | 
						|
 * templates; violating this expectation will introduce bugs that are
 | 
						|
 * likely to be security vulnerabilities.
 | 
						|
 */
 | 
						|
export function parse_html(html: string): DocumentFragment {
 | 
						|
    const template = document.createElement("template");
 | 
						|
    template.innerHTML = html;
 | 
						|
    return template.content;
 | 
						|
}
 |