summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorRubén Dávila <ruben@gitlab.com>2017-08-16 18:29:04 -0500
committerRubén Dávila <ruben@gitlab.com>2017-08-16 18:29:04 -0500
commita3fbe3fedeb700f43bfa0de7e9113b3cff943c4e (patch)
tree4075549fa4b898c1187e8adecd112cea50ee880b /app
parent72d5165bd57472692c77d6a9d159e65058513bf3 (diff)
downloadgitlab-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')
-rw-r--r--app/assets/javascripts/project_label_subscription.js6
-rw-r--r--app/assets/javascripts/right_sidebar.js7
-rw-r--r--app/assets/javascripts/sidebar.js.es6111
-rw-r--r--app/assets/stylesheets/framework.scss37
-rw-r--r--app/assets/stylesheets/framework/animations.scss3
-rw-r--r--app/assets/stylesheets/framework/gitlab-theme.scss144
-rw-r--r--app/assets/stylesheets/framework/header.scss19
-rw-r--r--app/assets/stylesheets/framework/sidebar.scss196
-rw-r--r--app/assets/stylesheets/framework/variables.scss6
-rw-r--r--app/assets/stylesheets/pages/issuable.scss9
-rw-r--r--app/assets/stylesheets/pages/profiles/preferences.scss39
-rw-r--r--app/assets/stylesheets/print.scss7
-rw-r--r--app/controllers/admin/users_controller.rb1
-rw-r--r--app/controllers/profiles/preferences_controller.rb3
-rw-r--r--app/helpers/nav_helper.rb19
-rw-r--r--app/helpers/preferences_helper.rb4
-rw-r--r--app/models/user.rb1
-rw-r--r--app/views/layouts/_page.html.haml27
-rw-r--r--app/views/layouts/application.html.haml7
-rw-r--r--app/views/layouts/header/_default.html.haml18
-rw-r--r--app/views/layouts/nav/_dashboard.html.haml44
-rw-r--r--app/views/layouts/nav/_explore.html.haml2
-rw-r--r--app/views/profiles/preferences/show.html.haml17
-rw-r--r--app/views/profiles/preferences/update.js.erb4
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')