
block variables

- var ecWWWLang = 'zh';
- var htmlAttrLang = 'zh-CN';

block variablesLang

doctype html
html(lang='#{htmlAttrLang}')
    head
        meta(charset='utf-8')

        meta(http-equiv='X-UA-Compatible', content='IE=edge')
        meta(name='viewport', content='width=device-width, initial-scale=1', user-scalable="no")

        meta(name="description" content="ECharts, a powerful, interactive charting and visualization library for browser")

        link(rel='shortcut icon', href='#{cdnPayRoot}/#{ecWWWLang}/images/favicon.png?_v_=#{cdnPayVersion}')
        link(rel='stylesheet', type='text/css', href='#{cdnThirdParty.bootstrapCSS}')
        // HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries
        <!--[if lt IE 9]>
        script(src='https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js')
        script(src='https://oss.maxcdn.com/respond/1.4.2/respond.min.js')
        <![endif]-->

        link(rel='stylesheet', type='text/css', href="#{getAssetUrl(cdnPayRoot, ecWWWLang + '/css/main.css')}")

        script.
            window.EC_WWW_LANG = '#{ecWWWLang}';

        script(type='text/javascript', src='#{cdnThirdParty.paceProgressBarJS}')

        script(id='font-hack', type='text/javascript').
            if (/windows/i.test(navigator.userAgent)) {
                var el = document.createElement('style');
                el.innerHTML = ''
                    + '@font-face {font-family:"noto-thin";src:local("Microsoft Yahei");}'
                    + '@font-face {font-family:"noto-light";src:local("Microsoft Yahei");}';
                document.head.insertBefore(el, document.getElementById('font-hack'));
            }

        block extra_head

        script(type='text/javascript', src='#{cdnThirdParty.jquery}')

    <!--[if lte IE 8]>
    body.lower-ie
        #lowie-main
            img(src="#{cdnPayRoot}/#{ecWWWLang}/images/forie.png?_v_=#{cdnPayVersion}", alt="ie tip")
    <![endif]-->
    <!--[if (gt IE 8)|!(IE)]>
    body(class="#{pageTitle}")
    <![endif]-->
    #apache-banner
        .txt
            if ecWWWLang == 'en'
                p Please visit the official Apache ECharts Website at
                a(id="a2", href="https://echarts.apache.org/zh/index.html") https://echarts.apache.org
            else
                p 请访问 Apache ECharts 的官网 &nbsp;
                a(id="a1", href="https://echarts.apache.org/zh/index.html") https://echarts.apache.org
        a.btn.btn-main(href="https://echarts.apache.org", target="_blank", onclick="logApache()")
            if ecWWWLang == 'en'
                div Visit Official Website
            else
                div 访问官网
        a.close-btn(href="javascript:;", onclick="closeApacheBanner(true)") x

    #v5-link.alert.alert-warning.alert-dismissible
        if ecWWWLang == 'en'
            span Back to the #[a(href="https://echarts.apache.org/zh/index.html") latest website.]
        else
            span 返回 #[a(href="https://echarts.apache.org/zh/index.html") 最新的官网]

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

    #main
        block content

    script(type='text/javascript', src='#{cdnThirdParty.bootstrapJS}')
    script(type='text/javascript', src="#{getAssetUrl(cdnPayRoot, ecWWWLang + '/js/common.js')}")

    block extra_js

    include ../components/analytics
