diff options
| author | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2013-08-08 12:22:09 +0300 |
|---|---|---|
| committer | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2013-08-08 12:22:09 +0300 |
| commit | 4537623d12fb7372262267be5d6ec3b41f3f476c (patch) | |
| tree | ccd0494b1112c388114e032f994505a2344123be /app | |
| parent | c7e490ebd5ab69fe043cd39145bd6ef3850a6921 (diff) | |
| parent | 1a83fea711961844adc7ddb21ce007143fefc144 (diff) | |
| download | gitlab-ce-4537623d12fb7372262267be5d6ec3b41f3f476c.tar.gz | |
Merge branch 'master' into karlhungus-mr-on-fork
Conflicts:
app/contexts/filter_context.rb
app/contexts/search_context.rb
app/models/merge_request.rb
app/models/note.rb
app/views/shared/_merge_requests.html.haml
spec/controllers/commit_controller_spec.rb
spec/services/notification_service_spec.rb
Diffstat (limited to 'app')
134 files changed, 869 insertions, 740 deletions
diff --git a/app/assets/javascripts/behaviors/toggler_behavior.coffee b/app/assets/javascripts/behaviors/toggler_behavior.coffee index d2181e7b759..7e438c51c1c 100644 --- a/app/assets/javascripts/behaviors/toggler_behavior.coffee +++ b/app/assets/javascripts/behaviors/toggler_behavior.coffee @@ -11,3 +11,7 @@ $ -> container = $(".js-toggle-visibility-container") container.toggleClass("hide") e.preventDefault() + + $("body").on "click", ".js-toggle-button", (e) -> + $(@).closest(".js-toggle-container").find(".js-toggle-content").toggle() + e.preventDefault() diff --git a/app/assets/javascripts/branch-graph.js.coffee b/app/assets/javascripts/branch-graph.js.coffee index 6e069f264f1..318538509a5 100644 --- a/app/assets/javascripts/branch-graph.js.coffee +++ b/app/assets/javascripts/branch-graph.js.coffee @@ -62,22 +62,22 @@ class BranchGraph cuday = 0 cumonth = "" - r.rect(0, 0, 26, @barHeight).attr fill: "#222" - r.rect(26, 0, 20, @barHeight).attr fill: "#444" + r.rect(0, 0, 40, @barHeight).attr fill: "#222" + r.rect(40, 0, 30, @barHeight).attr fill: "#444" for day, mm in @days if cuday isnt day[0] # Dates - r.text(36, @offsetY + @unitTime * mm, day[0]) + r.text(55, @offsetY + @unitTime * mm, day[0]) .attr( font: "12px Monaco, monospace" - fill: "#DDD" + fill: "#BBB" ) cuday = day[0] if cumonth isnt day[1] # Months - r.text(13, @offsetY + @unitTime * mm, day[1]) + r.text(20, @offsetY + @unitTime * mm, day[1]) .attr( font: "12px Monaco, monospace" fill: "#EEE" diff --git a/app/assets/javascripts/dispatcher.js.coffee b/app/assets/javascripts/dispatcher.js.coffee index d490233c2ec..b0b947dd476 100644 --- a/app/assets/javascripts/dispatcher.js.coffee +++ b/app/assets/javascripts/dispatcher.js.coffee @@ -39,7 +39,9 @@ class Dispatcher switch path.first() when 'admin' then new Admin() - when 'wikis' then new Wikis() + when 'projects' + new Wikis() if path[1] == 'wikis' + initSearch: -> autocomplete_json = $('.search-autocomplete-json').data('autocomplete-opts') diff --git a/app/assets/javascripts/extensions/jquery.js.coffee b/app/assets/javascripts/extensions/jquery.js.coffee index 8a997fe318e..40fb6cb9fc3 100644 --- a/app/assets/javascripts/extensions/jquery.js.coffee +++ b/app/assets/javascripts/extensions/jquery.js.coffee @@ -7,3 +7,7 @@ $.fn.enableButton = -> $(@).removeAttr('disabled'). removeClass('disabled') +$.fn.disableButton = -> + $(@).attr('disabled', 'disabled'). + addClass('disabled') + diff --git a/app/assets/javascripts/gfm_auto_complete.js.coffee b/app/assets/javascripts/gfm_auto_complete.js.coffee index c8c57b91e03..e22761e57a4 100644 --- a/app/assets/javascripts/gfm_auto_complete.js.coffee +++ b/app/assets/javascripts/gfm_auto_complete.js.coffee @@ -44,7 +44,7 @@ GitLab.GfmAutoComplete = tpl: @Issues.template callbacks: before_save: (issues) -> - $.map issues, (i) -> id: i.id, title: i.title, search: "#{i.id} #{i.title}" + $.map issues, (i) -> id: i.id, title: sanitize(i.title), search: "#{i.id} #{i.title}" input.one "focus", => $.getJSON(@dataSource).done (data) -> diff --git a/app/assets/javascripts/main.js.coffee b/app/assets/javascripts/main.js.coffee index f65211c5d13..f22c7a28f35 100644 --- a/app/assets/javascripts/main.js.coffee +++ b/app/assets/javascripts/main.js.coffee @@ -119,7 +119,7 @@ $ -> # Commit show suppressed diff - $(".supp_diff_link").bind "click", -> + $(".content").on "click", ".supp_diff_link", -> $(@).next('table').show() $(@).remove() diff --git a/app/assets/javascripts/merge_requests.js.coffee b/app/assets/javascripts/merge_requests.js.coffee index 769a940959b..153198ca5c5 100644 --- a/app/assets/javascripts/merge_requests.js.coffee +++ b/app/assets/javascripts/merge_requests.js.coffee @@ -22,12 +22,7 @@ class MergeRequest this.$('.show-all-commits').on 'click', => this.showAllCommits() - modal = $('#modal_merge_info').modal modal: true, show:false - - $('.how_to_merge_link').bind "click", -> - modal.show() - $('.modal-header .close').bind "click", -> - modal.hide() + modal = $('#modal_merge_info').modal(show: false) # Local jQuery finder $: (selector) -> diff --git a/app/assets/javascripts/notes.js b/app/assets/javascripts/notes.js index 5e1e4dc4113..5225623c1f0 100644 --- a/app/assets/javascripts/notes.js +++ b/app/assets/javascripts/notes.js @@ -227,10 +227,11 @@ var NoteList = { // Show the attachment delete link note.find(".js-note-attachment-delete").show(); + GitLab.GfmAutoComplete.setup(); + var form = note.find(".note-edit-form"); form.show(); - var textarea = form.find("textarea"); var p = $("<p></p>").text(textarea.val()); var hidden_div = $('<div class="note-original-content"></div>').append(p); diff --git a/app/assets/javascripts/wikis.js.coffee b/app/assets/javascripts/wikis.js.coffee index f2867c8026e..17e790e5b7c 100644 --- a/app/assets/javascripts/wikis.js.coffee +++ b/app/assets/javascripts/wikis.js.coffee @@ -1,10 +1,5 @@ class Wikis constructor: -> - modal = $('#modal-new-wiki').modal({modal: true, show:false}) - - $('.add-new-wiki').bind "click", -> - modal.show() - $('.build-new-wiki').bind "click", -> field = $('#new_wiki_path') slug = field.val() @@ -13,7 +8,5 @@ class Wikis if(slug.length > 0) location.href = path + "/" + slug - $('.modal-header .close').bind "click", -> - modal.hide() @Wikis = Wikis diff --git a/app/assets/stylesheets/common.scss b/app/assets/stylesheets/common.scss index 2b3382dd8bb..ee6d5698e32 100644 --- a/app/assets/stylesheets/common.scss +++ b/app/assets/stylesheets/common.scss @@ -81,33 +81,6 @@ span.update-author { font-weight: normal; } -form { - @extend .form-horizontal; - - .actions { - @extend .form-actions; - } - - .clearfix { - @extend .control-group; - } - - .input { - @extend .controls; - } - - label { - @extend .control-label; - } - .xlarge { - @extend .input-xlarge; - } - .xxlarge { - @extend .input-xxlarge; - } -} - - .field_with_errors { display: inline; } @@ -121,15 +94,6 @@ ul.breadcrumb { } a { - color: #474D57; - font-weight: bold; - font-size: 14px; - } -} - -input[type=text] { - &.large_text { - padding: 6px; font-size: 16px; } } diff --git a/app/assets/stylesheets/gitlab_bootstrap.scss b/app/assets/stylesheets/gitlab_bootstrap.scss index 2ad1bf944a9..1b24683fd97 100644 --- a/app/assets/stylesheets/gitlab_bootstrap.scss +++ b/app/assets/stylesheets/gitlab_bootstrap.scss @@ -2,11 +2,49 @@ $baseFontSize: 13px !default; $baseLineHeight: 18px !default; -// BOOTSTRAP -@import "bootstrap"; +/** + * BOOTSTRAP + */ +@import "bootstrap/variables"; +@import "bootstrap/mixins"; +@import "bootstrap/reset"; +@import "bootstrap/scaffolding"; +@import "bootstrap/grid"; +@import "bootstrap/layouts"; +@import "bootstrap/type"; +@import "bootstrap/code"; +@import "bootstrap/forms"; +@import "bootstrap/tables"; +@import "bootstrap/sprites"; +@import "bootstrap/dropdowns"; +@import "bootstrap/wells"; +@import "bootstrap/component-animations"; +@import "bootstrap/close"; +@import "bootstrap/button-groups"; +@import "bootstrap/alerts"; +@import "bootstrap/navs"; +@import "bootstrap/navbar"; +@import "bootstrap/breadcrumbs"; +@import "bootstrap/pagination"; +@import "bootstrap/pager"; +@import "bootstrap/modals"; +@import "bootstrap/tooltip"; +@import "bootstrap/popovers"; +@import "bootstrap/thumbnails"; +@import "bootstrap/media"; +@import "bootstrap/labels-badges"; +@import "bootstrap/progress-bars"; +@import "bootstrap/accordion"; +@import "bootstrap/carousel"; +@import "bootstrap/hero-unit"; +@import "bootstrap/utilities"; @import "bootstrap/responsive-utilities"; @import "bootstrap/responsive-1200px-min"; +/** + * Font icons + * + */ @import "font-awesome"; /** @@ -26,3 +64,4 @@ $baseLineHeight: 18px !default; @import "gitlab_bootstrap/files.scss"; @import "gitlab_bootstrap/tables.scss"; @import "gitlab_bootstrap/lists.scss"; +@import "gitlab_bootstrap/forms.scss"; diff --git a/app/assets/stylesheets/gitlab_bootstrap/blocks.scss b/app/assets/stylesheets/gitlab_bootstrap/blocks.scss index 053c275c3bb..0c561552dcb 100644 --- a/app/assets/stylesheets/gitlab_bootstrap/blocks.scss +++ b/app/assets/stylesheets/gitlab_bootstrap/blocks.scss @@ -10,15 +10,34 @@ * */ .ui-box { - background: #F9F9F9; + background: #FFF; margin-bottom: 20px; border: 1px solid #CCC; word-wrap: break-word; - @include solid-shade; + + &.small-box { + margin-bottom: 10px; + + .title { + font-size: 13px; + line-height: 30px; + + a { + color: #666; + &:hover { + text-decoration: underline; + } + } + } + } &.ui-box-show { margin:20px 0; background: #FFF; + + .control-group { + margin-bottom: 0; + } } &.ui-box-danger { @@ -71,10 +90,6 @@ border-top: 1px solid #eee; } - &.white { - background: #fff; - } - ul { margin: 0; } @@ -102,6 +117,8 @@ .btn { vertical-align: middle; + padding: 4px 12px; + @include box-shadow(0 0px 1px 1px #f2f2f2); } .nav-pills { diff --git a/app/assets/stylesheets/gitlab_bootstrap/buttons.scss b/app/assets/stylesheets/gitlab_bootstrap/buttons.scss index 90b041b29db..9eb32ca95e6 100644 --- a/app/assets/stylesheets/gitlab_bootstrap/buttons.scss +++ b/app/assets/stylesheets/gitlab_bootstrap/buttons.scss @@ -1,59 +1,103 @@ .btn { + display: inline-block; + padding: 6px 12px; + margin-bottom: 0; + font-size: 13px; + line-height: $baseLineHeight; + text-align: center; + vertical-align: middle; + cursor: pointer; + border: 1px solid #BBB; + color: $style_color; + @include border-radius($baseBorderRadius); + @include box-shadow(inset 0 1px 0 rgba(255,255,255,.2)); @include linear-gradient(#f1f1f1, #e1e1e1); text-shadow: 0 1px 1px #FFF; - border-color: #BBB; + text-decoration: none; + &.hover, &:hover { + color: $style_color; background: #f1f1f1; - @include linear-gradient(#fAfAfA, #f1f1f1); border-color: #AAA; - color: #333; + text-decoration: none; + @include linear-gradient(#fAfAfA, #f1f1f1); } - &.btn-primary { - background: #2a79A3; - @include linear-gradient(#47A7b7, #2585b5); - border-color: #2A79A3; - color: #fff; - text-shadow: 0 1px 1px #268; - &:hover { - background: $primary_color; - color: #fff; - } + &.focus, + &:focus { + text-decoration: none; + @include box-shadow(inset 0 2px 4px rgba(0,0,0,.15)); + } - &.disabled { - color: #fff; - background: $primary_color; - } + &.active, + &:active { + background-image: none; + outline: 0; + text-decoration: none; + @include box-shadow(inset 0 2px 4px rgba(0,0,0,.15)); } - &.btn-info { - background: #5aB9C3; - border-color: $primary_color; - color: #fff; - text-shadow: 0 1px 1px #268; - &:hover { - background: $primary_color; - color: #fff; - } + &.disabled, + &[disabled] { + cursor: default; + background-image: none; + @include opacity(65); + @include box-shadow(none); + } - &.disabled { - color: #fff; - background: $primary_color; + &.btn-primary { + color: #FFF; + border-color: #189; + text-shadow: 0 1px 1px #189; + @include linear-gradient(#4AC, #289); + + &.hover, + &:hover, + &.disabled, + &[disabled] { + color: #FFF; + background: #389; } } &.btn-success { - &:hover { - background: #51a351; + color: #FFF; + border-color: #1A1; + text-shadow: 0 1px 1px #FFF; + text-shadow: 0 1px 1px #181; + @include linear-gradient(#62C452, #51a351); + + + &.hover, + &:hover, + &.disabled, + &[disabled] { + color: #FFF; + background: #2A2; } + } + + &.btn-danger { + color: #FFF; + text-shadow: 0 1px 1px #811; + border-color: #BD362F; + @include linear-gradient(#EE5F5B, #BD362F); - &.disabled { - color: #fff; - background: #2b2; + + &.hover, + &:hover, + &.disabled, + &[disabled] { + color: #FFF; + background: #A22; } } + &.btn-new { + @extend .btn-success; + } + &.btn-create { @extend .wide; @extend .btn-success; @@ -67,12 +111,6 @@ &.btn-close, &.btn-remove { @extend .btn-danger; - border-color: #BD362F; - - &:hover { - color: #fff; - background: #EE4E49; - } } &.btn-cancel { @@ -84,13 +122,9 @@ padding-right: 20px; } - &.small { - @extend .btn-small; - } - - &.active { - border-color: #aaa; - background-color: #ccc; + &.btn-small { + padding: 2px 10px; + font-size: 12px; } &.btn-tiny { @@ -104,9 +138,4 @@ margin-right: 7px; float: left; } - - &.padded { - margin-right: 3px; - padding: 4px 10px 4px; - } } diff --git a/app/assets/stylesheets/gitlab_bootstrap/common.scss b/app/assets/stylesheets/gitlab_bootstrap/common.scss index 1d958a05b80..cd652590089 100644 --- a/app/assets/stylesheets/gitlab_bootstrap/common.scss +++ b/app/assets/stylesheets/gitlab_bootstrap/common.scss @@ -48,7 +48,13 @@ line-height: 36px; } -p.slead { color: #456; font-size: 16px; margin-bottom: 12px; font-weight: 200; line-height: 24px; } +.slead { + color: #666; + font-size: 14px; + margin-bottom: 12px; + font-weight: normal; + line-height: 24px; +} /** FORMS **/ input[type='search'].search-text-input { @@ -66,7 +72,7 @@ input[type='text'].danger { text-shadow: 0 1px 1px #fff } -fieldset legend { font-size: 17px; } +fieldset legend { font-size: 15px; } .tab-content { overflow: visible; @@ -90,3 +96,11 @@ pre.well-pre { border-radius: 0; color: #555; } + +.input-append .btn.active, .input-prepend .btn.active { + background: #CCC; + border-color: #BBB; + text-shadow: 0 1px 1px #fff; + font-weight: bold; + @include box-shadow(inset 0 2px 4px rgba(0,0,0,.15)); +} diff --git a/app/assets/stylesheets/gitlab_bootstrap/files.scss b/app/assets/stylesheets/gitlab_bootstrap/files.scss index ec03fd0d844..a0d6682eb8f 100644 --- a/app/assets/stylesheets/gitlab_bootstrap/files.scss +++ b/app/assets/stylesheets/gitlab_bootstrap/files.scss @@ -3,18 +3,18 @@ * */ .file-holder { - border: 1px solid #BBB; + border: 1px solid #CCC; margin-bottom: 1em; - @include solid-shade; .file-title { border-bottom: 1px solid #bbb; @include bg-dark-gray-gradient; + text-shadow: 0 1px 1px #fff; margin: 0; font-weight: normal; font-weight: bold; text-align: left; - color: #666; + color: $style_color; padding: 9px 10px; height: 18px; diff --git a/app/assets/stylesheets/gitlab_bootstrap/forms.scss b/app/assets/stylesheets/gitlab_bootstrap/forms.scss new file mode 100644 index 00000000000..bc8fbc2e24e --- /dev/null +++ b/app/assets/stylesheets/gitlab_bootstrap/forms.scss @@ -0,0 +1,29 @@ +form { + @extend .form-horizontal; + + label { + @extend .control-label; + } +} + +input { + &.input-xpadding { + padding: 6px 10px; + } +} + +.control-group { + .control-label { + padding-top: 6px; + } + .controls { + input, textarea { + padding: 6px 10px; + } + + input[type="radio"], input[type="checkbox"] { + margin-top: 6px; + } + } +} + diff --git a/app/assets/stylesheets/gitlab_bootstrap/lists.scss b/app/assets/stylesheets/gitlab_bootstrap/lists.scss index cc7084d27d5..83066b5beec 100644 --- a/app/assets/stylesheets/gitlab_bootstrap/lists.scss +++ b/app/assets/stylesheets/gitlab_bootstrap/lists.scss @@ -6,7 +6,6 @@ margin: 0; list-style: none; li { - background-color: #FFF; padding: 10px; min-height: 20px; border-bottom: 1px solid #eee; @@ -84,4 +83,13 @@ ul.bordered-list { a { color: #777; } } } + + &.top-list { + li:first-child { + padding-top: 0; + h4, h5 { + margin-top: 0; + } + } + } } diff --git a/app/assets/stylesheets/gitlab_bootstrap/mixins.scss b/app/assets/stylesheets/gitlab_bootstrap/mixins.scss index b9abb5e4c67..9ddaaf31c1c 100644 --- a/app/assets/stylesheets/gitlab_bootstrap/mixins.scss +++ b/app/assets/stylesheets/gitlab_bootstrap/mixins.scss @@ -90,7 +90,6 @@ @mixin page-title { color: $style_color; font-size: 20px; - font-weight: normal; line-height: 1.5; margin-top: 0px; margin-bottom: 15px; diff --git a/app/assets/stylesheets/gitlab_bootstrap/nav.scss b/app/assets/stylesheets/gitlab_bootstrap/nav.scss index de077303617..f75d643aa0f 100644 --- a/app/assets/stylesheets/gitlab_bootstrap/nav.scss +++ b/app/assets/stylesheets/gitlab_bootstrap/nav.scss @@ -10,6 +10,7 @@ > li > a { @include border-radius(0); } + &.nav-stacked { > li > a { border-left: 4px solid #EEE; @@ -30,6 +31,12 @@ } } } + + &.nav-pills-small { + > li > a { + padding: 8px 12px; + } + } } .nav-pills > .active > a > i[class^="icon-"] { background: inherit; } diff --git a/app/assets/stylesheets/gitlab_bootstrap/tables.scss b/app/assets/stylesheets/gitlab_bootstrap/tables.scss index f46ae91b6ab..a1a5139cda9 100644 --- a/app/assets/stylesheets/gitlab_bootstrap/tables.scss +++ b/app/assets/stylesheets/gitlab_bootstrap/tables.scss @@ -1,8 +1,7 @@ table { @extend .table; @extend .table-striped; - @include solid-shade; - border: 1px solid #bbb; + border: 1px solid #CCC; width: 100%; &.low { @@ -20,7 +19,7 @@ table { th { font-weight: bold; vertical-align: middle; - border-bottom: 1px solid #bbb; + border-bottom: 1px solid #CCC; text-shadow: 0 1px 1px #fff; @include bg-dark-gray-gradient; @@ -46,11 +45,11 @@ table { } &:first-child { - border-left: 1px solid #bbb; + border-left: 1px solid #CCC; } &:last-child { - border-right: 1px solid #bbb; + border-right: 1px solid #CCC; } } diff --git a/app/assets/stylesheets/gitlab_bootstrap/typography.scss b/app/assets/stylesheets/gitlab_bootstrap/typography.scss index 69292ca0b64..d3986556376 100644 --- a/app/assets/stylesheets/gitlab_bootstrap/typography.scss +++ b/app/assets/stylesheets/gitlab_bootstrap/typography.scss @@ -2,6 +2,10 @@ * Headers * */ +h1, h2, h3, h4, h5, h6 { + font-weight: 500; + line-height: 1.1; +} h1.page-title { @include page-title; @@ -48,13 +52,6 @@ a { text-decoration: underline; } - &.btn { - color: $style_color; - &:hover { - color: $style_color; - } - } - &.dark { color: $style_color; } diff --git a/app/assets/stylesheets/sections/commits.scss b/app/assets/stylesheets/sections/commits.scss index 1a2c5e76706..35de2826c9b 100644 --- a/app/assets/stylesheets/sections/commits.scss +++ b/app/assets/stylesheets/sections/commits.scss @@ -421,8 +421,8 @@ .commits-compare-switch{ background: url("switch_icon.png") no-repeat center center; - width: 16px; - height: 18px; + width: 22px; + height: 22px; text-indent: -9999px; float: left; margin-right: 9px; @@ -471,3 +471,7 @@ li.commit { } } } + +.commit-breadcrumb { + padding: 0; +} diff --git a/app/assets/stylesheets/sections/issues.scss b/app/assets/stylesheets/sections/issues.scss index ed7902fec3a..5b79b30b5c2 100644 --- a/app/assets/stylesheets/sections/issues.scss +++ b/app/assets/stylesheets/sections/issues.scss @@ -44,7 +44,7 @@ input.check_all_issues { margin: 0; margin-right: 10px; position: relative; - top: 8px; + top: 10px; height: 22px; } @@ -52,6 +52,10 @@ input.check_all_issues { .title { height: 40px; } + + form { + margin: 0; + } } .btn.close_issue { @@ -88,14 +92,11 @@ input.check_all_issues { } .update_selected_issues { - position: relative; - top:5px; margin-left: 4px; - float: left; } .update_issues_text { - padding: 3px; + padding: 5px; line-height: 28px; float: left; color: #479; diff --git a/app/assets/stylesheets/sections/nav.scss b/app/assets/stylesheets/sections/nav.scss index 77ed57a6cfc..54263523e85 100644 --- a/app/assets/stylesheets/sections/nav.scss +++ b/app/assets/stylesheets/sections/nav.scss @@ -7,7 +7,7 @@ ul { margin: auto; - height: 42px; + height: 40px; overflow: hidden; .count { font-weight: normal; @@ -74,7 +74,7 @@ text-align: center; font-weight: normal; height: 38px; - line-height: 36px; + line-height: 34px; color: #777; text-shadow: 0 1px 1px white; padding: 0 10px; diff --git a/app/assets/stylesheets/sections/projects.scss b/app/assets/stylesheets/sections/projects.scss index 505c8d960f4..027b51f48f0 100644 --- a/app/assets/stylesheets/sections/projects.scss +++ b/app/assets/stylesheets/sections/projects.scss @@ -1,22 +1,5 @@ .new_project, .edit_project { - .project_name_holder { - input, - label { - font-size: 16px; - line-height: 20px; - padding: 8px; - } - .btn { - padding: 6px 10px; - margin-left: 10px; - margin-bottom: 8px; - } - } - .adv_settings { - h6 { margin-left: 40px; } - } - fieldset.features { .control-label { font-weight: bold; @@ -30,6 +13,10 @@ padding: 4px 7px; border: 1px solid #CCC; margin-bottom: 20px; + + .btn { + padding: 4px 12px; + } } .project_clone_holder { @@ -114,7 +101,7 @@ ul.nav.nav-projects-tabs { .public-clone { background: #333; color: #f5f5f5; - padding: 5px 10px; + padding: 6px 10px; margin: 1px; font-weight: normal; } diff --git a/app/assets/stylesheets/sections/tree.scss b/app/assets/stylesheets/sections/tree.scss index d8f32e49c2d..b8b82bcf68c 100644 --- a/app/assets/stylesheets/sections/tree.scss +++ b/app/assets/stylesheets/sections/tree.scss @@ -104,6 +104,8 @@ } .tree-btn-group { + top: 2px; + .btn { margin-right: 0px; padding: 2px 10px; diff --git a/app/assets/stylesheets/themes/ui_mars.scss b/app/assets/stylesheets/themes/ui_mars.scss index 44649ea037c..a2b8c21ea11 100644 --- a/app/assets/stylesheets/themes/ui_mars.scss +++ b/app/assets/stylesheets/themes/ui_mars.scss @@ -31,8 +31,4 @@ border-left: 1px solid #666; } } - - .main-nav { - box-shadow: 0 -1px 0 white inset; - } } diff --git a/app/contexts/filter_context.rb b/app/contexts/filter_context.rb index e7f80e1a4e4..cd054e0c2c3 100644 --- a/app/contexts/filter_context.rb +++ b/app/contexts/filter_context.rb @@ -11,8 +11,8 @@ class FilterContext end def apply_filter items - if params[:project_id] - items = items.by_project(params[:project_id]) + if params[:project_id].present? + items = items.where(project_id: params[:project_id]) end if params[:search].present? diff --git a/app/contexts/merge_requests_load_context.rb b/app/contexts/merge_requests_load_context.rb index 9eba81295a9..40b4c7bac74 100644 --- a/app/contexts/merge_requests_load_context.rb +++ b/app/contexts/merge_requests_load_context.rb @@ -2,7 +2,7 @@ # based on filtering passed via params for @project class MergeRequestsLoadContext < BaseContext def execute - type = params[:f] + type = params[:status] merge_requests = project.merge_requests diff --git a/app/contexts/search_context.rb b/app/contexts/search_context.rb index 4b1be84a2e1..e756c415005 100644 --- a/app/contexts/search_context.rb +++ b/app/contexts/search_context.rb @@ -11,7 +11,7 @@ class SearchContext return result unless query.present? projects = Project.where(id: project_ids) - result[:projects] = projects.search(query).limit(10) + result[:projects] = projects.search(query).limit(20) # Search inside singe project project = projects.first if projects.length == 1 @@ -19,8 +19,8 @@ class SearchContext if params[:search_code].present? result[:blobs] = project.repository.search_files(query, params[:repository_ref]) unless project.empty_repo? else - result[:merge_requests] = MergeRequest.in_projects(project_ids).search(query).limit(10) - result[:issues] = Issue.where(project_id: project_ids).search(query).limit(10) + result[:merge_requests] = MergeRequest.in_projects(project_ids).search(query).limit(20) + result[:issues] = Issue.where(project_id: project_ids).search(query).limit(20) result[:wiki_pages] = [] end result diff --git a/app/controllers/profiles/groups_controller.rb b/app/controllers/profiles/groups_controller.rb index 793d2a32954..e276d07b489 100644 --- a/app/controllers/profiles/groups_controller.rb +++ b/app/controllers/profiles/groups_controller.rb @@ -2,7 +2,7 @@ class Profiles::GroupsController < ApplicationController layout "profile" def index - @groups = current_user.authorized_groups.page(params[:page]).per(20) + @user_groups = current_user.users_groups.page(params[:page]).per(20) end def leave diff --git a/app/controllers/projects/branches_controller.rb b/app/controllers/projects/branches_controller.rb index 97dbb2bc0c0..aa6914414ce 100644 --- a/app/controllers/projects/branches_controller.rb +++ b/app/controllers/projects/branches_controller.rb @@ -11,6 +11,10 @@ class Projects::BranchesController < Projects::ApplicationController @branches = Kaminari.paginate_array(@repository.branches).page(params[:page]).per(30) end + def recent + @branches = @repository.recent_branches + end + def create @repository.add_branch(params[:branch_name], params[:ref]) diff --git a/app/controllers/projects/edit_tree_controller.rb b/app/controllers/projects/edit_tree_controller.rb index 11c97291296..3b945fc7126 100644 --- a/app/controllers/projects/edit_tree_controller.rb +++ b/app/controllers/projects/edit_tree_controller.rb @@ -10,7 +10,7 @@ class Projects::EditTreeController < Projects::ApplicationController before_filter :edit_requirements, only: [:show, :update] def show - @last_commit = @project.repository.last_commit_for(@ref, @path).sha + @last_commit = Gitlab::Git::Commit.last_for_path(@project.repository, @ref, @path).sha end def update diff --git a/app/controllers/projects/repositories_controller.rb b/app/controllers/projects/repositories_controller.rb index 7e6c7016ecf..20e2a9311ee 100644 --- a/app/controllers/projects/repositories_controller.rb +++ b/app/controllers/projects/repositories_controller.rb @@ -4,10 +4,6 @@ class Projects::RepositoriesController < Projects::ApplicationController before_filter :authorize_code_access! before_filter :require_non_empty_project - def show - @activities = @repository.commits_with_refs(20) - end - def stats @stats = Gitlab::Git::Stats.new(@repository.raw, @repository.root_ref) @graph = @stats.graph diff --git a/app/controllers/users_groups_controller.rb b/app/controllers/users_groups_controller.rb index 36eb8dbbfa4..df13b86fdcd 100644 --- a/app/controllers/users_groups_controller.rb +++ b/app/controllers/users_groups_controller.rb @@ -13,7 +13,8 @@ class UsersGroupsController < ApplicationController end def update - # TODO: implement + @member = @group.users_groups.find(params[:id]) + @member.update_attributes(params[:users_group]) end def destroy diff --git a/app/helpers/commits_helper.rb b/app/helpers/commits_helper.rb index 20a2443f523..e889b390968 100644 --- a/app/helpers/commits_helper.rb +++ b/app/helpers/commits_helper.rb @@ -15,61 +15,9 @@ module CommitsHelper commit_person_link(commit, options.merge(source: :committer)) end - def identification_type(line) - if line[0] == "+" - "new" - elsif line[0] == "-" - "old" - else - nil - end - end - - def build_line_anchor(diff, line_new, line_old) - "#{hexdigest(diff.new_path)}_#{line_old}_#{line_new}" - end - def each_diff_line(diff, index) - diff_arr = diff.diff.lines.to_a - - line_old = 1 - line_new = 1 - type = nil - - lines_arr = ::Gitlab::InlineDiff.processing diff_arr - lines_arr.each do |line| - next if line.match(/^\-\-\- \/dev\/null/) - next if line.match(/^\+\+\+ \/dev\/null/) - next if line.match(/^\-\-\- a/) - next if line.match(/^\+\+\+ b/) - - full_line = html_escape(line.gsub(/\n/, '')) - full_line = ::Gitlab::InlineDiff.replace_markers full_line - - if line.match(/^@@ -/) - type = "match" - - line_old = line.match(/\-[0-9]*/)[0].to_i.abs rescue 0 - line_new = line.match(/\+[0-9]*/)[0].to_i.abs rescue 0 - - next if line_old == 1 && line_new == 1 #top of file - yield(full_line, type, nil, nil, nil) - next - else - type = identification_type(line) - line_code = build_line_anchor(diff, line_new, line_old) - yield(full_line, type, line_code, line_new, line_old) - end - - - if line[0] == "+" - line_new += 1 - elsif line[0] == "-" - line_old += 1 - else - line_new += 1 - line_old += 1 - end + Gitlab::DiffParser.new(diff).each do |full_line, type, line_code, line_new, line_old| + yield(full_line, type, line_code, line_new, line_old) end end diff --git a/app/helpers/dashboard_helper.rb b/app/helpers/dashboard_helper.rb index e3be07c9fe0..35c7bcbd2cf 100644 --- a/app/helpers/dashboard_helper.rb +++ b/app/helpers/dashboard_helper.rb @@ -1,5 +1,5 @@ module DashboardHelper - def dashboard_filter_path(entity, options={}) + def filter_path(entity, options={}) exist_opts = { status: params[:status], project_id: params[:project_id], @@ -7,12 +7,9 @@ module DashboardHelper options = exist_opts.merge(options) - case entity - when 'issue' then - issues_dashboard_path(options) - when 'merge_request' - merge_requests_dashboard_path(options) - end + path = request.path + path << "?#{options.to_param}" + path end def entities_per_project project, entity diff --git a/app/helpers/groups_helper.rb b/app/helpers/groups_helper.rb index 2ffbff7af8d..8573c59dc94 100644 --- a/app/helpers/groups_helper.rb +++ b/app/helpers/groups_helper.rb @@ -1,20 +1,4 @@ module GroupsHelper - def group_filter_path(entity, options={}) - exist_opts = { - status: params[:status], - project_id: params[:project_id], - } - - options = exist_opts.merge(options) - - case entity - when 'issue' then - issues_group_path(@group, options) - when 'merge_request' - merge_requests_group_path(@group, options) - end - end - def remove_user_from_group_message(group, user) "You are going to remove #{user.name} from #{group.name} Group. Are you sure?" end diff --git a/app/helpers/notifications_helper.rb b/app/helpers/notifications_helper.rb index 7342393a707..ae3402b2617 100644 --- a/app/helpers/notifications_helper.rb +++ b/app/helpers/notifications_helper.rb @@ -1,2 +1,13 @@ module NotificationsHelper + def notification_icon(notification) + if notification.disabled? + content_tag :i, nil, class: 'icon-circle cred' + elsif notification.participating? + content_tag :i, nil, class: 'icon-circle cblue' + elsif notification.watch? + content_tag :i, nil, class: 'icon-circle cgreen' + else + content_tag :i, nil, class: 'icon-circle-blank cblue' + end + end end diff --git a/app/helpers/tree_helper.rb b/app/helpers/tree_helper.rb index d41f8377559..73d36d0801c 100644 --- a/app/helpers/tree_helper.rb +++ b/app/helpers/tree_helper.rb @@ -39,12 +39,12 @@ module TreeHelper # # Returns boolean def markup?(filename) - filename.end_with?(*%w(.textile .rdoc .org .creole - .mediawiki .rst .asciidoc .pod)) + filename.downcase.end_with?(*%w(.textile .rdoc .org .creole + .mediawiki .rst .asciidoc .pod)) end def gitlab_markdown?(filename) - filename.end_with?(*%w(.mdown .md .markdown)) + filename.downcase.end_with?(*%w(.mdown .md .markdown)) end def plain_text_readme? filename @@ -57,6 +57,8 @@ module TreeHelper end def allowed_tree_edit? + return false unless @repository.branch_names.include?(@ref) + if @project.protected_branch? @ref can?(current_user, :push_code_to_protected_branches, @project) else diff --git a/app/models/deprecated/user_team.rb b/app/models/deprecated/user_team.rb index a036cedc4c7..822884297d4 100644 --- a/app/models/deprecated/user_team.rb +++ b/app/models/deprecated/user_team.rb @@ -1,3 +1,5 @@ +# Will be removed in 6.1 with tables +# # == Schema Information # # Table name: user_teams diff --git a/app/models/deprecated/user_team_project_relationship.rb b/app/models/deprecated/user_team_project_relationship.rb index 991510be936..e93223f3e24 100644 --- a/app/models/deprecated/user_team_project_relationship.rb +++ b/app/models/deprecated/user_team_project_relationship.rb @@ -1,3 +1,5 @@ +# Will be removed in 6.1 with tables +# # == Schema Information # # Table name: user_team_project_relationships diff --git a/app/models/deprecated/user_team_user_relationship.rb b/app/models/deprecated/user_team_user_relationship.rb index 1f7e2625f5f..ae4c789994a 100644 --- a/app/models/deprecated/user_team_user_relationship.rb +++ b/app/models/deprecated/user_team_user_relationship.rb @@ -1,3 +1,5 @@ +# Will be removed in 6.1 with tables +# # == Schema Information # # Table name: user_team_user_relationships diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 703032649b9..b3c7aa39cf8 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -149,11 +149,12 @@ class MergeRequest < ActiveRecord::Base end def unmerged_diffs - if for_fork? - diffs = Gitlab::Satellite::MergeAction.new(author, self).diffs_between_satellite - else - diffs = target_project.repository.diffs_between(source_branch, target_branch) - end + diffs = if for_fork? + Gitlab::Satellite::MergeAction.new(author, self).diffs_between_satellite + else + Gitlab::Git::Diff.between(project.repository, source_branch, target_branch) + end + diffs ||= [] diffs end diff --git a/app/models/note.rb b/app/models/note.rb index fecee950713..c0bf79237c1 100644 --- a/app/models/note.rb +++ b/app/models/note.rb @@ -50,6 +50,9 @@ class Note < ActiveRecord::Base scope :inc_author_project, ->{ includes(:project, :author) } scope :inc_author, ->{ includes(:author) } + serialize :st_diff + before_create :set_diff, if: ->(n) { n.line_code.present? } + def self.create_status_change_note(noteable, project, author, status) create({ noteable: noteable, @@ -67,28 +70,61 @@ class Note < ActiveRecord::Base nil end - def diff - if noteable.diffs.present? - noteable.diffs.select do |d| - if d.new_path - Digest::SHA1.hexdigest(d.new_path) == diff_file_index - end - end.first + def find_diff + return nil unless noteable && noteable.diffs.present? + + @diff ||= noteable.diffs.find do |d| + Digest::SHA1.hexdigest(d.new_path) == diff_file_index if d.new_path end end + def set_diff + # First lets find notes with same diff + # before iterating over all mr diffs + diff = Note.where(noteable_id: self.noteable_id, noteable_type: self.noteable_type, line_code: self.line_code).last.try(:diff) + diff ||= find_diff + + self.st_diff = diff.to_hash if diff + end + + def diff + @diff ||= Gitlab::Git::Diff.new(st_diff) if st_diff.respond_to?(:map) + end + + def active? + # TODO: determine if discussion is outdated + # according to recent MR diff or not + true + end + def diff_file_index line_code.split('_')[0] end def diff_file_name - diff.new_path + diff.new_path if diff + end + + def diff_old_line + line_code.split('_')[1].to_i end def diff_new_line line_code.split('_')[2].to_i end + def diff_line + return @diff_line if @diff_line + + if diff + Gitlab::DiffParser.new(diff).each do |full_line, type, line_code, line_new, line_old| + @diff_line = full_line if line_code == self.line_code + end + end + + @diff_line + end + def discussion_id @discussion_id ||= [:discussion, noteable_type.try(:underscore), noteable_id || commit_id, line_code].join("-").to_sym end diff --git a/app/models/repository.rb b/app/models/repository.rb index 588cabfbae0..a2fd91bbec1 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -18,19 +18,25 @@ class Repository end def commit(id = nil) - commit = raw_repository.commit(id) + commit = Gitlab::Git::Commit.find(raw_repository, id) commit = Commit.new(commit) if commit commit end def commits(ref, path = nil, limit = nil, offset = nil) - commits = raw_repository.commits(ref, path, limit, offset) + commits = Gitlab::Git::Commit.where( + repo: raw_repository, + ref: ref, + path: path, + limit: limit, + offset: offset, + ) commits = Commit.decorate(commits) if commits.present? commits end - def commits_between(target, source) - commits = raw_repository.commits_between(target, source) + def commits_between(from, to) + commits = Gitlab::Git::Commit.between(raw_repository, from, to) commits = Commit.decorate(commits) if commits.present? commits end @@ -43,6 +49,12 @@ class Repository tags.find { |tag| tag.name == name } end + def recent_branches(limit = 20) + branches.sort do |a, b| + a.commit.committed_date <=> b.commit.committed_date + end[0..limit] + end + def add_branch(branch_name, ref) Rails.cache.delete(cache_key(:branch_names)) diff --git a/app/services/notification_service.rb b/app/services/notification_service.rb index 5548c18bfe1..c20b07e69f0 100644 --- a/app/services/notification_service.rb +++ b/app/services/notification_service.rb @@ -102,19 +102,22 @@ class NotificationService # ignore wall messages return true unless note.noteable_type.present? + # ignore gitlab service messages + return true if note.note =~ /\A_Status changed to closed_/ + opts = { noteable_type: note.noteable_type, project_id: note.project_id } if note.commit_id.present? opts.merge!(commit_id: note.commit_id) - recipients = [note.commit_author] else opts.merge!(noteable_id: note.noteable_id) - target = note.noteable - if target.respond_to?(:participants) - recipients = target.participants - else - recipients = [] - end + end + + target = note.noteable + if target.respond_to?(:participants) + recipients = target.participants + else + recipients = note.mentioned_users end # Get users who left comment in thread diff --git a/app/views/admin/groups/edit.html.haml b/app/views/admin/groups/edit.html.haml index f4d931f480f..8ed463a8191 100644 --- a/app/views/admin/groups/edit.html.haml +++ b/app/views/admin/groups/edit.html.haml @@ -4,22 +4,22 @@ - if @group.errors.any? .alert.alert-error %span= @group.errors.full_messages.first - .clearfix.group_name_holder + .control-group.group_name_holder = f.label :name do Group name is - .input - = f.text_field :name, placeholder: "Example Group", class: "xxlarge" + .controls + = f.text_field :name, placeholder: "Example Group", class: "input-xxlarge" - .clearfix.group-description-holder + .control-group.group-description-holder = f.label :description, "Details" - .input - = f.text_area :description, maxlength: 250, class: "xxlarge js-gfm-input", rows: 4 + .controls + = f.text_area :description, maxlength: 250, class: "input-xxlarge js-gfm-input", rows: 4 - .clearfix.group_name_holder + .control-group.group_name_holder = f.label :path do %span.cred Group path is - .input - = f.text_field :path, placeholder: "example-group", class: "xxlarge danger" + .controls + = f.text_field :path, placeholder: "example-group", class: "input-xxlarge danger" %ul.cred %li Changing group path can have unintended side effects. %li Renaming group path will rename directory for all related projects diff --git a/app/views/admin/groups/index.html.haml b/app/views/admin/groups/index.html.haml index cff0251cd5a..8e45dc76ec6 100644 --- a/app/views/admin/groups/index.html.haml +++ b/app/views/admin/groups/index.html.haml @@ -4,7 +4,7 @@ allows you to keep projects organized. Use groups for uniting related projects. - = link_to 'New Group', new_admin_group_path, class: "btn btn-small pull-right" + = link_to 'New Group', new_admin_group_path, class: "btn btn-new pull-right" %br = form_tag admin_groups_path, method: :get, class: 'form-inline' do = text_field_tag :name, params[:name], class: "span6" diff --git a/app/views/admin/groups/new.html.haml b/app/views/admin/groups/new.html.haml index 483c40b1791..0ae35eb6b43 100644 --- a/app/views/admin/groups/new.html.haml +++ b/app/views/admin/groups/new.html.haml @@ -4,15 +4,15 @@ - if @group.errors.any? .alert.alert-error %span= @group.errors.full_messages.first - .clearfix + .control-group = f.label :name do Group name is - .input - = f.text_field :name, placeholder: "Ex. OpenSource", class: "xxlarge left" - .clearfix.group-description-holder + .controls + = f.text_field :name, placeholder: "Ex. OpenSource", class: "input-xxlarge left" + .control-group.group-description-holder = f.label :description, "Details" - .input - = f.text_area :description, maxlength: 250, class: "xxlarge js-gfm-input", rows: 4 + .controls + = f.text_area :description, maxlength: 250, class: "input-xxlarge js-gfm-input", rows: 4 .form-actions = f.submit 'Create group', class: "btn btn-create" diff --git a/app/views/admin/hooks/index.html.haml b/app/views/admin/hooks/index.html.haml index 316e8235cbe..8f302dce5d4 100644 --- a/app/views/admin/hooks/index.html.haml +++ b/app/views/admin/hooks/index.html.haml @@ -10,10 +10,10 @@ .alert.alert-error - @hook.errors.full_messages.each do |msg| %p= msg - .clearfix + .control-group = f.label :url, "URL:" - .input - = f.text_field :url, class: "text_field xxlarge" + .controls + = f.text_field :url, class: "text_field input-xxlarge input-xpadding" = f.submit "Add System Hook", class: "btn btn-create" %hr diff --git a/app/views/admin/projects/index.html.haml b/app/views/admin/projects/index.html.haml index d641d366ca7..bc297209ae5 100644 --- a/app/views/admin/projects/index.html.haml +++ b/app/views/admin/projects/index.html.haml @@ -38,7 +38,7 @@ .title Projects (#{@projects.total_count}) .pull-right - = link_to 'New Project', new_project_path, class: "btn btn-small btn-primary wide" + = link_to 'New Project', new_project_path, class: "btn btn-new" %ul.well-list - @projects.each do |project| %li diff --git a/app/views/admin/users/_form.html.haml b/app/views/admin/users/_form.html.haml index 4f7f05c84f1..1365404edad 100644 --- a/app/views/admin/users/_form.html.haml +++ b/app/views/admin/users/_form.html.haml @@ -8,28 +8,28 @@ %fieldset %legend Account - .clearfix + .control-group = f.label :name - .input + .controls = f.text_field :name, required: true, autocomplete: "off" %span.help-inline * required - .clearfix + .control-group = f.label :username - .input + .controls = f.text_field :username, required: true, autocomplete: "off" %span.help-inline * required - .clearfix + .control-group = f.label :email - .input + .controls = f.text_field :email, required: true, autocomplete: "off" %span.help-inline * required - if @user.new_record? %fieldset %legend Password - .clearfix + .control-group = f.label :password - .input + .controls %strong A temporary password will be generated and sent to user. %br @@ -37,33 +37,33 @@ - else %fieldset %legend Password - .clearfix + .control-group = f.label :password - .input= f.password_field :password, disabled: f.object.force_random_password - .clearfix + .controls= f.password_field :password, disabled: f.object.force_random_password + .control-group = f.label :password_confirmation - .input= f.password_field :password_confirmation, disabled: f.object.force_random_password + .controls= f.password_field :password_confirmation, disabled: f.object.force_random_password %fieldset %legend Access .row .span8 - .clearfix + .control-group = f.label :projects_limit - .input= f.number_field :projects_limit + .controls= f.number_field :projects_limit - .clearfix + .control-group = f.label :can_create_group - .input= f.check_box :can_create_group + .controls= f.check_box :can_create_group - .clearfix + .control-group = f.label :can_create_team - .input= f.check_box :can_create_team + .controls= f.check_box :can_create_team - .clearfix + .control-group = f.label :admin do %strong.cred Administrator - .input= f.check_box :admin + .controls= f.check_box :admin .span4 - unless @user.new_record? .alert.alert-error @@ -75,17 +75,17 @@ = link_to 'Block User', block_admin_user_path(@user), confirm: 'USER WILL BE BLOCKED! Are you sure?', method: :put, class: "btn btn-small btn-remove" %fieldset %legend Profile - .clearfix + .control-group = f.label :skype - .input= f.text_field :skype - .clearfix + .controls= f.text_field :skype + .control-group = f.label :linkedin - .input= f.text_field :linkedin - .clearfix + .controls= f.text_field :linkedin + .control-group = f.label :twitter - .input= f.text_field :twitter + .controls= f.text_field :twitter - .actions + .form-actions - if @user.new_record? = f.submit 'Create user', class: "btn btn-create" = link_to 'Cancel', admin_users_path, class: "btn btn-cancel" diff --git a/app/views/admin/users/index.html.haml b/app/views/admin/users/index.html.haml index c2dfcb5e6fa..b32f0ae87cc 100644 --- a/app/views/admin/users/index.html.haml +++ b/app/views/admin/users/index.html.haml @@ -30,7 +30,7 @@ .title Users (#{@users.total_count}) .pull-right - = link_to 'New User', new_admin_user_path, class: "btn btn-small wide btn-primary" + = link_to 'New User', new_admin_user_path, class: "btn btn-new" %ul.well-list - @users.each do |user| %li @@ -55,4 +55,4 @@ - else = link_to 'Block', block_admin_user_path(user), confirm: 'USER WILL BE BLOCKED! Are you sure?', method: :put, class: "btn btn-small btn-remove" = link_to 'Destroy', [:admin, user], confirm: "USER #{user.name} WILL BE REMOVED! Are you sure?", method: :delete, class: "btn btn-small btn-remove" - = paginate @users, theme: "gitlab" + = paginate @users, theme: "gitlab" diff --git a/app/views/dashboard/_filter.html.haml b/app/views/dashboard/_filter.html.haml deleted file mode 100644 index d3208e6aad6..00000000000 --- a/app/views/dashboard/_filter.html.haml +++ /dev/null @@ -1,27 +0,0 @@ -= form_tag dashboard_filter_path(entity), method: 'get' do - %fieldset - %ul.nav.nav-pills.nav-stacked - %li{class: ("active" if !params[:status])} - = link_to dashboard_filter_path(entity, status: nil) do - Open - %li{class: ("active" if params[:status] == 'closed')} - = link_to dashboard_filter_path(entity, status: 'closed') do - Closed - %li{class: ("active" if params[:status] == 'all')} - = link_to dashboard_filter_path(entity, status: 'all') do - All - - %fieldset - %legend Projects: - %ul.nav.nav-pills.nav-stacked - - @projects.each do |project| - - unless entities_per_project(project, entity).zero? - %li{class: ("active" if params[:project_id] == project.id.to_s)} - = link_to dashboard_filter_path(entity, project_id: project.id) do - = project.name_with_namespace - %small.pull-right= entities_per_project(project, entity) - - %fieldset - %hr - = link_to "Reset", dashboard_filter_path(entity), class: 'btn pull-right' - diff --git a/app/views/dashboard/issues.html.haml b/app/views/dashboard/issues.html.haml index 63003c2859b..8b736fb5039 100644 --- a/app/views/dashboard/issues.html.haml +++ b/app/views/dashboard/issues.html.haml @@ -1,29 +1,13 @@ %h3.page-title - Issues - %span.light - – - Assigned to you + Issues assigned to me %span.pull-right #{@issues.total_count} issues +%p.light + For all issues you should visit project issues page. Or you can use search panel to find specific issue +%hr + .row .span3 - = render 'filter', entity: 'issue' + = render 'shared/filter', entity: 'issue' .span9 - - if @issues.any? - - @issues.group_by(&:project).each do |group| - %div.ui-box - - project = group[0] - .title - = link_to_project project - - %i.icon-angle-right - - = link_to 'issues', project_issues_path(project) - - %ul.well-list.issues-list - - group[1].each do |issue| - = render 'projects/issues/issue', issue: issue - %hr - = paginate @issues, theme: "gitlab" - - else - %p.nothing_here_message Nothing to show here + = render 'shared/issues' diff --git a/app/views/dashboard/merge_requests.html.haml b/app/views/dashboard/merge_requests.html.haml index de5d8018757..6ffe54028b5 100644 --- a/app/views/dashboard/merge_requests.html.haml +++ b/app/views/dashboard/merge_requests.html.haml @@ -1,12 +1,13 @@ %h3.page-title Merge Requests - %span.light - – - Authored by or assigned to you %span.pull-right #{@merge_requests.total_count} merge requests + +%p.light + Only merge requests authored or assigned to you are listed here. +%hr .row .span3 - = render 'filter', entity: 'merge_request' + = render 'shared/filter', entity: 'merge_request' .span9 = render 'shared/merge_requests' diff --git a/app/views/dashboard/projects.html.haml b/app/views/dashboard/projects.html.haml index 78ba479c5af..8fd0744a63f 100644 --- a/app/views/dashboard/projects.html.haml +++ b/app/views/dashboard/projects.html.haml @@ -1,3 +1,7 @@ +%h3.page-title My Projects +%p.light + All projects you have access to are listed here. Public projects are not included here unless you have membership in it +%hr .row .span3 %ul.nav.nav-pills.nav-stacked @@ -32,7 +36,7 @@ = label.name .span9 - %ul.bordered-list.my-projects + %ul.bordered-list.my-projects.top-list - @projects.each do |project| %li %h4.project-title diff --git a/app/views/groups/_new_group_member.html.haml b/app/views/groups/_new_group_member.html.haml index 87c9c3264e0..234392c03e1 100644 --- a/app/views/groups/_new_group_member.html.haml +++ b/app/views/groups/_new_group_member.html.haml @@ -1,16 +1,19 @@ = form_for @users_group, url: group_users_groups_path(@group) do |f| %fieldset - %legend= "New Group member(s) for #{@group.name}" + %legend + New member(s) for + %strong #{@group.name} + group - %h6 1. Choose users you want in the group - .clearfix + %p 1. Choose users you want in the group + .control-group = f.label :user_ids, "People" - .input= users_select_tag(:user_ids, multiple: true, class: 'input-large') + .controls= users_select_tag(:user_ids, multiple: true, class: 'input-large') - %h6 2. Set access level for them - .clearfix + %p 2. Set access level for them + .control-group = f.label :group_access, "Group Access" - .input= select_tag :group_access, options_for_select(UsersGroup.group_access_roles, @users_group.group_access), class: "project-access-select chosen" + .controls= select_tag :group_access, options_for_select(UsersGroup.group_access_roles, @users_group.group_access), class: "project-access-select chosen" .form-actions = f.submit 'Add users into group', class: "btn btn-create" diff --git a/app/views/groups/edit.html.haml b/app/views/groups/edit.html.haml index ba3333832ea..fe66f89626f 100644 --- a/app/views/groups/edit.html.haml +++ b/app/views/groups/edit.html.haml @@ -20,22 +20,22 @@ .ui-box .title %strong= @group.name - Group Settings: + group settings: %div.form-holder = form_for @group do |f| - if @group.errors.any? .alert.alert-error %span= @group.errors.full_messages.first - .clearfix + .control-group = f.label :name do Group name is - .input - = f.text_field :name, placeholder: "Ex. OpenSource", class: "xxlarge left" + .controls + = f.text_field :name, placeholder: "Ex. OpenSource", class: "input-xxlarge left" - .clearfix.group-description-holder + .control-group.group-description-holder = f.label :description, "Details" - .input - = f.text_area :description, maxlength: 250, class: "xxlarge js-gfm-input", rows: 4 + .controls + = f.text_area :description, maxlength: 250, class: "input-xxlarge js-gfm-input", rows: 4 .form-actions = f.submit 'Save group', class: "btn btn-save" @@ -44,7 +44,7 @@ .ui-box .title %strong= @group.name - Projects: + projects: - if can? current_user, :manage_group, @group %span.pull-right = link_to new_project_path(namespace_id: @group.id), class: "btn btn-tiny" do @@ -85,4 +85,4 @@ %p %strong Removed group can not be restored! - = link_to 'Remove Group', @group, confirm: 'Removed group can not be restored! Are you sure?', method: :delete, class: "btn btn-remove btn-small" + = link_to 'Remove Group', @group, confirm: 'Removed group can not be restored! Are you sure?', method: :delete, class: "btn btn-remove" diff --git a/app/views/groups/issues.html.haml b/app/views/groups/issues.html.haml index 5c76f1c22ed..2785f92e41b 100644 --- a/app/views/groups/issues.html.haml +++ b/app/views/groups/issues.html.haml @@ -6,18 +6,6 @@ %hr .row .span3 - = render 'filter', entity: 'issue' + = render 'shared/filter', entity: 'issue' .span9 - - if @issues.any? - - @issues.group_by(&:project).each do |group| - %div.ui-box - - project = group[0] - .title - = link_to_project project - %ul.well-list.issues-list - - group[1].each do |issue| - = render 'projects/issues/issue', issue: issue - %hr - = paginate @issues, theme: "gitlab" - - else - %p.nothing_here_message Nothing to show here + = render 'shared/issues' diff --git a/app/views/groups/members.html.haml b/app/views/groups/members.html.haml index 82a16e53c6e..77bab11b331 100644 --- a/app/views/groups/members.html.haml +++ b/app/views/groups/members.html.haml @@ -1,21 +1,17 @@ +%h3.page-title + Group members +%p.light + Members of group have access to all group projects. +%hr - can_manage_group = current_user.can? :manage_group, @group -.row - .span6 - - if can_manage_group - = render "new_group_member" - - else - .light-well - %h4.nothing_here_message - Only group owners can manage group members - .span6 - .ui-box - .title - %strong #{@group.name} - Group Members - %small - (#{@members.count}) - %ul.well-list - - @members.each do |member| - = render 'users_groups/users_group', member: member, show_controls: can_manage_group - %p.light - Group members get access to all projects in this group +.ui-box + .title + %strong #{@group.name} + group members + %small + (#{@members.count}) + %ul.well-list + - @members.each do |member| + = render 'users_groups/users_group', member: member, show_controls: can_manage_group +- if can_manage_group + = render "new_group_member" diff --git a/app/views/groups/merge_requests.html.haml b/app/views/groups/merge_requests.html.haml index eb8497c03f1..93a07f4ed89 100644 --- a/app/views/groups/merge_requests.html.haml +++ b/app/views/groups/merge_requests.html.haml @@ -6,6 +6,6 @@ %hr .row .span3 - = render 'filter', entity: 'merge_request' + = render 'shared/filter', entity: 'merge_request' .span9 = render 'shared/merge_requests' diff --git a/app/views/groups/new.html.haml b/app/views/groups/new.html.haml index 4aa58dedc4a..02049bb2ee6 100644 --- a/app/views/groups/new.html.haml +++ b/app/views/groups/new.html.haml @@ -2,19 +2,19 @@ - if @group.errors.any? .alert.alert-error %span= @group.errors.full_messages.first - .clearfix + .control-group = f.label :name do Group name is - .input - = f.text_field :name, placeholder: "Ex. OpenSource", class: "xxlarge left" + .controls + = f.text_field :name, placeholder: "Ex. OpenSource", class: "input-xxlarge left" - .clearfix.group-description-holder + .control-group.group-description-holder = f.label :description, "Details" - .input - = f.text_area :description, maxlength: 250, class: "xxlarge js-gfm-input", rows: 4 + .controls + = f.text_area :description, maxlength: 250, class: "input-xxlarge js-gfm-input", rows: 4 - .clearfix - .input + .control-group + .controls %ul %li Group is kind of directory for several projects %li All created groups are private diff --git a/app/views/help/index.html.haml b/app/views/help/index.html.haml index e5c3b577f91..ff01136f5bb 100644 --- a/app/views/help/index.html.haml +++ b/app/views/help/index.html.haml @@ -8,8 +8,6 @@ %br Fast, secure and stable solution based on Ruby on Rails. -%br - .row .span4 .ui-box diff --git a/app/views/notify/new_user_email.html.haml b/app/views/notify/new_user_email.html.haml index fc2c02ef827..09518cd3c7f 100644 --- a/app/views/notify/new_user_email.html.haml +++ b/app/views/notify/new_user_email.html.haml @@ -4,7 +4,7 @@ - if Gitlab.config.gitlab.signup_enabled Your account has been created successfully. - else - The Administrator created an account for you. Now you are a member of company GitLab application. + The Administrator created an account for you. Now you are a member of the company GitLab application. %p login.......................................... %code= @user['email'] diff --git a/app/views/notify/new_user_email.text.erb b/app/views/notify/new_user_email.text.erb index 70fe0e0736a..50ed595b38a 100644 --- a/app/views/notify/new_user_email.text.erb +++ b/app/views/notify/new_user_email.text.erb @@ -1,6 +1,6 @@ Hi <%= @user.name %>! -The Administrator created an account for you. Now you are a member of company GitLab application. +The Administrator created an account for you. Now you are a member of the company GitLab application. login.................. <%= @user.email %> <% if @user.created_by_id %> diff --git a/app/views/profiles/account.html.haml b/app/views/profiles/account.html.haml index 9b1354d9f2c..122ff1b4a01 100644 --- a/app/views/profiles/account.html.haml +++ b/app/views/profiles/account.html.haml @@ -1,3 +1,10 @@ +%h3.page-title + Account settings +%p.light + You can change password, username, private token here. + - if current_user.ldap_user? + Some options are unavailable for LDAP accounts +%hr - unless current_user.ldap_user? - if Gitlab.config.omniauth.enabled %fieldset @@ -20,15 +27,15 @@ - @user.errors.full_messages.each do |msg| %li= msg - .clearfix + .control-group = f.label :password - .input= f.password_field :password, required: true - .clearfix + .controls= f.password_field :password, required: true + .control-group = f.label :password_confirmation - .input + .controls = f.password_field :password_confirmation, required: true - .clearfix - .input + .control-group + .controls = f.submit 'Save password', class: "btn btn-save" @@ -47,7 +54,7 @@ It can be used for atom feed or API %p.cgray - if current_user.private_token - = text_field_tag "token", current_user.private_token, class: "xxlarge large_text" + = text_field_tag "token", current_user.private_token, class: "input-xxlarge large_text input-xpadding" = f.submit 'Reset', confirm: "Are you sure?", class: "btn btn-primary btn-build-token" - else %span You don`t have one yet. Click generate to fix it. @@ -63,7 +70,7 @@ = form_for @user, url: update_username_profile_path, method: :put, remote: true do |f| .padded = f.label :username - .input + .controls = f.text_field :username, required: true %span.loading-gif.hide= image_tag "ajax_loader.gif" @@ -76,7 +83,7 @@ %ul.cred %li It will change web url for personal projects. %li It will change the git path to repositories for personal projects. - .input + .controls = f.submit 'Save username', class: "btn btn-save" - if gitlab_config.signup_enabled diff --git a/app/views/profiles/design.html.haml b/app/views/profiles/design.html.haml index 9b6cace4e89..75f00ab10a2 100644 --- a/app/views/profiles/design.html.haml +++ b/app/views/profiles/design.html.haml @@ -1,3 +1,9 @@ +%h3.page-title + My appearance settings +%p.light + Appearance settings saved to your profile and available across all devices +%hr + = form_for @user, url: profile_path, remote: true, method: :put do |f| %fieldset.application-theme %legend diff --git a/app/views/profiles/groups/index.html.haml b/app/views/profiles/groups/index.html.haml index 01f73a24f94..c7c657a92a6 100644 --- a/app/views/profiles/groups/index.html.haml +++ b/app/views/profiles/groups/index.html.haml @@ -1,14 +1,20 @@ +%h3.page-title + Group membership + - if current_user.can_create_group? + %span.pull-right + = link_to new_group_path, class: "btn btn-new" do + %i.icon-plus + New Group +%p.light + Members of group have access to all group projects. +%hr .ui-box .title %strong Groups - (#{@groups.count}) - - if current_user.can_create_group? - %span.pull-right - = link_to new_group_path, class: "btn btn-small btn-primary" do - %i.icon-plus - New Group + (#{@user_groups.count}) %ul.well-list - - @groups.each do |group| + - @user_groups.each do |user_group| + - group = user_group.group %li .pull-right - if can?(current_user, :manage_group, group) @@ -23,4 +29,7 @@ = link_to group, class: 'group-name' do = group.name -= paginate @groups + as #{user_group.human_access} + + += paginate @user_groups diff --git a/app/views/profiles/history.html.haml b/app/views/profiles/history.html.haml index aa7006c569b..5e59463ce37 100644 --- a/app/views/profiles/history.html.haml +++ b/app/views/profiles/history.html.haml @@ -1,3 +1,8 @@ +%h3.page-title + Account history +%p.light + You can see all events authored by your account here +%hr .profile_history = render @events %hr diff --git a/app/views/profiles/keys/_form.html.haml b/app/views/profiles/keys/_form.html.haml index 7ba8e20a44f..3a0b6cd48a1 100644 --- a/app/views/profiles/keys/_form.html.haml +++ b/app/views/profiles/keys/_form.html.haml @@ -6,18 +6,18 @@ - @key.errors.full_messages.each do |msg| %li= msg - .clearfix + .control-group = f.label :title - .input= f.text_field :title - .clearfix + .controls= f.text_field :title, class: "input-xlarge" + .control-group = f.label :key - .input + .controls %p.light Paste your public key here. Read more about how generate it #{link_to "here", help_ssh_path} - = f.text_area :key, class: [:xxlarge, :thin_area] + = f.text_area :key, class: "input-xxlarge thin_area" - .actions + .form-actions = f.submit 'Add key', class: "btn btn-create" = link_to "Cancel", profile_keys_path, class: "btn btn-cancel" diff --git a/app/views/profiles/keys/index.html.haml b/app/views/profiles/keys/index.html.haml index 03413764be4..0704874763e 100644 --- a/app/views/profiles/keys/index.html.haml +++ b/app/views/profiles/keys/index.html.haml @@ -1,16 +1,18 @@ +%h3.page-title + My SSH keys + .pull-right + = link_to "Add SSH Key", new_profile_key_path, class: "btn btn-new" %p.light SSH key allows you to establish a secure connection between your computer and GitLab -%p.light + %br Before you can add ssh key you need to = link_to "generate it", help_ssh_path - +%hr .ui-box .title SSH Keys (#{@keys.count}) - .pull-right - = link_to "Add SSH Key", new_profile_key_path, class: "btn btn-small btn-primary" %ul.well-list#keys-table = render @keys - if @keys.blank? diff --git a/app/views/profiles/notifications/_settings.html.haml b/app/views/profiles/notifications/_settings.html.haml index 1a4a4a9f916..5f62c8099d0 100644 --- a/app/views/profiles/notifications/_settings.html.haml +++ b/app/views/profiles/notifications/_settings.html.haml @@ -2,6 +2,8 @@ .row .span4 %span + = notification_icon(notification) + - if membership.kind_of? UsersGroup = link_to membership.group.name, membership.group - else diff --git a/app/views/profiles/notifications/show.html.haml b/app/views/profiles/notifications/show.html.haml index 43b1cf6f8df..d7963a88d5d 100644 --- a/app/views/profiles/notifications/show.html.haml +++ b/app/views/profiles/notifications/show.html.haml @@ -1,19 +1,27 @@ -%h3.page-title Setup your notification level - -%p.light - %strong Disabled - – You will not get any notifications via email +%h3.page-title + Notifications settings %p.light - %strong Participating - – You will receive only notifications from related resources(ex. from assigned issue or your commit) -%p.light - %strong Watch - – You will receive all notifications from projects in which you participate + Application use email specified in your profile for notifications %hr +.alert.alert-info + %p + %i.icon-circle.cred + %strong Disabled + – You will not get any notifications via email + %p + %i.icon-circle.cblue + %strong Participating + – You will receive only notifications from related resources(ex. from assigned issue or your commit) + %p + %i.icon-circle.cgreen + %strong Watch + – You will receive all notifications from projects in which you participate .row .span4 - %h5 Global setting + %h4 + = notification_icon(@notification) + Global setting .span7 = form_tag profile_notifications_path, method: :put, remote: true, class: 'update-notifications' do = hidden_field_tag :notification_type, 'global' @@ -30,20 +38,21 @@ = radio_button_tag :notification_level, Notification::N_WATCH, @notification.watch?, class: 'trigger-submit' %span Watch -%hr +%br = link_to '#', class: 'js-toggle-visibility-link' do - %h6.btn.btn-tiny + %span.btn.btn-tiny %i.icon-chevron-down %span Advanced notifications settings .js-toggle-visibility-container.hide - %h5 Groups: - %ul.well-list + %hr + %h4 Groups: + %ul.bordered-list - @users_groups.each do |users_group| - notification = Notification.new(users_group) = render 'settings', type: 'group', membership: users_group, notification: notification - %h5 Projects: - %ul.well-list + %h4 Projects: + %ul.bordered-list - @users_projects.each do |users_project| - notification = Notification.new(users_project) = render 'settings', type: 'project', membership: users_project, notification: notification diff --git a/app/views/profiles/passwords/new.html.haml b/app/views/profiles/passwords/new.html.haml index c92424160b3..a4e7dadd16a 100644 --- a/app/views/profiles/passwords/new.html.haml +++ b/app/views/profiles/passwords/new.html.haml @@ -10,13 +10,13 @@ - @user.errors.full_messages.each do |msg| %li= msg - .clearfix + .control-group = f.label :password - .input= f.password_field :password, required: true - .clearfix + .controls= f.password_field :password, required: true + .control-group = f.label :password_confirmation - .input + .controls = f.password_field :password_confirmation, required: true - .clearfix - .input + .control-group + .controls = f.submit 'Set new password', class: "btn btn-create" diff --git a/app/views/profiles/show.html.haml b/app/views/profiles/show.html.haml index dd1186fd37c..25bf7912f1e 100644 --- a/app/views/profiles/show.html.haml +++ b/app/views/profiles/show.html.haml @@ -87,4 +87,4 @@ = link_to "Add Public Key", new_profile_key_path, class: "btn btn-small" .form-actions - = f.submit 'Save', class: "btn btn-save" + = f.submit 'Save changes', class: "btn btn-save" diff --git a/app/views/projects/blame/_head.html.haml b/app/views/projects/blame/_head.html.haml deleted file mode 100644 index 3a883829562..00000000000 --- a/app/views/projects/blame/_head.html.haml +++ /dev/null @@ -1,2 +0,0 @@ -%div.tree-ref-holder - = render 'shared/ref_switcher', destination: 'tree', path: params[:path] diff --git a/app/views/projects/blame/show.html.haml b/app/views/projects/blame/show.html.haml index e9a69390577..cdca8b2e634 100644 --- a/app/views/projects/blame/show.html.haml +++ b/app/views/projects/blame/show.html.haml @@ -1,21 +1,11 @@ -= render "head" +%h3.page-title Blame view #tree-holder.tree-holder - %ul.breadcrumb - %li - %i.icon-angle-right - = link_to project_tree_path(@project, @ref) do - = @project.name - - tree_breadcrumbs(@tree, 6) do |link| - \/ - %li= link - .clear - .file-holder .file-title %i.icon-file %span.file_name - = @blob.name + = @path %small= number_to_human_size @blob.size %span.options= render "projects/blob/actions" .file-content.blame diff --git a/app/views/projects/blob/_actions.html.haml b/app/views/projects/blob/_actions.html.haml index 456c7432c94..5641c528a4f 100644 --- a/app/views/projects/blob/_actions.html.haml +++ b/app/views/projects/blob/_actions.html.haml @@ -1,12 +1,12 @@ .btn-group.tree-btn-group -# only show edit link for text files - if @blob.text? - = link_to "edit", project_edit_tree_path(@project, @id), class: "btn btn-tiny", disabled: !allowed_tree_edit? - = link_to "raw", project_raw_path(@project, @id), class: "btn btn-tiny", target: "_blank" + = link_to "edit", project_edit_tree_path(@project, @id), class: "btn btn-small", disabled: !allowed_tree_edit? + = link_to "raw", project_raw_path(@project, @id), class: "btn btn-small", target: "_blank" -# only show normal/blame view links for text files - if @blob.text? - if current_page? project_blame_path(@project, @id) - = link_to "normal view", project_blob_path(@project, @id), class: "btn btn-tiny" + = link_to "normal view", project_blob_path(@project, @id), class: "btn btn-small" - else - = link_to "blame", project_blame_path(@project, @id), class: "btn btn-tiny" unless @blob.empty? - = link_to "history", project_commits_path(@project, @id), class: "btn btn-tiny" + = link_to "blame", project_blame_path(@project, @id), class: "btn btn-small" unless @blob.empty? + = link_to "history", project_commits_path(@project, @id), class: "btn btn-small" diff --git a/app/views/projects/repositories/_filter.html.haml b/app/views/projects/branches/_filter.html.haml index 660d9d25a35..7ea11a74a2b 100644 --- a/app/views/projects/repositories/_filter.html.haml +++ b/app/views/projects/branches/_filter.html.haml @@ -1,6 +1,6 @@ %ul.nav.nav-pills.nav-stacked - = nav_link(path: 'repositories#show') do - = link_to 'Recent', project_repository_path(@project) + = nav_link(path: 'branches#recent') do + = link_to 'Recent', recent_project_branches_path(@project) = nav_link(path: 'protected_branches#index') do = link_to project_protected_branches_path(@project) do Protected diff --git a/app/views/projects/branches/index.html.haml b/app/views/projects/branches/index.html.haml index 4cfafe1a7af..7a0eda6408a 100644 --- a/app/views/projects/branches/index.html.haml +++ b/app/views/projects/branches/index.html.haml @@ -1,7 +1,7 @@ = render "projects/commits/head" .row .span3 - = render "projects/repositories/filter" + = render "filter" .span9 - unless @branches.empty? %ul.bordered-list diff --git a/app/views/projects/branches/recent.html.haml b/app/views/projects/branches/recent.html.haml new file mode 100644 index 00000000000..6cafb47364b --- /dev/null +++ b/app/views/projects/branches/recent.html.haml @@ -0,0 +1,8 @@ += render "projects/commits/head" +.row + .span3 + = render "filter" + .span9 + %ul.bordered-list + - @branches.each do |branch| + = render "projects/branches/branch", branch: branch diff --git a/app/views/projects/commits/_head.html.haml b/app/views/projects/commits/_head.html.haml index 06d69eb5f75..c16abac7f17 100644 --- a/app/views/projects/commits/_head.html.haml +++ b/app/views/projects/commits/_head.html.haml @@ -7,7 +7,7 @@ = link_to 'Compare', project_compare_index_path(@project) = nav_link(html_options: {class: branches_tab_class}) do - = link_to project_repository_path(@project) do + = link_to recent_project_branches_path(@project) do Branches %span.badge= @repository.branches.length diff --git a/app/views/projects/commits/_text_file.html.haml b/app/views/projects/commits/_text_file.html.haml index bfc3180a84c..c724213878a 100644 --- a/app/views/projects/commits/_text_file.html.haml +++ b/app/views/projects/commits/_text_file.html.haml @@ -3,7 +3,7 @@ %a.supp_diff_link Diff suppressed. Click to show %table.text-file{class: "#{'hide' if too_big}"} - - each_diff_line(diff, index) do |line, type, line_code, line_new, line_old| + - each_diff_line(diff, index) do |line, type, line_code, line_new, line_old, raw_line| %tr.line_holder{ id: line_code, class: "#{type}" } - if type == "match" %td.old_line= "..." @@ -20,4 +20,4 @@ - if @reply_allowed - comments = @line_notes.select { |n| n.line_code == line_code }.sort_by(&:created_at) - unless comments.empty? - = render "projects/notes/diff_notes_with_reply", notes: comments + = render "projects/notes/diff_notes_with_reply", notes: comments, line: line diff --git a/app/views/projects/commits/show.html.haml b/app/views/projects/commits/show.html.haml index d56923fdca4..723c5a1c340 100644 --- a/app/views/projects/commits/show.html.haml +++ b/app/views/projects/commits/show.html.haml @@ -1,7 +1,7 @@ = render "head" - if @path.present? - %ul.breadcrumb + %ul.breadcrumb.commit-breadcrumb %li.light History for = commits_breadcrumbs diff --git a/app/views/projects/compare/_form.html.haml b/app/views/projects/compare/_form.html.haml index 0d388651e14..ee733f80954 100644 --- a/app/views/projects/compare/_form.html.haml +++ b/app/views/projects/compare/_form.html.haml @@ -14,9 +14,9 @@ .pull-left - if params[:to] && params[:from] = link_to 'switch', {from: params[:to], to: params[:from]}, {class: 'commits-compare-switch has_tooltip', title: 'Switch base of comparison'} - = text_field_tag :from, params[:from], placeholder: "master", class: "xlarge" + = text_field_tag :from, params[:from], placeholder: "master", class: "input-xlarge input-xpadding" = "..." - = text_field_tag :to, params[:to], placeholder: "aa8b4ef", class: "xlarge" + = text_field_tag :to, params[:to], placeholder: "aa8b4ef", class: "input-xlarge input-xpadding" .pull-left = submit_tag "Compare", class: "btn btn-create commits-compare-btn" diff --git a/app/views/projects/create.js.haml b/app/views/projects/create.js.haml index 52e61f47283..a444b8b59a6 100644 --- a/app/views/projects/create.js.haml +++ b/app/views/projects/create.js.haml @@ -4,5 +4,6 @@ - else :plain $(".project-edit-errors").html("#{escape_javascript(render('errors'))}"); + $('.project-submit').enable(); $('.save-project-loader').hide(); $('.project-edit-container').show(); diff --git a/app/views/projects/deploy_keys/_form.html.haml b/app/views/projects/deploy_keys/_form.html.haml index 71bf309dd8b..00b41e657b6 100644 --- a/app/views/projects/deploy_keys/_form.html.haml +++ b/app/views/projects/deploy_keys/_form.html.haml @@ -6,18 +6,18 @@ - @key.errors.full_messages.each do |msg| %li= msg - .clearfix + .control-group = f.label :title - .input= f.text_field :title - .clearfix + .controls= f.text_field :title, class: 'input-xlarge' + .control-group = f.label :key - .input - = f.text_area :key, class: [:xxlarge, :thin_area] - %p.hint + .controls + %p.light Paste a machine public key here. Read more about how generate it = link_to "here", help_ssh_path + = f.text_area :key, class: "input-xxlarge thin_area" - .actions + .form-actions = f.submit 'Create', class: "btn-create btn" = link_to "Cancel", project_deploy_keys_path(@project), class: "btn btn-cancel" diff --git a/app/views/projects/deploy_keys/index.html.haml b/app/views/projects/deploy_keys/index.html.haml index a1fa3475a84..3e797691241 100644 --- a/app/views/projects/deploy_keys/index.html.haml +++ b/app/views/projects/deploy_keys/index.html.haml @@ -1,19 +1,21 @@ -%p.slead - Deploy keys allow read-only access to repository. They can be used for CI, staging or production servers +%h3.page-title + Deploy keys allow read-only access to repository -%p - You can create a deploy key or add existing one - = link_to new_project_deploy_key_path(@project), class: "btn btn-primary pull-right", title: "New Deploy Key" do + = link_to new_project_deploy_key_path(@project), class: "btn btn-new pull-right", title: "New Deploy Key" do %i.icon-plus New Deploy Key +%p.light + They can be used for CI, staging or production servers. + You can create a deploy key or add existing one + %hr.clearfix .row .span5.enabled-keys - %h5.cgreen - Enabled deploy keys - %small for this project + %h5 + %strong.cgreen Enabled deploy keys + for this project %ul.bordered-list = render @enabled_keys - if @enabled_keys.blank? @@ -21,10 +23,10 @@ %p.nothing_here_message Create #{link_to 'new deploy key', new_project_deploy_key_path(@project)} or add existing one .span5.available-keys %h5 - Available deploy keys - %small from projects you are able to manage + %strong Deploy keys + from projects available for you %ul.bordered-list = render @available_keys - if @available_keys.blank? .light-well - %p.nothing_here_message All deploy keys created in projects you own will be displayed here + %p.nothing_here_message All deploy keys created in projects you participate will be displayed here diff --git a/app/views/projects/edit.html.haml b/app/views/projects/edit.html.haml index f9fc65a71b4..11df63d5ac7 100644 --- a/app/views/projects/edit.html.haml +++ b/app/views/projects/edit.html.haml @@ -4,28 +4,28 @@ .ui-box.white .title %strong= @project.name - Project Settings: + project settings: .form-holder = form_for(@project, remote: true) do |f| %fieldset - .clearfix.project_name_holder + .control-group.project_name_holder = f.label :name do Project name is - .input + .controls = f.text_field :name, placeholder: "Example Project", class: "span5" - .clearfix + .control-group = f.label :description do Project description %span.light (optional) - .input + .controls = f.text_area :description, placeholder: "awesome project", class: "span5", rows: 3, maxlength: 250 - - unless @project.empty_repo? - .clearfix + - if @project.repository.exists? && @project.repository.branch_names.any? + .control-group = f.label :default_branch, "Default Branch" - .input= f.select(:default_branch, @repository.branch_names, {}, {class: 'chosen'}) + .controls= f.select(:default_branch, @repository.branch_names, {}, {class: 'chosen'}) - if can?(current_user, :change_public_mode, @project) @@ -66,11 +66,11 @@ - if Project.issues_tracker.values.count > 1 .control-group = f.label :issues_tracker, "Issues tracker", class: 'control-label' - .input= f.select(:issues_tracker, Project.issues_tracker.values, {}, { disabled: !@project.issues_enabled }) + .controls= f.select(:issues_tracker, Project.issues_tracker.values, {}, { disabled: !@project.issues_enabled }) - .clearfix + .control-group = f.label :issues_tracker_id, "Project name or id in issues tracker", class: 'control-label' - .input= f.text_field :issues_tracker_id, disabled: !@project.can_have_issues_tracker_id? + .controls= f.text_field :issues_tracker_id, disabled: !@project.can_have_issues_tracker_id? .control-group = f.label :merge_requests_enabled, "Merge Requests", class: 'control-label' @@ -98,7 +98,7 @@ .form-actions - = f.submit 'Save', class: "btn btn-save" + = f.submit 'Save changes', class: "btn btn-save" - if can?(current_user, :change_namespace, @project) .ui-box.ui-box-danger @@ -110,7 +110,7 @@ = f.label :namespace_id do %span Namespace .controls - .clearfix + .control-group = f.select :namespace_id, namespaces_options(@project.namespace_id), {prompt: 'Choose a project namespace'}, {class: 'chosen'} %ul %li Be careful. Changing project namespace can have unintended side effects @@ -130,7 +130,7 @@ = f.label :path do %span Path .controls - .clearfix + .control-group = f.text_field :path %ul %li Be careful. Rename of project repo can have unintended side effects diff --git a/app/views/projects/edit_tree/show.html.haml b/app/views/projects/edit_tree/show.html.haml index 65b6e994884..06396ba992b 100644 --- a/app/views/projects/edit_tree/show.html.haml +++ b/app/views/projects/edit_tree/show.html.haml @@ -1,3 +1,4 @@ +%h3.page-title Edit mode .file-editor = form_tag(project_edit_tree_path(@project, @id), method: :put, class: "form-horizontal") do .file-holder diff --git a/app/views/projects/hooks/index.html.haml b/app/views/projects/hooks/index.html.haml index c4b51d09335..53e54103617 100644 --- a/app/views/projects/hooks/index.html.haml +++ b/app/views/projects/hooks/index.html.haml @@ -11,10 +11,10 @@ .alert.alert-error - @hook.errors.full_messages.each do |msg| %p= msg - .clearfix + .control-group = f.label :url, "URL:" - .input - = f.text_field :url, class: "text_field xxlarge" + .controls + = f.text_field :url, class: "text_field input-xxlarge input-xpadding", placeholder: 'http://example.com/trigger-ci.json' = f.submit "Add Web Hook", class: "btn btn-create" %hr diff --git a/app/views/projects/issues/_filter.html.haml b/app/views/projects/issues/_filter.html.haml index 8495c323cb8..663d786634d 100644 --- a/app/views/projects/issues/_filter.html.haml +++ b/app/views/projects/issues/_filter.html.haml @@ -18,6 +18,9 @@ All %fieldset - %hr - = link_to "Reset", project_issues_path(@project), class: 'btn pull-right' + - if %w(status milestone_id assignee_id label_name).select { |k| params[k].present? }.any? + = link_to project_issues_path(@project), class: 'cgray pull-right' do + %i.icon-remove + Clear filter + diff --git a/app/views/projects/issues/_form.html.haml b/app/views/projects/issues/_form.html.haml index b711d861125..2672fbb2cde 100644 --- a/app/views/projects/issues/_form.html.haml +++ b/app/views/projects/issues/_form.html.haml @@ -8,18 +8,18 @@ %br .ui-box.ui-box-show .ui-box-head - .clearfix + .control-group = f.label :title do %strong= "Subject *" - .input - = f.text_field :title, maxlength: 255, class: "xxlarge js-gfm-input", autofocus: true, required: true + .controls + = f.text_field :title, maxlength: 255, class: "input-xxlarge js-gfm-input", autofocus: true, required: true .ui-box-body - .clearfix + .control-group .issue_assignee.pull-left = f.label :assignee_id do %i.icon-user Assign to - .input + .controls .pull-left = f.select(:assignee_id, @project.team.members.sort_by(&:name).map {|p| [ p.name, p.id ] }, { include_blank: "Select a user" }, {class: 'chosen'}) .pull-right @@ -29,25 +29,25 @@ = f.label :milestone_id do %i.icon-time Milestone - .input= f.select(:milestone_id, @project.milestones.active.all.collect {|p| [ p.title, p.id ] }, { include_blank: "Select milestone" }, {class: 'chosen'}) + .controls= f.select(:milestone_id, @project.milestones.active.all.collect {|p| [ p.title, p.id ] }, { include_blank: "Select milestone" }, {class: 'chosen'}) .ui-box-bottom - .clearfix + .control-group = f.label :label_list do %i.icon-tag Labels - .input - = f.text_field :label_list, maxlength: 2000, class: "xxlarge" + .controls + = f.text_field :label_list, maxlength: 2000, class: "input-xxlarge" %p.hint Separate labels with commas. - .clearfix + .control-group = f.label :description, "Details" - .input - = f.text_area :description, class: "xxlarge js-gfm-input", rows: 14 + .controls + = f.text_area :description, class: "input-xxlarge js-gfm-input", rows: 14 %p.hint Issues are parsed with #{link_to "GitLab Flavored Markdown", help_markdown_path, target: '_blank'}. - .actions + .form-actions - if @issue.new_record? = f.submit 'Submit new issue', class: "btn btn-create" -else diff --git a/app/views/projects/issues/index.html.haml b/app/views/projects/issues/index.html.haml index ebe124d8906..50df3ee3b7a 100644 --- a/app/views/projects/issues/index.html.haml +++ b/app/views/projects/issues/index.html.haml @@ -6,7 +6,7 @@ .pull-right .span6 - if can? current_user, :write_issue, @project - = link_to new_project_issue_path(@project, issue: { assignee_id: params[:assignee_id], milestone_id: params[:milestone_id]}), class: "btn btn-primary pull-right", title: "New Issue", id: "new_issue_link" do + = link_to new_project_issue_path(@project, issue: { assignee_id: params[:assignee_id], milestone_id: params[:milestone_id]}), class: "btn btn-new pull-right", title: "New Issue", id: "new_issue_link" do %i.icon-plus New Issue = form_tag project_issues_path(@project), method: :get, remote: true, id: "issue_search_form", class: 'pull-right' do @@ -14,7 +14,7 @@ = hidden_field_tag :assignee_id, params[:assignee_id], id: 'search_assignee_id' = hidden_field_tag :milestone_id, params[:milestone_id], id: 'search_milestone_id' = hidden_field_tag :label_name, params[:label_name], id: 'search_label_name' - = search_field_tag :issue_search, nil, { placeholder: 'Search', class: 'issue_search input-xlarge append-right-10 search-text-input' } + = search_field_tag :issue_search, nil, { placeholder: 'Filter by title or description', class: 'input-xpadding issue_search input-xlarge append-right-10 search-text-input' } .row .span3 diff --git a/app/views/projects/merge_requests/_filter.html.haml b/app/views/projects/merge_requests/_filter.html.haml index 4b48306ed05..9f09a7e7bb1 100644 --- a/app/views/projects/merge_requests/_filter.html.haml +++ b/app/views/projects/merge_requests/_filter.html.haml @@ -1,20 +1,21 @@ = form_tag project_issues_path(@project), method: 'get' do %fieldset %ul.nav.nav-pills.nav-stacked - %li{class: ("active" if (params[:f] == 'open' || !params[:f]))} - = link_to project_merge_requests_path(@project, f: 'open', milestone_id: params[:milestone_id]) do + %li{class: ("active" if (params[:status] == 'open' || !params[:status]))} + = link_to project_merge_requests_path(@project, status: 'open', milestone_id: params[:milestone_id]) do Open - %li{class: ("active" if params[:f] == "closed")} - = link_to project_merge_requests_path(@project, f: "closed", milestone_id: params[:milestone_id]) do + %li{class: ("active" if params[:status] == "closed")} + = link_to project_merge_requests_path(@project, status: "closed", milestone_id: params[:milestone_id]) do Closed - %li{class: ("active" if params[:f] == 'assigned-to-me')} - = link_to project_merge_requests_path(@project, f: 'assigned-to-me', milestone_id: params[:milestone_id]) do + %li{class: ("active" if params[:status] == 'assigned-to-me')} + = link_to project_merge_requests_path(@project, status: 'assigned-to-me', milestone_id: params[:milestone_id]) do Assigned To Me - %li{class: ("active" if params[:f] == 'all')} - = link_to project_merge_requests_path(@project, f: 'all', milestone_id: params[:milestone_id]) do + %li{class: ("active" if params[:status] == 'all')} + = link_to project_merge_requests_path(@project, status: 'all', milestone_id: params[:milestone_id]) do All %fieldset - %hr - = link_to "Reset", project_merge_requests_path(@project), class: 'btn pull-right' - + - if %w(status milestone_id assignee_id label_name).select { |k| params[k].present? }.any? + = link_to project_merge_requests_path(@project), class: 'cgray pull-right' do + %i.icon-remove + Clear filter diff --git a/app/views/projects/merge_requests/_form.html.haml b/app/views/projects/merge_requests/_form.html.haml index 54697706198..c8a69800500 100644 --- a/app/views/projects/merge_requests/_form.html.haml +++ b/app/views/projects/merge_requests/_form.html.haml @@ -33,21 +33,21 @@ %i.icon-paper-clip Details .merge-request-form-info - .clearfix + .control-group = f.label :title do %strong= "Title *" - .input= f.text_field :title, class: "input-xxlarge pad js-gfm-input", maxlength: 255, rows: 5, required: true - .clearfix + .controls= f.text_field :title, class: "input-xxlarge pad js-gfm-input", maxlength: 255, rows: 5, required: true + .control-group .left = f.label :assignee_id do %i.icon-user Assign to - .input= f.select(:assignee_id, @project.team.members.sort_by(&:name).map {|p| [ p.name, p.id ] }, { include_blank: "Select user" }, {class: 'chosen span3'}) + .controls= f.select(:assignee_id, @project.team.members.sort_by(&:name).map {|p| [ p.name, p.id ] }, { include_blank: "Select user" }, {class: 'chosen span3'}) .left = f.label :milestone_id do %i.icon-time Milestone - .input= f.select(:milestone_id, @project.milestones.active.all.map {|p| [ p.title, p.id ] }, { include_blank: "Select milestone" }, {class: 'chosen'}) + .controls= f.select(:milestone_id, @project.milestones.active.all.map {|p| [ p.title, p.id ] }, { include_blank: "Select milestone" }, {class: 'chosen'}) .form-actions - if @merge_request.new_record? diff --git a/app/views/projects/merge_requests/edit.html.haml b/app/views/projects/merge_requests/edit.html.haml index 348ebee46e4..67a1541d9bf 100644 --- a/app/views/projects/merge_requests/edit.html.haml +++ b/app/views/projects/merge_requests/edit.html.haml @@ -1,4 +1,4 @@ %h3.page-title - = "Edit merge request #{@merge_request.id}" + = "Edit merge request ##{@merge_request.id}" %hr = render 'form' diff --git a/app/views/projects/merge_requests/index.html.haml b/app/views/projects/merge_requests/index.html.haml index f54a213a3f3..9b9da8d1b8f 100644 --- a/app/views/projects/merge_requests/index.html.haml +++ b/app/views/projects/merge_requests/index.html.haml @@ -1,5 +1,5 @@ - if can? current_user, :write_merge_request, @project - = link_to new_project_merge_request_path(@project), class: "pull-right btn btn-primary", title: "New Merge Request" do + = link_to new_project_merge_request_path(@project), class: "pull-right btn btn-new", title: "New Merge Request" do %i.icon-plus New Merge Request %h3.page-title diff --git a/app/views/projects/merge_requests/show/_how_to_merge.html.haml b/app/views/projects/merge_requests/show/_how_to_merge.html.haml index a0eb2309585..030ac285f2a 100644 --- a/app/views/projects/merge_requests/show/_how_to_merge.html.haml +++ b/app/views/projects/merge_requests/show/_how_to_merge.html.haml @@ -1,7 +1,7 @@ %div#modal_merge_info.modal.hide .modal-header - %a.close{href: "#"} × - %h3 How To Merge + %a.close{href: "#", "data-dismiss" => "modal"} × + %h3 How to merge .modal-body - if @merge_request.for_fork? - source_remote = @merge_request.source_project.namespace.nil? ? "source" :@merge_request.source_project.namespace.path diff --git a/app/views/projects/merge_requests/show/_mr_accept.html.haml b/app/views/projects/merge_requests/show/_mr_accept.html.haml index 47db8cdc8d2..621a3cfa25e 100644 --- a/app/views/projects/merge_requests/show/_mr_accept.html.haml +++ b/app/views/projects/merge_requests/show/_mr_accept.html.haml @@ -11,7 +11,8 @@ %p You can accept this request automatically. If you still want to do it manually - - %strong= link_to "click here", "#", class: "how_to_merge_link vlink", title: "How To Merge" + %strong + = link_to "click here", "#modal_merge_info", class: "how_to_merge_link vlink", title: "How To Merge", "data-toggle" => "modal" for instructions .accept_group = f.submit "Accept Merge Request", class: "btn btn-create accept_merge_request" @@ -31,7 +32,7 @@ .automerge_widget.cannot_be_merged{style: "display:none"} .alert.alert-disabled %span - = link_to "Show how to merge", "#", class: "how_to_merge_link btn btn-small padded", title: "How To Merge" + = link_to "Show how to merge", "#modal_merge_info", class: "how_to_merge_link btn btn-small padded", title: "How To Merge", "data-toggle" => "modal" %strong This request can't be merged with GitLab. You should do it manually diff --git a/app/views/projects/milestones/_form.html.haml b/app/views/projects/milestones/_form.html.haml index 0dc9dab872f..78e4cd2243e 100644 --- a/app/views/projects/milestones/_form.html.haml +++ b/app/views/projects/milestones/_form.html.haml @@ -26,13 +26,13 @@ .span6 .control-group = f.label :due_date, "Due Date", class: "control-label" - .input= f.hidden_field :due_date + .controls= f.hidden_field :due_date .controls .datepicker .form-actions - if @milestone.new_record? - = f.submit 'Create milestone', class: "btn-save btn" + = f.submit 'Create milestone', class: "btn-create btn" = link_to "Cancel", project_milestones_path(@project), class: "btn btn-cancel" -else = f.submit 'Save changes', class: "btn-save btn" diff --git a/app/views/projects/milestones/_milestone.html.haml b/app/views/projects/milestones/_milestone.html.haml index 894fa6c1133..bc3368b765c 100644 --- a/app/views/projects/milestones/_milestone.html.haml +++ b/app/views/projects/milestones/_milestone.html.haml @@ -4,8 +4,7 @@ = link_to edit_project_milestone_path(milestone.project, milestone), class: "btn btn-small edit-milestone-link grouped" do %i.icon-edit Edit - - if milestone.can_be_closed? - = link_to 'Close', project_milestone_path(@project, milestone, milestone: {state_event: :close }), method: :put, remote: true, class: "btn btn-small btn-remove" + = link_to 'Close Milestone', project_milestone_path(@project, milestone, milestone: {state_event: :close }), method: :put, remote: true, class: "btn btn-small btn-remove" %h4 = link_to_gfm truncate(milestone.title, length: 100), project_milestone_path(milestone.project, milestone) - if milestone.expired? and not milestone.closed? diff --git a/app/views/projects/milestones/index.html.haml b/app/views/projects/milestones/index.html.haml index 727fa6149d1..0c0828c9064 100644 --- a/app/views/projects/milestones/index.html.haml +++ b/app/views/projects/milestones/index.html.haml @@ -3,7 +3,7 @@ %h3.page-title Milestones - if can? current_user, :admin_milestone, @project - = link_to new_project_milestone_path(@project), class: "pull-right btn btn-primary", title: "New Milestone" do + = link_to new_project_milestone_path(@project), class: "pull-right btn btn-new", title: "New Milestone" do %i.icon-plus New Milestone diff --git a/app/views/projects/milestones/show.html.haml b/app/views/projects/milestones/show.html.haml index 7be3ba2f758..8a5c2a938b1 100644 --- a/app/views/projects/milestones/show.html.haml +++ b/app/views/projects/milestones/show.html.haml @@ -1,32 +1,23 @@ = render "projects/issues/head" -.row - .span6 - %h3.page-title - Milestone ##{@milestone.id} - %small - = @milestone.expires_at - .back-link - = link_to project_milestones_path(@project) do - ← To milestones list - .span6 - .pull-right - - unless @milestone.closed? - = link_to new_project_issue_path(@project, issue: { milestone_id: @milestone.id }), class: "btn btn-small grouped", title: "New Issue" do - %i.icon-plus - New Issue - = link_to 'Browse Issues', project_issues_path(@milestone.project, milestone_id: @milestone.id), class: "btn edit-milestone-link small grouped" - - if can?(current_user, :admin_milestone, @project) - = link_to edit_project_milestone_path(@project, @milestone), class: "btn btn-small grouped" do - %i.icon-edit - Edit +%h3.page-title + Milestone ##{@milestone.id} + %small + = @milestone.expires_at + .pull-right + - if can?(current_user, :admin_milestone, @project) + = link_to edit_project_milestone_path(@project, @milestone), class: "btn grouped" do + %i.icon-edit + Edit + = link_to 'Close Milestone', project_milestone_path(@project, @milestone, milestone: {state_event: :close }), method: :put, class: "btn btn-remove" +- if @milestone.issues.any? && @milestone.can_be_closed? + .alert.alert-success + %span All issues for this milestone are closed. You may close milestone now. +.back-link + = link_to project_milestones_path(@project) do + ← To milestones list -- if @milestone.can_be_closed? - %hr - %p - %span All issues for this milestone are closed. You may close milestone now. - = link_to 'Close Milestone', project_milestone_path(@project, @milestone, milestone: {state_event: :close }), method: :put, class: "btn btn-small btn-remove" .ui-box.ui-box-show .ui-box-head @@ -69,6 +60,11 @@ Participants %span.badge= @users.count + .pull-right + = link_to new_project_issue_path(@project, issue: { milestone_id: @milestone.id }), class: "btn btn-small grouped", title: "New Issue" do + %i.icon-plus + New Issue + = link_to 'Browse Issues', project_issues_path(@milestone.project, milestone_id: @milestone.id), class: "btn btn-small edit-milestone-link grouped" .tab-content .tab-pane.active#tab-issues diff --git a/app/views/projects/network/_head.html.haml b/app/views/projects/network/_head.html.haml index 59ce787e187..ed9fcaace25 100644 --- a/app/views/projects/network/_head.html.haml +++ b/app/views/projects/network/_head.html.haml @@ -15,7 +15,7 @@ .control-group = label_tag :search , "Looking for commit:", class: 'control-label light' .controls - = text_field_tag :q, @options[:q], placeholder: "Input SHA", class: "search-input xlarge" + = text_field_tag :q, @options[:q], placeholder: "Input SHA", class: "search-input input-xlarge" = button_tag type: 'submit', class: 'btn vtop' do %i.icon-search - @options.each do |key, value| diff --git a/app/views/projects/new.html.haml b/app/views/projects/new.html.haml index e45b2b5757e..d309f0686e0 100644 --- a/app/views/projects/new.html.haml +++ b/app/views/projects/new.html.haml @@ -1,51 +1,52 @@ -.project-edit-container +%p.slead + New projects are private by default. You choose who can see the project and commit to repository. +%hr +.project-edit-container.prepend-top-10 .project-edit-errors = render 'projects/errors' .project-edit-content = form_for @project, remote: true do |f| - .clearfix.project_name_holder + .control-group.project_name_holder = f.label :name do - Project name is - .input - = f.text_field :name, placeholder: "Example Project", class: "xxlarge", tabindex: 1, autofocus: true - = f.submit 'Create project', class: "btn btn-create project-submit", tabindex: 4 + %strong Project name is + .controls + = f.text_field :name, placeholder: "Example Project", class: "input-xlarge", tabindex: 1, autofocus: true - if current_user.can_select_namespace? - .clearfix + .control-group = f.label :namespace_id do %span Namespace - .input + .controls = f.select :namespace_id, namespaces_options(params[:namespace_id] || :current_user), {}, {class: 'chosen', tabindex: 2} - .clearfix - .input + .control-group + .controls = link_to "#", class: 'appear-link' do %i.icon-upload-alt %span Import existing repository? - .clearfix.appear-data.import-url-data + .control-group.appear-data.import-url-data = f.label :import_url do %span Import existing repo - .input - = f.text_field :import_url, class: 'xlarge', placeholder: 'https://github.com/randx/six.git' + .controls + = f.text_field :import_url, class: 'input-xlarge', placeholder: 'https://github.com/randx/six.git' .light URL must be cloneable - .clearfix + .control-group = f.label :description do Description %span.light (optional) - .input - = f.text_area :description, placeholder: "awesome project", class: "span5", rows: 3, maxlength: 250, tabindex: 3 + .controls + = f.text_area :description, placeholder: "awesome project", class: "input-xlarge", rows: 3, maxlength: 250, tabindex: 3 - %p.padded - New projects are private by default. You choose who can see the project and commit to repository. - %hr + .form-actions + = f.submit 'Create project', class: "btn btn-create project-submit", tabindex: 4 - - if current_user.can_create_group? - .clearfix - .input.light - Need a group for several dependent projects? - = link_to new_group_path, class: "btn btn-tiny" do - Create a group + - if current_user.can_create_group? + .pull-right + .controls.light + Need a group for several dependent projects? + = link_to new_group_path, class: "btn btn-tiny" do + Create a group .save-project-loader.hide %center diff --git a/app/views/projects/notes/_diff_notes_with_reply.html.haml b/app/views/projects/notes/_diff_notes_with_reply.html.haml index 5a1a945f399..9537ab18caa 100644 --- a/app/views/projects/notes/_diff_notes_with_reply.html.haml +++ b/app/views/projects/notes/_diff_notes_with_reply.html.haml @@ -1,11 +1,13 @@ - note = notes.first # example note -%tr.notes_holder - %td.notes_line{ colspan: 2 } - %span.btn.disabled - %i.icon-comment - = notes.count - %td.notes_content - %ul.notes{ rel: note.discussion_id } - = render notes +-# Check if line want not changed since comment was left +- if !defined?(line) || line == note.diff_line + %tr.notes_holder + %td.notes_line{ colspan: 2 } + %span.btn.disabled + %i.icon-comment + = notes.count + %td.notes_content + %ul.notes{ rel: note.discussion_id } + = render notes - = render "projects/notes/discussion_reply_button", note: note + = render "projects/notes/discussion_reply_button", note: note diff --git a/app/views/projects/notes/_discussion.html.haml b/app/views/projects/notes/_discussion.html.haml index 8c79b5ad53e..a964d86a8dc 100644 --- a/app/views/projects/notes/_discussion.html.haml +++ b/app/views/projects/notes/_discussion.html.haml @@ -36,7 +36,7 @@ ago .discussion-body - if note.for_diff_line? - - if note.diff + - if note.active? .content .file= render "projects/notes/discussion_diff", discussion_notes: discussion_notes, note: note - else diff --git a/app/views/projects/notes/_note.html.haml b/app/views/projects/notes/_note.html.haml index 1389d899310..fbc924c4e1d 100644 --- a/app/views/projects/notes/_note.html.haml +++ b/app/views/projects/notes/_note.html.haml @@ -8,8 +8,11 @@ - if(note.author_id == current_user.id) || can?(current_user, :admin_note, @project) = link_to "#", title: "Edit comment", class: "js-note-edit" do %i.icon-edit + Edit + = link_to project_note_path(@project, note), title: "Remove comment", method: :delete, confirm: 'Are you sure you want to remove this comment?', remote: true, class: "danger js-note-delete" do %i.icon-trash.cred + Remove = image_tag gravatar_icon(note.author_email), class: "avatar s32" = link_to_member(@project, note.author, avatar: false) %span.note-last-update diff --git a/app/views/projects/protected_branches/index.html.haml b/app/views/projects/protected_branches/index.html.haml index 9cadb6fb126..8930ec4b30a 100644 --- a/app/views/projects/protected_branches/index.html.haml +++ b/app/views/projects/protected_branches/index.html.haml @@ -1,7 +1,7 @@ = render "projects/commits/head" .row .span3 - = render "projects/repositories/filter" + = render "projects/branches/filter" .span9 .alert.alert-info %p Protected branches designed to prevent push for all except #{link_to "masters", help_permissions_path, class: "vlink"}. diff --git a/app/views/projects/repositories/show.html.haml b/app/views/projects/repositories/show.html.haml deleted file mode 100644 index 611d0eddc4c..00000000000 --- a/app/views/projects/repositories/show.html.haml +++ /dev/null @@ -1,9 +0,0 @@ -= render "projects/commits/head" -.row - .span3 - = render "filter" - .span9 - %ul.bordered-list - - @activities.each do |update| - = render "projects/branches/branch", branch: update.head - diff --git a/app/views/projects/snippets/_form.html.haml b/app/views/projects/snippets/_form.html.haml index a8aa5460f2e..14a42f34f25 100644 --- a/app/views/projects/snippets/_form.html.haml +++ b/app/views/projects/snippets/_form.html.haml @@ -9,16 +9,16 @@ - @snippet.errors.full_messages.each do |msg| %li= msg - .clearfix + .control-group = f.label :title - .input= f.text_field :title, placeholder: "Example Snippet", class: 'input-xlarge', required: true - .clearfix + .controls= f.text_field :title, placeholder: "Example Snippet", class: 'input-xlarge', required: true + .control-group = f.label "Lifetime" - .input= f.select :expires_at, lifetime_select_options, {}, {class: 'chosen span2'} - .clearfix + .controls= f.select :expires_at, lifetime_select_options, {}, {class: 'chosen span2'} + .control-group .file-editor = f.label :file_name, "File" - .input + .controls .file-holder.snippet .file-title = f.text_field :file_name, placeholder: "example.rb", class: 'snippet-file-name', required: true diff --git a/app/views/projects/team_members/_form.html.haml b/app/views/projects/team_members/_form.html.haml index 0eb106ee93f..8dd2faa219b 100644 --- a/app/views/projects/team_members/_form.html.haml +++ b/app/views/projects/team_members/_form.html.haml @@ -9,16 +9,16 @@ %li= msg %h6 1. Choose people you want in the team - .clearfix + .control-group = f.label :user_ids, "People" - .input + .controls = users_select_tag(:user_ids, multiple: true) %h6 2. Set access level for them - .clearfix + .control-group = f.label :project_access, "Project Access" - .input= select_tag :project_access, options_for_select(Project.access_options, @user_project_relation.project_access), class: "project-access-select chosen" + .controls= select_tag :project_access, options_for_select(Project.access_options, @user_project_relation.project_access), class: "project-access-select chosen" - .actions + .form-actions = f.submit 'Add users', class: "btn btn-create" = link_to "Cancel", project_team_index_path(@project), class: "btn btn-cancel" diff --git a/app/views/projects/team_members/_group_members.html.haml b/app/views/projects/team_members/_group_members.html.haml index 5c3f813bb20..68f08006854 100644 --- a/app/views/projects/team_members/_group_members.html.haml +++ b/app/views/projects/team_members/_group_members.html.haml @@ -1,7 +1,7 @@ .ui-box .title - %strong #{@group.name} Group - members (#{@group.users_groups.count}) + %strong #{@group.name} + group members (#{@group.users_groups.count}) .pull-right = link_to members_group_path(@group), class: 'btn btn-small' do %i.icon-edit diff --git a/app/views/projects/team_members/_team.html.haml b/app/views/projects/team_members/_team.html.haml index ee660482f3f..2daf6847665 100644 --- a/app/views/projects/team_members/_team.html.haml +++ b/app/views/projects/team_members/_team.html.haml @@ -2,8 +2,8 @@ - can_admin_project = (can? current_user, :admin_project, @project) .ui-box .title - %strong #{@project.name} Project - members (#{members.count}) + %strong #{@project.name} + project members (#{members.count}) %ul.well-list - members.each do |team_member| = render 'team_member', member: team_member, current_user_can_admin_project: can_admin_project diff --git a/app/views/projects/team_members/import.html.haml b/app/views/projects/team_members/import.html.haml index c293cb4beef..36ebe27805b 100644 --- a/app/views/projects/team_members/import.html.haml +++ b/app/views/projects/team_members/import.html.haml @@ -1,15 +1,14 @@ %h3.page-title - = "Import team from another project" + = "Import members from another project" +%p.light + Only project members will be improted. Group members will be skipped. %hr -%p.slead - Read more about project team import #{link_to "here", '#', class: 'vlink'}. = form_tag apply_import_project_team_members_path(@project), method: 'post' do - %p.slead Choose project you want to use as team source: .padded = label_tag :source_project_id, "Project" - .input= select_tag(:source_project_id, options_from_collection_for_select(current_user.authorized_projects, :id, :name_with_namespace), prompt: "Select project", class: "chosen xxlarge", required: true) + .controls= select_tag(:source_project_id, options_from_collection_for_select(current_user.authorized_projects, :id, :name_with_namespace), prompt: "Select project", class: "chosen xxlarge", required: true) - .actions - = submit_tag 'Import', class: "btn btn-save" + .form-actions + = submit_tag 'Import project members', class: "btn btn-create" = link_to "Cancel", project_team_index_path(@project), class: "btn btn-cancel" diff --git a/app/views/projects/team_members/index.html.haml b/app/views/projects/team_members/index.html.haml index e8ae84bb8f5..88325587f44 100644 --- a/app/views/projects/team_members/index.html.haml +++ b/app/views/projects/team_members/index.html.haml @@ -3,14 +3,14 @@ - if can? current_user, :admin_team_member, @project %span.pull-right - = link_to import_project_team_members_path(@project), class: "btn btn-small grouped", title: "Import team from another project" do - Import team from another project - = link_to new_project_team_member_path(@project), class: "btn btn-primary small grouped", title: "New Team Member" do + = link_to new_project_team_member_path(@project), class: "btn btn-new grouped", title: "New Team Member" do New Team Member + = link_to import_project_team_members_path(@project), class: "btn grouped", title: "Import team from another project" do + Import members %p.light Read more about project permissions %strong= link_to "here", help_permissions_path, class: "vlink" += render "team", members: @users_projects - if @group = render "group_members" -= render "team", members: @users_projects diff --git a/app/views/projects/wikis/_form.html.haml b/app/views/projects/wikis/_form.html.haml index 464b1508a7e..16061c9dcbb 100644 --- a/app/views/projects/wikis/_form.html.haml +++ b/app/views/projects/wikis/_form.html.haml @@ -15,7 +15,7 @@ = f.select :format, options_for_select(GollumWiki::MARKUPS, {selected: @wiki.format}), {}, class: "pull-right input-medium" = f.label :format, class: "pull-right", style: "padding-right: 20px;" .ui-box-body - .input + .controls %span.cgray Wiki content is parsed with #{link_to "GitLab Flavored Markdown", help_markdown_path, target: '_blank'}. To link to a (new) page you can just type @@ -23,14 +23,17 @@ \. .ui-box-bottom - = f.label :content - .input= f.text_area :content, class: 'span8 js-gfm-input' + .control-group + = f.label :content + .controls= f.text_area :content, class: 'span8 js-gfm-input' .ui-box-bottom - = f.label :commit_message - .input= f.text_field :message, class: 'span8' - .actions - = f.submit 'Save', class: "btn-save btn" + .control-group + = f.label :commit_message + .controls= f.text_field :message, class: 'span8' + .form-actions - if @wiki && @wiki.persisted? + = f.submit 'Save changes', class: "btn-save btn" = link_to "Cancel", project_wiki_path(@project, @wiki), class: "btn btn-cancel" - else + = f.submit 'Create page', class: "btn-create btn" = link_to "Cancel", project_wiki_path(@project, :home), class: "btn btn-cancel" diff --git a/app/views/projects/wikis/_nav.html.haml b/app/views/projects/wikis/_nav.html.haml index d62b46a7e5b..0a7e51e974c 100644 --- a/app/views/projects/wikis/_nav.html.haml +++ b/app/views/projects/wikis/_nav.html.haml @@ -12,7 +12,7 @@ - if can?(current_user, :write_wiki, @project) .pull-right - = link_to '#', class: "add-new-wiki btn btn-small btn-primary" do + = link_to '#modal-new-wiki', class: "add-new-wiki btn btn-new", "data-toggle" => "modal" do %i.icon-plus New Page diff --git a/app/views/projects/wikis/_new.html.haml b/app/views/projects/wikis/_new.html.haml index c52fbcb58f6..f64772b2001 100644 --- a/app/views/projects/wikis/_new.html.haml +++ b/app/views/projects/wikis/_new.html.haml @@ -1,6 +1,6 @@ %div#modal-new-wiki.modal.hide .modal-header - %a.close{href: "#"} × + %a.close{href: "#", "data-dismiss" => "modal"} × %h3.page-title New Wiki Page .modal-body = label_tag :new_wiki_path do diff --git a/app/views/projects/wikis/git_access.html.haml b/app/views/projects/wikis/git_access.html.haml index e783a982ddb..dd01bb99041 100644 --- a/app/views/projects/wikis/git_access.html.haml +++ b/app/views/projects/wikis/git_access.html.haml @@ -1,10 +1,9 @@ = render 'nav' %h3.page-title - Git Access + Git access for %strong= @gollum_wiki.path_with_namespace = render 'main_links' -%br .content .project_clone_panel .row diff --git a/app/views/public/projects/index.html.haml b/app/views/public/projects/index.html.haml index e933268973a..7fea017acec 100644 --- a/app/views/public/projects/index.html.haml +++ b/app/views/public/projects/index.html.haml @@ -7,7 +7,7 @@ .pull-right = form_tag public_projects_path, method: :get, class: 'form-inline' do |f| .search-holder - .input + .controls = search_field_tag :search, params[:search], placeholder: "gitlab-ci", class: "span3 search-text-input", id: "projects_search" = submit_tag 'Search', class: "btn btn-primary wide" diff --git a/app/views/search/show.html.haml b/app/views/search/show.html.haml index f9647377961..ed939024d94 100644 --- a/app/views/search/show.html.haml +++ b/app/views/search/show.html.haml @@ -2,7 +2,7 @@ .search-holder = label_tag :search do %span Looking for - .input + .controls = search_field_tag :search, params[:search], placeholder: "issue 143", class: "input-xxlarge search-text-input", id: "dashboard_search" = hidden_field_tag :project_id, params[:project_id] = hidden_field_tag :group_id, params[:group_id] diff --git a/app/views/shared/_filter.html.haml b/app/views/shared/_filter.html.haml new file mode 100644 index 00000000000..fc3232e0e0e --- /dev/null +++ b/app/views/shared/_filter.html.haml @@ -0,0 +1,29 @@ += form_tag filter_path(entity), method: 'get' do + %fieldset + %ul.nav.nav-pills.nav-stacked + %li{class: ("active" if params[:status].blank?)} + = link_to filter_path(entity, status: nil) do + Open + %li{class: ("active" if params[:status] == 'closed')} + = link_to filter_path(entity, status: 'closed') do + Closed + %li{class: ("active" if params[:status] == 'all')} + = link_to filter_path(entity, status: 'all') do + All + + %fieldset + %legend Projects: + %ul.nav.nav-pills.nav-pills-small.nav-stacked + - @projects.each do |project| + - unless entities_per_project(project, entity).zero? + %li{class: ("active" if params[:project_id] == project.id.to_s)} + = link_to filter_path(entity, project_id: project.id) do + = project.name_with_namespace + %small.pull-right= entities_per_project(project, entity) + + %fieldset + - if params[:status].present? || params[:project_id].present? + = link_to filter_path(entity, status: nil, project_id: nil), class: 'pull-right cgray' do + %i.icon-remove + Clear filter + diff --git a/app/views/shared/_issues.html.haml b/app/views/shared/_issues.html.haml new file mode 100644 index 00000000000..6f4852d8785 --- /dev/null +++ b/app/views/shared/_issues.html.haml @@ -0,0 +1,15 @@ +- if @issues.any? + - @issues.group_by(&:project).each do |group| + .ui-box.small-box + - project = group[0] + .title + = link_to_project project + = link_to 'show all', project_issues_path(project), class: 'pull-right' + + %ul.well-list.issues-list + - group[1].each do |issue| + = render 'projects/issues/issue', issue: issue + = paginate @issues, theme: "gitlab" +- else + %p.nothing_here_message Nothing to show here + diff --git a/app/views/shared/_merge_requests.html.haml b/app/views/shared/_merge_requests.html.haml index 5276f4bae31..4be445e6a32 100644 --- a/app/views/shared/_merge_requests.html.haml +++ b/app/views/shared/_merge_requests.html.haml @@ -1,13 +1,12 @@ - if @merge_requests.any? - @merge_requests.group_by(&:target_project).each do |group| - .ui-box + .ui-box.small-box - project = group[0] .title = link_to_project project %ul.well-list.mr-list - group[1].each do |merge_request| = render 'projects/merge_requests/merge_request', merge_request: merge_request - %hr = paginate @merge_requests, theme: "gitlab" - else diff --git a/app/views/snippets/_form.html.haml b/app/views/snippets/_form.html.haml index e5c63afe980..fa0d5157a2e 100644 --- a/app/views/snippets/_form.html.haml +++ b/app/views/snippets/_form.html.haml @@ -9,16 +9,16 @@ - @snippet.errors.full_messages.each do |msg| %li= msg - .clearfix + .control-group = f.label :title - .input= f.text_field :title, placeholder: "Example Snippet", class: 'input-xlarge', required: true - .clearfix + .controls= f.text_field :title, placeholder: "Example Snippet", class: 'input-xlarge', required: true + .control-group = f.label "Private?" - .input= f.check_box :private, {class: ''} - .clearfix + .controls= f.check_box :private, {class: ''} + .control-group .file-editor = f.label :file_name, "File" - .input + .controls .file-holder.snippet .file-title = f.text_field :file_name, placeholder: "example.rb", class: 'snippet-file-name', required: true diff --git a/app/views/snippets/current_user_index.html.haml b/app/views/snippets/current_user_index.html.haml index b60026f4584..a2a9aef04eb 100644 --- a/app/views/snippets/current_user_index.html.haml +++ b/app/views/snippets/current_user_index.html.haml @@ -1,12 +1,13 @@ %h3.page-title My Snippets - %small share code pastes with others out of git repository .pull-right - = link_to new_snippet_path, class: "btn btn-small add_new grouped btn-primary", title: "New Snippet" do + = link_to new_snippet_path, class: "btn btn-new grouped", title: "New Snippet" do Add new snippet - = link_to snippets_path, class: "btn btn-small grouped" do + = link_to snippets_path, class: "btn grouped" do Discover snippets +%p.light + Share code pastes with others out of git repository %hr .row diff --git a/app/views/snippets/index.html.haml b/app/views/snippets/index.html.haml index c65ed4fb9df..2f6c914a159 100644 --- a/app/views/snippets/index.html.haml +++ b/app/views/snippets/index.html.haml @@ -1,13 +1,15 @@ %h3.page-title Public snippets - %small share code pastes with others out of git repository .pull-right - = link_to new_snippet_path, class: "btn btn-small add_new grouped btn-primary", title: "New Snippet" do + = link_to new_snippet_path, class: "btn btn-new grouped", title: "New Snippet" do Add new snippet - = link_to user_snippets_path(current_user), class: "btn btn-small grouped" do + = link_to user_snippets_path(current_user), class: "btn grouped" do My snippets +%p.light + Public snippets created by you and other users are listed here + %hr = render 'snippets' diff --git a/app/views/snippets/show.html.haml b/app/views/snippets/show.html.haml index 5cf1fefe5f0..37f9e7576f5 100644 --- a/app/views/snippets/show.html.haml +++ b/app/views/snippets/show.html.haml @@ -7,7 +7,7 @@ private .pull-right - = link_to new_snippet_path, class: "btn btn-small add_new grouped btn-primary", title: "New Snippet" do + = link_to new_snippet_path, class: "btn btn-new btn-small", title: "New Snippet" do Add new snippet diff --git a/app/views/users_groups/_users_group.html.haml b/app/views/users_groups/_users_group.html.haml index d3d08dd5dea..c8d306838f7 100644 --- a/app/views/users_groups/_users_group.html.haml +++ b/app/views/users_groups/_users_group.html.haml @@ -1,6 +1,6 @@ - user = member.user - return unless user -%li{class: dom_class(member)} +%li{class: "#{dom_class(member)} js-toggle-container", id: dom_id(member)} = image_tag gravatar_icon(user.email, 16), class: "avatar s16" %strong= user.name %span.cgray= user.username @@ -8,12 +8,16 @@ %span.label.label-success It's you %span.pull-right - - if @group.owners.include?(user) - %span.label.label-info Group Owner - - else - = member.human_access + %strong= member.human_access - if show_controls && user != @group.owner && user != current_user + = link_to '#', class: "btn-tiny btn js-toggle-button", title: 'Edit access level' do + %i.icon-edit = link_to group_users_group_path(@group, member), confirm: remove_user_from_group_message(@group, user), method: :delete, remote: true, class: "btn-tiny btn btn-remove", title: 'Remove user from group' do %i.icon-minus.icon-white + .edit-member.hide.js-toggle-content + = form_for [@group, member], remote: true do |f| + .alert.prepend-top-20 + = f.select :group_access, options_for_select(UsersGroup.group_access_roles, member.group_access) + = f.submit 'Save', class: 'btn btn-save' diff --git a/app/views/users_groups/update.js.haml b/app/views/users_groups/update.js.haml new file mode 100644 index 00000000000..5bad48abafd --- /dev/null +++ b/app/views/users_groups/update.js.haml @@ -0,0 +1,2 @@ +:plain + $("##{dom_id(@member)}").replaceWith('#{escape_javascript(render(@member, member: @member, show_controls: true))}'); |
