Please note that for most Javascript functions to perform without problem, you should specify id attribute of elements, for example, sidebar element can have
#sidebar
id attribute.
mustache/app/views/layouts/partials/_shared/sidebar.mustache
mustache/app/views/layouts/partials/_shared/sidebar/item.mustache
.menu-icon
class.
.menu-text
element,
but this isn't needed for deeper levels:
.sidebar-shortcuts-large
and
.sidebar-shortcuts-mini
which is displayed when sidebar is minimized (collapsed)
data-target
attribute which points to sidebar ID.
.sidebar-expand
button for sidebar in 2nd mobile view style.
data-target
attribute which points to sidebar ID.
data-icon1
and data-icon2
attributes to specify icons to use in collapsed/expanded state
.menu-text
element:
You can also include a tooltip:
$('.sidebar').ace_sidebar(); //or $('#my-specific-sidebar').ace_sidebar();
.sidebar
elements are initiliazed on page load.
$('.sidebar').ace_sidebar('toggleMenu'); $('.sidebar').ace_sidebar('toggleMenu', toggleButton); //if there is an optional toggleButton element, its icons will be flipped $('.sidebar').ace_sidebar('toggleMenu', false); //optional false value means don't save changes to cookies $('.sidebar').ace_sidebar('toggleMenu', [toggleButton , false/true ]); //optional second value means save or don't save changes to cookies
$('#my-sidebar').ace_sidebar('collapse'); $('#my-sidebar').ace_sidebar('collapse', toggleButton); //if there is an optional toggleButton element, its icons will be flipped
$('#sidebar').ace_sidebar('mobileToggle'); $('#sidebar').ace_sidebar('mobileShow'); $('#sidebar').ace_sidebar('mobileHide');
$('#my-sidebar').ace_sidebar('toggle', [sub, 300]); //first parameter is submenu to toggle and second is duration in milliseconds.
$('.sidebar').ace_sidebar_scroll({ //options here });By default all
.sidebar
elements have scrollbars enabled on page load
and activated when appropriate.
data-*
attributes.
scroll_to_active
scroll to active item on page loadinclude_shortcuts
include shortcut buttons in scroll areainclude_toggle
include toggle button in scroll area or notscroll_style
scrollbar style as described in custom scrollbars sectionmousewheel_lock
whether to lock mouse wheel on sidebar even if it hasn't scrollbars or notonly_if_fixed
used in 2nd approach onlysmooth_scroll
used in first approach only. Specify a number to enable smooth scrolling or false to disablereset
reset scrollbarsupdateStyle
updates scrollbars style class:
$('#my-sidebar').ace_sidebar_scroll('updateStyle', 'scroll-dark no-track'); //for example such update is done which switching to another skin in Ace's demo
$('.sidebar').ace_sidebar_hover({ //options here });By default all
.sidebar
elements have this feature enabled on page load
and activated when appropriate.
sub_hover_delay
time in milliseconds to hide a submenu after mouse leaves it. Default is 750sub_scroll_style
scrollbar style as described in custom scrollbars sectionreset
reset scrollbarsupdateStyle
updates submenu scrollbars style class:
$('#my-sidebar').ace_sidebar_hover('updateStyle', 'scroll-dark no-track'); //for example it can be done when switching to another skin dynamically
changeDir
changes scrollbars direction (left) for example if you are using RTL:
$('#my-sidebar').ace_sidebar_hover('changeDir', 'left');
@grid-float-breakpoint-max
variable
and recompiling LESS files.
.responsive
class to .sidebar
element.
.push_away
class to .sidebar
to push content when sidebar is shown:
data-auto-hide=true
attribute for sidebar to automatically hide when
user clicks outside of its area:
.responsive-min
class to .sidebar
element
and there should also be an invisible toggle button present, right before sidebar.
.sidebar-toggle.sidebar-expand
button, expands sidebar in mobile view:
(More info)
data-target
attribute which points to sidebar ID.
data-auto-hide=true
attribute for sidebar to automatically become minimized when
user clicks outside of its area:
.collapse.navbar-collapse
class
to .sidebar
element and have the correct toggle buttons inside navbar:
.navbar-header
) or inside it
and it should have data-target
attribute which points to sidebar's ID.
.sidebar
element.
Toggle sidebar
span.toggler-text
inside it and you can change
MENU text to something else by modifying
@toggler-text
variable inside assets/css/less/sidebar/old-toggle-button.less
and recompiling ace.less
.menu-toggler
element right before .sidebar
data-toggle
and data-target
attributes:
<button class="pull-right navbar-toggle collapsed" type="button" data-toggle="collapse" data-target=".sidebar"> <span class="sr-only">Toggle sidebar</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button>
.h-sidebar
class to .sidebar
and .h-navbar
to .navbar
element:
.hover
class to all LI elements, so that submenus are shown on mouse hover:
.no-gap
to horizontal menu to remove gap.
.lower-highlight
to move the highlight bar lower.
.h-navbar
to .navbar
to add shadow to it.
mustache/app/views/assets/scripts/top-menu.js
.no-margin-left
class to h1
header element or
add .no-margin
class to the .row
element which encloses content area!
.hover
class to each LI element
and also add .arrow
element before submenus.
@screen-hover-menu
variable inside
assets/css/less/variables.less
and recompile ace.less
or use CSS builder tool.
.compact
class to .sidebar
element:
@@screen-compact-menu
variable inside
assets/css/less/variables.less
and recompile ace.less
or use CSS builder tool.
.highlight
to LI elements:
.sidebar-fixed
class to .sidebar
element makes it fixed by default:
.menu-min
class to .sidebar
element
makes it minimized by default:
.sidebar
class and an ID attribute.
.main-content-inner
:
.page-content
should also
have .main-content
class and .footer
should be moved
after it:
//inside the function when ajax content is loaded //somehow get a reference to our newly clicked(selected) element's parent "LI" var new_active = $(this).parent(); //remove ".active" class from all (previously) ".active" elements $('.nav-list li.active').removeClass('active'); //add ".active" class to our newly selected item and all its parent "LI" elements new_active.addClass('active').parents('.nav-list li').addClass('active'); //you can also update breadcrumbs: var breadcrumb_items = []; //$(this) is a reference to our clicked/selected element $(this).parents('.nav-list li').each(function() { var link = $(this).find('> a'); var text = link.text(); var href = link.attr('href'); breadcrumb_items.push({'text': text, 'href': href}); }) //now we have a breadcrumbs list and can replace breadcrumbs area
//suppose we have a list of pages (associative array or other data structure) //$menu_list = ... //retrieved from database //or $menu_list = array( 'id or name of page 1' => array ( 'href' => '#link1', 'text' => 'item name or text', 'parent' => 'parent id or name' ) , 'id or name of page 2' => array ( 'href' => '#link2', 'text' => 'item name or text', 'parent' => 'parent id or name' ) , 'new-user' => array ( 'href' => 'user/create', 'text' => 'Add User', 'parent' => 'operations' ) ... ); //we somehow know the ID or tag or hash of the current page //perhapse from a database lookup or by simply checking its URL //for some pointers such as ID, file name, category name, etc ... $current_page = 'new-user'; $breadcrumbs = array();//let's create our breadcrumbs array as well //make_me should be a reference to current_item not a copy of it $mark_me = &$menu_list[$current_page]; $open = false; while(true) {//you can also use a recursive function instead of a loop $mark_me['active'] = true;//mark this as "active" if( $open ) $mark_me['open'] = true;//mark this as "open" $breadcrumbs[] = $mark_me; $parent_id = $mark_me['parent'];//see if it has a parent if( $parent_id == null || !isset($menu_list[$parent_id]) ) break;//if not, break $mark_me = &$menu_list[$parent_id];//set item's parent as the new "mark_me" and repeat $open = true;//parent elements should be marked as "open" too } foreach($menu_list as $id => $menu_item) { print('<li class="'); if( $menu_item['active'] ) print('active'); if( $menu_item['open'] ) print(' open'); print('">'); //something like <li class="active open"> will be printed //... //print other parts of menu item } //now we also have a list of breadcrumb items to print later
//suppose we have a list of pages (associative array or other data structure) //var menu_list = ... //retrieved from database //or var menu_list = { 'id or name of page 1' : { 'href' : '#link1', 'text' : 'item name or text', 'parent' : 'parent id or name' } , 'id or name of page 2' : { 'href' : '#link2', 'text' : 'item name or text', 'parent' : 'parent id or name' } , 'new-user' : { 'href' : 'user/create', 'text' : 'Add User', 'parent' : 'operations' } ... }; //we somehow know the ID or tag or hash of the current page //perhapse from a database lookup or by simply checking its URL //for some pointers such as ID, file name, category name, etc ... var current_page = 'new-user'; var breadcrumbs = [];//let's create our breadcrumbs array as well //make_me should be a reference to current_item not a copy of it var mark_me = menu_list[current_page]; var open = false; while(true) {//you can also use a recursive function instead of a loop mark_me['active'] = true;//mark this as "active" if( open ) mark_me['open'] = true;//mark this as "open" breadcrumbs.push(mark_me); var parent_id = mark_me['parent'];//see if it has a parent if( parent_id == null || !(parent_id in menu_list) ) break;//if not, break mark_me = menu_list[parent_id];//set item's parent as the new "mark_me" and repeat open = true;//parent elements should be marked as "open" too } var output = ''; for(var id in menu_list) if(menu_list.hasOwnProperty(id)) { var menu_item = menu_list[id]; output += '<li class="'; if( menu_item['active'] ) output += 'active'; if( menu_item['open'] ) output += ' open'; output += '">'; //something like <li class="active open"> will be printed //... //print other parts of menu item } console.log(output); //now we also have a list of breadcrumb items to print later
$mark_me = $menu_list[$current_page]
, when you modify $mark_me
and for example mark it as active,
changes are not reflected in
$menu_list[$current_page]
and therefore, when printing the $menu_list
list,
you won't have modified items.
$mark_me = &$menu_list[$current_page]
$mark_me
is a reference to $menu_list[$current_page]
and therefore