-
diff --git a/awx/ui/static/js/app.js b/awx/ui/static/js/app.js index 0a8801d4b7..b8a2108c23 100644 --- a/awx/ui/static/js/app.js +++ b/awx/ui/static/js/app.js @@ -460,6 +460,11 @@ angular.module('Tower', [ $(this).removeClass('active'); }); $('#ansible-main-menu #' + base).addClass('active'); + // Apply to mobile menu as well + $('#ansible-mobile-menu a').each(function() { + $(this).removeClass('active'); + }); + $('#ansible-mobile-menu a[href="#' + base + '"]').addClass('active'); } $rootScope.browser = detectBrowser(); diff --git a/awx/ui/static/less/ansible-ui.less b/awx/ui/static/less/ansible-ui.less index 739776f10b..34924eb9d6 100644 --- a/awx/ui/static/less/ansible-ui.less +++ b/awx/ui/static/less/ansible-ui.less @@ -59,6 +59,7 @@ @import "stdout.less"; @import "lists.less"; @import "new-dashboard.less"; +@import "jPushMenu.less"; /* Bootstrap fix that's causing a right margin to appear diff --git a/awx/ui/static/less/jPushMenu.less b/awx/ui/static/less/jPushMenu.less new file mode 100644 index 0000000000..975d345b09 --- /dev/null +++ b/awx/ui/static/less/jPushMenu.less @@ -0,0 +1,176 @@ +/********************************************* + * Copyright (c) 2014 AnsibleWorks, Inc. + * + * jPushMenu.less + * + * Custom styles for slideout menu + * + */ +.cbp-spmenu { + background: #E8E8E8; + position: fixed; +} + +.cbp-spmenu h3 { + color: @white; + font-size: 14px; + padding: 15px 10px 15px 10px; + margin: 0; + font-weight: 600; + background: @grey; +} + +.cbp-spmenu a { + display: block; + color: @grey-txt; + font-size: 1.1em; + font-weight: 300; +} + +.cbp-spmenu a:hover { + background: #D8D8D8; + color: @black; +} + +.cbp-spmenu a.active { + background: #E8E8E8; + color: @black; + font-weight: 600; +} + +/* Orientation-dependent styles for the content of the menu */ + +.cbp-spmenu-vertical { + width: 240px; + height: 100%; + top: 0; + z-index: 1100; + overflow-y:auto; +} + +.cbp-spmenu-vertical a { + border-bottom: 1px solid #D8D8D8; + padding: 10px 10px 10px 20px; +} + +.cbp-spmenu-horizontal { + width: 100%; + height: 150px; + left: 0; + z-index: 1000; + overflow: hidden; +} + +.cbp-spmenu-horizontal h3 { + height: 100%; + width: 20%; + float: left; +} + +.cbp-spmenu-horizontal a { + float: left; + width: 20%; + padding: 0.8em; + border-left: 1px solid #258ecd; +} + +/* Vertical menu that slides from the left or right */ + +.cbp-spmenu-left { + left: -240px; +} + +.cbp-spmenu-right { + right: -240px; +} + +.cbp-spmenu-left.cbp-spmenu-open { + left: 0px; +} + +.cbp-spmenu-right.cbp-spmenu-open { + right: 0px; +} + +/* Horizontal menu that slides from the top or bottom */ + +.cbp-spmenu-top { + top: -150px; +} + +.cbp-spmenu-bottom { + bottom: -150px; +} + +.cbp-spmenu-top.cbp-spmenu-open { + top: 0px; +} + +.cbp-spmenu-bottom.cbp-spmenu-open { + bottom: 0px; +} + +/* Push classes applied to the body */ + +.cbp-spmenu-push { + overflow-x: hidden; + position: relative; + left: 0; +} + +.cbp-spmenu-push-toright { + left: 240px; +} + +.cbp-spmenu-push-toleft { + left: -240px; +} + +/* Transitions */ + +.cbp-spmenu, +.cbp-spmenu-push { + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +/* Example media queries */ + +@media screen and (max-width: 55.1875em){ + + .cbp-spmenu-horizontal { + font-size: 75%; + height: 110px; + } + + .cbp-spmenu-top { + top: -110px; + } + + .cbp-spmenu-bottom { + bottom: -110px; + } + +} + +@media screen and (max-height: 26.375em){ + + .cbp-spmenu-vertical { + font-size: 90%; + width: 190px; + } + + .cbp-spmenu-left, + .cbp-spmenu-push-toleft { + left: -190px; + } + + .cbp-spmenu-right { + right: -190px; + } + + .cbp-spmenu-push-toright { + left: 190px; + } +} \ No newline at end of file diff --git a/awx/ui/static/lib/jPushMenu/jPushMenu.css b/awx/ui/static/lib/jPushMenu/jPushMenu.css new file mode 100644 index 0000000000..2dfc6327e8 --- /dev/null +++ b/awx/ui/static/lib/jPushMenu/jPushMenu.css @@ -0,0 +1,167 @@ +/* General styles for all menus */ + +.cbp-spmenu { + background: #47a3da; + position: fixed; +} + +.cbp-spmenu h3 { + color: #afdefa; + font-size: 1.9em; + padding: 20px; + margin: 0; + font-weight: 300; + background: #0d77b6; +} + +.cbp-spmenu a { + display: block; + color: #fff; + font-size: 1.1em; + font-weight: 300; +} + +.cbp-spmenu a:hover { + background: #258ecd; +} + +.cbp-spmenu a:active { + background: #afdefa; + color: #47a3da; +} + +/* Orientation-dependent styles for the content of the menu */ + +.cbp-spmenu-vertical { + width: 240px; + height: 100%; + top: 0; + z-index: 1100; +} + +.cbp-spmenu-vertical a { + border-bottom: 1px solid #258ecd; + padding: 1em; +} + +.cbp-spmenu-horizontal { + width: 100%; + height: 150px; + left: 0; + z-index: 1000; + overflow: hidden; +} + +.cbp-spmenu-horizontal h3 { + height: 100%; + width: 20%; + float: left; +} + +.cbp-spmenu-horizontal a { + float: left; + width: 20%; + padding: 0.8em; + border-left: 1px solid #258ecd; +} + +/* Vertical menu that slides from the left or right */ + +.cbp-spmenu-left { + left: -240px; +} + +.cbp-spmenu-right { + right: -240px; +} + +.cbp-spmenu-left.cbp-spmenu-open { + left: 0px; +} + +.cbp-spmenu-right.cbp-spmenu-open { + right: 0px; +} + +/* Horizontal menu that slides from the top or bottom */ + +.cbp-spmenu-top { + top: -150px; +} + +.cbp-spmenu-bottom { + bottom: -150px; +} + +.cbp-spmenu-top.cbp-spmenu-open { + top: 0px; +} + +.cbp-spmenu-bottom.cbp-spmenu-open { + bottom: 0px; +} + +/* Push classes applied to the body */ + +.cbp-spmenu-push { + overflow-x: hidden; + position: relative; + left: 0; +} + +.cbp-spmenu-push-toright { + left: 240px; +} + +.cbp-spmenu-push-toleft { + left: -240px; +} + +/* Transitions */ + +.cbp-spmenu, +.cbp-spmenu-push { + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +/* Example media queries */ + +@media screen and (max-width: 55.1875em){ + + .cbp-spmenu-horizontal { + font-size: 75%; + height: 110px; + } + + .cbp-spmenu-top { + top: -110px; + } + + .cbp-spmenu-bottom { + bottom: -110px; + } + +} + +@media screen and (max-height: 26.375em){ + + .cbp-spmenu-vertical { + font-size: 90%; + width: 190px; + } + + .cbp-spmenu-left, + .cbp-spmenu-push-toleft { + left: -190px; + } + + .cbp-spmenu-right { + right: -190px; + } + + .cbp-spmenu-push-toright { + left: 190px; + } +} \ No newline at end of file diff --git a/awx/ui/static/lib/jPushMenu/jPushMenu.js b/awx/ui/static/lib/jPushMenu/jPushMenu.js new file mode 100644 index 0000000000..c21bb21f6b --- /dev/null +++ b/awx/ui/static/lib/jPushMenu/jPushMenu.js @@ -0,0 +1,99 @@ +/*! + * jPushMenu.js + * 1.1.1 + * @author: takien + * http://takien.com + * Original version (pure JS) is created by Mary Lou http://tympanus.net/ + */ + +(function($) { + $.fn.jPushMenu = function(customOptions) { + var jPushMenu, + o = $.extend({}, $.fn.jPushMenu.defaultOptions, customOptions); + + /* add class to the body.*/ + + $('body').addClass(o.bodyClass); + $(this).addClass('jPushMenuBtn'); + $(this).click(function() { + var target = '', + push_direction = ''; + + if($(this).is('.'+o.showLeftClass)) { + target = '.cbp-spmenu-left'; + push_direction = 'toright'; + } + else if($(this).is('.'+o.showRightClass)) { + target = '.cbp-spmenu-right'; + push_direction = 'toleft'; + } + else if($(this).is('.'+o.showTopClass)) { + target = '.cbp-spmenu-top'; + } + else if($(this).is('.'+o.showBottomClass)) { + target = '.cbp-spmenu-bottom'; + } + + + $(this).toggleClass(o.activeClass); + $(target).toggleClass(o.menuOpenClass); + + if ($(this).is('.'+o.pushBodyClass)) { + $('body').toggleClass( 'cbp-spmenu-push-'+push_direction ); + } + + /* disable all other button*/ + $('.jPushMenuBtn').not($(this)).toggleClass('disabled'); + + return false; + }); + jPushMenu = { + close: function () { + $('.jPushMenuBtn,body,.cbp-spmenu').removeClass('disabled active cbp-spmenu-open cbp-spmenu-push-toleft cbp-spmenu-push-toright'); + } + }; + + if (o.closeOnClickInside) { + $(document).click(function() { + jPushMenu.close(); + }); + + $('.cbp-spmenu,.toggle-menu').click(function(e){ + e.stopPropagation(); + }); + } + + if (o.closeOnClickOutside) { + $(document).click(function() { + jPushMenu.close(); + }); + + $('.cbp-spmenu,.toggle-menu').click(function(e){ + e.stopPropagation(); + }); + } + + // On Click Link + if (o.closeOnClickLink) { + $('.cbp-spmenu a').on('click',function(){ + jPushMenu.close(); + }); + } + }; + /* in case you want to customize class name, + * do not directly edit here, use function parameter when call jPushMenu. + */ + $.fn.jPushMenu.defaultOptions = { + bodyClass : 'cbp-spmenu-push', + activeClass : 'menu-active', + showLeftClass : 'menu-left', + showRightClass : 'menu-right', + showTopClass : 'menu-top', + showBottomClass : 'menu-bottom', + menuOpenClass : 'cbp-spmenu-open', + pushBodyClass : 'push-body', + closeOnClickOutside: true, + closeOnClickInside: true, + closeOnClickLink: true + }; +})(jQuery); \ No newline at end of file diff --git a/awx/ui/templates/ui/index.html b/awx/ui/templates/ui/index.html index bd975d27f0..f52697a817 100644 --- a/awx/ui/templates/ui/index.html +++ b/awx/ui/templates/ui/index.html @@ -171,12 +171,30 @@
+ + +