##// END OF EJS Templates
Autocomplete issue relations on subject (#3170)....
Jean-Philippe Lang -
r4388:a8b12bcb5202
parent child
Show More
@@ -1,25 +1,26
1 1 class AutoCompletesController < ApplicationController
2 2 before_filter :find_project
3 3
4 4 def issues
5 5 @issues = []
6 6 q = params[:q].to_s
7 query = (params[:scope] == "all" && Setting.cross_project_issue_relations?) ? Issue : @project.issues
7 8 if q.match(/^\d+$/)
8 @issues << @project.issues.visible.find_by_id(q.to_i)
9 @issues << query.visible.find_by_id(q.to_i)
9 10 end
10 11 unless q.blank?
11 @issues += @project.issues.visible.find(:all, :conditions => ["LOWER(#{Issue.table_name}.subject) LIKE ?", "%#{q.downcase}%"], :limit => 10)
12 @issues += query.visible.find(:all, :conditions => ["LOWER(#{Issue.table_name}.subject) LIKE ?", "%#{q.downcase}%"], :limit => 10)
12 13 end
13 14 render :layout => false
14 15 end
15 16
16 17 private
17 18
18 19 def find_project
19 20 project_id = (params[:issue] && params[:issue][:project_id]) || params[:project_id]
20 21 @project = Project.find(project_id)
21 22 rescue ActiveRecord::RecordNotFound
22 23 render_404
23 24 end
24 25
25 26 end
@@ -1,12 +1,14
1 1 <%= error_messages_for 'relation' %>
2 2
3 3 <p><%= f.select :relation_type, collection_for_relation_type_select, {}, :onchange => "setPredecessorFieldsVisibility();" %>
4 <%= l(:label_issue) %> #<%= f.text_field :issue_to_id, :size => 6 %>
4 <%= l(:label_issue) %> #<%= f.text_field :issue_to_id, :size => 10 %>
5 <div id="related_issue_candidates" class="autocomplete"></div>
6 <%= javascript_tag "observeRelatedIssueField('#{auto_complete_issues_path(:id => @issue, :project_id => @project) }')" %>
5 7 <span id="predecessor_fields" style="display:none;">
6 8 <%= l(:field_delay) %>: <%= f.text_field :delay, :size => 3 %> <%= l(:label_day_plural) %>
7 9 </span>
8 10 <%= submit_tag l(:button_add) %>
9 11 <%= toggle_link l(:button_cancel), 'new-relation-form'%>
10 12 </p>
11 13
12 14 <%= javascript_tag "setPredecessorFieldsVisibility();" %>
@@ -1,241 +1,255
1 1 /* redMine - project management software
2 2 Copyright (C) 2006-2008 Jean-Philippe Lang */
3 3
4 4 function checkAll (id, checked) {
5 5 var els = Element.descendants(id);
6 6 for (var i = 0; i < els.length; i++) {
7 7 if (els[i].disabled==false) {
8 8 els[i].checked = checked;
9 9 }
10 10 }
11 11 }
12 12
13 13 function toggleCheckboxesBySelector(selector) {
14 14 boxes = $$(selector);
15 15 var all_checked = true;
16 16 for (i = 0; i < boxes.length; i++) { if (boxes[i].checked == false) { all_checked = false; } }
17 17 for (i = 0; i < boxes.length; i++) { boxes[i].checked = !all_checked; }
18 18 }
19 19
20 20 function setCheckboxesBySelector(checked, selector) {
21 21 var boxes = $$(selector);
22 22 boxes.each(function(ele) {
23 23 ele.checked = checked;
24 24 });
25 25 }
26 26
27 27 function showAndScrollTo(id, focus) {
28 28 Element.show(id);
29 29 if (focus!=null) { Form.Element.focus(focus); }
30 30 Element.scrollTo(id);
31 31 }
32 32
33 33 function toggleRowGroup(el) {
34 34 var tr = Element.up(el, 'tr');
35 35 var n = Element.next(tr);
36 36 tr.toggleClassName('open');
37 37 while (n != undefined && !n.hasClassName('group')) {
38 38 Element.toggle(n);
39 39 n = Element.next(n);
40 40 }
41 41 }
42 42
43 43 function toggleFieldset(el) {
44 44 var fieldset = Element.up(el, 'fieldset');
45 45 fieldset.toggleClassName('collapsed');
46 46 Effect.toggle(fieldset.down('div'), 'slide', {duration:0.2});
47 47 }
48 48
49 49 var fileFieldCount = 1;
50 50
51 51 function addFileField() {
52 52 if (fileFieldCount >= 10) return false
53 53 fileFieldCount++;
54 54 var f = document.createElement("input");
55 55 f.type = "file";
56 56 f.name = "attachments[" + fileFieldCount + "][file]";
57 57 f.size = 30;
58 58 var d = document.createElement("input");
59 59 d.type = "text";
60 60 d.name = "attachments[" + fileFieldCount + "][description]";
61 61 d.size = 60;
62 62 var dLabel = new Element('label');
63 63 dLabel.addClassName('inline');
64 64 // Pulls the languge value used for Optional Description
65 65 dLabel.update($('attachment_description_label_content').innerHTML)
66 66 p = document.getElementById("attachments_fields");
67 67 p.appendChild(document.createElement("br"));
68 68 p.appendChild(f);
69 69 p.appendChild(dLabel);
70 70 dLabel.appendChild(d);
71 71
72 72 }
73 73
74 74 function showTab(name) {
75 75 var f = $$('div#content .tab-content');
76 76 for(var i=0; i<f.length; i++){
77 77 Element.hide(f[i]);
78 78 }
79 79 var f = $$('div.tabs a');
80 80 for(var i=0; i<f.length; i++){
81 81 Element.removeClassName(f[i], "selected");
82 82 }
83 83 Element.show('tab-content-' + name);
84 84 Element.addClassName('tab-' + name, "selected");
85 85 return false;
86 86 }
87 87
88 88 function moveTabRight(el) {
89 89 var lis = Element.up(el, 'div.tabs').down('ul').childElements();
90 90 var tabsWidth = 0;
91 91 var i;
92 92 for (i=0; i<lis.length; i++) {
93 93 if (lis[i].visible()) {
94 94 tabsWidth += lis[i].getWidth() + 6;
95 95 }
96 96 }
97 97 if (tabsWidth < Element.up(el, 'div.tabs').getWidth() - 60) {
98 98 return;
99 99 }
100 100 i=0;
101 101 while (i<lis.length && !lis[i].visible()) {
102 102 i++;
103 103 }
104 104 lis[i].hide();
105 105 }
106 106
107 107 function moveTabLeft(el) {
108 108 var lis = Element.up(el, 'div.tabs').down('ul').childElements();
109 109 var i = 0;
110 110 while (i<lis.length && !lis[i].visible()) {
111 111 i++;
112 112 }
113 113 if (i>0) {
114 114 lis[i-1].show();
115 115 }
116 116 }
117 117
118 118 function displayTabsButtons() {
119 119 var lis;
120 120 var tabsWidth = 0;
121 121 var i;
122 122 $$('div.tabs').each(function(el) {
123 123 lis = el.down('ul').childElements();
124 124 for (i=0; i<lis.length; i++) {
125 125 if (lis[i].visible()) {
126 126 tabsWidth += lis[i].getWidth() + 6;
127 127 }
128 128 }
129 129 if ((tabsWidth < el.getWidth() - 60) && (lis[0].visible())) {
130 130 el.down('div.tabs-buttons').hide();
131 131 } else {
132 132 el.down('div.tabs-buttons').show();
133 133 }
134 134 });
135 135 }
136 136
137 137 function setPredecessorFieldsVisibility() {
138 138 relationType = $('relation_relation_type');
139 139 if (relationType && (relationType.value == "precedes" || relationType.value == "follows")) {
140 140 Element.show('predecessor_fields');
141 141 } else {
142 142 Element.hide('predecessor_fields');
143 143 }
144 144 }
145 145
146 146 function promptToRemote(text, param, url) {
147 147 value = prompt(text + ':');
148 148 if (value) {
149 149 new Ajax.Request(url + '?' + param + '=' + encodeURIComponent(value), {asynchronous:true, evalScripts:true});
150 150 return false;
151 151 }
152 152 }
153 153
154 154 function collapseScmEntry(id) {
155 155 var els = document.getElementsByClassName(id, 'browser');
156 156 for (var i = 0; i < els.length; i++) {
157 157 if (els[i].hasClassName('open')) {
158 158 collapseScmEntry(els[i].id);
159 159 }
160 160 Element.hide(els[i]);
161 161 }
162 162 $(id).removeClassName('open');
163 163 }
164 164
165 165 function expandScmEntry(id) {
166 166 var els = document.getElementsByClassName(id, 'browser');
167 167 for (var i = 0; i < els.length; i++) {
168 168 Element.show(els[i]);
169 169 if (els[i].hasClassName('loaded') && !els[i].hasClassName('collapsed')) {
170 170 expandScmEntry(els[i].id);
171 171 }
172 172 }
173 173 $(id).addClassName('open');
174 174 }
175 175
176 176 function scmEntryClick(id) {
177 177 el = $(id);
178 178 if (el.hasClassName('open')) {
179 179 collapseScmEntry(id);
180 180 el.addClassName('collapsed');
181 181 return false;
182 182 } else if (el.hasClassName('loaded')) {
183 183 expandScmEntry(id);
184 184 el.removeClassName('collapsed');
185 185 return false;
186 186 }
187 187 if (el.hasClassName('loading')) {
188 188 return false;
189 189 }
190 190 el.addClassName('loading');
191 191 return true;
192 192 }
193 193
194 194 function scmEntryLoaded(id) {
195 195 Element.addClassName(id, 'open');
196 196 Element.addClassName(id, 'loaded');
197 197 Element.removeClassName(id, 'loading');
198 198 }
199 199
200 200 function randomKey(size) {
201 201 var chars = new Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');
202 202 var key = '';
203 203 for (i = 0; i < size; i++) {
204 204 key += chars[Math.floor(Math.random() * chars.length)];
205 205 }
206 206 return key;
207 207 }
208 208
209 209 function observeParentIssueField(url) {
210 210 new Ajax.Autocompleter('issue_parent_issue_id',
211 211 'parent_issue_candidates',
212 212 url,
213 213 { minChars: 3,
214 214 frequency: 0.5,
215 215 paramName: 'q',
216 216 updateElement: function(value) {
217 217 document.getElementById('issue_parent_issue_id').value = value.id;
218 218 }});
219 219 }
220 220
221 function observeRelatedIssueField(url) {
222 new Ajax.Autocompleter('relation_issue_to_id',
223 'related_issue_candidates',
224 url,
225 { minChars: 3,
226 frequency: 0.5,
227 paramName: 'q',
228 updateElement: function(value) {
229 document.getElementById('relation_issue_to_id').value = value.id;
230 },
231 parameters: 'scope=all'
232 });
233 }
234
221 235 /* shows and hides ajax indicator */
222 236 Ajax.Responders.register({
223 237 onCreate: function(){
224 238 if ($('ajax-indicator') && Ajax.activeRequestCount > 0) {
225 239 Element.show('ajax-indicator');
226 240 }
227 241 },
228 242 onComplete: function(){
229 243 if ($('ajax-indicator') && Ajax.activeRequestCount == 0) {
230 244 Element.hide('ajax-indicator');
231 245 }
232 246 }
233 247 });
234 248
235 249 function hideOnLoad() {
236 250 $$('.hol').each(function(el) {
237 251 el.hide();
238 252 });
239 253 }
240 254
241 255 Event.observe(window, 'load', hideOnLoad);
@@ -1,944 +1,945
1 1 body { font-family: Verdana, sans-serif; font-size: 12px; color:#484848; margin: 0; padding: 0; min-width: 900px; }
2 2
3 3 h1, h2, h3, h4 { font-family: "Trebuchet MS", Verdana, sans-serif;}
4 4 h1 {margin:0; padding:0; font-size: 24px;}
5 5 h2, .wiki h1 {font-size: 20px;padding: 2px 10px 1px 0px;margin: 0 0 10px 0; border-bottom: 1px solid #bbbbbb; color: #444;}
6 6 h3, .wiki h2 {font-size: 16px;padding: 2px 10px 1px 0px;margin: 0 0 10px 0; border-bottom: 1px solid #bbbbbb; color: #444;}
7 7 h4, .wiki h3 {font-size: 13px;padding: 2px 10px 1px 0px;margin-bottom: 5px; border-bottom: 1px dotted #bbbbbb; color: #444;}
8 8
9 9 /***** Layout *****/
10 10 #wrapper {background: white;}
11 11
12 12 #top-menu {background: #2C4056; color: #fff; height:1.8em; font-size: 0.8em; padding: 2px 2px 0px 6px;}
13 13 #top-menu ul {margin: 0; padding: 0;}
14 14 #top-menu li {
15 15 float:left;
16 16 list-style-type:none;
17 17 margin: 0px 0px 0px 0px;
18 18 padding: 0px 0px 0px 0px;
19 19 white-space:nowrap;
20 20 }
21 21 #top-menu a {color: #fff; margin-right: 8px; font-weight: bold;}
22 22 #top-menu #loggedas { float: right; margin-right: 0.5em; color: #fff; }
23 23
24 24 #account {float:right;}
25 25
26 26 #header {height:5.3em;margin:0;background-color:#507AAA;color:#f8f8f8; padding: 4px 8px 0px 6px; position:relative;}
27 27 #header a {color:#f8f8f8;}
28 28 #header h1 a.ancestor { font-size: 80%; }
29 29 #quick-search {float:right;}
30 30
31 31 #main-menu {position: absolute; bottom: 0px; left:6px; margin-right: -500px;}
32 32 #main-menu ul {margin: 0; padding: 0;}
33 33 #main-menu li {
34 34 float:left;
35 35 list-style-type:none;
36 36 margin: 0px 2px 0px 0px;
37 37 padding: 0px 0px 0px 0px;
38 38 white-space:nowrap;
39 39 }
40 40 #main-menu li a {
41 41 display: block;
42 42 color: #fff;
43 43 text-decoration: none;
44 44 font-weight: bold;
45 45 margin: 0;
46 46 padding: 4px 10px 4px 10px;
47 47 }
48 48 #main-menu li a:hover {background:#759FCF; color:#fff;}
49 49 #main-menu li a.selected, #main-menu li a.selected:hover {background:#fff; color:#555;}
50 50
51 51 #admin-menu ul {margin: 0; padding: 0;}
52 52 #admin-menu li {margin: 0; padding: 0 0 12px 0; list-style-type:none;}
53 53
54 54 #admin-menu a { background-position: 0% 40%; background-repeat: no-repeat; padding-left: 20px; padding-top: 2px; padding-bottom: 3px;}
55 55 #admin-menu a.projects { background-image: url(../images/projects.png); }
56 56 #admin-menu a.users { background-image: url(../images/user.png); }
57 57 #admin-menu a.groups { background-image: url(../images/group.png); }
58 58 #admin-menu a.roles { background-image: url(../images/database_key.png); }
59 59 #admin-menu a.trackers { background-image: url(../images/ticket.png); }
60 60 #admin-menu a.issue_statuses { background-image: url(../images/ticket_edit.png); }
61 61 #admin-menu a.workflows { background-image: url(../images/ticket_go.png); }
62 62 #admin-menu a.custom_fields { background-image: url(../images/textfield.png); }
63 63 #admin-menu a.enumerations { background-image: url(../images/text_list_bullets.png); }
64 64 #admin-menu a.settings { background-image: url(../images/changeset.png); }
65 65 #admin-menu a.plugins { background-image: url(../images/plugin.png); }
66 66 #admin-menu a.info { background-image: url(../images/help.png); }
67 67 #admin-menu a.server_authentication { background-image: url(../images/server_key.png); }
68 68
69 69 #main {background-color:#EEEEEE;}
70 70
71 71 #sidebar{ float: right; width: 22%; position: relative; z-index: 9; padding: 0; margin: 0;}
72 72 * html #sidebar{ width: 22%; }
73 73 #sidebar h3{ font-size: 14px; margin-top:14px; color: #666; }
74 74 #sidebar hr{ width: 100%; margin: 0 auto; height: 1px; background: #ccc; border: 0; }
75 75 * html #sidebar hr{ width: 95%; position: relative; left: -6px; color: #ccc; }
76 76 #sidebar .contextual { margin-right: 1em; }
77 77
78 78 #content { width: 75%; background-color: #fff; margin: 0px; border-right: 1px solid #ddd; padding: 6px 10px 10px 10px; z-index: 10; }
79 79 * html #content{ width: 75%; padding-left: 0; margin-top: 0px; padding: 6px 10px 10px 10px;}
80 80 html>body #content { min-height: 600px; }
81 81 * html body #content { height: 600px; } /* IE */
82 82
83 83 #main.nosidebar #sidebar{ display: none; }
84 84 #main.nosidebar #content{ width: auto; border-right: 0; }
85 85
86 86 #footer {clear: both; border-top: 1px solid #bbb; font-size: 0.9em; color: #aaa; padding: 5px; text-align:center; background:#fff;}
87 87
88 88 #login-form table {margin-top:5em; padding:1em; margin-left: auto; margin-right: auto; border: 2px solid #FDBF3B; background-color:#FFEBC1; }
89 89 #login-form table td {padding: 6px;}
90 90 #login-form label {font-weight: bold;}
91 91 #login-form input#username, #login-form input#password { width: 300px; }
92 92
93 93 input#openid_url { background: url(../images/openid-bg.gif) no-repeat; background-color: #fff; background-position: 0 50%; padding-left: 18px; }
94 94
95 95 .clear:after{ content: "."; display: block; height: 0; clear: both; visibility: hidden; }
96 96
97 97 /***** Links *****/
98 98 a, a:link, a:visited{ color: #2A5685; text-decoration: none; }
99 99 a:hover, a:active{ color: #c61a1a; text-decoration: underline;}
100 100 a img{ border: 0; }
101 101
102 102 a.issue.closed, a.issue.closed:link, a.issue.closed:visited { color: #999; text-decoration: line-through; }
103 103
104 104 /***** Tables *****/
105 105 table.list { border: 1px solid #e4e4e4; border-collapse: collapse; width: 100%; margin-bottom: 4px; }
106 106 table.list th { background-color:#EEEEEE; padding: 4px; white-space:nowrap; }
107 107 table.list td { vertical-align: top; }
108 108 table.list td.id { width: 2%; text-align: center;}
109 109 table.list td.checkbox { width: 15px; padding: 0px;}
110 110 table.list td.buttons { width: 15%; white-space:nowrap; text-align: right; }
111 111 table.list td.buttons a { padding-right: 0.6em; }
112 112 table.list caption { text-align: left; padding: 0.5em 0.5em 0.5em 0; }
113 113
114 114 tr.project td.name a { white-space:nowrap; }
115 115
116 116 tr.project.idnt td.name span {background: url(../images/bullet_arrow_right.png) no-repeat 0 50%; padding-left: 16px;}
117 117 tr.project.idnt-1 td.name {padding-left: 0.5em;}
118 118 tr.project.idnt-2 td.name {padding-left: 2em;}
119 119 tr.project.idnt-3 td.name {padding-left: 3.5em;}
120 120 tr.project.idnt-4 td.name {padding-left: 5em;}
121 121 tr.project.idnt-5 td.name {padding-left: 6.5em;}
122 122 tr.project.idnt-6 td.name {padding-left: 8em;}
123 123 tr.project.idnt-7 td.name {padding-left: 9.5em;}
124 124 tr.project.idnt-8 td.name {padding-left: 11em;}
125 125 tr.project.idnt-9 td.name {padding-left: 12.5em;}
126 126
127 127 tr.issue { text-align: center; white-space: nowrap; }
128 128 tr.issue td.subject, tr.issue td.category, td.assigned_to { white-space: normal; }
129 129 tr.issue td.subject { text-align: left; }
130 130 tr.issue td.done_ratio table.progress { margin-left:auto; margin-right: auto;}
131 131
132 132 tr.issue.idnt td.subject a {background: url(../images/bullet_arrow_right.png) no-repeat 0 50%; padding-left: 16px;}
133 133 tr.issue.idnt-1 td.subject {padding-left: 0.5em;}
134 134 tr.issue.idnt-2 td.subject {padding-left: 2em;}
135 135 tr.issue.idnt-3 td.subject {padding-left: 3.5em;}
136 136 tr.issue.idnt-4 td.subject {padding-left: 5em;}
137 137 tr.issue.idnt-5 td.subject {padding-left: 6.5em;}
138 138 tr.issue.idnt-6 td.subject {padding-left: 8em;}
139 139 tr.issue.idnt-7 td.subject {padding-left: 9.5em;}
140 140 tr.issue.idnt-8 td.subject {padding-left: 11em;}
141 141 tr.issue.idnt-9 td.subject {padding-left: 12.5em;}
142 142
143 143 tr.entry { border: 1px solid #f8f8f8; }
144 144 tr.entry td { white-space: nowrap; }
145 145 tr.entry td.filename { width: 30%; }
146 146 tr.entry td.size { text-align: right; font-size: 90%; }
147 147 tr.entry td.revision, tr.entry td.author { text-align: center; }
148 148 tr.entry td.age { text-align: right; }
149 149 tr.entry.file td.filename a { margin-left: 16px; }
150 150
151 151 tr span.expander {background-image: url(../images/bullet_toggle_plus.png); padding-left: 8px; margin-left: 0; cursor: pointer;}
152 152 tr.open span.expander {background-image: url(../images/bullet_toggle_minus.png);}
153 153
154 154 tr.changeset td.author { text-align: center; width: 15%; }
155 155 tr.changeset td.committed_on { text-align: center; width: 15%; }
156 156
157 157 table.files tr.file td { text-align: center; }
158 158 table.files tr.file td.filename { text-align: left; padding-left: 24px; }
159 159 table.files tr.file td.digest { font-size: 80%; }
160 160
161 161 table.members td.roles, table.memberships td.roles { width: 45%; }
162 162
163 163 tr.message { height: 2.6em; }
164 164 tr.message td.subject { padding-left: 20px; }
165 165 tr.message td.created_on { white-space: nowrap; }
166 166 tr.message td.last_message { font-size: 80%; white-space: nowrap; }
167 167 tr.message.locked td.subject { background: url(../images/locked.png) no-repeat 0 1px; }
168 168 tr.message.sticky td.subject { background: url(../images/bullet_go.png) no-repeat 0 1px; font-weight: bold; }
169 169
170 170 tr.version.closed, tr.version.closed a { color: #999; }
171 171 tr.version td.name { padding-left: 20px; }
172 172 tr.version.shared td.name { background: url(../images/link.png) no-repeat 0% 70%; }
173 173 tr.version td.date, tr.version td.status, tr.version td.sharing { text-align: center; }
174 174
175 175 tr.user td { width:13%; }
176 176 tr.user td.email { width:18%; }
177 177 tr.user td { white-space: nowrap; }
178 178 tr.user.locked, tr.user.registered { color: #aaa; }
179 179 tr.user.locked a, tr.user.registered a { color: #aaa; }
180 180
181 181 tr.time-entry { text-align: center; white-space: nowrap; }
182 182 tr.time-entry td.subject, tr.time-entry td.comments { text-align: left; white-space: normal; }
183 183 td.hours { text-align: right; font-weight: bold; padding-right: 0.5em; }
184 184 td.hours .hours-dec { font-size: 0.9em; }
185 185
186 186 table.plugins td { vertical-align: middle; }
187 187 table.plugins td.configure { text-align: right; padding-right: 1em; }
188 188 table.plugins span.name { font-weight: bold; display: block; margin-bottom: 6px; }
189 189 table.plugins span.description { display: block; font-size: 0.9em; }
190 190 table.plugins span.url { display: block; font-size: 0.9em; }
191 191
192 192 table.list tbody tr.group td { padding: 0.8em 0 0.5em 0.3em; font-weight: bold; border-bottom: 1px solid #ccc; }
193 193 table.list tbody tr.group span.count { color: #aaa; font-size: 80%; }
194 194
195 195 table.list tbody tr:hover { background-color:#ffffdd; }
196 196 table.list tbody tr.group:hover { background-color:inherit; }
197 197 table td {padding:2px;}
198 198 table p {margin:0;}
199 199 .odd {background-color:#f6f7f8;}
200 200 .even {background-color: #fff;}
201 201
202 202 a.sort { padding-right: 16px; background-position: 100% 50%; background-repeat: no-repeat; }
203 203 a.sort.asc { background-image: url(../images/sort_asc.png); }
204 204 a.sort.desc { background-image: url(../images/sort_desc.png); }
205 205
206 206 table.attributes { width: 100% }
207 207 table.attributes th { vertical-align: top; text-align: left; }
208 208 table.attributes td { vertical-align: top; }
209 209
210 210 table.boards a.board, h3.comments { background: url(../images/comment.png) no-repeat 0% 50%; padding-left: 20px; }
211 211
212 212 td.center {text-align:center;}
213 213
214 214 h3.version { background: url(../images/package.png) no-repeat 0% 50%; padding-left: 20px; }
215 215
216 216 div.issues h3 { background: url(../images/ticket.png) no-repeat 0% 50%; padding-left: 20px; }
217 217 div.members h3 { background: url(../images/group.png) no-repeat 0% 50%; padding-left: 20px; }
218 218 div.news h3 { background: url(../images/news.png) no-repeat 0% 50%; padding-left: 20px; }
219 219 div.projects h3 { background: url(../images/projects.png) no-repeat 0% 50%; padding-left: 20px; }
220 220
221 221 #watchers ul {margin: 0; padding: 0;}
222 222 #watchers li {list-style-type:none;margin: 0px 2px 0px 0px; padding: 0px 0px 0px 0px;}
223 223 #watchers select {width: 95%; display: block;}
224 224 #watchers a.delete {opacity: 0.4;}
225 225 #watchers a.delete:hover {opacity: 1;}
226 226 #watchers img.gravatar {vertical-align: middle;margin: 0 4px 2px 0;}
227 227
228 228 .highlight { background-color: #FCFD8D;}
229 229 .highlight.token-1 { background-color: #faa;}
230 230 .highlight.token-2 { background-color: #afa;}
231 231 .highlight.token-3 { background-color: #aaf;}
232 232
233 233 .box{
234 234 padding:6px;
235 235 margin-bottom: 10px;
236 236 background-color:#f6f6f6;
237 237 color:#505050;
238 238 line-height:1.5em;
239 239 border: 1px solid #e4e4e4;
240 240 }
241 241
242 242 div.square {
243 243 border: 1px solid #999;
244 244 float: left;
245 245 margin: .3em .4em 0 .4em;
246 246 overflow: hidden;
247 247 width: .6em; height: .6em;
248 248 }
249 249 .contextual {float:right; white-space: nowrap; line-height:1.4em;margin-top:5px; padding-left: 10px; font-size:0.9em;}
250 250 .contextual input, .contextual select {font-size:0.9em;}
251 251 .message .contextual { margin-top: 0; }
252 252
253 253 .splitcontentleft{float:left; width:49%;}
254 254 .splitcontentright{float:right; width:49%;}
255 255 form {display: inline;}
256 256 input, select {vertical-align: middle; margin-top: 1px; margin-bottom: 1px;}
257 257 fieldset {border: 1px solid #e4e4e4; margin:0;}
258 258 legend {color: #484848;}
259 259 hr { width: 100%; height: 1px; background: #ccc; border: 0;}
260 260 blockquote { font-style: italic; border-left: 3px solid #e0e0e0; padding-left: 0.6em; margin-left: 2.4em;}
261 261 blockquote blockquote { margin-left: 0;}
262 262 acronym { border-bottom: 1px dotted; cursor: help; }
263 263 textarea.wiki-edit { width: 99%; }
264 264 li p {margin-top: 0;}
265 265 div.issue {background:#ffffdd; padding:6px; margin-bottom:6px;border: 1px solid #d7d7d7;}
266 266 p.breadcrumb { font-size: 0.9em; margin: 4px 0 4px 0;}
267 267 p.subtitle { font-size: 0.9em; margin: -6px 0 12px 0; font-style: italic; }
268 268 p.footnote { font-size: 0.9em; margin-top: 0px; margin-bottom: 0px; }
269 269
270 270 div.issue div.subject div div { padding-left: 16px; }
271 271 div.issue div.subject p {margin: 0; margin-bottom: 0.1em; font-size: 90%; color: #999;}
272 272 div.issue div.subject>div>p { margin-top: 0.5em; }
273 273 div.issue div.subject h3 {margin: 0; margin-bottom: 0.1em;}
274 274
275 275 #issue_tree table.issues { border: 0; }
276 276 #issue_tree td.checkbox {display:none;}
277 277
278 278 fieldset.collapsible { border-width: 1px 0 0 0; font-size: 0.9em; }
279 279 fieldset.collapsible legend { padding-left: 16px; background: url(../images/arrow_expanded.png) no-repeat 0% 40%; cursor:pointer; }
280 280 fieldset.collapsible.collapsed legend { background-image: url(../images/arrow_collapsed.png); }
281 281
282 282 fieldset#date-range p { margin: 2px 0 2px 0; }
283 283 fieldset#filters table { border-collapse: collapse; }
284 284 fieldset#filters table td { padding: 0; vertical-align: middle; }
285 285 fieldset#filters tr.filter { height: 2em; }
286 286 fieldset#filters td.add-filter { text-align: right; vertical-align: top; }
287 287 .buttons { font-size: 0.9em; margin-bottom: 1.4em; margin-top: 1em; }
288 288
289 289 div#issue-changesets {float:right; width:45%; margin-left: 1em; margin-bottom: 1em; background: #fff; padding-left: 1em; font-size: 90%;}
290 290 div#issue-changesets div.changeset { padding: 4px;}
291 291 div#issue-changesets div.changeset { border-bottom: 1px solid #ddd; }
292 292 div#issue-changesets p { margin-top: 0; margin-bottom: 1em;}
293 293
294 294 div#activity dl, #search-results { margin-left: 2em; }
295 295 div#activity dd, #search-results dd { margin-bottom: 1em; padding-left: 18px; font-size: 0.9em; }
296 296 div#activity dt, #search-results dt { margin-bottom: 0px; padding-left: 20px; line-height: 18px; background-position: 0 50%; background-repeat: no-repeat; }
297 297 div#activity dt.me .time { border-bottom: 1px solid #999; }
298 298 div#activity dt .time { color: #777; font-size: 80%; }
299 299 div#activity dd .description, #search-results dd .description { font-style: italic; }
300 300 div#activity span.project:after, #search-results span.project:after { content: " -"; }
301 301 div#activity dd span.description, #search-results dd span.description { display:block; color: #808080; }
302 302
303 303 #search-results dd { margin-bottom: 1em; padding-left: 20px; margin-left:0px; }
304 304
305 305 div#search-results-counts {float:right;}
306 306 div#search-results-counts ul { margin-top: 0.5em; }
307 307 div#search-results-counts li { list-style-type:none; float: left; margin-left: 1em; }
308 308
309 309 dt.issue { background-image: url(../images/ticket.png); }
310 310 dt.issue-edit { background-image: url(../images/ticket_edit.png); }
311 311 dt.issue-closed { background-image: url(../images/ticket_checked.png); }
312 312 dt.issue-note { background-image: url(../images/ticket_note.png); }
313 313 dt.changeset { background-image: url(../images/changeset.png); }
314 314 dt.news { background-image: url(../images/news.png); }
315 315 dt.message { background-image: url(../images/message.png); }
316 316 dt.reply { background-image: url(../images/comments.png); }
317 317 dt.wiki-page { background-image: url(../images/wiki_edit.png); }
318 318 dt.attachment { background-image: url(../images/attachment.png); }
319 319 dt.document { background-image: url(../images/document.png); }
320 320 dt.project { background-image: url(../images/projects.png); }
321 321 dt.time-entry { background-image: url(../images/time.png); }
322 322
323 323 #search-results dt.issue.closed { background-image: url(../images/ticket_checked.png); }
324 324
325 325 div#roadmap .related-issues { margin-bottom: 1em; }
326 326 div#roadmap .related-issues td.checkbox { display: none; }
327 327 div#roadmap .wiki h1:first-child { display: none; }
328 328 div#roadmap .wiki h1 { font-size: 120%; }
329 329 div#roadmap .wiki h2 { font-size: 110%; }
330 330
331 331 div#version-summary { float:right; width:380px; margin-left: 16px; margin-bottom: 16px; background-color: #fff; }
332 332 div#version-summary fieldset { margin-bottom: 1em; }
333 333 div#version-summary .total-hours { text-align: right; }
334 334
335 335 table#time-report td.hours, table#time-report th.period, table#time-report th.total { text-align: right; padding-right: 0.5em; }
336 336 table#time-report tbody tr { font-style: italic; color: #777; }
337 337 table#time-report tbody tr.last-level { font-style: normal; color: #555; }
338 338 table#time-report tbody tr.total { font-style: normal; font-weight: bold; color: #555; background-color:#EEEEEE; }
339 339 table#time-report .hours-dec { font-size: 0.9em; }
340 340
341 341 form .attributes { margin-bottom: 8px; }
342 342 form .attributes p { padding-top: 1px; padding-bottom: 2px; }
343 343 form .attributes select { min-width: 50%; }
344 344
345 345 ul.projects { margin: 0; padding-left: 1em; }
346 346 ul.projects.root { margin: 0; padding: 0; }
347 347 ul.projects ul.projects { border-left: 3px solid #e0e0e0; }
348 348 ul.projects li.root { list-style-type:none; margin-bottom: 1em; }
349 349 ul.projects li.child { list-style-type:none; margin-top: 1em;}
350 350 ul.projects div.root a.project { font-family: "Trebuchet MS", Verdana, sans-serif; font-weight: bold; font-size: 16px; margin: 0 0 10px 0; }
351 351 .my-project { padding-left: 18px; background: url(../images/fav.png) no-repeat 0 50%; }
352 352
353 353 #tracker_project_ids ul { margin: 0; padding-left: 1em; }
354 354 #tracker_project_ids li { list-style-type:none; }
355 355
356 356 ul.properties {padding:0; font-size: 0.9em; color: #777;}
357 357 ul.properties li {list-style-type:none;}
358 358 ul.properties li span {font-style:italic;}
359 359
360 360 .total-hours { font-size: 110%; font-weight: bold; }
361 361 .total-hours span.hours-int { font-size: 120%; }
362 362
363 363 .autoscroll {overflow-x: auto; padding:1px; margin-bottom: 1.2em;}
364 364 #user_firstname, #user_lastname, #user_mail, #my_account_form select { width: 90%; }
365 365
366 366 #workflow_copy_form select { width: 200px; }
367 367
368 368 .pagination {font-size: 90%}
369 369 p.pagination {margin-top:8px;}
370 370
371 371 /***** Tabular forms ******/
372 372 .tabular p{
373 373 margin: 0;
374 374 padding: 5px 0 8px 0;
375 375 padding-left: 180px; /*width of left column containing the label elements*/
376 376 height: 1%;
377 377 clear:left;
378 378 }
379 379
380 380 html>body .tabular p {overflow:hidden;}
381 381
382 382 .tabular label{
383 383 font-weight: bold;
384 384 float: left;
385 385 text-align: right;
386 386 margin-left: -180px; /*width of left column*/
387 387 width: 175px; /*width of labels. Should be smaller than left column to create some right
388 388 margin*/
389 389 }
390 390
391 391 .tabular label.floating{
392 392 font-weight: normal;
393 393 margin-left: 0px;
394 394 text-align: left;
395 395 width: 270px;
396 396 }
397 397
398 398 .tabular label.block{
399 399 font-weight: normal;
400 400 margin-left: 0px !important;
401 401 text-align: left;
402 402 float: none;
403 403 display: block;
404 404 width: auto;
405 405 }
406 406
407 407 .tabular label.inline{
408 408 float:none;
409 409 margin-left: 5px !important;
410 410 width: auto;
411 411 }
412 412
413 413 input#time_entry_comments { width: 90%;}
414 414
415 415 #preview fieldset {margin-top: 1em; background: url(../images/draft.png)}
416 416
417 417 .tabular.settings p{ padding-left: 300px; }
418 418 .tabular.settings label{ margin-left: -300px; width: 295px; }
419 419 .tabular.settings textarea { width: 99%; }
420 420
421 421 fieldset.settings label { display: block; }
422 422 .parent { padding-left: 20px; }
423 423
424 424 .required {color: #bb0000;}
425 425 .summary {font-style: italic;}
426 426
427 427 #attachments_fields input[type=text] {margin-left: 8px; }
428 428
429 429 div.attachments { margin-top: 12px; }
430 430 div.attachments p { margin:4px 0 2px 0; }
431 431 div.attachments img { vertical-align: middle; }
432 432 div.attachments span.author { font-size: 0.9em; color: #888; }
433 433
434 434 p.other-formats { text-align: right; font-size:0.9em; color: #666; }
435 435 .other-formats span + span:before { content: "| "; }
436 436
437 437 a.atom { background: url(../images/feed.png) no-repeat 1px 50%; padding: 2px 0px 3px 16px; }
438 438
439 439 /* Project members tab */
440 440 div#tab-content-members .splitcontentleft, div#tab-content-memberships .splitcontentleft, div#tab-content-users .splitcontentleft { width: 64% }
441 441 div#tab-content-members .splitcontentright, div#tab-content-memberships .splitcontentright, div#tab-content-users .splitcontentright { width: 34% }
442 442 div#tab-content-members fieldset, div#tab-content-memberships fieldset, div#tab-content-users fieldset { padding:1em; margin-bottom: 1em; }
443 443 div#tab-content-members fieldset legend, div#tab-content-memberships fieldset legend, div#tab-content-users fieldset legend { font-weight: bold; }
444 444 div#tab-content-members fieldset label, div#tab-content-memberships fieldset label, div#tab-content-users fieldset label { display: block; }
445 445 div#tab-content-members fieldset div, div#tab-content-users fieldset div { max-height: 400px; overflow:auto; }
446 446
447 447 table.members td.group { padding-left: 20px; background: url(../images/group.png) no-repeat 0% 50%; }
448 448
449 449 input#principal_search, input#user_search {width:100%}
450 450
451 451 * html div#tab-content-members fieldset div { height: 450px; }
452 452
453 453 /***** Flash & error messages ****/
454 454 #errorExplanation, div.flash, .nodata, .warning {
455 455 padding: 4px 4px 4px 30px;
456 456 margin-bottom: 12px;
457 457 font-size: 1.1em;
458 458 border: 2px solid;
459 459 }
460 460
461 461 div.flash {margin-top: 8px;}
462 462
463 463 div.flash.error, #errorExplanation {
464 464 background: url(../images/exclamation.png) 8px 50% no-repeat;
465 465 background-color: #ffe3e3;
466 466 border-color: #dd0000;
467 467 color: #880000;
468 468 }
469 469
470 470 div.flash.notice {
471 471 background: url(../images/true.png) 8px 5px no-repeat;
472 472 background-color: #dfffdf;
473 473 border-color: #9fcf9f;
474 474 color: #005f00;
475 475 }
476 476
477 477 div.flash.warning {
478 478 background: url(../images/warning.png) 8px 5px no-repeat;
479 479 background-color: #FFEBC1;
480 480 border-color: #FDBF3B;
481 481 color: #A6750C;
482 482 text-align: left;
483 483 }
484 484
485 485 .nodata, .warning {
486 486 text-align: center;
487 487 background-color: #FFEBC1;
488 488 border-color: #FDBF3B;
489 489 color: #A6750C;
490 490 }
491 491
492 492 #errorExplanation ul { font-size: 0.9em;}
493 493 #errorExplanation h2, #errorExplanation p { display: none; }
494 494
495 495 /***** Ajax indicator ******/
496 496 #ajax-indicator {
497 497 position: absolute; /* fixed not supported by IE */
498 498 background-color:#eee;
499 499 border: 1px solid #bbb;
500 500 top:35%;
501 501 left:40%;
502 502 width:20%;
503 503 font-weight:bold;
504 504 text-align:center;
505 505 padding:0.6em;
506 506 z-index:100;
507 507 filter:alpha(opacity=50);
508 508 opacity: 0.5;
509 509 }
510 510
511 511 html>body #ajax-indicator { position: fixed; }
512 512
513 513 #ajax-indicator span {
514 514 background-position: 0% 40%;
515 515 background-repeat: no-repeat;
516 516 background-image: url(../images/loading.gif);
517 517 padding-left: 26px;
518 518 vertical-align: bottom;
519 519 }
520 520
521 521 /***** Calendar *****/
522 522 table.cal {border-collapse: collapse; width: 100%; margin: 0px 0 6px 0;border: 1px solid #d7d7d7;}
523 523 table.cal thead th {width: 14%; background-color:#EEEEEE; padding: 4px; }
524 524 table.cal thead th.week-number {width: auto;}
525 525 table.cal tbody tr {height: 100px;}
526 526 table.cal td {border: 1px solid #d7d7d7; vertical-align: top; font-size: 0.9em;}
527 527 table.cal td.week-number { background-color:#EEEEEE; padding: 4px; border:none; font-size: 1em;}
528 528 table.cal td p.day-num {font-size: 1.1em; text-align:right;}
529 529 table.cal td.odd p.day-num {color: #bbb;}
530 530 table.cal td.today {background:#ffffdd;}
531 531 table.cal td.today p.day-num {font-weight: bold;}
532 532 table.cal .starting a, p.cal.legend .starting {background: url(../images/bullet_go.png) no-repeat -1px -2px; padding-left:16px;}
533 533 table.cal .ending a, p.cal.legend .ending {background: url(../images/bullet_end.png) no-repeat -1px -2px; padding-left:16px;}
534 534 table.cal .starting.ending a, p.cal.legend .starting.ending {background: url(../images/bullet_diamond.png) no-repeat -1px -2px; padding-left:16px;}
535 535 p.cal.legend span {display:block;}
536 536
537 537 /***** Tooltips ******/
538 538 .tooltip{position:relative;z-index:24;}
539 539 .tooltip:hover{z-index:25;color:#000;}
540 540 .tooltip span.tip{display: none; text-align:left;}
541 541
542 542 div.tooltip:hover span.tip{
543 543 display:block;
544 544 position:absolute;
545 545 top:12px; left:24px; width:270px;
546 546 border:1px solid #555;
547 547 background-color:#fff;
548 548 padding: 4px;
549 549 font-size: 0.8em;
550 550 color:#505050;
551 551 }
552 552
553 553 /***** Progress bar *****/
554 554 table.progress {
555 555 border: 1px solid #D7D7D7;
556 556 border-collapse: collapse;
557 557 border-spacing: 0pt;
558 558 empty-cells: show;
559 559 text-align: center;
560 560 float:left;
561 561 margin: 1px 6px 1px 0px;
562 562 }
563 563
564 564 table.progress td { height: 0.9em; }
565 565 table.progress td.closed { background: #BAE0BA none repeat scroll 0%; }
566 566 table.progress td.done { background: #DEF0DE none repeat scroll 0%; }
567 567 table.progress td.open { background: #FFF none repeat scroll 0%; }
568 568 p.pourcent {font-size: 80%;}
569 569 p.progress-info {clear: left; font-style: italic; font-size: 80%;}
570 570
571 571 /***** Tabs *****/
572 572 #content .tabs {height: 2.6em; margin-bottom:1.2em; position:relative; overflow:hidden;}
573 573 #content .tabs ul {margin:0; position:absolute; bottom:0; padding-left:1em; width: 2000px; border-bottom: 1px solid #bbbbbb;}
574 574 #content .tabs ul li {
575 575 float:left;
576 576 list-style-type:none;
577 577 white-space:nowrap;
578 578 margin-right:8px;
579 579 background:#fff;
580 580 position:relative;
581 581 margin-bottom:-1px;
582 582 }
583 583 #content .tabs ul li a{
584 584 display:block;
585 585 font-size: 0.9em;
586 586 text-decoration:none;
587 587 line-height:1.3em;
588 588 padding:4px 6px 4px 6px;
589 589 border: 1px solid #ccc;
590 590 border-bottom: 1px solid #bbbbbb;
591 591 background-color: #eeeeee;
592 592 color:#777;
593 593 font-weight:bold;
594 594 }
595 595
596 596 #content .tabs ul li a:hover {
597 597 background-color: #ffffdd;
598 598 text-decoration:none;
599 599 }
600 600
601 601 #content .tabs ul li a.selected {
602 602 background-color: #fff;
603 603 border: 1px solid #bbbbbb;
604 604 border-bottom: 1px solid #fff;
605 605 }
606 606
607 607 #content .tabs ul li a.selected:hover {
608 608 background-color: #fff;
609 609 }
610 610
611 611 div.tabs-buttons { position:absolute; right: 0; width: 48px; height: 24px; background: white; bottom: 0; border-bottom: 1px solid #bbbbbb; }
612 612
613 613 button.tab-left, button.tab-right {
614 614 font-size: 0.9em;
615 615 cursor: pointer;
616 616 height:24px;
617 617 border: 1px solid #ccc;
618 618 border-bottom: 1px solid #bbbbbb;
619 619 position:absolute;
620 620 padding:4px;
621 621 width: 20px;
622 622 bottom: -1px;
623 623 }
624 624
625 625 button.tab-left {
626 626 right: 20px;
627 627 background: #eeeeee url(../images/bullet_arrow_left.png) no-repeat 50% 50%;
628 628 }
629 629
630 630 button.tab-right {
631 631 right: 0;
632 632 background: #eeeeee url(../images/bullet_arrow_right.png) no-repeat 50% 50%;
633 633 }
634 634
635 635 /***** Auto-complete *****/
636 636 div.autocomplete {
637 637 position:absolute;
638 638 width:400px;
639 639 margin:0;
640 640 padding:0;
641 641 }
642 642 div.autocomplete ul {
643 643 list-style-type:none;
644 644 margin:0;
645 645 padding:0;
646 646 }
647 647 div.autocomplete ul li {
648 648 list-style-type:none;
649 649 display:block;
650 650 margin:-1px 0 0 0;
651 651 padding:2px;
652 652 cursor:pointer;
653 653 font-size: 90%;
654 654 border: 1px solid #ccc;
655 655 border-left: 1px solid #ccc;
656 656 border-right: 1px solid #ccc;
657 657 background-color:white;
658 658 }
659 659 div.autocomplete ul li.selected { background-color: #ffb;}
660 660 div.autocomplete ul li span.informal {
661 661 font-size: 80%;
662 662 color: #aaa;
663 663 }
664 664
665 665 #parent_issue_candidates ul li {width: 500px;}
666 #related_issue_candidates ul li {width: 500px;}
666 667
667 668 /***** Diff *****/
668 669 .diff_out { background: #fcc; }
669 670 .diff_in { background: #cfc; }
670 671
671 672 /***** Wiki *****/
672 673 div.wiki table {
673 674 border: 1px solid #505050;
674 675 border-collapse: collapse;
675 676 margin-bottom: 1em;
676 677 }
677 678
678 679 div.wiki table, div.wiki td, div.wiki th {
679 680 border: 1px solid #bbb;
680 681 padding: 4px;
681 682 }
682 683
683 684 div.wiki .external {
684 685 background-position: 0% 60%;
685 686 background-repeat: no-repeat;
686 687 padding-left: 12px;
687 688 background-image: url(../images/external.png);
688 689 }
689 690
690 691 div.wiki a.new {
691 692 color: #b73535;
692 693 }
693 694
694 695 div.wiki pre {
695 696 margin: 1em 1em 1em 1.6em;
696 697 padding: 2px 2px 2px 0;
697 698 background-color: #fafafa;
698 699 border: 1px solid #dadada;
699 700 width:auto;
700 701 overflow-x: auto;
701 702 overflow-y: hidden;
702 703 }
703 704
704 705 div.wiki ul.toc {
705 706 background-color: #ffffdd;
706 707 border: 1px solid #e4e4e4;
707 708 padding: 4px;
708 709 line-height: 1.2em;
709 710 margin-bottom: 12px;
710 711 margin-right: 12px;
711 712 margin-left: 0;
712 713 display: table
713 714 }
714 715 * html div.wiki ul.toc { width: 50%; } /* IE6 doesn't autosize div */
715 716
716 717 div.wiki ul.toc.right { float: right; margin-left: 12px; margin-right: 0; width: auto; }
717 718 div.wiki ul.toc.left { float: left; margin-right: 12px; margin-left: 0; width: auto; }
718 719 div.wiki ul.toc ul { margin: 0; padding: 0; }
719 720 div.wiki ul.toc li { list-style-type:none; margin: 0;}
720 721 div.wiki ul.toc li li { margin-left: 1.5em; }
721 722 div.wiki ul.toc li li li { font-size: 0.8em; }
722 723
723 724 div.wiki ul.toc a {
724 725 font-size: 0.9em;
725 726 font-weight: normal;
726 727 text-decoration: none;
727 728 color: #606060;
728 729 }
729 730 div.wiki ul.toc a:hover { color: #c61a1a; text-decoration: underline;}
730 731
731 732 a.wiki-anchor { display: none; margin-left: 6px; text-decoration: none; }
732 733 a.wiki-anchor:hover { color: #aaa !important; text-decoration: none; }
733 734 h1:hover a.wiki-anchor, h2:hover a.wiki-anchor, h3:hover a.wiki-anchor { display: inline; color: #ddd; }
734 735
735 736 div.wiki img { vertical-align: middle; }
736 737
737 738 /***** My page layout *****/
738 739 .block-receiver {
739 740 border:1px dashed #c0c0c0;
740 741 margin-bottom: 20px;
741 742 padding: 15px 0 15px 0;
742 743 }
743 744
744 745 .mypage-box {
745 746 margin:0 0 20px 0;
746 747 color:#505050;
747 748 line-height:1.5em;
748 749 }
749 750
750 751 .handle {
751 752 cursor: move;
752 753 }
753 754
754 755 a.close-icon {
755 756 display:block;
756 757 margin-top:3px;
757 758 overflow:hidden;
758 759 width:12px;
759 760 height:12px;
760 761 background-repeat: no-repeat;
761 762 cursor:pointer;
762 763 background-image:url('../images/close.png');
763 764 }
764 765
765 766 a.close-icon:hover {
766 767 background-image:url('../images/close_hl.png');
767 768 }
768 769
769 770 /***** Gantt chart *****/
770 771 .gantt_hdr {
771 772 position:absolute;
772 773 top:0;
773 774 height:16px;
774 775 border-top: 1px solid #c0c0c0;
775 776 border-bottom: 1px solid #c0c0c0;
776 777 border-right: 1px solid #c0c0c0;
777 778 text-align: center;
778 779 overflow: hidden;
779 780 }
780 781
781 782 .task {
782 783 position: absolute;
783 784 height:8px;
784 785 font-size:0.8em;
785 786 color:#888;
786 787 padding:0;
787 788 margin:0;
788 789 line-height:0.8em;
789 790 white-space:nowrap;
790 791 }
791 792
792 793 .task.label {width:100%;}
793 794
794 795 .task_late { background:#f66 url(../images/task_late.png); border: 1px solid #f66; }
795 796 .task_done { background:#00c600 url(../images/task_done.png); border: 1px solid #00c600; }
796 797 .task_todo { background:#aaa url(../images/task_todo.png); border: 1px solid #aaa; }
797 798
798 799 .task_todo.parent { background: #888; border: 1px solid #888; height: 6px;}
799 800 .task_late.parent, .task_done.parent { height: 3px;}
800 801 .task_todo.parent .left { position: absolute; background: url(../images/task_parent_end.png) no-repeat 0 0; width: 8px; height: 16px; margin-left: -5px; left: 0px; top: -1px;}
801 802 .task_todo.parent .right { position: absolute; background: url(../images/task_parent_end.png) no-repeat 0 0; width: 8px; height: 16px; margin-right: -5px; right: 0px; top: -1px;}
802 803
803 804 .milestone { background-image:url(../images/version_marker.png); background-repeat: no-repeat; border: 0; }
804 805 .milestone_late { background:#f66 url(../images/milestone_late.png); border: 1px solid #f66; height: 2px; margin-top: 3px;}
805 806 .milestone_done { background:#00c600 url(../images/milestone_done.png); border: 1px solid #00c600; height: 2px; margin-top: 3px;}
806 807 .milestone_todo { background:#fff url(../images/milestone_todo.png); border: 1px solid #fff; height: 2px; margin-top: 3px;}
807 808 .project-line { background-image:url(../images/project_marker.png); background-repeat: no-repeat; border: 0; }
808 809 .project_late { background:#f66 url(../images/milestone_late.png); border: 1px solid #f66; height: 2px; margin-top: 3px;}
809 810 .project_done { background:#00c600 url(../images/milestone_done.png); border: 1px solid #00c600; height: 2px; margin-top: 3px;}
810 811 .project_todo { background:#fff url(../images/milestone_todo.png); border: 1px solid #fff; height: 2px; margin-top: 3px;}
811 812
812 813 .version-behind-schedule a, .issue-behind-schedule a {color: #f66914;}
813 814 .version-overdue a, .issue-overdue a, .project-overdue a {color: #f00;}
814 815
815 816 /***** Icons *****/
816 817 .icon {
817 818 background-position: 0% 50%;
818 819 background-repeat: no-repeat;
819 820 padding-left: 20px;
820 821 padding-top: 2px;
821 822 padding-bottom: 3px;
822 823 }
823 824
824 825 .icon-add { background-image: url(../images/add.png); }
825 826 .icon-edit { background-image: url(../images/edit.png); }
826 827 .icon-copy { background-image: url(../images/copy.png); }
827 828 .icon-duplicate { background-image: url(../images/duplicate.png); }
828 829 .icon-del { background-image: url(../images/delete.png); }
829 830 .icon-move { background-image: url(../images/move.png); }
830 831 .icon-save { background-image: url(../images/save.png); }
831 832 .icon-cancel { background-image: url(../images/cancel.png); }
832 833 .icon-multiple { background-image: url(../images/table_multiple.png); }
833 834 .icon-folder { background-image: url(../images/folder.png); }
834 835 .open .icon-folder { background-image: url(../images/folder_open.png); }
835 836 .icon-package { background-image: url(../images/package.png); }
836 837 .icon-home { background-image: url(../images/home.png); }
837 838 .icon-user { background-image: url(../images/user.png); }
838 839 .icon-projects { background-image: url(../images/projects.png); }
839 840 .icon-help { background-image: url(../images/help.png); }
840 841 .icon-attachment { background-image: url(../images/attachment.png); }
841 842 .icon-history { background-image: url(../images/history.png); }
842 843 .icon-time { background-image: url(../images/time.png); }
843 844 .icon-time-add { background-image: url(../images/time_add.png); }
844 845 .icon-stats { background-image: url(../images/stats.png); }
845 846 .icon-warning { background-image: url(../images/warning.png); }
846 847 .icon-fav { background-image: url(../images/fav.png); }
847 848 .icon-fav-off { background-image: url(../images/fav_off.png); }
848 849 .icon-reload { background-image: url(../images/reload.png); }
849 850 .icon-lock { background-image: url(../images/locked.png); }
850 851 .icon-unlock { background-image: url(../images/unlock.png); }
851 852 .icon-checked { background-image: url(../images/true.png); }
852 853 .icon-details { background-image: url(../images/zoom_in.png); }
853 854 .icon-report { background-image: url(../images/report.png); }
854 855 .icon-comment { background-image: url(../images/comment.png); }
855 856 .icon-summary { background-image: url(../images/lightning.png); }
856 857 .icon-server-authentication { background-image: url(../images/server_key.png); }
857 858 .icon-issue { background-image: url(../images/ticket.png); }
858 859 .icon-zoom-in { background-image: url(../images/zoom_in.png); }
859 860 .icon-zoom-out { background-image: url(../images/zoom_out.png); }
860 861
861 862 .icon-file { background-image: url(../images/files/default.png); }
862 863 .icon-file.text-plain { background-image: url(../images/files/text.png); }
863 864 .icon-file.text-x-c { background-image: url(../images/files/c.png); }
864 865 .icon-file.text-x-csharp { background-image: url(../images/files/csharp.png); }
865 866 .icon-file.text-x-php { background-image: url(../images/files/php.png); }
866 867 .icon-file.text-x-ruby { background-image: url(../images/files/ruby.png); }
867 868 .icon-file.text-xml { background-image: url(../images/files/xml.png); }
868 869 .icon-file.image-gif { background-image: url(../images/files/image.png); }
869 870 .icon-file.image-jpeg { background-image: url(../images/files/image.png); }
870 871 .icon-file.image-png { background-image: url(../images/files/image.png); }
871 872 .icon-file.image-tiff { background-image: url(../images/files/image.png); }
872 873 .icon-file.application-pdf { background-image: url(../images/files/pdf.png); }
873 874 .icon-file.application-zip { background-image: url(../images/files/zip.png); }
874 875 .icon-file.application-x-gzip { background-image: url(../images/files/zip.png); }
875 876
876 877 img.gravatar {
877 878 padding: 2px;
878 879 border: solid 1px #d5d5d5;
879 880 background: #fff;
880 881 }
881 882
882 883 div.issue img.gravatar {
883 884 float: right;
884 885 margin: 0 0 0 1em;
885 886 padding: 5px;
886 887 }
887 888
888 889 div.issue table img.gravatar {
889 890 height: 14px;
890 891 width: 14px;
891 892 padding: 2px;
892 893 float: left;
893 894 margin: 0 0.5em 0 0;
894 895 }
895 896
896 897 h2 img.gravatar {
897 898 padding: 3px;
898 899 margin: -2px 4px -4px 0;
899 900 vertical-align: top;
900 901 }
901 902
902 903 h4 img.gravatar {
903 904 padding: 3px;
904 905 margin: -6px 0 -4px 0;
905 906 vertical-align: top;
906 907 }
907 908
908 909 td.username img.gravatar {
909 910 float: left;
910 911 margin: 0 1em 0 0;
911 912 }
912 913
913 914 #activity dt img.gravatar {
914 915 float: left;
915 916 margin: 0 1em 1em 0;
916 917 }
917 918
918 919 /* Used on 12px Gravatar img tags without the icon background */
919 920 .icon-gravatar {
920 921 float: left;
921 922 margin-right: 4px;
922 923 }
923 924
924 925 #activity dt,
925 926 .journal {
926 927 clear: left;
927 928 }
928 929
929 930 .journal-link {
930 931 float: right;
931 932 }
932 933
933 934 h2 img { vertical-align:middle; }
934 935
935 936 .hascontextmenu { cursor: context-menu; }
936 937
937 938 /***** Media print specific styles *****/
938 939 @media print {
939 940 #top-menu, #header, #main-menu, #sidebar, #footer, .contextual, .other-formats { display:none; }
940 941 #main { background: #fff; }
941 942 #content { width: 99%; margin: 0; padding: 0; border: 0; background: #fff; overflow: visible !important;}
942 943 #wiki_add_attachment { display:none; }
943 944 .hide-when-print { display: none; }
944 945 }
@@ -1,20 +1,34
1 1 require File.dirname(__FILE__) + '/../test_helper'
2 2
3 3 class AutoCompletesControllerTest < ActionController::TestCase
4 4 fixtures :all
5 5
6 6 def test_issues_should_not_be_case_sensitive
7 7 get :issues, :project_id => 'ecookbook', :q => 'ReCiPe'
8 8 assert_response :success
9 9 assert_not_nil assigns(:issues)
10 10 assert assigns(:issues).detect {|issue| issue.subject.match /recipe/}
11 11 end
12 12
13 13 def test_issues_should_return_issue_with_given_id
14 14 get :issues, :project_id => 'subproject1', :q => '13'
15 15 assert_response :success
16 16 assert_not_nil assigns(:issues)
17 17 assert assigns(:issues).include?(Issue.find(13))
18 18 end
19 19
20 def test_auto_complete_with_scope_all_and_cross_project_relations
21 Setting.cross_project_issue_relations = '1'
22 get :issues, :project_id => 'ecookbook', :q => '13', :scope => 'all'
23 assert_response :success
24 assert_not_nil assigns(:issues)
25 assert assigns(:issues).include?(Issue.find(13))
26 end
27
28 def test_auto_complete_with_scope_all_without_cross_project_relations
29 Setting.cross_project_issue_relations = '0'
30 get :issues, :project_id => 'ecookbook', :q => '13', :scope => 'all'
31 assert_response :success
32 assert_equal [nil], assigns(:issues)
33 end
20 34 end
General Comments 0
You need to be logged in to leave comments. Login now