Commit ae5faf0fd32160dd46a7e94e230d241de8ec4e38

Authored by Dmitriy Zaporozhets
1 parent 97e97743

Ajax branch/tag switch for tree view

app/assets/javascripts/tree.js
... ... @@ -5,13 +5,16 @@
5 5 var Tree = {
6 6 init:
7 7 function() {
8   - (new Image).src = "/assets/ajax-loader-facebook.gif";
9   -
10   - $('#tree-slider .tree-item-file-name a, .breadcrumb a').live("click", function() {
11   - history.pushState({ path: this.path }, '', this.href)
  8 + $('#tree-slider .tree-item-file-name a, .breadcrumb li > a').live("click", function() {
12 9 $("#tree-content-holder").hide("slide", { direction: "left" }, 150)
13 10 })
14 11  
  12 + $('.project-refs-form').live({
  13 + "ajax:beforeSend": function() {
  14 + $("#tree-content-holder").hide("slide", { direction: "left" }, 150);
  15 + }
  16 + })
  17 +
15 18 $("#tree-slider .tree-item").live('click', function(e){
16 19 if(e.target.nodeName != "A") {
17 20 link = $(this).find(".tree-item-file-name a");
... ... @@ -19,7 +22,7 @@ var Tree = {
19 22 }
20 23 });
21 24  
22   - $('#tree-slider td.tree-item-file-name a, .breadcrumb a').live({
  25 + $('#tree-slider .tree-item-file-name a, .breadcrumb a, .project-refs-form').live({
23 26 "ajax:beforeSend": function() { $('.tree_progress').addClass("loading"); },
24 27 "ajax:complete": function() { $('.tree_progress').removeClass("loading"); }
25 28 });
... ...
app/assets/stylesheets/common.scss
... ... @@ -9,7 +9,7 @@ $active_bg_color:#79C3E0;
9 9 $active_bd_color: #2FA0BB;
10 10 $border_color:#CCC;
11 11 $lite_border_color:#EEE;
12   -$min_app_width:940px;
  12 +$min_app_width:980px;
13 13 $max_app_width:980px;
14 14 $app_padding:20px;
15 15 $bg_color: #FFF;
... ...
app/assets/stylesheets/projects.css.scss
... ... @@ -15,17 +15,6 @@
15 15 .handle:hover {
16 16 cursor:move;
17 17 }
18   -.project-refs-form {
19   - span {
20   - background:none !important;
21   - position:static !important;
22   - width:auto !important;
23   - height:auto !important;
24   - }
25   -}
26   -.project-refs-select {
27   - width:200px;
28   -}
29 18  
30 19 /* Project Dashboard Page */
31 20 .news-feed h2 {
... ... @@ -151,3 +140,54 @@ a.project-update.titled {
151 140 height: 70%;
152 141 overflow: hidden;
153 142 }
  143 +
  144 +
  145 +/** Branch/tag selector **/
  146 +.project-refs-form {
  147 + margin:0;
  148 + span {
  149 + background:none !important;
  150 + position:static !important;
  151 + width:auto !important;
  152 + height:auto !important;
  153 + }
  154 +}
  155 +.project-refs-select {
  156 + width:120px;
  157 +}
  158 +
  159 +.project-refs-form .chzn-container {
  160 + position:relative;
  161 + top: -5px;
  162 + left: -11px;
  163 +
  164 + .chzn-drop {
  165 + margin:7px 0;
  166 + border: 1px solid #CCC;
  167 + min-width: 300px;
  168 +
  169 + .chzn-results {
  170 + max-height:300px;
  171 + }
  172 +
  173 + .chzn-search input {
  174 + min-width:200px;
  175 + }
  176 + }
  177 +
  178 + .chzn-single {
  179 + background:#ddd;
  180 + //border:none;
  181 + //box-shadow:none;
  182 +
  183 + div {
  184 + background:transparent;
  185 + border-left:none;
  186 + }
  187 +
  188 + span {
  189 + font-weight: normal;
  190 + }
  191 + }
  192 +}
  193 +
... ...
app/assets/stylesheets/top_panel.scss
... ... @@ -105,35 +105,6 @@ body header {
105 105 }
106 106  
107 107  
108   -.top_panel_holder .chzn-container {
109   - position:relative;
110   -
111   - .chzn-drop {
112   - margin:7px 0;
113   - border: 1px solid #CCC;
114   - min-width: 300px;
115   -
116   - .chzn-results {
117   - max-height:300px;
118   - }
119   - }
120   -
121   - .chzn-single {
122   - background:transparent;
123   - -moz-border-radius: 4px;
124   - border-radius: 4px;
125   -
126   - div {
127   - background:transparent;
128   - border-left:none;
129   - }
130   -
131   - span {
132   - font-weight: normal;
133   - }
134   - }
135   -}
136   -
137 108 .rss-icon {
138 109 margin:0 15px;
139 110 padding:3px;
... ...
app/assets/stylesheets/tree.scss
... ... @@ -8,13 +8,10 @@
8 8 }
9 9  
10 10 .tree_progress {
11   - float:left;
12   - width:16px;
13   - height:16px;
14   - margin:2px 6px;
  11 + display:none;
  12 + margin:20px;
15 13 &.loading {
16   - background-position: 0px 0px;
17   - background: url("ajax-loader-facebook.gif") no-repeat;
  14 + display:block;
18 15 }
19 16 }
20 17  
... ...
app/controllers/refs_controller.rb
... ... @@ -13,13 +13,22 @@ class RefsController < ApplicationController
13 13 layout "project"
14 14  
15 15 def switch
16   - new_path = if params[:destination] == "tree"
17   - tree_project_ref_path(@project, params[:ref])
18   - else
19   - project_commits_path(@project, :ref => params[:ref])
20   - end
  16 + respond_to do |format|
  17 + format.html do
  18 + new_path = if params[:destination] == "tree"
  19 + tree_project_ref_path(@project, params[:ref])
  20 + else
  21 + project_commits_path(@project, :ref => params[:ref])
  22 + end
21 23  
22   - redirect_to new_path
  24 + redirect_to new_path
  25 + end
  26 + format.js do
  27 + @ref = params[:ref]
  28 + define_tree_vars
  29 + render "tree"
  30 + end
  31 + end
23 32 end
24 33  
25 34 #
... ...
app/views/layouts/_head_panel.html.haml
... ... @@ -11,7 +11,7 @@
11 11 = truncate @project.name, :length => 28
12 12 .git_url_wrapper
13 13 %input.git-url.text{:id => "", :name => "", :readonly => "", :type => "text", :value => @project.url_to_repo, :class => "one_click_select"}
14   - - if @project.repo_exists?
  14 + -#- if @project.repo_exists?
15 15 .left{:style => "margin-left:5px;"}
16 16 = render :partial => "projects/refs", :locals => { :destination => controller.controller_name == "commits" ? "commits" : "tree" }
17 17 = yield :rss_icon
... ...
app/views/layouts/_project_side.html.haml
... ... @@ -6,8 +6,8 @@
6 6  
7 7 - if @project.repo_exists?
8 8 = link_to "Repository", project_repository_path(@project), :class => repository_tab_class
9   - = link_to "Tree", tree_project_ref_path(@project, @ref || @project.root_ref), :class => tree_tab_class
10   - = link_to "Commits", project_commits_path(@project, :ref => (@ref || @project.root_ref)), :class => (controller.controller_name == "commits") ? "current" : nil
  9 + = link_to "Tree", tree_project_ref_path(@project), :class => tree_tab_class
  10 + = link_to "Commits", project_commits_path(@project), :class => (controller.controller_name == "commits") ? "current" : nil
11 11 = link_to "Network", graph_project_path(@project), :class => current_page?(:controller => "projects", :action => "graph", :id => @project) ? "current" : nil
12 12 = link_to project_issues_filter_path(@project), :class => (controller.controller_name == "issues") ? "current" : nil do
13 13 Issues
... ...
app/views/layouts/_project_side_right.html.haml
... ... @@ -6,38 +6,41 @@
6 6 = yield :sidebar_top_block
7 7 - else
8 8 - if can? current_user, :write_project, @project
9   - %h4 Report
10   - %ul
11   - %li
12   - = link_to new_project_issue_path(@project), :title => "New Issue", :class => "" do
  9 + .alert-message.block-message.info
  10 + You have access to create new issue or merge request.
  11 + %div
  12 + = link_to new_project_issue_path(@project), :title => "New Issue", :class => "btn small" do
13 13 New Issue »
14   - %li
15   - = link_to new_project_merge_request_path(@project), :title => "New Merge Request", :class => "" do
  14 + %div
  15 + = link_to new_project_merge_request_path(@project), :title => "New Merge Request", :class => "btn small" do
16 16 New Merge Request »
17 17  
18   - %h4
19   - Recent Projects:
20   - %ul
21   - - current_user.projects.order("id DESC").limit(5).each do |project|
22   - %li
23   - = link_to project_path(project) do
24   - = project.name
  18 + - if current_user.projects.count > 0
  19 + %div.entry
  20 + %h5
  21 + Recent Projects:
  22 + %ul
  23 + - current_user.projects.order("id DESC").limit(5).each do |project|
  24 + %li
  25 + = link_to project_path(project) do
  26 + = project.name
  27 + = link_to "More » ", projects_path
25 28  
26   - %h4
27   - Recent Issues:
28   - %ul
29   - - current_user.assigned_issues.order("id DESC").limit(5).each do |issue|
30   - %li
31   - = link_to project_issue_path(issue.project, issue) do
32   - = truncate issue.title
  29 + -#%h4
  30 + -#Recent Issues:
  31 + -#%ul
  32 + -#- current_user.assigned_issues.order("id DESC").limit(5).each do |issue|
  33 + -#%li
  34 + -#= link_to project_issue_path(issue.project, issue) do
  35 + -#= truncate issue.title
33 36  
34 37  
35   - %h4
36   - Recent Requests:
37   - %ul
38   - - current_user.assigned_merge_requests.order("id DESC").limit(5).each do |issue|
39   - %li
40   - = link_to project_merge_request_path(issue.project, issue) do
41   - = truncate issue.title
  38 + -#%h4
  39 + -#Recent Requests:
  40 + -#%ul
  41 + -#- current_user.assigned_merge_requests.order("id DESC").limit(5).each do |issue|
  42 + -#%li
  43 + -#= link_to project_merge_request_path(issue.project, issue) do
  44 + -#= truncate issue.title
42 45  
43 46  
... ...
app/views/layouts/_projects_side.html.haml
... ... @@ -7,29 +7,32 @@
7 7 = link_to new_project_path, :class => "btn small" do
8 8 New Project
9 9  
10   - %h4
11   - Recent Projects:
12   - %ul
13   - - current_user.projects.order("id DESC").limit(5).each do |project|
14   - %li
15   - = link_to project_path(project) do
16   - = project.name
  10 + - if current_user.projects.count > 0
  11 + %div.entry
  12 + %h5
  13 + Recent Projects:
  14 + %ul
  15 + - current_user.projects.order("id DESC").limit(5).each do |project|
  16 + %li
  17 + = link_to project_path(project) do
  18 + = project.name
  19 + = link_to "More » ", projects_path
17 20  
18   - %h4
19   - Recent Issues:
20   - %ul
21   - - current_user.assigned_issues.order("id DESC").limit(5).each do |issue|
22   - %li
23   - = link_to project_issue_path(issue.project, issue) do
24   - = truncate issue.title
  21 + -#%h5
  22 + -#Your Issues:
  23 + -#%ul
  24 + -#- current_user.assigned_issues.order("id DESC").limit(5).each do |issue|
  25 + -#%li
  26 + -#= link_to project_issue_path(issue.project, issue) do
  27 + -#= truncate issue.title
25 28  
26 29  
27   - %h4
28   - Recent Requests:
29   - %ul
30   - - current_user.assigned_merge_requests.order("id DESC").limit(5).each do |issue|
31   - %li
32   - = link_to project_merge_request_path(issue.project, issue) do
33   - = truncate issue.title
  30 + -#%h5
  31 + -#Your Merge Requests:
  32 + -#%ul
  33 + -#- current_user.assigned_merge_requests.order("id DESC").limit(5).each do |issue|
  34 + -#%li
  35 + -#= link_to project_merge_request_path(issue.project, issue) do
  36 + -#= truncate issue.title
34 37  
35 38  
... ...
app/views/refs/_tree.html.haml
1 1 %ul.breadcrumb
2 2 %li
  3 + = form_tag switch_project_refs_path(@project), :method => :get, :class => "project-refs-form left", :remote => true do
  4 + = select_tag "ref", grouped_options_refs, :onchange => "$(this.form).trigger('submit');", :class => "project-refs-select"
  5 + = hidden_field_tag :destination, "tree"
  6 + = hidden_field_tag :path, params[:path]
  7 +
  8 + %li
3 9 = link_to tree_project_ref_path(@project, @ref, :path => nil), :remote => true do
4 10 = @project.code
5 11 - tree.breadcrumbs(6) do |link|
6 12 \/
7 13 %li= link
8   - %span.tree_progress
9 14 .clear
  15 +%div.tree_progress
  16 + = image_tag "ajax-loader.gif"
10 17 #tree-content-holder
11 18 - if tree.is_blob?
12 19 = render :partial => "refs/tree_file", :locals => { :name => tree.name, :content => tree.data, :file => tree }
... ... @@ -42,12 +49,20 @@
42 49 - else
43 50 = simple_format(content.data)
44 51  
  52 +- if params[:path]
  53 + - history_path = tree_file_project_ref_path(@project, @ref, params[:path])
  54 +- else
  55 + - history_path = tree_project_ref_path(@project, @ref)
45 56 :javascript
46 57 $(function(){
47 58 $('select#branch').selectmenu({style:'popup', width:200});
48 59 $('select#tag').selectmenu({style:'popup', width:200});
  60 + $('.project-refs-select').chosen();
  61 +
  62 + history.pushState({ path: this.path }, '', "#{history_path}")
49 63 });
50 64  
  65 +
51 66 - if params[:path] && request.xhr?
52 67 :javascript
53 68 $(window).unbind('popstate');
... ...