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'); |