diff options
author | Rubén Dávila <ruben@gitlab.com> | 2017-08-16 18:29:04 -0500 |
---|---|---|
committer | Rubén Dávila <ruben@gitlab.com> | 2017-08-16 18:29:04 -0500 |
commit | a3fbe3fedeb700f43bfa0de7e9113b3cff943c4e (patch) | |
tree | 4075549fa4b898c1187e8adecd112cea50ee880b /app | |
parent | 72d5165bd57472692c77d6a9d159e65058513bf3 (diff) | |
download | gitlab-ce-revert-merge-request-9199.tar.gz |
WIP: Revert "Merge branch '26200-convert-sidebar-to-dropdown' into 'master'"revert-merge-request-9199
This reverts commit aa792b91bbddeeb61ce77f9525fcaf238a9ad331, reversing
changes made to 5d8f5328baca93b9134f10ae593e71834578a9f8.
Conflicts:
app/assets/javascripts/application.js
app/assets/javascripts/right_sidebar.js
app/assets/stylesheets/framework.scss
app/assets/stylesheets/framework/header.scss
app/assets/stylesheets/framework/sidebar.scss
app/assets/stylesheets/framework/variables.scss
app/assets/stylesheets/pages/issuable.scss
app/assets/stylesheets/print.scss
app/controllers/profiles/preferences_controller.rb
app/helpers/nav_helper.rb
app/models/user.rb
app/views/layouts/_page.html.haml
app/views/layouts/application.html.haml
app/views/layouts/header/_default.html.haml
app/views/layouts/nav/_dashboard.html.haml
app/views/profiles/preferences/show.html.haml
db/schema.rb
doc/api/users.md
spec/features/dashboard/active_tab_spec.rb
spec/features/dashboard/issuables_counter_spec.rb
spec/features/dashboard/shortcuts_spec.rb
spec/features/profiles/preferences_spec.rb
spec/fixtures/api/schemas/user/public.json
spec/models/user_spec.rb
Please enter the commit message for your changes. Lines starting
with '#' will be ignored, and an empty message aborts the commit.
On branch revert-merge-request-9199
You are currently reverting commit aa792b91bb.
Diffstat (limited to 'app')
24 files changed, 722 insertions, 9 deletions
diff --git a/app/assets/javascripts/project_label_subscription.js b/app/assets/javascripts/project_label_subscription.js index 0a811627600..8365f7118d5 100644 --- a/app/assets/javascripts/project_label_subscription.js +++ b/app/assets/javascripts/project_label_subscription.js @@ -38,15 +38,13 @@ this.$buttons.attr('data-status', newStatus); this.$buttons.find('> span').text(newAction); - this.$buttons.map((button) => { + for (const button of this.$buttons) { const $button = $(button); if ($button.attr('data-original-title')) { $button.tooltip('hide').attr('data-original-title', newAction).tooltip('fixTitle'); } - - return button; - }); + } }); } } diff --git a/app/assets/javascripts/right_sidebar.js b/app/assets/javascripts/right_sidebar.js index fa958d75fa4..668277ef111 100644 --- a/app/assets/javascripts/right_sidebar.js +++ b/app/assets/javascripts/right_sidebar.js @@ -23,15 +23,22 @@ import SidebarHeightManager from './sidebar_height_manager'; }; Sidebar.prototype.addEventListeners = function() { +<<<<<<< HEAD SidebarHeightManager.init(); const $document = $(document); +======= +>>>>>>> parent of aa792b91bb... Merge branch '26200-convert-sidebar-to-dropdown' into 'master' this.sidebar.on('click', '.sidebar-collapsed-icon', this, this.sidebarCollapseClicked); $('.dropdown').on('hidden.gl.dropdown', this, this.onSidebarDropdownHidden); $('.dropdown').on('loading.gl.dropdown', this.sidebarDropdownLoading); $('.dropdown').on('loaded.gl.dropdown', this.sidebarDropdownLoaded); +<<<<<<< HEAD $document.on('click', '.js-sidebar-toggle', function(e, triggered) { +======= + $(document).on('click', '.js-sidebar-toggle', function(e, triggered) { +>>>>>>> parent of aa792b91bb... Merge branch '26200-convert-sidebar-to-dropdown' into 'master' var $allGutterToggleIcons, $this, $thisIcon; e.preventDefault(); $this = $(this); diff --git a/app/assets/javascripts/sidebar.js.es6 b/app/assets/javascripts/sidebar.js.es6 new file mode 100644 index 00000000000..33e4b7db681 --- /dev/null +++ b/app/assets/javascripts/sidebar.js.es6 @@ -0,0 +1,111 @@ +/* eslint-disable arrow-parens, class-methods-use-this, no-param-reassign */ +/* global Cookies */ + +(() => { + const pinnedStateCookie = 'pin_nav'; + const sidebarBreakpoint = 1024; + + const pageSelector = '.page-with-sidebar'; + const navbarSelector = '.navbar-gitlab'; + const sidebarWrapperSelector = '.sidebar-wrapper'; + const sidebarContentSelector = '.nav-sidebar'; + + const pinnedToggleSelector = '.js-nav-pin'; + const sidebarToggleSelector = '.toggle-nav-collapse, .side-nav-toggle'; + + const pinnedPageClass = 'page-sidebar-pinned'; + const expandedPageClass = 'page-sidebar-expanded'; + + const pinnedNavbarClass = 'header-sidebar-pinned'; + const expandedNavbarClass = 'header-sidebar-expanded'; + + class Sidebar { + constructor() { + if (!Sidebar.singleton) { + Sidebar.singleton = this; + Sidebar.singleton.init(); + } + + return Sidebar.singleton; + } + + init() { + this.isPinned = Cookies.get(pinnedStateCookie) === 'true'; + this.isExpanded = ( + window.innerWidth >= sidebarBreakpoint && + $(pageSelector).hasClass(expandedPageClass) + ); + $(window).on('resize', () => this.setSidebarHeight()); + $(document) + .on('click', sidebarToggleSelector, () => this.toggleSidebar()) + .on('click', pinnedToggleSelector, () => this.togglePinnedState()) + .on('click', 'html, body, a, button', (e) => this.handleClickEvent(e)) + .on('DOMContentLoaded', () => this.renderState()) + .on('scroll', () => this.setSidebarHeight()) + .on('todo:toggle', (e, count) => this.updateTodoCount(count)); + this.renderState(); + this.setSidebarHeight(); + } + + handleClickEvent(e) { + if (this.isExpanded && (!this.isPinned || window.innerWidth < sidebarBreakpoint)) { + const $target = $(e.target); + const targetIsToggle = $target.closest(sidebarToggleSelector).length > 0; + const targetIsSidebar = $target.closest(sidebarWrapperSelector).length > 0; + if (!targetIsToggle && (!targetIsSidebar || $target.closest('a'))) { + this.toggleSidebar(); + } + } + } + + updateTodoCount(count) { + $('.js-todos-count').text(gl.text.addDelimiter(count)); + } + + toggleSidebar() { + this.isExpanded = !this.isExpanded; + this.renderState(); + } + + setSidebarHeight() { + const $navHeight = $('.navbar-gitlab').outerHeight() + $('.layout-nav').outerHeight(); + const diff = $navHeight - $('body').scrollTop(); + if (diff > 0) { + $('.js-right-sidebar').outerHeight($(window).height() - diff); + } else { + $('.js-right-sidebar').outerHeight('100%'); + } + } + + togglePinnedState() { + this.isPinned = !this.isPinned; + if (!this.isPinned) { + this.isExpanded = false; + } + Cookies.set(pinnedStateCookie, this.isPinned ? 'true' : 'false', { expires: 3650 }); + this.renderState(); + } + + renderState() { + $(pageSelector) + .toggleClass(pinnedPageClass, this.isPinned && this.isExpanded) + .toggleClass(expandedPageClass, this.isExpanded); + $(navbarSelector) + .toggleClass(pinnedNavbarClass, this.isPinned && this.isExpanded) + .toggleClass(expandedNavbarClass, this.isExpanded); + + const $pinnedToggle = $(pinnedToggleSelector); + const tooltipText = this.isPinned ? 'Unpin navigation' : 'Pin navigation'; + const tooltipState = $pinnedToggle.attr('aria-describedby') && this.isExpanded ? 'show' : 'hide'; + $pinnedToggle.attr('title', tooltipText).tooltip('fixTitle').tooltip(tooltipState); + + if (this.isExpanded) { + const sidebarContent = $(sidebarContentSelector); + setTimeout(() => { sidebarContent.niceScroll().updateScrollBar(); }, 200); + } + } + } + + window.gl = window.gl || {}; + gl.Sidebar = Sidebar; +})(); diff --git a/app/assets/stylesheets/framework.scss b/app/assets/stylesheets/framework.scss index b2b3297e880..f1df760b915 100644 --- a/app/assets/stylesheets/framework.scss +++ b/app/assets/stylesheets/framework.scss @@ -4,6 +4,7 @@ @import 'framework/tw_bootstrap'; @import "framework/layout"; +<<<<<<< HEAD @import "framework/animations"; @import "framework/avatar"; @import "framework/asciidoctor"; @@ -39,6 +40,42 @@ @import "framework/timeline"; @import "framework/typography"; @import "framework/zen"; +======= +@import "framework/animations.scss"; +@import "framework/avatar.scss"; +@import "framework/asciidoctor.scss"; +@import "framework/blocks.scss"; +@import "framework/buttons.scss"; +@import "framework/badges.scss"; +@import "framework/calendar.scss"; +@import "framework/callout.scss"; +@import "framework/common.scss"; +@import "framework/dropdowns.scss"; +@import "framework/files.scss"; +@import "framework/filters.scss"; +@import "framework/flash.scss"; +@import "framework/forms.scss"; +@import "framework/gfm.scss"; +@import "framework/gitlab-theme.scss"; +@import "framework/header.scss"; +@import "framework/highlight.scss"; +@import "framework/issue_box.scss"; +@import "framework/jquery.scss"; +@import "framework/lists.scss"; +@import "framework/logo.scss"; +@import "framework/markdown_area.scss"; +@import "framework/mobile.scss"; +@import "framework/modal.scss"; +@import "framework/nav.scss"; +@import "framework/pagination.scss"; +@import "framework/panels.scss"; +@import "framework/selects.scss"; +@import "framework/sidebar.scss"; +@import "framework/tables.scss"; +@import "framework/timeline.scss"; +@import "framework/typography.scss"; +@import "framework/zen.scss"; +>>>>>>> parent of aa792b91bb... Merge branch '26200-convert-sidebar-to-dropdown' into 'master' @import "framework/blank"; @import "framework/wells"; @import "framework/page-header"; diff --git a/app/assets/stylesheets/framework/animations.scss b/app/assets/stylesheets/framework/animations.scss index 667b73e150d..234ca0b11a9 100644 --- a/app/assets/stylesheets/framework/animations.scss +++ b/app/assets/stylesheets/framework/animations.scss @@ -116,7 +116,7 @@ } .btn, -.global-dropdown-toggle { +.side-nav-toggle { @include transition(background-color, border-color, color, box-shadow); } @@ -140,6 +140,7 @@ a { @include transition(background-color, box-shadow); } +.nav-sidebar a, .dropdown-menu a, .dropdown-menu button, .dropdown-menu-nav a { diff --git a/app/assets/stylesheets/framework/gitlab-theme.scss b/app/assets/stylesheets/framework/gitlab-theme.scss new file mode 100644 index 00000000000..d6566dc4ec9 --- /dev/null +++ b/app/assets/stylesheets/framework/gitlab-theme.scss @@ -0,0 +1,144 @@ +/** + * Styles the GitLab application with a specific color theme + * + * $color-light - + * $color - + * $color-darker - + * $color-dark - + */ +@mixin gitlab-theme($color-light, $color, $color-darker, $color-dark) { + .page-with-sidebar { + .toggle-nav-collapse, + .pin-nav-btn { + color: $color-light; + + &:hover { + color: $white-light; + } + } + + .sidebar-wrapper { + background: $color-darker; + } + + .sidebar-action-buttons { + color: $color-light; + background-color: lighten($color-darker, 5%); + } + + .nav-sidebar { + li { + a { + color: $color-light; + + &:hover, + &:focus, + &:active { + background: $color-dark; + } + + i { + color: $color-light; + } + + path, + polygon { + fill: $color-light; + } + + .count { + color: $color-light; + background: $color-dark; + } + + svg { + position: relative; + top: 3px; + } + } + + &.separate-item { + border-top: 1px solid $color; + } + + &.active a { + color: $white-light; + background: $color-dark; + + &.no-highlight { + border: none; + } + + i { + color: $white-light; + } + + path, + polygon { + fill: $white-light; + } + } + } + + .about-gitlab { + color: $color-light; + } + } + } +} + +$theme-charcoal-light: #b9bbbe; +$theme-charcoal: #485157; +$theme-charcoal-dark: #3d454d; +$theme-charcoal-darker: #383f45; + +$theme-blue-light: #becde9; +$theme-blue: #2980b9; +$theme-blue-dark: #1970a9; +$theme-blue-darker: #096099; + +$theme-graphite-light: #ccc; +$theme-graphite: #777; +$theme-graphite-dark: #666; +$theme-graphite-darker: #555; + +$theme-black-light: #979797; +$theme-black: #373737; +$theme-black-dark: #272727; +$theme-black-darker: #222; + +$theme-green-light: #adc; +$theme-green: #019875; +$theme-green-dark: #018865; +$theme-green-darker: #017855; + +$theme-violet-light: #98c; +$theme-violet: #548; +$theme-violet-dark: #436; +$theme-violet-darker: #325; + +body { + &.ui_blue { + @include gitlab-theme($theme-blue-light, $theme-blue, $theme-blue-dark, $theme-blue-darker); + } + + &.ui_charcoal { + @include gitlab-theme($theme-charcoal-light, $theme-charcoal, $theme-charcoal-dark, $theme-charcoal-darker); + } + + &.ui_graphite { + @include gitlab-theme($theme-graphite-light, $theme-graphite, $theme-graphite-dark, $theme-graphite-darker); + } + + &.ui_black { + @include gitlab-theme($theme-black-light, $theme-black, $theme-black-dark, $theme-black-darker); + } + + &.ui_green { + @include gitlab-theme($theme-green-light, $theme-green, $theme-green-dark, $theme-green-darker); + } + + &.ui_violet { + @include gitlab-theme($theme-violet-light, $theme-violet, $theme-violet-dark, $theme-violet-darker); + } +} diff --git a/app/assets/stylesheets/framework/header.scss b/app/assets/stylesheets/framework/header.scss index b677882eba4..59fb1d760e8 100644 --- a/app/assets/stylesheets/framework/header.scss +++ b/app/assets/stylesheets/framework/header.scss @@ -132,6 +132,7 @@ header { } } } +<<<<<<< HEAD } &.navbar-gitlab-new { @@ -161,10 +162,26 @@ header { li { &.active a { font-weight: bold; +======= + + .side-nav-toggle { + position: absolute; + left: -10px; + margin: 7px 0; + font-size: 18px; + padding: 6px 10px; + border: none; + background-color: $gray-light; + + &:hover { + background-color: $white-normal; + color: $gl-header-nav-hover-color; +>>>>>>> parent of aa792b91bb... Merge branch '26200-convert-sidebar-to-dropdown' into 'master' } } } +<<<<<<< HEAD .global-dropdown-toggle { margin: 7px 0; font-size: 18px; @@ -182,6 +199,8 @@ header { } } +======= +>>>>>>> parent of aa792b91bb... Merge branch '26200-convert-sidebar-to-dropdown' into 'master' .header-content { display: flex; justify-content: space-between; diff --git a/app/assets/stylesheets/framework/sidebar.scss b/app/assets/stylesheets/framework/sidebar.scss index 40e8a928e6e..50d8198577e 100644 --- a/app/assets/stylesheets/framework/sidebar.scss +++ b/app/assets/stylesheets/framework/sidebar.scss @@ -1,3 +1,36 @@ +.page-with-sidebar { + padding-bottom: 25px; + transition: padding $sidebar-transition-duration; + + &.page-sidebar-pinned { + .sidebar-wrapper { + box-shadow: none; + } + } + + .sidebar-wrapper { + position: fixed; + top: 0; + bottom: 0; + left: 0; + height: 100%; + width: 0; + overflow: hidden; + transition: width $sidebar-transition-duration; + box-shadow: 2px 0 16px 0 $black-transparent; + } +} + +.sidebar-wrapper { + z-index: 1000; + background: $gray-light; + + .nicescroll-rails-hr { + // TODO: Figure out why nicescroll doesn't hide horizontal bar + display: none!important; + } +} + .content-wrapper { width: 100%; transition: padding $sidebar-transition-duration; @@ -14,6 +47,105 @@ } } +.nav-sidebar { + position: absolute; + top: 50px; + bottom: 0; + width: $sidebar_width; + overflow-y: auto; + overflow-x: hidden; + + &.navbar-collapse { + padding: 0 !important; + } + + li { + &.separate-item { + padding-top: 10px; + margin-top: 10px; + } + + .icon-container { + width: 34px; + display: inline-block; + text-align: center; + } + + a { + padding: 7px $gl-sidebar-padding; + font-size: $gl-font-size; + line-height: 24px; + display: block; + text-decoration: none; + font-weight: normal; + + &:hover, + &:active, + &:focus { + text-decoration: none; + } + + i { + font-size: 16px; + } + + i, + svg { + margin-right: 13px; + } + } + } + + .count { + float: right; + padding: 0 8px; + border-radius: 6px; + } + + .about-gitlab { + padding: 7px $gl-sidebar-padding; + font-size: $gl-font-size; + line-height: 24px; + display: block; + text-decoration: none; + font-weight: normal; + position: absolute; + bottom: 10px; + } +} + +.sidebar-action-buttons { + width: $sidebar_width; + position: absolute; + top: 0; + left: 0; + min-height: 50px; + padding: 5px 0; + font-size: 18px; + line-height: 30px; + + .toggle-nav-collapse { + left: 0; + } + + .pin-nav-btn { + right: 0; + display: none; + + @media (min-width: $sidebar-breakpoint) { + display: block; + } + + .fa { + transition: transform .15s; + + .page-sidebar-pinned & { + transform: rotate(90deg); + } + } + } +} + .nav-header-btn { padding: 10px $gl-sidebar-padding; color: inherit; @@ -29,16 +161,64 @@ } } +.page-sidebar-expanded { + .sidebar-wrapper { + width: $sidebar_width; + } +} + +.page-sidebar-pinned { + .content-wrapper, + .layout-nav { + @media (min-width: $sidebar-breakpoint) { + padding-left: $sidebar_width; + } + } + + .merge-request-tabs-holder.affix { + @media (min-width: $sidebar-breakpoint) { + left: $sidebar_width; + } + } + + &.right-sidebar-expanded { + .line-resolve-all-container { + @media (min-width: $sidebar-breakpoint) { + display: none; + } + } + } +} + +header.header-sidebar-pinned { + @media (min-width: $sidebar-breakpoint) { + padding-left: ($sidebar_width + $gl-padding); + + .side-nav-toggle { + display: none; + } + + .header-content { + padding-left: 0; + } + } +} + .right-sidebar-collapsed { padding-right: 0; @media (min-width: $screen-sm-min) { +<<<<<<< HEAD &:not(.wiki-sidebar):not(.build-sidebar):not(.issuable-bulk-update-sidebar) .content-wrapper { padding-right: $gutter_collapsed_width; +======= + .content-wrapper { + padding-right: $sidebar_collapsed_width; +>>>>>>> parent of aa792b91bb... Merge branch '26200-convert-sidebar-to-dropdown' into 'master' } .merge-request-tabs-holder.affix { - right: $gutter_collapsed_width; + right: $sidebar_collapsed_width; } } @@ -56,8 +236,13 @@ z-index: 300; @media (min-width: $screen-sm-min) and (max-width: $screen-sm-max) { +<<<<<<< HEAD &:not(.wiki-sidebar):not(.build-sidebar):not(.issuable-bulk-update-sidebar) .content-wrapper { padding-right: $gutter_collapsed_width; +======= + &:not(.build-sidebar):not(.wiki-sidebar) { + padding-right: $sidebar_collapsed_width; +>>>>>>> parent of aa792b91bb... Merge branch '26200-convert-sidebar-to-dropdown' into 'master' } } @@ -71,9 +256,16 @@ } &.with-overlay .merge-request-tabs-holder.affix { - right: $gutter_collapsed_width; + right: $sidebar_collapsed_width; } } +<<<<<<< HEAD +======= + + &.with-overlay { + padding-right: $sidebar_collapsed_width; + } +>>>>>>> parent of aa792b91bb... Merge branch '26200-convert-sidebar-to-dropdown' into 'master' } .right-sidebar { diff --git a/app/assets/stylesheets/framework/variables.scss b/app/assets/stylesheets/framework/variables.scss index 3c109a5a929..f302292eaa9 100644 --- a/app/assets/stylesheets/framework/variables.scss +++ b/app/assets/stylesheets/framework/variables.scss @@ -1,6 +1,8 @@ /* * Layout */ +$sidebar_collapsed_width: 62px; +$sidebar_width: 220px; $gutter_collapsed_width: 62px; $gutter_width: 290px; $gutter_inner_width: 250px; @@ -590,6 +592,7 @@ Pipeline Graph */ $stage-hover-bg: #eaf3fc; $stage-hover-border: #d1e7fc; +<<<<<<< HEAD $action-icon-color: #d6d6d6; /* @@ -645,3 +648,6 @@ Project Templates Icons $rails: #c00; $node: #353535; $java: #70ad51; +======= +$action-icon-color: #d6d6d6; +>>>>>>> parent of aa792b91bb... Merge branch '26200-convert-sidebar-to-dropdown' into 'master' diff --git a/app/assets/stylesheets/pages/issuable.scss b/app/assets/stylesheets/pages/issuable.scss index 1dac38f2b6d..68af3ec2327 100644 --- a/app/assets/stylesheets/pages/issuable.scss +++ b/app/assets/stylesheets/pages/issuable.scss @@ -322,11 +322,20 @@ display: block; } +<<<<<<< HEAD width: $gutter_collapsed_width; padding: 0; .block { width: $gutter_collapsed_width - 2px; +======= + width: $sidebar_collapsed_width; + padding-top: 0; + + .block { + width: $sidebar_collapsed_width - 2px; + margin-left: -19px; +>>>>>>> parent of aa792b91bb... Merge branch '26200-convert-sidebar-to-dropdown' into 'master' padding: 15px 0 0; border-bottom: none; overflow: hidden; diff --git a/app/assets/stylesheets/pages/profiles/preferences.scss b/app/assets/stylesheets/pages/profiles/preferences.scss index 305feaacaa1..100ace41f2a 100644 --- a/app/assets/stylesheets/pages/profiles/preferences.scss +++ b/app/assets/stylesheets/pages/profiles/preferences.scss @@ -1,3 +1,42 @@ +.application-theme { + label { + margin-right: 20px; + text-align: center; + + .preview { + border-radius: 4px; + + height: 80px; + margin-bottom: 10px; + width: 160px; + + &.ui_blue { + background: $theme-blue; + } + + &.ui_charcoal { + background: $theme-charcoal; + } + + &.ui_graphite { + background: $theme-graphite; + } + + &.ui_black { + background: $theme-black; + } + + &.ui_green { + background: $theme-green; + } + + &.ui_violet { + background: $theme-violet; + } + } + } +} + .syntax-theme { label { margin-right: 20px; diff --git a/app/assets/stylesheets/print.scss b/app/assets/stylesheets/print.scss index 113e6e86bb5..0570c38f6f7 100644 --- a/app/assets/stylesheets/print.scss +++ b/app/assets/stylesheets/print.scss @@ -28,6 +28,13 @@ nav.navbar-collapse.collapse, .profiler-results, .tree-ref-holder, .tree-holder .breadcrumb, +<<<<<<< HEAD +======= +.blob-commit-info, +.file-title, +.file-holder, +.sidebar-wrapper, +>>>>>>> parent of aa792b91bb... Merge branch '26200-convert-sidebar-to-dropdown' into 'master' .nav, .btn, ul.notes-form, diff --git a/app/controllers/admin/users_controller.rb b/app/controllers/admin/users_controller.rb index fa1bc72560e..345e02e5f4b 100644 --- a/app/controllers/admin/users_controller.rb +++ b/app/controllers/admin/users_controller.rb @@ -204,6 +204,7 @@ class Admin::UsersController < Admin::ApplicationController :provider, :remember_me, :skype, + :theme_id, :twitter, :username, :website_url diff --git a/app/controllers/profiles/preferences_controller.rb b/app/controllers/profiles/preferences_controller.rb index 1e557c47638..cce2a847b53 100644 --- a/app/controllers/profiles/preferences_controller.rb +++ b/app/controllers/profiles/preferences_controller.rb @@ -35,7 +35,8 @@ class Profiles::PreferencesController < Profiles::ApplicationController :color_scheme_id, :layout, :dashboard, - :project_view + :project_view, + :theme_id ) end end diff --git a/app/helpers/nav_helper.rb b/app/helpers/nav_helper.rb index b63b3b70903..dad4c1f666a 100644 --- a/app/helpers/nav_helper.rb +++ b/app/helpers/nav_helper.rb @@ -1,10 +1,17 @@ module NavHelper +<<<<<<< HEAD def page_with_sidebar_class class_name = page_gutter_class class_name << 'page-with-new-sidebar' if defined?(@new_sidebar) && @new_sidebar class_name << 'page-with-icon-sidebar' if collapsed_sidebar? && @new_sidebar class_name +======= + def page_sidebar_class + if pinned_nav? + "page-sidebar-expanded page-sidebar-pinned" + end +>>>>>>> parent of aa792b91bb... Merge branch '26200-convert-sidebar-to-dropdown' into 'master' end def page_gutter_class @@ -34,7 +41,15 @@ module NavHelper class_names = [] class_names << 'with-horizontal-nav' if defined?(nav) && nav +<<<<<<< HEAD class_names +======= + if pinned_nav? + class_name << " header-sidebar-expanded header-sidebar-pinned" + end + + class_name +>>>>>>> parent of aa792b91bb... Merge branch '26200-convert-sidebar-to-dropdown' into 'master' end def layout_nav_class @@ -50,4 +65,8 @@ module NavHelper def nav_control_class "nav-control" if current_user end + + def pinned_nav? + cookies[:pin_nav] == 'true' + end end diff --git a/app/helpers/preferences_helper.rb b/app/helpers/preferences_helper.rb index d36bb4ab074..64605908c05 100644 --- a/app/helpers/preferences_helper.rb +++ b/app/helpers/preferences_helper.rb @@ -40,6 +40,10 @@ module PreferencesHelper ] end + def user_application_theme + Gitlab::Themes.for_user(current_user).css_class + end + def user_color_scheme Gitlab::ColorSchemes.for_user(current_user).css_class end diff --git a/app/models/user.rb b/app/models/user.rb index 0e2654ff757..20341cf6f1c 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -31,6 +31,7 @@ class User < ActiveRecord::Base default_value_for :project_view, :files default_value_for :notified_of_own_activity, false default_value_for :preferred_language, I18n.default_locale + default_value_for :theme_id, gitlab_config.default_theme attr_encrypted :otp_secret, key: Gitlab::Application.secrets.otp_key_base, diff --git a/app/views/layouts/_page.html.haml b/app/views/layouts/_page.html.haml index c4f8cd71395..ede337f084e 100644 --- a/app/views/layouts/_page.html.haml +++ b/app/views/layouts/_page.html.haml @@ -1,3 +1,4 @@ +<<<<<<< HEAD .page-with-sidebar{ class: page_with_sidebar_class } - if show_new_nav? - if defined?(nav) && nav @@ -12,6 +13,32 @@ .content-wrapper{ class: layout_nav_class } - if show_new_nav? .mobile-overlay +======= +.page-with-sidebar{ class: "#{page_sidebar_class} #{page_gutter_class}" } + .sidebar-wrapper.nicescroll + .sidebar-action-buttons + .nav-header-btn.toggle-nav-collapse{ title: "Open/Close" } + %span.sr-only Toggle navigation + = icon('bars') + + %div{ class: "nav-header-btn pin-nav-btn has-tooltip #{'is-active' if pinned_nav?} js-nav-pin", title: pinned_nav? ? "Unpin navigation" : "Pin Navigation", data: { placement: 'right', container: 'body' } } + %span.sr-only Toggle navigation pinning + = icon('fw thumb-tack') + + - if defined?(sidebar) && sidebar + = render "layouts/nav/#{sidebar}" + - elsif current_user + = render 'layouts/nav/dashboard' + - else + = render 'layouts/nav/explore' + + - if defined?(nav) && nav + .layout-nav + .container-fluid + = render "layouts/nav/#{nav}" + .content-wrapper{ class: "#{layout_nav_class}" } + = yield :sub_nav +>>>>>>> parent of aa792b91bb... Merge branch '26200-convert-sidebar-to-dropdown' into 'master' .alert-wrapper = render "layouts/broadcast" - if show_new_nav? diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml index b53f382fa3d..a479dddf068 100644 --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml @@ -1,6 +1,7 @@ !!! 5 %html{ lang: I18n.locale, class: page_class } = render "layouts/head" +<<<<<<< HEAD %body{ class: @body_class, data: { page: body_data_page, project: "#{@project.path if @project}", group: "#{@group.path if @group}", find_file: find_file_path } } = render "layouts/init_auto_complete" if @gfm_form = render 'peek/bar' @@ -8,6 +9,12 @@ = render "layouts/header/new" - else = render "layouts/header/default", title: header_title +======= + %body{ class: "#{user_application_theme}", data: { page: body_data_page, project: "#{@project.path if @project}", group: "#{@group.path if @group}" } } + = Gon::Base.render_data + + = render "layouts/header/default", title: header_title +>>>>>>> parent of aa792b91bb... Merge branch '26200-convert-sidebar-to-dropdown' into 'master' = render 'layouts/page', sidebar: sidebar, nav: nav = yield :scripts_body diff --git a/app/views/layouts/header/_default.html.haml b/app/views/layouts/header/_default.html.haml index b32cfe158bb..fce3f9cb251 100644 --- a/app/views/layouts/header/_default.html.haml +++ b/app/views/layouts/header/_default.html.haml @@ -3,6 +3,7 @@ %a.sr-only.gl-accessibility{ href: "#content-body", tabindex: "1" } Skip to content .container-fluid .header-content +<<<<<<< HEAD .dropdown.global-dropdown %button.global-dropdown-toggle{ type: 'button', 'data-toggle' => 'dropdown' } %span.sr-only Toggle navigation @@ -19,6 +20,14 @@ .title-container.js-title-container %h1.title{ class: ('initializing' if @has_group_title) }= title +======= + %button.side-nav-toggle{ type: 'button', "aria-label" => "Toggle global navigation" } + %span.sr-only Toggle navigation + = icon('bars') + %button.navbar-toggle{ type: 'button' } + %span.sr-only Toggle navigation + = icon('ellipsis-v') +>>>>>>> parent of aa792b91bb... Merge branch '26200-convert-sidebar-to-dropdown' into 'master' .navbar-collapse.collapse %ul.nav.navbar-nav @@ -84,9 +93,18 @@ %div = link_to "Sign in", new_session_path(:user, redirect_to_referer: 'yes'), class: 'btn btn-sign-in btn-success' +<<<<<<< HEAD %button.navbar-toggle{ type: 'button' } %span.sr-only Toggle navigation = icon('ellipsis-v') +======= + + %h1.title= title + + .header-logo + = link_to root_path, class: 'home', title: 'Dashboard', id: 'logo' do + = brand_header_logo +>>>>>>> parent of aa792b91bb... Merge branch '26200-convert-sidebar-to-dropdown' into 'master' = yield :header_content diff --git a/app/views/layouts/nav/_dashboard.html.haml b/app/views/layouts/nav/_dashboard.html.haml index be7d27df2a0..98bebbee103 100644 --- a/app/views/layouts/nav/_dashboard.html.haml +++ b/app/views/layouts/nav/_dashboard.html.haml @@ -1,3 +1,4 @@ +<<<<<<< HEAD %ul = 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 @@ -65,3 +66,46 @@ %li.divider %li = link_to "Help", help_path, title: 'About GitLab CE', class: 'about-gitlab' +======= +.nav-sidebar + %ul.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 + %span + Projects + = nav_link(path: 'dashboard#activity') do + = link_to activity_dashboard_path, class: 'dashboard-shortcuts-activity', title: 'Activity' do + %span + Activity + - if koding_enabled? + = nav_link(controller: :koding) do + = link_to koding_path, title: 'Koding' do + %span + Koding + = nav_link(controller: [:groups, 'groups/milestones', 'groups/group_members']) do + = link_to dashboard_groups_path, title: 'Groups' do + %span + Groups + = nav_link(controller: 'dashboard/milestones') do + = link_to dashboard_milestones_path, title: 'Milestones' do + %span + Milestones + = nav_link(path: 'dashboard#issues') do + = link_to assigned_issues_dashboard_path, title: 'Issues', class: 'dashboard-shortcuts-issues' do + %span + Issues + %span.count= number_with_delimiter(cached_assigned_issuables_count(current_user, :issues, :opened)) + = nav_link(path: 'dashboard#merge_requests') do + = link_to assigned_mrs_dashboard_path, title: 'Merge Requests', class: 'dashboard-shortcuts-merge_requests' do + %span + Merge Requests + %span.count= number_with_delimiter(cached_assigned_issuables_count(current_user, :merge_requests, :opened)) + = nav_link(controller: 'dashboard/snippets') do + = link_to dashboard_snippets_path, title: 'Snippets' do + %span + Snippets + + = link_to help_path, title: 'About GitLab CE', class: 'about-gitlab' do + %span + About GitLab CE +>>>>>>> parent of aa792b91bb... Merge branch '26200-convert-sidebar-to-dropdown' into 'master' diff --git a/app/views/layouts/nav/_explore.html.haml b/app/views/layouts/nav/_explore.html.haml index 0cb367452f7..572163a16b1 100644 --- a/app/views/layouts/nav/_explore.html.haml +++ b/app/views/layouts/nav/_explore.html.haml @@ -1,4 +1,4 @@ -%ul +%ul.nav.nav-sidebar = nav_link(path: ['dashboard#show', 'root#show', 'projects#trending', 'projects#starred', 'projects#index'], html_options: {class: 'home'}) do = link_to explore_root_path, title: 'Projects', class: 'dashboard-shortcuts-projects' do .shortcut-mappings diff --git a/app/views/profiles/preferences/show.html.haml b/app/views/profiles/preferences/show.html.haml index f08dcc0c242..f2f8cedfe3a 100644 --- a/app/views/profiles/preferences/show.html.haml +++ b/app/views/profiles/preferences/show.html.haml @@ -3,7 +3,24 @@ = render 'profiles/head' = form_for @user, url: profile_preferences_path, remote: true, method: :put, html: { class: 'row prepend-top-default js-preferences-form' } do |f| +<<<<<<< HEAD .col-lg-4.profile-settings-sidebar +======= + .col-lg-3.profile-settings-sidebar + %h4.prepend-top-0 + Application theme + %p + This setting allows you to customize the appearance of the site, e.g. the sidebar. + .col-lg-9.application-theme + - Gitlab::Themes.each do |theme| + = label_tag do + .preview{ class: theme.css_class } + = f.radio_button :theme_id, theme.id + = theme.name + .col-sm-12 + %hr + .col-lg-3.profile-settings-sidebar +>>>>>>> parent of aa792b91bb... Merge branch '26200-convert-sidebar-to-dropdown' into 'master' %h4.prepend-top-0 Syntax highlighting theme %p diff --git a/app/views/profiles/preferences/update.js.erb b/app/views/profiles/preferences/update.js.erb index 431ab9d052b..8966dd3fd86 100644 --- a/app/views/profiles/preferences/update.js.erb +++ b/app/views/profiles/preferences/update.js.erb @@ -1,3 +1,7 @@ +// Remove body class for any previous theme, re-add current one +$('body').removeClass('<%= Gitlab::Themes.body_classes %>') +$('body').addClass('<%= user_application_theme %>') + // Toggle container-fluid class if ('<%= current_user.layout %>' === 'fluid') { $('.content-wrapper .container-fluid').removeClass('container-limited') |