mixin nav(hostParam, cdnPayRootParam, cdnPayVersionParam)
    div(class='container-fluid')
        div(class='navbar-header')
            button(type="button", class="navbar-toggle collapsed", data-toggle="collapse", data-target="#navbar-collapse", aria-expanded="false")
                span.sr-only Toggle navigation
                span.icon-bar
                span.icon-bar
                span.icon-bar
            a(class='navbar-brand' href="#{hostParam}/zh/index.html")
                img(class="navbar-logo", src="#{cdnPayRootParam}/zh/images/logo.png?_v_=#{cdnPayVersionParam}", alt="echarts logo")
        div(class="collapse navbar-collapse", id="navbar-collapse")
            ul(class='nav navbar-nav navbar-left')
                li#nav-index
                    a(href='#{hostParam}/zh/index.html') 首页
                li#nav-doc.dropdown
                    a(href='#', class="dropdown-toggle", data-toggle="dropdown") 文档
                        b.caret
                    ul.dropdown-menu
                        li
                            a(href="#{hostParam}/zh/feature.html") 特性
                        li
                            a(href="#{hostParam}/zh/tutorial.html") 教程
                        li
                            a(href="#{hostParam}/zh/api.html") API
                        li
                            a(href="#{hostParam}/zh/option.html") 配置项手册
                        li
                            a(href="#{hostParam}/zh/changelog.html") 版本记录
                        li
                            a(href='#{hostParam}/zh/faq.html') 常见问题
                        li
                            a(href='#{hostParam}/zh/tutorial.html#ECharts%205%20升级指南') v5 升级指南
                                span.new new
                li#nav-download.dropdown
                    a(href='#', class="dropdown-toggle", data-toggle="dropdown") 下载
                        b.caret
                    ul.dropdown-menu
                        li
                            a(href="#{hostParam}/zh/download.html") 下载
                        li
                            a(href="#{hostParam}/zh/download-theme.html") 主题下载
                        li
                            a(href="#{hostParam}/zh/download-extension.html") 扩展下载
                li#nav-examples
                    a(href='#{hostParam}/examples/zh/index.html') 示例
                li#nav-resources
                    a(href='#', class="dropdown-toggle", data-toggle="dropdown") 资源
                        b.caret
                    ul.dropdown-menu
                        li
                            a(href="#{hostParam}/zh/spreadsheet.html") 表格工具
                        //- li
                        //-     a(href="https://ecomfe.github.io/echarts-map-tool/") 地图数据在线工具
                        li
                            a(href="#{hostParam}/zh/theme-builder.html") 主题构建工具
                        li
                            a(href="#{hostParam}/zh/cheat-sheet.html") 术语速查手册
                        li
                            a(href="#{hostParam}/zh/resources.html") 更多资源
                li#nav-contribute
                    a.dropdown-toggle(href='#', data-toggle='dropdown')
                        | 社区
                        b.caret
                    ul.dropdown-menu
                        li
                            a(href='#{hostParam}/zh/events.html') 活动
                        li
                            a(href='#{hostParam}/zh/committers.html') 贡献者列表
                        li
                            a(href='#{hostParam}/zh/maillist.html') 邮件列表
                        li
                            a(href='#{hostParam}/zh/contributing.html') 如何贡献
                        li
                            a(href='#{hostParam}/zh/dependencies.html') 依赖项
                        li
                            a(href='#{hostParam}/zh/coding-standard.html') 代码规范
                        li
                            a(href='https://github.com/apache/echarts', target='_blank') 源码（GitHub）
                                include ./svg/external-link
                        li
                            a(href='https://github.com/apache/echarts/issues', target='_blank') Issues（GitHub）
                                include ./svg/external-link
                li#nav-others
                    a(href='#', class="dropdown-toggle", data-toggle="dropdown") ASF
                        b.caret
                    ul.dropdown-menu
                        li
                            a(href='https://www.apache.org/', target='_blank') Apache Software Foundation
                                include ./svg/external-link
                        li
                            a(href='#{hostParam}/zh/security.html') 安全
                        li
                            a(href='https://www.apache.org/licenses/', target='_blank') 版权
                                include ./svg/external-link
                        li
                            a(href='https://www.apache.org/events/current-event', target='_blank') 活动
                                include ./svg/external-link
                        li
                            a(href='https://www.apache.org/foundation/sponsorship.html', target='_blank') 捐赠
                                include ./svg/external-link
                        li
                            a(href='https://www.apache.org/foundation/thanks.html', target='_blank') 鸣谢
                                include ./svg/external-link

            ul(class='nav navbar-nav navbar-right')
                li#nav-homeen
                    a(href='javascript:;', onclick="changeLang('en')") EN
                //- li#nav-github
                //-     a(href='https://github.com/apache/incubator-echarts', target='_blank')
                //-         include ./svg/github
                //-         +svgGithub('#333')
                //- li#nav-apache
                //-     a(href="https://www.apache.org/" target="_blank")
                //-         img(src="#{cdnPayRoot}/#{ecWWWLang}/images/asf_logo.png?_v_=#{cdnPayVersion}")
