Browse Source

HUE-1535 [core] Restructure top bar

New look of the top bar
Enrico Berti 12 năm trước cách đây
mục cha
commit
beb9a9a891
100 tập tin đã thay đổi với 576 bổ sung272 xóa
  1. 4 16
      apps/about/src/about/templates/admin_wizard.mako
  2. 40 0
      apps/about/src/about/templates/header.mako
  3. 2 0
      apps/beeswax/src/beeswax/templates/choose_delimiter.mako
  4. 2 1
      apps/beeswax/src/beeswax/templates/choose_file.mako
  5. 2 2
      apps/beeswax/src/beeswax/templates/configuration.mako
  6. 2 1
      apps/beeswax/src/beeswax/templates/create_database.mako
  7. 2 0
      apps/beeswax/src/beeswax/templates/create_table_manually.mako
  8. 2 0
      apps/beeswax/src/beeswax/templates/define_columns.mako
  9. 2 2
      apps/beeswax/src/beeswax/templates/execute.mako
  10. 2 2
      apps/beeswax/src/beeswax/templates/explain.mako
  11. 45 11
      apps/beeswax/src/beeswax/templates/layout.mako
  12. 2 2
      apps/beeswax/src/beeswax/templates/list_designs.mako
  13. 2 2
      apps/beeswax/src/beeswax/templates/list_history.mako
  14. 2 2
      apps/beeswax/src/beeswax/templates/list_trashed_designs.mako
  15. 2 2
      apps/beeswax/src/beeswax/templates/my_queries.mako
  16. 2 2
      apps/beeswax/src/beeswax/templates/parameterization.mako
  17. 2 2
      apps/beeswax/src/beeswax/templates/save_results.mako
  18. 2 2
      apps/beeswax/src/beeswax/templates/watch_results.mako
  19. 2 2
      apps/beeswax/src/beeswax/templates/watch_wait.mako
  20. 3 2
      apps/filebrowser/src/filebrowser/templates/display.mako
  21. 2 2
      apps/filebrowser/src/filebrowser/templates/edit.mako
  22. 22 0
      apps/filebrowser/src/filebrowser/templates/fb_components.mako
  23. 2 3
      apps/filebrowser/src/filebrowser/templates/listdir.mako
  24. 19 2
      apps/hbase/src/hbase/templates/app.mako
  25. 4 3
      apps/jobbrowser/src/jobbrowser/templates/attempt.mako
  26. 5 3
      apps/jobbrowser/src/jobbrowser/templates/attempt_logs.mako
  27. 4 3
      apps/jobbrowser/src/jobbrowser/templates/job.mako
  28. 3 3
      apps/jobbrowser/src/jobbrowser/templates/job_attempt_logs.mako
  29. 20 0
      apps/jobbrowser/src/jobbrowser/templates/jobbrowser_components.mako
  30. 3 2
      apps/jobbrowser/src/jobbrowser/templates/jobs.mako
  31. 4 3
      apps/jobbrowser/src/jobbrowser/templates/task.mako
  32. 2 1
      apps/jobbrowser/src/jobbrowser/templates/tasks.mako
  33. 14 0
      apps/jobbrowser/src/jobbrowser/templates/tasktracker.mako
  34. 14 2
      apps/jobbrowser/src/jobbrowser/templates/tasktrackers.mako
  35. 21 2
      apps/jobsub/src/jobsub/templates/designs.mako
  36. 1 1
      apps/jobsub/static/css/jobsub.css
  37. 1 1
      apps/metastore/src/metastore/settings.py
  38. 20 0
      apps/metastore/src/metastore/templates/components.mako
  39. 3 2
      apps/metastore/src/metastore/templates/databases.mako
  40. 3 2
      apps/metastore/src/metastore/templates/describe_partitions.mako
  41. 3 2
      apps/metastore/src/metastore/templates/describe_table.mako
  42. 3 2
      apps/metastore/src/metastore/templates/tables.mako
  43. 0 0
      apps/metastore/static/art/icon_metastore_24.png
  44. 2 2
      apps/metastore/static/css/metastore.css
  45. 1 1
      apps/oozie/src/oozie/templates/dashboard/list_oozie_bundle.mako
  46. 1 1
      apps/oozie/src/oozie/templates/dashboard/list_oozie_bundles.mako
  47. 1 1
      apps/oozie/src/oozie/templates/dashboard/list_oozie_coordinator.mako
  48. 1 1
      apps/oozie/src/oozie/templates/dashboard/list_oozie_coordinators.mako
  49. 1 1
      apps/oozie/src/oozie/templates/dashboard/list_oozie_info.mako
  50. 1 1
      apps/oozie/src/oozie/templates/dashboard/list_oozie_workflow.mako
  51. 1 1
      apps/oozie/src/oozie/templates/dashboard/list_oozie_workflow_action.mako
  52. 1 1
      apps/oozie/src/oozie/templates/dashboard/list_oozie_workflows.mako
  53. 2 2
      apps/oozie/src/oozie/templates/editor/create_bundle.mako
  54. 2 2
      apps/oozie/src/oozie/templates/editor/create_coordinator.mako
  55. 2 2
      apps/oozie/src/oozie/templates/editor/create_workflow.mako
  56. 2 2
      apps/oozie/src/oozie/templates/editor/edit_bundle.mako
  57. 2 2
      apps/oozie/src/oozie/templates/editor/edit_coordinator.mako
  58. 2 2
      apps/oozie/src/oozie/templates/editor/edit_workflow.mako
  59. 11 9
      apps/oozie/src/oozie/templates/editor/import_workflow.mako
  60. 2 2
      apps/oozie/src/oozie/templates/editor/list_bundles.mako
  61. 2 2
      apps/oozie/src/oozie/templates/editor/list_coordinators.mako
  62. 12 8
      apps/oozie/src/oozie/templates/editor/list_history.mako
  63. 12 2
      apps/oozie/src/oozie/templates/editor/list_history_record.mako
  64. 2 2
      apps/oozie/src/oozie/templates/editor/list_trashed_bundles.mako
  65. 2 2
      apps/oozie/src/oozie/templates/editor/list_trashed_coordinators.mako
  66. 2 2
      apps/oozie/src/oozie/templates/editor/list_trashed_workflows.mako
  67. 2 2
      apps/oozie/src/oozie/templates/editor/list_workflows.mako
  68. 20 11
      apps/oozie/src/oozie/templates/navigation-bar.mako
  69. 30 22
      apps/pig/src/pig/templates/app.mako
  70. 1 1
      apps/pig/static/css/pig.css
  71. 1 1
      apps/search/src/search/templates/admin_collection_facets.mako
  72. 1 1
      apps/search/src/search/templates/admin_collection_highlighting.mako
  73. 1 1
      apps/search/src/search/templates/admin_collection_properties.mako
  74. 1 1
      apps/search/src/search/templates/admin_collection_sorting.mako
  75. 1 1
      apps/search/src/search/templates/admin_collection_template.mako
  76. 1 1
      apps/search/src/search/templates/admin_collections.mako
  77. 1 1
      apps/search/src/search/templates/search.mako
  78. 0 1
      apps/search/static/css/admin.css
  79. 0 1
      apps/search/static/css/search.css
  80. 3 3
      apps/sqoop/src/sqoop/templates/app.mako
  81. 3 1
      apps/sqoop/static/css/sqoop.css
  82. 5 3
      apps/useradmin/src/useradmin/templates/add_ldap_users.mako
  83. 3 3
      apps/useradmin/src/useradmin/templates/edit_group.mako
  84. 3 3
      apps/useradmin/src/useradmin/templates/edit_permissions.mako
  85. 4 7
      apps/useradmin/src/useradmin/templates/edit_user.mako
  86. 27 10
      apps/useradmin/src/useradmin/templates/layout.mako
  87. 3 3
      apps/useradmin/src/useradmin/templates/list_groups.mako
  88. 3 3
      apps/useradmin/src/useradmin/templates/list_permissions.mako
  89. 3 3
      apps/useradmin/src/useradmin/templates/list_users.mako
  90. 9 18
      apps/useradmin/static/css/useradmin.css
  91. 3 2
      apps/zookeeper/src/zookeeper/templates/clients.mako
  92. 3 2
      apps/zookeeper/src/zookeeper/templates/create.mako
  93. 3 2
      apps/zookeeper/src/zookeeper/templates/edit.mako
  94. 19 6
      apps/zookeeper/src/zookeeper/templates/index.mako
  95. 20 1
      apps/zookeeper/src/zookeeper/templates/shared_components.mako
  96. 3 2
      apps/zookeeper/src/zookeeper/templates/tree.mako
  97. 3 2
      apps/zookeeper/src/zookeeper/templates/view.mako
  98. 8 4
      desktop/core/src/desktop/app_template/src/app_name/templates/index.mako
  99. 16 6
      desktop/core/src/desktop/app_template/src/app_name/templates/shared_components.mako
  100. 8 0
      desktop/core/src/desktop/appmanager.py

+ 4 - 16
apps/about/src/about/templates/admin_wizard.mako

@@ -18,26 +18,14 @@ from desktop.views import commonheader, commonfooter
 from django.utils.encoding import smart_unicode
 from django.utils.translation import ugettext as _
 %>
+<%namespace name="header" file="header.mako" />
 
-${ commonheader(_('Quick Start'), "quickstart", user, "100px") | n,unicode }
-
-% if user.is_superuser:
-  <div class="row-fluid">
-    <div class="subnav subnav-fixed">
-      <div class="container-fluid">
-        <ul class="nav nav-pills">
-          <li class="active"><a href="${url("about:admin_wizard")}">${_('Quick Start')}</a></li>
-          <li><a href="${url("desktop.views.dump_config")}">${_('Configuration')}</a></li>
-          <li><a href="${url("desktop.views.log_view")}">${_('Server Logs')}</a></li>
-        </ul>
-      </div>
-    </div>
-  </div>
-% endif
+${ commonheader(_('Quick Start'), "quickstart", user) | n,unicode }
+${ header.menubar() }
 
 <div class="container-fluid">
   <div class="row-fluid">
-    <div class="card" style="margin-bottom: 100px;">
+    <div class="card card-small" style="margin-bottom: 100px;">
       <h2 class="card-heading simple">
         % if user.is_superuser:
           ${ _('Quick Start Wizard') } -

+ 40 - 0
apps/about/src/about/templates/header.mako

@@ -0,0 +1,40 @@
+## Licensed to Cloudera, Inc. under one
+## or more contributor license agreements.  See the NOTICE file
+## distributed with this work for additional information
+## regarding copyright ownership.  Cloudera, Inc. licenses this file
+## to you under the Apache License, Version 2.0 (the
+## "License"); you may not use this file except in compliance
+## with the License.  You may obtain a copy of the License at
+##
+##     http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+<%!
+from django.utils.translation import ugettext as _
+%>
+
+<%def name="menubar()">
+  <div class="navbar navbar-inverse navbar-fixed-top">
+      <div class="navbar-inner">
+        <div class="container-fluid">
+          <div class="nav-collapse">
+            <ul class="nav">
+              <li class="currentApp">
+                <a href="/${app_name}"><img src="/static/art/icon_hue_24.png" />
+                ${ _('About Hue') }</a>
+               </li>
+              % if user.is_superuser:
+                <li class="active"><a href="${url("about:admin_wizard")}">${_('Quick Start')}</a></li>
+                <li><a href="${url("desktop.views.dump_config")}">${_('Configuration')}</a></li>
+                <li><a href="${url("desktop.views.log_view")}">${_('Server Logs')}</a></li>
+              % endif
+            </ul>
+          </div>
+        </div>
+      </div>
+  </div>
+</%def>

+ 2 - 0
apps/beeswax/src/beeswax/templates/choose_delimiter.mako

@@ -20,8 +20,10 @@ from django.utils.translation import ugettext as _
 
 <%namespace name="comps" file="beeswax_components.mako" />
 <%namespace name="util" file="util.mako" />
+<%namespace name="layout" file="layout.mako" />
 
 ${ commonheader(_('Create table from file'), 'metastore', user) | n,unicode }
+${ layout.metastore_menubar() }
 
 <div class="container-fluid">
     <div class="row-fluid">

+ 2 - 1
apps/beeswax/src/beeswax/templates/choose_file.mako

@@ -19,9 +19,10 @@ from django.utils.translation import ugettext as _
 %>
 
 <%namespace name="comps" file="beeswax_components.mako" />
+<%namespace name="layout" file="layout.mako" />
 
 ${ commonheader(_('Create table from file'), 'metastore', user) | n,unicode }
-
+${ layout.metastore_menubar() }
 
 <div class="container-fluid">
     <div class="row-fluid">

+ 2 - 2
apps/beeswax/src/beeswax/templates/configuration.mako

@@ -21,11 +21,11 @@ from django.utils.translation import ugettext as _
 <%namespace name="layout" file="layout.mako" />
 <%namespace name="util" file="util.mako" />
 
-${ commonheader(_('Settings'), app_name, user, '100px') | n,unicode }
+${ commonheader(_('Settings'), app_name, user) | n,unicode }
 ${layout.menubar(section='configuration')}
 
 <div class="container-fluid">
-  <div class="card">
+  <div class="card card-small">
 	  <h1 class="card-heading simple">${_('Settings')}</h1>
     <div class="card-body">
       <p>

+ 2 - 1
apps/beeswax/src/beeswax/templates/create_database.mako

@@ -19,9 +19,10 @@ from django.utils.translation import ugettext as _
 %>
 
 <%namespace name="comps" file="beeswax_components.mako" />
+<%namespace name="layout" file="layout.mako" />
 
 ${ commonheader(_("Create database"), 'metastore', user) | n,unicode }
-
+${layout.metastore_menubar()}
 
 <div class="container-fluid">
   <div class="row-fluid">

+ 2 - 0
apps/beeswax/src/beeswax/templates/create_table_manually.mako

@@ -19,8 +19,10 @@ from django.utils.translation import ugettext as _
 %>
 
 <%namespace name="comps" file="beeswax_components.mako" />
+<%namespace name="layout" file="layout.mako" />
 
 ${ commonheader(_("Create table manually"), 'metastore', user) | n,unicode }
+${ layout.metastore_menubar() }
 
 <div class="container-fluid">
 <div class="row-fluid">

+ 2 - 0
apps/beeswax/src/beeswax/templates/define_columns.mako

@@ -20,8 +20,10 @@ from django.utils.translation import ugettext as _
 
 <%namespace name="comps" file="beeswax_components.mako" />
 <%namespace name="util" file="util.mako" />
+<%namespace name="layout" file="layout.mako" />
 
 ${ commonheader(_('Create table from file'), 'metastore', user) | n,unicode }
+${ layout.metastore_menubar() }
 
 <div class="container-fluid">
     <div class="row-fluid">

+ 2 - 2
apps/beeswax/src/beeswax/templates/execute.mako

@@ -56,7 +56,7 @@
 </%def>
 
 
-${ commonheader(_('Query'), app_name, user, '100px') | n,unicode }
+${ commonheader(_('Query'), app_name, user) | n,unicode }
 ${layout.menubar(section='query')}
 
 <div class="container-fluid">
@@ -256,7 +256,7 @@ ${layout.menubar(section='query')}
         </div>
 
         <div id="querySide" class="span9">
-          <div class="card" style="margin-top: 0">
+          <div class="card card-small">
             % if on_success_url:
               <input type="hidden" name="on_success_url" value="${on_success_url}"/>
             % endif

+ 2 - 2
apps/beeswax/src/beeswax/templates/explain.mako

@@ -22,11 +22,11 @@ from django.utils.translation import ugettext as _
 <%namespace name="layout" file="layout.mako" />
 <%namespace name="util" file="util.mako" />
 
-${ commonheader(_('Query Explanation'), app_name, user, '100px') | n,unicode }
+${ commonheader(_('Query Explanation'), app_name, user) | n,unicode }
 ${layout.menubar(section='saved queries')}
 
 <div class="container-fluid" style="margin-bottom: 14px">
-  <div class="card">
+  <div class="card card-small">
     <h1 class="card-heading simple">${_('Query Explanation:')} ${util.render_query_context(query_context)}</h1>
     <div class="card-body">
       <p>

+ 45 - 11
apps/beeswax/src/beeswax/templates/layout.mako

@@ -28,16 +28,50 @@ def is_selected(section, matcher):
 %>
 
 <%def name="menubar(section='')">
-<div class="subnav subnav-fixed">
-	<div class="container-fluid">
-		<ul class="nav nav-pills">
-			<li class="${is_selected(section, 'query')}"><a href="${ url(app_name + ':execute_query') }">${_('Query Editor')}</a></li>
-			<li class="${is_selected(section, 'my queries')}"><a href="${ url(app_name + ':my_queries') }">${_('My Queries')}</a></li>
-			<li class="${is_selected(section, 'saved queries')}"><a href="${ url(app_name + ':list_designs') }">${_('Saved Queries')}</a></li>
-			<li class="${is_selected(section, 'history')}"><a href="${ url(app_name + ':list_query_history') }">${_('History')}</a></li>
-			<li class="${is_selected(section, 'configuration')}"><a href="${ url(app_name + ':configuration') }">${_('Settings')}</a></li>
-		</ul>
-	</div>
-</div>
+  <div class="navbar navbar-inverse navbar-fixed-top">
+      <div class="navbar-inner">
+        <div class="container-fluid">
+          <div class="nav-collapse">
+            <ul class="nav">
+              <li class="currentApp">
+                <a href="/${app_name}">
+                % if app_name == 'impala':
+                  <img src="/impala/static/art/icon_impala_24.png" />
+                  ${ _('Impala') }
+                % else:
+                  <img src="/beeswax/static/art/icon_beeswax_24.png" />
+                  ${ _('Beeswax') }
+                % endif
+                </a>
+              </li>
+              <li class="${is_selected(section, 'query')}"><a href="${ url(app_name + ':execute_query') }">${_('Query Editor')}</a></li>
+			        <li class="${is_selected(section, 'my queries')}"><a href="${ url(app_name + ':my_queries') }">${_('My Queries')}</a></li>
+			        <li class="${is_selected(section, 'saved queries')}"><a href="${ url(app_name + ':list_designs') }">${_('Saved Queries')}</a></li>
+			        <li class="${is_selected(section, 'history')}"><a href="${ url(app_name + ':list_query_history') }">${_('History')}</a></li>
+			        <li class="${is_selected(section, 'configuration')}"><a href="${ url(app_name + ':configuration') }">${_('Settings')}</a></li>
+            </ul>
+          </div>
+        </div>
+      </div>
+  </div>
+</%def>
+
+<%def name="metastore_menubar()">
+  <div class="navbar navbar-inverse navbar-fixed-top">
+      <div class="navbar-inner">
+        <div class="container-fluid">
+          <div class="nav-collapse">
+            <ul class="nav">
+              <li class="currentApp">
+                <a href="/metastore">
+                  <img src="/metastore/static/art/icon_metastore_24.png" />
+                  ${ _('Metastore Manager') }
+                </a>
+              </li>
+            </ul>
+          </div>
+        </div>
+      </div>
+  </div>
 </%def>
 

+ 2 - 2
apps/beeswax/src/beeswax/templates/list_designs.mako

@@ -24,12 +24,12 @@
 <%namespace name="comps" file="beeswax_components.mako" />
 <%namespace name="layout" file="layout.mako" />
 
-${ commonheader(_('Saved Queries'), app_name, user, '100px') | n,unicode }
+${ commonheader(_('Saved Queries'), app_name, user) | n,unicode }
 
 ${layout.menubar(section='saved queries')}
 
 <div class="container-fluid">
-  <div class="card">
+  <div class="card card-small">
     <h1 class="card-heading simple">${_('Saved Queries')}</h1>
 
     <%actionbar:render>

+ 2 - 2
apps/beeswax/src/beeswax/templates/list_history.mako

@@ -25,7 +25,7 @@ from beeswax.views import collapse_whitespace
 <%namespace name="layout" file="layout.mako" />
 <%namespace name="comps" file="beeswax_components.mako" />
 
-${ commonheader(_('History'), app_name, user, '100px') | n,unicode }
+${ commonheader(_('History'), app_name, user) | n,unicode }
 ${ layout.menubar(section='history') }
 
 <%def name="show_saved_query(design, history)">
@@ -96,7 +96,7 @@ ${ layout.menubar(section='history') }
             </div>
         </div>
         <div class="span10">
-          <div class="card" style="margin-top: 0">
+          <div class="card card-small">
             <h1 class="card-heading simple">${_('History')}</h1>
 
             <%actionbar:render>

+ 2 - 2
apps/beeswax/src/beeswax/templates/list_trashed_designs.mako

@@ -24,12 +24,12 @@
 <%namespace name="comps" file="beeswax_components.mako" />
 <%namespace name="layout" file="layout.mako" />
 
-${ commonheader(_('Saved Queries'), app_name, user, '100px') | n,unicode }
+${ commonheader(_('Saved Queries'), app_name, user) | n,unicode }
 
 ${layout.menubar(section='saved queries')}
 
 <div class="container-fluid">
-  <div class="card">
+  <div class="card card-small">
     <h1 class="card-heading simple">${_('Trashed Queries')}</h1>
 
     <%actionbar:render>

+ 2 - 2
apps/beeswax/src/beeswax/templates/my_queries.mako

@@ -26,7 +26,7 @@ from beeswax.views import collapse_whitespace
 <%namespace name="comps" file="beeswax_components.mako" />
 <%namespace name="layout" file="layout.mako" />
 
-${ commonheader(_('My Queries'), app_name, user, '100px') | n,unicode }
+${ commonheader(_('My Queries'), app_name, user) | n,unicode }
 ${layout.menubar(section='my queries')}
 
 <style type="text/css">
@@ -36,7 +36,7 @@ ${layout.menubar(section='my queries')}
 </style>
 
 <div class="container-fluid">
-  <div class="card">
+  <div class="card card-small">
     <h1 class="card-heading simple">${_('My Queries')}</h1>
 
     <%actionbar:render>

+ 2 - 2
apps/beeswax/src/beeswax/templates/parameterization.mako

@@ -21,7 +21,7 @@ from django.utils.translation import ugettext as _
 <%namespace name="comps" file="beeswax_components.mako" />
 <%namespace name="layout" file="layout.mako" />
 
-${ commonheader(_('Parameterize Query'), app_name, user, '100px') | n,unicode }
+${ commonheader(_('Parameterize Query'), app_name, user) | n,unicode }
 
 ${layout.menubar()}
 
@@ -35,7 +35,7 @@ ${layout.menubar()}
 </style>
 
 <div class="container-fluid">
-   <div class="card">
+   <div class="card card-small">
     <%
         if explain:
             action = url(app_name + ':explain_parameterized_query', design.id)

+ 2 - 2
apps/beeswax/src/beeswax/templates/save_results.mako

@@ -24,7 +24,7 @@ from django.utils.translation import ugettext as _
 <%namespace name="comps" file="beeswax_components.mako" />
 <%namespace name="util" file="util.mako" />
 
-${ commonheader(_('Create table from file'), app_name, user, '100px') | n,unicode }
+${ commonheader(_('Create table from file'), app_name, user) | n,unicode }
 ${layout.menubar(section='query')}
 
 <script src="/static/ext/js/knockout-min.js" type="text/javascript" charset="utf-8"></script>
@@ -33,7 +33,7 @@ ${layout.menubar(section='query')}
 % if error_msg:
   <h4>${error_msg}</h4>
 % endif
-  <div class="card">
+  <div class="card card-small">
     <h1 class="card-heading simple">${_('Save Query Results')}</h1>
     <div class="card-body">
       <p>

+ 2 - 2
apps/beeswax/src/beeswax/templates/watch_results.mako

@@ -24,7 +24,7 @@ from django.utils.translation import ugettext as _
 <%namespace name="util" file="util.mako" />
 <%namespace name="comps" file="beeswax_components.mako" />
 
-${ commonheader(_('Query Results'), app_name, user, '100px') | n,unicode }
+${ commonheader(_('Query Results'), app_name, user) | n,unicode }
 ${layout.menubar(section='query')}
 
 <style type="text/css">
@@ -119,7 +119,7 @@ ${layout.menubar(section='query')}
         </div>
 
         <div class="span9">
-          <div class="card" style="margin-top: 0">
+          <div class="card card-small">
             <h1 class="card-heading simple">${_('Query Results:')} ${ util.render_query_context(query_context) }</h1>
             <div class="card-body">
             <p>

+ 2 - 2
apps/beeswax/src/beeswax/templates/watch_wait.mako

@@ -22,7 +22,7 @@ from django.utils.translation import ugettext as _
 <%namespace name="layout" file="layout.mako" />
 <%namespace name="util" file="util.mako" />
 
-${ commonheader(_('Waiting for query...'), app_name, user, '100px') | n,unicode }
+${ commonheader(_('Waiting for query...'), app_name, user) | n,unicode }
 ${layout.menubar(section='query')}
 
 ## Required for unit tests
@@ -63,7 +63,7 @@ ${layout.menubar(section='query')}
             </div>
         </div>
         <div class="span9">
-          <div class="card" style="margin-top: 0">
+          <div class="card card-small">
             <h1 class="card-heading simple">${_('Waiting for query...')} ${util.render_query_context(query_context)}</h1>
             <div class="card-body">
               <p>

+ 3 - 2
apps/filebrowser/src/filebrowser/templates/display.mako

@@ -29,11 +29,12 @@
 <%namespace name="fb_components" file="fb_components.mako" />
 
 ${ commonheader(_('%(filename)s - File Viewer') % dict(filename=truncate(filename)), 'filebrowser', user) | n,unicode }
+${ fb_components.menubar() }
 
 <div class="container-fluid">
   <div class="row-fluid">
     <div class="span2">
-      <div class="sidebar-nav">
+      <div class="sidebar-nav" style="padding-top: 0">
         <ul class="nav nav-list">
           <li class="nav-header">${_('Actions')}</li>
           % if view['mode'] == "binary":
@@ -84,7 +85,7 @@ ${ commonheader(_('%(filename)s - File Viewer') % dict(filename=truncate(filenam
       </div>
     </div>
     <div class="span10">
-      <div class="card" style="margin-top: 0">
+      <div class="card card-small">
       % if breadcrumbs:
         ${fb_components.breadcrumbs(path, breadcrumbs)}
       %endif

+ 2 - 2
apps/filebrowser/src/filebrowser/templates/edit.mako

@@ -30,12 +30,12 @@
 <%namespace name="fb_components" file="fb_components.mako" />
 
 ${ commonheader(_('%(filename)s - File Viewer') % dict(filename=truncate(filename)), 'filebrowser', user) | n,unicode }
-
+${ fb_components.menubar() }
 
 <div class="container-fluid">
   <div class="row-fluid">
     <div class="span12">
-      <div class="card">
+      <div class="card card-small">
         % if breadcrumbs:
           ${fb_components.breadcrumbs(path, breadcrumbs)}
         %endif

+ 22 - 0
apps/filebrowser/src/filebrowser/templates/fb_components.mako

@@ -58,3 +58,25 @@ from django.utils.translation import ugettext as _
         % endif
     </ul>
 </%def>
+
+
+<%def name="menubar()">
+  <div class="navbar navbar-inverse navbar-fixed-top nokids">
+      <div class="navbar-inner">
+        <div class="container-fluid">
+          <div class="nav-collapse">
+            <ul class="nav">
+              <li class="currentApp">
+                <a href="/${app_name}">
+                  <img src="/filebrowser/static/art/icon_filebrowser_24.png" />
+                  ${ _('File Browser') }
+                </a>
+              </li>
+            </ul>
+          </div>
+        </div>
+      </div>
+  </div>
+</%def>
+
+

+ 2 - 3
apps/filebrowser/src/filebrowser/templates/listdir.mako

@@ -25,12 +25,11 @@ from django.utils.translation import ugettext as _
 <%namespace name="fb_components" file="fb_components.mako" />
 
 ${ commonheader(None, 'filebrowser', user) | n,unicode }
+${ fb_components.menubar() }
 
 <div class="container-fluid">
 
-  <div class="card">
-    <h1 class="card-heading simple">${_('File Browser')}</h1>
-
+  <div class="card card-small">
     <div class="actionbar">
     <%actionbar:render>
         <%def name="search()">

+ 19 - 2
apps/hbase/src/hbase/templates/app.mako

@@ -24,6 +24,23 @@ ${ commonheader(None, "hbase", user) | n,unicode }
 
 <link href="/hbase/static/css/hbase.css" rel="stylesheet" type="text/css" />
 
+<div class="navbar navbar-inverse navbar-fixed-top nokids">
+    <div class="navbar-inner">
+    <div class="container-fluid">
+      <div class="nav-collapse">
+        <ul class="nav">
+          <li class="currentApp">
+            <a href="/${app_name}">
+              <img src="/hbase/static/art/icon_24.png" />
+              ${ _('HBase Browser') }
+            </a>
+          </li>
+        </ul>
+      </div>
+    </div>
+  </div>
+</div>
+
 <%def name="datatable(datasource,rowTemplate = 'itemTemplate')">
   <table data-datasource="${datasource}" class="table table-striped table-condensed datatables tablescroller-disable">
       <thead>
@@ -117,10 +134,10 @@ ${ commonheader(None, "hbase", user) | n,unicode }
 </%def>
 
 <div class="container-fluid">
-  <div class="card">
+  <div class="card card-small">
   <!-- Page Header -->
   <h1 class="card-heading simple">
-    <a href="/hbase/">HBase Browser</a> - <a data-bind="text: app.cluster(), attr: { href: '#' + app.cluster() }"></a>
+    <a href="/hbase/">${_('Home')}</a> - <a data-bind="text: app.cluster(), attr: { href: '#' + app.cluster() }"></a>
     <span data-bind="visible: app.station() == 'table'">/ <a data-bind="text: app.views.tabledata.name(), attr: { href: '#' + app.cluster() + '/' + app.views.tabledata.name()}"></a></span>
     <span class="pull-right">
       <span class="dropdown">

+ 4 - 3
apps/jobbrowser/src/jobbrowser/templates/attempt.mako

@@ -20,13 +20,14 @@
 <%namespace name="comps" file="jobbrowser_components.mako" />
 
 ${ commonheader(_('Task Attempt: %(attemptId)s') % dict(attemptId=attempt.attemptId_short), "jobbrowser", user) | n,unicode }
+${ comps.menubar() }
 
 <link href="/jobbrowser/static/css/jobbrowser.css" rel="stylesheet">
 
 <div class="container-fluid">
   <div class="row-fluid">
     <div class="span2">
-      <div class="sidebar-nav">
+      <div class="sidebar-nav" style="padding-top: 0">
         <ul class="nav nav-list">
           <li class="nav-header">${_('Attempt ID')}</li>
           <li class="white hellipsify">${attempt.attemptId_short}</li>
@@ -55,8 +56,8 @@ ${ commonheader(_('Task Attempt: %(attemptId)s') % dict(attemptId=attempt.attemp
     </div>
 
     <div class="span10">
-      <div class="card" style="margin-top:0">
-        <h1 class="card-heading simple">${_('Task Attempt: %(attemptId)s - Job Browser') % dict(attemptId=attempt.attemptId_short)}</h1>
+      <div class="card card-small">
+        <h1 class="card-heading simple">${_('Task Attempt: %(attemptId)s') % dict(attemptId=attempt.attemptId_short)}</h1>
 
         <div class="card-body">
           <p>

+ 5 - 3
apps/jobbrowser/src/jobbrowser/templates/attempt_logs.mako

@@ -20,10 +20,12 @@
 <%namespace name="comps" file="jobbrowser_components.mako" />
 
 ${ commonheader(_('Task Attempt: %(attemptId)s') % dict(attemptId=attempt.attemptId_short), "jobbrowser", user) | n,unicode }
+${ comps.menubar() }
+
 <div class="container-fluid">
   <div class="row-fluid">
     <div class="span2">
-      <div class="sidebar-nav">
+      <div class="sidebar-nav" style="padding-top: 0">
         <ul class="nav nav-list">
           <li class="nav-header">${_('Attempt ID')}</li>
           <li class="white">${attempt.attemptId_short}</li>
@@ -50,8 +52,8 @@ ${ commonheader(_('Task Attempt: %(attemptId)s') % dict(attemptId=attempt.attemp
     </div>
 
     <div class="span10">
-      <div class="card" style="margin-top: 0">
-        <h1 class="card-heading simple">${_('Task Attempt: %(attemptId)s - Job Browser') % dict(attemptId=attempt.attemptId_short)}</h1>
+      <div class="card card-small">
+        <h1 class="card-heading simple">${_('Task Attempt: %(attemptId)s') % dict(attemptId=attempt.attemptId_short)}</h1>
         <div class="card-body">
           <p>
             <ul class="nav nav-tabs">

+ 4 - 3
apps/jobbrowser/src/jobbrowser/templates/job.mako

@@ -91,6 +91,7 @@
 </%def>
 
 ${ commonheader(_('Job: %(jobId)s') % dict(jobId=job.jobId_short), "jobbrowser", user) | n,unicode }
+${ comps.menubar() }
 
 <link href="/jobbrowser/static/css/jobbrowser.css" rel="stylesheet">
 
@@ -108,7 +109,7 @@ ${ commonheader(_('Job: %(jobId)s') % dict(jobId=job.jobId_short), "jobbrowser",
 <div class="container-fluid">
   <div class="row-fluid">
     <div class="span2">
-      <div class="sidebar-nav">
+      <div class="sidebar-nav" style="padding-top: 0">
         <ul class="nav nav-list">
           <li class="nav-header">${_('Job ID')}</li>
           <li class="white hellipsify">${job.jobId_short}</li>
@@ -150,8 +151,8 @@ ${ commonheader(_('Job: %(jobId)s') % dict(jobId=job.jobId_short), "jobbrowser",
       </div>
     </div>
     <div class="span10">
-      <div class="card" style="margin-top:0">
-        <h1 class="card-heading simple">${_('Job: %(jobId)s - Job Browser') % dict(jobId=job.jobId_short)}</h1>
+      <div class="card card-small">
+        <h1 class="card-heading simple">${_('Job: %(jobId)s') % dict(jobId=job.jobId_short)}</h1>
           <div class="card-body">
             <p>
               <ul class="nav nav-tabs">

+ 3 - 3
apps/jobbrowser/src/jobbrowser/templates/job_attempt_logs.mako

@@ -21,11 +21,12 @@
 <%namespace name="comps" file="jobbrowser_components.mako" />
 
 ${ commonheader(_('Job Attempt: %(attempt_index)s') % {'attempt_index': attempt_index}, "jobbrowser", user) | n,unicode }
+${ comps.menubar() }
 
 <div class="container-fluid">
   <div class="row-fluid">
     <div class="span2">
-      <div class="sidebar-nav">
+      <div class="sidebar-nav" style="padding-top: 0">
         <ul class="nav nav-list">
           <li class="nav-header">${ _('Attempt ID') }</li>
           <li class="white">${ attempt_index }</li>
@@ -34,9 +35,8 @@ ${ commonheader(_('Job Attempt: %(attempt_index)s') % {'attempt_index': attempt_
     </div>
 
     <div class="span10">
-      <div class="card">
+      <div class="card card-small">
         <h1 class="card-heading simple">
-          ${ _('Job Browser') } -
           ${ _('Job') } <a href="${url('jobbrowser.views.single_job', job=job.jobId)}" title="${_('View this job')}">${ job.jobId_short }</a>
           ${ _('Attempt: %(attempt_index)s') % {'attempt_index': attempt_index} }
         </h1>

+ 20 - 0
apps/jobbrowser/src/jobbrowser/templates/jobbrowser_components.mako

@@ -226,3 +226,23 @@
     return additional_class
     %>
 </%def>
+
+<%def name="menubar()">
+  <div class="navbar navbar-inverse navbar-fixed-top nokids">
+      <div class="navbar-inner">
+        <div class="container-fluid">
+          <div class="nav-collapse">
+            <ul class="nav">
+              <li class="currentApp">
+                <a href="/${app_name}">
+                  <img src="/jobbrowser/static/art/icon_jobbrowser_24.png" />
+                  ${ _('Job Browser') }
+                </a>
+              </li>
+            </ul>
+          </div>
+        </div>
+      </div>
+  </div>
+</%def>
+

+ 3 - 2
apps/jobbrowser/src/jobbrowser/templates/jobs.mako

@@ -20,14 +20,15 @@
   from django.utils.translation import ugettext as _
 %>
 <%namespace name="actionbar" file="actionbar.mako" />
+<%namespace name="components" file="jobbrowser_components.mako" />
 
 ${ commonheader(None, "jobbrowser", user) | n,unicode }
+${ components.menubar() }
 
 <link href="/jobbrowser/static/css/jobbrowser.css" rel="stylesheet">
 
 <div class="container-fluid">
-  <div class="card">
-  <h1 class="card-heading simple">${_('Job Browser')}</h1>
+  <div class="card card-small">
 
   <%actionbar:render>
     <%def name="search()">

+ 4 - 3
apps/jobbrowser/src/jobbrowser/templates/task.mako

@@ -20,13 +20,14 @@
 <%namespace name="comps" file="jobbrowser_components.mako" />
 
 ${ commonheader(_('Job Task: %(taskId)s') % dict(taskId=task.taskId_short), "jobbrowser", user) | n,unicode }
+${ comps.menubar() }
 
 <link href="/jobbrowser/static/css/jobbrowser.css" rel="stylesheet">
 
 <div class="container-fluid">
   <div class="row-fluid">
     <div class="span2">
-      <div class="sidebar-nav">
+      <div class="sidebar-nav" style="padding-top: 0">
         <ul class="nav nav-list">
           <li class="nav-header">${_('Task ID')}</li>
           <li class="white hellipsify">${task.taskId_short}</li>
@@ -46,8 +47,8 @@ ${ commonheader(_('Job Task: %(taskId)s') % dict(taskId=task.taskId_short), "job
     </div>
   </div>
     <div class="span10">
-      <div class="card" style="margin-top:0">
-        <h1 class="card-heading simple">${_('Job Task: %(taskId)s - Job Browser') % dict(taskId=task.taskId_short)}</h1>
+      <div class="card card-small">
+        <h1 class="card-heading simple">${_('Job Task: %(taskId)s') % dict(taskId=task.taskId_short)}</h1>
         <div class="card-body">
           <p>
             <ul class="nav nav-tabs">

+ 2 - 1
apps/jobbrowser/src/jobbrowser/templates/tasks.mako

@@ -22,6 +22,7 @@
 <%namespace name="comps" file="jobbrowser_components.mako" />
 
 ${ commonheader(_('Task View: Job: %(jobId)s') % dict(jobId=job.jobId_short), "jobbrowser", user) | n,unicode }
+${ comps.menubar() }
 
 <%def name="selected(val, state)">
     %   if val is not None and state is not None and val in state:
@@ -30,7 +31,7 @@ ${ commonheader(_('Task View: Job: %(jobId)s') % dict(jobId=job.jobId_short), "j
 </%def>
 
 <div class="container-fluid">
-  <div class="card">
+  <div class="card card-small">
     <h1 class="card-heading simple">${_('Task View: Job: %(jobId)s') % dict(jobId=job.jobId_short)}</h1>
     <div class="card-body">
       <p>

+ 14 - 0
apps/jobbrowser/src/jobbrowser/templates/tasktracker.mako

@@ -21,8 +21,15 @@
 <%namespace name="comps" file="jobbrowser_components.mako" />
 
 ${ commonheader(_('Tracker: %(trackerId)s') % dict(trackerId=tracker.trackerId), "jobbrowser", user) | n,unicode }
+${ comps.menubar()}
 
 <div class="container-fluid">
+  <div class="row-fluid">
+    <div class="span12">
+      <div class="card card-home">
+        <div class="card-body">
+          <p>
+
     <h1>${_('Tracker at %(trackerHost)s on port %(trackerPort)s') % dict(trackerHost=tracker.host, trackerPort=tracker.httpPort)}</h1>
     <div>
         <dl>
@@ -80,6 +87,13 @@ ${ commonheader(_('Tracker: %(trackerId)s') % dict(trackerId=tracker.trackerId),
         </dl>
     </div>
     % endif
+
+          <a class="btn" href="javascript:history.back()">${_('Back')}</a>
+
+          </p>
+        </div>
+      </div>
+    </div>
 </div>
 
 ${ commonfooter(messages) | n,unicode }

+ 14 - 2
apps/jobbrowser/src/jobbrowser/templates/tasktrackers.mako

@@ -20,10 +20,16 @@
 
 <%namespace name="comps" file="jobbrowser_components.mako" />
 ${ commonheader(_('Task Trackers'), "jobbrowser", user) | n,unicode }
-
+${ comps.menubar()}
 <div class="container-fluid">
+<div class="row-fluid">
+  <div class="span12">
+    <div class="card card-small">
+      <h2 class="card-heading simple">${_('Task Trackers')}</h2>
+      <div class="card-body">
+        <p>
 
-<table class="datatables">
+<table class="datatables" style="width: 100%">
     <thead>
         <tr>
             <th>${_('Name')}</th>
@@ -57,6 +63,12 @@ ${ commonheader(_('Task Trackers'), "jobbrowser", user) | n,unicode }
 </table>
 
 <div id="trackerDialog"></div>
+
+        </p>
+      </div>
+    </div>
+  </div>
+</div>
 </div>
 
 <script type="text/javascript" charset="utf-8">

+ 21 - 2
apps/jobsub/src/jobsub/templates/designs.mako

@@ -23,7 +23,7 @@ from django.utils.translation import ugettext as _
 
 <%namespace name="actionbar" file="actionbar.mako" />
 
-${ commonheader(None, "jobsub", user, "60px") | n,unicode }
+${ commonheader(None, "jobsub", user) | n,unicode }
 
 <link rel="stylesheet" href="/jobsub/static/css/jobsub.css">
 
@@ -39,8 +39,27 @@ ${ commonheader(None, "jobsub", user, "60px") | n,unicode }
 <script src="/jobsub/static/js/jobsub.ko.js" type="text/javascript" charset="utf-8"></script>
 <script src="/jobsub/static/js/jobsub.js" type="text/javascript" charset="utf-8"></script>
 
+
+<div class="navbar navbar-inverse navbar-fixed-top nokids">
+    <div class="navbar-inner">
+      <div class="container-fluid">
+        <div class="nav-collapse">
+          <ul class="nav">
+            <li class="currentApp">
+              <a href="/${app_name}">
+                <img src="/jobsub/static/art/icon_jobsub_24.png" />
+                ${ _('Job Designer') }
+              </a>
+            </li>
+          </ul>
+        </div>
+      </div>
+    </div>
+</div>
+
+
 <div class="container-fluid">
-  <div class="card">
+  <div class="card card-small">
   <h1 class="card-heading simple">${_('Job Designs')}</h1>
 
   <%actionbar:render>

+ 1 - 1
apps/jobsub/static/css/jobsub.css

@@ -28,4 +28,4 @@ a.advanced, a.advanced:link, a.advanced:hover {
 
 input.search-query {
   vertical-align: top;
-}
+}

+ 1 - 1
apps/metastore/src/metastore/settings.py

@@ -18,7 +18,7 @@
 DJANGO_APPS = ['metastore']
 NICE_NAME = "Metastore Manager"
 REQUIRES_HADOOP = True
-ICON = "/metastore/static/art/table-browser-24-1.png"
+ICON = "/metastore/static/art/icon_metastore_24.png"
 MENU_INDEX = 20
 
 IS_URL_NAMESPACED = True

+ 20 - 0
apps/metastore/src/metastore/templates/components.mako

@@ -18,6 +18,26 @@
   from django.utils.translation import ugettext as _
 %>
 
+<%def name="menubar()">
+  <div class="navbar navbar-inverse navbar-fixed-top nokids">
+      <div class="navbar-inner">
+        <div class="container-fluid">
+          <div class="nav-collapse">
+            <ul class="nav">
+              <li class="currentApp">
+                <a href="/${app_name}">
+                  <img src="/metastore/static/art/icon_metastore_24.png" />
+                  ${ _('Metastore Manager') }
+                </a>
+              </li>
+            </ul>
+          </div>
+        </div>
+      </div>
+  </div>
+</%def>
+
+
 <%def name="breadcrumbs(breadcrumbs)">
   <ul class="nav nav-pills hueBreadcrumbBar" id="breadcrumbs">
     <li>

+ 3 - 2
apps/metastore/src/metastore/templates/databases.mako

@@ -21,12 +21,13 @@ from django.utils.translation import ugettext as _
 <%namespace name="components" file="components.mako" />
 
 ${ commonheader(_('Databases'), 'metastore', user) | n,unicode }
+${ components.menubar() }
 
 <div class="container-fluid" id="databases">
   <div class="row-fluid">
   % if has_write_access:
     <div class="span3">
-      <div class="sidebar-nav">
+      <div class="sidebar-nav card-small">
         <ul class="nav nav-list">
           <li class="nav-header">${_('actions')}</li>
           <li><a href="${ url('beeswax:create_database') }">${_('Create a new database')}</a></li>
@@ -37,7 +38,7 @@ ${ commonheader(_('Databases'), 'metastore', user) | n,unicode }
   %else:
     <div class="span12">
   % endif
-      <div class="card">
+      <div class="card card-small">
         <h1 class="card-heading simple">${ components.breadcrumbs(breadcrumbs) }</h1>
         <%actionbar:render>
           <%def name="search()">

+ 3 - 2
apps/metastore/src/metastore/templates/describe_partitions.mako

@@ -22,11 +22,12 @@
 <%namespace name="components" file="components.mako" />
 
 ${ commonheader(_('Table Partitions: %(tableName)s') % dict(tableName=table.name), app_name, user) | n,unicode }
+${ components.menubar() }
 
 <div class="container-fluid">
   <div class="row-fluid">
     <div class="span3">
-      <div class="sidebar-nav">
+      <div class="sidebar-nav card-small">
         <ul class="nav nav-list">
           <li class="nav-header">${_('Actions')}</li>
           <li><a href="${ url('metastore:describe_table', database=database, table=table.name) }">${_('Show Table')}</a></li>
@@ -34,7 +35,7 @@ ${ commonheader(_('Table Partitions: %(tableName)s') % dict(tableName=table.name
       </div>
     </div>
     <div class="span9">
-      <div class="card">
+      <div class="card card-small">
         <h1 class="card-heading simple">${ components.breadcrumbs(breadcrumbs) }</h1>
           % if partitions:
           <table class="table table-striped table-condensed datatables">

+ 3 - 2
apps/metastore/src/metastore/templates/describe_table.mako

@@ -28,6 +28,7 @@ from django.utils.translation import ugettext as _
     view_or_table_noun = _("Table")
 %>
 ${ commonheader(_("%s : %s") % (view_or_table_noun, table.name), app_name, user) | n,unicode }
+${ components.menubar() }
 
 <%def name="column_table(cols)">
   <table class="table table-striped table-condensed datatables">
@@ -53,7 +54,7 @@ ${ commonheader(_("%s : %s") % (view_or_table_noun, table.name), app_name, user)
 <div class="container-fluid">
   <div class="row-fluid">
     <div class="span3">
-      <div class="sidebar-nav">
+      <div class="sidebar-nav card-small">
         <ul class="nav nav-list">
           <li class="nav-header">${_('Actions')}</li>
           % if has_write_access:
@@ -71,7 +72,7 @@ ${ commonheader(_("%s : %s") % (view_or_table_noun, table.name), app_name, user)
       </div>
     </div>
     <div class="span9">
-      <div class="card">
+      <div class="card card-small">
         <h1 class="card-heading simple">${ components.breadcrumbs(breadcrumbs) }</h1>
         <div class="card-body">
           <p>

+ 3 - 2
apps/metastore/src/metastore/templates/tables.mako

@@ -22,11 +22,12 @@ from django.utils.translation import ugettext as _
 <%namespace name="components" file="components.mako" />
 
 ${ commonheader(_('Tables'), 'metastore', user) | n,unicode }
+${ components.menubar() }
 
 <div class="container-fluid" id="tables">
   <div class="row-fluid">
     <div class="span3">
-      <div class="sidebar-nav">
+      <div class="sidebar-nav card-small">
         <ul class="nav nav-list">
           <li class="nav-header">${_('database')}</li>
           <li class="white">
@@ -43,7 +44,7 @@ ${ commonheader(_('Tables'), 'metastore', user) | n,unicode }
       </div>
     </div>
     <div class="span9">
-      <div class="card">
+      <div class="card card-small">
         <h1 class="card-heading simple">${ components.breadcrumbs(breadcrumbs) }</h1>
         <%actionbar:render>
           <%def name="search()">

+ 0 - 0
apps/metastore/static/art/table-browser-24-1.png → apps/metastore/static/art/icon_metastore_24.png


+ 2 - 2
apps/metastore/static/css/metastore.css

@@ -31,9 +31,9 @@
 }
 
 .sidebar-nav {
-  padding: 9px 0;
+  padding: 0;
 }
 
 .card-heading {
   padding-left: 6px !important;
-}
+}

+ 1 - 1
apps/oozie/src/oozie/templates/dashboard/list_oozie_bundle.mako

@@ -23,7 +23,7 @@
 <%namespace name="layout" file="../navigation-bar.mako" />
 <%namespace name="utils" file="../utils.inc.mako" />
 
-${ commonheader(_("Bundle Dashboard"), "oozie", user, "100px") | n,unicode }
+${ commonheader(_("Bundle Dashboard"), "oozie", user) | n,unicode }
 ${ layout.menubar(section='dashboard') }
 
 

+ 1 - 1
apps/oozie/src/oozie/templates/dashboard/list_oozie_bundles.mako

@@ -23,7 +23,7 @@
 <%namespace name="layout" file="../navigation-bar.mako" />
 <%namespace name="utils" file="../utils.inc.mako" />
 
-${ commonheader(_("Bundles Dashboard"), "oozie", user, "100px") | n,unicode }
+${ commonheader(_("Bundles Dashboard"), "oozie", user) | n,unicode }
 ${layout.menubar(section='dashboard')}
 
 

+ 1 - 1
apps/oozie/src/oozie/templates/dashboard/list_oozie_coordinator.mako

@@ -23,7 +23,7 @@
 <%namespace name="layout" file="../navigation-bar.mako" />
 <%namespace name="utils" file="../utils.inc.mako" />
 
-${ commonheader(_("Coordinator Dashboard"), "oozie", user, "100px") | n,unicode }
+${ commonheader(_("Coordinator Dashboard"), "oozie", user) | n,unicode }
 ${ layout.menubar(section='dashboard') }
 
 

+ 1 - 1
apps/oozie/src/oozie/templates/dashboard/list_oozie_coordinators.mako

@@ -23,7 +23,7 @@
 <%namespace name="layout" file="../navigation-bar.mako" />
 <%namespace name="utils" file="../utils.inc.mako" />
 
-${ commonheader(_("Coordinators Dashboard"), "oozie", user, "100px") | n,unicode }
+${ commonheader(_("Coordinators Dashboard"), "oozie", user) | n,unicode }
 ${layout.menubar(section='dashboard')}
 
 

+ 1 - 1
apps/oozie/src/oozie/templates/dashboard/list_oozie_info.mako

@@ -22,7 +22,7 @@
 <%namespace name="layout" file="../navigation-bar.mako" />
 <%namespace name="utils" file="../utils.inc.mako" />
 
-${ commonheader(_("Oozie Information"), "oozie", user, "100px") | n,unicode }
+${ commonheader(_("Oozie Information"), "oozie", user) | n,unicode }
 ${ layout.menubar(section='dashboard') }
 
 

+ 1 - 1
apps/oozie/src/oozie/templates/dashboard/list_oozie_workflow.mako

@@ -24,7 +24,7 @@
 <%namespace name="layout" file="../navigation-bar.mako" />
 <%namespace name="utils" file="../utils.inc.mako" />
 
-${ commonheader(_("Workflow Dashboard"), "oozie", user, "100px") | n,unicode }
+${ commonheader(_("Workflow Dashboard"), "oozie", user) | n,unicode }
 ${ layout.menubar(section='dashboard') }
 
 

+ 1 - 1
apps/oozie/src/oozie/templates/dashboard/list_oozie_workflow_action.mako

@@ -23,7 +23,7 @@
 <%namespace name="layout" file="../navigation-bar.mako" />
 <%namespace name="utils" file="../utils.inc.mako" />
 
-${ commonheader(_("Workflow Action"), "oozie", user, "100px") | n,unicode }
+${ commonheader(_("Workflow Action"), "oozie", user) | n,unicode }
 ${ layout.menubar(section='running') }
 
 

+ 1 - 1
apps/oozie/src/oozie/templates/dashboard/list_oozie_workflows.mako

@@ -24,7 +24,7 @@
 <%namespace name="utils" file="../utils.inc.mako" />
 
 
-${ commonheader(_("Workflows Dashboard"), "oozie", user, "100px") | n,unicode }
+${ commonheader(_("Workflows Dashboard"), "oozie", user) | n,unicode }
 ${ layout.menubar(section='dashboard') }
 
 

+ 2 - 2
apps/oozie/src/oozie/templates/editor/create_bundle.mako

@@ -23,7 +23,7 @@
 <%namespace name="layout" file="../navigation-bar.mako" />
 <%namespace name="utils" file="../utils.inc.mako" />
 
-${ commonheader(_("Create Bundle"), "oozie", user, "100px") | n,unicode }
+${ commonheader(_("Create Bundle"), "oozie", user) | n,unicode }
 ${ layout.menubar(section='bundles') }
 
 
@@ -39,7 +39,7 @@ ${ layout.menubar(section='bundles') }
         </div>
       </div>
       <div class="span10">
-        <div class="card" style="margin-top: 0">
+        <div class="card card-small">
           <h1 class="card-heading simple">${ _('Create Bundle') }</h1>
           <div class="alert alert-info"><h3>${ _('Bundle data') }</h3></div>
           <fieldset>

+ 2 - 2
apps/oozie/src/oozie/templates/editor/create_coordinator.mako

@@ -22,7 +22,7 @@
 <%namespace name="layout" file="../navigation-bar.mako" />
 <%namespace name="utils" file="../utils.inc.mako" />
 
-${ commonheader(_("Create Coordinator"), "oozie", user, "100px") | n,unicode }
+${ commonheader(_("Create Coordinator"), "oozie", user) | n,unicode }
 ${ layout.menubar(section='coordinators') }
 
 <style type="text/css">
@@ -52,7 +52,7 @@ ${ layout.menubar(section='coordinators') }
         </div>
     </div>
     <div class="span10">
-      <div class="card" style="margin-top:0">
+      <div class="card card-small">
         <h1 class="card-heading simple">${ _('Coordinator Editor') } ${ coordinator.name }</h1>
       <ul class="nav nav-pills">
         <li class="active"><a href="#step1" class="step">${ _('Step 1: Details') }</a></li>

+ 2 - 2
apps/oozie/src/oozie/templates/editor/create_workflow.mako

@@ -22,7 +22,7 @@
 <%namespace name="layout" file="../navigation-bar.mako" />
 <%namespace name="utils" file="../utils.inc.mako" />
 
-${ commonheader(_("Create Workflow"), "oozie", user, "100px") | n,unicode }
+${ commonheader(_("Create Workflow"), "oozie", user) | n,unicode }
 ${ layout.menubar(section='workflows') }
 
 
@@ -39,7 +39,7 @@ ${ layout.menubar(section='workflows') }
       </div>
     </div>
     <div class="span10">
-      <div class="card" style="padding-top:0;margin-top: 0">
+      <div class="card card-small">
         <div class="alert alert-info"><h3>${ _('Properties') }</h3></div>
           <div class="card-body">
             <p>

+ 2 - 2
apps/oozie/src/oozie/templates/editor/edit_bundle.mako

@@ -24,7 +24,7 @@
 <%namespace name="properties" file="coordinator_properties.mako" />
 <%namespace name="utils" file="../utils.inc.mako" />
 
-${ commonheader(_("Edit Bundle"), "oozie", user, "100px") | n,unicode }
+${ commonheader(_("Edit Bundle"), "oozie", user) | n,unicode }
 ${ layout.menubar(section='bundles') }
 
 <style type="text/css">
@@ -86,7 +86,7 @@ ${ layout.menubar(section='bundles') }
     </div>
 
     <div class="span10">
-      <div class="card" style="margin-top:0">
+      <div class="card card-small">
       <h1 class="card-heading simple">${ _('Bundle Editor : ') } ${ bundle.name }</h1>
       <form id="jobForm" class="form-horizontal" action="${ url('oozie:edit_bundle', bundle=bundle.id) }" method="POST">
 

+ 2 - 2
apps/oozie/src/oozie/templates/editor/edit_coordinator.mako

@@ -24,7 +24,7 @@
 <%namespace name="properties" file="coordinator_properties.mako" />
 <%namespace name="coordinator_data" file="create_coordinator_data.mako" />
 
-${ commonheader(_("Edit Coordinator"), "oozie", user, "100px") | n,unicode }
+${ commonheader(_("Edit Coordinator"), "oozie", user) | n,unicode }
 ${ layout.menubar(section='coordinators') }
 
 <style type="text/css">
@@ -81,7 +81,7 @@ ${ layout.menubar(section='coordinators') }
       </div>
     </div>
     <div class="span10">
-      <div class="card" style="margin-top: 0">
+      <div class="card card-small">
         <h1 class="card-heading simple">${ _('Coordinator Editor : ') } ${ coordinator.name }</h1>
       <form id="jobForm" class="form-horizontal" action="${ url('oozie:edit_coordinator', coordinator=coordinator.id) }" method="POST">
       <div id="properties" class="section">

+ 2 - 2
apps/oozie/src/oozie/templates/editor/edit_workflow.mako

@@ -25,7 +25,7 @@
 <%namespace name="controls" file="control_utils.mako" />
 <%namespace name="workflows" file="workflow_utils.mako" />
 
-${ commonheader(_("Edit Workflow"), "oozie", user, "100px") | n,unicode }
+${ commonheader(_("Edit Workflow"), "oozie", user) | n,unicode }
 ${ layout.menubar(section='workflows') }
 
 
@@ -77,7 +77,7 @@ ${ layout.menubar(section='workflows') }
   </div>
   <div class="span10">
     <div id="properties" class="section hide">
-    <div class="card" style="padding-top:0;margin-top: 0">
+    <div class="card card-small">
       <div class="alert alert-info"><h3 data-bind="text: name()"></h3></div>
       <div class="card-body">
         <p>

+ 11 - 9
apps/oozie/src/oozie/templates/editor/import_workflow.mako

@@ -22,27 +22,26 @@
 <%namespace name="layout" file="../navigation-bar.mako" />
 <%namespace name="utils" file="../utils.inc.mako" />
 
-${ commonheader(_("Import Workflow"), "oozie", user, "100px") | n,unicode }
+${ commonheader(_("Import Workflow"), "oozie", user) | n,unicode }
 ${ layout.menubar(section='workflows') }
 
 
 <div class="container-fluid">
-  <h1>${ _('Import Workflow') }</h1>
+  <div class="card card-small">
+  <h1 class="card-heading simple">${ _('Import Workflow') }</h1>
+  <div class="card-body">
+    <p>
 
-    <div class="well">
       <p>${_("You can import an external Oozie workflow by providing the workflow definition file.")}</p>
       <p>
         ${ _('Supported workflow versions are 0.4. Other versions might work depending on their complexity.') }
       </p>
-    </div>
 
     <div style="min-height:300px">
       <form class="form-horizontal" id="workflowForm" action="${ url('oozie:import_workflow') }" method="POST" enctype="multipart/form-data">
 
       <div class="row-fluid">
-        <div class="span2">
-        </div>
-        <div class="span8">
+        <div class="span12">
           <fieldset>
           ${ utils.render_field(workflow_form['name']) }
           ${ utils.render_field(workflow_form['description']) }
@@ -73,15 +72,18 @@ ${ layout.menubar(section='workflows') }
          </fieldset>
         </div>
 
-        <div class="span2"></div>
       </div>
 
-      <div class="form-actions center">
+      <div class="form-actions" style="padding-left: 20px !important;">
         <input class="btn btn-primary" type="submit" value="${ _('Import') }" />
         <a class="btn" onclick="history.back()">${ _('Back') }</a>
       </div>
       </form>
     </div>
+
+    </p>
+  </div>
+</div>
 </div>
 
 ${ utils.path_chooser_libs(False) }

+ 2 - 2
apps/oozie/src/oozie/templates/editor/list_bundles.mako

@@ -24,7 +24,7 @@
 <%namespace name="layout" file="../navigation-bar.mako" />
 <%namespace name="utils" file="../utils.inc.mako" />
 
-${ commonheader(_("Bundles"), "oozie", user, "100px") | n,unicode }
+${ commonheader(_("Bundles"), "oozie", user) | n,unicode }
 ${ layout.menubar(section='bundles') }
 
 <style type="text/css">
@@ -34,7 +34,7 @@ ${ layout.menubar(section='bundles') }
 </style>
 
 <div class="container-fluid">
-  <div class="card">
+  <div class="card card-small">
   <h1 class="card-heading simple">${ _('Bundle Manager') }</h1>
 
   <%actionbar:render>

+ 2 - 2
apps/oozie/src/oozie/templates/editor/list_coordinators.mako

@@ -23,7 +23,7 @@
 <%namespace name="layout" file="../navigation-bar.mako" />
 <%namespace name="utils" file="../utils.inc.mako" />
 
-${ commonheader(_("Coordinators"), "oozie", user, "100px") | n,unicode }
+${ commonheader(_("Coordinators"), "oozie", user) | n,unicode }
 ${ layout.menubar(section='coordinators') }
 
 <style type="text/css">
@@ -33,7 +33,7 @@ ${ layout.menubar(section='coordinators') }
 </style>
 
 <div class="container-fluid">
-  <div class="card">
+  <div class="card card-small">
   <h1 class="card-heading simple">${ _('Coordinator Manager') }</h1>
 
   <%actionbar:render>

+ 12 - 8
apps/oozie/src/oozie/templates/editor/list_history.mako

@@ -24,19 +24,20 @@
 <%namespace name="layout" file="../navigation-bar.mako" />
 <%namespace name="utils" file="../utils.inc.mako" />
 
-${ commonheader(_("History"), "oozie", user, "100px") | n,unicode }
+${ commonheader(_("History"), "oozie", user) | n,unicode }
 ${ layout.menubar(section='history') }
 
 
 <div class="container-fluid">
-  <h1>${ _('Submission History') }</h1>
-  <div class="well hueWell">
-    <form class="form-search">
-      <input type="text" id="filterInput" class="input-xlarge search-query" placeholder="${ _('Search for username, name, etc...') }">
-    </form>
-  </div>
+  <div class="card card-small">
+  <h1 class="card-heading simple">${ _('Submission History') }</h1>
+    <div class="card-body">
+      <p>
+        <form class="form-search">
+          <input type="text" id="filterInput" class="input-xlarge search-query" placeholder="${ _('Search for username, name, etc...') }">
+        </form>
 
-  <table class="table table-condensed datatables" id="jobTable">
+        <table class="table table-condensed datatables" id="jobTable">
     <thead>
       <tr>
         <th width="10%">${ _('Submission Date') }</th>
@@ -61,6 +62,9 @@ ${ layout.menubar(section='history') }
     % endfor
     </tbody>
   </table>
+      </p>
+    </div>
+</div>
 </div>
 
 

+ 12 - 2
apps/oozie/src/oozie/templates/editor/list_history_record.mako

@@ -22,12 +22,18 @@
 <%namespace name="utils" file="../utils.inc.mako" />
 <%namespace name="layout" file="../navigation-bar.mako" />
 
-${ commonheader(_("History Record"), "oozie", user, "100px") | n,unicode }
+${ commonheader(_("History Record"), "oozie", user) | n,unicode }
 ${ layout.menubar(section='history') }
 
 
 <div class="container-fluid">
-  <h1>${ _('History') } ${ record.job.name }</h1>
+  <div class="card card-small">
+
+  <h1 class="card-heading simple">${ _('History') } ${ record.job.name }</h1>
+
+  <div class="card-body">
+    <p>
+
 
   <div>
     <h2>${ _('Details') }</h2>
@@ -79,6 +85,10 @@ ${ layout.menubar(section='history') }
   </div>
 
    <a href="${ url('oozie:list_history') }" class="btn">${ _('Back') }</a>
+
+    </p>
+  </div>
+</div>
 </div>
 
 ${ commonfooter(messages) | n,unicode }

+ 2 - 2
apps/oozie/src/oozie/templates/editor/list_trashed_bundles.mako

@@ -24,12 +24,12 @@
 <%namespace name="layout" file="../navigation-bar.mako" />
 <%namespace name="utils" file="../utils.inc.mako" />
 
-${ commonheader(_("Trashed Bundles"), "oozie", user, "100px") | n,unicode }
+${ commonheader(_("Trashed Bundles"), "oozie", user) | n,unicode }
 ${ layout.menubar(section='bundles') }
 
 
 <div class="container-fluid">
-  <div class="card">
+  <div class="card card-small">
   <h1 class="card-heading simple">${ _('Bundle Trash') }</h1>
 
   <%actionbar:render>

+ 2 - 2
apps/oozie/src/oozie/templates/editor/list_trashed_coordinators.mako

@@ -23,12 +23,12 @@
 <%namespace name="layout" file="../navigation-bar.mako" />
 <%namespace name="utils" file="../utils.inc.mako" />
 
-${ commonheader(_("Trashed Coordinators"), "oozie", user, "100px") | n,unicode }
+${ commonheader(_("Trashed Coordinators"), "oozie", user) | n,unicode }
 ${ layout.menubar(section='coordinators') }
 
 
 <div class="container-fluid">
-  <div class="card">
+  <div class="card card-small">
   <h1 class="card-heading simple">${ _('Coordinator Trash') }</h1>
 
   <%actionbar:render>

+ 2 - 2
apps/oozie/src/oozie/templates/editor/list_trashed_workflows.mako

@@ -23,12 +23,12 @@
 <%namespace name="layout" file="../navigation-bar.mako" />
 <%namespace name="utils" file="../utils.inc.mako" />
 
-${ commonheader(_("Trashed Workflows"), "oozie", user, "100px") | n,unicode }
+${ commonheader(_("Trashed Workflows"), "oozie", user) | n,unicode }
 ${ layout.menubar(section='workflows') }
 
 
 <div class="container-fluid">
-  <div class="card">
+  <div class="card card-small">
   <h1 class="card-heading simple">${ _('Workflow Trash') }</h1>
 
   <%actionbar:render>

+ 2 - 2
apps/oozie/src/oozie/templates/editor/list_workflows.mako

@@ -23,7 +23,7 @@
 <%namespace name="layout" file="../navigation-bar.mako" />
 <%namespace name="utils" file="../utils.inc.mako" />
 
-${ commonheader(_("Workflows"), "oozie", user, "100px") | n,unicode }
+${ commonheader(_("Workflows"), "oozie", user) | n,unicode }
 ${ layout.menubar(section='workflows') }
 
 <style type="text/css">
@@ -33,7 +33,7 @@ ${ layout.menubar(section='workflows') }
 </style>
 
 <div class="container-fluid">
-  <div class="card">
+  <div class="card card-small">
   <h1 class="card-heading simple">${ _('Workflow Manager') }</h1>
 
   <%actionbar:render>

+ 20 - 11
apps/oozie/src/oozie/templates/navigation-bar.mako

@@ -22,21 +22,30 @@
 
 
 <%def name="menubar(section='')">
-  <div class="subnav subnav-fixed">
-    <div class="container-fluid">
-      <ul class="nav nav-pills">
-        <li class="${utils.is_selected(section, 'dashboard')}"><a href="${url('oozie:list_oozie_workflows')}">${ _('Dashboard') }</a></li>
-        <li class="${utils.is_selected(section, 'workflows')}"><a href="${url('oozie:list_workflows')}">${ _('Workflows') }</a></li>
-        <li class="${utils.is_selected(section, 'coordinators')}"><a href="${url('oozie:list_coordinators')}">${ _('Coordinators') }</a></li>
-        <li class="${utils.is_selected(section, 'bundles')}"><a href="${url('oozie:list_bundles')}">${ _('Bundles') }</a></li>
-      </ul>
-    </div>
+    <div class="navbar navbar-inverse navbar-fixed-top">
+      <div class="navbar-inner">
+        <div class="container-fluid">
+          <div class="nav-collapse">
+            <ul class="nav">
+              <li class="currentApp">
+                <a href="/${app_name}">
+                  <img src="/oozie/static/art/icon_oozie_24.png" />
+                  ${ _('Oozie') }
+                </a>
+               </li>
+              <li class="${utils.is_selected(section, 'dashboard')}"><a href="${url('oozie:list_oozie_workflows')}">${ _('Dashboard') }</a></li>
+              <li class="${utils.is_selected(section, 'workflows')}"><a href="${url('oozie:list_workflows')}">${ _('Workflows') }</a></li>
+              <li class="${utils.is_selected(section, 'coordinators')}"><a href="${url('oozie:list_coordinators')}">${ _('Coordinators') }</a></li>
+              <li class="${utils.is_selected(section, 'bundles')}"><a href="${url('oozie:list_bundles')}">${ _('Bundles') }</a></li>
+            </ul>
+          </div>
+        </div>
+      </div>
   </div>
 </%def>
 
 <%def name="dashboard_sub_menubar(section='')">
-  <div class="card" style="padding-top:1px;margin-top:1px">
-##    <h1 class="card-heading simple">${ _('Dashboard') }</h1>
+  <div class="card card-small">
     <div class="card-body">
       <p>
         <ul class="nav nav-tabs">

+ 30 - 22
apps/pig/src/pig/templates/app.mako

@@ -20,22 +20,31 @@
 
 <%namespace name="actionbar" file="actionbar.mako" />
 
-${ commonheader(None, "pig", user, "100px") | n,unicode }
-
-<div class="subnav subnav-fixed">
-  <div class="container-fluid">
-    <ul class="nav nav nav-pills">
-      <li class="active"><a href="#editor" data-bind="css: { unsaved: isDirty }">${ _('Editor') }</a></li>
-      <li><a href="#scripts">${ _('Scripts') }</a></li>
-      <li><a href="#dashboard">${ _('Dashboard') }</a></li>
-    </ul>
-  </div>
+${ commonheader(None, "pig", user) | n,unicode }
+
+<div class="navbar navbar-inverse navbar-fixed-top">
+    <div class="navbar-inner">
+      <div class="container-fluid">
+        <div class="nav-collapse">
+          <ul class="nav">
+            <li class="currentApp">
+              <a href="/${app_name}">
+                <img src="/pig/static/art/icon_pig_24.png" />
+                ${ _('Pig Editor') }
+              </a>
+            </li>
+            <li class="active"><a href="#editor" data-bind="css: { unsaved: isDirty }">${ _('Editor') }</a></li>
+            <li><a href="#scripts">${ _('Scripts') }</a></li>
+            <li><a href="#dashboard">${ _('Dashboard') }</a></li>
+          </ul>
+        </div>
+      </div>
+    </div>
 </div>
 
-
 <div class="container-fluid">
   <div id="scripts" class="row-fluid mainSection hide">
-    <div class="card">
+    <div class="card card-small">
       <%actionbar:render>
         <%def name="search()">
             <input id="filter" type="text" class="input-xlarge search-query" placeholder="${_('Search for script name or content')}">
@@ -100,7 +109,7 @@ ${ commonheader(None, "pig", user, "100px") | n,unicode }
 
   <div id="editor" class="row-fluid mainSection hide">
     <div class="span2">
-      <div class="sidebar-nav">
+      <div class="sidebar-nav" style="padding-top: 0">
           <ul class="nav nav-list">
             <li class="nav-header">${_('Editor')}</li>
             <li data-bind="click: editScript" class="active" data-section="edit">
@@ -114,9 +123,6 @@ ${ commonheader(None, "pig", user, "100px") | n,unicode }
                 <i class="icon-save"></i> ${ _('Save') }
               </a>
             </li>
-            ##<li class="nav-header">${_('UDF')}</li>
-            ##<li><a href="#createDataset">${ _('Python') }</a></li>
-            ##<li><a href="#createDataset">${ _('Ruby') }</a></li>
             <li class="nav-header">${_('Run')}</li>
             <li data-bind="click: runOrShowSubmissionModal, visible: !currentScript().isRunning()">
               <a href="#" title="${ _('Run the script') }" rel="tooltip" data-placement="right">
@@ -169,7 +175,7 @@ ${ commonheader(None, "pig", user, "100px") | n,unicode }
         <div class="ribbon">${ _('Unsaved') }</div>
       </div>
 
-      <div class="card">
+      <div class="card card-small">
 
       <div id="edit" class="section">
         <div class="alert alert-info">
@@ -382,7 +388,7 @@ ${ commonheader(None, "pig", user, "100px") | n,unicode }
 
   <div id="dashboard" class="row-fluid mainSection hide">
 
-    <div class="card card-home">
+    <div class="card card-small">
       <h2 class="card-heading simple">${ _('Running') }</h2>
       <div class="card-body">
         <p>
@@ -406,7 +412,7 @@ ${ commonheader(None, "pig", user, "100px") | n,unicode }
       </div>
     </div>
 
-    <div class="card card-home">
+    <div class="card card-small">
       <h2 class="card-heading simple">${ _('Completed') }</h2>
       <div class="card-body">
         <p>
@@ -916,7 +922,7 @@ ${ commonheader(None, "pig", user, "100px") | n,unicode }
     $(window).on("resize", function () {
       window.clearTimeout(_resizeTimeout);
       _resizeTimeout = window.setTimeout(function () {
-        codeMirror.setSize("100%", $(window).height() - 276);
+        codeMirror.setSize("100%", $(window).height() - RESIZE_CORRECTION);
       }, 100);
     });
 
@@ -1010,10 +1016,12 @@ ${ commonheader(None, "pig", user, "100px") | n,unicode }
       resizeLogs();
     });
 
+    var RESIZE_CORRECTION = 246;
+
     function showMainSection(mainSection, includeGA) {
       window.setTimeout(function () {
         codeMirror.refresh();
-        codeMirror.setSize("100%", $(window).height() - 276);
+        codeMirror.setSize("100%", $(window).height() - RESIZE_CORRECTION);
       }, 100);
 
       if ($("#" + mainSection).is(":hidden")) {
@@ -1040,7 +1048,7 @@ ${ commonheader(None, "pig", user, "100px") | n,unicode }
     }
 
     function highlightMainMenu(mainSection) {
-      $(".nav-pills li").removeClass("active");
+      $(".navbar-fixed-top .nav li").removeClass("active");
       $("a[href='#" + mainSection + "']").parent().addClass("active");
     }
 

+ 1 - 1
apps/pig/static/css/pig.css

@@ -119,7 +119,7 @@
 }
 
 .unsaved {
-  border-bottom: 1px solid #C63D37;
+  border-color: #C63D37!important;
 }
 
 .editorError {

+ 1 - 1
apps/search/src/search/templates/admin_collection_facets.mako

@@ -22,7 +22,7 @@
 <%namespace name="layout" file="layout.mako" />
 <%namespace name="macros" file="macros.mako" />
 
-${ commonheader(_('Search'), "search", user, "40px") | n,unicode }
+${ commonheader(_('Search'), "search", user, "29px") | n,unicode }
 
 <%layout:skeleton>
   <%def name="title()">

+ 1 - 1
apps/search/src/search/templates/admin_collection_highlighting.mako

@@ -22,7 +22,7 @@
 <%namespace name="layout" file="layout.mako" />
 <%namespace name="macros" file="macros.mako" />
 
-${ commonheader(_('Search'), "search", user, "40px") | n,unicode }
+${ commonheader(_('Search'), "search", user, "29px") | n,unicode }
 
 <%layout:skeleton>
   <%def name="title()">

+ 1 - 1
apps/search/src/search/templates/admin_collection_properties.mako

@@ -24,7 +24,7 @@
 <%namespace name="utils" file="utils.inc.mako" />
 
 
-${ commonheader(_('Search'), "search", user, "40px") | n,unicode }
+${ commonheader(_('Search'), "search", user, "29px") | n,unicode }
 
 <%def name="indexProperty(key)">
   %if key in solr_collection["status"][hue_collection.name]["index"]:

+ 1 - 1
apps/search/src/search/templates/admin_collection_sorting.mako

@@ -22,7 +22,7 @@
 <%namespace name="layout" file="layout.mako" />
 <%namespace name="macros" file="macros.mako" />
 
-${ commonheader(_('Search'), "search", user, "40px") | n,unicode }
+${ commonheader(_('Search'), "search", user, "29px") | n,unicode }
 
 <%layout:skeleton>
   <%def name="title()">

+ 1 - 1
apps/search/src/search/templates/admin_collection_template.mako

@@ -22,7 +22,7 @@
 <%namespace name="layout" file="layout.mako" />
 <%namespace name="macros" file="macros.mako" />
 
-${ commonheader(_('Search'), "search", user, "40px") | n,unicode }
+${ commonheader(_('Search'), "search", user, "29px") | n,unicode }
 
 <style type="text/css">
   .CodeMirror {

+ 1 - 1
apps/search/src/search/templates/admin_collections.mako

@@ -22,7 +22,7 @@
 <%namespace name="macros" file="macros.mako" />
 <%namespace name="actionbar" file="actionbar.mako" />
 
-${ commonheader(_('Search'), "search", user, "40px") | n,unicode }
+${ commonheader(_('Search'), "search", user, "29px") | n,unicode }
 
 <link rel="stylesheet" href="/search/static/css/admin.css">
 

+ 1 - 1
apps/search/src/search/templates/search.mako

@@ -22,7 +22,7 @@ import urllib
 
 <%namespace name="macros" file="macros.mako" />
 
-${ commonheader(_('Search'), "search", user, "40px") | n,unicode }
+${ commonheader(_('Search'), "search", user, "29px") | n,unicode }
 
 <link rel="stylesheet" href="/search/static/css/search.css">
 <script src="/static/ext/js/moment.min.js" type="text/javascript" charset="utf-8"></script>

+ 0 - 1
apps/search/static/css/admin.css

@@ -90,7 +90,6 @@ h3 {
   padding-left: 20px;
   padding-right: 20px;
   text-align: left;
-  margin-top: 10px;
 }
 
 .search-bar h4 {

+ 0 - 1
apps/search/static/css/search.css

@@ -40,7 +40,6 @@
   padding-left: 20px;
   padding-right: 20px;
   text-align: left;
-  margin-top: 10px;
 }
 
 .search-bar input {

+ 3 - 3
apps/sqoop/src/sqoop/templates/app.mako

@@ -21,10 +21,10 @@
 
 <%namespace name="actionbar" file="actionbar.mako" />
 
-${ commonheader(None, "sqoop", user, "40px") | n,unicode }
+${ commonheader(None, "sqoop", user) | n,unicode }
 <div data-bind="if: !isLoading(), css: {'hide': isLoading}" id="top-bar-container" class="hide">
   <div class="top-bar" data-bind="visible:shownSection() == 'jobs-list'">
-    <div style="margin-top: 4px; margin-right: 20px" class="pull-right">
+    <div style="margin-top: 4px; margin-right: 40px" class="pull-right">
       <a title="${_('Create a new job')}" href="#job/new" data-bind="visible: isReady"><i class="icon-plus-sign"></i> ${_('New job')}</a>
     </div>
     <h4>${_('Sqoop Jobs')}</h4>
@@ -33,7 +33,7 @@ ${ commonheader(None, "sqoop", user, "40px") | n,unicode }
 
   <!-- ko if: job -->
   <div class="top-bar" data-bind="visible:shownSection() == 'job-editor', with: job">
-    <div style="margin-top: 4px; margin-right: 20px" class="pull-right">
+    <div style="margin-top: 4px; margin-right: 40px" class="pull-right">
       <a title="${_('Create a new job')}" href="#job/new"><i class="icon-plus-sign"></i> ${_('New job')}</a>
     </div>
     <h4 data-bind="visible: !persisted()"><a title="${_('Back to jobs list')}" href="#jobs">${_('Sqoop Jobs')}</a> <span class="muted">/</span> ${_('New Job')}</h4>

+ 3 - 1
apps/sqoop/static/css/sqoop.css

@@ -72,6 +72,9 @@ h1.emptyMessage {
 }
 
 .top-bar {
+  position: fixed;
+  top:28px;
+  width: 100%;
   background-color: #FAFAFA;
   border-bottom: 1px solid #E3E3E3;
   box-shadow: 0 1px 4px rgba(0, 0, 0, 0.067);
@@ -79,7 +82,6 @@ h1.emptyMessage {
   padding: 10px 20px;
   text-align: left;
   height: 30px;
-  margin-top: 10px;
 }
 
 .top-bar h4 {

+ 5 - 3
apps/useradmin/src/useradmin/templates/add_ldap_users.mako

@@ -22,12 +22,13 @@ from django.utils.translation import ugettext as _
 
 <%namespace name="layout" file="layout.mako" />
 
-${ commonheader(_('Hue Users'), "useradmin", user, "100px") | n,unicode }
-${layout.menubar(section='users', _=_)}
+${ commonheader(_('Hue Users'), "useradmin", user) | n,unicode }
+${ layout.menubar(section='users') }
 
 
 <div class="container-fluid">
-    <h1>${_('Hue Users - Add/Sync LDAP user')}</h1>
+  <div class="card card-small">
+    <h1 class="card-heading simple">${_('Hue Users - Add/Sync LDAP user')}</h1>
     <br/>
 
   <form id="editForm" method="POST" class="form form-horizontal" autocomplete="off">
@@ -51,6 +52,7 @@ ${layout.menubar(section='users', _=_)}
     </div>
   </form>
 </div>
+  </div>
 
 <script type="text/javascript" charset="utf-8">
   $(document).ready(function(){

+ 3 - 3
apps/useradmin/src/useradmin/templates/edit_group.mako

@@ -23,8 +23,8 @@ from django.utils.translation import ugettext as _
 
 <%namespace name="layout" file="layout.mako" />
 
-${ commonheader(_('Hue Groups'), "useradmin", user, "100px") | n,unicode }
-${layout.menubar(section='groups', _=_)}
+${ commonheader(_('Hue Groups'), "useradmin", user) | n,unicode }
+${layout.menubar(section='groups')}
 
 <%def name="render_field(field)">
   %if not field.is_hidden:
@@ -43,7 +43,7 @@ ${layout.menubar(section='groups', _=_)}
 
 
 <div class="container-fluid">
-  <div class="card">
+  <div class="card card-small">
     % if name:
         <h1 class="card-heading simple">${_('Hue Groups - Edit group: %(name)s') % dict(name=name)}</h1>
     % else:

+ 3 - 3
apps/useradmin/src/useradmin/templates/edit_permissions.mako

@@ -20,8 +20,8 @@ from django.utils.translation import ugettext as _
 %>
 <%namespace name="layout" file="layout.mako" />
 
-${ commonheader(_('Hue Permissions'), "useradmin", user, "100px") | n,unicode }
-${layout.menubar(section='permissions', _=_)}
+${ commonheader(_('Hue Permissions'), "useradmin", user) | n,unicode }
+${layout.menubar(section='permissions')}
 
 
 <%def name="render_field(field)">
@@ -40,7 +40,7 @@ ${layout.menubar(section='permissions', _=_)}
 </%def>
 
 <div class="container-fluid">
-  <div class="card">
+  <div class="card card-small">
     <h1 class="card-heading simple">${_('Hue Permissions - Edit app: %(app)s') % dict(app=app)}</h1>
     <br/>
 

+ 4 - 7
apps/useradmin/src/useradmin/templates/edit_user.mako

@@ -20,14 +20,11 @@ from django.utils.translation import ugettext as _
 
 <%namespace name="layout" file="layout.mako" />
 
-${ commonheader(_('Hue Users'), "useradmin", user, "100px") | n,unicode }
-
-% if user.is_superuser:
-  ${ layout.menubar(section='users', _=_) }
-% endif
+${ commonheader(_('Hue Users'), "useradmin", user) | n,unicode }
+${ layout.menubar(section='users') }
 
 <div class="container-fluid">
-  <div class="card">
+  <div class="card card-small">
     % if username:
       <h1 class="card-heading simple">${_('Hue Users - Edit user: %(username)s') % dict(username=username)}</h1>
     % else:
@@ -37,7 +34,7 @@ ${ commonheader(_('Hue Users'), "useradmin", user, "100px") | n,unicode }
     <br/>
     <form id="editForm" method="POST" class="form form-horizontal" autocomplete="off">
     <div id="properties" class="section">
-      <ul class="nav nav-tabs">
+      <ul class="nav nav-tabs" style="margin-bottom: 0">
         <li class="active"><a href="#step1" class="step">${ _('Step 1: Credentials (required)') }</a></li>
         <li><a href="#step2" class="step">${ user.is_superuser and _('Step 2: Names and Groups') or _('Step 2: Names') }</a>
         </li>

+ 27 - 10
apps/useradmin/src/useradmin/templates/layout.mako

@@ -18,6 +18,8 @@
 ## no spaces in this method please; we're declaring a CSS class, and ART uses this value for stuff, and it splits on spaces, and
 ## multiple spaces and line breaks cause issues
 <%!
+from django.utils.translation import ugettext as _
+
 def is_selected(section, matcher):
   if section == matcher:
     return "active"
@@ -44,18 +46,33 @@ def is_selected(section, matcher):
   %endif
 </%def>
 
-<%def name="menubar(section='', _=None)">
-	<div class="subnav subnav-fixed">
-		<div class="container-fluid">
-			<ul class="nav nav-pills">
-				<li class="${is_selected(section, 'users')}"><a href="/useradmin/users">${_('Users')}</a></li>
-				<li class="${is_selected(section, 'groups')}"><a href="/useradmin/groups">${_('Groups')}</a></li>
-				<li class="${is_selected(section, 'permissions')}"><a href="/useradmin/permissions">${_('Permissions')}</a></li>
-			</ul>
-		</div>
-	</div>
+
+<%def name="menubar(section='')">
+  <div class="navbar navbar-inverse navbar-fixed-top">
+      <div class="navbar-inner">
+        <div class="container-fluid">
+          <div class="nav-collapse">
+            <ul class="nav">
+              <li class="currentApp">
+                <a href="/${app_name}">
+                  <img src="/useradmin/static/art/icon_useradmin_24.png" />
+                  ${ _('User Admin') }
+                </a>
+              </li>
+              %if user.is_superuser:
+              <li class="${is_selected(section, 'users')}"><a href="/useradmin/users">${_('Users')}</a></li>
+				      <li class="${is_selected(section, 'groups')}"><a href="/useradmin/groups">${_('Groups')}</a></li>
+				      <li class="${is_selected(section, 'permissions')}"><a href="/useradmin/permissions">${_('Permissions')}</a></li>
+              %endif
+            </ul>
+          </div>
+        </div>
+      </div>
+  </div>
 </%def>
 
+
+
 <%def name="commons()">
 
   <link href="/useradmin/static/css/useradmin.css" rel="stylesheet">

+ 3 - 3
apps/useradmin/src/useradmin/templates/list_groups.mako

@@ -22,11 +22,11 @@ from useradmin.models import group_permissions
 
 <%namespace name="actionbar" file="actionbar.mako" />
 <%namespace name="layout" file="layout.mako" />
-${ commonheader(_('Hue Groups'), "useradmin", user, "100px") | n,unicode }
-${layout.menubar(section='groups', _=_)}
+${ commonheader(_('Hue Groups'), "useradmin", user) | n,unicode }
+${layout.menubar(section='groups')}
 
 <div class="container-fluid">
-  <div class="card">
+  <div class="card card-small">
     <h1 class="card-heading simple">${_('Hue Groups')}</h1>
 
     <%actionbar:render>

+ 3 - 3
apps/useradmin/src/useradmin/templates/list_permissions.mako

@@ -23,11 +23,11 @@ from django.contrib.auth.models import Group
 
 <%namespace name="actionbar" file="actionbar.mako" />
 <%namespace name="layout" file="layout.mako" />
-${ commonheader(_('Hue Permissions'), "useradmin", user, "100px") | n,unicode }
-${layout.menubar(section='permissions', _=_)}
+${ commonheader(_('Hue Permissions'), "useradmin", user) | n,unicode }
+${layout.menubar(section='permissions')}
 
 <div class="container-fluid">
-  <div class="card">
+  <div class="card card-small">
     <h1 class="card-heading simple">${_('Hue Permissions')}</h1>
     <%actionbar:render>
       <%def name="search()">

+ 3 - 3
apps/useradmin/src/useradmin/templates/list_users.mako

@@ -22,11 +22,11 @@ from django.utils.translation import ugettext as _
 
 <%namespace name="actionbar" file="actionbar.mako" />
 <%namespace name="layout" file="layout.mako" />
-${ commonheader(_('Hue Users'), "useradmin", user, "100px") | n,unicode }
-${layout.menubar(section='users', _=_)}
+${ commonheader(_('Hue Users'), "useradmin", user) | n,unicode }
+${layout.menubar(section='users')}
 
 <div class="container-fluid">
-  <div class="card">
+  <div class="card card-small">
     <h1 class="card-heading simple">${_('Hue Users')}</h1>
 
     <%actionbar:render>

+ 9 - 18
apps/useradmin/static/css/useradmin.css

@@ -25,10 +25,6 @@
   box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);
 }
 
-.pull-right {
-  margin: 4px;
-}
-
 .sortable {
   cursor: pointer;
 }
@@ -52,11 +48,6 @@ input[type=submit] {
   margin-left: 50px;
 }
 
-.nav {
-  margin-bottom: 0;
-  margin-top: 20px;
-}
-
 .nav-tabs .active {
   font-weight: bold;
 }
@@ -66,12 +57,12 @@ input[type=submit] {
 }
 
 @media all and (max-height: 800px) {
-    .form-actions {
-      position: fixed;
-      bottom: 0;
-      left: 0;
-      width: 100%;
-      margin: 0;
-      padding-left: 20px !important;
-    }
-  }
+  .form-actions {
+    position: fixed;
+    bottom: 0;
+    left: 0;
+    width: 100%;
+    margin: 0;
+    padding-left: 20px !important;
+  }
+}

+ 3 - 2
apps/zookeeper/src/zookeeper/templates/clients.mako

@@ -21,10 +21,11 @@
 
 <%namespace name="shared" file="shared_components.mako" />
 
-${ commonheader(_('Clients'), app_name, user, '60px') | n,unicode }
+${ commonheader(_('Clients'), app_name, user) | n,unicode }
+${ shared.menubar() }
 <%
   _breadcrumbs = [
-    ["ZooKeeper Browser", url('zookeeper:index')],
+    [_("Home"), url('zookeeper:index')],
     [cluster['nice_name'].lower(), url('zookeeper:view', id=cluster['id'])],
     [host + ":" + port, url('zookeeper:clients', id=cluster['id'], host=host + ":" + port)]
   ]

+ 3 - 2
apps/zookeeper/src/zookeeper/templates/create.mako

@@ -21,11 +21,12 @@
 
 <%namespace name="shared" file="shared_components.mako" />
 
-${ commonheader("ZooKeeper Browser > Create Znode", app_name, user, '60px') | n,unicode }
+${ commonheader("ZooKeeper Browser > Create Znode", app_name, user) | n,unicode }
+${ shared.menubar() }
 <%
   _split = path.split("/");
   _breadcrumbs = [
-    ["ZooKeeper Browser", url('zookeeper:index')],
+    [_("Home"), url('zookeeper:index')],
     [cluster['nice_name'].lower(), url('zookeeper:view', id=cluster['id'])],
   ]
   for idx, p in enumerate(_split):

+ 3 - 2
apps/zookeeper/src/zookeeper/templates/edit.mako

@@ -21,12 +21,13 @@
 
 <%namespace name="shared" file="shared_components.mako" />
 
-${ commonheader("ZooKeeper Browser > Edit Znode > %s" % path, app_name, user, '60px') | n,unicode }
+${ commonheader("ZooKeeper Browser > Edit Znode > %s" % path, app_name, user) | n,unicode }
+${ shared.menubar() }
 
 <%
   _split = path.split("/");
   _breadcrumbs = [
-    ["ZooKeeper Browser", url('zookeeper:index')],
+    [_("Home"), url('zookeeper:index')],
     [cluster['nice_name'].lower(), url('zookeeper:view', id=cluster['id'])],
   ]
   for idx, p in enumerate(_split):

+ 19 - 6
apps/zookeeper/src/zookeeper/templates/index.mako

@@ -21,17 +21,30 @@
 
 <%namespace name="shared" file="shared_components.mako" />
 
-${ commonheader(_('View'), app_name, user, '60px') | n,unicode }
+${ commonheader(_('View'), app_name, user) | n,unicode }
+${ shared.menubar() }
 
 <%
   _breadcrumbs = [
-    ["ZooKeeper Browser", url('zookeeper:index')]
+    ["Home", url('zookeeper:index')]
   ]
 %>
 
-
+%if len(clusters)==0:
+  <div class="container-fluid">
+    <div class="card">
+      <h1 class="card-heading simple">${ _('There are currently no clusters to browse.') }</h1>
+    <div class="card-body">
+      <p>
+        ${ _('Please contact your administrator to solve this.') }
+        <br/>
+        <br/>
+      </p>
+    </div>
+    </div>
+  </div>
+%else:
 ${ shared.header(_breadcrumbs, clusters) }
-
 % for c in clusters:
   <h3 class="card-heading simple simpler">${ _('Cluster') } ${ c }</h3>
   <p>
@@ -61,9 +74,9 @@ ${ shared.header(_breadcrumbs, clusters) }
     </tbody>
   </table>
 % endfor
-
-
 ${ shared.footer() }
+%endif
+
 
 <script type="text/javascript" charset="utf-8">
   $(document).ready(function () {

+ 20 - 1
apps/zookeeper/src/zookeeper/templates/shared_components.mako

@@ -22,7 +22,7 @@
 <%def name="header(breadcrumbs, clusters, withBody=True)">
   <div class="container-fluid">
   <div class="row-fluid">
-    <div class="card">
+    <div class="card card-small">
       <h1 class="card-heading simple">
         <div class="btn-group pull-right">
           <a class="btn dropdown-toggle" data-toggle="dropdown" href="#">
@@ -69,3 +69,22 @@
 <script src="/zookeeper/static/js/base64.js" type="text/javascript" charset="utf-8"></script>
 </%def>
 
+<%def name="menubar()">
+  <div class="navbar navbar-inverse navbar-fixed-top nokids">
+      <div class="navbar-inner">
+        <div class="container-fluid">
+          <div class="nav-collapse">
+            <ul class="nav">
+              <li class="currentApp">
+                <a href="/${app_name}">
+                  <img src="/zookeeper/static/art/icon_24.png" />
+                  ${ _('ZooKeeper Browser') }
+                </a>
+               </li>
+            </ul>
+          </div>
+        </div>
+      </div>
+  </div>
+</%def>
+

+ 3 - 2
apps/zookeeper/src/zookeeper/templates/tree.mako

@@ -21,12 +21,13 @@
 
 <%namespace name="shared" file="shared_components.mako" />
 
-${ commonheader("ZooKeeper Browser > Tree > %s > %s" % (cluster['nice_name'], path), app_name, user, '60px') | n,unicode }
+${ commonheader("ZooKeeper Browser > Tree > %s > %s" % (cluster['nice_name'], path), app_name, user) | n,unicode }
+${ shared.menubar() }
 
 <%
   _split = path.split("/");
   _breadcrumbs = [
-    ["ZooKeeper Browser", url('zookeeper:index')],
+    [_("Home"), url('zookeeper:index')],
     [cluster['nice_name'].lower(), url('zookeeper:view', id=cluster['id'])],
   ]
   for idx, p in enumerate(_split):

+ 3 - 2
apps/zookeeper/src/zookeeper/templates/view.mako

@@ -21,11 +21,12 @@
 
 <%namespace name="shared" file="shared_components.mako" />
 
-${ commonheader(_('View'), app_name, user, '60px') | n,unicode }
+${ commonheader(_('View'), app_name, user) | n,unicode }
+${ shared.menubar() }
 
 <%
   _breadcrumbs = [
-    ["ZooKeeper Browser", url('zookeeper:index')],
+    [_("Home"), url('zookeeper:index')],
     [cluster['nice_name'].lower(), url('zookeeper:view', id=cluster['id'])]
   ]
 %>

+ 8 - 4
desktop/core/src/desktop/app_template/src/app_name/templates/index.mako

@@ -16,15 +16,19 @@
 ${'<'}%!from desktop.views import commonheader, commonfooter %>
 ${'<'}%namespace name="shared" file="shared_components.mako" />
 
-${'$'}{commonheader("${" ".join(word.capitalize() for word in app_name.split("_"))}", "${app_name}", user, "100px") | n,unicode}
+${'$'}{commonheader("${" ".join(word.capitalize() for word in app_name.split("_"))}", "${app_name}", user) | n,unicode}
 ${'$'}{shared.menubar(section='mytab')}
 
 ${'#'}# Use double hashes for a mako template comment
 ${'#'}# Main body
 
 <div class="container-fluid">
-  <h2>${" ".join(word.capitalize() for word in app_name.split("_"))} app is successfully setup!</h2>
-  ## Pass through literal $
-  <p>It's now ${'$'}{date}.</p>
+  <div class="card">
+    <h2 class="card-heading simple">${" ".join(word.capitalize() for word in app_name.split("_"))} app is successfully setup!</h2>
+    <div class="card-body">
+      ## Pass through literal $
+      <p>It's now ${'$'}{date}.</p>
+    </div>
+  </div>
 </div>
 ${'$'}{commonfooter(messages) | n,unicode}

+ 16 - 6
desktop/core/src/desktop/app_template/src/app_name/templates/shared_components.mako

@@ -23,12 +23,22 @@ def is_selected(section, matcher):
 ${'%>'}
 
 ${'<%'}def name="menubar(section='')">
-  <div class="subnav subnav-fixed">
-    <div class="container-fluid">
-      <ul class="nav nav-pills">
-        <li class="${'$'}{is_selected(section, 'mytab')}"><a href="#">Tab 1</a></li>
-        <li class="${'$'}{is_selected(section, 'mytab2')}"><a href="#">Tab 2</a></li>
-      </ul>
+  <div class="navbar navbar-inverse navbar-fixed-top nokids">
+    <div class="navbar-inner">
+      <div class="container-fluid">
+        <div class="nav-collapse">
+          <ul class="nav">
+            <li class="currentApp">
+              <a href="/${app_name}">
+                <img src="/${app_name}/static/art/icon_${app_name}_24.png" />
+                ${" ".join(word.capitalize() for word in app_name.split("_"))}
+              </a>
+             </li>
+             <li class="${'$'}{is_selected(section, 'mytab')}"><a href="#">Tab 1</a></li>
+             <li class="${'$'}{is_selected(section, 'mytab2')}"><a href="#">Tab 2</a></li>
+          </ul>
+        </div>
+      </div>
     </div>
   </div>
 ${'</%'}def>

+ 8 - 0
desktop/core/src/desktop/appmanager.py

@@ -194,6 +194,14 @@ class DesktopModuleInfo(object):
 def get_apps(user):
   return filter(lambda app: user.has_hue_permission(action="access", app=app.display_name), DESKTOP_APPS)
 
+def get_apps_dict(user=None):
+  if user is not None:
+    apps = get_apps(user)
+  else:
+    apps = DESKTOP_APPS
+
+  return dict([(app.name, app) for app in apps])
+
 def load_libs():
   global DESKTOP_MODULES
   global DESKTOP_LIBS

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác