Commit 8513526bfe7fb4a323cfaeb8ebc22933808400c1

Authored by Dmitriy Zaporozhets
2 parents 0d4128bf 3f70316c

Merge branch 'dev'

app/assets/javascripts/note.js
@@ -42,8 +42,10 @@ replace: @@ -42,8 +42,10 @@ replace:
42 42
43 prepend: 43 prepend:
44 function(id, html) { 44 function(id, html) {
45 - this.last_id = id;  
46 - $("#notes-list").prepend(html); 45 + if(id != this.last_id) {
  46 + this.last_id = id;
  47 + $("#notes-list").prepend(html);
  48 + }
47 }, 49 },
48 50
49 getNew: 51 getNew:
app/assets/javascripts/projects.js
@@ -40,3 +40,19 @@ $(document).ready(function(){ @@ -40,3 +40,19 @@ $(document).ready(function(){
40 function focusSearch() { 40 function focusSearch() {
41 $("#search").focus(); 41 $("#search").focus();
42 } 42 }
  43 +
  44 +function taggifyForm(){
  45 + var tag_field = $('#tag_field').tagify();
  46 +
  47 + tag_field.tagify('inputField').autocomplete({
  48 + source: '/tags.json'
  49 + });
  50 +
  51 +
  52 + $('form').submit( function() {
  53 + var tag_field = $('#tag_field')
  54 + tag_field.val( tag_field.tagify('serialize') );
  55 + return true;
  56 + });
  57 +}
  58 +
app/assets/stylesheets/projects.css.scss
@@ -276,6 +276,9 @@ input.ssh_project_url { @@ -276,6 +276,9 @@ input.ssh_project_url {
276 /** FORM INPUTS **/ 276 /** FORM INPUTS **/
277 277
278 .user_new, 278 .user_new,
  279 +.new_key,
  280 +.new_issue,
  281 +.new_note,
279 .edit_user, 282 .edit_user,
280 .new_project, 283 .new_project,
281 .new_snippet, 284 .new_snippet,
@@ -440,67 +443,6 @@ input.ssh_project_url { @@ -440,67 +443,6 @@ input.ssh_project_url {
440 padding: 10px; 443 padding: 10px;
441 } 444 }
442 445
443 -.recent_message_parent {  
444 - img {  
445 - padding-right:10px;  
446 - }  
447 -  
448 - float: left;  
449 - margin: 0 20px 20px 0px;  
450 - padding: 5px 0px;;  
451 - width: 420px;  
452 -  
453 - &.dash_wall{  
454 - border-bottom: 2px solid orange;  
455 - span {  
456 - background: orange;  
457 - color:black;  
458 - }  
459 - }  
460 -  
461 - &.dash_issue{  
462 - border-bottom: 2px solid #ffbbbb;  
463 - span {  
464 - background: #ffbbbb;  
465 - }  
466 - }  
467 - &.dash_commit{  
468 - border-bottom: 2px solid #bbbbff;  
469 -  
470 - span{  
471 - background: #bbbbff;  
472 - }  
473 - }  
474 -  
475 - &.dash_snippet{  
476 - border-bottom: 2px solid #bbffbb;  
477 -  
478 - span{  
479 - background: #bbffbb;  
480 - }  
481 - }  
482 -  
483 - span{  
484 - border: 1px solid #aaa;  
485 - color:black;  
486 - padding:1px 4px;  
487 - }  
488 -  
489 - h4 {  
490 - margin-bottom:3px;  
491 - }  
492 -  
493 -}  
494 -.commit,  
495 -.message{  
496 - .author {  
497 - background: #eaeaea;  
498 - color: #333;  
499 - border: 1px solid #aaa;  
500 - padding:1px 2px;  
501 - margin-right:5px;  
502 - }  
503 -}  
504 446
505 /* Note textare */ 447 /* Note textare */
506 #note_note { 448 #note_note {
@@ -662,6 +604,8 @@ table.highlighttable pre{ @@ -662,6 +604,8 @@ table.highlighttable pre{
662 margin-right:15px; 604 margin-right:15px;
663 } 605 }
664 } 606 }
  607 +.filter .left { margin-right:15px; }
  608 +
665 609
666 .cgray { color:gray; } 610 .cgray { color:gray; }
667 .cred { color:#D12F19; } 611 .cred { color:#D12F19; }
@@ -676,6 +620,30 @@ body.project-page table .commit { @@ -676,6 +620,30 @@ body.project-page table .commit {
676 } 620 }
677 } 621 }
678 622
  623 +#notes-list .note .delete-note { display:none; }
  624 +#notes-list .note:hover .delete-note { display:block; }
  625 +
  626 +#issues-table-holder .issue .action-links {
  627 + display:none;
  628 + a {
  629 + margin-left:10px;
  630 + }
  631 +}
  632 +
  633 +.issue-number {
  634 + float: left;
  635 + border-radius: 5px;
  636 + text-shadow: none;
  637 + background: rgba(0, 0, 0, 0.12);
  638 + text-align: center;
  639 + padding: 14px 8px;
  640 + width: 40px;
  641 + margin-right: 10px;
  642 + color: #444;
  643 +}
  644 +
  645 +#issues-table-holder .issue:hover .action-links { display:block; }
  646 +
679 body.project-page #notes-list .note {padding: 10px; border-bottom: 1px solid #eee; overflow: hidden; display: block;} 647 body.project-page #notes-list .note {padding: 10px; border-bottom: 1px solid #eee; overflow: hidden; display: block;}
680 body.project-page #notes-list .note {padding: 10px; border-bottom: 1px solid #eee; overflow: hidden; display: block;} 648 body.project-page #notes-list .note {padding: 10px; border-bottom: 1px solid #eee; overflow: hidden; display: block;}
681 body.project-page #notes-list .note img{float: left; margin-right: 10px;} 649 body.project-page #notes-list .note img{float: left; margin-right: 10px;}
@@ -683,3 +651,33 @@ body.project-page #notes-list .note span.note-title{display: block;} @@ -683,3 +651,33 @@ body.project-page #notes-list .note span.note-title{display: block;}
683 body.project-page #notes-list .note span.note-title{margin-bottom: 10px} 651 body.project-page #notes-list .note span.note-title{margin-bottom: 10px}
684 body.project-page #notes-list .note span.note-author{color: #999; font-weight: normal; font-style: italic;} 652 body.project-page #notes-list .note span.note-author{color: #999; font-weight: normal; font-style: italic;}
685 body.project-page #notes-list .note span.note-author strong{font-weight: bold; font-style: normal;} 653 body.project-page #notes-list .note span.note-author strong{font-weight: bold; font-style: normal;}
  654 +
  655 +
  656 +/** NEW PROJECT **/
  657 +.new-project-hodler {
  658 + .icon span {
  659 + background-position: -31px -70px;
  660 + }
  661 + td {
  662 + border-bottom: 1px solid #DEE2E3;
  663 + }
  664 +}
  665 +
  666 +//.message .note-title p { margin-bottom:0px; }
  667 +
  668 +.commit,
  669 +.message {
  670 + .title {
  671 + color:#666;
  672 + a {
  673 + color:#666 !important;
  674 + }
  675 + p {
  676 + margin-top:0px;
  677 + }
  678 + }
  679 +
  680 + .author {
  681 + color: #999
  682 + }
  683 +}
app/assets/stylesheets/style.scss
@@ -87,6 +87,17 @@ h2{margin: 1.5em 0} @@ -87,6 +87,17 @@ h2{margin: 1.5em 0}
87 /* Forms */ 87 /* Forms */
88 input[type="text"]:focus, input[type="password"]:focus { outline: none; } 88 input[type="text"]:focus, input[type="password"]:focus { outline: none; }
89 input.text{border: 1px solid #ccc; border-radius: 4px; display: block; padding: 10px} 89 input.text{border: 1px solid #ccc; border-radius: 4px; display: block; padding: 10px}
  90 +
  91 +.form-row{
  92 + padding: 0px 0px 10px 0px;
  93 +}
  94 +
  95 +.form-row label{
  96 + font-weight:bold;
  97 + display: inline-block;
  98 + padding: 0px 0px 5px 0px;
  99 +}
  100 +
90 /* eo Forms */ 101 /* eo Forms */
91 102
92 /* Tables */ 103 /* Tables */
app/assets/stylesheets/tags.css.css
@@ -27,4 +27,18 @@ @@ -27,4 +27,18 @@
27 color: #FFF; 27 color: #FFF;
28 text-shadow: none; 28 text-shadow: none;
29 font-weight: bold; 29 font-weight: bold;
  30 +}
  31 +
  32 +
  33 +.medium-tags a{
  34 + font-size: 12px;
  35 +
  36 + display: inline-block;
  37 + padding: 3px 4px 2px 4px;
  38 + margin: 0px 7px 8px 0px;
  39 + border-radius: 3px;
  40 + background-color: #72bbdf;
  41 + color: #FFF;
  42 + text-shadow: none;
  43 + font-weight: bold;
30 } 44 }
31 \ No newline at end of file 45 \ No newline at end of file
app/controllers/issues_controller.rb
@@ -47,6 +47,7 @@ class IssuesController < ApplicationController @@ -47,6 +47,7 @@ class IssuesController < ApplicationController
47 def create 47 def create
48 @issue = @project.issues.new(params[:issue]) 48 @issue = @project.issues.new(params[:issue])
49 @issue.author = current_user 49 @issue.author = current_user
  50 +
50 if @issue.save && @issue.assignee != current_user 51 if @issue.save && @issue.assignee != current_user
51 Notify.new_issue_email(@issue).deliver 52 Notify.new_issue_email(@issue).deliver
52 end 53 end
app/helpers/dashboard_helper.rb
@@ -12,7 +12,7 @@ module DashboardHelper @@ -12,7 +12,7 @@ module DashboardHelper
12 when "Commit" then project_commit_path(project, :id => note.noteable_id) 12 when "Commit" then project_commit_path(project, :id => note.noteable_id)
13 else wall_project_path(project) 13 else wall_project_path(project)
14 end 14 end
15 - else "#" 15 + else wall_project_path(project)
16 end 16 end
17 rescue 17 rescue
18 "#" 18 "#"
@@ -23,7 +23,7 @@ module DashboardHelper @@ -23,7 +23,7 @@ module DashboardHelper
23 when "Note" then markdown(object.note) 23 when "Note" then markdown(object.note)
24 when "Issue" then object.title 24 when "Issue" then object.title
25 when "Grit::Commit" then object.safe_message 25 when "Grit::Commit" then object.safe_message
26 - else "" 26 + else return "Project Wall"
27 end 27 end
28 "[#{object.class.name}] #{truncate(sanitize(title, :tags => []), :length => 60)} " 28 "[#{object.class.name}] #{truncate(sanitize(title, :tags => []), :length => 60)} "
29 end 29 end
app/helpers/issues_helper.rb
1 module IssuesHelper 1 module IssuesHelper
  2 + def sort_class
  3 + if can?(current_user, :admin_issue, @project) && (!params[:f] || params[:f] == "0")
  4 + "handle"
  5 + end
  6 + end
  7 +
  8 + def project_issues_filter_path project, params = {}
  9 + params[:f] ||= cookies['issue_filter']
  10 + project_issues_path project, params
  11 + end
2 end 12 end
app/helpers/tags_helper.rb 0 → 100644
@@ -0,0 +1,15 @@ @@ -0,0 +1,15 @@
  1 +module TagsHelper
  2 + def tag_path tag
  3 + "/tags/#{tag}"
  4 + end
  5 +
  6 + def tag_list project
  7 + html = ''
  8 + project.tag_list.each do |tag|
  9 + html += link_to tag, tag_path(tag)
  10 + end
  11 +
  12 + html.html_safe
  13 + end
  14 +
  15 +end
app/views/admin/projects/_form.html.haml
1 = form_for [:admin, @admin_project] do |f| 1 = form_for [:admin, @admin_project] do |f|
2 -if @admin_project.errors.any? 2 -if @admin_project.errors.any?
3 #error_explanation 3 #error_explanation
4 - %h2= "#{pluralize(@admin_project.errors.count, "error")} prohibited this admin_project from being saved:" 4 + %h2= "#{pluralize(@admin_project.errors.count, "error")} prohibited this admin_project from being saved:"
5 %ul 5 %ul
6 - @admin_project.errors.full_messages.each do |msg| 6 - @admin_project.errors.full_messages.each do |msg|
7 %li= msg 7 %li= msg
8 8
9 - .span-24  
10 - .span-12  
11 - .field  
12 - = f.label :name  
13 - %br  
14 - = f.text_field :name  
15 - .field  
16 - = f.label :code  
17 - %br  
18 - = f.text_field :code  
19 - .field  
20 - = f.label :path  
21 - %br  
22 - = f.text_field :path  
23 - .span-10  
24 - .field  
25 - = f.label :description  
26 - %br  
27 - = f.text_area :description 9 + .form-row
  10 + = f.label :name
  11 + %br
  12 + = f.text_field :name
  13 + .form-row
  14 + = f.label :code
  15 + %br
  16 + = f.text_field :code
  17 + .form-row
  18 + = f.label :path
  19 + %br
  20 + = f.text_field :path
  21 +
  22 +
  23 + .form-row
  24 + = f.label :tag_list
  25 + %br
  26 + = f.text_area :tag_list, :placeholder => "project tags", :style => "height:50px", :id => :tag_field
  27 +
  28 + .form-row
  29 + = f.label :description
  30 + %br
  31 + = f.text_area :description
28 .clear 32 .clear
29 .actions 33 .actions
30 = f.submit 'Save', :class => "lbutton" 34 = f.submit 'Save', :class => "lbutton"
  35 +
  36 +:javascript
  37 + $(function(){
  38 + taggifyForm();
  39 + })
app/views/admin/users/_form.html.haml
@@ -7,44 +7,42 @@ @@ -7,44 +7,42 @@
7 - @admin_user.errors.full_messages.each do |msg| 7 - @admin_user.errors.full_messages.each do |msg|
8 %li= msg 8 %li= msg
9 9
10 - .span-24  
11 - .span-11.colborder  
12 - .field  
13 - = f.label :name  
14 - %br  
15 - = f.text_field :name  
16 - .field  
17 - = f.label :email  
18 - %br  
19 - = f.text_field :email  
20 - .field  
21 - = f.label :password  
22 - %br  
23 - = f.password_field :password  
24 - .field  
25 - = f.label :password_confirmation  
26 - %br  
27 - = f.password_field :password_confirmation  
28 - .field.prepend-top  
29 - = f.check_box :admin  
30 - = f.label :admin  
31 - .span-11  
32 - .field.prepend-top  
33 - = f.text_field :projects_limit, :class => "small_input"  
34 - = f.label :projects_limit 10 + .form-row
  11 + = f.label :name
  12 + %br
  13 + = f.text_field :name
  14 + .form-row
  15 + = f.label :email
  16 + %br
  17 + = f.text_field :email
  18 + .form-row
  19 + = f.label :password
  20 + %br
  21 + = f.password_field :password
  22 + .form-row
  23 + = f.label :password_confirmation
  24 + %br
  25 + = f.password_field :password_confirmation
  26 + .form-row
  27 + = f.check_box :admin
  28 + = f.label :admin
35 29
36 - .field  
37 - = f.label :skype  
38 - %br  
39 - = f.text_field :skype  
40 - .field  
41 - = f.label :linkedin  
42 - %br  
43 - = f.text_field :linkedin  
44 - .field  
45 - = f.label :twitter  
46 - %br  
47 - = f.text_field :twitter 30 + .form-row
  31 + = f.text_field :projects_limit, :class => "small_input"
  32 + = f.label :projects_limit
  33 +
  34 + .form-row
  35 + = f.label :skype
  36 + %br
  37 + = f.text_field :skype
  38 + .form-row
  39 + = f.label :linkedin
  40 + %br
  41 + = f.text_field :linkedin
  42 + .form-row
  43 + = f.label :twitter
  44 + %br
  45 + = f.text_field :twitter
48 .clear 46 .clear
49 %br 47 %br
50 .actions 48 .actions
app/views/admin/users/index.html.haml
@@ -21,4 +21,5 @@ @@ -21,4 +21,5 @@
21 %br 21 %br
22 22
23 = paginate @admin_users 23 = paginate @admin_users
  24 +
24 = link_to 'New User', new_admin_user_path 25 = link_to 'New User', new_admin_user_path
app/views/commits/_text_file.html.haml
@@ -13,10 +13,8 @@ @@ -13,10 +13,8 @@
13 = diff_line(line, line_new, line_old) 13 = diff_line(line, line_new, line_old)
14 - if line[0] == "+" 14 - if line[0] == "+"
15 - line_new += 1 15 - line_new += 1
16 - - elsif  
17 - - line[0] == "-" 16 + - elsif line[0] == "-"
18 - line_old += 1 17 - line_old += 1
19 - else 18 - else
20 - line_new += 1 19 - line_new += 1
21 - line_old += 1 20 - line_old += 1
22 -  
app/views/dashboard/index.html.haml
@@ -23,7 +23,7 @@ @@ -23,7 +23,7 @@
23 .project-box.project-updates.ui-box.ui-box-small.ui-box-big 23 .project-box.project-updates.ui-box.ui-box-small.ui-box-big
24 %h3= project.name 24 %h3= project.name
25 .data 25 .data
26 - - project.updates.each do |update| 26 + - project.updates(4).each do |update|
27 %a.project-update{:href => dashboard_feed_path(project, update)} 27 %a.project-update{:href => dashboard_feed_path(project, update)}
28 = image_tag gravatar_icon(update.author_email), :class => "left", :width => 40 28 = image_tag gravatar_icon(update.author_email), :class => "left", :width => 40
29 %span.update-title 29 %span.update-title
@@ -34,7 +34,5 @@ @@ -34,7 +34,5 @@
34 = time_ago_in_words(update.created_at) 34 = time_ago_in_words(update.created_at)
35 ago 35 ago
36 %br 36 %br
37 - / .project-update  
38 - / .project-updates  
39 / #news-feed 37 / #news-feed
40 / #dashboard-content 38 / #dashboard-content
app/views/issues/_form.html.haml
@@ -5,24 +5,21 @@ @@ -5,24 +5,21 @@
5 - @issue.errors.full_messages.each do |msg| 5 - @issue.errors.full_messages.each do |msg|
6 %li= msg 6 %li= msg
7 7
8 - .span-8 8 + .form-row
9 = f.label :title 9 = f.label :title
10 = f.text_area :title, :style => "width:450px; height:100px", :maxlength => 255 10 = f.text_area :title, :style => "width:450px; height:100px", :maxlength => 255
11 - -#.span-8  
12 - -#= f.label :content  
13 - -#= f.text_area :content, :style => "width:450px; height:130px"  
14 - .span-8.append-bottom 11 + .form-row
15 = f.label :assignee_id 12 = f.label :assignee_id
16 = f.select(:assignee_id, @project.users.all.collect {|p| [ p.name, p.id ] }, { :include_blank => "Select user" }) 13 = f.select(:assignee_id, @project.users.all.collect {|p| [ p.name, p.id ] }, { :include_blank => "Select user" })
17 - .span-1 14 + .form-row
18 = f.label :critical, "Critical" 15 = f.label :critical, "Critical"
19 %br 16 %br
20 = f.check_box :critical 17 = f.check_box :critical
21 - unless @issue.new_record? 18 - unless @issue.new_record?
22 - .span-2.right 19 + .form-row
23 = f.label :closed 20 = f.label :closed
24 %br 21 %br
25 = f.check_box :closed 22 = f.check_box :closed
26 %hr 23 %hr
27 - .span-6 24 + .form-row
28 = f.submit 'Save', :class => "lbutton vm" 25 = f.submit 'Save', :class => "lbutton vm"
app/views/issues/_issues.html.haml
1 -%table.round-borders#issues-table  
2 - %thead  
3 - - if can?(current_user, :admin_issue, @project) && !params[:f] || params[:f] == "0"  
4 - %th  
5 - %th Assignee  
6 - %th ID  
7 - %th Title  
8 - %th Closed? 1 +- @issues.critical.each do |issue|
  2 + = render(:partial => 'show', :locals => {:issue => issue})
9 3
10 - - @issues.critical.each do |issue|  
11 - = render(:partial => 'show', :locals => {:issue => issue})  
12 -  
13 - - @issues.non_critical.each do |issue|  
14 - = render(:partial => 'show', :locals => {:issue => issue}) 4 +- @issues.non_critical.each do |issue|
  5 + = render(:partial => 'show', :locals => {:issue => issue})
app/views/issues/_show.html.haml
1 %tr{ :id => dom_id(issue), :class => "issue #{issue.critical ? "critical" : ""}", :url => project_issue_path(@project, issue) } 1 %tr{ :id => dom_id(issue), :class => "issue #{issue.critical ? "critical" : ""}", :url => project_issue_path(@project, issue) }
2 - - if can?(current_user, :admin_issue, @project) && (!params[:f] || params[:f] == "0")  
3 - %td  
4 - = image_tag "move.png" , :class => [:handle, :left]  
5 %td 2 %td
6 - = image_tag gravatar_icon(issue.assignee.email), :class => "left", :width => 40, :style => "padding:0 5px;"  
7 - = issue.assignee.name  
8 - %td ##{issue.id}  
9 - %td  
10 - = truncate(html_escape(issue.title), :length => 200) 3 + %strong.issue-number{:class => sort_class}= "##{issue.id}"
  4 + %span
  5 + = truncate(html_escape(issue.title), :length => fixed_mode? ? 100 : 200)
11 %br 6 %br
12 %br 7 %br
13 - - if issue.critical  
14 - %span.tag.high critical  
15 - - if issue.today?  
16 - %span.tag.today today  
17 -  
18 - .right  
19 - - if can?(current_user, :admin_issue, @project) || issue.author == current_user  
20 - = link_to 'Edit', edit_project_issue_path(@project, issue), :class => "cgray", :remote => true  
21 - - if can?(current_user, :admin_issue, @project) || issue.author == current_user  
22 -    
23 - = link_to 'Destroy', [@project, issue], :confirm => 'Are you sure?', :method => :delete, :remote => true, :class => "cred delete-issue negative", :id => "destroy_issue_#{issue.id}"  
24 -  
25 - -#- if issue.author == current_user  
26 - -#%span.tag.yours yours  
27 - -#- if issue.notes.count > 0  
28 - -#%span.tag.notes  
29 - -#= issue.notes.count  
30 - -#notes  
31 - %td  
32 - - if can? current_user, :write_issue, @project  
33 - = form_for([@project, issue], :remote => true) do |f|  
34 - = f.check_box :closed, :onclick => "$(this).parent().submit();"  
35 - = hidden_field_tag :status_only, true  
36 - - else  
37 - = check_box_tag "closed", 1, issue.closed, :disabled => true 8 + %div.note-author
  9 + %strong= issue.assignee.name
  10 + %cite.cgray
  11 + = time_ago_in_words(issue.updated_at)
  12 + ago
  13 + - if issue.critical
  14 + %span.tag.high critical
  15 + - if issue.today?
  16 + %span.tag.today today
  17 + .right.action-links
  18 + - if can? current_user, :write_issue, issue
  19 + - if issue.closed
  20 + = link_to 'Reopen', project_issue_path(@project, issue, :issue => {:closed => false }, :status_only => true), :method => :put, :class => "cgray", :remote => true
  21 + - else
  22 + = link_to 'Resolve', project_issue_path(@project, issue, :issue => {:closed => true }, :status_only => true), :method => :put, :class => "cgray", :remote => true
  23 + - if can? current_user, :write_issue, issue
  24 + = link_to 'Edit', edit_project_issue_path(@project, issue), :class => "cgray edit-issue-link", :remote => true
  25 + - if can?(current_user, :admin_issue, @project) || issue.author == current_user
  26 + = link_to 'Destroy', [@project, issue], :confirm => 'Are you sure?', :method => :delete, :remote => true, :class => "cred delete-issue negative", :id => "destroy_issue_#{issue.id}"
app/views/issues/create.js.haml
1 - if @issue.valid? 1 - if @issue.valid?
2 :plain 2 :plain
3 $("#new_issue_dialog").dialog("close"); 3 $("#new_issue_dialog").dialog("close");
  4 + $("#issues-table").prepend("#{escape_javascript(render(:partial => 'show', :locals => {:issue => @issue} ))}");
4 $.ajax({type: "GET", url: location.href, dataType: "script"}); 5 $.ajax({type: "GET", url: location.href, dataType: "script"});
5 - else 6 - else
6 :plain 7 :plain
app/views/issues/index.html.haml
1 -%div  
2 - .top_panel_issues  
3 - - if can? current_user, :write_issue, @project  
4 - %div{:class => "left", :style => "margin-right: 10px;" }  
5 - = link_to 'New Issue', new_project_issue_path(@project), :remote => true, :class => "lbutton vm"  
6 - = form_tag search_project_issues_path(@project), :method => :get, :remote => true, :class => :left, :id => "issue_search_form" do  
7 - = hidden_field_tag :project_id, @project.id, { :id => 'project_id' }  
8 - = search_field_tag :issue_search, nil, { :placeholder => 'Search', :class => 'issue_search' } 1 +%div#issues-table-holder
  2 + %table.round-borders#issues-table
  3 + %thead
  4 + %th
  5 + .top_panel_issues
  6 + - if can? current_user, :write_issue, @project
  7 + %div{:class => "left", :style => "margin-right: 10px;" }
  8 + = link_to 'New Issue', new_project_issue_path(@project), :remote => true, :class => "lbutton vm"
  9 + = form_tag search_project_issues_path(@project), :method => :get, :remote => true, :class => :left, :id => "issue_search_form" do
  10 + = hidden_field_tag :project_id, @project.id, { :id => 'project_id' }
  11 + = search_field_tag :issue_search, nil, { :placeholder => 'Search', :class => 'issue_search' }
9 12
10 - .right.issues_filter  
11 - = form_tag project_issues_path(@project), :method => :get do  
12 - .left  
13 - = radio_button_tag :f, 0, (params[:f] || "0") == "0", :onclick => "this.form.submit()", :id => "open_issues", :class => "status"  
14 - = label_tag "open_issues","Open"  
15 - .left  
16 - = radio_button_tag :f, 2, params[:f] == "2", :onclick => "this.form.submit()", :id => "closed_issues", :class => "status"  
17 - = label_tag "closed_issues","Closed"  
18 - .left  
19 - = radio_button_tag :f, 3, params[:f] == "3", :onclick => "this.form.submit()", :id => "my_issues", :class => "status"  
20 - = label_tag "my_issues","To Me"  
21 - .left  
22 - = radio_button_tag :f, 1, params[:f] == "1", :onclick => "this.form.submit()", :id => "all_issues", :class => "status"  
23 - = label_tag "all_issues","All" 13 + .right.issues_filter
  14 + = form_tag project_issues_path(@project), :method => :get do
  15 + .left
  16 + = radio_button_tag :f, 0, (params[:f] || "0") == "0", :onclick => "setIssueFilter(this.form, 0)", :id => "open_issues", :class => "status"
  17 + = label_tag "open_issues","Open"
  18 + .left
  19 + = radio_button_tag :f, 2, params[:f] == "2", :onclick => "setIssueFilter(this.form, 2)", :id => "closed_issues", :class => "status"
  20 + = label_tag "closed_issues","Closed"
  21 + .left
  22 + = radio_button_tag :f, 3, params[:f] == "3", :onclick => "setIssueFilter(this.form, 3)", :id => "my_issues", :class => "status"
  23 + = label_tag "my_issues","To Me"
  24 + .left
  25 + = radio_button_tag :f, 1, params[:f] == "1", :onclick => "setIssueFilter(this.form, 1)", :id => "all_issues", :class => "status"
  26 + = label_tag "all_issues","All"
24 27
25 - #issues-table-holder= render "issues" 28 + = render "issues"
26 %br 29 %br
27 :javascript 30 :javascript
28 var href = $('.issue_search').parent().attr('action'); 31 var href = $('.issue_search').parent().attr('action');
29 var last_terms = ''; 32 var last_terms = '';
30 33
  34 +
  35 + var setIssueFilter = function(form, value){
  36 + $.cookie('issue_filter', value, { expires: 140 });
  37 + form.submit();
  38 + }
  39 +
31 $('.issue_search').keyup(function() { 40 $('.issue_search').keyup(function() {
32 var terms = $(this).val(); 41 var terms = $(this).val();
33 var project_id = $('#project_id').val(); 42 var project_id = $('#project_id').val();
@@ -37,7 +46,7 @@ @@ -37,7 +46,7 @@
37 46
38 if (terms.length >= 2 || terms.length == 0) { 47 if (terms.length >= 2 || terms.length == 0) {
39 $.get(href, { 'status': status, 'terms': terms, project: project_id }, function(response) { 48 $.get(href, { 'status': status, 'terms': terms, project: project_id }, function(response) {
40 - $('#issues-table').html(response); 49 + $('#issues-table tbody').html(response);
41 setSortable(); 50 setSortable();
42 }); 51 });
43 } 52 }
app/views/issues/index.js.haml
1 :plain 1 :plain
2 - $('#issues-table-holder').html("#{escape_javascript(render('issues'))}"); 2 + $('#issues-table tbody').html("#{escape_javascript(render('issues'))}");
3 setSortable(); 3 setSortable();
app/views/keys/_form.html.haml
@@ -5,12 +5,12 @@ @@ -5,12 +5,12 @@
5 - @key.errors.full_messages.each do |msg| 5 - @key.errors.full_messages.each do |msg|
6 %li= msg 6 %li= msg
7 7
8 - .span-6 8 + .form-row
9 = f.label :title 9 = f.label :title
10 = f.text_field :title, :style => "width:300px" 10 = f.text_field :title, :style => "width:300px"
11 - .span-6 11 + .form-row
12 = f.label :key 12 = f.label :key
13 = f.text_area :key, :style => "width:300px; height:130px" 13 = f.text_area :key, :style => "width:300px; height:130px"
14 - .span-6 14 + .form-row
15 = f.submit 'Save', :class => "lbutton vm" 15 = f.submit 'Save', :class => "lbutton vm"
16 16
app/views/layouts/project.html.haml
@@ -25,7 +25,7 @@ @@ -25,7 +25,7 @@
25 Team 25 Team
26 - if @project.users_projects.count > 0 26 - if @project.users_projects.count > 0
27 %span{ :class => "number" }= @project.users_projects.count 27 %span{ :class => "number" }= @project.users_projects.count
28 - = link_to project_issues_path(@project), :class => (controller.controller_name == "issues") ? "current" : nil do 28 + = link_to project_issues_filter_path(@project), :class => (controller.controller_name == "issues") ? "current" : nil do
29 Issues 29 Issues
30 - if @project.issues.opened.count > 0 30 - if @project.issues.opened.count > 0
31 %span{ :class => "number" }= @project.issues.opened.count 31 %span{ :class => "number" }= @project.issues.opened.count
@@ -40,5 +40,7 @@ @@ -40,5 +40,7 @@
40 - if @commit 40 - if @commit
41 = 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 41 = 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
42 42
  43 + .medium-tags{:style => 'padding: 10px 0 0 10px; width: 210px;'}= tag_list @project
  44 +
43 .project-content 45 .project-content
44 = yield 46 = yield
app/views/notes/_form.html.haml
@@ -10,13 +10,16 @@ @@ -10,13 +10,16 @@
10 10
11 %div 11 %div
12 = f.label :note 12 = f.label :note
13 - %cite 13 + %cite.cgray markdown supported
  14 + %br
14 %br 15 %br
15 = f.text_area :note, :size => 255 16 = f.text_area :note, :size => 255
16 - 17 +
17 %div.attach_holder 18 %div.attach_holder
  19 + %br
18 = f.label :attachment 20 = f.label :attachment
19 - %cite (less than 10 MB) 21 + %cite.cgray (less than 10 MB)
  22 + %br
20 %br 23 %br
21 = f.file_field :attachment 24 = f.file_field :attachment
22 25
app/views/profile/password.html.haml
@@ -7,11 +7,11 @@ @@ -7,11 +7,11 @@
7 - @user.errors.full_messages.each do |msg| 7 - @user.errors.full_messages.each do |msg|
8 %li= msg 8 %li= msg
9 9
10 - .div 10 + .form-row
11 = f.label :password 11 = f.label :password
12 %br 12 %br
13 = f.password_field :password 13 = f.password_field :password
14 - .div 14 + .form-row
15 = f.label :password_confirmation 15 = f.label :password_confirmation
16 %br 16 %br
17 = f.password_field :password_confirmation 17 = f.password_field :password_confirmation
app/views/profile/show.html.haml
@@ -16,15 +16,15 @@ @@ -16,15 +16,15 @@
16 - @user.errors.full_messages.each do |msg| 16 - @user.errors.full_messages.each do |msg|
17 %li= msg 17 %li= msg
18 18
19 - .div 19 + .form-row
20 = f.label :skype 20 = f.label :skype
21 %br 21 %br
22 = f.text_field :skype 22 = f.text_field :skype
23 - .div 23 + .form-row
24 = f.label :linkedin 24 = f.label :linkedin
25 %br 25 %br
26 = f.text_field :linkedin 26 = f.text_field :linkedin
27 - .div 27 + .form-row
28 = f.label :twitter 28 = f.label :twitter
29 %br 29 %br
30 = f.text_field :twitter 30 = f.text_field :twitter
app/views/projects/_form.html.haml
1 = form_for(@project, :remote => true) do |f| 1 = form_for(@project, :remote => true) do |f|
2 %div.form_content 2 %div.form_content
3 - unless @project.new_record? 3 - unless @project.new_record?
4 - %h1 Edit Project 4 + %h2.icon
  5 + %span
  6 + = @project.name
5 - if @project.errors.any? 7 - if @project.errors.any?
6 #error_explanation 8 #error_explanation
7 %h2 9 %h2
@@ -10,7 +12,7 @@ @@ -10,7 +12,7 @@
10 %ul 12 %ul
11 - @project.errors.full_messages.each do |msg| 13 - @project.errors.full_messages.each do |msg|
12 %li= msg 14 %li= msg
13 - %table.round-borders 15 + %table
14 %tr 16 %tr
15 %td= f.label :name 17 %td= f.label :name
16 %td= f.text_field :name, :placeholder => "Example Project" 18 %td= f.text_field :name, :placeholder => "Example Project"
@@ -29,15 +31,13 @@ @@ -29,15 +31,13 @@
29 %tr 31 %tr
30 %td= f.label :tag_list 32 %td= f.label :tag_list
31 %td= f.text_area :tag_list, :placeholder => "project tags", :style => "height:50px", :id => :tag_field 33 %td= f.text_area :tag_list, :placeholder => "project tags", :style => "height:50px", :id => :tag_field
  34 + %tr
  35 + %td= f.label :description
  36 + %td= f.text_area :description, :placeholder => "project description", :style => "height:50px"
32 37
33 - .field  
34 - = f.label :description  
35 - %br/  
36 - = f.text_area :description, :style => "height:140px;width:932px;"  
37 - .clear  
38 - %hr.prepend-top 38 + %br
39 .actions 39 .actions
40 - = f.submit :class => "lbutton vm" 40 + = f.submit :class => "button"
41 41
42 %div{ :class => "ajax_loader", :style => "display:none;height:200px;"} 42 %div{ :class => "ajax_loader", :style => "display:none;height:200px;"}
43 %center 43 %center
@@ -55,16 +55,5 @@ @@ -55,16 +55,5 @@
55 55
56 :javascript 56 :javascript
57 $(function(){ 57 $(function(){
58 - var tag_field = $('#tag_field').tagify();  
59 -  
60 - tag_field.tagify('inputField').autocomplete({  
61 - source: '/tags.json'  
62 - });  
63 -  
64 -  
65 - $('form').submit( function() {  
66 - var tag_field = $('#tag_field')  
67 - tag_field.val( tag_field.tagify('serialize') );  
68 - return true;  
69 - }); 58 + taggifyForm();
70 }) 59 })
app/views/projects/_list.html.haml
@@ -12,9 +12,8 @@ @@ -12,9 +12,8 @@
12 %tr{ :class => "project", :url => project_path(project) } 12 %tr{ :class => "project", :url => project_path(project) }
13 %td 13 %td
14 = project.name 14 = project.name
15 - .small-tags  
16 - - project.tag_list.each do |tag|  
17 - = link_to tag, "/tags/#{tag}" 15 + .small-tags= tag_list project
  16 +
18 17
19 %td= truncate project.url_to_repo 18 %td= truncate project.url_to_repo
20 %td= project.code 19 %td= project.code
app/views/projects/_recent_commits.html.haml
1 -- @commits.each do |commit|  
2 - %div.commit  
3 - - if commit.author.email  
4 - = image_tag gravatar_icon(commit.author.email), :class => "left", :width => 40, :style => "padding-right:5px;"  
5 - - else  
6 - = image_tag "no_avatar.png", :class => "left", :width => 40, :style => "padding-right:5px;"  
7 - %p{:style => "margin-bottom: 3px;"}  
8 - %strong  
9 - = link_to truncate(commit.safe_message, :length => 60), project_commit_path(@project, :id => commit.id)  
10 -  
11 - %span  
12 - %span.author  
13 - = commit.author.name.force_encoding("UTF-8")  
14 - %cite  
15 - = time_ago_in_words(commit.committed_date)  
16 - ago  
17 - %br 1 +%table
  2 + %thead
  3 + %th
  4 + Commits
  5 + .filter.right
  6 + = form_tag project_path(@project), :method => :get, :class => "right" do
  7 + .left
  8 + = radio_button_tag :view, "recent", (params[:view] || "recent") == "recent", :onclick => "this.form.submit()", :id => "recent_view"
  9 + = label_tag "recent_view","Recent"
  10 + .left
  11 + = radio_button_tag :view, "day", params[:view] == "day", :onclick => "this.form.submit()", :id => "day_view"
  12 + = label_tag "day_view","Today"
  13 + .left
  14 + = radio_button_tag :view, "week", params[:view] == "week", :onclick => "this.form.submit()", :id => "week_view"
  15 + = label_tag "week_view","Week"
  16 + - @commits.each do |commit|
  17 + %tr
  18 + %td
  19 + %div.commit
  20 + - if commit.author.email
  21 + = image_tag gravatar_icon(commit.author.email), :class => "left", :width => 40, :style => "padding-right:5px;"
  22 + - else
  23 + = image_tag "no_avatar.png", :class => "left", :width => 40, :style => "padding-right:5px;"
  24 + .title
  25 + %p= link_to truncate(commit.safe_message, :length => fixed_mode? ? 40 : 100), project_commit_path(@project, :id => commit.id)
18 26
  27 + %span
  28 + %span.author
  29 + %strong= commit.author.name.force_encoding("UTF-8")
  30 + %cite.cgray
  31 + = time_ago_in_words(commit.committed_date)
  32 + ago
app/views/projects/_recent_messages.html.haml
@@ -3,50 +3,25 @@ @@ -3,50 +3,25 @@
3 - parent = load_note_parent(id, type, @project) 3 - parent = load_note_parent(id, type, @project)
4 - next unless parent 4 - next unless parent
5 5
6 - - case type  
7 - - when "Issue"  
8 - - css_class = "dash_issue"  
9 - - issue = parent  
10 - - item_code = issue.author.email  
11 - - link_item_name = truncate(issue.title, :length => 50)  
12 - - link_to_item = project_issue_path(@project, issue)  
13 - - when "Snippet"  
14 - - css_class = "dash_snippet"  
15 - - item_code = parent.author.email  
16 - - link_item_name = parent.title  
17 - - link_to_item = project_snippet_path(@project, parent)  
18 - - when "Commit"  
19 - - css_class = "dash_commit"  
20 - - commit = parent  
21 - - item_code = commit.author.email  
22 - - link_item_name = truncate(commit.safe_message, :length => 50)  
23 - - link_to_item = project_commit_path(@project, :id => commit.id)  
24 - - else  
25 - - css_class = "dash_wall"  
26 - - item_code = @project.name  
27 - - link_item_name = "Project Wall"  
28 - - link_to_item = wall_project_path(@project)  
29 -  
30 - %div{ :class => "recent_message_parent #{css_class}"}  
31 - = image_tag gravatar_icon(item_code), :class => "left", :width => 40  
32 - %h4  
33 - = link_to(link_item_name, link_to_item)  
34 - %span  
35 - = type  
36 - .clear  
37 - - notes.sort {|x,y| x.updated_at <=> y.updated_at }.each do |note|  
38 - %div.message  
39 - = image_tag gravatar_icon(note.author.email), :class => "left", :width => 24, :style => "padding-right:5px;"  
40 - %p{:style => "margin-bottom: 3px;"}  
41 - %span.author  
42 - = note.author.name  
43 - = link_to markdown(truncate(note.note, :length => 200)), link_to_item + "#note_#{note.id}"  
44 - - if note.attachment.url  
45 - %br  
46 - Attachment:  
47 - = link_to note.attachment_identifier, note.attachment.url  
48 - %br  
49 - %br  
50 - .append-bottom  
51 - &nbsp;  
52 - .clear 6 + %table
  7 + %thead
  8 + %th
  9 + %div{ :class => "recent_message_parent"}
  10 + = link_to(truncate(dashboard_feed_title(parent), :length => fixed_mode? ? 40 : 100 ), dashboard_feed_path(@project, parent))
  11 + - notes.sort {|x,y| y.updated_at <=> x.updated_at }.each do |note|
  12 + %tr
  13 + %td
  14 + %div.message
  15 + = image_tag gravatar_icon(note.author_email), :class => "left", :width => 40, :style => "padding-right:5px;"
  16 + %div.title
  17 + = link_to markdown(truncate(note.note, :length => fixed_mode? ? 40 : 100)), dashboard_feed_path(@project, parent) + "#note_#{note.id}"
  18 + - if note.attachment.url
  19 + %br
  20 + Attachment:
  21 + = link_to note.attachment_identifier, note.attachment.url
  22 + %div.author
  23 + %strong= note.author_name
  24 + %cite.cgray
  25 + = time_ago_in_words(note.updated_at)
  26 + ago
  27 + %br
app/views/projects/_tile.html.haml
@@ -13,9 +13,7 @@ @@ -13,9 +13,7 @@
13 - last_note = project.notes.last 13 - last_note = project.notes.last
14 = last_note ? last_note.created_at.stamp("24 Aug, 2011") : "Never" 14 = last_note ? last_note.created_at.stamp("24 Aug, 2011") : "Never"
15 15
16 - %p.small-tags  
17 - - project.tag_list.each do |tag|  
18 - = link_to tag, "/tags/#{tag}" 16 + %p.small-tags= tag_list project
19 17
20 .buttons 18 .buttons
21 %a.browse-code.button.yellow{:href => tree_project_path(project)} Browse code 19 %a.browse-code.button.yellow{:href => tree_project_path(project)} Browse code
app/views/projects/new.html.erb
@@ -1 +0,0 @@ @@ -1 +0,0 @@
1 -<%= render 'form' %>  
app/views/projects/new.html.haml 0 → 100644
@@ -0,0 +1,8 @@ @@ -0,0 +1,8 @@
  1 +.new-project-hodler
  2 + .container_4
  3 + %h2.icon
  4 + %span
  5 + New Project
  6 +
  7 + %div.clear
  8 + = render 'form'
app/views/projects/show.html.haml
1 -%div  
2 - %h2.left History  
3 - .right  
4 - = form_tag project_path(@project), :method => :get do  
5 - .span-2  
6 - = radio_button_tag :view, "recent", (params[:view] || "recent") == "recent", :onclick => "this.form.submit()", :id => "recent_view"  
7 - = label_tag "recent_view","Recent"  
8 - .span-2  
9 - = radio_button_tag :view, "day", params[:view] == "day", :onclick => "this.form.submit()", :id => "day_view"  
10 - = label_tag "day_view","Today"  
11 - .span-2  
12 - = radio_button_tag :view, "week", params[:view] == "week", :onclick => "this.form.submit()", :id => "week_view"  
13 - = label_tag "week_view","Week"  
14 - .clear  
15 - %hr  
16 .left.width-49p 1 .left.width-49p
17 - %h3 Commits  
18 =render "projects/recent_commits" 2 =render "projects/recent_commits"
19 3
20 .right.width-49p 4 .right.width-49p
21 - %h3 Talk  
22 =render "projects/recent_messages" 5 =render "projects/recent_messages"
23 6
24 :javascript 7 :javascript
25 function updateDashboard(){ 8 function updateDashboard(){
26 - $('#content-container').load("#{escape_javascript(project_path(@project))} #content-container>*"); 9 + $('.project-content').load("#{escape_javascript(project_path(@project))} .project-content>*");
27 } 10 }
28 setInterval("updateDashboard()", 300000); 11 setInterval("updateDashboard()", 300000);
app/views/tags/index.html.haml
@@ -7,5 +7,5 @@ @@ -7,5 +7,5 @@
7 7
8 .tags-list 8 .tags-list
9 - @tags.all.each do |tag| 9 - @tags.all.each do |tag|
10 - = link_to "#{tag.name}(#{tag.count})", "/tags/#{tag.name}" 10 + = link_to "#{tag.name}(#{tag.count})", tag_path(name)
11 11
public/.directory 0 → 100644
@@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
  1 +[Dolphin]
  2 +ShowPreview=true
  3 +Timestamp=2011,11,6,21,7,47
  4 +Version=2
spec/requests/issues_spec.rb
@@ -158,7 +158,6 @@ describe &quot;Issues&quot; do @@ -158,7 +158,6 @@ describe &quot;Issues&quot; do
158 it "should have valid show page for issue" do 158 it "should have valid show page for issue" do
159 page.should have_content @issue.title 159 page.should have_content @issue.title
160 page.should have_content @user.name 160 page.should have_content @user.name
161 - page.should have_content "today"  
162 end 161 end
163 end 162 end
164 163
@@ -169,6 +168,7 @@ describe &quot;Issues&quot; do @@ -169,6 +168,7 @@ describe &quot;Issues&quot; do
169 :assignee => @user, 168 :assignee => @user,
170 :project => project 169 :project => project
171 visit project_issues_path(project) 170 visit project_issues_path(project)
  171 + page.execute_script("$('.action-links').css('display', 'block');")
172 click_link "Edit" 172 click_link "Edit"
173 end 173 end
174 174
vendor/assets/stylesheets/jquery-ui/jquery-ui.css
@@ -59,7 +59,7 @@ @@ -59,7 +59,7 @@
59 .ui-widget { font-family: "Helvetica Neue",Arial,Helvetica,sans-serif; font-size: 1.1em; } 59 .ui-widget { font-family: "Helvetica Neue",Arial,Helvetica,sans-serif; font-size: 1.1em; }
60 .ui-widget .ui-widget { font-size: 1em; } 60 .ui-widget .ui-widget { font-size: 1em; }
61 .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; } 61 .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; }
62 -.ui-widget-content { border: 1px solid #dddddd; background: #ffffff url(ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; } 62 +.ui-widget-content { border: 1px solid #474D57; background: #ffffff url(ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; }
63 .ui-widget-content a { color: #222222; } 63 .ui-widget-content a { color: #222222; }
64 .ui-widget-header { color: #222222; font-weight: bold; } 64 .ui-widget-header { color: #222222; font-weight: bold; }
65 .ui-widget-header a { color: #222222; } 65 .ui-widget-header a { color: #222222; }
@@ -445,8 +445,8 @@ button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra pad @@ -445,8 +445,8 @@ button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra pad
445 * http://docs.jquery.com/UI/Dialog#theming 445 * http://docs.jquery.com/UI/Dialog#theming
446 */ 446 */
447 .ui-dialog { position: absolute; padding: 0; width: 300px; overflow: hidden; } 447 .ui-dialog { position: absolute; padding: 0; width: 300px; overflow: hidden; }
448 -.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; background: #F7F7F7; color:#555; }  
449 -.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0;} 448 +.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; background: #474D57; color:#eee; }
  449 +.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; text-shadow: none;}
450 .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} 450 .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}
451 .ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } 451 .ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
452 .ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } 452 .ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }