extends basic

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

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

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="#{cdnPayRoot}/next/#{ecWWWLang}/js/doc-bundle.js?_v_=#{homeVersion}")
    script(type="text/javascript").
        window.EC_WWW_CDN_PAY_ROOT = '#{cdnPayRoot}';

    block global_args_extra

    script(type="text/javascript").
        document.getElementById('nav-doc').className = 'active';
        window.globalArgsExtra.version = '#{homeVersion}';
        echartsDoc.init('#ec-doc-main', window.globalArgsExtra);

