##// END OF EJS Templates
Keep the "new object" drop down open when the + sign was clicked (#15880)....
Jean-Philippe Lang -
r15122:3da6062d7eb5
parent child
Show More
@@ -1,289 +1,290
1 1 # Redmine - project management software
2 2 # Copyright (C) 2006-2016 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 require 'redmine/core_ext'
19 19
20 20 begin
21 21 require 'rmagick' unless Object.const_defined?(:Magick)
22 22 rescue LoadError
23 23 # RMagick is not available
24 24 end
25 25 begin
26 26 require 'redcarpet' unless Object.const_defined?(:Redcarpet)
27 27 rescue LoadError
28 28 # Redcarpet is not available
29 29 end
30 30
31 31 require 'redmine/acts/positioned'
32 32
33 33 require 'redmine/scm/base'
34 34 require 'redmine/access_control'
35 35 require 'redmine/access_keys'
36 36 require 'redmine/activity'
37 37 require 'redmine/activity/fetcher'
38 38 require 'redmine/ciphering'
39 39 require 'redmine/codeset_util'
40 40 require 'redmine/field_format'
41 41 require 'redmine/menu_manager'
42 42 require 'redmine/notifiable'
43 43 require 'redmine/platform'
44 44 require 'redmine/mime_type'
45 45 require 'redmine/notifiable'
46 46 require 'redmine/search'
47 47 require 'redmine/syntax_highlighting'
48 48 require 'redmine/thumbnail'
49 49 require 'redmine/unified_diff'
50 50 require 'redmine/utils'
51 51 require 'redmine/version'
52 52 require 'redmine/wiki_formatting'
53 53
54 54 require 'redmine/default_data/loader'
55 55 require 'redmine/helpers/calendar'
56 56 require 'redmine/helpers/diff'
57 57 require 'redmine/helpers/gantt'
58 58 require 'redmine/helpers/time_report'
59 59 require 'redmine/views/other_formats_builder'
60 60 require 'redmine/views/labelled_form_builder'
61 61 require 'redmine/views/builders'
62 62
63 63 require 'redmine/themes'
64 64 require 'redmine/hook'
65 65 require 'redmine/hook/listener'
66 66 require 'redmine/hook/view_listener'
67 67 require 'redmine/plugin'
68 68
69 69 Redmine::Scm::Base.add "Subversion"
70 70 Redmine::Scm::Base.add "Darcs"
71 71 Redmine::Scm::Base.add "Mercurial"
72 72 Redmine::Scm::Base.add "Cvs"
73 73 Redmine::Scm::Base.add "Bazaar"
74 74 Redmine::Scm::Base.add "Git"
75 75 Redmine::Scm::Base.add "Filesystem"
76 76
77 77 # Permissions
78 78 Redmine::AccessControl.map do |map|
79 79 map.permission :view_project, {:projects => [:show], :activities => [:index]}, :public => true, :read => true
80 80 map.permission :search_project, {:search => :index}, :public => true, :read => true
81 81 map.permission :add_project, {:projects => [:new, :create]}, :require => :loggedin
82 82 map.permission :edit_project, {:projects => [:settings, :edit, :update]}, :require => :member
83 83 map.permission :close_project, {:projects => [:close, :reopen]}, :require => :member, :read => true
84 84 map.permission :select_project_modules, {:projects => :modules}, :require => :member
85 85 map.permission :view_members, {:members => [:index, :show]}, :public => true, :read => true
86 86 map.permission :manage_members, {:projects => :settings, :members => [:index, :show, :new, :create, :update, :destroy, :autocomplete]}, :require => :member
87 87 map.permission :manage_versions, {:projects => :settings, :versions => [:new, :create, :edit, :update, :close_completed, :destroy]}, :require => :member
88 88 map.permission :add_subprojects, {:projects => [:new, :create]}, :require => :member
89 89
90 90 map.project_module :issue_tracking do |map|
91 91 # Issues
92 92 map.permission :view_issues, {:issues => [:index, :show],
93 93 :auto_complete => [:issues],
94 94 :context_menus => [:issues],
95 95 :versions => [:index, :show, :status_by],
96 96 :journals => [:index, :diff],
97 97 :queries => :index,
98 98 :reports => [:issue_report, :issue_report_details]},
99 99 :read => true
100 100 map.permission :add_issues, {:issues => [:new, :create], :attachments => :upload}
101 101 map.permission :edit_issues, {:issues => [:edit, :update, :bulk_edit, :bulk_update], :journals => [:new], :attachments => :upload}
102 102 map.permission :copy_issues, {:issues => [:new, :create, :bulk_edit, :bulk_update], :attachments => :upload}
103 103 map.permission :manage_issue_relations, {:issue_relations => [:index, :show, :create, :destroy]}
104 104 map.permission :manage_subtasks, {}
105 105 map.permission :set_issues_private, {}
106 106 map.permission :set_own_issues_private, {}, :require => :loggedin
107 107 map.permission :add_issue_notes, {:issues => [:edit, :update], :journals => [:new], :attachments => :upload}
108 108 map.permission :edit_issue_notes, {:journals => [:edit, :update]}, :require => :loggedin
109 109 map.permission :edit_own_issue_notes, {:journals => [:edit, :update]}, :require => :loggedin
110 110 map.permission :view_private_notes, {}, :read => true, :require => :member
111 111 map.permission :set_notes_private, {}, :require => :member
112 112 map.permission :delete_issues, {:issues => :destroy}, :require => :member
113 113 # Queries
114 114 map.permission :manage_public_queries, {:queries => [:new, :create, :edit, :update, :destroy]}, :require => :member
115 115 map.permission :save_queries, {:queries => [:new, :create, :edit, :update, :destroy]}, :require => :loggedin
116 116 # Watchers
117 117 map.permission :view_issue_watchers, {}, :read => true
118 118 map.permission :add_issue_watchers, {:watchers => [:new, :create, :append, :autocomplete_for_user]}
119 119 map.permission :delete_issue_watchers, {:watchers => :destroy}
120 120 map.permission :import_issues, {:imports => [:new, :create, :settings, :mapping, :run, :show]}
121 121 # Issue categories
122 122 map.permission :manage_categories, {:projects => :settings, :issue_categories => [:index, :show, :new, :create, :edit, :update, :destroy]}, :require => :member
123 123 end
124 124
125 125 map.project_module :time_tracking do |map|
126 126 map.permission :view_time_entries, {:timelog => [:index, :report, :show]}, :read => true
127 127 map.permission :log_time, {:timelog => [:new, :create]}, :require => :loggedin
128 128 map.permission :edit_time_entries, {:timelog => [:edit, :update, :destroy, :bulk_edit, :bulk_update]}, :require => :member
129 129 map.permission :edit_own_time_entries, {:timelog => [:edit, :update, :destroy,:bulk_edit, :bulk_update]}, :require => :loggedin
130 130 map.permission :manage_project_activities, {:project_enumerations => [:update, :destroy]}, :require => :member
131 131 end
132 132
133 133 map.project_module :news do |map|
134 134 map.permission :view_news, {:news => [:index, :show]}, :public => true, :read => true
135 135 map.permission :manage_news, {:news => [:new, :create, :edit, :update, :destroy], :comments => [:destroy], :attachments => :upload}, :require => :member
136 136 map.permission :comment_news, {:comments => :create}
137 137 end
138 138
139 139 map.project_module :documents do |map|
140 140 map.permission :view_documents, {:documents => [:index, :show, :download]}, :read => true
141 141 map.permission :add_documents, {:documents => [:new, :create, :add_attachment], :attachments => :upload}, :require => :loggedin
142 142 map.permission :edit_documents, {:documents => [:edit, :update, :add_attachment], :attachments => :upload}, :require => :loggedin
143 143 map.permission :delete_documents, {:documents => [:destroy]}, :require => :loggedin
144 144 end
145 145
146 146 map.project_module :files do |map|
147 147 map.permission :view_files, {:files => :index, :versions => :download}, :read => true
148 148 map.permission :manage_files, {:files => [:new, :create], :attachments => :upload}, :require => :loggedin
149 149 end
150 150
151 151 map.project_module :wiki do |map|
152 152 map.permission :view_wiki_pages, {:wiki => [:index, :show, :special, :date_index]}, :read => true
153 153 map.permission :view_wiki_edits, {:wiki => [:history, :diff, :annotate]}, :read => true
154 154 map.permission :export_wiki_pages, {:wiki => [:export]}, :read => true
155 155 map.permission :edit_wiki_pages, :wiki => [:new, :edit, :update, :preview, :add_attachment], :attachments => :upload
156 156 map.permission :rename_wiki_pages, {:wiki => :rename}, :require => :member
157 157 map.permission :delete_wiki_pages, {:wiki => [:destroy, :destroy_version]}, :require => :member
158 158 map.permission :delete_wiki_pages_attachments, {}
159 159 map.permission :protect_wiki_pages, {:wiki => :protect}, :require => :member
160 160 map.permission :manage_wiki, {:wikis => [:edit, :destroy]}, :require => :member
161 161 end
162 162
163 163 map.project_module :repository do |map|
164 164 map.permission :view_changesets, {:repositories => [:show, :revisions, :revision]}, :read => true
165 165 map.permission :browse_repository, {:repositories => [:show, :browse, :entry, :raw, :annotate, :changes, :diff, :stats, :graph]}, :read => true
166 166 map.permission :commit_access, {}
167 167 map.permission :manage_related_issues, {:repositories => [:add_related_issue, :remove_related_issue]}
168 168 map.permission :manage_repository, {:repositories => [:new, :create, :edit, :update, :committers, :destroy]}, :require => :member
169 169 end
170 170
171 171 map.project_module :boards do |map|
172 172 map.permission :view_messages, {:boards => [:index, :show], :messages => [:show]}, :public => true, :read => true
173 173 map.permission :add_messages, {:messages => [:new, :reply, :quote], :attachments => :upload}
174 174 map.permission :edit_messages, {:messages => :edit, :attachments => :upload}, :require => :member
175 175 map.permission :edit_own_messages, {:messages => :edit, :attachments => :upload}, :require => :loggedin
176 176 map.permission :delete_messages, {:messages => :destroy}, :require => :member
177 177 map.permission :delete_own_messages, {:messages => :destroy}, :require => :loggedin
178 178 map.permission :manage_boards, {:boards => [:new, :create, :edit, :update, :destroy]}, :require => :member
179 179 end
180 180
181 181 map.project_module :calendar do |map|
182 182 map.permission :view_calendar, {:calendars => [:show, :update]}, :read => true
183 183 end
184 184
185 185 map.project_module :gantt do |map|
186 186 map.permission :view_gantt, {:gantts => [:show, :update]}, :read => true
187 187 end
188 188 end
189 189
190 190 Redmine::MenuManager.map :top_menu do |menu|
191 191 menu.push :home, :home_path
192 192 menu.push :my_page, { :controller => 'my', :action => 'page' }, :if => Proc.new { User.current.logged? }
193 193 menu.push :projects, { :controller => 'projects', :action => 'index' }, :caption => :label_project_plural
194 194 menu.push :administration, { :controller => 'admin', :action => 'index' }, :if => Proc.new { User.current.admin? }, :last => true
195 195 menu.push :help, Redmine::Info.help_url, :last => true
196 196 end
197 197
198 198 Redmine::MenuManager.map :account_menu do |menu|
199 199 menu.push :login, :signin_path, :if => Proc.new { !User.current.logged? }
200 200 menu.push :register, :register_path, :if => Proc.new { !User.current.logged? && Setting.self_registration? }
201 201 menu.push :my_account, { :controller => 'my', :action => 'account' }, :if => Proc.new { User.current.logged? }
202 202 menu.push :logout, :signout_path, :html => {:method => 'post'}, :if => Proc.new { User.current.logged? }
203 203 end
204 204
205 205 Redmine::MenuManager.map :application_menu do |menu|
206 206 # Empty
207 207 end
208 208
209 209 Redmine::MenuManager.map :admin_menu do |menu|
210 210 menu.push :projects, {:controller => 'admin', :action => 'projects'}, :caption => :label_project_plural
211 211 menu.push :users, {:controller => 'users'}, :caption => :label_user_plural
212 212 menu.push :groups, {:controller => 'groups'}, :caption => :label_group_plural
213 213 menu.push :roles, {:controller => 'roles'}, :caption => :label_role_and_permissions
214 214 menu.push :trackers, {:controller => 'trackers'}, :caption => :label_tracker_plural
215 215 menu.push :issue_statuses, {:controller => 'issue_statuses'}, :caption => :label_issue_status_plural,
216 216 :html => {:class => 'issue_statuses'}
217 217 menu.push :workflows, {:controller => 'workflows', :action => 'edit'}, :caption => :label_workflow
218 218 menu.push :custom_fields, {:controller => 'custom_fields'}, :caption => :label_custom_field_plural,
219 219 :html => {:class => 'custom_fields'}
220 220 menu.push :enumerations, {:controller => 'enumerations'}
221 221 menu.push :settings, {:controller => 'settings'}
222 222 menu.push :ldap_authentication, {:controller => 'auth_sources', :action => 'index'},
223 223 :html => {:class => 'server_authentication'}
224 224 menu.push :plugins, {:controller => 'admin', :action => 'plugins'}, :last => true
225 225 menu.push :info, {:controller => 'admin', :action => 'info'}, :caption => :label_information_plural, :last => true
226 226 end
227 227
228 228 Redmine::MenuManager.map :project_menu do |menu|
229 menu.push :new_object, nil, :caption => ' + '
229 menu.push :new_object, nil, :caption => ' + ',
230 :html => { :id => 'new-object', :onclick => 'toggleNewObjectDropdown(); return false;' }
230 231 menu.push :new_issue_category, {:controller => 'issue_categories', :action => 'new'}, :param => :project_id, :caption => :label_issue_category_new,
231 232 :parent => :new_object
232 233 menu.push :new_version, {:controller => 'versions', :action => 'new'}, :param => :project_id, :caption => :label_version_new,
233 234 :parent => :new_object
234 235 menu.push :new_news, {:controller => 'news', :action => 'new'}, :param => :project_id, :caption => :label_news_new,
235 236 :parent => :new_object
236 237 menu.push :new_document, {:controller => 'documents', :action => 'new'}, :param => :project_id, :caption => :label_document_new,
237 238 :parent => :new_object
238 239 menu.push :new_file, {:controller => 'files', :action => 'new'}, :param => :project_id, :caption => :label_attachment_new,
239 240 :parent => :new_object
240 241 menu.push :overview, { :controller => 'projects', :action => 'show' }
241 242 menu.push :activity, { :controller => 'activities', :action => 'index' }
242 243 menu.push :roadmap, { :controller => 'versions', :action => 'index' }, :param => :project_id,
243 244 :if => Proc.new { |p| p.shared_versions.any? }
244 245 menu.push :issues, { :controller => 'issues', :action => 'index' }, :param => :project_id, :caption => :label_issue_plural
245 246 menu.push :new_issue, { :controller => 'issues', :action => 'new', :copy_from => nil }, :param => :project_id, :caption => :label_issue_new,
246 247 :html => { :accesskey => Redmine::AccessKeys.key_for(:new_issue) },
247 248 :if => Proc.new { |p| Setting.new_project_issue_tab_enabled? && Issue.allowed_target_trackers(p).any? },
248 249 :permission => :add_issues
249 250 menu.push :gantt, { :controller => 'gantts', :action => 'show' }, :param => :project_id, :caption => :label_gantt
250 251 menu.push :calendar, { :controller => 'calendars', :action => 'show' }, :param => :project_id, :caption => :label_calendar
251 252 menu.push :news, { :controller => 'news', :action => 'index' }, :param => :project_id, :caption => :label_news_plural
252 253 menu.push :documents, { :controller => 'documents', :action => 'index' }, :param => :project_id, :caption => :label_document_plural
253 254 menu.push :wiki, { :controller => 'wiki', :action => 'show', :id => nil }, :param => :project_id,
254 255 :if => Proc.new { |p| p.wiki && !p.wiki.new_record? }
255 256 menu.push :boards, { :controller => 'boards', :action => 'index', :id => nil }, :param => :project_id,
256 257 :if => Proc.new { |p| p.boards.any? }, :caption => :label_board_plural
257 258 menu.push :files, { :controller => 'files', :action => 'index' }, :caption => :label_file_plural, :param => :project_id
258 259 menu.push :repository, { :controller => 'repositories', :action => 'show', :repository_id => nil, :path => nil, :rev => nil },
259 260 :if => Proc.new { |p| p.repository && !p.repository.new_record? }
260 261 menu.push :settings, { :controller => 'projects', :action => 'settings' }, :last => true
261 262 end
262 263
263 264 Redmine::Activity.map do |activity|
264 265 activity.register :issues, :class_name => %w(Issue Journal)
265 266 activity.register :changesets
266 267 activity.register :news
267 268 activity.register :documents, :class_name => %w(Document Attachment)
268 269 activity.register :files, :class_name => 'Attachment'
269 270 activity.register :wiki_edits, :class_name => 'WikiContent::Version', :default => false
270 271 activity.register :messages, :default => false
271 272 activity.register :time_entries, :default => false
272 273 end
273 274
274 275 Redmine::Search.map do |search|
275 276 search.register :issues
276 277 search.register :news
277 278 search.register :documents
278 279 search.register :changesets
279 280 search.register :wiki_pages
280 281 search.register :messages
281 282 search.register :projects
282 283 end
283 284
284 285 Redmine::WikiFormatting.map do |format|
285 286 format.register :textile
286 287 format.register :markdown if Object.const_defined?(:Redcarpet)
287 288 end
288 289
289 290 ActionView::Template.register_template_handler :rsb, Redmine::Views::ApiTemplateHandler
@@ -1,774 +1,783
1 1 /* Redmine - project management software
2 2 Copyright (C) 2006-2016 Jean-Philippe Lang */
3 3
4 4 function checkAll(id, checked) {
5 5 $('#'+id).find('input[type=checkbox]:enabled').prop('checked', checked);
6 6 }
7 7
8 8 function toggleCheckboxesBySelector(selector) {
9 9 var all_checked = true;
10 10 $(selector).each(function(index) {
11 11 if (!$(this).is(':checked')) { all_checked = false; }
12 12 });
13 13 $(selector).prop('checked', !all_checked);
14 14 }
15 15
16 16 function showAndScrollTo(id, focus) {
17 17 $('#'+id).show();
18 18 if (focus !== null) {
19 19 $('#'+focus).focus();
20 20 }
21 21 $('html, body').animate({scrollTop: $('#'+id).offset().top}, 100);
22 22 }
23 23
24 24 function toggleRowGroup(el) {
25 25 var tr = $(el).parents('tr').first();
26 26 var n = tr.next();
27 27 tr.toggleClass('open');
28 28 while (n.length && !n.hasClass('group')) {
29 29 n.toggle();
30 30 n = n.next('tr');
31 31 }
32 32 }
33 33
34 34 function collapseAllRowGroups(el) {
35 35 var tbody = $(el).parents('tbody').first();
36 36 tbody.children('tr').each(function(index) {
37 37 if ($(this).hasClass('group')) {
38 38 $(this).removeClass('open');
39 39 } else {
40 40 $(this).hide();
41 41 }
42 42 });
43 43 }
44 44
45 45 function expandAllRowGroups(el) {
46 46 var tbody = $(el).parents('tbody').first();
47 47 tbody.children('tr').each(function(index) {
48 48 if ($(this).hasClass('group')) {
49 49 $(this).addClass('open');
50 50 } else {
51 51 $(this).show();
52 52 }
53 53 });
54 54 }
55 55
56 56 function toggleAllRowGroups(el) {
57 57 var tr = $(el).parents('tr').first();
58 58 if (tr.hasClass('open')) {
59 59 collapseAllRowGroups(el);
60 60 } else {
61 61 expandAllRowGroups(el);
62 62 }
63 63 }
64 64
65 65 function toggleFieldset(el) {
66 66 var fieldset = $(el).parents('fieldset').first();
67 67 fieldset.toggleClass('collapsed');
68 68 fieldset.children('div').toggle();
69 69 }
70 70
71 71 function hideFieldset(el) {
72 72 var fieldset = $(el).parents('fieldset').first();
73 73 fieldset.toggleClass('collapsed');
74 74 fieldset.children('div').hide();
75 75 }
76 76
77 77 // columns selection
78 78 function moveOptions(theSelFrom, theSelTo) {
79 79 $(theSelFrom).find('option:selected').detach().prop("selected", false).appendTo($(theSelTo));
80 80 }
81 81
82 82 function moveOptionUp(theSel) {
83 83 $(theSel).find('option:selected').each(function(){
84 84 $(this).prev(':not(:selected)').detach().insertAfter($(this));
85 85 });
86 86 }
87 87
88 88 function moveOptionTop(theSel) {
89 89 $(theSel).find('option:selected').detach().prependTo($(theSel));
90 90 }
91 91
92 92 function moveOptionDown(theSel) {
93 93 $($(theSel).find('option:selected').get().reverse()).each(function(){
94 94 $(this).next(':not(:selected)').detach().insertBefore($(this));
95 95 });
96 96 }
97 97
98 98 function moveOptionBottom(theSel) {
99 99 $(theSel).find('option:selected').detach().appendTo($(theSel));
100 100 }
101 101
102 102 function initFilters() {
103 103 $('#add_filter_select').change(function() {
104 104 addFilter($(this).val(), '', []);
105 105 });
106 106 $('#filters-table td.field input[type=checkbox]').each(function() {
107 107 toggleFilter($(this).val());
108 108 });
109 109 $('#filters-table').on('click', 'td.field input[type=checkbox]', function() {
110 110 toggleFilter($(this).val());
111 111 });
112 112 $('#filters-table').on('click', '.toggle-multiselect', function() {
113 113 toggleMultiSelect($(this).siblings('select'));
114 114 });
115 115 $('#filters-table').on('keypress', 'input[type=text]', function(e) {
116 116 if (e.keyCode == 13) $(this).closest('form').submit();
117 117 });
118 118 }
119 119
120 120 function addFilter(field, operator, values) {
121 121 var fieldId = field.replace('.', '_');
122 122 var tr = $('#tr_'+fieldId);
123 123 if (tr.length > 0) {
124 124 tr.show();
125 125 } else {
126 126 buildFilterRow(field, operator, values);
127 127 }
128 128 $('#cb_'+fieldId).prop('checked', true);
129 129 toggleFilter(field);
130 130 $('#add_filter_select').val('').find('option').each(function() {
131 131 if ($(this).attr('value') == field) {
132 132 $(this).attr('disabled', true);
133 133 }
134 134 });
135 135 }
136 136
137 137 function buildFilterRow(field, operator, values) {
138 138 var fieldId = field.replace('.', '_');
139 139 var filterTable = $("#filters-table");
140 140 var filterOptions = availableFilters[field];
141 141 if (!filterOptions) return;
142 142 var operators = operatorByType[filterOptions['type']];
143 143 var filterValues = filterOptions['values'];
144 144 var i, select;
145 145
146 146 var tr = $('<tr class="filter">').attr('id', 'tr_'+fieldId).html(
147 147 '<td class="field"><input checked="checked" id="cb_'+fieldId+'" name="f[]" value="'+field+'" type="checkbox"><label for="cb_'+fieldId+'"> '+filterOptions['name']+'</label></td>' +
148 148 '<td class="operator"><select id="operators_'+fieldId+'" name="op['+field+']"></td>' +
149 149 '<td class="values"></td>'
150 150 );
151 151 filterTable.append(tr);
152 152
153 153 select = tr.find('td.operator select');
154 154 for (i = 0; i < operators.length; i++) {
155 155 var option = $('<option>').val(operators[i]).text(operatorLabels[operators[i]]);
156 156 if (operators[i] == operator) { option.attr('selected', true); }
157 157 select.append(option);
158 158 }
159 159 select.change(function(){ toggleOperator(field); });
160 160
161 161 switch (filterOptions['type']) {
162 162 case "list":
163 163 case "list_optional":
164 164 case "list_status":
165 165 case "list_subprojects":
166 166 tr.find('td.values').append(
167 167 '<span style="display:none;"><select class="value" id="values_'+fieldId+'_1" name="v['+field+'][]"></select>' +
168 168 ' <span class="toggle-multiselect">&nbsp;</span></span>'
169 169 );
170 170 select = tr.find('td.values select');
171 171 if (values.length > 1) { select.attr('multiple', true); }
172 172 for (i = 0; i < filterValues.length; i++) {
173 173 var filterValue = filterValues[i];
174 174 var option = $('<option>');
175 175 if ($.isArray(filterValue)) {
176 176 option.val(filterValue[1]).text(filterValue[0]);
177 177 if ($.inArray(filterValue[1], values) > -1) {option.attr('selected', true);}
178 178 } else {
179 179 option.val(filterValue).text(filterValue);
180 180 if ($.inArray(filterValue, values) > -1) {option.attr('selected', true);}
181 181 }
182 182 select.append(option);
183 183 }
184 184 break;
185 185 case "date":
186 186 case "date_past":
187 187 tr.find('td.values').append(
188 188 '<span style="display:none;"><input type="date" name="v['+field+'][]" id="values_'+fieldId+'_1" size="10" class="value date_value" /></span>' +
189 189 ' <span style="display:none;"><input type="date" name="v['+field+'][]" id="values_'+fieldId+'_2" size="10" class="value date_value" /></span>' +
190 190 ' <span style="display:none;"><input type="text" name="v['+field+'][]" id="values_'+fieldId+'" size="3" class="value" /> '+labelDayPlural+'</span>'
191 191 );
192 192 $('#values_'+fieldId+'_1').val(values[0]).datepickerFallback(datepickerOptions);
193 193 $('#values_'+fieldId+'_2').val(values[1]).datepickerFallback(datepickerOptions);
194 194 $('#values_'+fieldId).val(values[0]);
195 195 break;
196 196 case "string":
197 197 case "text":
198 198 tr.find('td.values').append(
199 199 '<span style="display:none;"><input type="text" name="v['+field+'][]" id="values_'+fieldId+'" size="30" class="value" /></span>'
200 200 );
201 201 $('#values_'+fieldId).val(values[0]);
202 202 break;
203 203 case "relation":
204 204 tr.find('td.values').append(
205 205 '<span style="display:none;"><input type="text" name="v['+field+'][]" id="values_'+fieldId+'" size="6" class="value" /></span>' +
206 206 '<span style="display:none;"><select class="value" name="v['+field+'][]" id="values_'+fieldId+'_1"></select></span>'
207 207 );
208 208 $('#values_'+fieldId).val(values[0]);
209 209 select = tr.find('td.values select');
210 210 for (i = 0; i < allProjects.length; i++) {
211 211 var filterValue = allProjects[i];
212 212 var option = $('<option>');
213 213 option.val(filterValue[1]).text(filterValue[0]);
214 214 if (values[0] == filterValue[1]) { option.attr('selected', true); }
215 215 select.append(option);
216 216 }
217 217 break;
218 218 case "integer":
219 219 case "float":
220 220 case "tree":
221 221 tr.find('td.values').append(
222 222 '<span style="display:none;"><input type="text" name="v['+field+'][]" id="values_'+fieldId+'_1" size="14" class="value" /></span>' +
223 223 ' <span style="display:none;"><input type="text" name="v['+field+'][]" id="values_'+fieldId+'_2" size="14" class="value" /></span>'
224 224 );
225 225 $('#values_'+fieldId+'_1').val(values[0]);
226 226 $('#values_'+fieldId+'_2').val(values[1]);
227 227 break;
228 228 }
229 229 }
230 230
231 231 function toggleFilter(field) {
232 232 var fieldId = field.replace('.', '_');
233 233 if ($('#cb_' + fieldId).is(':checked')) {
234 234 $("#operators_" + fieldId).show().removeAttr('disabled');
235 235 toggleOperator(field);
236 236 } else {
237 237 $("#operators_" + fieldId).hide().attr('disabled', true);
238 238 enableValues(field, []);
239 239 }
240 240 }
241 241
242 242 function enableValues(field, indexes) {
243 243 var fieldId = field.replace('.', '_');
244 244 $('#tr_'+fieldId+' td.values .value').each(function(index) {
245 245 if ($.inArray(index, indexes) >= 0) {
246 246 $(this).removeAttr('disabled');
247 247 $(this).parents('span').first().show();
248 248 } else {
249 249 $(this).val('');
250 250 $(this).attr('disabled', true);
251 251 $(this).parents('span').first().hide();
252 252 }
253 253
254 254 if ($(this).hasClass('group')) {
255 255 $(this).addClass('open');
256 256 } else {
257 257 $(this).show();
258 258 }
259 259 });
260 260 }
261 261
262 262 function toggleOperator(field) {
263 263 var fieldId = field.replace('.', '_');
264 264 var operator = $("#operators_" + fieldId);
265 265 switch (operator.val()) {
266 266 case "!*":
267 267 case "*":
268 268 case "t":
269 269 case "ld":
270 270 case "w":
271 271 case "lw":
272 272 case "l2w":
273 273 case "m":
274 274 case "lm":
275 275 case "y":
276 276 case "o":
277 277 case "c":
278 278 case "*o":
279 279 case "!o":
280 280 enableValues(field, []);
281 281 break;
282 282 case "><":
283 283 enableValues(field, [0,1]);
284 284 break;
285 285 case "<t+":
286 286 case ">t+":
287 287 case "><t+":
288 288 case "t+":
289 289 case ">t-":
290 290 case "<t-":
291 291 case "><t-":
292 292 case "t-":
293 293 enableValues(field, [2]);
294 294 break;
295 295 case "=p":
296 296 case "=!p":
297 297 case "!p":
298 298 enableValues(field, [1]);
299 299 break;
300 300 default:
301 301 enableValues(field, [0]);
302 302 break;
303 303 }
304 304 }
305 305
306 306 function toggleMultiSelect(el) {
307 307 if (el.attr('multiple')) {
308 308 el.removeAttr('multiple');
309 309 el.attr('size', 1);
310 310 } else {
311 311 el.attr('multiple', true);
312 312 if (el.children().length > 10)
313 313 el.attr('size', 10);
314 314 else
315 315 el.attr('size', 4);
316 316 }
317 317 }
318 318
319 319 function showTab(name, url) {
320 320 $('#tab-content-' + name).parent().find('.tab-content').hide();
321 321 $('#tab-content-' + name).parent().find('div.tabs a').removeClass('selected');
322 322 $('#tab-content-' + name).show();
323 323 $('#tab-' + name).addClass('selected');
324 324 //replaces current URL with the "href" attribute of the current link
325 325 //(only triggered if supported by browser)
326 326 if ("replaceState" in window.history) {
327 327 window.history.replaceState(null, document.title, url);
328 328 }
329 329 return false;
330 330 }
331 331
332 332 function moveTabRight(el) {
333 333 var lis = $(el).parents('div.tabs').first().find('ul').children();
334 334 var bw = $(el).parents('div.tabs-buttons').outerWidth(true);
335 335 var tabsWidth = 0;
336 336 var i = 0;
337 337 lis.each(function() {
338 338 if ($(this).is(':visible')) {
339 339 tabsWidth += $(this).outerWidth(true);
340 340 }
341 341 });
342 342 if (tabsWidth < $(el).parents('div.tabs').first().width() - bw) { return; }
343 343 $(el).siblings('.tab-left').removeClass('disabled');
344 344 while (i<lis.length && !lis.eq(i).is(':visible')) { i++; }
345 345 var w = lis.eq(i).width();
346 346 lis.eq(i).hide();
347 347 if (tabsWidth - w < $(el).parents('div.tabs').first().width() - bw) {
348 348 $(el).addClass('disabled');
349 349 }
350 350 }
351 351
352 352 function moveTabLeft(el) {
353 353 var lis = $(el).parents('div.tabs').first().find('ul').children();
354 354 var i = 0;
355 355 while (i < lis.length && !lis.eq(i).is(':visible')) { i++; }
356 356 if (i > 0) {
357 357 lis.eq(i-1).show();
358 358 $(el).siblings('.tab-right').removeClass('disabled');
359 359 }
360 360 if (i <= 1) {
361 361 $(el).addClass('disabled');
362 362 }
363 363 }
364 364
365 365 function displayTabsButtons() {
366 366 var lis;
367 367 var tabsWidth;
368 368 var el;
369 369 var numHidden;
370 370 $('div.tabs').each(function() {
371 371 el = $(this);
372 372 lis = el.find('ul').children();
373 373 tabsWidth = 0;
374 374 numHidden = 0;
375 375 lis.each(function(){
376 376 if ($(this).is(':visible')) {
377 377 tabsWidth += $(this).outerWidth(true);
378 378 } else {
379 379 numHidden++;
380 380 }
381 381 });
382 382 var bw = $(el).parents('div.tabs-buttons').outerWidth(true);
383 383 if ((tabsWidth < el.width() - bw) && (lis.first().is(':visible'))) {
384 384 el.find('div.tabs-buttons').hide();
385 385 } else {
386 386 el.find('div.tabs-buttons').show().children('button.tab-left').toggleClass('disabled', numHidden == 0);
387 387 }
388 388 });
389 389 }
390 390
391 391 function setPredecessorFieldsVisibility() {
392 392 var relationType = $('#relation_relation_type');
393 393 if (relationType.val() == "precedes" || relationType.val() == "follows") {
394 394 $('#predecessor_fields').show();
395 395 } else {
396 396 $('#predecessor_fields').hide();
397 397 }
398 398 }
399 399
400 400 function showModal(id, width, title) {
401 401 var el = $('#'+id).first();
402 402 if (el.length === 0 || el.is(':visible')) {return;}
403 403 if (!title) title = el.find('h3.title').text();
404 404 // moves existing modals behind the transparent background
405 405 $(".modal").zIndex(99);
406 406 el.dialog({
407 407 width: width,
408 408 modal: true,
409 409 resizable: false,
410 410 dialogClass: 'modal',
411 411 title: title
412 412 }).on('dialogclose', function(){
413 413 $(".modal").zIndex(101);
414 414 });
415 415 el.find("input[type=text], input[type=submit]").first().focus();
416 416 }
417 417
418 418 function hideModal(el) {
419 419 var modal;
420 420 if (el) {
421 421 modal = $(el).parents('.ui-dialog-content');
422 422 } else {
423 423 modal = $('#ajax-modal');
424 424 }
425 425 modal.dialog("close");
426 426 }
427 427
428 428 function submitPreview(url, form, target) {
429 429 $.ajax({
430 430 url: url,
431 431 type: 'post',
432 432 data: $('#'+form).serialize(),
433 433 success: function(data){
434 434 $('#'+target).html(data);
435 435 }
436 436 });
437 437 }
438 438
439 439 function collapseScmEntry(id) {
440 440 $('.'+id).each(function() {
441 441 if ($(this).hasClass('open')) {
442 442 collapseScmEntry($(this).attr('id'));
443 443 }
444 444 $(this).hide();
445 445 });
446 446 $('#'+id).removeClass('open');
447 447 }
448 448
449 449 function expandScmEntry(id) {
450 450 $('.'+id).each(function() {
451 451 $(this).show();
452 452 if ($(this).hasClass('loaded') && !$(this).hasClass('collapsed')) {
453 453 expandScmEntry($(this).attr('id'));
454 454 }
455 455 });
456 456 $('#'+id).addClass('open');
457 457 }
458 458
459 459 function scmEntryClick(id, url) {
460 460 var el = $('#'+id);
461 461 if (el.hasClass('open')) {
462 462 collapseScmEntry(id);
463 463 el.addClass('collapsed');
464 464 return false;
465 465 } else if (el.hasClass('loaded')) {
466 466 expandScmEntry(id);
467 467 el.removeClass('collapsed');
468 468 return false;
469 469 }
470 470 if (el.hasClass('loading')) {
471 471 return false;
472 472 }
473 473 el.addClass('loading');
474 474 $.ajax({
475 475 url: url,
476 476 success: function(data) {
477 477 el.after(data);
478 478 el.addClass('open').addClass('loaded').removeClass('loading');
479 479 }
480 480 });
481 481 return true;
482 482 }
483 483
484 484 function randomKey(size) {
485 485 var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
486 486 var key = '';
487 487 for (var i = 0; i < size; i++) {
488 488 key += chars.charAt(Math.floor(Math.random() * chars.length));
489 489 }
490 490 return key;
491 491 }
492 492
493 493 function updateIssueFrom(url, el) {
494 494 $('#all_attributes input, #all_attributes textarea, #all_attributes select').each(function(){
495 495 $(this).data('valuebeforeupdate', $(this).val());
496 496 });
497 497 if (el) {
498 498 $("#form_update_triggered_by").val($(el).attr('id'));
499 499 }
500 500 return $.ajax({
501 501 url: url,
502 502 type: 'post',
503 503 data: $('#issue-form').serialize()
504 504 });
505 505 }
506 506
507 507 function replaceIssueFormWith(html){
508 508 var replacement = $(html);
509 509 $('#all_attributes input, #all_attributes textarea, #all_attributes select').each(function(){
510 510 var object_id = $(this).attr('id');
511 511 if (object_id && $(this).data('valuebeforeupdate')!=$(this).val()) {
512 512 replacement.find('#'+object_id).val($(this).val());
513 513 }
514 514 });
515 515 $('#all_attributes').empty();
516 516 $('#all_attributes').prepend(replacement);
517 517 }
518 518
519 519 function updateBulkEditFrom(url) {
520 520 $.ajax({
521 521 url: url,
522 522 type: 'post',
523 523 data: $('#bulk_edit_form').serialize()
524 524 });
525 525 }
526 526
527 527 function observeAutocompleteField(fieldId, url, options) {
528 528 $(document).ready(function() {
529 529 $('#'+fieldId).autocomplete($.extend({
530 530 source: url,
531 531 minLength: 2,
532 532 position: {collision: "flipfit"},
533 533 search: function(){$('#'+fieldId).addClass('ajax-loading');},
534 534 response: function(){$('#'+fieldId).removeClass('ajax-loading');}
535 535 }, options));
536 536 $('#'+fieldId).addClass('autocomplete');
537 537 });
538 538 }
539 539
540 540 function observeSearchfield(fieldId, targetId, url) {
541 541 $('#'+fieldId).each(function() {
542 542 var $this = $(this);
543 543 $this.addClass('autocomplete');
544 544 $this.attr('data-value-was', $this.val());
545 545 var check = function() {
546 546 var val = $this.val();
547 547 if ($this.attr('data-value-was') != val){
548 548 $this.attr('data-value-was', val);
549 549 $.ajax({
550 550 url: url,
551 551 type: 'get',
552 552 data: {q: $this.val()},
553 553 success: function(data){ if(targetId) $('#'+targetId).html(data); },
554 554 beforeSend: function(){ $this.addClass('ajax-loading'); },
555 555 complete: function(){ $this.removeClass('ajax-loading'); }
556 556 });
557 557 }
558 558 };
559 559 var reset = function() {
560 560 if (timer) {
561 561 clearInterval(timer);
562 562 timer = setInterval(check, 300);
563 563 }
564 564 };
565 565 var timer = setInterval(check, 300);
566 566 $this.bind('keyup click mousemove', reset);
567 567 });
568 568 }
569 569
570 570 function beforeShowDatePicker(input, inst) {
571 571 var default_date = null;
572 572 switch ($(input).attr("id")) {
573 573 case "issue_start_date" :
574 574 if ($("#issue_due_date").size() > 0) {
575 575 default_date = $("#issue_due_date").val();
576 576 }
577 577 break;
578 578 case "issue_due_date" :
579 579 if ($("#issue_start_date").size() > 0) {
580 580 var start_date = $("#issue_start_date").val();
581 581 if (start_date != "") {
582 582 start_date = new Date(Date.parse(start_date));
583 583 if (start_date > new Date()) {
584 584 default_date = $("#issue_start_date").val();
585 585 }
586 586 }
587 587 }
588 588 break;
589 589 }
590 590 $(input).datepickerFallback("option", "defaultDate", default_date);
591 591 }
592 592
593 593 (function($){
594 594 $.fn.positionedItems = function(sortableOptions, options){
595 595 var settings = $.extend({
596 596 firstPosition: 1
597 597 }, options );
598 598
599 599 return this.sortable($.extend({
600 600 handle: ".sort-handle",
601 601 helper: function(event, ui){
602 602 ui.children('td').each(function(){
603 603 $(this).width($(this).width());
604 604 });
605 605 return ui;
606 606 },
607 607 update: function(event, ui) {
608 608 var sortable = $(this);
609 609 var handle = ui.item.find(".sort-handle").addClass("ajax-loading");
610 610 var url = handle.data("reorder-url");
611 611 var param = handle.data("reorder-param");
612 612 var data = {};
613 613 data[param] = {position: ui.item.index() + settings['firstPosition']};
614 614 $.ajax({
615 615 url: url,
616 616 type: 'put',
617 617 dataType: 'script',
618 618 data: data,
619 619 success: function(data){
620 620 sortable.children(":even").removeClass("even").addClass("odd");
621 621 sortable.children(":odd").removeClass("odd").addClass("even");
622 622 },
623 623 error: function(jqXHR, textStatus, errorThrown){
624 624 alert(jqXHR.status);
625 625 sortable.sortable("cancel");
626 626 },
627 627 complete: function(jqXHR, textStatus, errorThrown){
628 628 handle.removeClass("ajax-loading");
629 629 }
630 630 });
631 631 },
632 632 }, sortableOptions));
633 633 }
634 634 }( jQuery ));
635 635
636 636 function initMyPageSortable(list, url) {
637 637 $('#list-'+list).sortable({
638 638 connectWith: '.block-receiver',
639 639 tolerance: 'pointer',
640 640 update: function(){
641 641 $.ajax({
642 642 url: url,
643 643 type: 'post',
644 644 data: {'blocks': $.map($('#list-'+list).children(), function(el){return $(el).attr('id');})}
645 645 });
646 646 }
647 647 });
648 648 $("#list-top, #list-left, #list-right").disableSelection();
649 649 }
650 650
651 651 var warnLeavingUnsavedMessage;
652 652 function warnLeavingUnsaved(message) {
653 653 warnLeavingUnsavedMessage = message;
654 654 $(document).on('submit', 'form', function(){
655 655 $('textarea').removeData('changed');
656 656 });
657 657 $(document).on('change', 'textarea', function(){
658 658 $(this).data('changed', 'changed');
659 659 });
660 660 window.onbeforeunload = function(){
661 661 var warn = false;
662 662 $('textarea').blur().each(function(){
663 663 if ($(this).data('changed')) {
664 664 warn = true;
665 665 }
666 666 });
667 667 if (warn) {return warnLeavingUnsavedMessage;}
668 668 };
669 669 }
670 670
671 671 function setupAjaxIndicator() {
672 672 $(document).bind('ajaxSend', function(event, xhr, settings) {
673 673 if ($('.ajax-loading').length === 0 && settings.contentType != 'application/octet-stream') {
674 674 $('#ajax-indicator').show();
675 675 }
676 676 });
677 677 $(document).bind('ajaxStop', function() {
678 678 $('#ajax-indicator').hide();
679 679 });
680 680 }
681 681
682 682 function setupTabs() {
683 683 if($('.tabs').length > 0) {
684 684 displayTabsButtons();
685 685 $(window).resize(displayTabsButtons);
686 686 }
687 687 }
688 688
689 689 function hideOnLoad() {
690 690 $('.hol').hide();
691 691 }
692 692
693 693 function addFormObserversForDoubleSubmit() {
694 694 $('form[method=post]').each(function() {
695 695 if (!$(this).hasClass('multiple-submit')) {
696 696 $(this).submit(function(form_submission) {
697 697 if ($(form_submission.target).attr('data-submitted')) {
698 698 form_submission.preventDefault();
699 699 } else {
700 700 $(form_submission.target).attr('data-submitted', true);
701 701 }
702 702 });
703 703 }
704 704 });
705 705 }
706 706
707 707 function defaultFocus(){
708 708 if (($('#content :focus').length == 0) && (window.location.hash == '')) {
709 709 $('#content input[type=text], #content textarea').first().focus();
710 710 }
711 711 }
712 712
713 713 function blockEventPropagation(event) {
714 714 event.stopPropagation();
715 715 event.preventDefault();
716 716 }
717 717
718 718 function toggleDisabledOnChange() {
719 719 var checked = $(this).is(':checked');
720 720 $($(this).data('disables')).attr('disabled', checked);
721 721 $($(this).data('enables')).attr('disabled', !checked);
722 722 $($(this).data('shows')).toggle(checked);
723 723 }
724 724 function toggleDisabledInit() {
725 725 $('input[data-disables], input[data-enables], input[data-shows]').each(toggleDisabledOnChange);
726 726 }
727 727
728 function toggleNewObjectDropdown() {
729 var dropdown = $('#new-object + ul.menu-children');
730 if(dropdown.hasClass('visible')){
731 dropdown.removeClass('visible');
732 }else{
733 dropdown.addClass('visible');
734 }
735 }
736
728 737 (function ( $ ) {
729 738
730 739 // detect if native date input is supported
731 740 var nativeDateInputSupported = true;
732 741
733 742 var input = document.createElement('input');
734 743 input.setAttribute('type','date');
735 744 if (input.type === 'text') {
736 745 nativeDateInputSupported = false;
737 746 }
738 747
739 748 var notADateValue = 'not-a-date';
740 749 input.setAttribute('value', notADateValue);
741 750 if (input.value === notADateValue) {
742 751 nativeDateInputSupported = false;
743 752 }
744 753
745 754 $.fn.datepickerFallback = function( options ) {
746 755 if (nativeDateInputSupported) {
747 756 return this;
748 757 } else {
749 758 return this.datepicker( options );
750 759 }
751 760 };
752 761 }( jQuery ));
753 762
754 763 $(document).ready(function(){
755 764 $('#content').on('change', 'input[data-disables], input[data-enables], input[data-shows]', toggleDisabledOnChange);
756 765 toggleDisabledInit();
757 766 });
758 767
759 768 function keepAnchorOnSignIn(form){
760 769 var hash = decodeURIComponent(self.document.location.hash);
761 770 if (hash) {
762 771 if (hash.indexOf("#") === -1) {
763 772 hash = "#" + hash;
764 773 }
765 774 form.action = form.action + hash;
766 775 }
767 776 return true;
768 777 }
769 778
770 779 $(document).ready(setupAjaxIndicator);
771 780 $(document).ready(hideOnLoad);
772 781 $(document).ready(addFormObserversForDoubleSubmit);
773 782 $(document).ready(defaultFocus);
774 783 $(document).ready(setupTabs);
@@ -1,1385 +1,1385
1 1 html {overflow-y:scroll;}
2 2 body { font-family: Verdana, sans-serif; font-size: 12px; color:#333; margin: 0; padding: 0; min-width: 900px; }
3 3
4 4 h1, h2, h3, h4 {font-family: "Trebuchet MS", Verdana, sans-serif;padding: 2px 10px 1px 0px;margin: 0 0 10px 0;}
5 5 #content h1, h2, h3, h4 {color: #555;}
6 6 h2, .wiki h1 {font-size: 20px;}
7 7 h3, .wiki h2 {font-size: 16px;}
8 8 h4, .wiki h3 {font-size: 13px;}
9 9 h4 {border-bottom: 1px dotted #bbb;}
10 10 pre, code {font-family: Consolas, Menlo, "Liberation Mono", Courier, monospace;}
11 11
12 12 /***** Layout *****/
13 13 #wrapper {background: white;overflow: hidden;}
14 14
15 15 #top-menu {background: #3E5B76; color: #fff; height:1.8em; font-size: 0.8em; padding: 2px 2px 0px 6px;}
16 16 #top-menu ul {margin: 0; padding: 0;}
17 17 #top-menu li {
18 18 float:left;
19 19 list-style-type:none;
20 20 margin: 0px 0px 0px 0px;
21 21 padding: 0px 0px 0px 0px;
22 22 white-space:nowrap;
23 23 }
24 24 #top-menu a {color: #fff; margin-right: 8px; font-weight: bold;}
25 25 #top-menu #loggedas { float: right; margin-right: 0.5em; color: #fff; }
26 26
27 27 #account {float:right;}
28 28
29 29 #header {min-height:5.3em;margin:0;background-color:#628DB6;color:#f8f8f8; padding: 4px 8px 20px 6px; position:relative;}
30 30 #header a {color:#f8f8f8;}
31 31 #header h1 { overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
32 32 #header h1 .breadcrumbs { display:block; font-size: .6em; font-weight: normal; }
33 33 #quick-search {float:right;}
34 34
35 35 #main-menu {position: absolute; bottom: 0px; left:6px; margin-right: -500px; width: 100%;}
36 36 #main-menu ul {margin: 0; padding: 0; width: 100%; white-space: nowrap;}
37 37 #main-menu li {
38 38 float:none;
39 39 list-style-type:none;
40 40 margin: 0px 2px 0px 0px;
41 41 padding: 0px 0px 0px 0px;
42 42 white-space:nowrap;
43 43 display:inline-block;
44 44 }
45 45 #main-menu li a {
46 46 display: block;
47 47 color: #fff;
48 48 text-decoration: none;
49 49 font-weight: bold;
50 50 margin: 0;
51 51 padding: 4px 10px 4px 10px;
52 52 }
53 53 #main-menu li a:hover {background:#759FCF; color:#fff;}
54 #main-menu li:hover ul.menu-children {display: block;}
54 #main-menu li:hover ul.menu-children, #main-menu li ul.menu-children.visible {display: block;}
55 55 #main-menu li a.selected, #main-menu li a.selected:hover {background:#fff; color:#555;}
56 56 #main-menu li a.new-object { background-color:#759FCF; }
57 57
58 58 #main-menu .menu-children {
59 59 display: none;
60 60 position:absolute;
61 61 width: inherit;
62 62 z-index:1;
63 63 background-color:#fff;
64 64 border-right: 1px solid #759FCF;
65 65 border-bottom: 1px solid #759FCF;
66 66 border-left: 1px solid #759FCF;
67 67 }
68 68 #main-menu .menu-children li {float:left; clear:both; width:100%;}
69 69 #main-menu .menu-children li a {color: #555; background-color:#fff; font-weight:normal;}
70 70 #main-menu .menu-children li a:hover {color: #fff; background-color: #759FCF;}
71 71
72 72 #main-menu .tabs-buttons {
73 73 right: 6px;
74 74 background-color: transparent;
75 75 border-bottom-color: transparent;
76 76 }
77 77
78 78 #admin-menu ul {margin: 0; padding: 0;}
79 79 #admin-menu li {margin: 0; padding: 0 0 6px 0; list-style-type:none;}
80 80
81 81 #admin-menu a { background-position: 0% 40%; background-repeat: no-repeat; padding-left: 20px; padding-top: 2px; padding-bottom: 3px;}
82 82 #admin-menu a.projects { background-image: url(../images/projects.png); }
83 83 #admin-menu a.users { background-image: url(../images/user.png); }
84 84 #admin-menu a.groups { background-image: url(../images/group.png); }
85 85 #admin-menu a.roles { background-image: url(../images/database_key.png); }
86 86 #admin-menu a.trackers { background-image: url(../images/ticket.png); }
87 87 #admin-menu a.issue_statuses { background-image: url(../images/ticket_edit.png); }
88 88 #admin-menu a.workflows { background-image: url(../images/ticket_go.png); }
89 89 #admin-menu a.custom_fields { background-image: url(../images/textfield.png); }
90 90 #admin-menu a.enumerations { background-image: url(../images/text_list_bullets.png); }
91 91 #admin-menu a.settings { background-image: url(../images/changeset.png); }
92 92 #admin-menu a.plugins { background-image: url(../images/plugin.png); }
93 93 #admin-menu a.info { background-image: url(../images/help.png); }
94 94 #admin-menu a.server_authentication { background-image: url(../images/server_key.png); }
95 95
96 96 #main {background-color:#EEEEEE;}
97 97
98 98 #sidebar{ float: right; width: 22%; position: relative; z-index: 9; padding: 0; margin: 0;}
99 99 * html #sidebar{ width: 22%; }
100 100 #sidebar h3{ font-size: 14px; margin-top:14px; color: #666; }
101 101 #sidebar hr{ width: 100%; margin: 0 auto; height: 1px; background: #ccc; border: 0; }
102 102 * html #sidebar hr{ width: 95%; position: relative; left: -6px; color: #ccc; }
103 103 #sidebar .contextual { margin-right: 1em; }
104 104 #sidebar ul, ul.flat {margin: 0; padding: 0;}
105 105 #sidebar ul li, ul.flat li {list-style-type:none;margin: 0px 2px 0px 0px; padding: 0px 0px 0px 0px;}
106 106 #sidebar div.wiki h3 {font-size:13px; margin-top:0; color:#555;}
107 107 #sidebar div.wiki ul {margin:inherit; padding-left:40px;}
108 108 #sidebar div.wiki ul li {list-style-type:inherit;}
109 109
110 110 #content { width: 75%; background-color: #fff; margin: 0px; border-right: 1px solid #ddd; padding: 6px 10px 10px 10px; z-index: 10; }
111 111 * html #content{ width: 75%; padding-left: 0; margin-top: 0px; padding: 6px 10px 10px 10px;}
112 112 html>body #content { min-height: 600px; }
113 113 * html body #content { height: 600px; } /* IE */
114 114
115 115 #main.nosidebar #sidebar{ display: none; }
116 116 #main.nosidebar #content{ width: auto; border-right: 0; }
117 117
118 118 #footer {clear: both; border-top: 1px solid #bbb; font-size: 0.9em; color: #aaa; padding: 5px; text-align:center; background:#fff;}
119 119
120 120 #login-form table {margin-top:5em; padding:1em; margin-left: auto; margin-right: auto; border: 2px solid #FDBF3B; background-color:#FFEBC1; }
121 121 #login-form table td {padding: 6px;}
122 122 #login-form label {font-weight: bold;}
123 123 #login-form input#username, #login-form input#password { width: 300px; }
124 124
125 125 div.modal { border-radius:5px; background:#fff; z-index:50; padding:4px;}
126 126 div.modal h3.title {display:none;}
127 127 div.modal p.buttons {text-align:right; margin-bottom:0;}
128 128 div.modal .box p {margin: 0.3em 0;}
129 129
130 130 input#openid_url { background: url(../images/openid-bg.gif) no-repeat; background-color: #fff; background-position: 0 50%; padding-left: 18px; }
131 131
132 132 .clear:after{ content: "."; display: block; height: 0; clear: both; visibility: hidden; }
133 133
134 134 .mobile-show {display: none;}
135 135
136 136 /***** Links *****/
137 137 a, a:link, a:visited{ color: #169; text-decoration: none; }
138 138 a:hover, a:active{ color: #c61a1a; text-decoration: underline;}
139 139 a img{ border: 0; }
140 140
141 141 a.issue.closed, a.issue.closed:link, a.issue.closed:visited { color: #999; text-decoration: line-through; }
142 142 a.project.closed, a.project.closed:link, a.project.closed:visited { color: #999; }
143 143 a.user.locked, a.user.locked:link, a.user.locked:visited {color: #999;}
144 144
145 145 #sidebar a.selected {line-height:1.7em; padding:1px 3px 2px 2px; margin-left:-2px; background-color:#9DB9D5; color:#fff; border-radius:2px;}
146 146 #sidebar a.selected:hover {text-decoration:none;}
147 147 #admin-menu a {line-height:1.7em;}
148 148 #admin-menu a.selected {padding-left: 20px !important; background-position: 2px 40%;}
149 149
150 150 a.collapsible {padding-left: 12px; background: url(../images/arrow_expanded.png) no-repeat -3px 40%;}
151 151 a.collapsible.collapsed {background: url(../images/arrow_collapsed.png) no-repeat -5px 40%;}
152 152
153 153 a#toggle-completed-versions {color:#999;}
154 154
155 155 a.toggle-checkboxes { margin-left: 5px; padding-left: 12px; background: url(../images/toggle_check.png) no-repeat 0% 50%; }
156 156
157 157 /***** Tables *****/
158 158 table.list, .table-list { border: 1px solid #e4e4e4; border-collapse: collapse; width: 100%; margin-bottom: 4px; }
159 159 table.list th, .table-list-header { background-color:#EEEEEE; padding: 4px; white-space:nowrap; font-weight:bold; }
160 160 table.list td {text-align:center; vertical-align:top; padding-right:10px;}
161 161 table.list td.id { width: 2%; text-align: center;}
162 162 table.list td.name, table.list td.description, table.list td.subject, table.list td.comments, table.list td.roles {text-align: left;}
163 163 table.list td.tick {width:15%}
164 164 table.list td.checkbox { width: 15px; padding: 2px 0 0 0; }
165 165 table.list td.checkbox input {padding:0px;}
166 166 table.list td.buttons, div.buttons { width: 15%; white-space:nowrap; text-align: right; }
167 167 table.list td.buttons a, div.buttons a { margin-right: 0.6em; }
168 168 table.list td.buttons img, div.buttons img {vertical-align:middle;}
169 169 table.list td.reorder {width:15%; white-space:nowrap; text-align:center; }
170 170 table.list table.progress td {padding-right:0px;}
171 171 table.list caption { text-align: left; padding: 0.5em 0.5em 0.5em 0; }
172 172 #role-permissions-trackers table.list th {white-space:normal;}
173 173
174 174 .table-list-cell {display: table-cell; vertical-align: top; padding:2px; }
175 175
176 176 tr.project td.name a { white-space:nowrap; }
177 177 tr.project.closed, tr.project.archived { color: #aaa; }
178 178 tr.project.closed a, tr.project.archived a { color: #aaa; }
179 179
180 180 tr.project.idnt td.name span {background: url(../images/bullet_arrow_right.png) no-repeat 0 50%; padding-left: 16px;}
181 181 tr.project.idnt-1 td.name {padding-left: 0.5em;}
182 182 tr.project.idnt-2 td.name {padding-left: 2em;}
183 183 tr.project.idnt-3 td.name {padding-left: 3.5em;}
184 184 tr.project.idnt-4 td.name {padding-left: 5em;}
185 185 tr.project.idnt-5 td.name {padding-left: 6.5em;}
186 186 tr.project.idnt-6 td.name {padding-left: 8em;}
187 187 tr.project.idnt-7 td.name {padding-left: 9.5em;}
188 188 tr.project.idnt-8 td.name {padding-left: 11em;}
189 189 tr.project.idnt-9 td.name {padding-left: 12.5em;}
190 190
191 191 tr.issue { text-align: center; white-space: nowrap; }
192 192 tr.issue td.subject, tr.issue td.category, td.assigned_to, tr.issue td.string, tr.issue td.text, tr.issue td.list, tr.issue td.relations, tr.issue td.parent { white-space: normal; }
193 193 tr.issue td.relations { text-align: left; }
194 194 tr.issue td.done_ratio table.progress { margin-left:auto; margin-right: auto;}
195 195 tr.issue td.relations span {white-space: nowrap;}
196 196 table.issues td.description {color:#777; font-size:90%; padding:4px 4px 4px 24px; text-align:left; white-space:normal;}
197 197 table.issues td.description pre {white-space:normal;}
198 198
199 199 tr.issue.idnt td.subject {background: url(../images/bullet_arrow_right.png) no-repeat 0 50%;}
200 200 tr.issue.idnt-1 td.subject {padding-left: 24px; background-position: 8px 50%;}
201 201 tr.issue.idnt-2 td.subject {padding-left: 40px; background-position: 24px 50%;}
202 202 tr.issue.idnt-3 td.subject {padding-left: 56px; background-position: 40px 50%;}
203 203 tr.issue.idnt-4 td.subject {padding-left: 72px; background-position: 56px 50%;}
204 204 tr.issue.idnt-5 td.subject {padding-left: 88px; background-position: 72px 50%;}
205 205 tr.issue.idnt-6 td.subject {padding-left: 104px; background-position: 88px 50%;}
206 206 tr.issue.idnt-7 td.subject {padding-left: 120px; background-position: 104px 50%;}
207 207 tr.issue.idnt-8 td.subject {padding-left: 136px; background-position: 120px 50%;}
208 208 tr.issue.idnt-9 td.subject {padding-left: 152px; background-position: 136px 50%;}
209 209
210 210 table.issue-report {table-layout:fixed;}
211 211
212 212 tr.entry { border: 1px solid #f8f8f8; }
213 213 tr.entry td { white-space: nowrap; }
214 214 tr.entry td.filename {width:30%; text-align:left;}
215 215 tr.entry td.filename_no_report {width:70%; text-align:left;}
216 216 tr.entry td.size { text-align: right; font-size: 90%; }
217 217 tr.entry td.revision, tr.entry td.author { text-align: center; }
218 218 tr.entry td.age { text-align: right; }
219 219 tr.entry.file td.filename a { margin-left: 16px; }
220 220 tr.entry.file td.filename_no_report a { margin-left: 16px; }
221 221
222 222 tr span.expander {background-image: url(../images/bullet_toggle_plus.png); padding-left: 8px; margin-left: 0; cursor: pointer;}
223 223 tr.open span.expander {background-image: url(../images/bullet_toggle_minus.png);}
224 224
225 225 tr.changeset { height: 20px }
226 226 tr.changeset ul, ol { margin-top: 0px; margin-bottom: 0px; }
227 227 tr.changeset td.revision_graph { width: 15%; background-color: #fffffb; }
228 228 tr.changeset td.author { text-align: center; width: 15%; white-space:nowrap;}
229 229 tr.changeset td.committed_on { text-align: center; width: 15%; white-space:nowrap;}
230 230
231 231 table.files tbody th {text-align:left;}
232 232 table.files tr.file td.filename { text-align: left; padding-left: 24px; }
233 233 table.files tr.file td.digest { font-size: 80%; }
234 234
235 235 table.members td.roles, table.memberships td.roles { width: 45%; }
236 236
237 237 tr.message { height: 2.6em; }
238 238 tr.message td.subject { padding-left: 20px; }
239 239 tr.message td.created_on { white-space: nowrap; }
240 240 tr.message td.last_message { font-size: 80%; white-space: nowrap; }
241 241 tr.message.locked td.subject { background: url(../images/locked.png) no-repeat 0 1px; }
242 242 tr.message.sticky td.subject { background: url(../images/bullet_go.png) no-repeat 0 1px; font-weight: bold; }
243 243
244 244 tr.version.closed, tr.version.closed a { color: #999; }
245 245 tr.version td.name { padding-left: 20px; }
246 246 tr.version.shared td.name { background: url(../images/link.png) no-repeat 0% 70%; }
247 247 tr.version td.date, tr.version td.status, tr.version td.sharing { text-align: center; white-space:nowrap; }
248 248
249 249 tr.user td {width:13%;white-space: nowrap;}
250 250 td.username, td.firstname, td.lastname, td.email {text-align:left !important;}
251 251 tr.user td.email { width:18%; }
252 252 tr.user.locked, tr.user.registered { color: #aaa; }
253 253 tr.user.locked a, tr.user.registered a { color: #aaa; }
254 254
255 255 table.permissions td.role {color:#999;font-size:90%;font-weight:normal !important;text-align:center;vertical-align:bottom;}
256 256
257 257 tr.wiki-page-version td.updated_on, tr.wiki-page-version td.author {text-align:center;}
258 258
259 259 tr.time-entry { text-align: center; white-space: nowrap; }
260 260 tr.time-entry td.issue, tr.time-entry td.comments, tr.time-entry td.subject, tr.time-entry td.activity { text-align: left; white-space: normal; }
261 261 td.hours { text-align: right; font-weight: bold; padding-right: 0.5em; }
262 262 td.hours .hours-dec { font-size: 0.9em; }
263 263
264 264 table.plugins td { vertical-align: middle; }
265 265 table.plugins td.configure { text-align: right; padding-right: 1em; }
266 266 table.plugins span.name { font-weight: bold; display: block; margin-bottom: 6px; }
267 267 table.plugins span.description { display: block; font-size: 0.9em; }
268 268 table.plugins span.url { display: block; font-size: 0.9em; }
269 269
270 270 tr.group td { padding: 0.8em 0 0.5em 0.3em; border-bottom: 1px solid #ccc; text-align:left; }
271 271 tr.group span.name {font-weight:bold;}
272 272 tr.group span.count {font-weight:bold; position:relative; top:-1px; color:#fff; font-size:10px; background:#9DB9D5; padding:0px 6px 1px 6px; border-radius:3px; margin-left:4px;}
273 273 tr.group span.totals {color: #aaa; font-size: 80%;}
274 274 tr.group span.totals .value {font-weight:bold; color:#777;}
275 275 tr.group a.toggle-all { color: #aaa; font-size: 80%; display:none; float:right; margin-right:4px;}
276 276 tr.group:hover a.toggle-all { display:inline;}
277 277 a.toggle-all:hover {text-decoration:none;}
278 278
279 279 table.list tbody tr:hover { background-color:#ffffdd; }
280 280 table.list tbody tr.group:hover { background-color:inherit; }
281 281 table td {padding:2px;}
282 282 table p {margin:0;}
283 283 .odd {background-color:#f6f7f8;}
284 284 .even {background-color: #fff;}
285 285
286 286 tr.builtin td.name {font-style:italic;}
287 287
288 288 a.sort { padding-right: 16px; background-position: 100% 50%; background-repeat: no-repeat; }
289 289 a.sort.asc { background-image: url(../images/sort_asc.png); }
290 290 a.sort.desc { background-image: url(../images/sort_desc.png); }
291 291
292 292 table.boards a.board, h3.comments { background: url(../images/comment.png) no-repeat 0% 50%; padding-left: 20px; }
293 293 table.boards td.last-message {text-align:left;font-size:80%;}
294 294
295 295 div.table-list.boards .table-list-cell.name {width: 30%;}
296 296
297 297 table.messages td.last_message {text-align:left;}
298 298
299 299 #query_form_content {font-size:90%;}
300 300
301 301 .query_sort_criteria_count {
302 302 display: inline-block;
303 303 min-width: 1em;
304 304 }
305 305
306 306 table.query-columns {
307 307 border-collapse: collapse;
308 308 border: 0;
309 309 }
310 310
311 311 table.query-columns td.buttons {
312 312 vertical-align: middle;
313 313 text-align: center;
314 314 }
315 315 table.query-columns td.buttons input[type=button] {width:35px;}
316 316 .query-totals {text-align:right; margin-top:-2.3em;}
317 317 .query-totals>span {margin-left:0.6em;}
318 318 .query-totals .value {font-weight:bold;}
319 319
320 320 td.center {text-align:center;}
321 321
322 322 h3.version { background: url(../images/package.png) no-repeat 0% 50%; padding-left: 20px; }
323 323
324 324 div.issues h3 { background: url(../images/ticket.png) no-repeat 0% 50%; padding-left: 20px; }
325 325 div.members h3 { background: url(../images/group.png) no-repeat 0% 50%; padding-left: 20px; }
326 326 div.news h3 { background: url(../images/news.png) no-repeat 0% 50%; padding-left: 20px; }
327 327 div.projects h3 { background: url(../images/projects.png) no-repeat 0% 50%; padding-left: 20px; }
328 328
329 329 #watchers select {width: 95%; display: block;}
330 330 #watchers a.delete {opacity: 0.4; margin-left: 5px;}
331 331 #watchers a.delete:hover {opacity: 1;}
332 332 #watchers img.gravatar {margin: 0 4px 2px 0;}
333 333
334 334 span#watchers_inputs {overflow:auto; display:block;}
335 335 span.search_for_watchers {display:block;}
336 336 span.search_for_watchers, span.add_attachment {font-size:80%; line-height:2.5em;}
337 337 span.search_for_watchers a, span.add_attachment a {padding-left:16px; background: url(../images/bullet_add.png) no-repeat 0 50%; }
338 338
339 339
340 340 .highlight { background-color: #FCFD8D;}
341 341 .highlight.token-1 { background-color: #faa;}
342 342 .highlight.token-2 { background-color: #afa;}
343 343 .highlight.token-3 { background-color: #aaf;}
344 344
345 345 .box{
346 346 padding:6px;
347 347 margin-bottom: 10px;
348 348 background-color:#f6f6f6;
349 349 color:#505050;
350 350 line-height:1.5em;
351 351 border: 1px solid #e4e4e4;
352 352 word-wrap: break-word;
353 353 border-radius: 3px;
354 354 }
355 355 .pagination .per-page span.selected {
356 356 font-weight: bold;
357 357 }
358 358
359 359 div.square {
360 360 border: 1px solid #999;
361 361 float: left;
362 362 margin: .3em .4em 0 .4em;
363 363 overflow: hidden;
364 364 width: .6em; height: .6em;
365 365 }
366 366 .contextual {float:right; white-space: nowrap; line-height:1.4em;margin-top:5px; padding-left: 10px; font-size:0.9em;}
367 367 .contextual input, .contextual select {font-size:0.9em;}
368 368 .message .contextual { margin-top: 0; }
369 369
370 370 .splitcontent {overflow:auto;}
371 371 .splitcontentleft{float:left; width:49%;}
372 372 .splitcontentright{float:right; width:49%;}
373 373 form {display: inline;}
374 374 input, select {vertical-align: middle; margin-top: 1px; margin-bottom: 1px;}
375 375 fieldset {border: 1px solid #e4e4e4; margin:0;}
376 376 legend {color: #333;}
377 377 hr { width: 100%; height: 1px; background: #ccc; border: 0;}
378 378 blockquote { font-style: italic; border-left: 3px solid #e0e0e0; padding-left: 0.6em; margin-left: 2.4em;}
379 379 blockquote blockquote { margin-left: 0;}
380 380 abbr, span.field-description[title] { border-bottom: 1px dotted #aaa; cursor: help; }
381 381 textarea.wiki-edit {width:99%; resize:vertical;}
382 382 li p {margin-top: 0;}
383 383 div.issue {background:#ffffdd; padding:6px; margin-bottom:6px; border: 1px solid #d7d7d7; border-radius:3px;}
384 384 p.breadcrumb { font-size: 0.9em; margin: 4px 0 4px 0;}
385 385 p.subtitle { font-size: 0.9em; margin: -6px 0 12px 0; font-style: italic; }
386 386 p.footnote { font-size: 0.9em; margin-top: 0px; margin-bottom: 0px; }
387 387 .ltr {direction:ltr !important; unicode-bidi:bidi-override;}
388 388 .rtl {direction:rtl !important; unicode-bidi:bidi-override;}
389 389
390 390 div.issue div.subject div div { padding-left: 16px; }
391 391 div.issue div.subject p {margin: 0; margin-bottom: 0.1em; font-size: 90%; color: #999;}
392 392 div.issue div.subject>div>p { margin-top: 0.5em; }
393 393 div.issue div.subject h3 {margin: 0; margin-bottom: 0.1em;}
394 394 div.issue span.private, div.journal span.private { position:relative; bottom: 2px; text-transform: uppercase; background: #d22; color: #fff; font-weight:bold; padding: 0px 2px 0px 2px; font-size: 60%; margin-right: 2px; border-radius: 2px;}
395 395 div.issue .next-prev-links {color:#999;}
396 396 div.issue .attributes {margin-top: 2em;}
397 397 div.issue .attribute {padding-left:180px; clear:left; min-height: 1.8em;}
398 398 div.issue .attribute .label {width: 170px; margin-left:-180px; font-weight:bold; float:left;}
399 399 div.issue.overdue .due-date .value { color: #c22; }
400 400
401 401 #issue_tree table.issues, #relations table.issues { border: 0; }
402 402 #issue_tree td.checkbox, #relations td.checkbox {display:none;}
403 403 #relations td.buttons {padding:0;}
404 404
405 405 fieldset.collapsible {border-width: 1px 0 0 0;}
406 406 fieldset.collapsible>legend { padding-left: 16px; background: url(../images/arrow_expanded.png) no-repeat 0% 40%; cursor:pointer; }
407 407 fieldset.collapsible.collapsed>legend { background-image: url(../images/arrow_collapsed.png); }
408 408
409 409 fieldset#date-range p { margin: 2px 0 2px 0; }
410 410 fieldset#filters table { border-collapse: collapse; }
411 411 fieldset#filters table td { padding: 0; vertical-align: middle; }
412 412 fieldset#filters tr.filter { height: 2.1em; }
413 413 fieldset#filters td.field { width:230px; }
414 414 fieldset#filters td.operator { width:180px; }
415 415 fieldset#filters td.operator select {max-width:170px;}
416 416 fieldset#filters td.values { white-space:nowrap; }
417 417 fieldset#filters td.values select {min-width:130px;}
418 418 fieldset#filters td.values input {height:1em;}
419 419
420 420 #filters-table {width:60%; float:left;}
421 421 .add-filter {width:35%; float:right; text-align: right; vertical-align: top;}
422 422
423 423 #issue_is_private_wrap {float:right; margin-right:1em;}
424 424 .toggle-multiselect {background: url(../images/bullet_toggle_plus.png) no-repeat 0% 40%; padding-left:16px; margin-left:0; margin-right:5px; cursor:pointer;}
425 425 .buttons { font-size: 0.9em; margin-bottom: 1.4em; margin-top: 1em; }
426 426
427 427 div#issue-changesets {float:right; width:45%; margin-left: 1em; margin-bottom: 1em; background: #fff; padding-left: 1em; font-size: 90%;}
428 428 div#issue-changesets div.changeset { padding: 4px;}
429 429 div#issue-changesets div.changeset { border-bottom: 1px solid #ddd; }
430 430 div#issue-changesets p { margin-top: 0; margin-bottom: 1em;}
431 431
432 432 .journal ul.details img {margin:0 0 -3px 4px;}
433 433 div.journal {overflow:auto;}
434 434 div.journal.private-notes {border-left:2px solid #d22; padding-left:4px; margin-left:-6px;}
435 435 div.journal ul.details {color:#959595; margin-bottom: 1.5em;}
436 436 div.journal ul.details a {color:#70A7CD;}
437 437 div.journal ul.details a:hover {color:#D14848;}
438 438
439 439 div#activity dl, #search-results { margin-left: 2em; }
440 440 div#activity dd, #search-results dd { margin-bottom: 1em; padding-left: 18px; font-size: 0.9em; }
441 441 div#activity dt, #search-results dt { margin-bottom: 0px; padding-left: 20px; line-height: 18px; background-position: 0 50%; background-repeat: no-repeat; }
442 442 div#activity dt.me .time { border-bottom: 1px solid #999; }
443 443 div#activity dt .time { color: #777; font-size: 80%; }
444 444 div#activity dd .description, #search-results dd .description { font-style: italic; }
445 445 div#activity span.project:after, #search-results span.project:after { content: " -"; }
446 446 div#activity dd span.description, #search-results dd span.description { display:block; color: #808080; }
447 447 div#activity dt.grouped {margin-left:5em;}
448 448 div#activity dd.grouped {margin-left:9em;}
449 449
450 450 #search-results dd { margin-bottom: 1em; padding-left: 20px; margin-left:0px; }
451 451
452 452 div#search-results-counts {float:right;}
453 453 div#search-results-counts ul { margin-top: 0.5em; }
454 454 div#search-results-counts li { list-style-type:none; float: left; margin-left: 1em; }
455 455
456 456 dt.issue { background-image: url(../images/ticket.png); }
457 457 dt.issue-edit { background-image: url(../images/ticket_edit.png); }
458 458 dt.issue-closed { background-image: url(../images/ticket_checked.png); }
459 459 dt.issue-note { background-image: url(../images/ticket_note.png); }
460 460 dt.changeset { background-image: url(../images/changeset.png); }
461 461 dt.news { background-image: url(../images/news.png); }
462 462 dt.message { background-image: url(../images/message.png); }
463 463 dt.reply { background-image: url(../images/comments.png); }
464 464 dt.wiki-page { background-image: url(../images/wiki_edit.png); }
465 465 dt.attachment { background-image: url(../images/attachment.png); }
466 466 dt.document { background-image: url(../images/document.png); }
467 467 dt.project { background-image: url(../images/projects.png); }
468 468 dt.time-entry { background-image: url(../images/time.png); }
469 469
470 470 #search-results dt.issue.closed { background-image: url(../images/ticket_checked.png); }
471 471
472 472 div#roadmap .related-issues { margin-bottom: 1em; }
473 473 div#roadmap .related-issues td.checkbox { display: none; }
474 474 div#roadmap .wiki h1:first-child { display: none; }
475 475 div#roadmap .wiki h1 { font-size: 120%; }
476 476 div#roadmap .wiki h2 { font-size: 110%; }
477 477 body.controller-versions.action-show div#roadmap .related-issues {width:70%;}
478 478
479 479 div#version-summary { float:right; width:28%; margin-left: 16px; margin-bottom: 16px; background-color: #fff; }
480 480 div#version-summary fieldset { margin-bottom: 1em; }
481 481 div#version-summary fieldset.time-tracking table { width:100%; }
482 482 div#version-summary th, div#version-summary td.total-hours { text-align: right; }
483 483
484 484 table#time-report td.hours, table#time-report th.period, table#time-report th.total { text-align: right; padding-right: 0.5em; }
485 485 table#time-report tbody tr.subtotal { font-style: italic; color:#777;}
486 486 table#time-report tbody tr.subtotal td.hours { color:#b0b0b0; }
487 487 table#time-report tbody tr.total { font-weight: bold; background-color:#EEEEEE; border-top:1px solid #e4e4e4;}
488 488 table#time-report .hours-dec { font-size: 0.9em; }
489 489
490 490 div.wiki-page .contextual a {opacity: 0.4}
491 491 div.wiki-page .contextual a:hover {opacity: 1}
492 492
493 493 form .attributes select { width: 60%; }
494 494 form .attributes select + a.icon-only { vertical-align: middle; margin-left: 4px; }
495 495 input#issue_subject, input#document_title { width: 99%; }
496 496 select#issue_done_ratio { width: 95px; }
497 497
498 498 ul.projects {margin:0; padding-left:1em;}
499 499 ul.projects ul {padding-left:1.6em;}
500 500 ul.projects.root {margin:0; padding:0;}
501 501 ul.projects li {list-style-type:none;}
502 502
503 503 #projects-index ul.projects ul.projects { border-left: 3px solid #e0e0e0; padding-left:1em;}
504 504 #projects-index ul.projects li.root {margin-bottom: 1em;}
505 505 #projects-index ul.projects li.child {margin-top: 1em;}
506 506 #projects-index ul.projects div.root a.project { font-family: "Trebuchet MS", Verdana, sans-serif; font-weight: bold; font-size: 16px; margin: 0 0 10px 0; }
507 507 .my-project { padding-left: 18px; background: url(../images/fav.png) no-repeat 0 50%; }
508 508
509 509 #notified-projects>ul, #tracker_project_ids>ul, #custom_field_project_ids>ul {max-height:250px; overflow-y:auto;}
510 510
511 511 #related-issues li img {vertical-align:middle;}
512 512
513 513 ul.properties {padding:0; font-size: 0.9em; color: #777;}
514 514 ul.properties li {list-style-type:none;}
515 515 ul.properties li span {font-style:italic;}
516 516
517 517 .total-hours { font-size: 110%; font-weight: bold; }
518 518 .total-hours span.hours-int { font-size: 120%; }
519 519
520 520 .autoscroll {overflow-x: auto; padding:1px; margin-bottom: 1.2em; position: relative;}
521 521 #user_login, #user_firstname, #user_lastname, #user_mail, #my_account_form select, #user_form select, #user_identity_url { width: 90%; }
522 522
523 523 #workflow_copy_form select { width: 200px; }
524 524 table.transitions td.enabled {background: #bfb;}
525 525 #workflow_form table select {font-size:90%; max-width:100px;}
526 526 table.fields_permissions td.readonly {background:#ddd;}
527 527 table.fields_permissions td.required {background:#d88;}
528 528
529 529 select.expandable {vertical-align:top;}
530 530
531 531 textarea#custom_field_possible_values {width: 95%; resize:vertical}
532 532 textarea#custom_field_default_value {width: 95%; resize:vertical}
533 533 .sort-handle {display:inline-block; vertical-align:middle;}
534 534
535 535 input#content_comments {width: 99%}
536 536
537 537 span.pagination {margin-left:3px; color:#888;}
538 538 .pagination ul.pages {
539 539 margin: 0 5px 0 0;
540 540 padding: 0;
541 541 display: inline;
542 542 }
543 543 .pagination ul.pages li {
544 544 display: inline-block;
545 545 padding: 0;
546 546 border: 1px solid #ccc;
547 547 margin-left: -1px;
548 548 line-height: 2em;
549 549 margin-bottom: 1em;
550 550 white-space: nowrap;
551 551 text-align: center;
552 552 }
553 553 .pagination ul.pages li a,
554 554 .pagination ul.pages li span {
555 555 padding: 3px 8px;
556 556 }
557 557 .pagination ul.pages li:first-child {
558 558 border-top-left-radius: 4px;
559 559 border-bottom-left-radius: 4px;
560 560 }
561 561 .pagination ul.pages li:last-child {
562 562 border-top-right-radius: 4px;
563 563 border-bottom-right-radius: 4px;
564 564 }
565 565 .pagination ul.pages li.current {
566 566 color: white;
567 567 background-color: #628DB6;
568 568 border-color: #628DB6;
569 569 }
570 570 .pagination ul.pages li.page:hover {
571 571 background-color: #EEE;
572 572 }
573 573 .pagination ul.pages li.page a:hover,
574 574 .pagination ul.pages li.page a:active {
575 575 color: inherit;
576 576 text-decoration: inherit;
577 577 }
578 578 span.pagination>span {white-space:nowrap;}
579 579
580 580 #search-form fieldset p {margin:0.2em 0;}
581 581
582 582 /***** Tabular forms ******/
583 583 .tabular p{
584 584 margin: 0;
585 585 padding: 3px 0 3px 0;
586 586 padding-left: 180px; /* width of left column containing the label elements */
587 587 min-height: 1.8em;
588 588 clear:left;
589 589 }
590 590
591 591 html>body .tabular p {overflow:hidden;}
592 592
593 593 .tabular input, .tabular select {max-width:95%}
594 594 .tabular textarea {width:95%; resize:vertical;}
595 595
596 596 .tabular label{
597 597 font-weight: bold;
598 598 float: left;
599 599 text-align: right;
600 600 /* width of left column */
601 601 margin-left: -180px;
602 602 /* width of labels. Should be smaller than left column to create some right margin */
603 603 width: 175px;
604 604 }
605 605
606 606 .tabular label.floating{
607 607 font-weight: normal;
608 608 margin-left: 0px;
609 609 text-align: left;
610 610 width: 270px;
611 611 }
612 612
613 613 .tabular label.block{
614 614 font-weight: normal;
615 615 margin-left: 0px !important;
616 616 text-align: left;
617 617 float: none;
618 618 display: block;
619 619 width: auto !important;
620 620 }
621 621
622 622 .tabular label.inline{
623 623 font-weight: normal;
624 624 float:none;
625 625 margin-left: 5px !important;
626 626 width: auto;
627 627 }
628 628
629 629 label.no-css {
630 630 font-weight: inherit;
631 631 float:none;
632 632 text-align:left;
633 633 margin-left:0px;
634 634 width:auto;
635 635 }
636 636 input#time_entry_comments { width: 90%;}
637 637
638 638 #preview fieldset {margin-top: 1em; background: url(../images/draft.png)}
639 639
640 640 .tabular.settings p{ padding-left: 300px; }
641 641 .tabular.settings label{ margin-left: -300px; width: 295px; }
642 642 .tabular.settings textarea { width: 99%; }
643 643
644 644 .settings.enabled_scm table {width:100%}
645 645 .settings.enabled_scm td.scm_name{ font-weight: bold; }
646 646
647 647 fieldset.settings label { display: block; }
648 648 fieldset#notified_events .parent { padding-left: 20px; }
649 649
650 650 span.required {color: #bb0000;}
651 651 .summary {font-style: italic;}
652 652
653 653 .check_box_group {
654 654 display:block;
655 655 width:95%;
656 656 max-height:300px;
657 657 overflow-y:auto;
658 658 padding:2px 4px 4px 2px;
659 659 background:#fff;
660 660 border:1px solid #9EB1C2;
661 661 border-radius:2px
662 662 }
663 663 .check_box_group label {
664 664 font-weight: normal;
665 665 margin-left: 0px !important;
666 666 text-align: left;
667 667 float: none;
668 668 display: block;
669 669 width: auto;
670 670 }
671 671 .check_box_group.bool_cf {border:0; background:inherit;}
672 672 .check_box_group.bool_cf label {display: inline;}
673 673
674 674 #attachments_fields input.description {margin-left:4px; width:340px;}
675 675 #attachments_fields span {display:block; white-space:nowrap;}
676 676 #attachments_fields input.filename {border:0; height:1.8em; width:250px; color:#555; background-color:inherit; background:url(../images/attachment.png) no-repeat 1px 50%; padding-left:18px;}
677 677 #attachments_fields .ajax-waiting input.filename {background:url(../images/hourglass.png) no-repeat 0px 50%;}
678 678 #attachments_fields .ajax-loading input.filename {background:url(../images/loading.gif) no-repeat 0px 50%;}
679 679 #attachments_fields div.ui-progressbar { width: 100px; height:14px; margin: 2px 0 -5px 8px; display: inline-block; }
680 680 a.remove-upload {background: url(../images/delete.png) no-repeat 1px 50%; width:1px; display:inline-block; padding-left:16px;}
681 681 a.remove-upload:hover {text-decoration:none !important;}
682 682
683 683 div.fileover { background-color: lavender; }
684 684
685 685 div.attachments { margin-top: 12px; }
686 686 div.attachments p { margin:4px 0 2px 0; }
687 687 div.attachments img { vertical-align: middle; }
688 688 div.attachments span.author { font-size: 0.9em; color: #888; }
689 689
690 690 div.thumbnails {margin-top:0.6em;}
691 691 div.thumbnails div {background:#fff;border:2px solid #ddd;display:inline-block;margin-right:2px;}
692 692 div.thumbnails img {margin: 3px; vertical-align: middle;}
693 693 #history div.thumbnails {margin-left: 2em;}
694 694
695 695 p.other-formats { text-align: right; font-size:0.9em; color: #666; }
696 696 .other-formats span + span:before { content: "| "; }
697 697
698 698 a.atom { background: url(../images/feed.png) no-repeat 1px 50%; padding: 2px 0px 3px 16px; }
699 699
700 700 em.info {font-style:normal;font-size:90%;color:#888;display:block;}
701 701 em.info.error {padding-left:20px; background:url(../images/exclamation.png) no-repeat 0 50%;}
702 702
703 703 textarea.text_cf {width:95%; resize:vertical;}
704 704 input.string_cf, input.link_cf {width:95%;}
705 705 select.bool_cf {width:auto !important;}
706 706
707 707 #tab-content-modules fieldset p {margin:3px 0 4px 0;}
708 708
709 709 #tab-content-users .splitcontentleft {width: 64%;}
710 710 #tab-content-users .splitcontentright {width: 34%;}
711 711 #tab-content-users fieldset {padding:1em; margin-bottom: 1em;}
712 712 #tab-content-users fieldset legend {font-weight: bold;}
713 713 #tab-content-users fieldset label {display: block;}
714 714 #tab-content-users #principals {max-height: 400px; overflow: auto;}
715 715
716 716 #users_for_watcher {height: 200px; overflow:auto;}
717 717 #users_for_watcher label {display: block;}
718 718
719 719 table.members td.name {padding-left: 20px;}
720 720 table.members td.group, table.members td.groupnonmember, table.members td.groupanonymous {background: url(../images/group.png) no-repeat 0% 1px;}
721 721
722 722 input#principal_search, input#user_search {width:90%}
723 723 .roles-selection label {display:inline-block; width:210px;}
724 724
725 725 input.autocomplete {
726 726 background: #fff url(../images/magnifier.png) no-repeat 2px 50%; padding-left:20px !important;
727 727 border:1px solid #9EB1C2; border-radius:2px; height:1.5em;
728 728 }
729 729 input.autocomplete.ajax-loading {
730 730 background-image: url(../images/loading.gif);
731 731 }
732 732
733 733 .role-visibility {padding-left:2em;}
734 734
735 735 .objects-selection {
736 736 height: 300px;
737 737 overflow: auto;
738 738 margin-bottom: 1em;
739 739 }
740 740
741 741 .objects-selection label {
742 742 display: block;
743 743 }
744 744
745 745 .objects-selection>div {
746 746 column-count: auto;
747 747 column-width: 200px;
748 748 -webkit-column-count: auto;
749 749 -webkit-column-width: 200px;
750 750 -webkit-column-gap : 0.5rem;
751 751 -webkit-column-rule: 1px solid #ccc;
752 752 -moz-column-count: auto;
753 753 -moz-column-width: 200px;
754 754 -moz-column-gap : 0.5rem;
755 755 -moz-column-rule: 1px solid #ccc;
756 756 }
757 757
758 758 /***** Flash & error messages ****/
759 759 #errorExplanation, div.flash, .nodata, .warning, .conflict {
760 760 padding: 4px 4px 4px 30px;
761 761 margin-bottom: 12px;
762 762 font-size: 1.1em;
763 763 border: 2px solid;
764 764 border-radius: 3px;
765 765 }
766 766
767 767 div.flash {margin-top: 8px;}
768 768
769 769 div.flash.error, #errorExplanation {
770 770 background: url(../images/exclamation.png) 8px 50% no-repeat;
771 771 background-color: #ffe3e3;
772 772 border-color: #dd0000;
773 773 color: #880000;
774 774 }
775 775
776 776 div.flash.notice {
777 777 background: url(../images/true.png) 8px 5px no-repeat;
778 778 background-color: #dfffdf;
779 779 border-color: #9fcf9f;
780 780 color: #005f00;
781 781 }
782 782
783 783 div.flash.warning, .conflict {
784 784 background: url(../images/warning.png) 8px 5px no-repeat;
785 785 background-color: #FFEBC1;
786 786 border-color: #FDBF3B;
787 787 color: #A6750C;
788 788 text-align: left;
789 789 }
790 790
791 791 .nodata, .warning {
792 792 text-align: center;
793 793 background-color: #FFEBC1;
794 794 border-color: #FDBF3B;
795 795 color: #A6750C;
796 796 }
797 797
798 798 #errorExplanation ul { font-size: 0.9em;}
799 799 #errorExplanation h2, #errorExplanation p { display: none; }
800 800
801 801 .conflict-details {font-size:80%;}
802 802
803 803 /***** Ajax indicator ******/
804 804 #ajax-indicator {
805 805 position: absolute; /* fixed not supported by IE */
806 806 background-color:#eee;
807 807 border: 1px solid #bbb;
808 808 top:35%;
809 809 left:40%;
810 810 width:20%;
811 811 font-weight:bold;
812 812 text-align:center;
813 813 padding:0.6em;
814 814 z-index:100;
815 815 opacity: 0.5;
816 816 }
817 817
818 818 html>body #ajax-indicator { position: fixed; }
819 819
820 820 #ajax-indicator span {
821 821 background-position: 0% 40%;
822 822 background-repeat: no-repeat;
823 823 background-image: url(../images/loading.gif);
824 824 padding-left: 26px;
825 825 vertical-align: bottom;
826 826 }
827 827
828 828 /***** Calendar *****/
829 829 table.cal {border-collapse: collapse; width: 100%; margin: 0px 0 6px 0;border: 1px solid #d7d7d7;}
830 830 table.cal thead th {width: 14%; background-color:#EEEEEE; padding: 4px; }
831 831 table.cal thead th.week-number {width: auto;}
832 832 table.cal tbody tr {height: 100px;}
833 833 table.cal td {border: 1px solid #d7d7d7; vertical-align: top; font-size: 0.9em;}
834 834 table.cal td.week-number { background-color:#EEEEEE; padding: 4px; border:none; font-size: 1em;}
835 835 table.cal td p.day-num {font-size: 1.1em; text-align:right;}
836 836 table.cal td.odd p.day-num {color: #bbb;}
837 837 table.cal td.today {background:#ffffdd;}
838 838 table.cal td.today p.day-num {font-weight: bold;}
839 839 table.cal .starting a, p.cal.legend .starting {background: url(../images/bullet_go.png) no-repeat -1px -2px; padding-left:16px;}
840 840 table.cal .ending a, p.cal.legend .ending {background: url(../images/bullet_end.png) no-repeat -1px -2px; padding-left:16px;}
841 841 table.cal .starting.ending a, p.cal.legend .starting.ending {background: url(../images/bullet_diamond.png) no-repeat -1px -2px; padding-left:16px;}
842 842 p.cal.legend span {display:block;}
843 843
844 844 /***** Tooltips ******/
845 845 .tooltip{position:relative;z-index:24;}
846 846 .tooltip:hover{z-index:25;color:#000;}
847 847 .tooltip span.tip{display: none; text-align:left;}
848 848
849 849 div.tooltip:hover span.tip{
850 850 display:block;
851 851 position:absolute;
852 852 top:12px; width:270px;
853 853 border:1px solid #555;
854 854 background-color:#fff;
855 855 padding: 4px;
856 856 font-size: 0.8em;
857 857 color:#505050;
858 858 }
859 859
860 860 img.ui-datepicker-trigger {
861 861 cursor: pointer;
862 862 vertical-align: middle;
863 863 margin-left: 4px;
864 864 }
865 865
866 866 /***** Progress bar *****/
867 867 table.progress {
868 868 border-collapse: collapse;
869 869 border-spacing: 0pt;
870 870 empty-cells: show;
871 871 text-align: center;
872 872 float:left;
873 873 margin: 1px 6px 1px 0px;
874 874 }
875 875
876 876 table.progress {width:80px;}
877 877 table.progress td { height: 1em; }
878 878 table.progress td.closed { background: #BAE0BA none repeat scroll 0%; }
879 879 table.progress td.done { background: #D3EDD3 none repeat scroll 0%; }
880 880 table.progress td.todo { background: #eee none repeat scroll 0%; }
881 881 p.percent {font-size: 80%; margin:0;}
882 882 p.progress-info {clear: left; font-size: 80%; margin-top:-4px; color:#777;}
883 883
884 884 .version-overview table.progress {width:40em;}
885 885 .version-overview table.progress td { height: 1.2em; }
886 886
887 887 /***** Tabs *****/
888 888 #content .tabs {height: 2.6em; margin-bottom:1.2em; position:relative; overflow:hidden;}
889 889 #content .tabs ul {margin:0; position:absolute; bottom:0; padding-left:0.5em; width: 2000px; border-bottom: 1px solid #bbbbbb;}
890 890 #content .tabs ul li {
891 891 float:left;
892 892 list-style-type:none;
893 893 white-space:nowrap;
894 894 margin-right:4px;
895 895 background:#fff;
896 896 position:relative;
897 897 margin-bottom:-1px;
898 898 }
899 899 #content .tabs ul li a{
900 900 display:block;
901 901 font-size: 0.9em;
902 902 text-decoration:none;
903 903 line-height:1.3em;
904 904 padding:4px 6px 4px 6px;
905 905 border: 1px solid #ccc;
906 906 border-bottom: 1px solid #bbbbbb;
907 907 background-color: #f6f6f6;
908 908 color:#999;
909 909 font-weight:bold;
910 910 border-top-left-radius:3px;
911 911 border-top-right-radius:3px;
912 912 }
913 913
914 914 #content .tabs ul li a:hover {
915 915 background-color: #ffffdd;
916 916 text-decoration:none;
917 917 }
918 918
919 919 #content .tabs ul li a.selected {
920 920 background-color: #fff;
921 921 border: 1px solid #bbbbbb;
922 922 border-bottom: 1px solid #fff;
923 923 color:#444;
924 924 }
925 925
926 926 #content .tabs ul li a.selected:hover {background-color: #fff;}
927 927
928 928 div.tabs-buttons { position:absolute; right: 0; width: 54px; height: 24px; background: white; bottom: 0; border-bottom: 1px solid #bbbbbb; }
929 929
930 930 button.tab-left, button.tab-right {
931 931 font-size: 0.9em;
932 932 cursor: pointer;
933 933 height:24px;
934 934 border: 1px solid #ccc;
935 935 border-bottom: 1px solid #bbbbbb;
936 936 position:absolute;
937 937 padding:4px;
938 938 width: 20px;
939 939 bottom: -1px;
940 940 }
941 941 button.tab-left:hover, button.tab-right:hover {
942 942 background-color: #f5f5f5;
943 943 }
944 944 button.tab-left:focus, button.tab-right:focus {
945 945 outline: 0;
946 946 }
947 947
948 948 button.tab-left {
949 949 right: 20px;
950 950 background: #eeeeee url(../images/bullet_arrow_left.png) no-repeat 50% 50%;
951 951 border-top-left-radius:3px;
952 952 }
953 953
954 954 button.tab-right {
955 955 right: 0;
956 956 background: #eeeeee url(../images/bullet_arrow_right.png) no-repeat 50% 50%;
957 957 border-top-right-radius:3px;
958 958 }
959 959
960 960 button.tab-left.disabled, button.tab-right.disabled {
961 961 background-color: #ccc;
962 962 cursor: unset;
963 963 }
964 964
965 965 /***** Diff *****/
966 966 .diff_out { background: #fcc; }
967 967 .diff_out span { background: #faa; }
968 968 .diff_in { background: #cfc; }
969 969 .diff_in span { background: #afa; }
970 970
971 971 .text-diff {
972 972 padding: 1em;
973 973 background-color:#f6f6f6;
974 974 color:#505050;
975 975 border: 1px solid #e4e4e4;
976 976 }
977 977
978 978 /***** Wiki *****/
979 979 div.wiki table {
980 980 border-collapse: collapse;
981 981 margin-bottom: 1em;
982 982 }
983 983
984 984 div.wiki table, div.wiki td, div.wiki th {
985 985 border: 1px solid #bbb;
986 986 padding: 4px;
987 987 }
988 988
989 989 div.wiki .noborder, div.wiki .noborder td, div.wiki .noborder th {border:0;}
990 990
991 991 div.wiki .external {
992 992 background-position: 0% 60%;
993 993 background-repeat: no-repeat;
994 994 padding-left: 12px;
995 995 background-image: url(../images/external.png);
996 996 }
997 997
998 998 div.wiki a {word-wrap: break-word;}
999 999 div.wiki a.new {color: #b73535;}
1000 1000
1001 1001 div.wiki ul, div.wiki ol {margin-bottom:1em;}
1002 1002 div.wiki li>ul, div.wiki li>ol {margin-bottom: 0;}
1003 1003
1004 1004 div.wiki pre {
1005 1005 margin: 1em 1em 1em 1.6em;
1006 1006 padding: 8px;
1007 1007 background-color: #fafafa;
1008 1008 border: 1px solid #e2e2e2;
1009 1009 border-radius: 3px;
1010 1010 width:auto;
1011 1011 overflow-x: auto;
1012 1012 overflow-y: hidden;
1013 1013 }
1014 1014
1015 1015 div.wiki ul.toc {
1016 1016 background-color: #ffffdd;
1017 1017 border: 1px solid #e4e4e4;
1018 1018 padding: 4px;
1019 1019 line-height: 1.2em;
1020 1020 margin-bottom: 12px;
1021 1021 margin-right: 12px;
1022 1022 margin-left: 0;
1023 1023 display: table
1024 1024 }
1025 1025 * html div.wiki ul.toc { width: 50%; } /* IE6 doesn't autosize div */
1026 1026
1027 1027 div.wiki ul.toc.right { float: right; margin-left: 12px; margin-right: 0; width: auto; }
1028 1028 div.wiki ul.toc.left { float: left; margin-right: 12px; margin-left: 0; width: auto; }
1029 1029 div.wiki ul.toc ul { margin: 0; padding: 0; }
1030 1030 div.wiki ul.toc li {list-style-type:none; margin: 0; font-size:12px;}
1031 1031 div.wiki ul.toc li li {margin-left: 1.5em; font-size:10px;}
1032 1032 div.wiki ul.toc a {
1033 1033 font-size: 0.9em;
1034 1034 font-weight: normal;
1035 1035 text-decoration: none;
1036 1036 color: #606060;
1037 1037 }
1038 1038 div.wiki ul.toc a:hover { color: #c61a1a; text-decoration: underline;}
1039 1039
1040 1040 a.wiki-anchor { display: none; margin-left: 6px; text-decoration: none; }
1041 1041 a.wiki-anchor:hover { color: #aaa !important; text-decoration: none; }
1042 1042 h1:hover a.wiki-anchor, h2:hover a.wiki-anchor, h3:hover a.wiki-anchor { display: inline; color: #ddd; }
1043 1043
1044 1044 div.wiki img {vertical-align:middle; max-width:100%;}
1045 1045
1046 1046 /***** My page layout *****/
1047 1047 .block-receiver {
1048 1048 border:1px dashed #c0c0c0;
1049 1049 margin-bottom: 20px;
1050 1050 padding: 15px 0 15px 0;
1051 1051 }
1052 1052
1053 1053 .mypage-box {
1054 1054 margin:0 0 20px 0;
1055 1055 color:#505050;
1056 1056 line-height:1.5em;
1057 1057 }
1058 1058
1059 1059 .handle {cursor: move;}
1060 1060
1061 1061 a.close-icon {
1062 1062 display:block;
1063 1063 margin-top:3px;
1064 1064 overflow:hidden;
1065 1065 width:12px;
1066 1066 height:12px;
1067 1067 background-repeat: no-repeat;
1068 1068 cursor:pointer;
1069 1069 background-image:url('../images/close.png');
1070 1070 }
1071 1071 a.close-icon:hover {background-image:url('../images/close_hl.png');}
1072 1072
1073 1073 /***** Gantt chart *****/
1074 1074 .gantt_hdr {
1075 1075 position:absolute;
1076 1076 top:0;
1077 1077 height:16px;
1078 1078 border-top: 1px solid #c0c0c0;
1079 1079 border-bottom: 1px solid #c0c0c0;
1080 1080 border-right: 1px solid #c0c0c0;
1081 1081 text-align: center;
1082 1082 overflow: hidden;
1083 1083 }
1084 1084
1085 1085 .gantt_hdr.nwday {background-color:#f1f1f1; color:#999;}
1086 1086
1087 1087 .gantt_subjects { font-size: 0.8em; }
1088 1088 .gantt_subjects div { line-height:16px;height:16px;overflow:hidden;white-space:nowrap;text-overflow: ellipsis; }
1089 1089
1090 1090 .task {
1091 1091 position: absolute;
1092 1092 height:8px;
1093 1093 font-size:0.8em;
1094 1094 color:#888;
1095 1095 padding:0;
1096 1096 margin:0;
1097 1097 line-height:16px;
1098 1098 white-space:nowrap;
1099 1099 }
1100 1100
1101 1101 .task.label {width:100%;}
1102 1102 .task.label.project, .task.label.version { font-weight: bold; }
1103 1103
1104 1104 .task_late { background:#f66 url(../images/task_late.png); border: 1px solid #f66; }
1105 1105 .task_done { background:#00c600 url(../images/task_done.png); border: 1px solid #00c600; }
1106 1106 .task_todo { background:#aaa url(../images/task_todo.png); border: 1px solid #aaa; }
1107 1107
1108 1108 .task_todo.parent { background: #888; border: 1px solid #888; height: 3px;}
1109 1109 .task_late.parent, .task_done.parent { height: 3px;}
1110 1110 .task.parent.marker.starting { position: absolute; background: url(../images/task_parent_end.png) no-repeat 0 0; width: 8px; height: 16px; margin-left: -4px; left: 0px; top: -1px;}
1111 1111 .task.parent.marker.ending { position: absolute; background: url(../images/task_parent_end.png) no-repeat 0 0; width: 8px; height: 16px; margin-left: -4px; right: 0px; top: -1px;}
1112 1112
1113 1113 .version.task_late { background:#f66 url(../images/milestone_late.png); border: 1px solid #f66; height: 2px; margin-top: 3px;}
1114 1114 .version.task_done { background:#00c600 url(../images/milestone_done.png); border: 1px solid #00c600; height: 2px; margin-top: 3px;}
1115 1115 .version.task_todo { background:#fff url(../images/milestone_todo.png); border: 1px solid #fff; height: 2px; margin-top: 3px;}
1116 1116 .version.marker { background-image:url(../images/version_marker.png); background-repeat: no-repeat; border: 0; margin-left: -4px; margin-top: 1px; }
1117 1117
1118 1118 .project.task_late { background:#f66 url(../images/milestone_late.png); border: 1px solid #f66; height: 2px; margin-top: 3px;}
1119 1119 .project.task_done { background:#00c600 url(../images/milestone_done.png); border: 1px solid #00c600; height: 2px; margin-top: 3px;}
1120 1120 .project.task_todo { background:#fff url(../images/milestone_todo.png); border: 1px solid #fff; height: 2px; margin-top: 3px;}
1121 1121 .project.marker { background-image:url(../images/project_marker.png); background-repeat: no-repeat; border: 0; margin-left: -4px; margin-top: 1px; }
1122 1122
1123 1123 .version-behind-schedule a, .issue-behind-schedule a {color: #f66914;}
1124 1124 .version-overdue a, .issue-overdue a, .project-overdue a {color: #f00;}
1125 1125
1126 1126 /***** Icons *****/
1127 1127 .icon {
1128 1128 background-position: 0% 50%;
1129 1129 background-repeat: no-repeat;
1130 1130 padding-left: 20px;
1131 1131 padding-top: 2px;
1132 1132 padding-bottom: 3px;
1133 1133 }
1134 1134 .icon-only {
1135 1135 background-position: 0% 50%;
1136 1136 background-repeat: no-repeat;
1137 1137 padding-left: 16px;
1138 1138 }
1139 1139 a.icon-only {
1140 1140 display: inline-block;
1141 1141 width: 0;
1142 1142 height: 16px;
1143 1143 overflow: hidden;
1144 1144 padding-top: 0;
1145 1145 padding-bottom: 0;
1146 1146 font-size: 8px;
1147 1147 vertical-align: text-bottom;
1148 1148 }
1149 1149 a.icon-only::after {
1150 1150 content: "&nbsp;";
1151 1151 }
1152 1152
1153 1153 .icon-add { background-image: url(../images/add.png); }
1154 1154 .icon-edit { background-image: url(../images/edit.png); }
1155 1155 .icon-copy { background-image: url(../images/copy.png); }
1156 1156 .icon-duplicate { background-image: url(../images/duplicate.png); }
1157 1157 .icon-del { background-image: url(../images/delete.png); }
1158 1158 .icon-move { background-image: url(../images/move.png); }
1159 1159 .icon-save { background-image: url(../images/save.png); }
1160 1160 .icon-cancel { background-image: url(../images/cancel.png); }
1161 1161 .icon-multiple { background-image: url(../images/table_multiple.png); }
1162 1162 .icon-folder { background-image: url(../images/folder.png); }
1163 1163 .open .icon-folder { background-image: url(../images/folder_open.png); }
1164 1164 .icon-package { background-image: url(../images/package.png); }
1165 1165 .icon-user { background-image: url(../images/user.png); }
1166 1166 .icon-projects { background-image: url(../images/projects.png); }
1167 1167 .icon-help { background-image: url(../images/help.png); }
1168 1168 .icon-attachment { background-image: url(../images/attachment.png); }
1169 1169 .icon-history { background-image: url(../images/history.png); }
1170 1170 .icon-time { background-image: url(../images/time.png); }
1171 1171 .icon-time-add { background-image: url(../images/time_add.png); }
1172 1172 .icon-stats { background-image: url(../images/stats.png); }
1173 1173 .icon-warning { background-image: url(../images/warning.png); }
1174 1174 .icon-error { background-image: url(../images/exclamation.png); }
1175 1175 .icon-fav { background-image: url(../images/fav.png); }
1176 1176 .icon-fav-off { background-image: url(../images/fav_off.png); }
1177 1177 .icon-reload { background-image: url(../images/reload.png); }
1178 1178 .icon-lock { background-image: url(../images/locked.png); }
1179 1179 .icon-unlock { background-image: url(../images/unlock.png); }
1180 1180 .icon-checked { background-image: url(../images/toggle_check.png); }
1181 1181 .icon-details { background-image: url(../images/zoom_in.png); }
1182 1182 .icon-report { background-image: url(../images/report.png); }
1183 1183 .icon-comment { background-image: url(../images/comment.png); }
1184 1184 .icon-summary { background-image: url(../images/lightning.png); }
1185 1185 .icon-server-authentication { background-image: url(../images/server_key.png); }
1186 1186 .icon-issue { background-image: url(../images/ticket.png); }
1187 1187 .icon-zoom-in { background-image: url(../images/zoom_in.png); }
1188 1188 .icon-zoom-out { background-image: url(../images/zoom_out.png); }
1189 1189 .icon-magnifier { background-image: url(../images/magnifier.png); }
1190 1190 .icon-passwd { background-image: url(../images/textfield_key.png); }
1191 1191 .icon-test { background-image: url(../images/bullet_go.png); }
1192 1192 .icon-email { background-image: url(../images/email.png); }
1193 1193 .icon-email-disabled { background-image: url(../images/email_disabled.png); }
1194 1194 .icon-email-add { background-image: url(../images/email_add.png); }
1195 1195 .icon-move-up { background-image: url(../images/1uparrow.png); }
1196 1196 .icon-move-top { background-image: url(../images/2uparrow.png); }
1197 1197 .icon-move-down { background-image: url(../images/1downarrow.png); }
1198 1198 .icon-move-bottom { background-image: url(../images/2downarrow.png); }
1199 1199 .icon-ok { background-image: url(../images/true.png); }
1200 1200 .icon-not-ok { background-image: url(../images/false.png); }
1201 1201 .icon-link-break { background-image: url(../images/link_break.png); }
1202 1202 .icon-list { background-image: url(../images/text_list_bullets.png); }
1203 1203
1204 1204 .icon-file { background-image: url(../images/files/default.png); }
1205 1205 .icon-file.text-plain { background-image: url(../images/files/text.png); }
1206 1206 .icon-file.text-x-c { background-image: url(../images/files/c.png); }
1207 1207 .icon-file.text-x-csharp { background-image: url(../images/files/csharp.png); }
1208 1208 .icon-file.text-x-java { background-image: url(../images/files/java.png); }
1209 1209 .icon-file.text-x-javascript { background-image: url(../images/files/js.png); }
1210 1210 .icon-file.text-x-php { background-image: url(../images/files/php.png); }
1211 1211 .icon-file.text-x-ruby { background-image: url(../images/files/ruby.png); }
1212 1212 .icon-file.text-xml { background-image: url(../images/files/xml.png); }
1213 1213 .icon-file.text-css { background-image: url(../images/files/css.png); }
1214 1214 .icon-file.text-html { background-image: url(../images/files/html.png); }
1215 1215 .icon-file.image-gif { background-image: url(../images/files/image.png); }
1216 1216 .icon-file.image-jpeg { background-image: url(../images/files/image.png); }
1217 1217 .icon-file.image-png { background-image: url(../images/files/image.png); }
1218 1218 .icon-file.image-tiff { background-image: url(../images/files/image.png); }
1219 1219 .icon-file.application-pdf { background-image: url(../images/files/pdf.png); }
1220 1220 .icon-file.application-zip { background-image: url(../images/files/zip.png); }
1221 1221 .icon-file.application-x-gzip { background-image: url(../images/files/zip.png); }
1222 1222
1223 1223 .sort-handle { width:16px; height:16px; background:url(../images/reorder.png) no-repeat 0 50%; cursor:move; }
1224 1224 .sort-handle.ajax-loading { background-image: url(../images/loading.gif); }
1225 1225 tr.ui-sortable-helper { border:1px solid #e4e4e4; }
1226 1226
1227 1227 .contextual>.icon:not(:first-child), .buttons>.icon:not(:first-child) { margin-left: 5px; }
1228 1228
1229 1229 img.gravatar {
1230 1230 vertical-align: middle;
1231 1231 border-radius: 20%;
1232 1232 }
1233 1233
1234 1234 div.issue img.gravatar {
1235 1235 float: left;
1236 1236 margin: 0 6px 0 0;
1237 1237 }
1238 1238
1239 1239 h2 img.gravatar {margin: -2px 4px -4px 0;}
1240 1240 h3 img.gravatar {margin: -4px 4px -4px 0;}
1241 1241 h4 img.gravatar {margin: -6px 4px -4px 0;}
1242 1242 td.username img.gravatar {margin: 0 0.5em 0 0; vertical-align: top;}
1243 1243 #activity dt img.gravatar {float: left; margin: 0 1em 1em 0;}
1244 1244 /* Used on 12px Gravatar img tags without the icon background */
1245 1245 .icon-gravatar {float: left; margin-right: 4px;}
1246 1246
1247 1247 #activity dt, .journal {clear: left;}
1248 1248
1249 1249 .journal-link {float: right;}
1250 1250
1251 1251 h2 img { vertical-align:middle; }
1252 1252
1253 1253 .hascontextmenu { cursor: context-menu; }
1254 1254
1255 1255 .sample-data {border:1px solid #ccc; border-collapse:collapse; background-color:#fff; margin:0.5em;}
1256 1256 .sample-data td {border:1px solid #ccc; padding: 2px 4px; font-family: Consolas, Menlo, "Liberation Mono", Courier, monospace;}
1257 1257 .sample-data tr:first-child td {font-weight:bold; text-align:center;}
1258 1258
1259 1259 .ui-progressbar {position: relative;}
1260 1260 #progress-label {
1261 1261 position: absolute; left: 50%; top: 4px;
1262 1262 font-weight: bold;
1263 1263 color: #555; text-shadow: 1px 1px 0 #fff;
1264 1264 }
1265 1265
1266 1266 /* Custom JQuery styles */
1267 1267 .ui-datepicker-title select {width:70px !important; margin-top:-2px !important; margin-right:4px !important;}
1268 1268
1269 1269
1270 1270 /************* CodeRay styles *************/
1271 1271 .syntaxhl div {display: inline;}
1272 1272 .syntaxhl .code pre { overflow: auto }
1273 1273
1274 1274 .syntaxhl .annotation { color:#007 }
1275 1275 .syntaxhl .attribute-name { color:#b48 }
1276 1276 .syntaxhl .attribute-value { color:#700 }
1277 1277 .syntaxhl .binary { color:#549 }
1278 1278 .syntaxhl .binary .char { color:#325 }
1279 1279 .syntaxhl .binary .delimiter { color:#325 }
1280 1280 .syntaxhl .char { color:#D20 }
1281 1281 .syntaxhl .char .content { color:#D20 }
1282 1282 .syntaxhl .char .delimiter { color:#710 }
1283 1283 .syntaxhl .class { color:#258; font-weight:bold }
1284 1284 .syntaxhl .class-variable { color:#369 }
1285 1285 .syntaxhl .color { color:#0A0 }
1286 1286 .syntaxhl .comment { color:#385 }
1287 1287 .syntaxhl .comment .char { color:#385 }
1288 1288 .syntaxhl .comment .delimiter { color:#385 }
1289 1289 .syntaxhl .constant { color:#258; font-weight:bold }
1290 1290 .syntaxhl .decorator { color:#B0B }
1291 1291 .syntaxhl .definition { color:#099; font-weight:bold }
1292 1292 .syntaxhl .delimiter { color:black }
1293 1293 .syntaxhl .directive { color:#088; font-weight:bold }
1294 1294 .syntaxhl .docstring { color:#D42; }
1295 1295 .syntaxhl .doctype { color:#34b }
1296 1296 .syntaxhl .done { text-decoration: line-through; color: gray }
1297 1297 .syntaxhl .entity { color:#800; font-weight:bold }
1298 1298 .syntaxhl .error { color:#F00; background-color:#FAA }
1299 1299 .syntaxhl .escape { color:#666 }
1300 1300 .syntaxhl .exception { color:#C00; font-weight:bold }
1301 1301 .syntaxhl .float { color:#06D }
1302 1302 .syntaxhl .function { color:#06B; font-weight:bold }
1303 1303 .syntaxhl .function .delimiter { color:#024; font-weight:bold }
1304 1304 .syntaxhl .global-variable { color:#d70 }
1305 1305 .syntaxhl .hex { color:#02b }
1306 1306 .syntaxhl .id { color:#33D; font-weight:bold }
1307 1307 .syntaxhl .include { color:#B44; font-weight:bold }
1308 1308 .syntaxhl .inline { background-color: hsla(0,0%,0%,0.07); color: black }
1309 1309 .syntaxhl .inline-delimiter { font-weight: bold; color: #666 }
1310 1310 .syntaxhl .instance-variable { color:#33B }
1311 1311 .syntaxhl .integer { color:#06D }
1312 1312 .syntaxhl .imaginary { color:#f00 }
1313 1313 .syntaxhl .important { color:#D00 }
1314 1314 .syntaxhl .key { color: #606 }
1315 1315 .syntaxhl .key .char { color: #60f }
1316 1316 .syntaxhl .key .delimiter { color: #404 }
1317 1317 .syntaxhl .keyword { color:#939; font-weight:bold }
1318 1318 .syntaxhl .label { color:#970; font-weight:bold }
1319 1319 .syntaxhl .local-variable { color:#950 }
1320 1320 .syntaxhl .map .content { color:#808 }
1321 1321 .syntaxhl .map .delimiter { color:#40A}
1322 1322 .syntaxhl .map { background-color:hsla(200,100%,50%,0.06); }
1323 1323 .syntaxhl .namespace { color:#707; font-weight:bold }
1324 1324 .syntaxhl .octal { color:#40E }
1325 1325 .syntaxhl .operator { }
1326 1326 .syntaxhl .predefined { color:#369; font-weight:bold }
1327 1327 .syntaxhl .predefined-constant { color:#069 }
1328 1328 .syntaxhl .predefined-type { color:#0a8; font-weight:bold }
1329 1329 .syntaxhl .preprocessor { color:#579 }
1330 1330 .syntaxhl .pseudo-class { color:#00C; font-weight:bold }
1331 1331 .syntaxhl .regexp { background-color:hsla(300,100%,50%,0.06); }
1332 1332 .syntaxhl .regexp .content { color:#808 }
1333 1333 .syntaxhl .regexp .delimiter { color:#404 }
1334 1334 .syntaxhl .regexp .modifier { color:#C2C }
1335 1335 .syntaxhl .reserved { color:#080; font-weight:bold }
1336 1336 .syntaxhl .shell { background-color:hsla(120,100%,50%,0.06); }
1337 1337 .syntaxhl .shell .content { color:#2B2 }
1338 1338 .syntaxhl .shell .delimiter { color:#161 }
1339 1339 .syntaxhl .string .char { color: #46a }
1340 1340 .syntaxhl .string .content { color: #46a }
1341 1341 .syntaxhl .string .delimiter { color: #46a }
1342 1342 .syntaxhl .string .modifier { color: #46a }
1343 1343 .syntaxhl .symbol { color:#d33 }
1344 1344 .syntaxhl .symbol .content { color:#d33 }
1345 1345 .syntaxhl .symbol .delimiter { color:#d33 }
1346 1346 .syntaxhl .tag { color:#070; font-weight:bold }
1347 1347 .syntaxhl .type { color:#339; font-weight:bold }
1348 1348 .syntaxhl .value { color: #088 }
1349 1349 .syntaxhl .variable { color:#037 }
1350 1350
1351 1351 .syntaxhl .insert { background: hsla(120,100%,50%,0.12) }
1352 1352 .syntaxhl .delete { background: hsla(0,100%,50%,0.12) }
1353 1353 .syntaxhl .change { color: #bbf; background: #007 }
1354 1354 .syntaxhl .head { color: #f8f; background: #505 }
1355 1355 .syntaxhl .head .filename { color: white; }
1356 1356
1357 1357 .syntaxhl .delete .eyecatcher { background-color: hsla(0,100%,50%,0.2); border: 1px solid hsla(0,100%,45%,0.5); margin: -1px; border-bottom: none; border-top-left-radius: 5px; border-top-right-radius: 5px; }
1358 1358 .syntaxhl .insert .eyecatcher { background-color: hsla(120,100%,50%,0.2); border: 1px solid hsla(120,100%,25%,0.5); margin: -1px; border-top: none; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; }
1359 1359
1360 1360 .syntaxhl .insert .insert { color: #0c0; background:transparent; font-weight:bold }
1361 1361 .syntaxhl .delete .delete { color: #c00; background:transparent; font-weight:bold }
1362 1362 .syntaxhl .change .change { color: #88f }
1363 1363 .syntaxhl .head .head { color: #f4f }
1364 1364
1365 1365 /***** Media print specific styles *****/
1366 1366 @media print {
1367 1367 #top-menu, #header, #main-menu, #sidebar, #footer, .contextual, .other-formats { display:none; }
1368 1368 #main { background: #fff; }
1369 1369 #content { width: 99%; margin: 0; padding: 0; border: 0; background: #fff; overflow: visible !important;}
1370 1370 #wiki_add_attachment { display:none; }
1371 1371 .hide-when-print { display: none; }
1372 1372 .autoscroll {overflow-x: visible;}
1373 1373 table.list {margin-top:0.5em;}
1374 1374 table.list th, table.list td {border: 1px solid #aaa;}
1375 1375 }
1376 1376
1377 1377 /* Accessibility specific styles */
1378 1378 .hidden-for-sighted {
1379 1379 position:absolute;
1380 1380 left:-10000px;
1381 1381 top:auto;
1382 1382 width:1px;
1383 1383 height:1px;
1384 1384 overflow:hidden;
1385 1385 }
General Comments 0
You need to be logged in to leave comments. Login now