doctype html
html
    head
        meta(charset='utf-8')
        meta(http-equiv='X-UA-Compatible', content='IE=edge')
        meta(name='viewport', content='width=device-width, initial-scale=1')

        link(rel='stylesheet', type='text/css', href='#{cdnThirdParty.bootstrapCSS}')
        link(rel='shortcut icon', href='#{cdnPayRoot}/images/favicon.png?_v_=#{cdnPayVersion}')
        // 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='#{cdnPayRoot}/stylesheets/main.css?_v_=#{buildVersion}')

        title Examples - Apache ECharts

        script(type="text/javascript").
            window.EC_DEMO_LANG = '#{lang}';

    body
        #apache-banner
            .txt
                if lang == 'en'
                    p Apache ECharts is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator.
                    p We are working on redirecting this Website to <a href="https://echarts.apache.org" target="_blank">https://echarts.apache.org</a>. You may visit our new official Website now for the latest information.
                else
                    p Apache ECharts 是一个正在由 Apache 孵化器赞助的 Apache 开源基金会孵化的项目。
                    p 我们正在处理将本站跳转到 <a href="https://echarts.apache.org" target="_blank">https://echarts.apache.org</a> 的迁移工作。您可以现在就前往我们的 Apache 官网以获取最新版的网站信息。
            a.btn(href="https://echarts.apache.org", target="_blank", onclick="logApache()")
                if lang == '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(id="a2", href="https://echarts.apache.org/zh/index.html") latest website.]
            else
                span 返回 #[a(id="a1", href="https://echarts.apache.org/zh/index.html") 最新的官网]

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


        block content

        script(type='text/javascript', src='#{cdnThirdParty.jquery_1_11_3}')
        script(type='text/javascript', src='#{cdnThirdParty.bootstrapJS}')
        script(type='text/javascript', src='#{cdnThirdParty.lodash}')
        script(type='text/javascript', src='#{cdnPayRoot}/javascripts/common.js?_v_=#{buildVersion}')
        script(type='text/javascript').
            function changeLang(lang) {
                if (lang === 'en') {
                    if (location.hostname !== 'echarts.apache.org') {
                        var re = new RegExp('/zh/', 'g');
                        var pathname = location.pathname.replace(re, '/en/');

                        var url = 'https://echarts.apache.org' + pathname
                            + location.search + location.hash;
                        location.href = url;
                        return;
                    }
                }
                location.href = location.href.replace(
                    new RegExp('/(zh|en)/', 'g'), '/' + lang + '/'
                );
            }

            window.EC_EXAMPLE_IS_GL = (function () {
                var urlParams = (location.search || '').replace(/^\?/, '').split('&');
                for (var i = 0; i < urlParams.length; i++) {
                    var kv = urlParams[i].split('=');
                    if (kv[0] === 'gl' && kv[1] && kv[1] !== '0') {
                        return true;
                    }
                }
                return false;
            })();

            // ROOT_PATH is also used in example js. So we also use #{cdnPayRoot}.
            // But echarts-gl do not support CORS yet, still use same origin.
            window.ROOT_PATH = EC_EXAMPLE_IS_GL ? '#{host}' : '#{cdnPayRoot}';
            window.CDN_PAY_ROOT_PATH = '#{cdnPayRoot}';
            window.CDN_PAY_VERSION = '#{cdnPayVersion}';
            window.CDN_THIRD_PARTY_ECHARTS_GL = '#{cdnThirdParty.echartsGLMinJS}'

        block extra_js

        include ../../../echarts-www/_jade/components/analytics
