diff options
-rw-r--r-- | app/assets/javascripts/main.js | 3 | ||||
-rw-r--r-- | app/assets/stylesheets/framework/header.scss | 9 | ||||
-rw-r--r-- | app/assets/stylesheets/new_nav.scss | 123 | ||||
-rw-r--r-- | app/helpers/application_helper.rb | 4 | ||||
-rw-r--r-- | app/views/layouts/_head.html.haml | 3 | ||||
-rw-r--r-- | app/views/layouts/application.html.haml | 5 | ||||
-rw-r--r-- | app/views/layouts/header/_new.html.haml | 93 | ||||
-rw-r--r-- | app/views/layouts/nav/_new_dashboard.html.haml | 30 | ||||
-rw-r--r-- | config/application.rb | 1 |
9 files changed, 266 insertions, 5 deletions
diff --git a/app/assets/javascripts/main.js b/app/assets/javascripts/main.js index ed7629948ca..ee48fcc2139 100644 --- a/app/assets/javascripts/main.js +++ b/app/assets/javascripts/main.js @@ -299,9 +299,10 @@ $(function () { // Commit show suppressed diff }); $('.navbar-toggle').on('click', function () { - $('.header-content .title').toggle(); + $('.header-content .title, .header-content .navbar-sub-nav').toggle(); $('.header-content .header-logo').toggle(); $('.header-content .navbar-collapse').toggle(); + $('.js-navbar-toggle-left, .js-navbar-toggle-right').toggle(); return $('.navbar-toggle').toggleClass('active'); }); // Show/hide comments on diff diff --git a/app/assets/stylesheets/framework/header.scss b/app/assets/stylesheets/framework/header.scss index d8645afb7da..e7d58449cec 100644 --- a/app/assets/stylesheets/framework/header.scss +++ b/app/assets/stylesheets/framework/header.scss @@ -34,6 +34,8 @@ header { top: 0; left: 0; right: 0; + color: $gl-text-color-secondary; + border-radius: 0; @media (max-width: $screen-xs-min) { padding: 0 16px; @@ -59,7 +61,7 @@ header { padding: 0; .nav > li > a { - color: $gl-text-color-secondary; + color: currentColor; font-size: 18px; padding: 0; margin: (($header-height - 28) / 2) 3px; @@ -84,7 +86,7 @@ header { &:hover, &:focus, &:active { - background-color: $gray-light; + background-color: transparent; color: $gl-text-color; svg { @@ -102,7 +104,7 @@ header { height: 17px; // hack to get SVG to line up with FA icons width: 23px; - fill: $gl-text-color-secondary; + fill: currentColor; } } @@ -346,6 +348,7 @@ header { width: auto; min-width: 140px; margin-top: -5px; + color: $gl-text-color; .current-user { padding: 5px 18px; diff --git a/app/assets/stylesheets/new_nav.scss b/app/assets/stylesheets/new_nav.scss new file mode 100644 index 00000000000..f99604a7913 --- /dev/null +++ b/app/assets/stylesheets/new_nav.scss @@ -0,0 +1,123 @@ +@import "framework/variables"; +@import 'framework/tw_bootstrap_variables'; +@import "bootstrap/variables"; + +header.navbar-gitlab-new { + color: #f5f5f5; + background-color: #2d2d2d; + + .header-content { + padding-left: 0; + + .title-container { + padding-top: 0; + overflow: visible; + } + + .title { + padding-top: 14px; + padding-right: 10px; + color: currentColor; + + @media (min-width: $screen-sm-min) { + padding-right: 20px; + } + } + + .dropdown.open { + > a { + border-bottom-color: #4180ec; + } + } + + .dropdown-menu { + margin-top: 4px; + min-width: 130px; + } + } + + .navbar-collapse { + color: #d5d5d5; + } + + .container-fluid { + .navbar-toggle { + border-left: 1px solid currentColor; + + &:hover, + &:focus, + &.active { + color: currentColor; + background-color: transparent; + } + } + + .navbar-toggle-left { + right: 0; + border-left: 0; + border-right: 1px solid currentColor; + } + + .navbar-nav { + @media (max-width: $screen-xs-max) { + padding-right: 10px; + } + } + + .nav > li > a:hover, + .nav > li > a:focus { + color: #f5f5f5; + + > svg { + fill: #f5f5f5; + } + } + } +} + +.navbar-sub-nav { + display: flex; + margin-bottom: 0; + color: #d5d5d5; + + > li { + &.active > a { + border-bottom-color: #4180ec; + } + + > a { + display: block; + padding: 16px 9px 13px; + font-size: 13px; + color: currentColor; + border-bottom: 3px solid transparent; + + @media (min-width: $screen-sm-min) { + padding: 15px 15px 12px; + font-size: 14px; + } + + &:hover, + &:focus { + color: #f5f5f5; + text-decoration: none; + } + } + } + + .dropdown-chevron { + font-size: 12px; + } +} + +.search { + form, + .search-input { + background-color: #525252; + } + + .search-input, + .search-input::placeholder { + color: #f5f5f5; + } +} diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index a3b243fccb7..46be72ad81c 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -300,4 +300,8 @@ module ApplicationHelper "https://www.twitter.com/#{name}" end end + + def show_new_nav? + cookies["new_nav"] == "true" + end end diff --git a/app/views/layouts/_head.html.haml b/app/views/layouts/_head.html.haml index eea33b5966f..f7a1d7e8844 100644 --- a/app/views/layouts/_head.html.haml +++ b/app/views/layouts/_head.html.haml @@ -30,6 +30,9 @@ = stylesheet_link_tag "test", media: "all" if Rails.env.test? = stylesheet_link_tag 'peek' if peek_enabled? + - if show_new_nav? + = stylesheet_link_tag "new_nav", media: "all" + = Gon::Base.render_data = webpack_bundle_tag "runtime" diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml index 2b07273a0a8..d879df8fc82 100644 --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml @@ -4,7 +4,10 @@ %body{ class: @body_class, data: { page: body_data_page, project: "#{@project.path if @project}", group: "#{@group.path if @group}" } } = render "layouts/init_auto_complete" if @gfm_form = render 'peek/bar' - = render "layouts/header/default", title: header_title + - if show_new_nav? + = render "layouts/header/new" + - else + = render "layouts/header/default", title: header_title = render 'layouts/page', sidebar: sidebar, nav: nav = yield :scripts_body diff --git a/app/views/layouts/header/_new.html.haml b/app/views/layouts/header/_new.html.haml new file mode 100644 index 00000000000..1ae89f4a4b6 --- /dev/null +++ b/app/views/layouts/header/_new.html.haml @@ -0,0 +1,93 @@ +%header.navbar.navbar-gitlab.navbar-gitlab-new{ class: nav_header_class } + %a.sr-only.gl-accessibility{ href: "#content-body", tabindex: "1" } Skip to content + .container-fluid + .header-content + .header-logo + = link_to root_path, class: 'home', title: 'Dashboard', id: 'logo' do + = brand_header_logo + + .title-container + %h1.title + GitLab + + - if current_user + = render "layouts/nav/new_dashboard" + + %button.navbar-toggle.navbar-toggle-left.hide.hidden-sm.hidden-md.hidden-lg.js-navbar-toggle-left{ type: 'button' } + %span.sr-only Toggle navigation + = icon('chevron-left') + + .navbar-collapse.collapse + %ul.nav.navbar-nav + %li.hidden-sm.hidden-xs + = render 'layouts/search' unless current_controller?(:search) + %li.visible-sm-inline-block.visible-xs-inline-block + = link_to search_path, title: 'Search', aria: { label: "Search" }, data: {toggle: 'tooltip', placement: 'bottom', container: 'body'} do + = icon('search') + - if current_user + - if session[:impersonator_id] + %li.impersonation + = link_to admin_impersonation_path, method: :delete, title: "Stop impersonation", aria: { label: 'Stop impersonation' }, data: { toggle: 'tooltip', placement: 'bottom', container: 'body' } do + = icon('user-secret fw') + - if current_user.admin? + %li + = link_to admin_root_path, title: 'Admin area', aria: { label: "Admin area" }, data: {toggle: 'tooltip', placement: 'bottom', container: 'body'} do + = icon('wrench fw') + = render 'layouts/header/new_dropdown' + - if Gitlab::Sherlock.enabled? + %li + = link_to sherlock_transactions_path, title: 'Sherlock Transactions', + data: {toggle: 'tooltip', placement: 'bottom', container: 'body'} do + = icon('tachometer fw') + %li + = link_to assigned_issues_dashboard_path, title: 'Issues', aria: { label: "Issues" }, data: {toggle: 'tooltip', placement: 'bottom', container: 'body'} do + = icon('hashtag fw') + - issues_count = assigned_issuables_count(:issues) + %span.badge.issues-count{ class: ('hidden' if issues_count.zero?) } + = number_with_delimiter(issues_count) + %li + = link_to assigned_mrs_dashboard_path, title: 'Merge requests', aria: { label: "Merge requests" }, data: {toggle: 'tooltip', placement: 'bottom', container: 'body'} do + = custom_icon('mr_bold') + - merge_requests_count = assigned_issuables_count(:merge_requests) + %span.badge.merge-requests-count{ class: ('hidden' if merge_requests_count.zero?) } + = number_with_delimiter(merge_requests_count) + %li + = link_to dashboard_todos_path, title: 'Todos', aria: { label: "Todos" }, class: 'shortcuts-todos', data: {toggle: 'tooltip', placement: 'bottom', container: 'body'} do + = icon('check-circle fw') + %span.badge.todos-count{ class: ('hidden' if todos_pending_count.zero?) } + = todos_count_format(todos_pending_count) + %li.header-user.dropdown + = link_to current_user, class: "header-user-dropdown-toggle", data: { toggle: "dropdown" } do + = image_tag avatar_icon(current_user, 26), width: 26, height: 26, class: "header-user-avatar" + = icon('caret-down') + .dropdown-menu-nav.dropdown-menu-align-right + %ul + %li.current-user + .user-name.bold + = current_user.name + @#{current_user.username} + %li.divider + %li + = link_to "Profile", current_user, class: 'profile-link', data: { user: current_user.username } + %li + = link_to "Settings", profile_path + %li.divider + %li + = link_to "Sign out", destroy_user_session_path, method: :delete, class: "sign-out-link" + - else + %li + %div + = link_to "Sign in", new_session_path(:user, redirect_to_referer: 'yes'), class: 'btn btn-sign-in btn-success' + + %button.navbar-toggle.hidden-sm.hidden-md.hidden-lg.js-navbar-toggle-right{ type: 'button' } + %span.sr-only Toggle navigation + = icon('chevron-right') + + = yield :header_content + += render 'shared/outdated_browser' + +- if @project && !@project.empty_repo? + - if ref = @ref || @project.repository.root_ref + :javascript + var findFileURL = "#{namespace_project_find_file_path(@project.namespace, @project, ref)}"; diff --git a/app/views/layouts/nav/_new_dashboard.html.haml b/app/views/layouts/nav/_new_dashboard.html.haml new file mode 100644 index 00000000000..698148d4265 --- /dev/null +++ b/app/views/layouts/nav/_new_dashboard.html.haml @@ -0,0 +1,30 @@ +%ul.list-unstyled.navbar-sub-nav + = nav_link(path: ['root#index', 'projects#trending', 'projects#starred', 'dashboard/projects#index'], html_options: {class: "#{project_tab_class} home"}) do + = link_to dashboard_projects_path, title: 'Projects', class: 'dashboard-shortcuts-projects' do + Projects + + = nav_link(controller: [:groups, 'groups/milestones', 'groups/group_members']) do + = link_to dashboard_groups_path, class: 'dashboard-shortcuts-groups', title: 'Groups' do + Groups + + = nav_link(path: 'dashboard#activity', html_options: { class: "hidden-xs hidden-sm" }) do + = link_to activity_dashboard_path, class: 'dashboard-shortcuts-activity', title: 'Activity' do + Activity + + %li.dropdown + %a{ href: "#", data: { toggle: "dropdown" } } + More + = icon("chevron-down", class: "dropdown-chevron") + .dropdown-menu + %ul + = nav_link(path: 'dashboard#activity', html_options: { class: "visible-xs visible-sm" }) do + = link_to activity_dashboard_path, title: 'Activity' do + Activity + + = nav_link(controller: 'dashboard/milestones') do + = link_to dashboard_milestones_path, class: 'dashboard-shortcuts-milestones', title: 'Milestones' do + Milestones + + = nav_link(controller: 'dashboard/snippets') do + = link_to dashboard_snippets_path, class: 'dashboard-shortcuts-snippets', title: 'Snippets' do + Snippets diff --git a/config/application.rb b/config/application.rb index 8bbecf3ed0f..12242c3b0f5 100644 --- a/config/application.rb +++ b/config/application.rb @@ -109,6 +109,7 @@ module Gitlab config.assets.precompile << "lib/ace.js" config.assets.precompile << "vendor/assets/fonts/*" config.assets.precompile << "test.css" + config.assets.precompile << "new_nav.css" # Version of your assets, change this if you want to expire all your assets config.assets.version = '1.0' |