Example of a scrolling vertical menu - B. Urs

by Bogdan Urs

by Abra Cadabra

HTML

<script src="http://underscorejs.org/underscore-min.js"></script>
<div class="navbar">
    <div class="navbar-inner" id="navbar-js-hook">
        <ul class="navbar-list">
            <li class="navbar-option">	<a href="#" class="subnav link-expanded navbar-main-link">User Setup</a>

                <ul class="navbar-list">
                    <li class="navbar-option">	<a href="#">Users</a>

                    </li>
                    <li class="navbar-option">	<a href="#">User Types</a>

                    </li>
                    <li class="navbar-option">	<a href="#">Vendors</a>

                    </li>
                    <li class="navbar-option">	<a href="#">Workgroups</a>

                    </li>
                    <li class="navbar-option">	<a href="#">Clients</a>

                    </li>
                    <li class="navbar-option">	<a href="#">Preferences</a>

                    </li>
                </ul>
            </li>
            <li class="navbar-option expanded">	<a href="#" class="subnav navbar-main-link">Asset Interface System</a>

                <ul class="navbar-list">
                    <li class="navbar-option">	<a href="#">Users</a>

                    </li>
                    <li class="navbar-option">	<a href="#">User Types</a>

                    </li>
                    <li class="navbar-option">	<a href="#">Vendors</a>

                    </li>
                    <li class="navbar-option">	<a href="#">Workgroups</a>

                    </li>
                    <li class="navbar-option">	<a href="#">Clients</a>

                    </li>
                    <li class="navbar-option">	<a href="#">Preferences</a>

                    </li>
                </ul>
            </li>
            <li class="navbar-option">	<a href="#" class="subnav navbar-main-link">Business Rules Linkage</a>

                <ul class="navbar-list">
                    <li class="navbar-option">	<a href="#">Users</a>

                 ...

CSS

@import url(http://fonts.googleapis.com/css?family=Open+Sans:400, 700);
@import url(http://fonts.googleapis.com/css?family=Lato:400, 700);
@import url(http://netdna.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.min.css);
html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video {
    margin:0;
    padding:0;
    border:0;
    outline:0;
    font-size:100%;
    font-weight:inherit;
    font-style:inherit;
    font-family:inherit;
    vertical-align:baseline
}
article, aside, details, figcaption, figure, footer, header, hgroup, nav, section, summary {
    display:block
}
* {
    -webkit-tap-highlight-color:rgba(0, 0, 0, 0);
    -webkit-text-size-adjust:100%;
    -ms-text-size-adjust:100%;
    -webkit-font-smoothing:antialiased
}
a {
    text-decoration:none
}
body {
    line-height:1
}
ol, ul {
    list-style-type:none
}
table {
    border-collapse:collapse;
    border-spacing:0
}
caption, th, td {
    text-align:left;
    font-weight:normal
}
input:not([type="checkbox"]), textarea {
    -webkit-appearance:none;
    -moz-appearance:none
}
input, textarea {
    -webkit-border-radius:0;
    -moz-border-radius:0
}
button, input[type="button"], input[type="submit"] {
    background:none
}
:required {
    -webkit-box-shadow:none;
    -moz-box-shadow:none;
    -o-box-shadow:none;
    -ms-box-shadow:none;
    box-shadow:none
}
em, i {
    font-style:italic
}
strong, b {
    font-weight:bold
}
u {
    text-decoration:underline
}
pre, code {
    font-family:Monaco, Courier, monospace
}
pre {
    white-space:pre;
    white-space:pre-wrap;
   ...

JavaScript

var UI_Utils = (function ($) {

    var _selectedElement;

    var _checkIfMenuSelected = _.once(function (e) {
        _selectedElement = $(e.delegateTarget).find('.selected').first();
    });

    var toggleMainMenuLinks = function (e, elem) {
        var menuElem = elem.parent();

        _checkIfMenuSelected(e);
        if (_selectedElement.length === 0) {
            _selectedElement = menuElem.addClass('selected');
        } else {
            _selectedElement.removeClass('selected');
            _selectedElement = menuElem.addClass('selected');
        }
    };

    var toggleMainMenuTabs = function (elem) {
        elem.parent().toggleClass('expanded');
        elem.siblings('ul').find('.selected').first().removeClass('selected');
    };

    var mainMenuTabsHandler = function (e) {
        e.preventDefault();
        var self = $(this);

        if (self.hasClass('subnav')) {
            toggleMainMenuTabs(self);
        } else {
            toggleMainMenuLinks(e, self);
        }
    };

    return {
        toggleMainMenuLinks: toggleMainMenuLinks,
        toggleMainMenuTabs: toggleMainMenuTabs,
        mainMenuTabsHandler: mainMenuTabsHandler
    };

})(jQuery);


// the DOM ready
$(document).ready(function () {
    $("#navbar-js-hook").on('click', 'a', UI_Utils.mainMenuTabsHandler);
});