body.project-page .project-sidebar aside a:hover{background-color: #eee;}
body.project-page .project-sidebar aside a span.number{float: right; border-radius: 5px; text-shadow: none; background: rgba(0,0,0,.12); text-align: center; padding: 5px 8px; position: absolute; top: 10px; right: 10px}
body.project-page .project-sidebar aside a.current{background-color: #79c3e0; color: white; text-shadow: none; border-color: transparent}
-body.project-page .project-content{ padding: 20px; display: block; margin-left: 250px; min-height: 400px}
+body.project-page .project-content{ padding: 20px; display: block; margin-left: 250px; min-height: 450px}
body.project-page .project-content h2{ margin-top: 6px}
body.project-page .project-content .button.right{margin-left: 20px}
body.project-page table .commit a{color: #{$blue_link}}
end
end
- #
- # Repository preview
- #
-
- def tree
- @repo = project.repo
-
- @commit = if params[:commit_id]
- @repo.commits(params[:commit_id]).first
- else
- @repo.commits(@ref).first
- end
-
- @tree = @commit.tree
- @tree = @tree / params[:path] if params[:path]
-
- respond_to do |format|
- format.html # show.html.erb
- format.js do
- # diasbale cache to allow back button works
- response.headers["Cache-Control"] = "no-cache, no-store, max-age=0, must-revalidate"
- response.headers["Pragma"] = "no-cache"
- response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT"
- end
- end
- rescue
- return render_404
- end
-
def graph
@repo = project.repo
commits = Grit::Commit.find_all(@repo, nil, {:max_count => 650})
end.to_json
end
- def blob
- @repo = project.repo
- @commit = project.commit(params[:commit_id])
- @tree = project.tree(@commit, params[:path])
-
- if @tree.is_a?(Grit::Blob)
- send_data(@tree.data, :type => @tree.mime_type, :disposition => 'inline', :filename => @tree.name)
- else
- head(404)
- end
- rescue
- return render_404
- end
-
def destroy
project.destroy
--- /dev/null
+class RefsController < ApplicationController
+ before_filter :project
+ before_filter :ref
+ layout "project"
+
+ # Authorize
+ before_filter :add_project_abilities
+ before_filter :authorize_read_project!
+ before_filter :require_non_empty_project
+
+ #
+ # Repository preview
+ #
+ def tree
+ @repo = project.repo
+
+ @commit = @repo.commits(@ref).first
+ @tree = @commit.tree
+ @tree = @tree / params[:path] if params[:path]
+
+ respond_to do |format|
+ format.html # show.html.erb
+ format.js do
+ # diasbale cache to allow back button works
+ response.headers["Cache-Control"] = "no-cache, no-store, max-age=0, must-revalidate"
+ response.headers["Pragma"] = "no-cache"
+ response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT"
+ end
+ end
+ rescue
+ return render_404
+ end
+
+ def blob
+ @repo = project.repo
+ @commit = project.commit(@ref)
+ @tree = project.tree(@commit, params[:path])
+
+ if @tree.is_a?(Grit::Blob)
+ send_data(@tree.data, :type => @tree.mime_type, :disposition => 'inline', :filename => @tree.name)
+ else
+ head(404)
+ end
+ rescue
+ return render_404
+ end
+
+ protected
+
+ def ref
+ @ref = params[:id]
+ end
+end
project_nav = [
{ :label => "#{@project.code} / Issues", :url => project_issues_path(@project) },
{ :label => "#{@project.code} / Wall", :url => wall_project_path(@project) },
- { :label => "#{@project.code} / Tree", :url => tree_project_path(@project) },
+ { :label => "#{@project.code} / Tree", :url => tree_project_ref_path(@project, @project.root_ref) },
{ :label => "#{@project.code} / Commits", :url => project_commits_path(@project) },
{ :label => "#{@project.code} / Team", :url => team_project_path(@project) }
]
@admins ||=users_projects.includes(:user).where(:admin => true).map(&:user)
end
+ def root_ref
+ "master"
+ end
+
def public?
!private_flag
end
%data.commit-button
= truncate(commit.id.to_s, :length => 16)
%i
- %data.commit-browse{ :onclick => "location.href='#{tree_project_path(@project, :commit_id => commit.id)}';return false;"}
+ %data.commit-browse{ :onclick => "location.href='#{tree_project_ref_path(@project, commit.id)}';return false;"}
Browse Code
- if commit.author_email
= image_tag gravatar_icon(commit.author_email), :class => "left", :width => 40, :style => "padding-right:5px;"
- if diff.deleted_file
%strong{:id => "#{diff.b_path}"}= diff.a_path
- else
- = link_to tree_file_project_path(@project, @commit.id, diff.b_path) do
+ = link_to tree_file_project_ref_path(@project, @commit.id, diff.b_path) do
%strong{:id => "#{diff.b_path}"}= diff.b_path
%br/
.diff_file_content
= preserve @commit.safe_message
%tr
%td Tree
- %td= link_to 'Browse Code', tree_project_path(@project, :commit_id => @commit.id)
+ %td= link_to 'Browse Code', tree_project_ref_path(@project, @commit.id)
.clear
%br
GitLab #{" - #{@project.name}" if @project && !@project.new_record?}
= stylesheet_link_tag "application"
= javascript_include_tag "application"
- - if current_page?(tree_project_path(@project)) || current_page?(project_commits_path(@project))
+ - if current_page?(tree_project_ref_path(@project, @project.root_ref)) || current_page?(project_commits_path(@project))
= auto_discovery_link_tag(:atom, project_commits_url(@project, :atom, :ref => @ref, :private_token => current_user.private_token), :title => "Recent commits to #{@project.name}:#{@ref}")
- if request.path == project_issues_path(@project)
= auto_discovery_link_tag(:atom, project_issues_url(@project, :atom, :private_token => current_user.private_token), :title => "#{@project.name} issues")
%input.git-url.text{:id => "", :name => "", :readonly => "", :type => "text", :value => @project.url_to_repo, :class => "one_click_select"}
%aside
= link_to "Activities", project_path(@project), :class => current_page?(:controller => "projects", :action => "show", :id => @project) ? "current" : nil
- = link_to "Tree", tree_project_path(@project), :class => current_page?(:controller => "projects", :action => "tree", :id => @project) ? "current" : nil
+ = link_to "Tree", tree_project_ref_path(@project, @project.root_ref), :class => current_page?(:controller => "refs", :action => "tree", :project_id => @project, :id => @ref || @project.root_ref ) ? "current" : nil
= link_to "Commits", project_commits_path(@project), :class => current_page?(:controller => "commits", :action => "index", :project_id => @project) ? "current" : nil
= link_to "Network graph", graph_project_path(@project), :class => current_page?(:controller => "projects", :action => "graph", :id => @project) ? "current" : nil
= link_to team_project_path(@project), :class => (current_page?(:controller => "projects", :action => "team", :id => @project) || controller.controller_name == "team_members") ? "current" : nil do
+++ /dev/null
-<div>
- <div id="tree-holder">
- <%= render :partial => "tree", :locals => {:repo => @repo, :commit => @commit, :tree => @tree} %>
- </div>
-</div>
%h2.icon
%span
%d
- = link_to tree_project_path(@project, :path => nil, :commit_id => @commit.try(:id)), :remote => true do
+ = link_to tree_project_ref_path(@project, @ref, :path => nil), :remote => true do
= @project.name
- if params[:path]
- part_path = ""
- if part_path.empty?
- part_path = part
\/
- = link_to truncate(part, :length => 40), tree_file_project_path(@project, :path => part_path, :commit_id => @commit.try(:id), :branch => @branch, :tag => @tag), :remote => :true
+ = link_to truncate(part, :length => 40), tree_file_project_ref_path(@project, @ref, :path => part_path), :remote => :true
- .right= render :partial => "projects/refs", :locals => { :destination => tree_project_path(@project) }
+ .right= render :partial => "projects/refs", :locals => { :destination => tree_project_ref_path(@project, @ref) }
.clear
#tree-content-holder
- if tree.is_a?(Grit::Blob)
- = render :partial => "projects/tree_file", :locals => { :name => tree.name, :content => tree.data, :file => tree }
+ = render :partial => "refs/tree_file", :locals => { :name => tree.name, :content => tree.data, :file => tree }
- else
- contents = tree.contents
%table#tree-slider.round-borders
%th Last Update
%th
Last commit
- = link_to "history", project_commits_path(@project, :path => params[:path], :branch => params[:branch],:tag => params[:tag]), :class => "right"
+ = link_to "history", project_commits_path(@project, :path => params[:path], :ref => @ref), :class => "right"
- if params[:path]
- file = File.join(params[:path], "..")
- %tr{ :class => "tree-item", :url => tree_file_project_path(@project, @commit.id, file) }
+ %tr{ :class => "tree-item", :url => tree_file_project_ref_path(@project, @ref, file) }
%td.tree-item-file-name
= image_tag "dir.png"
- = link_to "..", tree_file_project_path(@project, @commit.id, file, :branch => @branch, :tag => @tag), :remote => :true
+ = link_to "..", tree_file_project_ref_path(@project, @ref, file), :remote => :true
%td
%td
- contents.select{ |i| i.is_a?(Grit::Tree)}.each do |content|
- = render :partial => "projects/tree_item", :locals => { :content => content }
+ = render :partial => "refs/tree_item", :locals => { :content => content }
- contents.select{ |i| i.is_a?(Grit::Blob)}.each do |content|
- = render :partial => "projects/tree_item", :locals => { :content => content }
+ = render :partial => "refs/tree_item", :locals => { :content => content }
:javascript
$(function(){
.view_file_header
%strong
= name
- = link_to "raw", blob_project_path(@project, :commit_id => @commit.id, :path => params[:path] ), :class => "right", :target => "_blank"
- = link_to "history", project_commits_path(@project, :path => params[:path], :branch => params[:branch], :tag => params[:tag] ), :class => "right", :style => "margin-right:10px;"
+ = link_to "raw", blob_project_ref_path(@project, @ref, :path => params[:path] ), :class => "right", :target => "_blank"
+ = link_to "history", project_commits_path(@project, :path => params[:path], :ref => @ref ), :class => "right", :style => "margin-right:10px;"
%br/
- if file.text?
.view_file_content
- file = params[:path] ? File.join(params[:path], content.name) : content.name
- content_commit = @project.repo.log(@commit.id, file, :max_count => 1).last
- return unless content_commit
-%tr{ :class => "tree-item", :url => tree_file_project_path(@project, @commit.id, file) }
+%tr{ :class => "tree-item", :url => tree_file_project_ref_path(@project, @ref, file) }
%td.tree-item-file-name
- if content.is_a?(Grit::Blob)
= image_tag "txt.png"
- else
= image_tag "dir.png"
- = link_to truncate(content.name, :length => 40), tree_file_project_path(@project, @commit.id, file, :branch => @branch, :tag => @tag), :remote => :true
+ = link_to truncate(content.name, :length => 40), tree_file_project_ref_path(@project, @ref || @commit.id, file), :remote => :true
%td
= time_ago_in_words(content_commit.committed_date)
ago
--- /dev/null
+#tree-holder= render :partial => "tree", :locals => {:repo => @repo, :commit => @commit, :tree => @tree}
--- /dev/null
+:plain
+ $("#tree-holder table").hide("slide", { direction: "left" }, 150, function(){
+ $("#tree-holder").html("#{escape_javascript(render(:partial => "tree", :locals => {:repo => @repo, :commit => @commit, :tree => @tree}))}");
+ $("#tree-holder table").show("slide", { direction: "right" }, 150);
+ });
resources :projects, :except => [:new, :create, :index], :path => "/" do
member do
- get "tree"
- get "blob"
get "team"
get "wall"
get "graph"
+ end
- # tree viewer
- get "tree/:commit_id" => "projects#tree"
- get "tree/:commit_id/:path" => "projects#tree",
- :as => :tree_file,
- :constraints => {
- :id => /[a-zA-Z0-9_\-]+/,
- :commit_id => /[a-zA-Z0-9]+/,
- :path => /.*/
- }
+ resources :refs, :only => [], :path => "/" do
+ member do
+ get "tree"
+ get "blob"
+ # tree viewer
+ get "tree/:path" => "refs#tree",
+ :as => :tree_file,
+ :constraints => {
+ :id => /[a-zA-Z0-9_\-]+/,
+ :path => /.*/
+ }
+ end
end
resources :snippets