OSDN Git Service

Merge pull request #1426 from NARKOZ/spinach
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Mon, 10 Sep 2012 16:09:07 +0000 (09:09 -0700)
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Mon, 10 Sep 2012 16:09:07 +0000 (09:09 -0700)
Cucumber => Spinach

28 files changed:
app/assets/javascripts/main.js.coffee
app/assets/stylesheets/common.scss
app/helpers/projects_helper.rb
app/views/admin/projects/_form.html.haml
app/views/admin/projects/show.html.haml
app/views/admin/team_members/_form.html.haml
app/views/admin/users/show.html.haml
app/views/commits/_head.html.haml
app/views/devise/sessions/_new_ldap.html.haml
app/views/issues/_form.html.haml
app/views/issues/edit.html.haml
app/views/issues/new.html.haml
app/views/merge_requests/_form.html.haml
app/views/milestones/edit.html.haml
app/views/projects/_refs.html.haml
app/views/protected_branches/index.html.haml
app/views/refs/_head.html.haml
app/views/refs/_tree.html.haml
app/views/refs/blame.html.haml
app/views/snippets/_form.html.haml
app/views/team_members/_form.html.haml
app/views/team_members/_show.html.haml
lib/api/helpers.rb
lib/api/issues.rb
lib/api/milestones.rb
lib/api/projects.rb
lib/gitlab/backend/gitolite_config.rb
spec/requests/api/projects_spec.rb

index a01b393..86b1916 100644 (file)
@@ -24,6 +24,9 @@ $ ->
   # Click a .one_click_select field, select the contents
   $(".one_click_select").live 'click', -> $(this).select()
 
+  # Initialize chosen selects
+  $('select.chosen').chosen()
+
   # Disable form buttons while a form is submitting
   $('body').on 'ajax:complete, ajax:beforeSend, submit', 'form', (e) ->
     buttons = $('[type="submit"]', this)
index 012aad0..6f69ba5 100644 (file)
@@ -181,11 +181,12 @@ span.update-author {
   }
 
   &.joined {
-    background-color: #1cb9ff;
+    background-color: #1ca9dd;
   }
 
   &.left {
-    background-color: #ff5057;
+    background-color: #888;
+    float:none;
   }
 }
 
index 34dbb06..c7dc54e 100644 (file)
@@ -2,5 +2,9 @@ module ProjectsHelper
   def grouper_project_members(project)
     @project.users_projects.sort_by(&:project_access).reverse.group_by(&:project_access)
   end
+
+  def remove_from_team_message(project, member)
+    "You are going to remove #{member.user_name} from #{project.name}. Are you sure?"
+  end
 end
 
index 87d212e..4848e73 100644 (file)
@@ -32,7 +32,7 @@
     - unless project.new_record?
       .clearfix
         = f.label :owner_id
-        .input= f.select :owner_id, User.all.map { |user| [user.name, user.id] }
+        .input= f.select :owner_id, User.all.map { |user| [user.name, user.id] }, {}, {class: 'chosen'}
 
       - if project.repo_exists?
         .clearfix
@@ -69,7 +69,6 @@
 
 :javascript
   $(function(){
-    $('#project_owner_id').chosen();
     new Projects();
   })
 
index 65d888f..6398741 100644 (file)
         %th Project Access:
 
     %tr
-      %td= select_tag :user_ids, options_from_collection_for_select(@users , :id, :name),  multiple: true
-      %td= select_tag :project_access, options_for_select(Project.access_options), class: "project-access-select"
+      %td= select_tag :user_ids, options_from_collection_for_select(@users , :id, :name), multiple: true, data: {placeholder: 'Select users'}, class: 'chosen span5'
+      %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
         Read more about project permissions
         %strong= link_to "here", help_permissions_path, class: "vlink"
-
-:css
-  form select {
-    width:150px;
-  }
-
-  #user_ids {
-    width:300px;
-  }
-
-:javascript
-  $('select#user_ids').chosen();
-  $('select#repo_access').chosen();
-  $('select#project_access').chosen();
index 6a128de..9cd94fd 100644 (file)
@@ -8,20 +8,9 @@
   .clearfix
     %label Project Access:
     .input
-      = f.select :project_access, options_for_select(Project.access_options, @admin_team_member.project_access), {}, class: "project-access-select"
+      = f.select :project_access, options_for_select(Project.access_options, @admin_team_member.project_access), {}, class: "project-access-select chosen span3"
 
   %br
   .actions
     = f.submit 'Save', class: "btn primary"
     = link_to 'Cancel', :back, class: "btn"
-
-:css
-  form select {
-    width:300px;
-  }
-
-:javascript
-  $('select#team_member_user_id').chosen();
-  $('select#team_member_project_id').chosen();
-  $('select#team_member_repo_access').chosen();
-  $('select#team_member_project_access').chosen();
index 4d2b983..731916e 100644 (file)
@@ -68,8 +68,8 @@
         %th Project Access:
 
     %tr
-      %td= select_tag :project_ids, options_from_collection_for_select(@projects , :id, :name),  multiple: true
-      %td= select_tag :project_access, options_for_select(Project.access_options), class: "project-access-select"
+      %td= select_tag :project_ids, options_from_collection_for_select(@projects , :id, :name),  multiple: true, data: {placeholder: 'Select projects'}, class: 'chosen span5'
+      %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= select_tag :tm_project_access, options_for_select(Project.access_options, tm.project_access), class: "medium project-access-select", disabled: :disabled
         %td= link_to 'Edit Access', edit_admin_team_member_path(tm), class: "btn small"
         %td= link_to 'Remove from team', admin_team_member_path(tm), confirm: 'Are you sure?', method: :delete, class: "btn small danger"
-
-:css
-  form select {
-    width:150px;
-  }
-
-  #project_ids {
-    width:300px;
-  }
-
-:javascript
-  $('select#project_ids').chosen();
-  $('select#repo_access').chosen();
-  $('select#project_access').chosen();
index a211329..5a09d82 100644 (file)
@@ -1,7 +1,7 @@
 %ul.nav.nav-tabs
   %li
     = form_tag switch_project_refs_path(@project), method: :get, class: "project-refs-form" do
-      = select_tag "ref", grouped_options_refs, onchange: "$(this.form).trigger('submit');", class: "project-refs-select"
+      = select_tag "ref", grouped_options_refs, onchange: "$(this.form).trigger('submit');", class: "project-refs-select chosen"
       = hidden_field_tag :destination, "commits"
 
   %li{class: "#{'active' if current_page?(project_commits_path(@project)) }"}
@@ -26,8 +26,3 @@
       %span.rss-icon
         = link_to project_commits_path(@project, :atom, { private_token: current_user.private_token, ref: @ref }), title: "Feed" do
           = image_tag "rss_ui.png", title: "feed"
-
-:javascript
-  $(function(){
-    $('.project-refs-select').chosen();
-  });
index 85010df..4233aa6 100644 (file)
@@ -15,7 +15,7 @@
     $(function() {
       $('#new_user').toggle();
     });
-  = form_for(resource, :as => resource_name, :url => session_path(resource_name), :html => { :class => "login-box" }) do |f|
+= form_for(resource, :as => resource_name, :url => session_path(resource_name), :html => { :class => "login-box" }) do |f|
   = f.text_field :email, :class => "text top", :placeholder => "Email"
   = f.password_field :password, :class => "text bottom", :placeholder => "Password"
   - if devise_mapping.rememberable?
index 23de7e8..813ecab 100644 (file)
           = f.label :assignee_id do
             %i.icon-user
             Assign to
-          .input= f.select(:assignee_id, @project.users.all.collect {|p| [ p.name, p.id ] }, { include_blank: "Select a user" })
+          .input= f.select(:assignee_id, @project.users.all.collect {|p| [ p.name, p.id ] }, { include_blank: "Select a user" }, {class: 'chosen'})
         .issue_milestone
           = 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" })
+          .input= f.select(:milestone_id, @project.milestones.active.all.collect {|p| [ p.title, p.id ] }, { include_blank: "Select milestone" }, {class: 'chosen'})
 
       .issue_description
         .clearfix
index 3c9877f..b1bc3ba 100644 (file)
@@ -1,8 +1 @@
 = render "form"
-
-:javascript
-  $(function(){
-    $('select#issue_assignee_id').chosen();
-    $('select#issue_milestone_id').chosen();
-  });
-
index 3c9877f..b1bc3ba 100644 (file)
@@ -1,8 +1 @@
 = render "form"
-
-:javascript
-  $(function(){
-    $('select#issue_assignee_id').chosen();
-    $('select#issue_milestone_id').chosen();
-  });
-
index d5271ed..96692c0 100644 (file)
@@ -16,7 +16,7 @@
           .padded
             = f.label :source_branch, "From", class: "control-label"
             .controls
-              = f.select(:source_branch, @project.heads.map(&:name), { include_blank: "Select branch" }, style: "width:250px")
+              = f.select(:source_branch, @project.heads.map(&:name), { include_blank: "Select branch" }, {class: 'chosen span3'})
       .mr_source_commit
 
     .span2
@@ -28,7 +28,7 @@
           .padded
             = f.label :target_branch, "To", class: "control-label"
             .controls
-              = f.select(:target_branch, @project.heads.map(&:name), { include_blank: "Select branch" }, style: "width:250px")
+              = f.select(:target_branch, @project.heads.map(&:name), { include_blank: "Select branch" }, {class: 'chosen span3'})
       .mr_target_commit
 
   %h4.cdark 2. Fill info
@@ -43,7 +43,7 @@
         = f.label :assignee_id do 
           %i.icon-user 
           Assign to
-        .input= f.select(:assignee_id, @project.users.all.collect {|p| [ p.name, p.id ] }, { include_blank: "Select user" }, style: "width:250px")
+        .input= f.select(:assignee_id, @project.users.all.collect {|p| [ p.name, p.id ] }, { include_blank: "Select user" }, {class: 'chosen span3'})
 
   .control-group
 
       = link_to project_merge_request_path(@project, @merge_request), class: "btn cancel-btn" do
         Cancel
 
-
-
 :javascript
   $(function(){
     disableButtonIfEmptyField("#merge_request_title", ".save-btn");
-    $('select#merge_request_assignee_id').chosen();
-    $('select#merge_request_source_branch').chosen();
-    $('select#merge_request_target_branch').chosen();
     var source_branch = $("#merge_request_source_branch");
     var target_branch = $("#merge_request_target_branch");
 
-    
     $.get("#{branch_from_project_merge_requests_path(@project)}", {ref: source_branch.val() });
     $.get("#{branch_to_project_merge_requests_path(@project)}", {ref: target_branch.val() });
 
@@ -79,4 +73,3 @@
       $.get("#{branch_to_project_merge_requests_path(@project)}", {ref: $(this).val() });
     });
   });
-
index af975a8..b1bc3ba 100644 (file)
@@ -1,7 +1 @@
 = render "form"
-
-:javascript
-  $(function(){
-    $('select#issue_assignee_id').chosen();
-  });
-
index 804b852..dc1f3a2 100644 (file)
@@ -1,8 +1,3 @@
 = form_tag switch_project_refs_path(@project), method: :get, class: "project-refs-form" do
-  = select_tag "ref", grouped_options_refs, onchange: "this.form.submit();", class: "project-refs-select"
+  = select_tag "ref", grouped_options_refs, onchange: "this.form.submit();", class: "project-refs-select chosen"
   = hidden_field_tag :destination, destination
-
-:javascript
-  $(function(){
-    $('.project-refs-select').chosen();
-  })
index 33bb448..43884de 100644 (file)
@@ -19,7 +19,7 @@
     .entry.clearfix
       = f.label :name, "Branch"
       .span3
-        = f.select(:name, @project.open_branches.map { |br| [br.name, br.name] } , { include_blank: "-- Select branch" }, { class: "span3" })
+        = f.select(:name, @project.open_branches.map { |br| [br.name, br.name] } , {include_blank: "Select branch"}, {class: "chosen span3"})
       &nbsp;
       = f.submit 'Protect', class: "primary btn"
 
@@ -46,6 +46,3 @@
           %td
             - if can? current_user, :admin_project, @project
               = link_to 'Unprotect', [@project, branch], confirm: 'Are you sure?', method: :delete, class: "danger btn small"
-
-:javascript
-  $('select#protected_branch_name').chosen();
index d51602d..94603f0 100644 (file)
@@ -1,7 +1,7 @@
 %ul.nav.nav-tabs
   %li
     = form_tag switch_project_refs_path(@project), method: :get, class: "project-refs-form", remote: true do
-      = select_tag "ref", grouped_options_refs, onchange: "$(this.form).trigger('submit');", class: "project-refs-select"
+      = select_tag "ref", grouped_options_refs, onchange: "$(this.form).trigger('submit');", class: "project-refs-select chosen"
       = hidden_field_tag :destination, "tree"
       = hidden_field_tag :path, params[:path]
   %li{class: "#{'active' if (controller.controller_name == "refs") }"}
index 297a3b5..83e7328 100644 (file)
 
 :javascript
   $(function(){
-    $('.project-refs-select').chosen();
-
     history.pushState({ path: this.path }, '', "#{@history_path}");
-
   });
 
   // Load last commit log for each file in tree
index 34478d4..eb66f59 100644 (file)
@@ -38,8 +38,3 @@
               = preserve do
                 %pre
                   = Gitlab::Encode.utf8 lines.join("\n")
-
-:javascript
-  $(function(){
-    $('.project-refs-select').chosen();
-  });
index b8d8c09..e61e61a 100644 (file)
@@ -16,7 +16,7 @@
       .input= f.text_field :file_name, placeholder: "example.rb"
     .clearfix
       = f.label "Lifetime"
-      .input= f.select :expires_at, lifetime_select_options, {}, style: "width:200px;"
+      .input= f.select :expires_at, lifetime_select_options, {}, {class: 'chosen span2'}
     .clearfix
       = f.label :content, "Code"
       .input= f.text_area :content, class: "span8"
     = link_to "Cancel", project_snippets_path(@project), class: " btn"
     - unless @snippet.new_record?
       .right= link_to 'Destroy', [@project, @snippet], confirm: 'Are you sure?', method: :delete, class: "btn right danger delete-snippet", id: "destroy_snippet_#{@snippet.id}"
-
-
-
-:javascript
-  $(function(){
-    $('select#snippet_expires_at').chosen();
-  });
-
index 192f273..3736bfe 100644 (file)
 
   %h6 1. Choose people you want in the team
   .clearfix
-    = f.label :user_ids, "Peolpe"
-    .input= select_tag(:user_ids, options_from_collection_for_select(User.not_in_project(@project).all, :id, :name), { class: "xxlarge", multiple: true  })
-
+    = f.label :user_ids, "People"
+    .input= select_tag(:user_ids, options_from_collection_for_select(User.not_in_project(@project).all, :id, :name), {data: {placeholder: "Select users"}, class: "chosen xxlarge", multiple: true})
 
   %h6 2. Set access level for them
   .clearfix
     = f.label :project_access, "Project Access"
-    .input= select_tag :project_access, options_for_select(Project.access_options, @team_member.project_access), class: "project-access-select"
-
+    .input= select_tag :project_access, options_for_select(Project.access_options, @team_member.project_access), class: "project-access-select chosen"
 
   .actions
     = f.submit 'Save', class: "btn save-btn"
     = link_to "Cancel", team_project_path(@project), class: "btn cancel-btn"
-
-
-:javascript
-  $('select#user_ids').chosen();
-  $('select#project_access').chosen();
index d9a7249..f68f8eb 100644 (file)
@@ -1,20 +1,26 @@
 - user = member.user
 - allow_admin = can? current_user, :admin_project, @project
 %tr{id: dom_id(member), class: "team_member_row user_#{user.id}"}
-  %td
+  %td.span6
     = link_to project_team_member_path(@project, member), title: user.name, class: "dark" do
       = image_tag gravatar_icon(user.email, 40), class: "avatar s32"
     = link_to project_team_member_path(@project, member), title: user.name, class: "dark" do
       %strong= truncate(user.name, lenght: 40)
-    %br
-    %div.cgray= user.email
+      %br
+      %small.cgray= user.email
 
-  %td
+  %td.span5
     .right
+      - if current_user == user
+        %span.btn.disabled This is you!
       - if @project.owner == user
-        %span.btn.disabled.success Project Owner
-      - if user.blocked
+        %span.btn.disabled.success Owner
+      - elsif user.blocked
         %span.btn.disabled.blocked Blocked
+      - elsif allow_admin
+        = link_to project_team_member_path(project_id: @project, id: member.id), confirm: remove_from_team_message(@project, member), method: :delete, class: "very_small btn danger" do
+          %i.icon-minus.icon-white
+
     - if allow_admin
       = form_for(member, as: :team_member, url: project_team_member_path(@project, member)) do |f|
-        = f.select :project_access, options_for_select(UsersProject.access_roles, member.project_access), {}, class: "medium project-access-select"
+        = f.select :project_access, options_for_select(UsersProject.access_roles, member.project_access), {}, class: "medium project-access-select span2"
index c0ba874..054eb2d 100644 (file)
@@ -8,7 +8,7 @@ module Gitlab
       if @project ||= current_user.projects.find_by_id(params[:id]) ||
                       current_user.projects.find_by_code(params[:id])
       else
-        error!({'message' => '404 Not found'}, 404)
+        not_found!
       end
 
       @project
@@ -19,15 +19,40 @@ module Gitlab
     end
 
     def authenticate!
-      error!({'message' => '401 Unauthorized'}, 401) unless current_user
+      unauthorized! unless current_user
     end
 
     def authorize! action, subject
       unless abilities.allowed?(current_user, action, subject)
-        error!({'message' => '403 Forbidden'}, 403)
+        forbidden!
       end
     end
 
+    # error helpers
+
+    def forbidden!
+      render_api_error!('403 Forbidden', 403)
+    end
+
+    def not_found!(resource = nil)
+      message = ["404"]
+      message << resource if resource
+      message << "Not Found"
+      render_api_error!(message.join(' '), 404)
+    end
+
+    def unauthorized!
+      render_api_error!('401 Unauthorized', 401)
+    end
+
+    def not_allowed!
+      render_api_error!('Method Not Allowed', 405)
+    end
+
+    def render_api_error!(message, status)
+      error!({'message' => message}, status)
+    end
+
     private 
 
     def abilities
index 4cfa750..659f065 100644 (file)
@@ -60,7 +60,7 @@ module Gitlab
         if @issue.save
           present @issue, with: Entities::Issue
         else
-          error!({'message' => '404 Not found'}, 404)
+          not_found!
         end
       end
 
@@ -93,7 +93,7 @@ module Gitlab
         if @issue.update_attributes(parameters)
           present @issue, with: Entities::Issue
         else
-          error!({'message' => '404 Not found'}, 404)
+          not_found!
         end
       end
 
@@ -105,7 +105,7 @@ module Gitlab
       # Example Request:
       #   DELETE /projects/:id/issues/:issue_id
       delete ":id/issues/:issue_id" do
-        error!({'message' => 'method not allowed'}, 405)
+        not_allowed!
       end
     end
   end
index 7c68466..4b0424b 100644 (file)
@@ -45,7 +45,7 @@ module Gitlab
         if @milestone.save
           present @milestone, with: Entities::Milestone
         else
-          error!({'message' => '404 Not found'}, 404)
+          not_found!
         end
       end
 
@@ -74,7 +74,7 @@ module Gitlab
         if @milestone.update_attributes(parameters)
           present @milestone, with: Entities::Milestone
         else
-          error!({'message' => '404 Not found'}, 404)
+          not_found!
         end
       end
     end
index 05b07e8..9d33323 100644 (file)
@@ -50,7 +50,7 @@ module Gitlab
         if @project.saved?
           present @project, with: Entities::Project
         else
-          error!({'message' => '404 Not found'}, 404)
+          not_found!
         end
       end
 
@@ -172,7 +172,7 @@ module Gitlab
         if @snippet.save
           present @snippet, with: Entities::ProjectSnippet
         else
-          error!({'message' => '404 Not found'}, 404)
+          not_found!
         end
       end
 
@@ -201,7 +201,7 @@ module Gitlab
         if @snippet.update_attributes(parameters)
           present @snippet, with: Entities::ProjectSnippet
         else
-          error!({'message' => '404 Not found'}, 404)
+          not_found!
         end
       end
 
@@ -244,10 +244,10 @@ module Gitlab
         ref = params[:sha]
 
         commit = user_project.commit ref
-        error!('404 Commit Not Found', 404) unless commit
+        not_found! "Commit" unless commit
 
         tree = Tree.new commit.tree, user_project, ref, params[:filepath]
-        error!('404 File Not Found', 404) unless tree.try(:tree)
+        not_found! "File" unless tree.try(:tree)
 
         if tree.text?
           encoding = Gitlab::Encode.detect_encoding(tree.data)
index 60eef8e..0d636d2 100644 (file)
@@ -148,7 +148,7 @@ module Gitlab
     # Enable access to all repos for gitolite admin.
     # We use it for accept merge request feature
     def admin_all_repo
-      owner_name = Gitlab.settings.gitolite_admin_key
+      owner_name = Gitlab.config.gitolite_admin_key
 
       # @ALL repos premission for gitolite owner
       repo_name = "@all"
index 439aecc..9388403 100644 (file)
@@ -85,7 +85,7 @@ describe Gitlab::API do
     it "should return a 404 error if not found" do
       get api("/projects/42", user)
       response.status.should == 404
-      json_response['message'].should == '404 Not found'
+      json_response['message'].should == '404 Not Found'
     end
   end