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


include mobmenu.html
header(class="hdr " + (config.hdrClassName ? config.hdrClassName : "hdr__white")).jsHdrBase
    .hdr__wrap.flexi.jsHdrLine
        button.hdr__burger(data-menumodal="#jsMenuModal")
            img(src="/img/menu.svg", alt="")
        a.hdr__logo(href="/")
            img(src="/img/logo-white.svg", alt="").hdr__logoimg.hdr__logo--white
            img(src="/img/logo.svg", alt="").hdr__logoimg.hdr__logo--black
        a.button.hdr__button(href="/download.cgi") 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
                    .dropmenu1__buttonwrap &nbsp;
                    .dropmenu__box.dropmenu__box--buttonin
                        a.dropmenu__redbutton(href="https://ignite.apache.org/docs/latest/") 
                            img(src="/img/menu/icon-red-rocket.svg", alt="")
                            span Quick Start Guide
                        ul.dropmenu__menu 
                            li 
                                a.dropmenu__iconitem(href="/resources.html")
                                    img(src="/img/menu/icon-resources.svg", alt="")
                                    span Resources
                            li
                                a.dropmenu__iconitem(href="/faq.html")
                                    img(src="/img/menu/icon-question.svg", alt="")
                                    span FAQ
                    .dropmenu__box
                        p.capstext
                            a(href="/use-cases.html").dropmenu__capslink USE CASES
                        ul.dropmenu__menu 
                            li 
                                a.dropmenu__iconitem(href="/use-cases/in-memory-cache.html")
                                    img(src="/img/menu/icon-folder.svg", alt="")
                                    span In-Memory Cache
                            li
                                a.dropmenu__iconitem(href="/use-cases/in-memory-data-grid.html")
                                    img(src="/img/menu/icon-folder.svg", alt="")
                                    span In-Memory Data Grid
                            li
                                a.dropmenu__iconitem(href="/use-cases/in-memory-database.html")
                                    img(src="/img/menu/icon-folder.svg", alt="")
                                    span In-Memory Database
                            li
                                a.dropmenu__iconitem(href="/use-cases/key-value-store.html")
                                    img(src="/img/menu/icon-folder.svg", alt="")
                                    span Key-Value Store
                    .dropmenu__box.no-border
                        ul.dropmenu__menu 
                            li 
                                a.dropmenu__iconitem(href="/use-cases/high-performance-computing.html")
                                    img(src="/img/menu/icon-folder.svg", alt="")
                                    span High-Performance Computing
                            li
                                a.dropmenu__iconitem(href="/use-cases/digital-integration-hub.html")
                                    img(src="/img/menu/icon-folder.svg", alt="")
                                    span Digital Integration Hub
                            li
                                a.dropmenu__iconitem(href="/use-cases/spark-acceleration.html")
                                    img(src="/img/menu/icon-folder.svg", alt="")
                                    span Spark Acceleration
                            li
                                a.dropmenu__iconitem(href="/use-cases/hadoop-acceleration.html")
                                    img(src="/img/menu/icon-folder.svg", alt="")
                                    span Hadoop Acceleration
                // /.dropmenu1__grid
                .panelmorelinkwrap.panelmorelinkwrap--end.container
                    a.panellink(href="/use-cases.html") View all
            // /.dropmenu__panel


            .dropmenu__panel(data-menupanel="features")
                .container.dropmenu2__grid
                    .dropmenu__box
                        .capstext MULTI-TIER STORAGE
                        ul.dropmenu__menu 
                            li 
                                a.dropmenu__iconitem(href="/arch/multi-tier-storage.html")
                                    img(src="/img/menu/icon-db.svg", alt="")
                                    span Multi-Tier Storage
                            li
                                a.dropmenu__iconitem(href="/arch/native-persistence.html")
                                    img(src="/img/menu/icon-db.svg", alt="")
                                    span Native Persistence
                    .dropmenu__box
                        .capstext ESSENTAIL Developer APIs
                        ul.dropmenu__menu 
                            li 
                                a.dropmenu__iconitem(href="/features/sql.html")
                                    img(src="/img/menu/icon-cube.svg", alt="")
                                    span Distributed SQL
                            li
                                a.dropmenu__iconitem(href="/features/key-value-apis.html")
                                    img(src="/img/menu/icon-cube.svg", alt="")
                                    span Key-Value APIs
                            li
                                a.dropmenu__iconitem(href="/features/acid-transactions.html")
                                    img(src="/img/menu/icon-cube.svg", alt="")
                                    span ACID Transactions
                    .dropmenu__box
                        .capstext High-Performance <br>Computing APIs
                        ul.dropmenu__menu 
                            li 
                                a.dropmenu__iconitem(href="/features/compute-apis.html")
                                    img(src="/img/menu/icon-cube.svg", alt="")
                                    span Compute APIs
                            li
                                a.dropmenu__iconitem(href="/features/service-apis.html")
                                    img(src="/img/menu/icon-cube.svg", alt="")
                                    span Services
                            li
                                a.dropmenu__iconitem(href="/features/machinelearning.html")
                                    img(src="/img/menu/icon-cube.svg", alt="")
                                    span Machine Learning
                    .dropmenu__box
                        .capstext Real-Streaming APIs
                        ul.dropmenu__menu 
                            li 
                                a.dropmenu__iconitem(href="/features/streaming.html")
                                    img(src="/img/menu/icon-cube.svg", alt="")
                                    span Real-Time Streaming APIs
                            li
                                a.dropmenu__iconitem(href="https://ignite.apache.org/docs/latest/messaging")
                                    img(src="/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="/img/menu/icon-cube.svg", alt="")
                                    span Continuous Queries
                // /.dropmenu2__grid
                .panelmorelinkwrap 
                    a.panellink(href="/features/") View all
            // /.dropmenu__panel-2


            .dropmenu__panel(data-menupanel="community")
                .container.dropmenu3__grid
                    .dropmenu__box
                        .capstext 
                            a(href="/community.html").dropmenu__capslink Project Info
                        ul.dropmenu__menu 
                            li 
                                a.dropmenu__iconitem(href="/community.html#story")
                                    img(src="/img/menu/icon-clip.svg", alt="")
                                    span Apache Ignite Story
                            li
                                a.dropmenu__iconitem(href="/community.html#community")
                                    img(src="/img/menu/icon-comment.svg", alt="")
                                    span Meet The Community
                    .dropmenu__box.no-border
                        .capstext &nbsp;
                        ul.dropmenu__menu
                            li
                                a.dropmenu__iconitem(href="/community.html#contributing")
                                    img(src="/img/menu/icon-puzzle.svg", alt="")
                                    span Start Contributing
                            li
                                a.dropmenu__iconitem(href="/community.html#faq")
                                    img(src="/img/menu/icon-question.svg", alt="")
                                    span Ask Questions
                    .dropmenu__box
                        .capstext 
                            a(href="/events.html").dropmenu__capslink Events
                        ul.dropmenu__menu 
                            li 
                                a.dropmenu__iconitem(href="/events.html#summit")
                                    img(src="/img/menu/icon-calendar.svg", alt="")
                                    span Apache Ignite Summit
                            li
                                a.dropmenu__iconitem(href="/events.html#meetups")
                                    img(src="/img/menu/icon-calendar.svg", alt="")
                                    span Meetups
                    .dropmenu__box.no-border
                        .capstext &nbsp;
                        ul.dropmenu__menu 
                            li
                                a.dropmenu__iconitem(href="/events.html#upcoming")
                                    img(src="/img/menu/icon-calendar.svg", alt="")
                                    span Upcoming Events
                            li
                                a.dropmenu__iconitem(href="/events.html#past")
                                    img(src="/img/menu/icon-calendar.svg", alt="")
                                    span Past Events
                // /.dropmenu3__grid
            // /.dropmenu__panel
        // /.dropmeu
.dropmenu__back


header.hdrfloat.hdr__white.jsHdrFloatBase

//- header.hdrfloat
//-     .hdr__wrap.flexi
//-         button.hdr__burger(data-menumodal="#jsMenuModal")
//-             img(src="/img/menu.svg", alt="")
//-         a.hdr__logo(href="/")
//-             img(src="/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")