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