extends ../layouts/basic

block extra_head
    title Examples - Apache ECharts (incubating)
    script.
        var chartId = location.hash.slice(1);
        window.location ='./examples/index.html';
    link(rel="stylesheet", href="#{cdnThirdParty.perfectScrollbarCSS}")

block content
    nav(class='navbar navbar-default navbar-fixed-top')
        include ../components/nav

    .page-main
        #left-chart-nav
            ul

        #explore-container
            .chart-list-panel

        div(style="display:none") 点击查看详情

        include ../components/footer

block extra_js
    script(type='text/javascript', src='#{cdnThirdParty.jqueryLazyloadJS}')
    script(type='text/javascript').
        var GALLERY_PATH = '#{galleryPath}';
        var GALLERY_EDITOR_PATH = GALLERY_PATH + 'editor.html?c=';
        var GALLERY_VIEW_PATH = GALLERY_PATH + 'view.html?c=';
        var GALLERY_THUMB_PATH = GALLERY_PATH + 'data/thumb/';

    script(type='text/javascript', src='#{cdnPayRoot}/#{ecWWWLang}/js/config.js?_v_=#{homeVersion}')
    script(type='text/javascript', src='#{cdnPayRoot}/#{ecWWWLang}/js/chart-list.js?_v_=#{homeVersion}')
    script(type='text/javascript', src='#{cdnPayRoot}/#{ecWWWLang}/js/examples-nav.js?_v_=#{homeVersion}')

    script(type='text/javascript').
        document.getElementById('nav-examples').className = 'active';
