$()

in rst/themes/lifescience-theme/static/js/custom-sidenav.js [1:57]


$(document).ready(function() {
    var toc = document.getElementById("local-toc");
    if (!toc) return;
    var data = getTocObject(toc);
    if (!data.ul) return;
    data = data.ul.length > 1 ? data : data.ul[0];

    var htmlstring =
        '{{#each ul}}' +
        '<div class="panel accordion-item">' +
        '    {{#if ul}}' +
        '    <div class="accordion-heading">' +
        '        <p class="accordion-title">' +
        '           <a data-toggle="collapse" data-parent="#accordion1"' +
        '               class="accordion-toggle collapsed" href="#item{{@index}}">{{text}}</a>' +
        '        </p>' +
        '    </div>' +
        '    <div class="accordion-collapse collapse" id="item{{@index}}">' +
        '        <div class="accordion-body">' +
        '            <ul>' +
        '                {{#each ul}}' +
        '                <li><a href="{{href}}">{{text}}</a></li>' +
        '                {{/each}}' +
        '            </ul>' +
        '        </div>' +
        '    </div>' +
        '    {{else}}' +
        '    <div class="accordion-heading">' +
        '        <p class="accordion-title">' +
        '            <a data-parent="#accordion1" class="accordion-toggle" href="{{href}}">{{text}}</a>' +
        '        </p>' +
        '    </div>' +
        '    {{/if}}' +
        '</div>' +
        '{{/each}}';

    var template = Handlebars.compile(htmlstring);
    $('#accordion1').append(template(data));

    function getTocObject(current) {
        var newNode = {};
        var child;
        for (var i = 0; i < current.children.length; i++) {
            child = current.children[i];

            if (child.localName == "ul") {
                newNode["ul"] = [];
                for (var j = 0; j < child.children.length; j++)
                    newNode["ul"].push(getTocObject(child.children[j]))
            } else {
                newNode["text"] = child.innerHTML;
                newNode["href"] = child.attributes["href"].nodeValue;
            }
        }
        return newNode;
    }
});