How to use tocify with asciidoctor for a dynamic toc?

前端 未结 1 771
刺人心
刺人心 2021-02-02 03:29

By default, asciidoctor creates a static toc. This is very cool but for long documents, it would be nice to if the toc could be somewhat more compact and would highlight where i

相关标签:
1条回答
  • 2021-02-02 04:17

    Enable docinfo processing in your asciidoc files, e.g. by passing the following options to asciidoctor:

    -a toc=left -a docinfo=shared
    

    Add a docinfo.html file next to your asciidoc files with the following content:

    <!-- Generate a nice TOC -->
    <script src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
    <script src="https://code.jquery.com/ui/1.11.4/jquery-ui.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.tocify/1.9.0/javascripts/jquery.tocify.min.js"></script>
    <!-- We do not need the tocify CSS because the asciidoc CSS already provides most of what we neeed -->
    
    <style>
    .tocify-header {
        font-style: italic;
    }
    
    .tocify-subheader {
        font-style: normal;
        font-size: 90%;
    }
    
    .tocify ul {
        margin: 0;
     }
    
    .tocify-focus {
        color: #7a2518; 
        background-color: rgba(0, 0, 0, 0.1);
    }
    
    .tocify-focus > a {
        color: #7a2518; 
    }
    </style>
    
    <script type="text/javascript">
        $(function () {
            // Add a new container for the tocify toc into the existing toc so we can re-use its
            // styling
            $("#toc").append("<div id='generated-toc'></div>");
            $("#generated-toc").tocify({
                extendPage: true,
                context: "#content",
                highlightOnScroll: true,
                hideEffect: "slideUp",
                // Use the IDs that asciidoc already provides so that TOC links and intra-document
                // links are the same. Anything else might confuse users when they create bookmarks.
                hashGenerator: function(text, element) {
                    return $(element).attr("id");
                },
                // Smooth scrolling doesn't work properly if we use the asciidoc IDs
                smoothScroll: false,
                // Set to 'none' to use the tocify classes
                theme: "none",
                // Handle book (may contain h1) and article (only h2 deeper)
                selectors: $( "#content" ).has( "h1" ).size() > 0 ? "h1,h2,h3,h4,h5" : "h2,h3,h4,h5",
                ignoreSelector: ".discrete"
            });
    
            // Switch between static asciidoc toc and dynamic tocify toc based on browser size
            // This is set to match the media selectors in the asciidoc CSS
            // Without this, we keep the dynamic toc even if it is moved from the side to preamble
            // position which will cause odd scrolling behavior
            var handleTocOnResize = function() {
                if ($(document).width() < 768) {
                    $("#generated-toc").hide();
                    $(".sectlevel0").show();
                    $(".sectlevel1").show();
                }
                else {
                    $("#generated-toc").show();
                    $(".sectlevel0").hide();
                    $(".sectlevel1").hide();
                }
            }
    
            $(window).resize(handleTocOnResize);
            handleTocOnResize();
        });
    </script>
    
    0 讨论(0)
提交回复
热议问题