mixin menuItem(link, text, isExpClass = "")
    if global.pageHref == link
        li 
            a(href="/" + link, class="hdrmenu__current " + (isExpClass ? "hdrmenu--expanded":""), data-panel=isExpClass) #{text}
    else
        li 
            a(href="/" + link, class=(isExpClass ? "hdrmenu--expanded":""), data-panel=isExpClass) #{text}


include mobmenu.html
header(class="hdr " + (config.hdrClassName ? config.hdrClassName : "hdr__white"))
    .hdr__wrap.flexi
        button.hdr__burger(data-menumodal="#jsMenuModal")
            img(src="/public/img/menu.svg", alt="")
        a.hdr__logo(href="/")
            img(src="/public/img/logo-white.svg", alt="").hdr__logoimg.hdr__logo--white
            img(src="/public/img/logo.svg", alt="").hdr__logoimg.hdr__logo--black
        a.button.hdr__button(href="/download.html") Download Ignite 2.11 
        nav.hdrmenu
            ul.flexi
                +menuItem("", "Get started", "getStarted")
                +menuItem("features", "Features", "features")
                +menuItem("community.html", "Community", "community")
                +menuItem("use-cases/provenusecases.html", "Powered by")
                +menuItem("//ignite.apache.org/docs/latest/", "Docs")
        .dropmenu
            .dropmenu__panel(data-menupanel="getStarted")
                .container.dropmenu1__grid
                    .dropmenu__box.dropmenu--left
                        ul.dropmenu__menu 
                            li 
                                a.dropmenu__iconitem(href="/resources.html")
                                    img(src="/public/img/menu/icon-resources.svg", alt="")
                                    span Resources
                            li
                                a.dropmenu__iconitem(href="/faq.html")
                                    img(src="/public/img/menu/icon-question.svg", alt="")
                                    span FAQ
                    .dropmenu1__center
                        .dropmenu__box
                            p.capstext USE CASES
                            ul.dropmenu__menu 
                                li 
                                    a.dropmenu__iconitem(href="/use-cases/in-memory-cache.html")
                                        img(src="/public/img/menu/icon-folder.svg", alt="")
                                        span In-Memory Cache
                                li
                                    a.dropmenu__iconitem(href="/use-cases/in-memory-data-grid.html")
                                        img(src="/public/img/menu/icon-folder.svg", alt="")
                                        span In-Memory Data Grid
                                li
                                    a.dropmenu__iconitem(href="/use-cases/in-memory-database.html")
                                        img(src="/public/img/menu/icon-folder.svg", alt="")
                                        span In-Memory Database
                                li
                                    a.dropmenu__iconitem(href="/use-cases/key-value-store.html")
                                        img(src="/public/img/menu/icon-folder.svg", alt="")
                                        span Key-Value Store
                        .dropmenu__box
                            ul.dropmenu__menu 
                                li 
                                    a.dropmenu__iconitem(href="/use-cases/high-performance-computing.html")
                                        img(src="/public/img/menu/icon-folder.svg", alt="")
                                        span High-Performance Computing
                                li
                                    a.dropmenu__iconitem(href="/use-cases/digital-integration-hub.html")
                                        img(src="/public/img/menu/icon-folder.svg", alt="")
                                        span Digital Integration Hub
                                li
                                    a.dropmenu__iconitem(href="/use-cases/spark-acceleration.html")
                                        img(src="/public/img/menu/icon-folder.svg", alt="")
                                        span Spark Acceleration
                                li
                                    a.dropmenu__iconitem(href="/use-cases/hadoop-acceleration.html")
                                        img(src="/public/img/menu/icon-folder.svg", alt="")
                                        span Hadoop Acceleration
                    .dropmenu1__right
                        a.dropmenu__redbutton(href="https://ignite.apache.org/docs/latest/") 
                            img(src="/public/img/menu/icon-red-rocket.svg", alt="")
                            span Quick Start Guide
                // /.dropmenu1__grid
            // /.dropmenu__panel


            .dropmenu__panel(data-menupanel="features")
                .container.dropmenu2__grid
                    .dropmenu2__col.dropmenu__box
                        .capstext Distributed <br>Multi-Tiered Storage
                        ul.dropmenu__menu 
                            li 
                                a.dropmenu__iconitem(href="/arch/multi-tier-storage.html")
                                    img(src="/public/img/menu/icon-db.svg", alt="")
                                    span Multi-Tier Storage
                            li
                                a.dropmenu__iconitem(href="/arch/native-persistence.html")
                                    img(src="/public/img/menu/icon-db.svg", alt="")
                                    span Native Persistence
                    .dropmenu2__col.dropmenu__box
                        .capstext Essentail Developer <br>APIs
                        ul.dropmenu__menu 
                            li 
                                a.dropmenu__iconitem(href="/features/sql.html")
                                    img(src="/public/img/menu/icon-cube.svg", alt="")
                                    span Distributed SQL
                            li
                                a.dropmenu__iconitem(href="/features/distributed-key-value-store.html")
                                    img(src="/public/img/menu/icon-cube.svg", alt="")
                                    span Key-Value APIs
                            li
                                a.dropmenu__iconitem(href="/features/acid-transactions.html")
                                    img(src="/public/img/menu/icon-cube.svg", alt="")
                                    span ACID Transactions
                    .dropmenu2__col.dropmenu__box
                        .capstext High-Performance <br>Computing APIs
                        ul.dropmenu__menu 
                            li 
                                a.dropmenu__iconitem(href="/features/compute-apis.html")
                                    img(src="/public/img/menu/icon-cube.svg", alt="")
                                    span Compute APIs
                            li
                                a.dropmenu__iconitem(href="/features/servicegrid.html")
                                    img(src="/public/img/menu/icon-cube.svg", alt="")
                                    span Services
                            li
                                a.dropmenu__iconitem(href="/features/machinelearning.html")
                                    img(src="/public/img/menu/icon-cube.svg", alt="")
                                    span Machine Learning
                    .dropmenu2__col.dropmenu__box
                        .capstext Real Streaming APIs
                        ul.dropmenu__menu 
                            li 
                                a.dropmenu__iconitem(href="/features/streaming.html")
                                    img(src="/public/img/menu/icon-cube.svg", alt="")
                                    span Streaming
                            li
                                a.dropmenu__iconitem(href="https://ignite.apache.org/docs/latest/messaging")
                                    img(src="/public/img/menu/icon-cube.svg", alt="")
                                    span Messaging
                            li
                                a.dropmenu__iconitem(href="https://ignite.apache.org/docs/latest/key-value-api/continuous-queries")
                                    img(src="/public/img/menu/icon-cube.svg", alt="")
                                    span Continuous Queries
                    .dropmenu1__right.dropmenu2__col
                        a.dropmenu__redbutton(href="https://ignite.apache.org/docs/latest/") 
                            img(src="/public/img/menu/icon-red-rocket.svg", alt="")
                            span Quick Start Guide
                // /.dropmenu2__grid
                .panelmorelinkwrap 
                    a.panellink(href="/features/") View all
            // /.dropmenu__panel-2


            .dropmenu__panel(data-menupanel="community")
                .container.dropmenu1__grid.dropmenu3__grid
                    .dropmenu__box.dropmenu--left.dropmenu3--left
                        ul.dropmenu__menu 
                            li 
                                a.dropmenu__iconitem(href="/")
                                    img(src="/public/img/menu/icon-clip.svg", alt="")
                                    span Apache Ignite Story
                            li
                                a.dropmenu__iconitem(href="/community.html")
                                    img(src="/public/img/menu/icon-comment.svg", alt="")
                                    span Meet The Community
                            li 
                                a.dropmenu__iconitem(href="/community.html")
                                    img(src="/public/img/menu/icon-puzzle.svg", alt="")
                                    span Start Contributing
                            li
                                a.dropmenu__iconitem(href="/faq.html")
                                    img(src="/public/img/menu/icon-question.svg", alt="")
                                    span Ask A Question
                    .dropmenu1__center
                        .dropmenu__box
                            p.capstext Events
                            ul.dropmenu__menu 
                                li 
                                    a.dropmenu__iconitem(href="/events.html#summit")
                                        img(src="/public/img/menu/icon-calendar.svg", alt="")
                                        span Apache Ignite Summit
                                li
                                    a.dropmenu__iconitem(href="/events.html#meetups")
                                        img(src="/public/img/menu/icon-calendar.svg", alt="")
                                        span Meetups
                                
                        .dropmenu__box
                            ul.dropmenu__menu 
                                li
                                    a.dropmenu__iconitem(href="/events.html#upcoming")
                                        img(src="/public/img/menu/icon-calendar.svg", alt="")
                                        span Upcoming Events
                                li
                                    a.dropmenu__iconitem(href="/events.html#past")
                                        img(src="/public/img/menu/icon-calendar.svg", alt="")
                                        span Past Events
                    .dropmenu1__right
                        a.dropmenu__redbutton(href="https://ignite.apache.org/docs/latest/") 
                            img(src="/public/img/menu/icon-red-rocket.svg", alt="")
                            span Quick Start Guide
                // /.dropmenu1__grid
            // /.dropmenu__panel
        // /.dropmeu
.dropmenu__back


//- header.hdrfloat
//-     .hdr__wrap.flexi
//-         button.hdr__burger(data-menumodal="#jsMenuModal")
//-             img(src="/public/img/menu.svg", alt="")
//-         a.hdr__logo(href="/")
//-             img(src="/public/img/logo.svg", alt="").hdr__logoimg
//-         a.button.hdr__button(href="/download.html") Download Ignite 2.11 
//-         nav.hdrmenu
//-             ul.flexi
//-                 +menuItem("", "Get started")
//-                 +menuItem("features", "Features")
//-                 +menuItem("community.html", "Community")
//-                 +menuItem("use-cases/provenusecases.html", "Powered by")
//-                 +menuItem("docs.html", "Docs")