Commit ae47d692 authored by gitlabhq's avatar gitlabhq

Merge branch 'dev'

parents fb40d27d 3fa770dd
...@@ -5,7 +5,7 @@ gem 'rails', '3.1.0' ...@@ -5,7 +5,7 @@ gem 'rails', '3.1.0'
gem 'sqlite3' gem 'sqlite3'
gem 'devise', "1.4.7" gem 'devise', "1.4.7"
gem 'stamp' gem 'stamp'
gem 'will_paginate', '~> 3.0' gem 'kaminari'
gem 'haml-rails' gem 'haml-rails'
gem 'jquery-rails' gem 'jquery-rails'
gem 'grit', :git => 'git://github.com/gitlabhq/grit.git' gem 'grit', :git => 'git://github.com/gitlabhq/grit.git'
...@@ -16,7 +16,6 @@ gem 'faker' ...@@ -16,7 +16,6 @@ gem 'faker'
gem 'seed-fu', :git => 'git://github.com/mbleigh/seed-fu.git' gem 'seed-fu', :git => 'git://github.com/mbleigh/seed-fu.git'
gem "inifile" gem "inifile"
gem "pygments.rb", "0.2.3" gem "pygments.rb", "0.2.3"
gem "kaminari"
gem "thin" gem "thin"
gem "git" gem "git"
gem "acts_as_list" gem "acts_as_list"
...@@ -34,7 +33,7 @@ end ...@@ -34,7 +33,7 @@ end
group :development, :test do group :development, :test do
gem 'rspec-rails' gem 'rspec-rails'
gem 'shoulda' gem "shoulda", "~> 3.0.0.beta2"
gem 'capybara' gem 'capybara'
gem 'autotest' gem 'autotest'
gem 'autotest-rails' gem 'autotest-rails'
......
...@@ -200,7 +200,11 @@ GEM ...@@ -200,7 +200,11 @@ GEM
ffi (>= 1.0.7) ffi (>= 1.0.7)
json_pure json_pure
rubyzip rubyzip
shoulda (2.11.3) shoulda (3.0.0.beta2)
shoulda-context (~> 1.0.0.beta1)
shoulda-matchers (~> 1.0.0.beta1)
shoulda-context (1.0.0.beta1)
shoulda-matchers (1.0.0.beta3)
simplecov (0.5.3) simplecov (0.5.3)
multi_json (~> 1.0.3) multi_json (~> 1.0.3)
simplecov-html (~> 0.5.3) simplecov-html (~> 0.5.3)
...@@ -232,7 +236,6 @@ GEM ...@@ -232,7 +236,6 @@ GEM
multi_json (>= 1.0.2) multi_json (>= 1.0.2)
warden (1.0.5) warden (1.0.5)
rack (>= 1.0) rack (>= 1.0)
will_paginate (3.0.0)
xpath (0.1.4) xpath (0.1.4)
nokogiri (~> 1.3) nokogiri (~> 1.3)
...@@ -265,7 +268,7 @@ DEPENDENCIES ...@@ -265,7 +268,7 @@ DEPENDENCIES
ruby-debug19 ruby-debug19
sass-rails (~> 3.1.0) sass-rails (~> 3.1.0)
seed-fu! seed-fu!
shoulda shoulda (~> 3.0.0.beta2)
simplecov simplecov
six six
sqlite3 sqlite3
...@@ -274,4 +277,3 @@ DEPENDENCIES ...@@ -274,4 +277,3 @@ DEPENDENCIES
thin thin
turn turn
uglifier uglifier
will_paginate (~> 3.0)
...@@ -5,11 +5,14 @@ ...@@ -5,11 +5,14 @@
// the compiled file. // the compiled file.
// //
//= require jquery //= require jquery
//= require jquery-ui
//= require jquery_ujs //= require jquery_ujs
//= require jquery.ui.selectmenu
//= require jquery.cookie
//= require_tree . //= require_tree .
$(function(){ $(function(){
$(".one_click_select").click(function(){ $(".one_click_select").live("click", function(){
$(this).select(); $(this).select();
}); });
......
This diff is collapsed.
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
* This is a manifest file that'll automatically include all the stylesheets available in this directory * This is a manifest file that'll automatically include all the stylesheets available in this directory
* and any sub-directories. You're free to add application-wide styles to this file and they'll appear at * and any sub-directories. You're free to add application-wide styles to this file and they'll appear at
* the top of the compiled file, but it's generally better to create a new file per style scope. * the top of the compiled file, but it's generally better to create a new file per style scope.
*= require jquery-ui/jquery-ui
*= require jquery-ui/jquery.ui.selectmenu
*= require_self *= require_self
*= require_tree . *= require_tree .
*/ */
...@@ -53,7 +53,6 @@ table.highlighttable pre{ ...@@ -53,7 +53,6 @@ table.highlighttable pre{
text-align:left; text-align:left;
} }
.git-empty .highlight { .git-empty .highlight {
@include round-borders-all(4px); @include round-borders-all(4px);
background:#eee; background:#eee;
...@@ -74,7 +73,6 @@ table.highlighttable pre{ ...@@ -74,7 +73,6 @@ table.highlighttable pre{
box-shadow:0 5px 15px #000; box-shadow:0 5px 15px #000;
} }
.hll { background-color: #ffffff } .hll { background-color: #ffffff }
.c { color: #888888; font-style: italic } /* Comment */ .c { color: #888888; font-style: italic } /* Comment */
.err { color: #a61717; background-color: #e3d2d2 } /* Error */ .err { color: #a61717; background-color: #e3d2d2 } /* Error */
......
...@@ -157,7 +157,6 @@ table.round-borders { ...@@ -157,7 +157,6 @@ table.round-borders {
background: transparent 9 !important; background: transparent 9 !important;
} }
#header-panel { #header-panel {
@include panel-color; @include panel-color;
height:40px; height:40px;
...@@ -230,7 +229,6 @@ a { ...@@ -230,7 +229,6 @@ a {
} }
} }
.view_file_content{ .view_file_content{
.old_line, .new_line { .old_line, .new_line {
background:#ECECEC; background:#ECECEC;
...@@ -281,8 +279,6 @@ input.ssh_project_url { ...@@ -281,8 +279,6 @@ input.ssh_project_url {
text-align:center; text-align:center;
} }
.day-commits-table li.commit { .day-commits-table li.commit {
cursor:pointer; cursor:pointer;
...@@ -599,7 +595,6 @@ tbody tr:nth-child(2n) td, tbody tr.even td { ...@@ -599,7 +595,6 @@ tbody tr:nth-child(2n) td, tbody tr.even td {
} }
} }
span{ span{
border: 1px solid #aaa; border: 1px solid #aaa;
color:black; color:black;
...@@ -667,6 +662,10 @@ tbody tr:nth-child(2n) td, tbody tr.even td { ...@@ -667,6 +662,10 @@ tbody tr:nth-child(2n) td, tbody tr.even td {
background: #4466cc; background: #4466cc;
color:white; color:white;
} }
&.normal {
background: #2c5ca6;
color:white;
}
&.notes { &.notes {
background: #2c5c66; background: #2c5c66;
color:white; color:white;
...@@ -681,3 +680,23 @@ tbody tr:nth-child(2n) td, tbody tr.even td { ...@@ -681,3 +680,23 @@ tbody tr:nth-child(2n) td, tbody tr.even td {
} }
} }
} }
.top_panel_issues{
#issue_search_form {
margin:5px 0;
input {
border:1px solid #D3D3D3;
padding: 3px;
height: 28px;
width: 300px;
-webkit-appearance:none;
box-sizing: border-box;
-moz-box-sizing: border-box;
&:focus {
border-color:#c2e1ef;
}
}
}
}
...@@ -4,29 +4,14 @@ class Admin::ProjectsController < ApplicationController ...@@ -4,29 +4,14 @@ class Admin::ProjectsController < ApplicationController
def index def index
@admin_projects = Project.page(params[:page]) @admin_projects = Project.page(params[:page])
respond_to do |format|
format.html # index.html.erb
format.json { render json: @admin_projects }
end
end end
def show def show
@admin_project = Project.find_by_code(params[:id]) @admin_project = Project.find_by_code(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @admin_project }
end
end end
def new def new
@admin_project = Project.new @admin_project = Project.new
respond_to do |format|
format.html # new.html.erb
format.json { render json: @admin_project }
end
end end
def edit def edit
...@@ -37,28 +22,20 @@ class Admin::ProjectsController < ApplicationController ...@@ -37,28 +22,20 @@ class Admin::ProjectsController < ApplicationController
@admin_project = Project.new(params[:project]) @admin_project = Project.new(params[:project])
@admin_project.owner = current_user @admin_project.owner = current_user
respond_to do |format|
if @admin_project.save if @admin_project.save
format.html { redirect_to [:admin, @admin_project], notice: 'Project was successfully created.' } redirect_to [:admin, @admin_project], notice: 'Project was successfully created.'
format.json { render json: @admin_project, status: :created, location: @admin_project }
else else
format.html { render action: "new" } render :action => "new"
format.json { render json: @admin_project.errors, status: :unprocessable_entity }
end
end end
end end
def update def update
@admin_project = Project.find_by_code(params[:id]) @admin_project = Project.find_by_code(params[:id])
respond_to do |format|
if @admin_project.update_attributes(params[:project]) if @admin_project.update_attributes(params[:project])
format.html { redirect_to [:admin, @admin_project], notice: 'Project was successfully updated.' } redirect_to [:admin, @admin_project], notice: 'Project was successfully updated.'
format.json { head :ok }
else else
format.html { render action: "edit" } render :action => "edit"
format.json { render json: @admin_project.errors, status: :unprocessable_entity }
end
end end
end end
...@@ -66,9 +43,6 @@ class Admin::ProjectsController < ApplicationController ...@@ -66,9 +43,6 @@ class Admin::ProjectsController < ApplicationController
@admin_project = Project.find_by_code(params[:id]) @admin_project = Project.find_by_code(params[:id])
@admin_project.destroy @admin_project.destroy
respond_to do |format| redirect_to admin_projects_url
format.html { redirect_to admin_projects_url }
format.json { head :ok }
end
end end
end end
...@@ -4,29 +4,14 @@ class Admin::TeamMembersController < ApplicationController ...@@ -4,29 +4,14 @@ class Admin::TeamMembersController < ApplicationController
def index def index
@admin_team_members = UsersProject.page(params[:page]).per(100).order("project_id DESC") @admin_team_members = UsersProject.page(params[:page]).per(100).order("project_id DESC")
respond_to do |format|
format.html # index.html.erb
format.json { render json: @admin_team_members }
end
end end
def show def show
@admin_team_member = UsersProject.find(params[:id]) @admin_team_member = UsersProject.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @admin_team_member }
end
end end
def new def new
@admin_team_member = UsersProject.new(params[:team_member]) @admin_team_member = UsersProject.new(params[:team_member])
respond_to do |format|
format.html # new.html.erb
format.json { render json: @admin_team_member }
end
end end
def edit def edit
...@@ -37,14 +22,10 @@ class Admin::TeamMembersController < ApplicationController ...@@ -37,14 +22,10 @@ class Admin::TeamMembersController < ApplicationController
@admin_team_member = UsersProject.new(params[:team_member]) @admin_team_member = UsersProject.new(params[:team_member])
@admin_team_member.project_id = params[:team_member][:project_id] @admin_team_member.project_id = params[:team_member][:project_id]
respond_to do |format|
if @admin_team_member.save if @admin_team_member.save
format.html { redirect_to admin_team_member_path(@admin_team_member), notice: 'UsersProject was successfully created.' } redirect_to admin_team_member_path(@admin_team_member), notice: 'UsersProject was successfully created.'
format.json { render json: @admin_team_member, status: :created, location: @team_member }
else else
format.html { render action: "new" } render action: "new"
format.json { render json: @admin_team_member.errors, status: :unprocessable_entity }
end
end end
end end
...@@ -52,14 +33,10 @@ class Admin::TeamMembersController < ApplicationController ...@@ -52,14 +33,10 @@ class Admin::TeamMembersController < ApplicationController
@admin_team_member = UsersProject.find(params[:id]) @admin_team_member = UsersProject.find(params[:id])
@admin_team_member.project_id = params[:team_member][:project_id] @admin_team_member.project_id = params[:team_member][:project_id]
respond_to do |format|
if @admin_team_member.update_attributes(params[:team_member]) if @admin_team_member.update_attributes(params[:team_member])
format.html { redirect_to admin_team_member_path(@admin_team_member), notice: 'UsersProject was successfully updated.' } redirect_to admin_team_member_path(@admin_team_member), notice: 'UsersProject was successfully updated.'
format.json { head :ok }
else else
format.html { render action: "edit" } render action: "edit"
format.json { render json: @admin_team_member.errors, status: :unprocessable_entity }
end
end end
end end
...@@ -67,9 +44,6 @@ class Admin::TeamMembersController < ApplicationController ...@@ -67,9 +44,6 @@ class Admin::TeamMembersController < ApplicationController
@admin_team_member = UsersProject.find(params[:id]) @admin_team_member = UsersProject.find(params[:id])
@admin_team_member.destroy @admin_team_member.destroy
respond_to do |format| redirect_to admin_team_members_url
format.html { redirect_to admin_team_members_url }
format.json { head :ok }
end
end end
end end
...@@ -4,29 +4,14 @@ class Admin::UsersController < ApplicationController ...@@ -4,29 +4,14 @@ class Admin::UsersController < ApplicationController
def index def index
@admin_users = User.page(params[:page]) @admin_users = User.page(params[:page])
respond_to do |format|
format.html # index.html.erb
format.json { render json: @admin_users }
end
end end
def show def show
@admin_user = User.find(params[:id]) @admin_user = User.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @admin_user }
end
end end
def new def new
@admin_user = User.new(:projects_limit => 10) @admin_user = User.new(:projects_limit => 10)
respond_to do |format|
format.html # new.html.erb
format.json { render json: @admin_user }
end
end end
def edit def edit
......
...@@ -34,7 +34,7 @@ class IssuesController < ApplicationController ...@@ -34,7 +34,7 @@ class IssuesController < ApplicationController
end end
def show def show
@notes = @issue.notes @notes = @issue.notes.order("created_at ASC")
@note = @project.notes.new(:noteable => @issue) @note = @project.notes.new(:noteable => @issue)
end end
...@@ -57,7 +57,6 @@ class IssuesController < ApplicationController ...@@ -57,7 +57,6 @@ class IssuesController < ApplicationController
end end
end end
def destroy def destroy
return access_denied! unless can?(current_user, :admin_issue, @issue) return access_denied! unless can?(current_user, :admin_issue, @issue)
...@@ -78,6 +77,22 @@ class IssuesController < ApplicationController ...@@ -78,6 +77,22 @@ class IssuesController < ApplicationController
render :nothing => true render :nothing => true
end end
def search
terms = params['terms']
@project = Project.find(params['project'])
@issues = case params[:status].to_i
when 1 then @project.issues
when 2 then @project.issues.closed
when 3 then @project.issues.opened.assigned(current_user)
else @project.issues.opened
end
@issues = @issues.where("title LIKE ? OR content LIKE ?", "%#{terms}%", "%#{terms}%") unless terms.blank?
render :partial => 'issues'
end
protected protected
def issue def issue
......
...@@ -15,7 +15,6 @@ class NotesController < ApplicationController ...@@ -15,7 +15,6 @@ class NotesController < ApplicationController
notify if params[:notify] == '1' notify if params[:notify] == '1'
end end
respond_to do |format| respond_to do |format|
format.html {redirect_to :back} format.html {redirect_to :back}
format.js format.js
......
...@@ -115,7 +115,7 @@ class ProjectsController < ApplicationController ...@@ -115,7 +115,7 @@ class ProjectsController < ApplicationController
respond_to do |format| respond_to do |format|
format.html # show.html.erb format.html # show.html.erb
format.js do format.js do
# disable cache to allow back button works # diasbale cache to allow back button works
response.headers["Cache-Control"] = "no-cache, no-store, max-age=0, must-revalidate" response.headers["Cache-Control"] = "no-cache, no-store, max-age=0, must-revalidate"
response.headers["Pragma"] = "no-cache" response.headers["Pragma"] = "no-cache"
response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT" response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT"
......
module SnippetsHelper module SnippetsHelper
def lifetime_select_options
options = [
['forever', nil],
['1 day', "#{Date.current + 1.day}"],
['1 week', "#{Date.current + 1.week}"],
['1 month', "#{Date.current + 1.month}"]
]
options_for_select(options)
end
end end
...@@ -14,9 +14,9 @@ class Issue < ActiveRecord::Base ...@@ -14,9 +14,9 @@ class Issue < ActiveRecord::Base
:presence => true, :presence => true,
:length => { :within => 0..255 } :length => { :within => 0..255 }
validates :content, #validates :content,
:presence => true, #:presence => true,
:length => { :within => 0..2000 } #:length => { :within => 0..2000 }
scope :critical, where(:critical => true) scope :critical, where(:critical => true)
scope :non_critical, where(:critical => false) scope :non_critical, where(:critical => false)
......
...@@ -13,7 +13,7 @@ class Note < ActiveRecord::Base ...@@ -13,7 +13,7 @@ class Note < ActiveRecord::Base
validates :note, validates :note,
:presence => true, :presence => true,
:length => { :within => 0..255 } :length => { :within => 0..5000 }
validates :attachment, validates :attachment,
:file_size => { :file_size => {
......
...@@ -22,6 +22,8 @@ class Snippet < ActiveRecord::Base ...@@ -22,6 +22,8 @@ class Snippet < ActiveRecord::Base
:presence => true, :presence => true,
:length => { :within => 0..10000 } :length => { :within => 0..10000 }
scope :fresh, order("created_at DESC")
scope :non_expired, where(["expires_at IS NULL OR expires_at > ?", Time.current])
def self.content_types def self.content_types
[ [
...@@ -34,6 +36,10 @@ class Snippet < ActiveRecord::Base ...@@ -34,6 +36,10 @@ class Snippet < ActiveRecord::Base
def colorize def colorize
system_colorize(content, file_name) system_colorize(content, file_name)
end end
def expired?
expires_at && expires_at < Time.current
end
end end
# == Schema Information # == Schema Information
# #
...@@ -47,5 +53,6 @@ end ...@@ -47,5 +53,6 @@ end
# created_at :datetime # created_at :datetime
# updated_at :datetime # updated_at :datetime
# file_name :string(255) # file_name :string(255)
# expires_at :datetime
# #
...@@ -23,7 +23,6 @@ ...@@ -23,7 +23,6 @@
%div %div
%iframe{ :src=> admin_mailer_preview_note_path(:type => "Wall"), :width=>"100%", :height=>"350"} %iframe{ :src=> admin_mailer_preview_note_path(:type => "Wall"), :width=>"100%", :height=>"350"}
:javascript :javascript
$(function() { $(function() {
$( "#accordion" ).accordion(); }); $( "#accordion" ).accordion(); });
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
%b Since: %b Since:
= @admin_team_member.updated_at = @admin_team_member.updated_at
.span-10 .span-10
.span-6 .span-6
%b Access: %b Access:
......
...@@ -2,5 +2,4 @@ ...@@ -2,5 +2,4 @@
= render 'form' = render 'form'
= link_to 'Back', admin_users_path, :class => "right lbutton" = link_to 'Back', admin_users_path, :class => "right lbutton"
...@@ -24,7 +24,6 @@ ...@@ -24,7 +24,6 @@
%b Twitter: %b Twitter:
= @admin_user.twitter = @admin_user.twitter
.clear .clear
= link_to 'Edit', edit_admin_user_path(@admin_user) = link_to 'Edit', edit_admin_user_path(@admin_user)
\| \|
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
- line_new = 0 - line_new = 0
- lines_arr = diff.diff.lines.to_a - lines_arr = diff.diff.lines.to_a
- lines_arr.each do |line| - lines_arr.each do |line|
- next if line.match(/^--- \/dev\/null/)
- next if line.match(/^--- a/) - next if line.match(/^--- a/)
- next if line.match(/^\+\+\+ b/) - next if line.match(/^\+\+\+ b/)
- if line.match(/^@@ -/) - if line.match(/^@@ -/)
......
...@@ -7,10 +7,10 @@ ...@@ -7,10 +7,10 @@
.span-8 .span-8
= f.label :title = f.label :title
= f.text_field :title, :style => "width:450px" = f.text_area :title, :style => "width:450px; height:100px", :maxlength => 255
.span-8 -#.span-8
= f.label :content -#= f.label :content
= f.text_area :content, :style => "width:450px; height:130px" -#= f.text_area :content, :style => "width:450px; height:130px"
.span-8.append-bottom .span-8.append-bottom
= f.label :assignee_id = f.label :assignee_id
= f.select(:assignee_id, @project.users.all.collect {|p| [ p.name, p.id ] }, { :include_blank => "Select user" }) = f.select(:assignee_id, @project.users.all.collect {|p| [ p.name, p.id ] }, { :include_blank => "Select user" })
......
%tr{ :id => dom_id(issue), :class => "issue #{issue.critical ? "critical" : ""}", :url => project_issue_path(@project, issue) } %tr{ :id => dom_id(issue), :class => "issue #{issue.critical ? "critical" : ""}", :url => project_issue_path(@project, issue) }
- if can?(current_user, :admin_issue, @project) && !params[:f] || params[:f] == "0" - if can?(current_user, :admin_issue, @project) && (!params[:f] || params[:f] == "0")
%td %td
= image_tag "move.png" , :class => [:handle, :left] = image_tag "move.png" , :class => [:handle, :left]
%td %td
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
= truncate issue.assignee.name, :lenght => 20 = truncate issue.assignee.name, :lenght => 20
%td ##{issue.id} %td ##{issue.id}
%td %td
= html_escape issue.title = truncate(html_escape(issue.title), :length => 60)
%br %br
- if issue.critical - if issue.critical
%span.tag.high critical %span.tag.high critical
......
%div %div
.top_panel_issues
- if can? current_user, :write_issue, @project - if can? current_user, :write_issue, @project
.left= link_to 'New Issue', new_project_issue_path(@project), :remote => true, :class => "lbutton vm" %div{:class => "left", :style => "margin-right: 10px;" }
= link_to 'New Issue', new_project_issue_path(@project), :remote => true, :class => "lbutton vm"
= form_tag search_project_issues_path(@project), :method => :get, :remote => true, :class => :left, :id => "issue_search_form" do
= hidden_field_tag :project_id, @project.id, { :id => 'project_id' }
= search_field_tag :issue_search, nil, { :placeholder => 'Search', :class => 'issue_search' }
.right .right
= form_tag project_issues_path(@project), :method => :get do = form_tag project_issues_path(@project), :method => :get do
.span-2 .span-2
= radio_button_tag :f, 0, (params[:f] || "0") == "0", :onclick => "this.form.submit()", :id => "open_issues" = radio_button_tag :f, 0, (params[:f] || "0") == "0", :onclick => "this.form.submit()", :id => "open_issues", :class => "status"
= label_tag "open_issues","Open" = label_tag "open_issues","Open"
.span-2 .span-2
= radio_button_tag :f, 2, params[:f] == "2", :onclick => "this.form.submit()", :id => "closed_issues" = radio_button_tag :f, 2, params[:f] == "2", :onclick => "this.form.submit()", :id => "closed_issues", :class => "status"
= label_tag "closed_issues","Closed" = label_tag "closed_issues","Closed"
.span-2 .span-2
= radio_button_tag :f, 3, params[:f] == "3", :onclick => "this.form.submit()", :id => "my_issues" = radio_button_tag :f, 3, params[:f] == "3", :onclick => "this.form.submit()", :id => "my_issues", :class => "status"
= label_tag "my_issues","To Me" = label_tag "my_issues","To Me"
.span-2 .span-2
= radio_button_tag :f, 1, params[:f] == "1", :onclick => "this.form.submit()", :id => "all_issues" = radio_button_tag :f, 1, params[:f] == "1", :onclick => "this.form.submit()", :id => "all_issues", :class => "status"
= label_tag "all_issues","All" = label_tag "all_issues","All"
#issues-table-holder= render "issues" #issues-table-holder= render "issues"
%br %br
:javascript :javascript
var href = $('.issue_search').parent().attr('action');
var last_terms = '';
$('.issue_search').keyup(function() {
var terms = $(this).val();
var project_id = $('#project_id').val();
var status = $('.status:checked').val();
if (terms != last_terms) {
last_terms = terms;
if (terms.length >= 2 || terms.length == 0) {
$.get(href, { 'status': status, 'terms': terms, project: project_id }, function(response) {
$('#issues-table').html(response);
setSortable();
});
}
}
});
$('.delete-issue').live('ajax:success', function() { $('.delete-issue').live('ajax:success', function() {
$(this).closest('tr').fadeOut(); }); $(this).closest('tr').fadeOut(); updatePage();});
function setSortable(){ function setSortable(){
$('#issues-table>tbody').sortable({ $('#issues-table>tbody').sortable({
......
%h2 %h2
= "Issue ##{@issue.id} - #{@issue.title}" = "Issue ##{@issue.id} - #{html_escape(@issue.title)}"
.span-15 .span-15
= simple_format html_escape(@issue.content) -#= simple_format html_escape(@issue.content)
.issue_notes= render "notes/notes" .issue_notes= render "notes/notes"
.span-8.right .span-8.right
.span-8 .span-8
...@@ -29,6 +28,16 @@ ...@@ -29,6 +28,16 @@
%td %td
= image_tag gravatar_icon(@issue.assignee.email), :class => "left", :width => 40, :style => "padding:0 5px;" = image_tag gravatar_icon(@issue.assignee.email), :class => "left", :width => 40, :style => "padding:0 5px;"
= @issue.assignee.name = @issue.assignee.name
%tr
%td Tags
%td
- if @issue.critical
%span.tag.high critical
- else
%span.tag.normal normal
- if @issue.today?
%span.tag.today today
%tr %tr
%td Closed? %td Closed?
%td %td
...@@ -40,5 +49,9 @@ ...@@ -40,5 +49,9 @@
= check_box_tag "closed", 1, @issue.closed, :disabled => true = check_box_tag "closed", 1, @issue.closed, :disabled => true
- if can?(current_user, :admin_issue, @issue)
.clear
= link_to 'Edit', edit_project_issue_path(@project, @issue), :class => "lbutton positive", :remote => true
.right= link_to 'Destroy', [@project, @issue], :confirm => 'Are you sure?', :method => :delete, :class => "lbutton delete-issue negative", :id => "destroy_issue_#{@issue.id}"
.clear .clear
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
- if @issue.valid? - if @issue.valid?
:plain :plain
$("#edit_issue_dialog").dialog("close"); $("#edit_issue_dialog").dialog("close");
$.ajax({type: "GET", url: location.href, dataType: "script"}); updatePage();
- else - else
:plain :plain
$("#edit_issue_dialog").empty(); $("#edit_issue_dialog").empty();
......
...@@ -22,7 +22,6 @@ ...@@ -22,7 +22,6 @@
</div> </div>
</div> </div>
<% if current_user %> <% if current_user %>
<%= javascript_tag do %> <%= javascript_tag do %>
$(function() { $(function() {
......
...@@ -7,7 +7,6 @@ ...@@ -7,7 +7,6 @@
= stylesheet_link_tag 'blueprint/print', :media => "print" = stylesheet_link_tag 'blueprint/print', :media => "print"
= stylesheet_link_tag 'blueprint/plugins/buttons/screen', :media => "screen, projection" = stylesheet_link_tag 'blueprint/plugins/buttons/screen', :media => "screen, projection"
= stylesheet_link_tag 'blueprint/plugins/link-icons/screen', :media => "screen, projection" = stylesheet_link_tag 'blueprint/plugins/link-icons/screen', :media => "screen, projection"
= stylesheet_link_tag 'jquery_ui/jquery-ui-1.8.16.custom', :media => "screen, projection"
= stylesheet_link_tag "application" = stylesheet_link_tag "application"
= javascript_include_tag "application" = javascript_include_tag "application"
= csrf_meta_tags = csrf_meta_tags
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
%div %div
= f.label :note = f.label :note
%cite (255 symbols only) %cite
%br %br
= f.text_area :note, :size => 255 = f.text_area :note, :size => 255
......
...@@ -20,7 +20,6 @@ ...@@ -20,7 +20,6 @@
$("#submit_note").removeAttr("disabled"); $("#submit_note").removeAttr("disabled");
}) })
- if ["issues", "projects"].include?(controller.controller_name) - if ["issues", "projects"].include?(controller.controller_name)
:javascript :javascript
$(function(){ $(function(){
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
= link_to project_snippets_path(@project), :class => (controller.controller_name == "snippets") ? "current" : nil do = link_to project_snippets_path(@project), :class => (controller.controller_name == "snippets") ? "current" : nil do
Snippets Snippets
- if @project.snippets.count > 0 - if @project.snippets.count > 0
%span{ :class => "top_menu_count" }= @project.snippets.count %span{ :class => "top_menu_count" }= @project.snippets.non_expired.count
- if @commit - if @commit
%span= link_to truncate(commit_name(@project,@commit), :length => 15), project_commit_path(@project, :id => @commit.id), :class => current_page?(:controller => "commits", :action => "show", :project_id => @project, :id => @commit.id) ? "current" : nil %span= link_to truncate(commit_name(@project,@commit), :length => 15), project_commit_path(@project, :id => @commit.id), :class => current_page?(:controller => "commits", :action => "show", :project_id => @project, :id => @commit.id) ? "current" : nil
......
...@@ -21,3 +21,8 @@ ...@@ -21,3 +21,8 @@
%h3 Talk %h3 Talk
=render "projects/recent_messages" =render "projects/recent_messages"
:javascript
function updateDashboard(){
$('#content-container').load("#{escape_javascript(project_path(@project))} #content-container>*");
}
setInterval("updateDashboard()", 300000);
...@@ -12,6 +12,9 @@ ...@@ -12,6 +12,9 @@
%tr %tr
%td= f.label :file_name %td= f.label :file_name
%td= f.text_field :file_name, :placeholder => "example.rb" %td= f.text_field :file_name, :placeholder => "example.rb"
%tr
%td= f.label "Lifetime"
%td= f.select :expires_at, lifetime_select_options
%tr %tr
%td{:colspan => 2} %td{:colspan => 2}
= f.label :content, "Code" = f.label :content, "Code"
......
%tr{ :id => dom_id(snippet), :class => "snippet", :url => project_snippet_path(@project, snippet) } - unless snippet.expired?
%tr{ :id => dom_id(snippet), :class => "snippet", :url => project_snippet_path(@project, snippet) }
%td %td
= image_tag gravatar_icon(snippet.author.email), :class => "left", :width => 40, :style => "padding:0 5px;" = image_tag gravatar_icon(snippet.author.email), :class => "left", :width => 40, :style => "padding:0 5px;"
= truncate snippet.author.name, :lenght => 20 = truncate snippet.author.name, :lenght => 20
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
%th Title %th Title
%th File name %th File name
%th %th
= render @snippets = render @snippets.fresh
:javascript :javascript
$('.delete-snippet').live('ajax:success', function() { $('.delete-snippet').live('ajax:success', function() {
$(this).closest('tr').fadeOut(); }); $(this).closest('tr').fadeOut(); });
%h2 - if !@snippet.expired?
%h2
= "Snippet ##{@snippet.id} - #{@snippet.title}" = "Snippet ##{@snippet.id} - #{@snippet.title}"
.view_file .view_file
.view_file_header .view_file_header
%strong %strong
= @snippet.file_name = @snippet.file_name
...@@ -10,13 +11,16 @@ ...@@ -10,13 +11,16 @@
:erb :erb
<%= raw @snippet.colorize %> <%= raw @snippet.colorize %>
- if can?(current_user, :admin_snippet, @project) || @snippet.author == current_user - if can?(current_user, :admin_snippet, @project) || @snippet.author == current_user
= link_to 'Edit', edit_project_snippet_path(@project, @snippet), :class => "lbutton positive" = link_to 'Edit', edit_project_snippet_path(@project, @snippet), :class => "lbutton positive"
- if can?(current_user, :admin_snippet, @project) || @snippet.author == current_user - if can?(current_user, :admin_snippet, @project) || @snippet.author == current_user
= link_to 'Destroy', [@project, @snippet], :confirm => 'Are you sure?', :method => :delete, :class => "lbutton delete-snippet negative", :id => "destroy_snippet_#{@snippet.id}" = link_to 'Destroy', [@project, @snippet], :confirm => 'Are you sure?', :method => :delete, :class => "lbutton delete-snippet negative", :id => "destroy_snippet_#{@snippet.id}"
.clear .clear
%br %br
.snippet_notes= render "notes/notes" .snippet_notes= render "notes/notes"
.clear .clear
- else
%h2
Sorry, this snippet is no longer exists
...@@ -25,4 +25,3 @@ ...@@ -25,4 +25,3 @@
%b Twitter: %b Twitter:
= user.twitter = user.twitter
...@@ -44,5 +44,8 @@ module Gitlab ...@@ -44,5 +44,8 @@ module Gitlab
# Version of your assets, change this if you want to expire all your assets # Version of your assets, change this if you want to expire all your assets
config.assets.version = '1.0' config.assets.version = '1.0'
# Extend assets path
config.assets.paths << Rails.root.join('vendor', 'assets', 'images', 'jquery-ui')
end end
end end
...@@ -58,7 +58,6 @@ Gitlab::Application.configure do ...@@ -58,7 +58,6 @@ Gitlab::Application.configure do
# Send deprecation notices to registered listeners # Send deprecation notices to registered listeners
config.active_support.deprecation = :notify config.active_support.deprecation = :notify
config.action_mailer.delivery_method = :sendmail config.action_mailer.delivery_method = :sendmail
# Defaults to: # Defaults to:
# # config.action_mailer.sendmail_settings = { # # config.action_mailer.sendmail_settings = {
......
...@@ -47,6 +47,9 @@ Gitlab::Application.routes.draw do ...@@ -47,6 +47,9 @@ Gitlab::Application.routes.draw do
collection do collection do
post :sort post :sort
end end
collection do
get :search
end
end end
resources :notes, :only => [:create, :destroy] resources :notes, :only => [:create, :destroy]
end end
......
...@@ -11,7 +11,6 @@ class DeviseCreateUsers < ActiveRecord::Migration ...@@ -11,7 +11,6 @@ class DeviseCreateUsers < ActiveRecord::Migration
# t.lockable :lock_strategy => :failed_attempts, :unlock_strategy => :both # t.lockable :lock_strategy => :failed_attempts, :unlock_strategy => :both
# t.token_authenticatable # t.token_authenticatable
t.timestamps t.timestamps
end end
......
class AddExpiresAtToSnippets < ActiveRecord::Migration
def change
add_column :snippets, :expires_at, :datetime
end
end
class ChangeNoteNoteToText < ActiveRecord::Migration
def up
change_column :notes, :note, :text, :limit => false
end
def down
end
end
class IssueContenToNote < ActiveRecord::Migration
def up
puts "Issue content is deprecated -> move to notes"
Issue.find_each(:batch_size => 100) do |issue|
next if issue.content.blank?
note = Note.new(
:note => issue.content,
:project_id => issue.project_id,
:noteable => issue,
:created_at => issue.created_at,
:updated_at => issue.created_at
)
note.author_id = issue.author_id
if note.save
issue.update_attributes(:content => nil)
print "."
else
print "F"
end
end
total = Issue.where("content is not null").count
if total > 0
puts "content of #{total} issues were not migrated"
else
puts "Done"
end
end
def down
end
end
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
# #
# It's strongly recommended to check this file into your version control system. # It's strongly recommended to check this file into your version control system.
ActiveRecord::Schema.define(:version => 20111025134235) do ActiveRecord::Schema.define(:version => 20111027152724) do
create_table "issues", :force => true do |t| create_table "issues", :force => true do |t|
t.string "title" t.string "title"
...@@ -36,7 +36,7 @@ ActiveRecord::Schema.define(:version => 20111025134235) do ...@@ -36,7 +36,7 @@ ActiveRecord::Schema.define(:version => 20111025134235) do
end end
create_table "notes", :force => true do |t| create_table "notes", :force => true do |t|
t.string "note" t.text "note"
t.string "noteable_id" t.string "noteable_id"
t.string "noteable_type" t.string "noteable_type"
t.integer "author_id" t.integer "author_id"
...@@ -65,6 +65,7 @@ ActiveRecord::Schema.define(:version => 20111025134235) do ...@@ -65,6 +65,7 @@ ActiveRecord::Schema.define(:version => 20111025134235) do
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
t.string "file_name" t.string "file_name"
t.datetime "expires_at"
end end
create_table "users", :force => true do |t| create_table "users", :force => true do |t|
......
...@@ -25,7 +25,6 @@ ...@@ -25,7 +25,6 @@
text-decoration: none; text-decoration: none;
} }
#page { #page {
background-color: #f0f0f0; background-color: #f0f0f0;
width: 750px; width: 750px;
...@@ -57,7 +56,6 @@ ...@@ -57,7 +56,6 @@
padding-right: 30px; padding-right: 30px;
} }
#header { #header {
background-image: url("/assets/rails.png"); background-image: url("/assets/rails.png");
background-repeat: no-repeat; background-repeat: no-repeat;
...@@ -71,7 +69,6 @@ ...@@ -71,7 +69,6 @@
font-size: 16px; font-size: 16px;
} }
#about h3 { #about h3 {
margin: 0; margin: 0;
margin-bottom: 10px; margin-bottom: 10px;
...@@ -112,7 +109,6 @@ ...@@ -112,7 +109,6 @@
padding: 10px; padding: 10px;
} }
#getting-started { #getting-started {
border-top: 1px solid #ccc; border-top: 1px solid #ccc;
margin-top: 25px; margin-top: 25px;
...@@ -149,7 +145,6 @@ ...@@ -149,7 +145,6 @@
font-size: 13px; font-size: 13px;
} }
#sidebar ul { #sidebar ul {
margin-left: 0; margin-left: 0;
padding-left: 0; padding-left: 0;
......
...@@ -32,7 +32,6 @@ end ...@@ -32,7 +32,6 @@ end
Factory.add(:issue, Issue) do |obj| Factory.add(:issue, Issue) do |obj|
obj.title = Faker::Lorem.sentence obj.title = Faker::Lorem.sentence
obj.content = Faker::Lorem.sentences
end end
Factory.add(:snippet, Snippet) do |obj| Factory.add(:snippet, Snippet) do |obj|
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment