extends basic

block extra_head
    title Documentation - Apache ECharts
    style.
        html, body {
            /* position: sticky should not have overflow parents.*/
            overflow-x: hidden;
        }
    link(rel="stylesheet", href="#{cdnThirdParty.elementUICSS}")
    link(rel="stylesheet", href="#{getAssetUrl(cdnPayRoot, ecWWWLang + '/css/doc-bundle.css')}")

block content

    nav(class='navbar navbar-default navbar-fixed-top doc-nav' id="ec-doc-nav")
        if ecWWWLang == 'en'
            include ../en/nav
        else
            include ../components/nav

    .page-main
        block vars

        #ec-doc-main

        #v4-link.alert.alert-info.alert-dismissible
            if ecWWWLang == 'en'
                a(href="#{host}/v4/option.html") V4 Documentation
            else
                a(href="#{host}/v4/option.html") 旧版本文档

            button.close(type="button", data-dismiss="alert", aria-label="Close")
                span(aria-hidden="true") &times;


block extra_js
    script(src="#{cdnThirdParty.vueJS}")
    script(src="#{cdnThirdParty.elementUIJS}")
    script(src="#{cdnThirdParty.codeMirrorJS}")
    script(src="#{cdnThirdParty.codeMirrorJSModeJS}")
    script(src="#{cdnThirdParty.beautifierJS}")
    script(src="#{getAssetUrl(cdnPayRoot, ecWWWLang + '/js/doc-bundle.js')}")
    script(type="text/javascript").
        document.getElementById('nav-doc').className = 'active';
        window.EC_WWW_CDN_PAY_ROOT = '#{cdnPayRoot}';

    block global_args_extra

    script(type="text/javascript").
        window.globalArgsExtra.version = '#{docHash}';
        echartsDoc.init('#ec-doc-main', window.globalArgsExtra);

