Merge branch 'master' into fixes/api
This commit is contained in:
commit
8045a81bcf
261 changed files with 1794 additions and 1417 deletions
|
@ -1,3 +1,6 @@
|
|||
v 5.0.0
|
||||
- replaced gitolite with gitlab-shell
|
||||
|
||||
v 4.2.0
|
||||
- User show page. Via /u/username
|
||||
- Show help contents on pages for better navigation
|
||||
|
|
5
Gemfile
5
Gemfile
|
@ -32,9 +32,6 @@ gem 'gitlab_omniauth-ldap', '1.0.2', require: "omniauth-ldap"
|
|||
# Dump db to yml file. Mostly used to migrate from sqlite to mysql
|
||||
gem 'gitlab_yaml_db', '1.0.0', require: "yaml_db"
|
||||
|
||||
# Gitolite client (for work with gitolite-admin repo)
|
||||
gem "gitolite", '1.1.0'
|
||||
|
||||
# Syntax highlighter
|
||||
gem "pygments.rb", git: "https://github.com/gitlabhq/pygments.rb.git", branch: "master"
|
||||
|
||||
|
@ -165,5 +162,5 @@ group :test do
|
|||
end
|
||||
|
||||
group :production do
|
||||
gem "gitlab_meta", '4.0'
|
||||
gem "gitlab_meta", '5.0'
|
||||
end
|
||||
|
|
13
Gemfile.lock
13
Gemfile.lock
|
@ -107,7 +107,6 @@ GEM
|
|||
coderay (>= 1.0.0)
|
||||
erubis (>= 2.7.0)
|
||||
binding_of_caller (0.6.8)
|
||||
blankslate (3.1.2)
|
||||
bootstrap-sass (2.2.1.1)
|
||||
sass (~> 3.2)
|
||||
builder (3.0.4)
|
||||
|
@ -188,17 +187,13 @@ GEM
|
|||
mime-types (~> 1.19)
|
||||
pygments.rb (>= 0.2.13)
|
||||
github-markup (0.7.4)
|
||||
gitlab_meta (4.0)
|
||||
gitlab_meta (5.0)
|
||||
gitlab_omniauth-ldap (1.0.2)
|
||||
net-ldap (~> 0.2.2)
|
||||
omniauth (~> 1.0)
|
||||
pyu-ruby-sasl (~> 0.0.3.1)
|
||||
rubyntlm (~> 0.1.1)
|
||||
gitlab_yaml_db (1.0.0)
|
||||
gitolite (1.1.0)
|
||||
gratr19 (~> 0.4.4.1)
|
||||
grit (~> 2.5.0)
|
||||
hashery (~> 1.5.0)
|
||||
grape (0.2.2)
|
||||
activesupport
|
||||
hashie (~> 1.2)
|
||||
|
@ -208,7 +203,6 @@ GEM
|
|||
rack-accept
|
||||
rack-mount
|
||||
virtus
|
||||
gratr19 (0.4.4.1)
|
||||
growl (1.0.3)
|
||||
guard (1.5.4)
|
||||
listen (>= 0.4.2)
|
||||
|
@ -227,8 +221,6 @@ GEM
|
|||
activesupport (>= 3.1, < 4.1)
|
||||
haml (~> 3.1)
|
||||
railties (>= 3.1, < 4.1)
|
||||
hashery (1.5.0)
|
||||
blankslate
|
||||
hashie (1.2.0)
|
||||
hike (1.2.1)
|
||||
http_parser.rb (0.5.3)
|
||||
|
@ -494,10 +486,9 @@ DEPENDENCIES
|
|||
git
|
||||
github-linguist (~> 2.3.4)
|
||||
github-markup (~> 0.7.4)
|
||||
gitlab_meta (= 4.0)
|
||||
gitlab_meta (= 5.0)
|
||||
gitlab_omniauth-ldap (= 1.0.2)
|
||||
gitlab_yaml_db (= 1.0.0)
|
||||
gitolite (= 1.1.0)
|
||||
grack!
|
||||
grape (~> 0.2.1)
|
||||
grit!
|
||||
|
|
|
@ -1,13 +1,12 @@
|
|||
## GitLab Roadmap
|
||||
|
||||
### v4.3 March 22
|
||||
### v5.0 March 22
|
||||
|
||||
* Jenkins CI integration service
|
||||
* Replace gitolite with gitlab-shell
|
||||
* Usability improvements
|
||||
* Notification improvements
|
||||
|
||||
### v4.2 February 22
|
||||
|
||||
* Campfire integration service
|
||||
* Teams
|
||||
|
||||
|
|
2
VERSION
2
VERSION
|
@ -1 +1 @@
|
|||
4.2.0pre
|
||||
5.0.0pre
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 596 B |
Binary file not shown.
Before Width: | Height: | Size: 450 B |
|
@ -20,12 +20,12 @@ var NoteList = {
|
|||
|
||||
if(NoteList.reversed) {
|
||||
var form = $(".js-main-target-form");
|
||||
form.find(".buttons, .note_options").hide();
|
||||
form.find(".note-form-actions").hide();
|
||||
var textarea = form.find(".js-note-text");
|
||||
textarea.css("height", "40px");
|
||||
textarea.on("focus", function(){
|
||||
textarea.css("height", "80px");
|
||||
form.find(".buttons, .note_options").show();
|
||||
form.find(".note-form-actions").show();
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -338,10 +338,6 @@ li.note {
|
|||
li {
|
||||
border-bottom:none !important;
|
||||
}
|
||||
.attachment {
|
||||
padding-left: 20px;
|
||||
background:url("icon-attachment.png") no-repeat left center;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -17,6 +17,8 @@ $baseLineHeight: 18px !default;
|
|||
@import "gitlab_bootstrap/variables.scss";
|
||||
@import "gitlab_bootstrap/fonts.scss";
|
||||
@import "gitlab_bootstrap/mixins.scss";
|
||||
@import "gitlab_bootstrap/avatar.scss";
|
||||
@import "gitlab_bootstrap/nav.scss";
|
||||
@import "gitlab_bootstrap/common.scss";
|
||||
@import "gitlab_bootstrap/typography.scss";
|
||||
@import "gitlab_bootstrap/buttons.scss";
|
||||
|
|
8
app/assets/stylesheets/gitlab_bootstrap/avatar.scss
Normal file
8
app/assets/stylesheets/gitlab_bootstrap/avatar.scss
Normal file
|
@ -0,0 +1,8 @@
|
|||
/** AVATARS **/
|
||||
img.avatar { float: left; margin-right: 12px; width: 40px; border: 1px solid #ddd; padding: 1px; }
|
||||
img.avatar.s16 { width: 16px; height: 16px; margin-right: 6px; }
|
||||
img.avatar.s24 { width: 24px; height: 24px; margin-right: 8px; }
|
||||
img.avatar.s32 { width: 32px; height: 32px; margin-right: 10px; }
|
||||
img.avatar.s90 { width: 90px; height: 90px; margin-right: 15px; }
|
||||
img.lil_av { padding-left: 4px; padding-right: 3px; }
|
||||
img.small { width: 80px; }
|
|
@ -95,7 +95,11 @@
|
|||
|
||||
form {
|
||||
margin-bottom: 0;
|
||||
margin-top: 3px;
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.btn-tiny {
|
||||
@include box-shadow(0 0px 0px 1px #f1f1f1);
|
||||
}
|
||||
|
||||
.nav-pills {
|
||||
|
|
|
@ -1,17 +1,16 @@
|
|||
.btn {
|
||||
@include linear-gradient(#f7f7f7, #d5d5d5);
|
||||
@include linear-gradient(#f1f1f1, #e1e1e1);
|
||||
text-shadow: 0 1px 1px #FFF;
|
||||
border-color: #BBB;
|
||||
|
||||
&:hover {
|
||||
@include bg-gray-gradient;
|
||||
border-color: #bbb;
|
||||
background: #f1f1f1;
|
||||
@include linear-gradient(#fAfAfA, #f1f1f1);
|
||||
border-color: #AAA;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
&.btn-white {
|
||||
background: #FFF;
|
||||
}
|
||||
|
||||
&.primary {
|
||||
&.btn-primary {
|
||||
background: #2a79A3;
|
||||
@include linear-gradient(#47A7b7, #2585b5);
|
||||
border-color: #2A79A3;
|
||||
|
@ -58,21 +57,18 @@
|
|||
}
|
||||
}
|
||||
|
||||
&.save-btn {
|
||||
&.btn-create {
|
||||
@extend .wide;
|
||||
@extend .primary;
|
||||
@extend .success;
|
||||
}
|
||||
|
||||
&.cancel-btn {
|
||||
float: right;
|
||||
&.btn-save {
|
||||
@extend .wide;
|
||||
@extend .btn-primary;
|
||||
}
|
||||
|
||||
&.wide {
|
||||
padding-left: 30px;
|
||||
padding-right: 30px;
|
||||
}
|
||||
|
||||
&.danger {
|
||||
&.btn-close,
|
||||
&.btn-remove {
|
||||
@extend .btn-danger;
|
||||
border-color: #BD362F;
|
||||
|
||||
|
@ -82,8 +78,13 @@
|
|||
}
|
||||
}
|
||||
|
||||
&.danger {
|
||||
@extend .btn-danger;
|
||||
&.btn-cancel {
|
||||
float: right;
|
||||
}
|
||||
|
||||
&.wide {
|
||||
padding-left: 20px;
|
||||
padding-right: 20px;
|
||||
}
|
||||
|
||||
&.small {
|
||||
|
@ -95,7 +96,7 @@
|
|||
background-color: #ccc;
|
||||
}
|
||||
|
||||
&.very_small {
|
||||
&.btn-tiny {
|
||||
font-size: 11px;
|
||||
padding: 2px 6px;
|
||||
line-height: 16px;
|
||||
|
|
|
@ -9,7 +9,6 @@
|
|||
|
||||
/** COMMON CLASSES **/
|
||||
.left { float:left }
|
||||
.right { float:right!important }
|
||||
.append-bottom-10 { margin-bottom:10px }
|
||||
.append-bottom-20 { margin-bottom:20px }
|
||||
.prepend-top-10 { margin-top:10px }
|
||||
|
@ -22,82 +21,13 @@
|
|||
.light { color: #888 }
|
||||
.tiny { font-weight: normal }
|
||||
|
||||
/** PILLS & TABS**/
|
||||
.nav-pills {
|
||||
.active a {
|
||||
background: $primary_color;
|
||||
}
|
||||
|
||||
> li > a {
|
||||
@include border-radius(0);
|
||||
}
|
||||
&.nav-stacked {
|
||||
> li > a {
|
||||
border-left: 4px solid #EEE;
|
||||
padding: 12px;
|
||||
}
|
||||
> .active > a {
|
||||
border-color: #29B;
|
||||
border-radius: 0;
|
||||
background: #F1F1F1;
|
||||
color: $style_color;
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.nav-pills > .active > a > i[class^="icon-"] { background: inherit; }
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* nav-tabs
|
||||
*
|
||||
*/
|
||||
.nav-tabs > li > a, .nav-pills > li > a { color: $style_color; }
|
||||
.nav.nav-tabs {
|
||||
li {
|
||||
> a {
|
||||
padding: 8px 20px;
|
||||
margin-right: 7px;
|
||||
line-height: 20px;
|
||||
border-color: #EEE;
|
||||
color: #888;
|
||||
border-bottom: 1px solid #ddd;
|
||||
.badge {
|
||||
background-color: #eee;
|
||||
color: #888;
|
||||
text-shadow: 0 1px 1px #fff;
|
||||
}
|
||||
i[class^="icon-"] {
|
||||
line-height: 14px;
|
||||
}
|
||||
}
|
||||
&.active {
|
||||
> a {
|
||||
border-color: #CCC;
|
||||
border-bottom: 1px solid #fff;
|
||||
color: #333;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.nav-small-tabs > li > a { padding: 6px 9px; }
|
||||
}
|
||||
|
||||
/** ALERT MESSAGES **/
|
||||
.alert-message { @extend .alert; }
|
||||
.alert-messag.success { @extend .alert-success; }
|
||||
.alert-message.error { @extend .alert-error; }
|
||||
|
||||
/** AVATARS **/
|
||||
img.avatar { float: left; margin-right: 12px; width: 40px; border: 1px solid #ddd; padding: 1px; }
|
||||
img.avatar.s16 { width: 16px; height: 16px; margin-right: 6px; }
|
||||
img.avatar.s24 { width: 24px; height: 24px; margin-right: 8px; }
|
||||
img.avatar.s32 { width: 32px; height: 32px; margin-right: 10px; }
|
||||
img.avatar.s90 { width: 90px; height: 90px; margin-right: 15px; }
|
||||
img.lil_av { padding-left: 4px; padding-right: 3px; }
|
||||
img.small { width: 80px; }
|
||||
.alert.alert-disabled {
|
||||
background: #EEE;
|
||||
color: #777;
|
||||
border-color: #DDD;
|
||||
}
|
||||
|
||||
/** HELPERS **/
|
||||
.nothing_here_message {
|
||||
|
|
65
app/assets/stylesheets/gitlab_bootstrap/nav.scss
Normal file
65
app/assets/stylesheets/gitlab_bootstrap/nav.scss
Normal file
|
@ -0,0 +1,65 @@
|
|||
/**
|
||||
* nav-pills
|
||||
*
|
||||
*/
|
||||
.nav-pills {
|
||||
.active a {
|
||||
background: $primary_color;
|
||||
}
|
||||
|
||||
> li > a {
|
||||
@include border-radius(0);
|
||||
}
|
||||
&.nav-stacked {
|
||||
> li > a {
|
||||
border-left: 4px solid #EEE;
|
||||
padding: 12px;
|
||||
}
|
||||
> .active > a {
|
||||
border-color: #29B;
|
||||
border-radius: 0;
|
||||
background: #F1F1F1;
|
||||
color: $style_color;
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.nav-pills > .active > a > i[class^="icon-"] { background: inherit; }
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* nav-tabs
|
||||
*
|
||||
*/
|
||||
.nav-tabs > li > a, .nav-pills > li > a { color: $style_color; }
|
||||
.nav.nav-tabs {
|
||||
li {
|
||||
> a {
|
||||
padding: 8px 20px;
|
||||
margin-right: 7px;
|
||||
line-height: 20px;
|
||||
border-color: #EEE;
|
||||
color: #888;
|
||||
border-bottom: 1px solid #ddd;
|
||||
.badge {
|
||||
background-color: #eee;
|
||||
color: #888;
|
||||
text-shadow: 0 1px 1px #fff;
|
||||
}
|
||||
i[class^="icon-"] {
|
||||
line-height: 14px;
|
||||
}
|
||||
}
|
||||
&.active {
|
||||
> a {
|
||||
border-color: #CCC;
|
||||
border-bottom: 1px solid #fff;
|
||||
color: #333;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.nav-small-tabs > li > a { padding: 6px 9px; }
|
||||
}
|
|
@ -127,7 +127,7 @@
|
|||
.btn-new-mr {
|
||||
@extend .btn-info;
|
||||
@extend .small;
|
||||
@extend .right;
|
||||
@extend .pull-right;
|
||||
margin: -3px;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* Login Page */
|
||||
body.login-page{
|
||||
padding-top: 10%;
|
||||
background: #f1f1f1;
|
||||
padding-top: 7%;
|
||||
background: #666;
|
||||
}
|
||||
|
||||
.login-box{
|
||||
|
|
|
@ -6,8 +6,7 @@ ul.main_menu {
|
|||
margin: auto;
|
||||
margin: 30px 0;
|
||||
margin-top: 10px;
|
||||
border-bottom: 1px solid #DDD;
|
||||
height: 37px;
|
||||
height: 38px;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
.count {
|
||||
|
@ -33,6 +32,7 @@ ul.main_menu {
|
|||
margin: 0;
|
||||
display: table-cell;
|
||||
width: 1%;
|
||||
border-bottom: 2px solid #EEE;
|
||||
&.active {
|
||||
border-bottom: 2px solid #474D57;
|
||||
a {
|
||||
|
@ -42,10 +42,8 @@ ul.main_menu {
|
|||
|
||||
&.home {
|
||||
a {
|
||||
background: url(home_icon.PNG) no-repeat center center;
|
||||
text-indent:-9999px;
|
||||
min-width: 20px;
|
||||
img {
|
||||
i {
|
||||
font-size: 20px;
|
||||
position: relative;
|
||||
top: 4px;
|
||||
}
|
||||
|
@ -56,7 +54,7 @@ ul.main_menu {
|
|||
display: block;
|
||||
text-align: center;
|
||||
font-weight: normal;
|
||||
height: 35px;
|
||||
height: 36px;
|
||||
line-height: 36px;
|
||||
color: #777;
|
||||
text-shadow: 0 1px 1px white;
|
||||
|
|
|
@ -81,14 +81,6 @@ ul.notes {
|
|||
.attachment {
|
||||
font-size: 14px;
|
||||
margin-top: -20px;
|
||||
|
||||
.icon-attachment {
|
||||
@extend .icon-paper-clip;
|
||||
font-size: 24px;
|
||||
position: relative;
|
||||
text-align: right;
|
||||
top: 6px;
|
||||
}
|
||||
}
|
||||
.note-body {
|
||||
margin-left: 45px;
|
||||
|
@ -214,9 +206,11 @@ ul.notes {
|
|||
* Note Form
|
||||
*/
|
||||
|
||||
.comment-btn,
|
||||
.comment-btn {
|
||||
@extend .btn-create;
|
||||
}
|
||||
.reply-btn {
|
||||
@extend .save-btn;
|
||||
@extend .btn-primary;
|
||||
}
|
||||
.file .content tr.line_holder:hover > td { background: $hover !important; }
|
||||
.file .content tr.line_holder:hover > td .line_note_link {
|
||||
|
@ -227,11 +221,6 @@ ul.notes {
|
|||
.discussion {
|
||||
.new_note {
|
||||
margin: 8px 5px 8px 0;
|
||||
|
||||
.note_options {
|
||||
// because of the smaller width and the extra "cancel" button
|
||||
margin-top: 8px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.new_note {
|
||||
|
@ -244,37 +233,6 @@ ul.notes {
|
|||
.clearfix {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.note_options {
|
||||
h6 {
|
||||
@extend .left;
|
||||
line-height: 20px;
|
||||
padding-right: 16px;
|
||||
padding-bottom: 16px;
|
||||
}
|
||||
label {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.attachment {
|
||||
@extend .right;
|
||||
position: relative;
|
||||
width: 350px;
|
||||
height: 50px;
|
||||
margin:0 0 5px !important;
|
||||
|
||||
// hide the actual file field
|
||||
input {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.choose-btn {
|
||||
float: right;
|
||||
}
|
||||
}
|
||||
.notify_options {
|
||||
@extend .right;
|
||||
}
|
||||
}
|
||||
.note_text_and_preview {
|
||||
// makes the "absolute" position for links relative to this
|
||||
position: relative;
|
||||
|
@ -313,3 +271,17 @@ ul.notes {
|
|||
@extend .thumbnail;
|
||||
margin-left: 45px;
|
||||
}
|
||||
|
||||
|
||||
.note-form-actions {
|
||||
background: #F9F9F9;
|
||||
height: 45px;
|
||||
padding: 0 5px;
|
||||
|
||||
.note-form-option {
|
||||
margin-top: 8px;
|
||||
margin-left: 15px;
|
||||
@extend .pull-left;
|
||||
@extend .span4;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
}
|
||||
|
||||
.side {
|
||||
@extend .right;
|
||||
@extend .pull-right;
|
||||
|
||||
.projects_box {
|
||||
> .title {
|
||||
|
|
|
@ -4,16 +4,12 @@ class ApplicationController < ActionController::Base
|
|||
before_filter :set_current_user_for_observers
|
||||
before_filter :add_abilities
|
||||
before_filter :dev_tools if Rails.env == 'development'
|
||||
before_filter :default_headers
|
||||
|
||||
protect_from_forgery
|
||||
|
||||
helper_method :abilities, :can?
|
||||
|
||||
rescue_from Gitlab::Gitolite::AccessDenied do |exception|
|
||||
log_exception(exception)
|
||||
render "errors/gitolite", layout: "errors", status: 500
|
||||
end
|
||||
|
||||
rescue_from Encoding::CompatibilityError do |exception|
|
||||
log_exception(exception)
|
||||
render "errors/encoding", layout: "errors", status: 500
|
||||
|
@ -148,4 +144,8 @@ class ApplicationController < ActionController::Base
|
|||
Rack::MiniProfiler.authorize_request
|
||||
end
|
||||
|
||||
def default_headers
|
||||
headers['X-Frame-Options'] = 'DENY'
|
||||
headers['X-XSS-Protection'] = '1; mode=block'
|
||||
end
|
||||
end
|
||||
|
|
18
app/controllers/graph_controller.rb
Normal file
18
app/controllers/graph_controller.rb
Normal file
|
@ -0,0 +1,18 @@
|
|||
class GraphController < ProjectResourceController
|
||||
include ExtractsPath
|
||||
|
||||
# Authorize
|
||||
before_filter :authorize_read_project!
|
||||
before_filter :authorize_code_access!
|
||||
before_filter :require_non_empty_project
|
||||
|
||||
def show
|
||||
respond_to do |format|
|
||||
format.html
|
||||
format.json do
|
||||
graph = Gitlab::Graph::JsonBuilder.new(project, @ref)
|
||||
render :json => graph.to_json
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -6,6 +6,7 @@ class GroupsController < ApplicationController
|
|||
|
||||
# Authorize
|
||||
before_filter :authorize_read_group!, except: [:new, :create]
|
||||
before_filter :authorize_admin_group!, only: [:edit, :update, :destroy]
|
||||
before_filter :authorize_create_group!, only: [:new, :create]
|
||||
|
||||
# Load group projects
|
||||
|
@ -84,6 +85,31 @@ class GroupsController < ApplicationController
|
|||
redirect_to people_group_path(@group), notice: 'Users was successfully added.'
|
||||
end
|
||||
|
||||
def edit
|
||||
end
|
||||
|
||||
def update
|
||||
group_params = params[:group].dup
|
||||
owner_id =group_params.delete(:owner_id)
|
||||
|
||||
if owner_id
|
||||
@group.owner = User.find(owner_id)
|
||||
end
|
||||
|
||||
if @group.update_attributes(group_params)
|
||||
redirect_to @group, notice: 'Group was successfully updated.'
|
||||
else
|
||||
render action: "edit"
|
||||
end
|
||||
end
|
||||
|
||||
def destroy
|
||||
@group.truncate_teams
|
||||
@group.destroy
|
||||
|
||||
redirect_to root_path, notice: 'Group was removed.'
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def group
|
||||
|
@ -106,6 +132,14 @@ class GroupsController < ApplicationController
|
|||
end
|
||||
|
||||
def authorize_create_group!
|
||||
can?(current_user, :create_group, nil)
|
||||
unless can?(current_user, :create_group, nil)
|
||||
return render_404
|
||||
end
|
||||
end
|
||||
|
||||
def authorize_admin_group!
|
||||
unless can?(current_user, :manage_group, group)
|
||||
return render_404
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -90,16 +90,6 @@ class ProjectsController < ProjectResourceController
|
|||
end
|
||||
end
|
||||
|
||||
def graph
|
||||
respond_to do |format|
|
||||
format.html
|
||||
format.json do
|
||||
graph = Gitlab::Graph::JsonBuilder.new(project)
|
||||
render :json => graph.to_json
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def destroy
|
||||
return access_denied! unless can?(current_user, :remove_project, project)
|
||||
|
||||
|
|
|
@ -13,6 +13,8 @@ class RefsController < ProjectResourceController
|
|||
format.html do
|
||||
new_path = if params[:destination] == "tree"
|
||||
project_tree_path(@project, (@ref + "/" + params[:path]))
|
||||
elsif params[:destination] == "graph"
|
||||
project_graph_path(@project, @ref)
|
||||
else
|
||||
project_commits_path(@project, @ref)
|
||||
end
|
||||
|
|
|
@ -43,7 +43,7 @@ module ProjectsHelper
|
|||
tm = project.team_member_by_id(author)
|
||||
|
||||
if tm
|
||||
link_to author_html, project_team_member_path(project, tm), class: "author_link"
|
||||
link_to author_html, project_team_member_path(project, tm.user_username), class: "author_link"
|
||||
else
|
||||
author_html
|
||||
end.html_safe
|
||||
|
|
|
@ -10,6 +10,10 @@ class Notify < ActionMailer::Base
|
|||
|
||||
default from: Gitlab.config.gitlab.email_from
|
||||
|
||||
# Just send email with 3 seconds delay
|
||||
def self.delay
|
||||
delay_for(2.seconds)
|
||||
end
|
||||
|
||||
|
||||
#
|
||||
|
@ -63,12 +67,12 @@ class Notify < ActionMailer::Base
|
|||
# Note
|
||||
#
|
||||
|
||||
def note_commit_email(commit_autor_email, note_id)
|
||||
def note_commit_email(recipient_id, note_id)
|
||||
@note = Note.find(note_id)
|
||||
@commit = @note.noteable
|
||||
@commit = CommitDecorator.decorate(@commit)
|
||||
@project = @note.project
|
||||
mail(to: commit_autor_email, subject: subject("note for commit #{@commit.short_id}", @commit.title))
|
||||
mail(to: recipient(recipient_id), subject: subject("note for commit #{@commit.short_id}", @commit.title))
|
||||
end
|
||||
|
||||
def note_issue_email(recipient_id, note_id)
|
||||
|
|
|
@ -24,8 +24,8 @@ class Key < ActiveRecord::Base
|
|||
before_save :set_identifier
|
||||
|
||||
validates :title, presence: true, length: { within: 0..255 }
|
||||
validates :key, presence: true, length: { within: 0..5000 }, format: { :with => /ssh-.{3} / }
|
||||
validate :unique_key, :fingerprintable_key
|
||||
validates :key, presence: true, length: { within: 0..5000 }, format: { :with => /ssh-.{3} / }, uniqueness: true
|
||||
validate :fingerprintable_key
|
||||
|
||||
delegate :name, :email, to: :user, prefix: true
|
||||
|
||||
|
@ -33,14 +33,6 @@ class Key < ActiveRecord::Base
|
|||
self.key = self.key.strip unless self.key.blank?
|
||||
end
|
||||
|
||||
def unique_key
|
||||
query = Key.where(key: key)
|
||||
query = query.where('(project_id IS NULL OR project_id = ?)', project_id) if project_id
|
||||
if (query.count > 0)
|
||||
errors.add :key, 'already exist.'
|
||||
end
|
||||
end
|
||||
|
||||
def fingerprintable_key
|
||||
return true unless key # Don't test if there is no key.
|
||||
# `ssh-keygen -lf /dev/stdin <<< "#{key}"` errors with: redirection unexpected
|
||||
|
@ -65,7 +57,7 @@ class Key < ActiveRecord::Base
|
|||
end
|
||||
|
||||
def is_deploy_key
|
||||
true if project_id
|
||||
!!project_id
|
||||
end
|
||||
|
||||
# projects that has this key
|
||||
|
@ -77,7 +69,7 @@ class Key < ActiveRecord::Base
|
|||
end
|
||||
end
|
||||
|
||||
def last_deploy?
|
||||
Key.where(identifier: identifier).count == 0
|
||||
def shell_id
|
||||
"key-#{self.id}"
|
||||
end
|
||||
end
|
||||
|
|
|
@ -27,7 +27,6 @@ class Namespace < ActiveRecord::Base
|
|||
|
||||
after_create :ensure_dir_exist
|
||||
after_update :move_dir
|
||||
after_commit :update_gitolite, on: :update, if: :require_update_gitolite
|
||||
after_destroy :rm_dir
|
||||
|
||||
scope :root, where('type IS NULL')
|
||||
|
@ -89,11 +88,6 @@ class Namespace < ActiveRecord::Base
|
|||
end
|
||||
end
|
||||
|
||||
def update_gitolite
|
||||
@require_update_gitolite = false
|
||||
projects.each(&:update_repository)
|
||||
end
|
||||
|
||||
def rm_dir
|
||||
dir_path = File.join(Gitlab.config.gitolite.repos_path, path)
|
||||
FileUtils.rm_r( dir_path, force: true )
|
||||
|
|
|
@ -8,7 +8,6 @@
|
|||
# description :text
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
# private_flag :boolean default(TRUE), not null
|
||||
# creator_id :integer
|
||||
# default_branch :string(255)
|
||||
# issues_enabled :boolean default(TRUE), not null
|
||||
|
@ -16,6 +15,7 @@
|
|||
# merge_requests_enabled :boolean default(TRUE), not null
|
||||
# wiki_enabled :boolean default(TRUE), not null
|
||||
# namespace_id :integer
|
||||
# public :boolean default(FALSE), not null
|
||||
#
|
||||
|
||||
require "grit"
|
||||
|
@ -262,8 +262,6 @@ class Project < ActiveRecord::Base
|
|||
|
||||
Gitlab::ProjectMover.new(self, old_dir, new_dir).execute
|
||||
|
||||
gitolite.move_repository(old_repo, self)
|
||||
|
||||
save!
|
||||
end
|
||||
rescue Gitlab::ProjectMover::ProjectMoveError => ex
|
||||
|
@ -459,20 +457,6 @@ class Project < ActiveRecord::Base
|
|||
namespace.try(:path) || ''
|
||||
end
|
||||
|
||||
def update_repository
|
||||
GitoliteWorker.perform_async(
|
||||
:update_repository,
|
||||
self.id
|
||||
)
|
||||
end
|
||||
|
||||
def destroy_repository
|
||||
GitoliteWorker.perform_async(
|
||||
:remove_repository,
|
||||
self.path_with_namespace
|
||||
)
|
||||
end
|
||||
|
||||
def repo_exists?
|
||||
@repo_exists ||= (repository && repository.branches.present?)
|
||||
rescue
|
||||
|
|
|
@ -112,7 +112,6 @@ class ProjectTeam
|
|||
source_team.each do |tm|
|
||||
tm.save
|
||||
end
|
||||
target_project.update_repository
|
||||
end
|
||||
|
||||
true
|
||||
|
|
|
@ -18,13 +18,6 @@ class ProtectedBranch < ActiveRecord::Base
|
|||
validates :name, presence: true
|
||||
validates :project, presence: true
|
||||
|
||||
after_save :update_repository
|
||||
after_destroy :update_repository
|
||||
|
||||
def update_repository
|
||||
project.update_repository
|
||||
end
|
||||
|
||||
def commit
|
||||
project.repository.commit(self.name)
|
||||
end
|
||||
|
|
|
@ -31,6 +31,8 @@
|
|||
# extern_uid :string(255)
|
||||
# provider :string(255)
|
||||
# username :string(255)
|
||||
# can_create_group :boolean default(TRUE), not null
|
||||
# can_create_team :boolean default(TRUE), not null
|
||||
#
|
||||
|
||||
class User < ActiveRecord::Base
|
||||
|
|
|
@ -1,3 +1,15 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: user_teams
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# name :string(255)
|
||||
# path :string(255)
|
||||
# owner_id :integer
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
#
|
||||
|
||||
class UserTeam < ActiveRecord::Base
|
||||
attr_accessible :name, :owner_id, :path
|
||||
|
||||
|
|
|
@ -1,3 +1,15 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: user_team_project_relationships
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# project_id :integer
|
||||
# user_team_id :integer
|
||||
# greatest_access :integer
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
#
|
||||
|
||||
class UserTeamProjectRelationship < ActiveRecord::Base
|
||||
attr_accessible :greatest_access, :project_id, :user_team_id
|
||||
|
||||
|
|
|
@ -1,3 +1,16 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: user_team_user_relationships
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# user_id :integer
|
||||
# user_team_id :integer
|
||||
# group_admin :boolean
|
||||
# permission :integer
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
#
|
||||
|
||||
class UserTeamUserRelationship < ActiveRecord::Base
|
||||
attr_accessible :group_admin, :permission, :user_id, :user_team_id
|
||||
|
||||
|
|
|
@ -25,15 +25,12 @@ class UsersProject < ActiveRecord::Base
|
|||
|
||||
attr_accessor :skip_git
|
||||
|
||||
after_save :update_repository, unless: :skip_git?
|
||||
after_destroy :update_repository, unless: :skip_git?
|
||||
|
||||
validates :user, presence: true
|
||||
validates :user_id, uniqueness: { scope: [:project_id], message: "already exists in project" }
|
||||
validates :project_access, inclusion: { in: [GUEST, REPORTER, DEVELOPER, MASTER] }, presence: true
|
||||
validates :project, presence: true
|
||||
|
||||
delegate :name, :email, to: :user, prefix: true
|
||||
delegate :name, :username, :email, to: :user, prefix: true
|
||||
|
||||
scope :guests, where(project_access: GUEST)
|
||||
scope :reporters, where(project_access: REPORTER)
|
||||
|
@ -84,11 +81,6 @@ class UsersProject < ActiveRecord::Base
|
|||
end
|
||||
end
|
||||
|
||||
GitoliteWorker.perform_async(
|
||||
:update_repositories,
|
||||
project_ids
|
||||
)
|
||||
|
||||
true
|
||||
rescue
|
||||
false
|
||||
|
@ -103,11 +95,6 @@ class UsersProject < ActiveRecord::Base
|
|||
end
|
||||
end
|
||||
|
||||
GitoliteWorker.perform_async(
|
||||
:update_repositories,
|
||||
project_ids
|
||||
)
|
||||
|
||||
true
|
||||
rescue
|
||||
false
|
||||
|
@ -136,10 +123,6 @@ class UsersProject < ActiveRecord::Base
|
|||
end
|
||||
end
|
||||
|
||||
def update_repository
|
||||
project.update_repository
|
||||
end
|
||||
|
||||
def project_access_human
|
||||
Project.access_options.key(self.project_access)
|
||||
end
|
||||
|
|
|
@ -3,20 +3,17 @@ class KeyObserver < ActiveRecord::Observer
|
|||
|
||||
def after_save(key)
|
||||
GitoliteWorker.perform_async(
|
||||
:set_key,
|
||||
key.identifier,
|
||||
key.key,
|
||||
key.projects.map(&:id)
|
||||
:add_key,
|
||||
key.shell_id,
|
||||
key.key
|
||||
)
|
||||
end
|
||||
|
||||
def after_destroy(key)
|
||||
return if key.is_deploy_key && !key.last_deploy?
|
||||
|
||||
GitoliteWorker.perform_async(
|
||||
:remove_key,
|
||||
key.identifier,
|
||||
key.projects.map(&:id)
|
||||
key.shell_id,
|
||||
key.key,
|
||||
)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -11,7 +11,9 @@ class NoteObserver < ActiveRecord::Observer
|
|||
notify_team(note)
|
||||
elsif note.notify_author
|
||||
# Notify only author of resource
|
||||
Notify.delay.note_commit_email(note.noteable.author_email, note.id)
|
||||
if note.commit_author
|
||||
Notify.delay.note_commit_email(note.commit_author.id, note.id)
|
||||
end
|
||||
else
|
||||
# Otherwise ignore it
|
||||
nil
|
||||
|
|
|
@ -1,6 +1,11 @@
|
|||
class ProjectObserver < ActiveRecord::Observer
|
||||
def after_create(project)
|
||||
project.update_repository
|
||||
GitoliteWorker.perform_async(
|
||||
:add_repository,
|
||||
project.path_with_namespace
|
||||
)
|
||||
|
||||
log_info("#{project.owner.name} created a new project \"#{project.name_with_namespace}\"")
|
||||
end
|
||||
|
||||
def after_update(project)
|
||||
|
@ -8,14 +13,14 @@ class ProjectObserver < ActiveRecord::Observer
|
|||
end
|
||||
|
||||
def after_destroy(project)
|
||||
log_info("Project \"#{project.name}\" was removed")
|
||||
GitoliteWorker.perform_async(
|
||||
:remove_repository,
|
||||
project.path_with_namespace
|
||||
)
|
||||
|
||||
project.satellite.destroy
|
||||
project.destroy_repository
|
||||
end
|
||||
|
||||
def after_create project
|
||||
log_info("#{project.owner.name} created a new project \"#{project.name_with_namespace}\"")
|
||||
log_info("Project \"#{project.name}\" was removed")
|
||||
end
|
||||
|
||||
protected
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
= link_to admin_projects_path do
|
||||
%h1= Project.count
|
||||
%hr
|
||||
= link_to 'New Project', new_project_path, class: "btn small"
|
||||
= link_to 'New Project', new_project_path, class: "btn btn-small"
|
||||
.span4
|
||||
.ui-box
|
||||
%h5.title Groups
|
||||
|
@ -14,7 +14,7 @@
|
|||
= link_to admin_groups_path do
|
||||
%h1= Group.count
|
||||
%hr
|
||||
= link_to 'New Group', new_admin_group_path, class: "btn small"
|
||||
= link_to 'New Group', new_admin_group_path, class: "btn btn-small"
|
||||
.span4
|
||||
.ui-box
|
||||
%h5.title Users
|
||||
|
@ -22,7 +22,7 @@
|
|||
= link_to admin_users_path do
|
||||
%h1= User.count
|
||||
%hr
|
||||
= link_to 'New User', new_admin_user_path, class: "btn small"
|
||||
= link_to 'New User', new_admin_user_path, class: "btn btn-small"
|
||||
|
||||
.row
|
||||
.span4
|
||||
|
@ -31,7 +31,7 @@
|
|||
- @projects.each do |project|
|
||||
%p
|
||||
= link_to project.name_with_namespace, [:admin, project]
|
||||
%span.light.right
|
||||
%span.light.pull-right
|
||||
= time_ago_in_words project.created_at
|
||||
ago
|
||||
|
||||
|
@ -42,7 +42,7 @@
|
|||
%p
|
||||
= link_to [:admin, user] do
|
||||
= user.name
|
||||
%span.light.right
|
||||
%span.light.pull-right
|
||||
= time_ago_in_words user.created_at
|
||||
ago
|
||||
|
||||
|
@ -51,25 +51,25 @@
|
|||
%hr
|
||||
%p
|
||||
Issues
|
||||
%span.light.right
|
||||
%span.light.pull-right
|
||||
= Issue.count
|
||||
%p
|
||||
Merge Requests
|
||||
%span.light.right
|
||||
%span.light.pull-right
|
||||
= MergeRequest.count
|
||||
%p
|
||||
Notes
|
||||
%span.light.right
|
||||
%span.light.pull-right
|
||||
= Note.count
|
||||
%p
|
||||
Snippets
|
||||
%span.light.right
|
||||
%span.light.pull-right
|
||||
= Snippet.count
|
||||
%p
|
||||
SSH Keys
|
||||
%span.light.right
|
||||
%span.light.pull-right
|
||||
= Key.count
|
||||
%p
|
||||
Milestones
|
||||
%span.light.right
|
||||
%span.light.pull-right
|
||||
= Milestone.count
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
%hr
|
||||
= form_for [:admin, @group] do |f|
|
||||
- if @group.errors.any?
|
||||
.alert-message.block-message.error
|
||||
.alert.alert-error
|
||||
%span= @group.errors.full_messages.first
|
||||
.clearfix.group_name_holder
|
||||
= f.label :name do
|
||||
|
@ -24,5 +24,5 @@
|
|||
%li It will change the git path to repositories under this group.
|
||||
|
||||
.form-actions
|
||||
= f.submit 'Rename group', class: "btn danger"
|
||||
= link_to 'Cancel', admin_groups_path, class: "btn cancel-btn"
|
||||
= f.submit 'Rename group', class: "btn btn-remove"
|
||||
= link_to 'Cancel', admin_groups_path, class: "btn btn-cancel"
|
||||
|
|
|
@ -4,11 +4,11 @@
|
|||
allows you to keep projects organized.
|
||||
Use groups for uniting related projects.
|
||||
|
||||
= link_to 'New Group', new_admin_group_path, class: "btn small right"
|
||||
= link_to 'New Group', new_admin_group_path, class: "btn btn-small pull-right"
|
||||
%br
|
||||
= form_tag admin_groups_path, method: :get, class: 'form-inline' do
|
||||
= text_field_tag :name, params[:name], class: "xlarge"
|
||||
= submit_tag "Search", class: "btn submit primary"
|
||||
= submit_tag "Search", class: "btn submit btn-primary"
|
||||
|
||||
%table
|
||||
%thead
|
||||
|
@ -30,6 +30,6 @@
|
|||
%td
|
||||
= link_to group.owner_name, admin_user_path(group.owner_id)
|
||||
%td.bgred
|
||||
= link_to 'Rename', edit_admin_group_path(group), id: "edit_#{dom_id(group)}", class: "btn small"
|
||||
= link_to 'Destroy', [:admin, group], confirm: "REMOVE #{group.name}? Are you sure?", method: :delete, class: "btn small danger"
|
||||
= link_to 'Rename', edit_admin_group_path(group), id: "edit_#{dom_id(group)}", class: "btn btn-small"
|
||||
= link_to 'Destroy', [:admin, group], confirm: "REMOVE #{group.name}? Are you sure?", method: :delete, class: "btn btn-small btn-remove"
|
||||
= paginate @groups, theme: "admin"
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
%hr
|
||||
= form_for [:admin, @group] do |f|
|
||||
- if @group.errors.any?
|
||||
.alert-message.block-message.error
|
||||
.alert.alert-error
|
||||
%span= @group.errors.full_messages.first
|
||||
.clearfix
|
||||
= f.label :name do
|
||||
|
@ -10,7 +10,7 @@
|
|||
.input
|
||||
= f.text_field :name, placeholder: "Ex. OpenSource", class: "xxlarge left"
|
||||
|
||||
= f.submit 'Create group', class: "btn primary"
|
||||
= f.submit 'Create group', class: "btn btn-primary"
|
||||
%hr
|
||||
.padded
|
||||
%ul
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
%td
|
||||
= @group.name
|
||||
|
||||
= link_to edit_admin_group_path(@group), class: "btn btn-small right" do
|
||||
= link_to edit_admin_group_path(@group), class: "btn btn-small pull-right" do
|
||||
%i.icon-edit
|
||||
Rename
|
||||
%tr
|
||||
|
@ -29,7 +29,7 @@
|
|||
Owner:
|
||||
%td
|
||||
= @group.owner_name
|
||||
.right
|
||||
.pull-right
|
||||
= link_to "#", class: "btn btn-small change-owner-link" do
|
||||
%i.icon-edit
|
||||
Change owner
|
||||
|
@ -42,7 +42,7 @@
|
|||
= form_for [:admin, @group] do |f|
|
||||
= f.select :owner_id, User.all.map { |user| [user.name, user.id] }, {}, {class: 'chosen'}
|
||||
%div
|
||||
= f.submit 'Change Owner', class: "btn danger"
|
||||
= f.submit 'Change Owner', class: "btn btn-remove"
|
||||
= link_to "Cancel", "#", class: "btn change-owner-cancel-link"
|
||||
|
||||
- if @group.projects.any?
|
||||
|
@ -63,7 +63,7 @@
|
|||
%span.monospace= project.path_with_namespace + ".git"
|
||||
%td= project.users.count
|
||||
%td.bgred
|
||||
= link_to 'Transfer project to global namespace', remove_project_admin_group_path(@group, project_id: project.id), confirm: 'Remove project from group and move to global namespace. Are you sure?', method: :delete, class: "btn danger small"
|
||||
= link_to 'Transfer project to global namespace', remove_project_admin_group_path(@group, project_id: project.id), confirm: 'Remove project from group and move to global namespace. Are you sure?', method: :delete, class: "btn btn-remove small"
|
||||
|
||||
= form_tag project_teams_update_admin_group_path(@group), id: "new_team_member", class: "bulk_import", method: :put do
|
||||
%table.zebra-striped
|
||||
|
@ -88,7 +88,7 @@
|
|||
%td= select_tag :project_access, options_for_select(Project.access_options), {class: "project-access-select chosen span3"}
|
||||
|
||||
%tr
|
||||
%td= submit_tag 'Add user to projects in group', class: "btn primary"
|
||||
%td= submit_tag 'Add user to projects in group', class: "btn btn-primary"
|
||||
%td
|
||||
Read more about project permissions
|
||||
%strong= link_to "here", help_permissions_path, class: "vlink"
|
||||
|
@ -110,7 +110,7 @@
|
|||
.input
|
||||
= select_tag :project_ids, options_from_collection_for_select(@projects , :id, :name_with_namespace), multiple: true, data: {placeholder: 'Select projects'}, class: 'chosen span5'
|
||||
.form-actions
|
||||
= submit_tag 'Add', class: "btn primary"
|
||||
= submit_tag 'Add', class: "btn btn-primary"
|
||||
|
||||
:javascript
|
||||
$(function(){
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
= form_for @hook, as: :hook, url: admin_hooks_path, html: { class: 'form-inline' } do |f|
|
||||
-if @hook.errors.any?
|
||||
.alert-message.block-message.error
|
||||
.alert.alert-error
|
||||
- @hook.errors.full_messages.each do |msg|
|
||||
%p= msg
|
||||
.clearfix
|
||||
|
@ -15,7 +15,7 @@
|
|||
.input
|
||||
= f.text_field :url, class: "text_field xxlarge"
|
||||
|
||||
= f.submit "Add System Hook", class: "btn primary"
|
||||
= f.submit "Add System Hook", class: "btn btn-primary"
|
||||
%hr
|
||||
|
||||
-if @hooks.any?
|
||||
|
@ -33,7 +33,7 @@
|
|||
%td
|
||||
= link_to admin_hook_path(hook) do
|
||||
%strong= hook.url
|
||||
= link_to 'Test Hook', admin_hook_test_path(hook), class: "btn small right"
|
||||
= link_to 'Test Hook', admin_hook_test_path(hook), class: "btn btn-small pull-right"
|
||||
%td POST
|
||||
%td
|
||||
= link_to 'Remove', admin_hook_path(hook), confirm: 'Are you sure?', method: :delete, class: "danger btn small right"
|
||||
= link_to 'Remove', admin_hook_path(hook), confirm: 'Are you sure?', method: :delete, class: "btn btn-remove btn-small pull-right"
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
.file_title
|
||||
%i.icon-file
|
||||
githost.log
|
||||
.right
|
||||
.pull-right
|
||||
= link_to '#', class: 'log-bottom' do
|
||||
%i.icon-arrow-down
|
||||
Scroll down
|
||||
|
@ -29,7 +29,7 @@
|
|||
.file_title
|
||||
%i.icon-file
|
||||
application.log
|
||||
.right
|
||||
.pull-right
|
||||
= link_to '#', class: 'log-bottom' do
|
||||
%i.icon-arrow-down
|
||||
Scroll down
|
||||
|
@ -43,7 +43,7 @@
|
|||
.file_title
|
||||
%i.icon-file
|
||||
production.log
|
||||
.right
|
||||
.pull-right
|
||||
= link_to '#', class: 'log-bottom' do
|
||||
%i.icon-arrow-down
|
||||
Scroll down
|
||||
|
@ -57,7 +57,7 @@
|
|||
.file_title
|
||||
%i.icon-file
|
||||
sidekiq.log
|
||||
.right
|
||||
.pull-right
|
||||
= link_to '#', class: 'log-bottom' do
|
||||
%i.icon-arrow-down
|
||||
Scroll down
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
= form_for [:admin, project] do |f|
|
||||
-if project.errors.any?
|
||||
.alert-message.block-message.error
|
||||
.alert.alert-error
|
||||
%ul
|
||||
- project.errors.full_messages.each do |msg|
|
||||
%li= msg
|
||||
|
@ -65,8 +65,8 @@
|
|||
|
||||
|
||||
.actions
|
||||
= f.submit 'Save Project', class: "btn save-btn"
|
||||
= link_to 'Cancel', admin_projects_path, class: "btn cancel-btn"
|
||||
= f.submit 'Save Project', class: "btn btn-save"
|
||||
= link_to 'Cancel', admin_projects_path, class: "btn btn-cancel"
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
%h3.page_title
|
||||
Projects
|
||||
= link_to 'New Project', new_project_path, class: "btn small right"
|
||||
= link_to 'New Project', new_project_path, class: "btn btn-small pull-right"
|
||||
|
||||
%hr
|
||||
|
||||
|
@ -37,7 +37,7 @@
|
|||
|
||||
|
||||
.form-actions
|
||||
= submit_tag "Search", class: "btn submit primary"
|
||||
= submit_tag "Search", class: "btn submit btn-primary"
|
||||
= link_to "Reset", admin_projects_path, class: "btn"
|
||||
.span8
|
||||
.ui-box
|
||||
|
@ -51,9 +51,9 @@
|
|||
- else
|
||||
%i.icon-lock.cgreen
|
||||
= link_to project.name_with_namespace, [:admin, project]
|
||||
.right
|
||||
= link_to 'Edit', edit_admin_project_path(project), id: "edit_#{dom_id(project)}", class: "btn small"
|
||||
= link_to 'Destroy', [:admin, project], confirm: "REMOVE #{project.name}? Are you sure?", method: :delete, class: "btn small danger"
|
||||
.pull-right
|
||||
= link_to 'Edit', edit_admin_project_path(project), id: "edit_#{dom_id(project)}", class: "btn btn-small"
|
||||
= link_to 'Destroy', [:admin, project], confirm: "REMOVE #{project.name}? Are you sure?", method: :delete, class: "btn btn-small btn-remove"
|
||||
- if @projects.blank?
|
||||
%p.nothing_here_message 0 projects matches
|
||||
- else
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
= form_for @team_member_relation, as: :team_member, url: admin_project_member_path(@project, @member) do |f|
|
||||
-if @team_member_relation.errors.any?
|
||||
.alert-message.block-message.error
|
||||
.alert.alert-error
|
||||
%ul
|
||||
- @team_member_relation.errors.full_messages.each do |msg|
|
||||
%li= msg
|
||||
|
@ -12,5 +12,5 @@
|
|||
|
||||
%br
|
||||
.actions
|
||||
= f.submit 'Save', class: "btn primary"
|
||||
= f.submit 'Save', class: "btn btn-primary"
|
||||
= link_to 'Cancel', :back, class: "btn"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
%h3.page_title
|
||||
Project: #{@project.name_with_namespace}
|
||||
= link_to edit_admin_project_path(@project), class: "btn right" do
|
||||
= link_to edit_admin_project_path(@project), class: "btn pull-right" do
|
||||
%i.icon-edit
|
||||
Edit
|
||||
|
||||
|
@ -129,8 +129,8 @@
|
|||
%td
|
||||
= link_to tm.name, admin_user_path(tm)
|
||||
%td= @project.project_access_human(tm)
|
||||
%td= link_to 'Edit Access', edit_admin_project_member_path(@project, tm), class: "btn small"
|
||||
%td= link_to 'Remove from team', admin_project_member_path(@project, tm), confirm: 'Are you sure?', method: :delete, class: "btn danger small"
|
||||
%td= link_to 'Edit Access', edit_admin_project_member_path(@project, tm), class: "btn btn-small"
|
||||
%td= link_to 'Remove from team', admin_project_member_path(@project, tm), confirm: 'Are you sure?', method: :delete, class: "btn btn-remove small"
|
||||
|
||||
%br
|
||||
%h5 Add new team member
|
||||
|
@ -147,7 +147,7 @@
|
|||
%td= select_tag :project_access, options_for_select(Project.access_options), {class: "project-access-select chosen span3"}
|
||||
|
||||
%tr
|
||||
%td= submit_tag 'Add', class: "btn primary"
|
||||
%td= submit_tag 'Add', class: "btn btn-primary"
|
||||
%td
|
||||
Read more about project permissions
|
||||
%strong= link_to "here", help_permissions_path, class: "vlink"
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
%hr
|
||||
= form_for @team, url: admin_team_path(@team), method: :put do |f|
|
||||
- if @team.errors.any?
|
||||
.alert-message.block-message.error
|
||||
.alert.alert-error
|
||||
%span= @team.errors.full_messages.first
|
||||
.clearfix.team_name_holder
|
||||
= f.label :name do
|
||||
|
@ -19,5 +19,5 @@
|
|||
%li It will change web url for access team and team projects.
|
||||
|
||||
.form-actions
|
||||
= f.submit 'Rename team', class: "btn danger"
|
||||
= link_to 'Cancel', admin_teams_path, class: "btn cancel-btn"
|
||||
= f.submit 'Rename team', class: "btn btn-remove"
|
||||
= link_to 'Cancel', admin_teams_path, class: "btn btn-cancel"
|
||||
|
|
|
@ -3,12 +3,12 @@
|
|||
%small
|
||||
simple Teams description
|
||||
|
||||
= link_to 'New Team', new_admin_team_path, class: "btn small right"
|
||||
= link_to 'New Team', new_admin_team_path, class: "btn btn-small pull-right"
|
||||
%br
|
||||
|
||||
= form_tag admin_teams_path, method: :get, class: 'form-inline' do
|
||||
= text_field_tag :name, params[:name], class: "xlarge"
|
||||
= submit_tag "Search", class: "btn submit primary"
|
||||
= submit_tag "Search", class: "btn submit btn-primary"
|
||||
|
||||
%table
|
||||
%thead
|
||||
|
@ -32,7 +32,7 @@
|
|||
%td
|
||||
= link_to team.owner.name, admin_user_path(team.owner_id)
|
||||
%td.bgred
|
||||
= link_to 'Rename', edit_admin_team_path(team), id: "edit_#{dom_id(team)}", class: "btn small"
|
||||
= link_to 'Destroy', admin_team_path(team), confirm: "REMOVE #{team.name}? Are you sure?", method: :delete, class: "btn small danger"
|
||||
= link_to 'Rename', edit_admin_team_path(team), id: "edit_#{dom_id(team)}", class: "btn btn-small"
|
||||
= link_to 'Destroy', admin_team_path(team), confirm: "REMOVE #{team.name}? Are you sure?", method: :delete, class: "btn btn-small btn-remove"
|
||||
|
||||
= paginate @teams, theme: "admin"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
= form_tag admin_team_member_path(@team, @member), method: :put do
|
||||
-if @member.errors.any?
|
||||
.alert-message.block-message.error
|
||||
.alert.alert-error
|
||||
%ul
|
||||
- @member.errors.full_messages.each do |msg|
|
||||
%li= msg
|
||||
|
@ -16,5 +16,5 @@
|
|||
|
||||
%br
|
||||
.actions
|
||||
= submit_tag 'Save', class: "btn primary"
|
||||
= submit_tag 'Save', class: "btn btn-primary"
|
||||
= link_to 'Cancel', :back, class: "btn"
|
||||
|
|
|
@ -26,4 +26,4 @@
|
|||
%td
|
||||
%span= check_box_tag :group_admin
|
||||
%span Admin?
|
||||
%td= submit_tag 'Add', class: "btn primary", id: :add_members_to_team
|
||||
%td= submit_tag 'Add', class: "btn btn-primary", id: :add_members_to_team
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
%hr
|
||||
= form_for @team, url: admin_teams_path do |f|
|
||||
- if @team.errors.any?
|
||||
.alert-message.block-message.error
|
||||
.alert.alert-error
|
||||
%span= @team.errors.full_messages.first
|
||||
.clearfix
|
||||
= f.label :name do
|
||||
|
@ -10,7 +10,7 @@
|
|||
.input
|
||||
= f.text_field :name, placeholder: "Ex. OpenSource", class: "xxlarge left"
|
||||
|
||||
= f.submit 'Create team', class: "btn primary"
|
||||
= f.submit 'Create team', class: "btn btn-primary"
|
||||
%hr
|
||||
.padded
|
||||
%ul
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
= form_tag admin_team_project_path(@team, @project), method: :put do
|
||||
-if @project.errors.any?
|
||||
.alert-message.block-message.error
|
||||
.alert.alert-error
|
||||
%ul
|
||||
- @project.errors.full_messages.each do |msg|
|
||||
%li= msg
|
||||
|
@ -12,5 +12,5 @@
|
|||
|
||||
%br
|
||||
.actions
|
||||
= submit_tag 'Save', class: "btn primary"
|
||||
= submit_tag 'Save', class: "btn btn-primary"
|
||||
= link_to 'Cancel', :back, class: "btn"
|
||||
|
|
|
@ -20,4 +20,4 @@
|
|||
%tr
|
||||
%td= select_tag :project_ids, options_from_collection_for_select(@projects , :id, :name_with_namespace), multiple: true, data: {placeholder: 'Select projects'}, class: 'chosen span5'
|
||||
%td= select_tag :greatest_project_access, options_for_select(Project.access_options), {class: "project-access-select chosen span3" }
|
||||
%td= submit_tag 'Add', class: "btn primary", id: :assign_projects_to_team
|
||||
%td= submit_tag 'Add', class: "btn btn-primary", id: :assign_projects_to_team
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
%td
|
||||
= @team.name
|
||||
|
||||
= link_to edit_admin_team_path(@team), class: "btn btn-small right" do
|
||||
= link_to edit_admin_team_path(@team), class: "btn btn-small pull-right" do
|
||||
%i.icon-edit
|
||||
Rename
|
||||
%tr
|
||||
|
@ -23,7 +23,7 @@
|
|||
Owner:
|
||||
%td
|
||||
= @team.owner.name
|
||||
.right
|
||||
.pull-right
|
||||
= link_to "#", class: "btn btn-small change-owner-link" do
|
||||
%i.icon-edit
|
||||
Change owner
|
||||
|
@ -36,13 +36,13 @@
|
|||
= form_for @team, url: admin_team_path(@team) do |f|
|
||||
= f.select :owner_id, User.all.map { |user| [user.name, user.id] }, {}, {class: 'chosen'}
|
||||
%div
|
||||
= f.submit 'Change Owner', class: "btn danger"
|
||||
= f.submit 'Change Owner', class: "btn btn-remove"
|
||||
= link_to "Cancel", "#", class: "btn change-owner-cancel-link"
|
||||
|
||||
%fieldset
|
||||
%legend
|
||||
Members (#{@team.members.count})
|
||||
%span= link_to 'Add members', new_admin_team_member_path(@team), class: "btn success small right", id: :add_members_to_team
|
||||
%span= link_to 'Add members', new_admin_team_member_path(@team), class: "btn btn-primary btn-small pull-right", id: :add_members_to_team
|
||||
- if @team.members.any?
|
||||
%table#members_list
|
||||
%thead
|
||||
|
@ -60,14 +60,14 @@
|
|||
%td= @team.human_default_projects_access(member)
|
||||
%td= @team.admin?(member) ? "Admin" : "Member"
|
||||
%td.bgred
|
||||
= link_to 'Edit', edit_admin_team_member_path(@team, member), class: "btn small"
|
||||
= link_to 'Edit', edit_admin_team_member_path(@team, member), class: "btn btn-small"
|
||||
|
||||
= link_to 'Remove', admin_team_member_path(@team, member), confirm: 'Remove member from team. Are you sure?', method: :delete, class: "btn danger small", id: "remove_member_#{member.id}"
|
||||
= link_to 'Remove', admin_team_member_path(@team, member), confirm: 'Remove member from team. Are you sure?', method: :delete, class: "btn btn-remove btn-small", id: "remove_member_#{member.id}"
|
||||
|
||||
%fieldset
|
||||
%legend
|
||||
Projects (#{@team.projects.count})
|
||||
%span= link_to 'Add projects', new_admin_team_project_path(@team), class: "btn success small right", id: :assign_projects_to_team
|
||||
%span= link_to 'Add projects', new_admin_team_project_path(@team), class: "btn btn-primary btn-small pull-right", id: :assign_projects_to_team
|
||||
- if @team.projects.any?
|
||||
%table#projects_list
|
||||
%thead
|
||||
|
@ -82,9 +82,9 @@
|
|||
%td
|
||||
%span= @team.human_max_project_access(project)
|
||||
%td.bgred
|
||||
= link_to 'Edit', edit_admin_team_project_path(@team, project), class: "btn small"
|
||||
= link_to 'Edit', edit_admin_team_project_path(@team, project), class: "btn btn-small"
|
||||
|
||||
= link_to 'Relegate', admin_team_project_path(@team, project), confirm: 'Remove project from team. Are you sure?', method: :delete, class: "btn danger small", id: "relegate_project_#{project.id}"
|
||||
= link_to 'Relegate', admin_team_project_path(@team, project), confirm: 'Remove project from team. Are you sure?', method: :delete, class: "btn btn-remove small", id: "relegate_project_#{project.id}"
|
||||
|
||||
:javascript
|
||||
$(function(){
|
||||
|
|
|
@ -63,10 +63,10 @@
|
|||
.alert.alert-error
|
||||
- if @admin_user.blocked
|
||||
%p This user is blocked and is not able to login to GitLab
|
||||
= link_to 'Unblock User', unblock_admin_user_path(@admin_user), method: :put, class: "btn small"
|
||||
= link_to 'Unblock User', unblock_admin_user_path(@admin_user), method: :put, class: "btn btn-small"
|
||||
- else
|
||||
%p Blocked users will be removed from all projects & will not be able to login to GitLab.
|
||||
= link_to 'Block User', block_admin_user_path(@admin_user), confirm: 'USER WILL BE BLOCKED! Are you sure?', method: :put, class: "btn small danger"
|
||||
= link_to 'Block User', block_admin_user_path(@admin_user), confirm: 'USER WILL BE BLOCKED! Are you sure?', method: :put, class: "btn btn-small btn-remove"
|
||||
%fieldset
|
||||
%legend Profile
|
||||
.clearfix
|
||||
|
@ -80,8 +80,8 @@
|
|||
.input= f.text_field :twitter
|
||||
|
||||
.actions
|
||||
= f.submit 'Save', class: "btn save-btn"
|
||||
= f.submit 'Save', class: "btn btn-save"
|
||||
- if @admin_user.new_record?
|
||||
= link_to 'Cancel', admin_users_path, class: "btn cancel-btn"
|
||||
= link_to 'Cancel', admin_users_path, class: "btn btn-cancel"
|
||||
- else
|
||||
= link_to 'Cancel', admin_user_path(@admin_user), class: "btn cancel-btn"
|
||||
= link_to 'Cancel', admin_user_path(@admin_user), class: "btn btn-cancel"
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
%h3.page_title
|
||||
Users
|
||||
= link_to 'New User', new_admin_user_path, class: "btn small right"
|
||||
= link_to 'New User', new_admin_user_path, class: "btn btn-small pull-right"
|
||||
%br
|
||||
|
||||
= form_tag admin_users_path, method: :get, class: 'form-inline' do
|
||||
= text_field_tag :name, params[:name], class: "xlarge"
|
||||
= submit_tag "Search", class: "btn submit primary"
|
||||
= submit_tag "Search", class: "btn submit btn-primary"
|
||||
%ul.nav.nav-tabs
|
||||
%li{class: "#{'active' unless params[:filter]}"}
|
||||
= link_to admin_users_path do
|
||||
|
@ -44,15 +44,15 @@
|
|||
%td= user.username
|
||||
%td= user.email
|
||||
%td= user.users_projects.count
|
||||
%td= link_to 'Edit', edit_admin_user_path(user), id: "edit_#{dom_id(user)}", class: "btn small"
|
||||
%td= link_to 'Edit', edit_admin_user_path(user), id: "edit_#{dom_id(user)}", class: "btn btn-small"
|
||||
%td.bgred
|
||||
- if user == current_user
|
||||
%span.cred It's you!
|
||||
- else
|
||||
- if user.blocked
|
||||
= link_to 'Unblock', unblock_admin_user_path(user), method: :put, class: "btn small success"
|
||||
= link_to 'Unblock', unblock_admin_user_path(user), method: :put, class: "btn btn-small success"
|
||||
- else
|
||||
= link_to 'Block', block_admin_user_path(user), confirm: 'USER WILL BE BLOCKED! Are you sure?', method: :put, class: "btn small danger"
|
||||
= link_to 'Destroy', [:admin, user], confirm: "USER #{user.name} WILL BE REMOVED! Are you sure?", method: :delete, class: "btn small danger"
|
||||
= 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 @admin_users, theme: "admin"
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
%small Blocked
|
||||
- if @admin_user.admin
|
||||
%small Administrator
|
||||
= link_to edit_admin_user_path(@admin_user), class: "btn right" do
|
||||
= link_to edit_admin_user_path(@admin_user), class: "btn pull-right" do
|
||||
%i.icon-edit
|
||||
Edit
|
||||
|
||||
|
@ -86,7 +86,7 @@
|
|||
%td= select_tag :project_access, options_for_select(Project.access_options), class: "project-access-select chosen span3"
|
||||
|
||||
%tr
|
||||
%td= submit_tag 'Add', class: "btn primary"
|
||||
%td= submit_tag 'Add', class: "btn btn-primary"
|
||||
%td
|
||||
Read more about project permissions
|
||||
%strong= link_to "here", help_permissions_path, class: "vlink"
|
||||
|
@ -123,5 +123,5 @@
|
|||
%tr
|
||||
%td= link_to project.name_with_namespace, admin_project_path(project)
|
||||
%td= tm.project_access_human
|
||||
%td= link_to 'Edit Access', edit_admin_project_member_path(project, tm.user), class: "btn small"
|
||||
%td= link_to 'Remove from team', admin_project_member_path(project, tm.user), confirm: 'Are you sure?', method: :delete, class: "btn small danger"
|
||||
%td= link_to 'Edit Access', edit_admin_project_member_path(project, tm.user), class: "btn btn-small"
|
||||
%td= link_to 'Remove from team', admin_project_member_path(project, tm.user), confirm: 'Are you sure?', method: :delete, class: "btn btn-small btn-remove"
|
||||
|
|
|
@ -3,5 +3,5 @@
|
|||
= render partial: 'shared/ref_switcher', locals: {destination: 'tree', path: params[:path]}
|
||||
= nav_link(controller: :refs) do
|
||||
= link_to 'Source', project_tree_path(@project, @ref)
|
||||
%li.right
|
||||
%li.pull-right
|
||||
= render "shared/clone_panel"
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
= render "commits/commit_box"
|
||||
.alert-message.block-message.error
|
||||
.alert.alert-error
|
||||
%h4 Commit diffs are too big to be displayed
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
= render "commits/commit_box"
|
||||
|
||||
%p.right.cgray
|
||||
%p.pull-right.cgray
|
||||
This commit has
|
||||
%span.cgreen #{@commit.stats.additions} additions
|
||||
and
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
.ui-box.ui-box-show
|
||||
.ui-box-head
|
||||
.right
|
||||
.pull-right
|
||||
- if @notes_count > 0
|
||||
%span.btn.disabled.grouped
|
||||
%i.icon-comment
|
||||
|
@ -13,7 +13,7 @@
|
|||
%ul.dropdown-menu
|
||||
%li= link_to "Email Patches", project_commit_path(@project, @commit, format: :patch)
|
||||
%li= link_to "Plain Diff", project_commit_path(@project, @commit, format: :diff)
|
||||
= link_to project_tree_path(@project, @commit), class: "btn primary grouped" do
|
||||
= link_to project_tree_path(@project, @commit), class: "btn btn-primary grouped" do
|
||||
%span Browse Code »
|
||||
%h3.commit-title.page_title
|
||||
= gfm escape_once(@commit.title)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
- if @suppress_diff
|
||||
.alert-message.block-message
|
||||
.alert.alert-block
|
||||
%p
|
||||
%strong Warning! Large commit with more then #{Commit::DIFF_SAFE_SIZE} files changed.
|
||||
%strong Warning! Large commit with more than #{Commit::DIFF_SAFE_SIZE} files changed.
|
||||
%p To prevent performance issue we rejected diff information.
|
||||
%p
|
||||
But if you still want to see diff
|
||||
|
@ -25,7 +25,7 @@
|
|||
%span= diff.old_path
|
||||
|
||||
- if @commit.prev_commit
|
||||
= link_to project_tree_path(@project, tree_join(@commit.prev_commit_id, diff.new_path)), {:class => 'btn right view-file'} do
|
||||
= link_to project_tree_path(@project, tree_join(@commit.prev_commit_id, diff.new_path)), {:class => 'btn pull-right view-file'} do
|
||||
View file @
|
||||
%span.commit-short-id= @commit.short_id(6)
|
||||
- else
|
||||
|
@ -33,7 +33,7 @@
|
|||
- if diff.a_mode && diff.b_mode && diff.a_mode != diff.b_mode
|
||||
%span.file-mode= "#{diff.a_mode} → #{diff.b_mode}"
|
||||
|
||||
= link_to project_tree_path(@project, tree_join(@commit.id, diff.new_path)), {:class => 'btn very_small right view-file'} do
|
||||
= link_to project_tree_path(@project, tree_join(@commit.id, diff.new_path)), {:class => 'btn btn-tiny pull-right view-file'} do
|
||||
View file @
|
||||
%span.commit-short-id= @commit.short_id(6)
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
|
||||
|
||||
- if current_controller?(:commits) && current_user.private_token
|
||||
%li.right
|
||||
%li.pull-right
|
||||
%span.rss-icon
|
||||
= link_to project_commits_path(@project, @ref, {format: :atom, private_token: current_user.private_token}), title: "Feed" do
|
||||
= image_tag "rss_ui.png", title: "feed"
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
= text_field_tag :to, params[:to], placeholder: "aa8b4ef", class: "xlarge"
|
||||
.pull-left
|
||||
|
||||
= submit_tag "Compare", class: "btn primary wide commits-compare-btn"
|
||||
= submit_tag "Compare", class: "btn btn-primary wide commits-compare-btn"
|
||||
- if @refs_are_same
|
||||
.alert
|
||||
%span Refs are the same
|
||||
|
|
|
@ -25,9 +25,9 @@
|
|||
%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.right= entities_per_project(project, entity)
|
||||
%small.pull-right= entities_per_project(project, entity)
|
||||
|
||||
%fieldset
|
||||
%hr
|
||||
= link_to "Reset", dashboard_filter_path(entity), class: 'btn right'
|
||||
= link_to "Reset", dashboard_filter_path(entity), class: 'btn pull-right'
|
||||
|
||||
|
|
|
@ -4,8 +4,8 @@
|
|||
%small
|
||||
(#{groups.count})
|
||||
- if current_user.can_create_group?
|
||||
%span.right
|
||||
= link_to new_group_path, class: "btn very_small info" do
|
||||
%span.pull-right
|
||||
= link_to new_group_path, class: "btn btn-tiny info" do
|
||||
%i.icon-plus
|
||||
New Group
|
||||
%ul.well-list
|
||||
|
@ -13,6 +13,6 @@
|
|||
%li
|
||||
= link_to group_path(id: group.path), class: dom_class(group) do
|
||||
%strong.well-title= truncate(group.name, length: 35)
|
||||
%span.right.light
|
||||
%span.pull-right.light
|
||||
- if group.owner == current_user
|
||||
%i.icon-wrench
|
||||
|
|
|
@ -4,8 +4,8 @@
|
|||
%small
|
||||
(#{@projects_count})
|
||||
- if current_user.can_create_project?
|
||||
%span.right
|
||||
= link_to new_project_path, class: "btn very_small info" do
|
||||
%span.pull-right
|
||||
= link_to new_project_path, class: "btn btn-tiny info" do
|
||||
%i.icon-plus
|
||||
New Project
|
||||
|
||||
|
|
|
@ -3,8 +3,8 @@
|
|||
Teams
|
||||
%small
|
||||
(#{@teams.count})
|
||||
%span.right
|
||||
= link_to new_team_path, class: "btn very_small info" do
|
||||
%span.pull-right
|
||||
= link_to new_team_path, class: "btn btn-tiny info" do
|
||||
%i.icon-plus
|
||||
New Team
|
||||
%ul.well-list
|
||||
|
@ -12,7 +12,7 @@
|
|||
%li
|
||||
= link_to team_path(id: team.path), class: dom_class(team) do
|
||||
%strong.well-title= truncate(team.name, length: 35)
|
||||
%span.right.light
|
||||
%span.pull-right.light
|
||||
- if team.owner == current_user
|
||||
%i.icon-wrench
|
||||
- tm = current_user.user_team_user_relationships.find_by_user_team_id(team.id)
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
= current_user.projects_limit
|
||||
projects. Click on button below to add a new one
|
||||
.link_holder
|
||||
= link_to new_project_path, class: "btn primary" do
|
||||
= link_to new_project_path, class: "btn btn-primary" do
|
||||
New Project »
|
||||
- else
|
||||
If you will be added to project - it will be displayed here
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
%h3.page_title
|
||||
Issues
|
||||
%small (assigned to you)
|
||||
%small.right #{@issues.total_count} issues
|
||||
%small.pull-right #{@issues.total_count} issues
|
||||
|
||||
%hr
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
%h3.page_title
|
||||
Merge Requests
|
||||
%small (authored by or assigned to you)
|
||||
%small.right #{@merge_requests.total_count} merge requests
|
||||
%small.pull-right #{@merge_requests.total_count} merge requests
|
||||
|
||||
%hr
|
||||
.row
|
||||
|
|
|
@ -3,8 +3,8 @@
|
|||
%span
|
||||
(#{@projects.total_count})
|
||||
- if current_user.can_create_project?
|
||||
%span.right
|
||||
= link_to new_project_path, class: "btn very_small info" do
|
||||
%span.pull-right
|
||||
= link_to new_project_path, class: "btn btn-tiny info" do
|
||||
%i.icon-plus
|
||||
New Project
|
||||
|
||||
|
@ -42,7 +42,7 @@
|
|||
%small.light
|
||||
%strong Last activity:
|
||||
%span= project_last_activity(project)
|
||||
.right.light
|
||||
.pull-right.light
|
||||
- if project.owner == current_user
|
||||
%i.icon-wrench
|
||||
- tm = project.team.get_tm(current_user.id)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
%div
|
||||
= form_for [@project, @key], url: project_deploy_keys_path do |f|
|
||||
-if @key.errors.any?
|
||||
.alert-message.block-message.error
|
||||
.alert.alert-error
|
||||
%ul
|
||||
- @key.errors.full_messages.each do |msg|
|
||||
%li= msg
|
||||
|
@ -18,6 +18,6 @@
|
|||
= link_to "here", help_ssh_path
|
||||
|
||||
.actions
|
||||
= f.submit 'Save', class: "save-btn btn"
|
||||
= link_to "Cancel", project_deploy_keys_path(@project), class: "btn cancel-btn"
|
||||
= f.submit 'Save', class: "btn-save btn"
|
||||
= link_to "Cancel", project_deploy_keys_path(@project), class: "btn btn-cancel"
|
||||
|
||||
|
|
|
@ -8,5 +8,5 @@
|
|||
= time_ago_in_words(key.created_at)
|
||||
ago
|
||||
%td
|
||||
= link_to 'Remove', project_deploy_key_path(key.project, key), confirm: 'Are you sure?', method: :delete, class: "danger btn delete-key small right"
|
||||
= link_to 'Remove', project_deploy_key_path(key.project, key), confirm: 'Are you sure?', method: :delete, class: "btn btn-remove delete-key btn-small pull-right"
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
Deploy keys allow read-only access to repository. It matches perfectly for CI, staging or production servers.
|
||||
|
||||
- if can? current_user, :admin_project, @project
|
||||
= link_to new_project_deploy_key_path(@project), class: "btn small", title: "New Deploy Key" do
|
||||
= link_to new_project_deploy_key_path(@project), class: "btn btn-small", title: "New Deploy Key" do
|
||||
Add Deploy Key
|
||||
- if @keys.any?
|
||||
%table
|
||||
|
|
|
@ -10,5 +10,5 @@
|
|||
← To keys list
|
||||
%hr
|
||||
%pre= @key.key
|
||||
.right
|
||||
= link_to 'Remove', project_deploy_key_path(@key.project, @key), confirm: 'Are you sure?', method: :delete, class: "danger btn delete-key"
|
||||
.pull-right
|
||||
= link_to 'Remove', project_deploy_key_path(@key.project, @key), confirm: 'Are you sure?', method: :delete, class: "btn-remove btn delete-key"
|
||||
|
|
|
@ -8,5 +8,5 @@
|
|||
%div
|
||||
= f.password_field :password_confirmation, class: "text bottom", placeholder: "Confirm new password"
|
||||
%div
|
||||
= f.submit "Change my password", class: "btn primary"
|
||||
.right= render partial: "devise/shared/links"
|
||||
= f.submit "Change my password", class: "btn btn-primary"
|
||||
.pull-right= render partial: "devise/shared/links"
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
<%= form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :class => "login-box", :method => :post }) do |f| %>
|
||||
<%= image_tag "login-logo.png", :width => "304", :height => "66", :class => "login-logo", :alt => "Login Logo" %>
|
||||
<%= form_for(resource, as: resource_name, url: password_path(resource_name), html: { class: "login-box", method: :post }) do |f| %>
|
||||
<%= image_tag "login-logo.png", width: "304", height: "66", class: "login-logo", alt: "Login Logo" %>
|
||||
<%= devise_error_messages! %>
|
||||
<%= f.email_field :email, :placeholder => "Email", :class => "text" %>
|
||||
<%= f.email_field :email, placeholder: "Email", class: "text" %>
|
||||
<br/>
|
||||
<br/>
|
||||
<%= f.submit "Reset password", :class => "primary btn" %>
|
||||
<div class="right"> <%= link_to "Sign in", new_session_path(resource_name), :class => "btn" %><br /></div>
|
||||
<%= f.submit "Reset password", class: "btn-primary btn" %>
|
||||
<div class="pull-right"> <%= link_to "Sign in", new_session_path(resource_name), class: "btn" %><br /></div>
|
||||
<% end %>
|
||||
|
|
|
@ -1,19 +1,18 @@
|
|||
= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :class => "login-box" }) do |f|
|
||||
= image_tag "login-logo.png", :width => "304", :height => "66", :class => "login-logo", :alt => "Login Logo"
|
||||
= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { class: "login-box" }) do |f|
|
||||
= image_tag "login-logo.png", width: "304", height: "66", class: "login-logo", alt: "Login Logo"
|
||||
= devise_error_messages!
|
||||
%div
|
||||
= f.text_field :name, :class => "text top", :placeholder => "Name", :required => true
|
||||
= f.text_field :name, class: "text top", placeholder: "Name", required: true
|
||||
%div
|
||||
= f.text_field :username, :class => "text middle", :placeholder => "Username", :required => true
|
||||
= f.text_field :username, class: "text middle", placeholder: "Username", required: true
|
||||
%div
|
||||
= f.email_field :email, :class => "text middle", :placeholder => "Email", :required => true
|
||||
= f.email_field :email, class: "text middle", placeholder: "Email", required: true
|
||||
%div
|
||||
= f.password_field :password, :class => "text middle", :placeholder => "Password", :required => true
|
||||
= f.password_field :password, class: "text middle", placeholder: "Password", required: true
|
||||
%div
|
||||
= f.password_field :password_confirmation, :class => "text bottom", :placeholder => "Confirm password", :required => true
|
||||
= f.password_field :password_confirmation, class: "text bottom", placeholder: "Confirm password", required: true
|
||||
%div
|
||||
= f.submit "Sign up", :class => "primary btn wide"
|
||||
%br
|
||||
= f.submit "Sign up", class: "btn-create btn"
|
||||
%hr
|
||||
= link_to "Sign in", new_session_path(resource_name)
|
||||
= link_to "Forgot your password?", new_password_path(resource_name), :class => "right"
|
||||
= link_to "Forgot your password?", new_password_path(resource_name), class: "pull-right"
|
||||
|
|
|
@ -3,11 +3,11 @@
|
|||
= text_field_tag :username, nil, {:class => "text top", :placeholder => "LDAP Login"}
|
||||
= password_field_tag :password, nil, {:class => "text bottom", :placeholder => "Password"}
|
||||
%br/
|
||||
= submit_tag "LDAP Sign in", :class => "primary btn"
|
||||
= submit_tag "LDAP Sign in", :class => "btn-primary btn"
|
||||
- if devise_mapping.omniauthable?
|
||||
- (resource_class.omniauth_providers - [:ldap]).each do |provider|
|
||||
%hr/
|
||||
= link_to "Sign in with #{provider.to_s.titleize}", omniauth_authorize_path(resource_name, provider), :class => "btn primary"
|
||||
= link_to "Sign in with #{provider.to_s.titleize}", omniauth_authorize_path(resource_name, provider), :class => "btn btn-primary"
|
||||
%br/
|
||||
%hr/
|
||||
%a#other_form_toggle{:href => "#", :onclick => "javascript:$('#new_user').toggle();"} Other Sign in
|
||||
|
@ -24,6 +24,6 @@
|
|||
= f.check_box :remember_me
|
||||
%span Remember me
|
||||
%br/
|
||||
= f.submit "Sign in", :class => "primary btn"
|
||||
.right
|
||||
= f.submit "Sign in", :class => "btn-primary btn"
|
||||
.pull-right
|
||||
= render :partial => "devise/shared/links"
|
||||
|
|
|
@ -11,18 +11,18 @@
|
|||
= f.check_box :remember_me
|
||||
%span Remember me
|
||||
%br/
|
||||
= f.submit "Sign in", :class => "primary btn wide"
|
||||
.right
|
||||
= f.submit "Sign in", :class => "btn-create btn"
|
||||
.pull-right
|
||||
= link_to "Forgot your password?", new_password_path(resource_name), :class => "btn"
|
||||
%br/
|
||||
%br/
|
||||
- if Gitlab.config.gitlab.signup_enabled
|
||||
%hr/
|
||||
Don't have an account?
|
||||
= link_to "Sign up", new_registration_path(resource_name)
|
||||
.clearfix
|
||||
- if devise_mapping.omniauthable? && resource_class.omniauth_providers.present?
|
||||
%hr
|
||||
%div
|
||||
%span Sign in with:
|
||||
- resource_class.omniauth_providers.each do |provider|
|
||||
%span
|
||||
= link_to authbutton(provider, 32), omniauth_authorize_path(resource_name, provider)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
- if event.proper?
|
||||
%div.event-item
|
||||
%span.cgray.right
|
||||
%span.cgray.pull-right
|
||||
#{time_ago_in_words(event.created_at)} ago.
|
||||
|
||||
= image_tag gravatar_icon(event.author_email), class: "avatar s24"
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
%h3.page_title Project Network Graph
|
||||
%br
|
||||
|
||||
= render partial: 'shared/ref_switcher', locals: {destination: 'graph', path: @path}
|
||||
%br
|
||||
.graph_holder
|
||||
%h4
|
||||
%small You can move around the graph by using the arrow keys.
|
||||
|
@ -11,7 +12,8 @@
|
|||
var branch_graph;
|
||||
$(function(){
|
||||
branch_graph = new BranchGraph($("#holder"), {
|
||||
url: '#{url_for controller: 'projects', action: 'graph', format: :json}',
|
||||
commit_url: '#{project_commit_path(@project, 'ae45ca32').gsub("ae45ca32", "%s")}'
|
||||
url: '#{project_graph_path(@project, @ref, format: :json)}',
|
||||
commit_url: '#{project_commit_path(@project, 'ae45ca32').gsub("ae45ca32", "%s")}',
|
||||
ref: '#{@ref}'
|
||||
});
|
||||
});
|
|
@ -25,9 +25,9 @@
|
|||
%li{class: ("active" if params[:project_id] == project.id.to_s)}
|
||||
= link_to group_filter_path(entity, project_id: project.id) do
|
||||
= project.name_with_namespace
|
||||
%small.right= entities_per_project(project, entity)
|
||||
%small.pull-right= entities_per_project(project, entity)
|
||||
|
||||
%fieldset
|
||||
%hr
|
||||
= link_to "Reset", group_filter_path(entity), class: 'btn right'
|
||||
= link_to "Reset", group_filter_path(entity), class: 'btn pull-right'
|
||||
|
||||
|
|
|
@ -14,5 +14,5 @@
|
|||
|
||||
.form-actions
|
||||
= hidden_field_tag :redirect_to, people_group_path(@group)
|
||||
= f.submit 'Add', class: "btn save-btn"
|
||||
= f.submit 'Add', class: "btn btn-save"
|
||||
|
||||
|
|
|
@ -14,5 +14,5 @@
|
|||
|
||||
.form-actions
|
||||
= hidden_field_tag :redirect_to, people_group_path(@group, project_id: @project.id)
|
||||
= f.submit 'Add', class: "btn save-btn"
|
||||
= f.submit 'Add', class: "btn btn-save"
|
||||
|
||||
|
|
|
@ -6,9 +6,9 @@
|
|||
%li{class: ("active" if params[:project_id] == project.id.to_s)}
|
||||
= link_to people_group_path(@group, project_id: project.id) do
|
||||
= project.name_with_namespace
|
||||
%small.right= project.users.count
|
||||
%small.pull-right= project.users.count
|
||||
|
||||
%fieldset
|
||||
%hr
|
||||
= link_to "Reset", people_group_path(@group), class: 'btn right'
|
||||
= link_to "Reset", people_group_path(@group), class: 'btn pull-right'
|
||||
|
||||
|
|
|
@ -4,8 +4,8 @@
|
|||
%small
|
||||
(#{projects.count})
|
||||
- if can? current_user, :manage_group, @group
|
||||
%span.right
|
||||
= link_to new_project_path(namespace_id: @group.id), class: "btn very_small info" do
|
||||
%span.pull-right
|
||||
= link_to new_project_path(namespace_id: @group.id), class: "btn btn-tiny info" do
|
||||
%i.icon-plus
|
||||
New Project
|
||||
%ul.well-list
|
||||
|
|
50
app/views/groups/edit.html.haml
Normal file
50
app/views/groups/edit.html.haml
Normal file
|
@ -0,0 +1,50 @@
|
|||
%h3.page_title Edit Group
|
||||
%hr
|
||||
= form_for @group do |f|
|
||||
- if @group.errors.any?
|
||||
.alert.alert-error
|
||||
%span= @group.errors.full_messages.first
|
||||
.clearfix
|
||||
= f.label :name do
|
||||
Group name is
|
||||
.input
|
||||
= f.text_field :name, placeholder: "Ex. OpenSource", class: "xxlarge left"
|
||||
|
||||
= f.submit 'Save group', class: "btn btn-save"
|
||||
%hr
|
||||
|
||||
|
||||
.row
|
||||
.span7
|
||||
.ui-box
|
||||
%h5.title Projects
|
||||
%ul.well-list
|
||||
- @group.projects.each do |project|
|
||||
%li
|
||||
- if project.public
|
||||
%i.icon-share
|
||||
- else
|
||||
%i.icon-lock.cgreen
|
||||
= link_to project.name_with_namespace, project
|
||||
.pull-right
|
||||
= link_to 'Team', project_team_index_path(project), id: "edit_#{dom_id(project)}", class: "btn btn-small"
|
||||
= link_to 'Edit', edit_project_path(project), id: "edit_#{dom_id(project)}", class: "btn btn-small"
|
||||
= link_to 'Remove', project, confirm: "REMOVE #{project.name}? Are you sure?", method: :delete, class: "btn btn-small btn-remove"
|
||||
|
||||
.span5
|
||||
.ui-box
|
||||
%h5.title Transfer group
|
||||
.padded
|
||||
%p
|
||||
Transferring group will cause loss of admin control over group and all child projects
|
||||
= form_for @group do |f|
|
||||
= f.select :owner_id, User.all.map { |user| [user.name, user.id] }, {}, {class: 'chosen'}
|
||||
= f.submit 'Transfer group', class: "btn btn-small"
|
||||
.ui-box
|
||||
%h5.title Remove group
|
||||
.padded.bgred
|
||||
%p
|
||||
Remove of group will cause removing all child projects and resources
|
||||
%br
|
||||
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"
|
|
@ -1,7 +1,7 @@
|
|||
%h3.page_title
|
||||
Issues
|
||||
%small (assigned to you)
|
||||
%small.right #{@issues.total_count} issues
|
||||
%small.pull-right #{@issues.total_count} issues
|
||||
|
||||
%hr
|
||||
.row
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
%h3.page_title
|
||||
Merge Requests
|
||||
%small (authored by or assigned to you)
|
||||
%small.right #{@merge_requests.total_count} merge requests
|
||||
%small.pull-right #{@merge_requests.total_count} merge requests
|
||||
|
||||
%hr
|
||||
.row
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
%hr
|
||||
= form_for @group do |f|
|
||||
- if @group.errors.any?
|
||||
.alert-message.block-message.error
|
||||
.alert.alert-error
|
||||
%span= @group.errors.full_messages.first
|
||||
.clearfix
|
||||
= f.label :name do
|
||||
|
@ -10,7 +10,7 @@
|
|||
.input
|
||||
= f.text_field :name, placeholder: "Ex. OpenSource", class: "xxlarge left"
|
||||
|
||||
= f.submit 'Create group', class: "btn primary"
|
||||
= f.submit 'Create group', class: "btn btn-create"
|
||||
%hr
|
||||
.padded
|
||||
%ul
|
||||
|
|
|
@ -16,5 +16,5 @@
|
|||
%strong= user.name
|
||||
%span.cgray= user.email
|
||||
- if @group.owner == user
|
||||
%span.btn.btn-small.disabled.right Group Owner
|
||||
%span.btn.btn-small.disabled.pull-right Group Owner
|
||||
|
||||
|
|
|
@ -4,6 +4,6 @@
|
|||
%strong Looking for
|
||||
.input
|
||||
= search_field_tag :search, params[:search], placeholder: "issue 143", class: "input-xxlarge search-text-input", id: "dashboard_search"
|
||||
= submit_tag 'Search', class: "btn primary wide"
|
||||
= submit_tag 'Search', class: "btn btn-primary wide"
|
||||
- if params[:search].present?
|
||||
= render 'search/result'
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
.projects
|
||||
.activities.span8
|
||||
= render "events/event_last_push", event: @last_push
|
||||
= link_to dashboard_path, class: 'btn very_small' do
|
||||
= link_to dashboard_path, class: 'btn btn-tiny' do
|
||||
← To dashboard
|
||||
|
||||
%span.cgray You will only see events from projects in this group
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue