Commit ae5faf0fd32160dd46a7e94e230d241de8ec4e38
1 parent
97e97743
Exists in
master
and in
4 other branches
Ajax branch/tag switch for tree view
Showing
11 changed files
with
151 additions
and
110 deletions
Show diff stats
app/assets/javascripts/tree.js
@@ -5,13 +5,16 @@ | @@ -5,13 +5,16 @@ | ||
5 | var Tree = { | 5 | var Tree = { |
6 | init: | 6 | init: |
7 | function() { | 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 | $("#tree-content-holder").hide("slide", { direction: "left" }, 150) | 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 | $("#tree-slider .tree-item").live('click', function(e){ | 18 | $("#tree-slider .tree-item").live('click', function(e){ |
16 | if(e.target.nodeName != "A") { | 19 | if(e.target.nodeName != "A") { |
17 | link = $(this).find(".tree-item-file-name a"); | 20 | link = $(this).find(".tree-item-file-name a"); |
@@ -19,7 +22,7 @@ var Tree = { | @@ -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 | "ajax:beforeSend": function() { $('.tree_progress').addClass("loading"); }, | 26 | "ajax:beforeSend": function() { $('.tree_progress').addClass("loading"); }, |
24 | "ajax:complete": function() { $('.tree_progress').removeClass("loading"); } | 27 | "ajax:complete": function() { $('.tree_progress').removeClass("loading"); } |
25 | }); | 28 | }); |
app/assets/stylesheets/common.scss
@@ -9,7 +9,7 @@ $active_bg_color:#79C3E0; | @@ -9,7 +9,7 @@ $active_bg_color:#79C3E0; | ||
9 | $active_bd_color: #2FA0BB; | 9 | $active_bd_color: #2FA0BB; |
10 | $border_color:#CCC; | 10 | $border_color:#CCC; |
11 | $lite_border_color:#EEE; | 11 | $lite_border_color:#EEE; |
12 | -$min_app_width:940px; | 12 | +$min_app_width:980px; |
13 | $max_app_width:980px; | 13 | $max_app_width:980px; |
14 | $app_padding:20px; | 14 | $app_padding:20px; |
15 | $bg_color: #FFF; | 15 | $bg_color: #FFF; |
app/assets/stylesheets/projects.css.scss
@@ -15,17 +15,6 @@ | @@ -15,17 +15,6 @@ | ||
15 | .handle:hover { | 15 | .handle:hover { |
16 | cursor:move; | 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 | /* Project Dashboard Page */ | 19 | /* Project Dashboard Page */ |
31 | .news-feed h2 { | 20 | .news-feed h2 { |
@@ -151,3 +140,54 @@ a.project-update.titled { | @@ -151,3 +140,54 @@ a.project-update.titled { | ||
151 | height: 70%; | 140 | height: 70%; |
152 | overflow: hidden; | 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,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 | .rss-icon { | 108 | .rss-icon { |
138 | margin:0 15px; | 109 | margin:0 15px; |
139 | padding:3px; | 110 | padding:3px; |
app/assets/stylesheets/tree.scss
@@ -8,13 +8,10 @@ | @@ -8,13 +8,10 @@ | ||
8 | } | 8 | } |
9 | 9 | ||
10 | .tree_progress { | 10 | .tree_progress { |
11 | - float:left; | ||
12 | - width:16px; | ||
13 | - height:16px; | ||
14 | - margin:2px 6px; | 11 | + display:none; |
12 | + margin:20px; | ||
15 | &.loading { | 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 +13,22 @@ class RefsController < ApplicationController | ||
13 | layout "project" | 13 | layout "project" |
14 | 14 | ||
15 | def switch | 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 | end | 32 | end |
24 | 33 | ||
25 | # | 34 | # |
app/views/layouts/_head_panel.html.haml
@@ -11,7 +11,7 @@ | @@ -11,7 +11,7 @@ | ||
11 | = truncate @project.name, :length => 28 | 11 | = truncate @project.name, :length => 28 |
12 | .git_url_wrapper | 12 | .git_url_wrapper |
13 | %input.git-url.text{:id => "", :name => "", :readonly => "", :type => "text", :value => @project.url_to_repo, :class => "one_click_select"} | 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 | .left{:style => "margin-left:5px;"} | 15 | .left{:style => "margin-left:5px;"} |
16 | = render :partial => "projects/refs", :locals => { :destination => controller.controller_name == "commits" ? "commits" : "tree" } | 16 | = render :partial => "projects/refs", :locals => { :destination => controller.controller_name == "commits" ? "commits" : "tree" } |
17 | = yield :rss_icon | 17 | = yield :rss_icon |
app/views/layouts/_project_side.html.haml
@@ -6,8 +6,8 @@ | @@ -6,8 +6,8 @@ | ||
6 | 6 | ||
7 | - if @project.repo_exists? | 7 | - if @project.repo_exists? |
8 | = link_to "Repository", project_repository_path(@project), :class => repository_tab_class | 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 | = link_to "Network", graph_project_path(@project), :class => current_page?(:controller => "projects", :action => "graph", :id => @project) ? "current" : nil | 11 | = link_to "Network", graph_project_path(@project), :class => current_page?(:controller => "projects", :action => "graph", :id => @project) ? "current" : nil |
12 | = link_to project_issues_filter_path(@project), :class => (controller.controller_name == "issues") ? "current" : nil do | 12 | = link_to project_issues_filter_path(@project), :class => (controller.controller_name == "issues") ? "current" : nil do |
13 | Issues | 13 | Issues |
app/views/layouts/_project_side_right.html.haml
@@ -6,38 +6,41 @@ | @@ -6,38 +6,41 @@ | ||
6 | = yield :sidebar_top_block | 6 | = yield :sidebar_top_block |
7 | - else | 7 | - else |
8 | - if can? current_user, :write_project, @project | 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 | New Issue » | 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 | New Merge Request » | 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,29 +7,32 @@ | ||
7 | = link_to new_project_path, :class => "btn small" do | 7 | = link_to new_project_path, :class => "btn small" do |
8 | New Project | 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 | %ul.breadcrumb | 1 | %ul.breadcrumb |
2 | %li | 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 | = link_to tree_project_ref_path(@project, @ref, :path => nil), :remote => true do | 9 | = link_to tree_project_ref_path(@project, @ref, :path => nil), :remote => true do |
4 | = @project.code | 10 | = @project.code |
5 | - tree.breadcrumbs(6) do |link| | 11 | - tree.breadcrumbs(6) do |link| |
6 | \/ | 12 | \/ |
7 | %li= link | 13 | %li= link |
8 | - %span.tree_progress | ||
9 | .clear | 14 | .clear |
15 | +%div.tree_progress | ||
16 | + = image_tag "ajax-loader.gif" | ||
10 | #tree-content-holder | 17 | #tree-content-holder |
11 | - if tree.is_blob? | 18 | - if tree.is_blob? |
12 | = render :partial => "refs/tree_file", :locals => { :name => tree.name, :content => tree.data, :file => tree } | 19 | = render :partial => "refs/tree_file", :locals => { :name => tree.name, :content => tree.data, :file => tree } |
@@ -42,12 +49,20 @@ | @@ -42,12 +49,20 @@ | ||
42 | - else | 49 | - else |
43 | = simple_format(content.data) | 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 | :javascript | 56 | :javascript |
46 | $(function(){ | 57 | $(function(){ |
47 | $('select#branch').selectmenu({style:'popup', width:200}); | 58 | $('select#branch').selectmenu({style:'popup', width:200}); |
48 | $('select#tag').selectmenu({style:'popup', width:200}); | 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 | - if params[:path] && request.xhr? | 66 | - if params[:path] && request.xhr? |
52 | :javascript | 67 | :javascript |
53 | $(window).unbind('popstate'); | 68 | $(window).unbind('popstate'); |