Merge branch 'dev'
This commit is contained in:
commit
faa87e61bf
|
@ -42,8 +42,10 @@ replace:
|
|||
|
||||
prepend:
|
||||
function(id, html) {
|
||||
this.last_id = id;
|
||||
$("#notes-list").prepend(html);
|
||||
if(id != this.last_id) {
|
||||
this.last_id = id;
|
||||
$("#notes-list").prepend(html);
|
||||
}
|
||||
},
|
||||
|
||||
getNew:
|
||||
|
|
|
@ -276,6 +276,9 @@ input.ssh_project_url {
|
|||
/** FORM INPUTS **/
|
||||
|
||||
.user_new,
|
||||
.new_key,
|
||||
.new_issue,
|
||||
.new_note,
|
||||
.edit_user,
|
||||
.new_project,
|
||||
.new_snippet,
|
||||
|
@ -676,6 +679,30 @@ body.project-page table .commit {
|
|||
}
|
||||
}
|
||||
|
||||
#notes-list .note .delete-note { display:none; }
|
||||
#notes-list .note:hover .delete-note { display:block; }
|
||||
|
||||
#issues-table-holder .issue .action-links {
|
||||
display:none;
|
||||
a {
|
||||
margin-left:10px;
|
||||
}
|
||||
}
|
||||
|
||||
.issue-number {
|
||||
float: left;
|
||||
border-radius: 5px;
|
||||
text-shadow: none;
|
||||
background: rgba(0, 0, 0, 0.12);
|
||||
text-align: center;
|
||||
padding: 14px 8px;
|
||||
width: 40px;
|
||||
margin-right: 10px;
|
||||
color: #444;
|
||||
}
|
||||
|
||||
#issues-table-holder .issue:hover .action-links { display:block; }
|
||||
|
||||
body.project-page #notes-list .note {padding: 10px; border-bottom: 1px solid #eee; overflow: hidden; display: block;}
|
||||
body.project-page #notes-list .note {padding: 10px; border-bottom: 1px solid #eee; overflow: hidden; display: block;}
|
||||
body.project-page #notes-list .note img{float: left; margin-right: 10px;}
|
||||
|
@ -683,3 +710,14 @@ body.project-page #notes-list .note span.note-title{display: block;}
|
|||
body.project-page #notes-list .note span.note-title{margin-bottom: 10px}
|
||||
body.project-page #notes-list .note span.note-author{color: #999; font-weight: normal; font-style: italic;}
|
||||
body.project-page #notes-list .note span.note-author strong{font-weight: bold; font-style: normal;}
|
||||
|
||||
|
||||
/** NEW PROJECT **/
|
||||
.new-project-hodler {
|
||||
.icon span {
|
||||
background-position: -31px -70px;
|
||||
}
|
||||
td {
|
||||
border-bottom: 1px solid #DEE2E3;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -87,6 +87,17 @@ h2{margin: 1.5em 0}
|
|||
/* Forms */
|
||||
input[type="text"]:focus, input[type="password"]:focus { outline: none; }
|
||||
input.text{border: 1px solid #ccc; border-radius: 4px; display: block; padding: 10px}
|
||||
|
||||
.form-row{
|
||||
padding: 0px 0px 10px 0px;
|
||||
}
|
||||
|
||||
.form-row label{
|
||||
font-weight:bold;
|
||||
display: inline-block;
|
||||
padding: 0px 0px 5px 0px;
|
||||
}
|
||||
|
||||
/* eo Forms */
|
||||
|
||||
/* Tables */
|
||||
|
|
|
@ -47,6 +47,7 @@ class IssuesController < ApplicationController
|
|||
def create
|
||||
@issue = @project.issues.new(params[:issue])
|
||||
@issue.author = current_user
|
||||
|
||||
if @issue.save && @issue.assignee != current_user
|
||||
Notify.new_issue_email(@issue).deliver
|
||||
end
|
||||
|
|
|
@ -1,2 +1,7 @@
|
|||
module IssuesHelper
|
||||
def sort_class
|
||||
if can?(current_user, :admin_issue, @project) && (!params[:f] || params[:f] == "0")
|
||||
"handle"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -7,44 +7,42 @@
|
|||
- @admin_user.errors.full_messages.each do |msg|
|
||||
%li= msg
|
||||
|
||||
.span-24
|
||||
.span-11.colborder
|
||||
.field
|
||||
= f.label :name
|
||||
%br
|
||||
= f.text_field :name
|
||||
.field
|
||||
= f.label :email
|
||||
%br
|
||||
= f.text_field :email
|
||||
.field
|
||||
= f.label :password
|
||||
%br
|
||||
= f.password_field :password
|
||||
.field
|
||||
= f.label :password_confirmation
|
||||
%br
|
||||
= f.password_field :password_confirmation
|
||||
.field.prepend-top
|
||||
= f.check_box :admin
|
||||
= f.label :admin
|
||||
.span-11
|
||||
.field.prepend-top
|
||||
= f.text_field :projects_limit, :class => "small_input"
|
||||
= f.label :projects_limit
|
||||
.form-row
|
||||
= f.label :name
|
||||
%br
|
||||
= f.text_field :name
|
||||
.form-row
|
||||
= f.label :email
|
||||
%br
|
||||
= f.text_field :email
|
||||
.form-row
|
||||
= f.label :password
|
||||
%br
|
||||
= f.password_field :password
|
||||
.form-row
|
||||
= f.label :password_confirmation
|
||||
%br
|
||||
= f.password_field :password_confirmation
|
||||
.form-row
|
||||
= f.check_box :admin
|
||||
= f.label :admin
|
||||
|
||||
.field
|
||||
= f.label :skype
|
||||
%br
|
||||
= f.text_field :skype
|
||||
.field
|
||||
= f.label :linkedin
|
||||
%br
|
||||
= f.text_field :linkedin
|
||||
.field
|
||||
= f.label :twitter
|
||||
%br
|
||||
= f.text_field :twitter
|
||||
.form-row
|
||||
= f.text_field :projects_limit, :class => "small_input"
|
||||
= f.label :projects_limit
|
||||
|
||||
.form-row
|
||||
= f.label :skype
|
||||
%br
|
||||
= f.text_field :skype
|
||||
.form-row
|
||||
= f.label :linkedin
|
||||
%br
|
||||
= f.text_field :linkedin
|
||||
.form-row
|
||||
= f.label :twitter
|
||||
%br
|
||||
= f.text_field :twitter
|
||||
.clear
|
||||
%br
|
||||
.actions
|
||||
|
|
|
@ -21,4 +21,5 @@
|
|||
%br
|
||||
|
||||
= paginate @admin_users
|
||||
|
||||
= link_to 'New User', new_admin_user_path
|
||||
|
|
|
@ -5,24 +5,21 @@
|
|||
- @issue.errors.full_messages.each do |msg|
|
||||
%li= msg
|
||||
|
||||
.span-8
|
||||
.form-row
|
||||
= f.label :title
|
||||
= f.text_area :title, :style => "width:450px; height:100px", :maxlength => 255
|
||||
-#.span-8
|
||||
-#= f.label :content
|
||||
-#= f.text_area :content, :style => "width:450px; height:130px"
|
||||
.span-8.append-bottom
|
||||
.form-row
|
||||
= f.label :assignee_id
|
||||
= f.select(:assignee_id, @project.users.all.collect {|p| [ p.name, p.id ] }, { :include_blank => "Select user" })
|
||||
.span-1
|
||||
.form-row
|
||||
= f.label :critical, "Critical"
|
||||
%br
|
||||
= f.check_box :critical
|
||||
- unless @issue.new_record?
|
||||
.span-2.right
|
||||
.form-row
|
||||
= f.label :closed
|
||||
%br
|
||||
= f.check_box :closed
|
||||
%hr
|
||||
.span-6
|
||||
.form-row
|
||||
= f.submit 'Save', :class => "lbutton vm"
|
||||
|
|
|
@ -1,14 +1,5 @@
|
|||
%table.round-borders#issues-table
|
||||
%thead
|
||||
- if can?(current_user, :admin_issue, @project) && !params[:f] || params[:f] == "0"
|
||||
%th
|
||||
%th Assignee
|
||||
%th ID
|
||||
%th Title
|
||||
%th Closed?
|
||||
- @issues.critical.each do |issue|
|
||||
= render(:partial => 'show', :locals => {:issue => issue})
|
||||
|
||||
- @issues.critical.each do |issue|
|
||||
= render(:partial => 'show', :locals => {:issue => issue})
|
||||
|
||||
- @issues.non_critical.each do |issue|
|
||||
= render(:partial => 'show', :locals => {:issue => issue})
|
||||
- @issues.non_critical.each do |issue|
|
||||
= render(:partial => 'show', :locals => {:issue => issue})
|
||||
|
|
|
@ -1,37 +1,26 @@
|
|||
%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")
|
||||
%td
|
||||
= image_tag "move.png" , :class => [:handle, :left]
|
||||
%td
|
||||
= image_tag gravatar_icon(issue.assignee.email), :class => "left", :width => 40, :style => "padding:0 5px;"
|
||||
= issue.assignee.name
|
||||
%td ##{issue.id}
|
||||
%td
|
||||
= truncate(html_escape(issue.title), :length => 200)
|
||||
%strong.issue-number{:class => sort_class}= "##{issue.id}"
|
||||
%span
|
||||
= truncate(html_escape(issue.title), :length => fixed_mode? ? 100 : 200)
|
||||
%br
|
||||
%br
|
||||
- if issue.critical
|
||||
%span.tag.high critical
|
||||
- if issue.today?
|
||||
%span.tag.today today
|
||||
|
||||
.right
|
||||
- if can?(current_user, :admin_issue, @project) || issue.author == current_user
|
||||
= link_to 'Edit', edit_project_issue_path(@project, issue), :class => "cgray", :remote => true
|
||||
- if can?(current_user, :admin_issue, @project) || issue.author == current_user
|
||||
|
||||
= link_to 'Destroy', [@project, issue], :confirm => 'Are you sure?', :method => :delete, :remote => true, :class => "cred delete-issue negative", :id => "destroy_issue_#{issue.id}"
|
||||
|
||||
-#- if issue.author == current_user
|
||||
-#%span.tag.yours yours
|
||||
-#- if issue.notes.count > 0
|
||||
-#%span.tag.notes
|
||||
-#= issue.notes.count
|
||||
-#notes
|
||||
%td
|
||||
- if can? current_user, :write_issue, @project
|
||||
= form_for([@project, issue], :remote => true) do |f|
|
||||
= f.check_box :closed, :onclick => "$(this).parent().submit();"
|
||||
= hidden_field_tag :status_only, true
|
||||
- else
|
||||
= check_box_tag "closed", 1, issue.closed, :disabled => true
|
||||
%div.note-author
|
||||
%strong= issue.assignee.name
|
||||
%cite.cgray
|
||||
= time_ago_in_words(issue.updated_at)
|
||||
ago
|
||||
- if issue.critical
|
||||
%span.tag.high critical
|
||||
- if issue.today?
|
||||
%span.tag.today today
|
||||
.right.action-links
|
||||
- if can? current_user, :write_issue, issue
|
||||
- if issue.closed
|
||||
= link_to 'Reopen', project_issue_path(@project, issue, :issue => {:closed => false }, :status_only => true), :method => :put, :class => "cgray", :remote => true
|
||||
- else
|
||||
= link_to 'Resolve', project_issue_path(@project, issue, :issue => {:closed => true }, :status_only => true), :method => :put, :class => "cgray", :remote => true
|
||||
- if can? current_user, :write_issue, issue
|
||||
= link_to 'Edit', edit_project_issue_path(@project, issue), :class => "cgray edit-issue-link", :remote => true
|
||||
- if can?(current_user, :admin_issue, @project) || issue.author == current_user
|
||||
= link_to 'Destroy', [@project, issue], :confirm => 'Are you sure?', :method => :delete, :remote => true, :class => "cred delete-issue negative", :id => "destroy_issue_#{issue.id}"
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
- if @issue.valid?
|
||||
:plain
|
||||
$("#new_issue_dialog").dialog("close");
|
||||
$("#issues-table").prepend("#{escape_javascript(render(:partial => 'show', :locals => {:issue => @issue} ))}");
|
||||
$.ajax({type: "GET", url: location.href, dataType: "script"});
|
||||
- else
|
||||
:plain
|
||||
|
|
|
@ -1,28 +1,31 @@
|
|||
%div
|
||||
.top_panel_issues
|
||||
- if can? current_user, :write_issue, @project
|
||||
%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' }
|
||||
%div#issues-table-holder
|
||||
%table.round-borders#issues-table
|
||||
%thead
|
||||
%th
|
||||
.top_panel_issues
|
||||
- if can? current_user, :write_issue, @project
|
||||
%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.issues_filter
|
||||
= form_tag project_issues_path(@project), :method => :get do
|
||||
.left
|
||||
= radio_button_tag :f, 0, (params[:f] || "0") == "0", :onclick => "this.form.submit()", :id => "open_issues", :class => "status"
|
||||
= label_tag "open_issues","Open"
|
||||
.left
|
||||
= radio_button_tag :f, 2, params[:f] == "2", :onclick => "this.form.submit()", :id => "closed_issues", :class => "status"
|
||||
= label_tag "closed_issues","Closed"
|
||||
.left
|
||||
= radio_button_tag :f, 3, params[:f] == "3", :onclick => "this.form.submit()", :id => "my_issues", :class => "status"
|
||||
= label_tag "my_issues","To Me"
|
||||
.left
|
||||
= radio_button_tag :f, 1, params[:f] == "1", :onclick => "this.form.submit()", :id => "all_issues", :class => "status"
|
||||
= label_tag "all_issues","All"
|
||||
.right.issues_filter
|
||||
= form_tag project_issues_path(@project), :method => :get do
|
||||
.left
|
||||
= radio_button_tag :f, 0, (params[:f] || "0") == "0", :onclick => "this.form.submit()", :id => "open_issues", :class => "status"
|
||||
= label_tag "open_issues","Open"
|
||||
.left
|
||||
= radio_button_tag :f, 2, params[:f] == "2", :onclick => "this.form.submit()", :id => "closed_issues", :class => "status"
|
||||
= label_tag "closed_issues","Closed"
|
||||
.left
|
||||
= radio_button_tag :f, 3, params[:f] == "3", :onclick => "this.form.submit()", :id => "my_issues", :class => "status"
|
||||
= label_tag "my_issues","To Me"
|
||||
.left
|
||||
= radio_button_tag :f, 1, params[:f] == "1", :onclick => "this.form.submit()", :id => "all_issues", :class => "status"
|
||||
= label_tag "all_issues","All"
|
||||
|
||||
#issues-table-holder= render "issues"
|
||||
= render "issues"
|
||||
%br
|
||||
:javascript
|
||||
var href = $('.issue_search').parent().attr('action');
|
||||
|
@ -37,7 +40,7 @@
|
|||
|
||||
if (terms.length >= 2 || terms.length == 0) {
|
||||
$.get(href, { 'status': status, 'terms': terms, project: project_id }, function(response) {
|
||||
$('#issues-table').html(response);
|
||||
$('#issues-table tbody').html(response);
|
||||
setSortable();
|
||||
});
|
||||
}
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
:plain
|
||||
$('#issues-table-holder').html("#{escape_javascript(render('issues'))}");
|
||||
$('#issues-table tbody').html("#{escape_javascript(render('issues'))}");
|
||||
setSortable();
|
||||
|
|
|
@ -5,12 +5,12 @@
|
|||
- @key.errors.full_messages.each do |msg|
|
||||
%li= msg
|
||||
|
||||
.span-6
|
||||
.form-row
|
||||
= f.label :title
|
||||
= f.text_field :title, :style => "width:300px"
|
||||
.span-6
|
||||
.form-row
|
||||
= f.label :key
|
||||
= f.text_area :key, :style => "width:300px; height:130px"
|
||||
.span-6
|
||||
.form-row
|
||||
= f.submit 'Save', :class => "lbutton vm"
|
||||
|
||||
|
|
|
@ -10,13 +10,16 @@
|
|||
|
||||
%div
|
||||
= f.label :note
|
||||
%cite
|
||||
%cite.cgray markdown supported
|
||||
%br
|
||||
%br
|
||||
= f.text_area :note, :size => 255
|
||||
|
||||
|
||||
%div.attach_holder
|
||||
%br
|
||||
= f.label :attachment
|
||||
%cite (less than 10 MB)
|
||||
%cite.cgray (less than 10 MB)
|
||||
%br
|
||||
%br
|
||||
= f.file_field :attachment
|
||||
|
||||
|
|
|
@ -7,11 +7,11 @@
|
|||
- @user.errors.full_messages.each do |msg|
|
||||
%li= msg
|
||||
|
||||
.div
|
||||
.form-row
|
||||
= f.label :password
|
||||
%br
|
||||
= f.password_field :password
|
||||
.div
|
||||
.form-row
|
||||
= f.label :password_confirmation
|
||||
%br
|
||||
= f.password_field :password_confirmation
|
||||
|
|
|
@ -16,15 +16,15 @@
|
|||
- @user.errors.full_messages.each do |msg|
|
||||
%li= msg
|
||||
|
||||
.div
|
||||
.form-row
|
||||
= f.label :skype
|
||||
%br
|
||||
= f.text_field :skype
|
||||
.div
|
||||
.form-row
|
||||
= f.label :linkedin
|
||||
%br
|
||||
= f.text_field :linkedin
|
||||
.div
|
||||
.form-row
|
||||
= f.label :twitter
|
||||
%br
|
||||
= f.text_field :twitter
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
= form_for(@project, :remote => true) do |f|
|
||||
%div.form_content
|
||||
- unless @project.new_record?
|
||||
%h1 Edit Project
|
||||
%h2.icon
|
||||
%span
|
||||
= @project.name
|
||||
- if @project.errors.any?
|
||||
#error_explanation
|
||||
%h2
|
||||
|
@ -10,7 +12,7 @@
|
|||
%ul
|
||||
- @project.errors.full_messages.each do |msg|
|
||||
%li= msg
|
||||
%table.round-borders
|
||||
%table
|
||||
%tr
|
||||
%td= f.label :name
|
||||
%td= f.text_field :name, :placeholder => "Example Project"
|
||||
|
@ -29,15 +31,13 @@
|
|||
%tr
|
||||
%td= f.label :tag_list
|
||||
%td= f.text_area :tag_list, :placeholder => "project tags", :style => "height:50px", :id => :tag_field
|
||||
%tr
|
||||
%td= f.label :description
|
||||
%td= f.text_area :description, :placeholder => "project description", :style => "height:50px"
|
||||
|
||||
.field
|
||||
= f.label :description
|
||||
%br/
|
||||
= f.text_area :description, :style => "height:140px;width:932px;"
|
||||
.clear
|
||||
%hr.prepend-top
|
||||
%br
|
||||
.actions
|
||||
= f.submit :class => "lbutton vm"
|
||||
= f.submit :class => "button"
|
||||
|
||||
%div{ :class => "ajax_loader", :style => "display:none;height:200px;"}
|
||||
%center
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
<%= render 'form' %>
|
8
app/views/projects/new.html.haml
Normal file
8
app/views/projects/new.html.haml
Normal file
|
@ -0,0 +1,8 @@
|
|||
.new-project-hodler
|
||||
.container_4
|
||||
%h2.icon
|
||||
%span
|
||||
New Project
|
||||
|
||||
%div.clear
|
||||
= render 'form'
|
4
public/.directory
Normal file
4
public/.directory
Normal file
|
@ -0,0 +1,4 @@
|
|||
[Dolphin]
|
||||
ShowPreview=true
|
||||
Timestamp=2011,11,6,21,7,47
|
||||
Version=2
|
|
@ -169,6 +169,7 @@ describe "Issues" do
|
|||
:assignee => @user,
|
||||
:project => project
|
||||
visit project_issues_path(project)
|
||||
page.execute_script("$('.action-links').css('display', 'block');")
|
||||
click_link "Edit"
|
||||
end
|
||||
|
||||
|
|
|
@ -59,7 +59,7 @@
|
|||
.ui-widget { font-family: "Helvetica Neue",Arial,Helvetica,sans-serif; font-size: 1.1em; }
|
||||
.ui-widget .ui-widget { font-size: 1em; }
|
||||
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; }
|
||||
.ui-widget-content { border: 1px solid #dddddd; background: #ffffff url(ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; }
|
||||
.ui-widget-content { border: 1px solid #474D57; background: #ffffff url(ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; }
|
||||
.ui-widget-content a { color: #222222; }
|
||||
.ui-widget-header { color: #222222; font-weight: bold; }
|
||||
.ui-widget-header a { color: #222222; }
|
||||
|
@ -445,8 +445,8 @@ button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra pad
|
|||
* http://docs.jquery.com/UI/Dialog#theming
|
||||
*/
|
||||
.ui-dialog { position: absolute; padding: 0; width: 300px; overflow: hidden; }
|
||||
.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; background: #F7F7F7; color:#555; }
|
||||
.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0;}
|
||||
.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; background: #474D57; color:#eee; }
|
||||
.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; text-shadow: none;}
|
||||
.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; background:#eaeaea}
|
||||
.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
|
||||
.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
|
||||
|
|
Loading…
Reference in a new issue