mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	Updates references to keyboard keys in the help center docs to use `<kbd>` HTML elements, which also means updating them to be as the key would appear on a keyboard. Previously, uppercase and lowercase letters were used to indicate when/if the `Shift` key was being used, and even that was not consistent throughout the documentation. For CSS styling, adds a similar rule for `<kbd>` elements that is used in `/static/styles/app_components.css`. And updates the CSS class used in `/static/js/portico/help.js` for `adjust_mac_shortcuts` accordingly. Also, takes advantage of revising these pages for making small updates for current help center documentation practices.
		
			
				
	
	
		
			185 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			185 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import $ from "jquery";
 | 
						|
import SimpleBar from "simplebar";
 | 
						|
 | 
						|
import * as common from "../common";
 | 
						|
 | 
						|
import * as google_analytics from "./google-analytics";
 | 
						|
import {activate_correct_tab} from "./tabbed-instructions";
 | 
						|
 | 
						|
function registerCodeSection($codeSection) {
 | 
						|
    const $li = $codeSection.find("ul.nav li");
 | 
						|
    const $blocks = $codeSection.find(".blocks div");
 | 
						|
 | 
						|
    $li.on("click", function () {
 | 
						|
        const language = this.dataset.language;
 | 
						|
 | 
						|
        $li.removeClass("active");
 | 
						|
        $li.filter("[data-language=" + language + "]").addClass("active");
 | 
						|
 | 
						|
        $blocks.removeClass("active");
 | 
						|
        $blocks.filter("[data-language=" + language + "]").addClass("active");
 | 
						|
    });
 | 
						|
 | 
						|
    $li.on("keydown", (e) => {
 | 
						|
        if (e.key === "Enter") {
 | 
						|
            e.target.click();
 | 
						|
        }
 | 
						|
    });
 | 
						|
}
 | 
						|
 | 
						|
function highlight_current_article() {
 | 
						|
    $(".help .sidebar a").removeClass("highlighted");
 | 
						|
    $(".help .sidebar a").attr("tabindex", "0");
 | 
						|
    const path = window.location.pathname;
 | 
						|
 | 
						|
    if (!path) {
 | 
						|
        return;
 | 
						|
    }
 | 
						|
 | 
						|
    const hash = window.location.hash;
 | 
						|
    let $article = $(`.help .sidebar a[href="${CSS.escape(path + hash)}"]`);
 | 
						|
    if (!$article.length) {
 | 
						|
        // If there isn't an entry in the left sidebar that matches
 | 
						|
        // the full URL+hash pair, instead highlight an entry in the
 | 
						|
        // left sidebar that just matches the URL part.
 | 
						|
        $article = $(`.help .sidebar a[href="${CSS.escape(path)}"]`);
 | 
						|
    }
 | 
						|
    // Highlight current article link and the heading of the same
 | 
						|
    $article.closest("ul").css("display", "block");
 | 
						|
    $article.addClass("highlighted");
 | 
						|
    $article.attr("tabindex", "-1");
 | 
						|
}
 | 
						|
 | 
						|
function render_code_sections() {
 | 
						|
    $(".code-section").each(function () {
 | 
						|
        activate_correct_tab($(this));
 | 
						|
        registerCodeSection($(this));
 | 
						|
    });
 | 
						|
 | 
						|
    highlight_current_article();
 | 
						|
 | 
						|
    common.adjust_mac_shortcuts(".markdown kbd");
 | 
						|
 | 
						|
    $("table").each(function () {
 | 
						|
        $(this).addClass("table table-striped");
 | 
						|
    });
 | 
						|
}
 | 
						|
 | 
						|
function scrollToHash(simplebar) {
 | 
						|
    const hash = window.location.hash;
 | 
						|
    const scrollbar = simplebar.getScrollElement();
 | 
						|
    if (hash !== "" && $(hash).length > 0) {
 | 
						|
        const position = $(hash).position().top - $(scrollbar.firstChild).position().top;
 | 
						|
        scrollbar.scrollTop = position;
 | 
						|
    } else {
 | 
						|
        scrollbar.scrollTop = 0;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
const cache = new Map();
 | 
						|
const loading = {
 | 
						|
    name: null,
 | 
						|
};
 | 
						|
 | 
						|
const markdownSB = new SimpleBar($(".markdown")[0]);
 | 
						|
 | 
						|
const fetch_page = function (path, callback) {
 | 
						|
    $.get(path, (res) => {
 | 
						|
        const $html = $(res).find(".markdown .content");
 | 
						|
        const title = $(res).filter("title").text();
 | 
						|
 | 
						|
        callback({html: $html.html().trim(), title});
 | 
						|
        render_code_sections();
 | 
						|
    });
 | 
						|
};
 | 
						|
 | 
						|
const update_page = function (cache, path) {
 | 
						|
    if (cache.has(path)) {
 | 
						|
        $(".markdown .content").html(cache.get(path).html);
 | 
						|
        document.title = cache.get(path).title;
 | 
						|
        render_code_sections();
 | 
						|
        scrollToHash(markdownSB);
 | 
						|
    } else {
 | 
						|
        loading.name = path;
 | 
						|
        fetch_page(path, (article) => {
 | 
						|
            cache.set(path, article);
 | 
						|
            $(".markdown .content").html(article.html);
 | 
						|
            loading.name = null;
 | 
						|
            document.title = article.title;
 | 
						|
            scrollToHash(markdownSB);
 | 
						|
        });
 | 
						|
    }
 | 
						|
    google_analytics.config({page_path: path});
 | 
						|
};
 | 
						|
 | 
						|
new SimpleBar($(".sidebar")[0]);
 | 
						|
 | 
						|
$(".sidebar a").on("click", function (e) {
 | 
						|
    const path = $(this).attr("href");
 | 
						|
    const path_dir = path.split("/")[1];
 | 
						|
    const current_dir = window.location.pathname.split("/")[1];
 | 
						|
 | 
						|
    // Do not block redirecting to external URLs
 | 
						|
    if (path_dir !== current_dir) {
 | 
						|
        return;
 | 
						|
    }
 | 
						|
 | 
						|
    if (loading.name === path) {
 | 
						|
        return;
 | 
						|
    }
 | 
						|
 | 
						|
    history.pushState({}, "", path);
 | 
						|
 | 
						|
    update_page(cache, path);
 | 
						|
 | 
						|
    $(".sidebar").removeClass("show");
 | 
						|
 | 
						|
    e.preventDefault();
 | 
						|
});
 | 
						|
 | 
						|
if (window.location.pathname === "/help/") {
 | 
						|
    // Expand the Guides user docs section in sidebar in the /help/ homepage.
 | 
						|
    $(".help .sidebar h2#guides + ul").show();
 | 
						|
}
 | 
						|
// Remove ID attributes from sidebar links so they don't conflict with index page anchor links
 | 
						|
$(".help .sidebar h1, .help .sidebar h2, .help .sidebar h3").removeAttr("id");
 | 
						|
 | 
						|
// Scroll to anchor link when clicked. Note that landing-page.js has a
 | 
						|
// similar function; this file and landing-page.js are never included
 | 
						|
// on the same page.
 | 
						|
$(document).on(
 | 
						|
    "click",
 | 
						|
    ".markdown .content h1, .markdown .content h2, .markdown .content h3",
 | 
						|
    function () {
 | 
						|
        window.location.hash = $(this).attr("id");
 | 
						|
        scrollToHash(markdownSB);
 | 
						|
    },
 | 
						|
);
 | 
						|
 | 
						|
$(".hamburger").on("click", () => {
 | 
						|
    $(".sidebar").toggleClass("show");
 | 
						|
    $(".sidebar .simplebar-content-wrapper").css("overflow", "hidden scroll");
 | 
						|
    $(".sidebar .simplebar-vertical").css("visibility", "visible");
 | 
						|
});
 | 
						|
 | 
						|
$(".markdown").on("click", () => {
 | 
						|
    if ($(".sidebar.show").length) {
 | 
						|
        $(".sidebar.show").toggleClass("show");
 | 
						|
    }
 | 
						|
});
 | 
						|
 | 
						|
render_code_sections();
 | 
						|
 | 
						|
// Finally, make sure if we loaded a window with a hash, we scroll
 | 
						|
// to the right place.
 | 
						|
scrollToHash(markdownSB);
 | 
						|
 | 
						|
window.addEventListener("popstate", () => {
 | 
						|
    const path = window.location.pathname;
 | 
						|
    update_page(cache, path);
 | 
						|
});
 | 
						|
 | 
						|
$("body").addClass("noscroll");
 | 
						|
 | 
						|
$(".highlighted")[0].scrollIntoView({block: "center"});
 |