##// END OF EJS Templates
Added the ability to login via OpenID....
Eric Davis -
r2381:896e64b759ae
parent child
Show More
1 NO CONTENT: new file 100644, binary diff hidden
NO CONTENT: new file 100644, binary diff hidden
@@ -1,194 +1,235
1 # Redmine - project management software
1 # Redmine - project management software
2 # Copyright (C) 2006-2008 Jean-Philippe Lang
2 # Copyright (C) 2006-2008 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 class AccountController < ApplicationController
18 class AccountController < ApplicationController
19 helper :custom_fields
19 helper :custom_fields
20 include CustomFieldsHelper
20 include CustomFieldsHelper
21
21
22 # prevents login action to be filtered by check_if_login_required application scope filter
22 # prevents login action to be filtered by check_if_login_required application scope filter
23 skip_before_filter :check_if_login_required, :only => [:login, :lost_password, :register, :activate]
23 skip_before_filter :check_if_login_required, :only => [:login, :lost_password, :register, :activate]
24
24
25 # Show user's account
25 # Show user's account
26 def show
26 def show
27 @user = User.active.find(params[:id])
27 @user = User.active.find(params[:id])
28 @custom_values = @user.custom_values
28 @custom_values = @user.custom_values
29
29
30 # show only public projects and private projects that the logged in user is also a member of
30 # show only public projects and private projects that the logged in user is also a member of
31 @memberships = @user.memberships.select do |membership|
31 @memberships = @user.memberships.select do |membership|
32 membership.project.is_public? || (User.current.member_of?(membership.project))
32 membership.project.is_public? || (User.current.member_of?(membership.project))
33 end
33 end
34
34
35 events = Redmine::Activity::Fetcher.new(User.current, :author => @user).events(nil, nil, :limit => 10)
35 events = Redmine::Activity::Fetcher.new(User.current, :author => @user).events(nil, nil, :limit => 10)
36 @events_by_day = events.group_by(&:event_date)
36 @events_by_day = events.group_by(&:event_date)
37
37
38 rescue ActiveRecord::RecordNotFound
38 rescue ActiveRecord::RecordNotFound
39 render_404
39 render_404
40 end
40 end
41
41
42 # Login request and validation
42 # Login request and validation
43 def login
43 def login
44 if request.get?
44 if request.get?
45 # Logout user
45 # Logout user
46 self.logged_user = nil
46 self.logged_user = nil
47 else
47 else
48 # Authenticate user
48 # Authenticate user
49 user = User.try_to_login(params[:username], params[:password])
49 unless using_open_id?
50 if user.nil?
50 password_authentication
51 # Invalid credentials
52 flash.now[:error] = l(:notice_account_invalid_creditentials)
53 elsif user.new_record?
54 # Onthefly creation failed, display the registration form to fill/fix attributes
55 @user = user
56 session[:auth_source_registration] = {:login => user.login, :auth_source_id => user.auth_source_id }
57 render :action => 'register'
58 else
51 else
59 # Valid user
52 open_id_authenticate(params[:openid_url])
60 self.logged_user = user
61 # generate a key and set cookie if autologin
62 if params[:autologin] && Setting.autologin?
63 token = Token.create(:user => user, :action => 'autologin')
64 cookies[:autologin] = { :value => token.value, :expires => 1.year.from_now }
65 end
66 redirect_back_or_default :controller => 'my', :action => 'page'
67 end
53 end
68 end
54 end
69 end
55 end
70
56
71 # Log out current user and redirect to welcome page
57 # Log out current user and redirect to welcome page
72 def logout
58 def logout
73 cookies.delete :autologin
59 cookies.delete :autologin
74 Token.delete_all(["user_id = ? AND action = ?", User.current.id, 'autologin']) if User.current.logged?
60 Token.delete_all(["user_id = ? AND action = ?", User.current.id, 'autologin']) if User.current.logged?
75 self.logged_user = nil
61 self.logged_user = nil
76 redirect_to home_url
62 redirect_to home_url
77 end
63 end
78
64
79 # Enable user to choose a new password
65 # Enable user to choose a new password
80 def lost_password
66 def lost_password
81 redirect_to(home_url) && return unless Setting.lost_password?
67 redirect_to(home_url) && return unless Setting.lost_password?
82 if params[:token]
68 if params[:token]
83 @token = Token.find_by_action_and_value("recovery", params[:token])
69 @token = Token.find_by_action_and_value("recovery", params[:token])
84 redirect_to(home_url) && return unless @token and !@token.expired?
70 redirect_to(home_url) && return unless @token and !@token.expired?
85 @user = @token.user
71 @user = @token.user
86 if request.post?
72 if request.post?
87 @user.password, @user.password_confirmation = params[:new_password], params[:new_password_confirmation]
73 @user.password, @user.password_confirmation = params[:new_password], params[:new_password_confirmation]
88 if @user.save
74 if @user.save
89 @token.destroy
75 @token.destroy
90 flash[:notice] = l(:notice_account_password_updated)
76 flash[:notice] = l(:notice_account_password_updated)
91 redirect_to :action => 'login'
77 redirect_to :action => 'login'
92 return
78 return
93 end
79 end
94 end
80 end
95 render :template => "account/password_recovery"
81 render :template => "account/password_recovery"
96 return
82 return
97 else
83 else
98 if request.post?
84 if request.post?
99 user = User.find_by_mail(params[:mail])
85 user = User.find_by_mail(params[:mail])
100 # user not found in db
86 # user not found in db
101 flash.now[:error] = l(:notice_account_unknown_email) and return unless user
87 flash.now[:error] = l(:notice_account_unknown_email) and return unless user
102 # user uses an external authentification
88 # user uses an external authentification
103 flash.now[:error] = l(:notice_can_t_change_password) and return if user.auth_source_id
89 flash.now[:error] = l(:notice_can_t_change_password) and return if user.auth_source_id
104 # create a new token for password recovery
90 # create a new token for password recovery
105 token = Token.new(:user => user, :action => "recovery")
91 token = Token.new(:user => user, :action => "recovery")
106 if token.save
92 if token.save
107 Mailer.deliver_lost_password(token)
93 Mailer.deliver_lost_password(token)
108 flash[:notice] = l(:notice_account_lost_email_sent)
94 flash[:notice] = l(:notice_account_lost_email_sent)
109 redirect_to :action => 'login'
95 redirect_to :action => 'login'
110 return
96 return
111 end
97 end
112 end
98 end
113 end
99 end
114 end
100 end
115
101
116 # User self-registration
102 # User self-registration
117 def register
103 def register
118 redirect_to(home_url) && return unless Setting.self_registration? || session[:auth_source_registration]
104 redirect_to(home_url) && return unless Setting.self_registration? || session[:auth_source_registration]
119 if request.get?
105 if request.get?
120 session[:auth_source_registration] = nil
106 session[:auth_source_registration] = nil
121 @user = User.new(:language => Setting.default_language)
107 @user = User.new(:language => Setting.default_language)
122 else
108 else
123 @user = User.new(params[:user])
109 @user = User.new(params[:user])
124 @user.admin = false
110 @user.admin = false
125 @user.status = User::STATUS_REGISTERED
111 @user.status = User::STATUS_REGISTERED
126 if session[:auth_source_registration]
112 if session[:auth_source_registration]
127 @user.status = User::STATUS_ACTIVE
113 @user.status = User::STATUS_ACTIVE
128 @user.login = session[:auth_source_registration][:login]
114 @user.login = session[:auth_source_registration][:login]
129 @user.auth_source_id = session[:auth_source_registration][:auth_source_id]
115 @user.auth_source_id = session[:auth_source_registration][:auth_source_id]
130 if @user.save
116 if @user.save
131 session[:auth_source_registration] = nil
117 session[:auth_source_registration] = nil
132 self.logged_user = @user
118 self.logged_user = @user
133 flash[:notice] = l(:notice_account_activated)
119 flash[:notice] = l(:notice_account_activated)
134 redirect_to :controller => 'my', :action => 'account'
120 redirect_to :controller => 'my', :action => 'account'
135 end
121 end
136 else
122 else
137 @user.login = params[:user][:login]
123 @user.login = params[:user][:login]
138 @user.password, @user.password_confirmation = params[:password], params[:password_confirmation]
124 @user.password, @user.password_confirmation = params[:password], params[:password_confirmation]
139 case Setting.self_registration
125 case Setting.self_registration
140 when '1'
126 when '1'
141 # Email activation
127 # Email activation
142 token = Token.new(:user => @user, :action => "register")
128 token = Token.new(:user => @user, :action => "register")
143 if @user.save and token.save
129 if @user.save and token.save
144 Mailer.deliver_register(token)
130 Mailer.deliver_register(token)
145 flash[:notice] = l(:notice_account_register_done)
131 flash[:notice] = l(:notice_account_register_done)
146 redirect_to :action => 'login'
132 redirect_to :action => 'login'
147 end
133 end
148 when '3'
134 when '3'
149 # Automatic activation
135 # Automatic activation
150 @user.status = User::STATUS_ACTIVE
136 @user.status = User::STATUS_ACTIVE
151 if @user.save
137 if @user.save
152 self.logged_user = @user
138 self.logged_user = @user
153 flash[:notice] = l(:notice_account_activated)
139 flash[:notice] = l(:notice_account_activated)
154 redirect_to :controller => 'my', :action => 'account'
140 redirect_to :controller => 'my', :action => 'account'
155 end
141 end
156 else
142 else
157 # Manual activation by the administrator
143 # Manual activation by the administrator
158 if @user.save
144 if @user.save
159 # Sends an email to the administrators
145 # Sends an email to the administrators
160 Mailer.deliver_account_activation_request(@user)
146 Mailer.deliver_account_activation_request(@user)
161 flash[:notice] = l(:notice_account_pending)
147 flash[:notice] = l(:notice_account_pending)
162 redirect_to :action => 'login'
148 redirect_to :action => 'login'
163 end
149 end
164 end
150 end
165 end
151 end
166 end
152 end
167 end
153 end
168
154
169 # Token based account activation
155 # Token based account activation
170 def activate
156 def activate
171 redirect_to(home_url) && return unless Setting.self_registration? && params[:token]
157 redirect_to(home_url) && return unless Setting.self_registration? && params[:token]
172 token = Token.find_by_action_and_value('register', params[:token])
158 token = Token.find_by_action_and_value('register', params[:token])
173 redirect_to(home_url) && return unless token and !token.expired?
159 redirect_to(home_url) && return unless token and !token.expired?
174 user = token.user
160 user = token.user
175 redirect_to(home_url) && return unless user.status == User::STATUS_REGISTERED
161 redirect_to(home_url) && return unless user.status == User::STATUS_REGISTERED
176 user.status = User::STATUS_ACTIVE
162 user.status = User::STATUS_ACTIVE
177 if user.save
163 if user.save
178 token.destroy
164 token.destroy
179 flash[:notice] = l(:notice_account_activated)
165 flash[:notice] = l(:notice_account_activated)
180 end
166 end
181 redirect_to :action => 'login'
167 redirect_to :action => 'login'
182 end
168 end
183
169
184 private
170 private
185 def logged_user=(user)
171 def logged_user=(user)
186 if user && user.is_a?(User)
172 if user && user.is_a?(User)
187 User.current = user
173 User.current = user
188 session[:user_id] = user.id
174 session[:user_id] = user.id
189 else
175 else
190 User.current = User.anonymous
176 User.current = User.anonymous
191 session[:user_id] = nil
177 session[:user_id] = nil
192 end
178 end
193 end
179 end
180
181 def password_authentication
182 user = User.try_to_login(params[:username], params[:password])
183 if user.nil?
184 # Invalid credentials
185 flash.now[:error] = l(:notice_account_invalid_creditentials)
186 elsif user.new_record?
187 # Onthefly creation failed, display the registration form to fill/fix attributes
188 @user = user
189 session[:auth_source_registration] = {:login => user.login, :auth_source_id => user.auth_source_id }
190 render :action => 'register'
191 else
192 # Valid user
193 successful_authentication(user)
194 end
195 end
196
197
198 def open_id_authenticate(openid_url)
199 user = nil
200 authenticate_with_open_id(openid_url, :required => [:nickname, :fullname, :email], :return_to => signin_url) do |result, identity_url, registration|
201 if result.successful?
202 user = User.find_or_initialize_by_identity_url(identity_url)
203 if user.new_record?
204 # Create on the fly
205 # TODO: name
206 user.login = registration['nickname']
207 user.mail = registration['email']
208 user.save
209 end
210
211 user.reload
212 if user.new_record?
213 # Onthefly creation failed, display the registration form to fill/fix attributes
214 @user = user
215 session[:auth_source_registration] = {:login => user.login, :identity_url => identity_url }
216 render :action => 'register'
217 else
218 successful_authentication(user)
219 end
220 end
221 end
222 end
223
224 def successful_authentication(user)
225 # Valid user
226 self.logged_user = user
227 # generate a key and set cookie if autologin
228 if params[:autologin] && Setting.autologin?
229 token = Token.create(:user => user, :action => 'autologin')
230 cookies[:autologin] = { :value => token.value, :expires => 1.year.from_now }
231 end
232 redirect_back_or_default :controller => 'my', :action => 'page'
233 end
234
194 end
235 end
@@ -1,34 +1,38
1 <div id="login-form">
1 <div id="login-form">
2 <% form_tag({:action=> "login"}) do %>
2 <% form_tag({:action=> "login"}) do %>
3 <%= back_url_hidden_field_tag %>
3 <%= back_url_hidden_field_tag %>
4 <table>
4 <table>
5 <tr>
5 <tr>
6 <td align="right"><label for="username"><%=l(:field_login)%>:</label></td>
6 <td align="right"><label for="username"><%=l(:field_login)%>:</label></td>
7 <td align="left"><p><%= text_field_tag 'username', nil, :size => 40 %></p></td>
7 <td align="left"><p><%= text_field_tag 'username', nil, :size => 40 %></p></td>
8 </tr>
8 </tr>
9 <tr>
9 <tr>
10 <td align="right"><label for="password"><%=l(:field_password)%>:</label></td>
10 <td align="right"><label for="password"><%=l(:field_password)%>:</label></td>
11 <td align="left"><%= password_field_tag 'password', nil, :size => 40 %></td>
11 <td align="left"><%= password_field_tag 'password', nil, :size => 40 %></td>
12 </tr>
12 </tr>
13 <tr>
13 <tr>
14 <td align="right"><label for="openid_url"><%=l(:field_identity_url)%></label></td>
15 <td align="left"><%= text_field_tag "openid_url" %></td>
16 </tr>
17 <tr>
14 <td></td>
18 <td></td>
15 <td align="left">
19 <td align="left">
16 <% if Setting.autologin? %>
20 <% if Setting.autologin? %>
17 <label for="autologin"><%= check_box_tag 'autologin' %> <%= l(:label_stay_logged_in) %></label>
21 <label for="autologin"><%= check_box_tag 'autologin' %> <%= l(:label_stay_logged_in) %></label>
18 <% end %>
22 <% end %>
19 </td>
23 </td>
20 </tr>
24 </tr>
21 <tr>
25 <tr>
22 <td align="left">
26 <td align="left">
23 <% if Setting.lost_password? %>
27 <% if Setting.lost_password? %>
24 <%= link_to l(:label_password_lost), :controller => 'account', :action => 'lost_password' %>
28 <%= link_to l(:label_password_lost), :controller => 'account', :action => 'lost_password' %>
25 <% end %>
29 <% end %>
26 </td>
30 </td>
27 <td align="right">
31 <td align="right">
28 <input type="submit" name="login" value="<%=l(:button_login)%> &#187;" />
32 <input type="submit" name="login" value="<%=l(:button_login)%> &#187;" />
29 </td>
33 </td>
30 </tr>
34 </tr>
31 </table>
35 </table>
32 <%= javascript_tag "Form.Element.focus('username');" %>
36 <%= javascript_tag "Form.Element.focus('username');" %>
33 <% end %>
37 <% end %>
34 </div>
38 </div>
@@ -1,39 +1,42
1 <h2><%=l(:label_register)%></h2>
1 <h2><%=l(:label_register)%> <%=link_to l(:label_login_with_open_id_option), signin_url %></h2>
2
2
3 <% form_tag({:action => 'register'}, :class => "tabular") do %>
3 <% form_tag({:action => 'register'}, :class => "tabular") do %>
4 <%= error_messages_for 'user' %>
4 <%= error_messages_for 'user' %>
5
5
6 <div class="box">
6 <div class="box">
7 <!--[form:user]-->
7 <!--[form:user]-->
8 <% if @user.auth_source_id.nil? %>
8 <% if @user.auth_source_id.nil? %>
9 <p><label for="user_login"><%=l(:field_login)%> <span class="required">*</span></label>
9 <p><label for="user_login"><%=l(:field_login)%> <span class="required">*</span></label>
10 <%= text_field 'user', 'login', :size => 25 %></p>
10 <%= text_field 'user', 'login', :size => 25 %></p>
11
11
12 <p><label for="password"><%=l(:field_password)%> <span class="required">*</span></label>
12 <p><label for="password"><%=l(:field_password)%> <span class="required">*</span></label>
13 <%= password_field_tag 'password', nil, :size => 25 %><br />
13 <%= password_field_tag 'password', nil, :size => 25 %><br />
14 <em><%= l(:text_caracters_minimum, 4) %></em></p>
14 <em><%= l(:text_caracters_minimum, 4) %></em></p>
15
15
16 <p><label for="password_confirmation"><%=l(:field_password_confirmation)%> <span class="required">*</span></label>
16 <p><label for="password_confirmation"><%=l(:field_password_confirmation)%> <span class="required">*</span></label>
17 <%= password_field_tag 'password_confirmation', nil, :size => 25 %></p>
17 <%= password_field_tag 'password_confirmation', nil, :size => 25 %></p>
18 <% end %>
18 <% end %>
19
19
20 <p><label for="user_firstname"><%=l(:field_firstname)%> <span class="required">*</span></label>
20 <p><label for="user_firstname"><%=l(:field_firstname)%> <span class="required">*</span></label>
21 <%= text_field 'user', 'firstname' %></p>
21 <%= text_field 'user', 'firstname' %></p>
22
22
23 <p><label for="user_lastname"><%=l(:field_lastname)%> <span class="required">*</span></label>
23 <p><label for="user_lastname"><%=l(:field_lastname)%> <span class="required">*</span></label>
24 <%= text_field 'user', 'lastname' %></p>
24 <%= text_field 'user', 'lastname' %></p>
25
25
26 <p><label for="user_mail"><%=l(:field_mail)%> <span class="required">*</span></label>
26 <p><label for="user_mail"><%=l(:field_mail)%> <span class="required">*</span></label>
27 <%= text_field 'user', 'mail' %></p>
27 <%= text_field 'user', 'mail' %></p>
28
28
29 <p><label for="user_language"><%=l(:field_language)%></label>
29 <p><label for="user_language"><%=l(:field_language)%></label>
30 <%= select("user", "language", lang_options_for_select) %></p>
30 <%= select("user", "language", lang_options_for_select) %></p>
31
31
32 <p><label for="user_identity_url"><%=l(:field_identity_url)%></label>
33 <%= text_field 'user', 'identity_url' %></p>
34
32 <% @user.custom_field_values.select {|v| v.editable? || v.required?}.each do |value| %>
35 <% @user.custom_field_values.select {|v| v.editable? || v.required?}.each do |value| %>
33 <p><%= custom_field_tag_with_label :user, value %></p>
36 <p><%= custom_field_tag_with_label :user, value %></p>
34 <% end %>
37 <% end %>
35 <!--[eoform:user]-->
38 <!--[eoform:user]-->
36 </div>
39 </div>
37
40
38 <%= submit_tag l(:button_submit) %>
41 <%= submit_tag l(:button_submit) %>
39 <% end %>
42 <% end %>
@@ -1,56 +1,57
1 <div class="contextual">
1 <div class="contextual">
2 <%= link_to(l(:button_change_password), :action => 'password') unless @user.auth_source_id %>
2 <%= link_to(l(:button_change_password), :action => 'password') unless @user.auth_source_id %>
3 </div>
3 </div>
4 <h2><%=l(:label_my_account)%></h2>
4 <h2><%=l(:label_my_account)%></h2>
5 <%= error_messages_for 'user' %>
5 <%= error_messages_for 'user' %>
6
6
7 <% form_for :user, @user, :url => { :action => "account" },
7 <% form_for :user, @user, :url => { :action => "account" },
8 :builder => TabularFormBuilder,
8 :builder => TabularFormBuilder,
9 :lang => current_language,
9 :lang => current_language,
10 :html => { :id => 'my_account_form' } do |f| %>
10 :html => { :id => 'my_account_form' } do |f| %>
11 <div class="splitcontentleft">
11 <div class="splitcontentleft">
12 <h3><%=l(:label_information_plural)%></h3>
12 <h3><%=l(:label_information_plural)%></h3>
13 <div class="box tabular">
13 <div class="box tabular">
14 <p><%= f.text_field :firstname, :required => true %></p>
14 <p><%= f.text_field :firstname, :required => true %></p>
15 <p><%= f.text_field :lastname, :required => true %></p>
15 <p><%= f.text_field :lastname, :required => true %></p>
16 <p><%= f.text_field :mail, :required => true %></p>
16 <p><%= f.text_field :mail, :required => true %></p>
17 <p><%= f.select :language, lang_options_for_select %></p>
17 <p><%= f.select :language, lang_options_for_select %></p>
18 <p><%= f.text_field :identity_url %></p>
18
19
19 <% @user.custom_field_values.select(&:editable?).each do |value| %>
20 <% @user.custom_field_values.select(&:editable?).each do |value| %>
20 <p><%= custom_field_tag_with_label :user, value %></p>
21 <p><%= custom_field_tag_with_label :user, value %></p>
21 <% end %>
22 <% end %>
22 </div>
23 </div>
23
24
24 <%= submit_tag l(:button_save) %>
25 <%= submit_tag l(:button_save) %>
25 </div>
26 </div>
26
27
27 <div class="splitcontentright">
28 <div class="splitcontentright">
28 <h3><%=l(:field_mail_notification)%></h3>
29 <h3><%=l(:field_mail_notification)%></h3>
29 <div class="box">
30 <div class="box">
30 <%= select_tag 'notification_option', options_for_select(@notification_options, @notification_option),
31 <%= select_tag 'notification_option', options_for_select(@notification_options, @notification_option),
31 :onchange => 'if ($("notification_option").value == "selected") {Element.show("notified-projects")} else {Element.hide("notified-projects")}' %>
32 :onchange => 'if ($("notification_option").value == "selected") {Element.show("notified-projects")} else {Element.hide("notified-projects")}' %>
32 <% content_tag 'div', :id => 'notified-projects', :style => (@notification_option == 'selected' ? '' : 'display:none;') do %>
33 <% content_tag 'div', :id => 'notified-projects', :style => (@notification_option == 'selected' ? '' : 'display:none;') do %>
33 <p><% User.current.projects.each do |project| %>
34 <p><% User.current.projects.each do |project| %>
34 <label><%= check_box_tag 'notified_project_ids[]', project.id, @user.notified_projects_ids.include?(project.id) %> <%=h project.name %></label><br />
35 <label><%= check_box_tag 'notified_project_ids[]', project.id, @user.notified_projects_ids.include?(project.id) %> <%=h project.name %></label><br />
35 <% end %></p>
36 <% end %></p>
36 <p><em><%= l(:text_user_mail_option) %></em></p>
37 <p><em><%= l(:text_user_mail_option) %></em></p>
37 <% end %>
38 <% end %>
38 <p><label><%= check_box_tag 'no_self_notified', 1, @user.pref[:no_self_notified] %> <%= l(:label_user_mail_no_self_notified) %></label></p>
39 <p><label><%= check_box_tag 'no_self_notified', 1, @user.pref[:no_self_notified] %> <%= l(:label_user_mail_no_self_notified) %></label></p>
39 </div>
40 </div>
40
41
41 <h3><%=l(:label_preferences)%></h3>
42 <h3><%=l(:label_preferences)%></h3>
42 <div class="box tabular">
43 <div class="box tabular">
43 <% fields_for :pref, @user.pref, :builder => TabularFormBuilder, :lang => current_language do |pref_fields| %>
44 <% fields_for :pref, @user.pref, :builder => TabularFormBuilder, :lang => current_language do |pref_fields| %>
44 <p><%= pref_fields.check_box :hide_mail %></p>
45 <p><%= pref_fields.check_box :hide_mail %></p>
45 <p><%= pref_fields.select :time_zone, ActiveSupport::TimeZone.all.collect {|z| [ z.to_s, z.name ]}, :include_blank => true %></p>
46 <p><%= pref_fields.select :time_zone, ActiveSupport::TimeZone.all.collect {|z| [ z.to_s, z.name ]}, :include_blank => true %></p>
46 <p><%= pref_fields.select :comments_sorting, [[l(:label_chronological_order), 'asc'], [l(:label_reverse_chronological_order), 'desc']] %></p>
47 <p><%= pref_fields.select :comments_sorting, [[l(:label_chronological_order), 'asc'], [l(:label_reverse_chronological_order), 'desc']] %></p>
47 <% end %>
48 <% end %>
48 </div>
49 </div>
49 </div>
50 </div>
50 <% end %>
51 <% end %>
51
52
52 <% content_for :sidebar do %>
53 <% content_for :sidebar do %>
53 <%= render :partial => 'sidebar' %>
54 <%= render :partial => 'sidebar' %>
54 <% end %>
55 <% end %>
55
56
56 <% html_title(l(:label_my_account)) -%>
57 <% html_title(l(:label_my_account)) -%>
@@ -1,31 +1,32
1 <%= error_messages_for 'user' %>
1 <%= error_messages_for 'user' %>
2
2
3 <!--[form:user]-->
3 <!--[form:user]-->
4 <div class="box">
4 <div class="box">
5 <p><%= f.text_field :login, :required => true, :size => 25 %></p>
5 <p><%= f.text_field :login, :required => true, :size => 25 %></p>
6 <p><%= f.text_field :firstname, :required => true %></p>
6 <p><%= f.text_field :firstname, :required => true %></p>
7 <p><%= f.text_field :lastname, :required => true %></p>
7 <p><%= f.text_field :lastname, :required => true %></p>
8 <p><%= f.text_field :mail, :required => true %></p>
8 <p><%= f.text_field :mail, :required => true %></p>
9 <p><%= f.select :language, lang_options_for_select %></p>
9 <p><%= f.select :language, lang_options_for_select %></p>
10 <p><%= f.text_field :identity_url %></p>
10
11
11 <% @user.custom_field_values.each do |value| %>
12 <% @user.custom_field_values.each do |value| %>
12 <p><%= custom_field_tag_with_label :user, value %></p>
13 <p><%= custom_field_tag_with_label :user, value %></p>
13 <% end %>
14 <% end %>
14
15
15 <p><%= f.check_box :admin, :disabled => (@user == User.current) %></p>
16 <p><%= f.check_box :admin, :disabled => (@user == User.current) %></p>
16 </div>
17 </div>
17
18
18 <div class="box">
19 <div class="box">
19 <h3><%=l(:label_authentication)%></h3>
20 <h3><%=l(:label_authentication)%></h3>
20 <% unless @auth_sources.empty? %>
21 <% unless @auth_sources.empty? %>
21 <p><%= f.select :auth_source_id, ([[l(:label_internal), ""]] + @auth_sources.collect { |a| [a.name, a.id] }), {}, :onchange => "if (this.value=='') {Element.show('password_fields');} else {Element.hide('password_fields');}" %></p>
22 <p><%= f.select :auth_source_id, ([[l(:label_internal), ""]] + @auth_sources.collect { |a| [a.name, a.id] }), {}, :onchange => "if (this.value=='') {Element.show('password_fields');} else {Element.hide('password_fields');}" %></p>
22 <% end %>
23 <% end %>
23 <div id="password_fields" style="<%= 'display:none;' if @user.auth_source %>">
24 <div id="password_fields" style="<%= 'display:none;' if @user.auth_source %>">
24 <p><label for="password"><%=l(:field_password)%><span class="required"> *</span></label>
25 <p><label for="password"><%=l(:field_password)%><span class="required"> *</span></label>
25 <%= password_field_tag 'password', nil, :size => 25 %><br />
26 <%= password_field_tag 'password', nil, :size => 25 %><br />
26 <em><%= l(:text_caracters_minimum, 4) %></em></p>
27 <em><%= l(:text_caracters_minimum, 4) %></em></p>
27 <p><label for="password_confirmation"><%=l(:field_password_confirmation)%><span class="required"> *</span></label>
28 <p><label for="password_confirmation"><%=l(:field_password_confirmation)%><span class="required"> *</span></label>
28 <%= password_field_tag 'password_confirmation', nil, :size => 25 %></p>
29 <%= password_field_tag 'password_confirmation', nil, :size => 25 %></p>
29 </div>
30 </div>
30 </div>
31 </div>
31 <!--[eoform:user]-->
32 <!--[eoform:user]-->
@@ -1,258 +1,260
1 ActionController::Routing::Routes.draw do |map|
1 ActionController::Routing::Routes.draw do |map|
2 # Add your own custom routes here.
2 # Add your own custom routes here.
3 # The priority is based upon order of creation: first created -> highest priority.
3 # The priority is based upon order of creation: first created -> highest priority.
4
4
5 # Here's a sample route:
5 # Here's a sample route:
6 # map.connect 'products/:id', :controller => 'catalog', :action => 'view'
6 # map.connect 'products/:id', :controller => 'catalog', :action => 'view'
7 # Keep in mind you can assign values other than :controller and :action
7 # Keep in mind you can assign values other than :controller and :action
8
8
9 # Allow Redmine plugins to map routes and potentially override them
9 # Allow Redmine plugins to map routes and potentially override them
10 Rails.plugins.each do |plugin|
10 Rails.plugins.each do |plugin|
11 map.from_plugin plugin.name.to_sym
11 map.from_plugin plugin.name.to_sym
12 end
12 end
13
13
14 map.home '', :controller => 'welcome'
14 map.home '', :controller => 'welcome'
15
15
16 map.signin 'login', :controller => 'account', :action => 'login'
16 map.signin 'login', :controller => 'account', :action => 'login'
17 map.signout 'logout', :controller => 'account', :action => 'logout'
17 map.signout 'logout', :controller => 'account', :action => 'logout'
18
18
19 map.connect 'roles/workflow/:id/:role_id/:tracker_id', :controller => 'roles', :action => 'workflow'
19 map.connect 'roles/workflow/:id/:role_id/:tracker_id', :controller => 'roles', :action => 'workflow'
20 map.connect 'help/:ctrl/:page', :controller => 'help'
20 map.connect 'help/:ctrl/:page', :controller => 'help'
21
21
22 map.connect 'time_entries/:id/edit', :action => 'edit', :controller => 'timelog'
22 map.connect 'time_entries/:id/edit', :action => 'edit', :controller => 'timelog'
23 map.connect 'projects/:project_id/time_entries/new', :action => 'edit', :controller => 'timelog'
23 map.connect 'projects/:project_id/time_entries/new', :action => 'edit', :controller => 'timelog'
24 map.connect 'projects/:project_id/issues/:issue_id/time_entries/new', :action => 'edit', :controller => 'timelog'
24 map.connect 'projects/:project_id/issues/:issue_id/time_entries/new', :action => 'edit', :controller => 'timelog'
25
25
26 map.with_options :controller => 'timelog' do |timelog|
26 map.with_options :controller => 'timelog' do |timelog|
27 timelog.connect 'projects/:project_id/time_entries', :action => 'details'
27 timelog.connect 'projects/:project_id/time_entries', :action => 'details'
28
28
29 timelog.with_options :action => 'details', :conditions => {:method => :get} do |time_details|
29 timelog.with_options :action => 'details', :conditions => {:method => :get} do |time_details|
30 time_details.connect 'time_entries'
30 time_details.connect 'time_entries'
31 time_details.connect 'time_entries.:format'
31 time_details.connect 'time_entries.:format'
32 time_details.connect 'issues/:issue_id/time_entries'
32 time_details.connect 'issues/:issue_id/time_entries'
33 time_details.connect 'issues/:issue_id/time_entries.:format'
33 time_details.connect 'issues/:issue_id/time_entries.:format'
34 time_details.connect 'projects/:project_id/time_entries.:format'
34 time_details.connect 'projects/:project_id/time_entries.:format'
35 time_details.connect 'projects/:project_id/issues/:issue_id/time_entries'
35 time_details.connect 'projects/:project_id/issues/:issue_id/time_entries'
36 time_details.connect 'projects/:project_id/issues/:issue_id/time_entries.:format'
36 time_details.connect 'projects/:project_id/issues/:issue_id/time_entries.:format'
37 end
37 end
38 timelog.connect 'projects/:project_id/time_entries/report', :action => 'report'
38 timelog.connect 'projects/:project_id/time_entries/report', :action => 'report'
39 timelog.with_options :action => 'report',:conditions => {:method => :get} do |time_report|
39 timelog.with_options :action => 'report',:conditions => {:method => :get} do |time_report|
40 time_report.connect 'time_entries/report'
40 time_report.connect 'time_entries/report'
41 time_report.connect 'time_entries/report.:format'
41 time_report.connect 'time_entries/report.:format'
42 time_report.connect 'projects/:project_id/time_entries/report.:format'
42 time_report.connect 'projects/:project_id/time_entries/report.:format'
43 end
43 end
44
44
45 timelog.with_options :action => 'edit', :conditions => {:method => :get} do |time_edit|
45 timelog.with_options :action => 'edit', :conditions => {:method => :get} do |time_edit|
46 time_edit.connect 'issues/:issue_id/time_entries/new'
46 time_edit.connect 'issues/:issue_id/time_entries/new'
47 end
47 end
48
48
49 timelog.connect 'time_entries/:id/destroy', :action => 'destroy', :conditions => {:method => :post}
49 timelog.connect 'time_entries/:id/destroy', :action => 'destroy', :conditions => {:method => :post}
50 end
50 end
51
51
52 map.connect 'projects/:id/wiki', :controller => 'wikis', :action => 'edit', :conditions => {:method => :post}
52 map.connect 'projects/:id/wiki', :controller => 'wikis', :action => 'edit', :conditions => {:method => :post}
53 map.connect 'projects/:id/wiki/destroy', :controller => 'wikis', :action => 'destroy', :conditions => {:method => :get}
53 map.connect 'projects/:id/wiki/destroy', :controller => 'wikis', :action => 'destroy', :conditions => {:method => :get}
54 map.connect 'projects/:id/wiki/destroy', :controller => 'wikis', :action => 'destroy', :conditions => {:method => :post}
54 map.connect 'projects/:id/wiki/destroy', :controller => 'wikis', :action => 'destroy', :conditions => {:method => :post}
55 map.with_options :controller => 'wiki' do |wiki_routes|
55 map.with_options :controller => 'wiki' do |wiki_routes|
56 wiki_routes.with_options :conditions => {:method => :get} do |wiki_views|
56 wiki_routes.with_options :conditions => {:method => :get} do |wiki_views|
57 wiki_views.connect 'projects/:id/wiki/:page', :action => 'special', :page => /page_index|date_index|export/i
57 wiki_views.connect 'projects/:id/wiki/:page', :action => 'special', :page => /page_index|date_index|export/i
58 wiki_views.connect 'projects/:id/wiki/:page', :action => 'index', :page => nil
58 wiki_views.connect 'projects/:id/wiki/:page', :action => 'index', :page => nil
59 wiki_views.connect 'projects/:id/wiki/:page/edit', :action => 'edit'
59 wiki_views.connect 'projects/:id/wiki/:page/edit', :action => 'edit'
60 wiki_views.connect 'projects/:id/wiki/:page/rename', :action => 'rename'
60 wiki_views.connect 'projects/:id/wiki/:page/rename', :action => 'rename'
61 wiki_views.connect 'projects/:id/wiki/:page/history', :action => 'history'
61 wiki_views.connect 'projects/:id/wiki/:page/history', :action => 'history'
62 wiki_views.connect 'projects/:id/wiki/:page/diff/:version/vs/:version_from', :action => 'diff'
62 wiki_views.connect 'projects/:id/wiki/:page/diff/:version/vs/:version_from', :action => 'diff'
63 wiki_views.connect 'projects/:id/wiki/:page/annotate/:version', :action => 'annotate'
63 wiki_views.connect 'projects/:id/wiki/:page/annotate/:version', :action => 'annotate'
64 end
64 end
65
65
66 wiki_routes.connect 'projects/:id/wiki/:page/:action',
66 wiki_routes.connect 'projects/:id/wiki/:page/:action',
67 :action => /edit|rename|destroy|preview|protect/,
67 :action => /edit|rename|destroy|preview|protect/,
68 :conditions => {:method => :post}
68 :conditions => {:method => :post}
69 end
69 end
70
70
71 map.with_options :controller => 'messages' do |messages_routes|
71 map.with_options :controller => 'messages' do |messages_routes|
72 messages_routes.with_options :conditions => {:method => :get} do |messages_views|
72 messages_routes.with_options :conditions => {:method => :get} do |messages_views|
73 messages_views.connect 'boards/:board_id/topics/new', :action => 'new'
73 messages_views.connect 'boards/:board_id/topics/new', :action => 'new'
74 messages_views.connect 'boards/:board_id/topics/:id', :action => 'show'
74 messages_views.connect 'boards/:board_id/topics/:id', :action => 'show'
75 messages_views.connect 'boards/:board_id/topics/:id/edit', :action => 'edit'
75 messages_views.connect 'boards/:board_id/topics/:id/edit', :action => 'edit'
76 end
76 end
77 messages_routes.with_options :conditions => {:method => :post} do |messages_actions|
77 messages_routes.with_options :conditions => {:method => :post} do |messages_actions|
78 messages_actions.connect 'boards/:board_id/topics/new', :action => 'new'
78 messages_actions.connect 'boards/:board_id/topics/new', :action => 'new'
79 messages_actions.connect 'boards/:board_id/topics/:id/replies', :action => 'reply'
79 messages_actions.connect 'boards/:board_id/topics/:id/replies', :action => 'reply'
80 messages_actions.connect 'boards/:board_id/topics/:id/:action', :action => /edit|destroy/
80 messages_actions.connect 'boards/:board_id/topics/:id/:action', :action => /edit|destroy/
81 end
81 end
82 end
82 end
83
83
84 map.with_options :controller => 'boards' do |board_routes|
84 map.with_options :controller => 'boards' do |board_routes|
85 board_routes.with_options :conditions => {:method => :get} do |board_views|
85 board_routes.with_options :conditions => {:method => :get} do |board_views|
86 board_views.connect 'projects/:project_id/boards', :action => 'index'
86 board_views.connect 'projects/:project_id/boards', :action => 'index'
87 board_views.connect 'projects/:project_id/boards/new', :action => 'new'
87 board_views.connect 'projects/:project_id/boards/new', :action => 'new'
88 board_views.connect 'projects/:project_id/boards/:id', :action => 'show'
88 board_views.connect 'projects/:project_id/boards/:id', :action => 'show'
89 board_views.connect 'projects/:project_id/boards/:id/edit', :action => 'edit'
89 board_views.connect 'projects/:project_id/boards/:id/edit', :action => 'edit'
90 end
90 end
91 board_routes.with_options :conditions => {:method => :post} do |board_actions|
91 board_routes.with_options :conditions => {:method => :post} do |board_actions|
92 board_actions.connect 'projects/:project_id/boards', :action => 'new'
92 board_actions.connect 'projects/:project_id/boards', :action => 'new'
93 board_actions.connect 'projects/:project_id/boards/:id/:action', :action => /edit|destroy/
93 board_actions.connect 'projects/:project_id/boards/:id/:action', :action => /edit|destroy/
94 end
94 end
95 end
95 end
96
96
97 map.with_options :controller => 'documents' do |document_routes|
97 map.with_options :controller => 'documents' do |document_routes|
98 document_routes.with_options :conditions => {:method => :get} do |document_views|
98 document_routes.with_options :conditions => {:method => :get} do |document_views|
99 document_views.connect 'projects/:project_id/documents', :action => 'index'
99 document_views.connect 'projects/:project_id/documents', :action => 'index'
100 document_views.connect 'projects/:project_id/documents/new', :action => 'new'
100 document_views.connect 'projects/:project_id/documents/new', :action => 'new'
101 document_views.connect 'documents/:id', :action => 'show'
101 document_views.connect 'documents/:id', :action => 'show'
102 document_views.connect 'documents/:id/edit', :action => 'edit'
102 document_views.connect 'documents/:id/edit', :action => 'edit'
103 end
103 end
104 document_routes.with_options :conditions => {:method => :post} do |document_actions|
104 document_routes.with_options :conditions => {:method => :post} do |document_actions|
105 document_actions.connect 'projects/:project_id/documents', :action => 'new'
105 document_actions.connect 'projects/:project_id/documents', :action => 'new'
106 document_actions.connect 'documents/:id/:action', :action => /destroy|edit/
106 document_actions.connect 'documents/:id/:action', :action => /destroy|edit/
107 end
107 end
108 end
108 end
109
109
110 map.with_options :controller => 'issues' do |issues_routes|
110 map.with_options :controller => 'issues' do |issues_routes|
111 issues_routes.with_options :conditions => {:method => :get} do |issues_views|
111 issues_routes.with_options :conditions => {:method => :get} do |issues_views|
112 issues_views.connect 'issues', :action => 'index'
112 issues_views.connect 'issues', :action => 'index'
113 issues_views.connect 'issues.:format', :action => 'index'
113 issues_views.connect 'issues.:format', :action => 'index'
114 issues_views.connect 'projects/:project_id/issues', :action => 'index'
114 issues_views.connect 'projects/:project_id/issues', :action => 'index'
115 issues_views.connect 'projects/:project_id/issues.:format', :action => 'index'
115 issues_views.connect 'projects/:project_id/issues.:format', :action => 'index'
116 issues_views.connect 'projects/:project_id/issues/new', :action => 'new'
116 issues_views.connect 'projects/:project_id/issues/new', :action => 'new'
117 issues_views.connect 'projects/:project_id/issues/gantt', :action => 'gantt'
117 issues_views.connect 'projects/:project_id/issues/gantt', :action => 'gantt'
118 issues_views.connect 'projects/:project_id/issues/calendar', :action => 'calendar'
118 issues_views.connect 'projects/:project_id/issues/calendar', :action => 'calendar'
119 issues_views.connect 'projects/:project_id/issues/:copy_from/copy', :action => 'new'
119 issues_views.connect 'projects/:project_id/issues/:copy_from/copy', :action => 'new'
120 issues_views.connect 'issues/:id', :action => 'show', :id => /\d+/
120 issues_views.connect 'issues/:id', :action => 'show', :id => /\d+/
121 issues_views.connect 'issues/:id.:format', :action => 'show', :id => /\d+/
121 issues_views.connect 'issues/:id.:format', :action => 'show', :id => /\d+/
122 issues_views.connect 'issues/:id/edit', :action => 'edit', :id => /\d+/
122 issues_views.connect 'issues/:id/edit', :action => 'edit', :id => /\d+/
123 issues_views.connect 'issues/:id/move', :action => 'move', :id => /\d+/
123 issues_views.connect 'issues/:id/move', :action => 'move', :id => /\d+/
124 end
124 end
125 issues_routes.with_options :conditions => {:method => :post} do |issues_actions|
125 issues_routes.with_options :conditions => {:method => :post} do |issues_actions|
126 issues_actions.connect 'projects/:project_id/issues', :action => 'new'
126 issues_actions.connect 'projects/:project_id/issues', :action => 'new'
127 issues_actions.connect 'issues/:id/quoted', :action => 'reply', :id => /\d+/
127 issues_actions.connect 'issues/:id/quoted', :action => 'reply', :id => /\d+/
128 issues_actions.connect 'issues/:id/:action', :action => /edit|move|destroy/, :id => /\d+/
128 issues_actions.connect 'issues/:id/:action', :action => /edit|move|destroy/, :id => /\d+/
129 end
129 end
130 issues_routes.connect 'issues/:action'
130 issues_routes.connect 'issues/:action'
131 end
131 end
132
132
133 map.with_options :controller => 'issue_relations', :conditions => {:method => :post} do |relations|
133 map.with_options :controller => 'issue_relations', :conditions => {:method => :post} do |relations|
134 relations.connect 'issues/:issue_id/relations/:id', :action => 'new'
134 relations.connect 'issues/:issue_id/relations/:id', :action => 'new'
135 relations.connect 'issues/:issue_id/relations/:id/destroy', :action => 'destroy'
135 relations.connect 'issues/:issue_id/relations/:id/destroy', :action => 'destroy'
136 end
136 end
137
137
138 map.with_options :controller => 'reports', :action => 'issue_report', :conditions => {:method => :get} do |reports|
138 map.with_options :controller => 'reports', :action => 'issue_report', :conditions => {:method => :get} do |reports|
139 reports.connect 'projects/:id/issues/report'
139 reports.connect 'projects/:id/issues/report'
140 reports.connect 'projects/:id/issues/report/:detail'
140 reports.connect 'projects/:id/issues/report/:detail'
141 end
141 end
142
142
143 map.with_options :controller => 'news' do |news_routes|
143 map.with_options :controller => 'news' do |news_routes|
144 news_routes.with_options :conditions => {:method => :get} do |news_views|
144 news_routes.with_options :conditions => {:method => :get} do |news_views|
145 news_views.connect 'news', :action => 'index'
145 news_views.connect 'news', :action => 'index'
146 news_views.connect 'projects/:project_id/news', :action => 'index'
146 news_views.connect 'projects/:project_id/news', :action => 'index'
147 news_views.connect 'projects/:project_id/news.:format', :action => 'index'
147 news_views.connect 'projects/:project_id/news.:format', :action => 'index'
148 news_views.connect 'news.:format', :action => 'index'
148 news_views.connect 'news.:format', :action => 'index'
149 news_views.connect 'projects/:project_id/news/new', :action => 'new'
149 news_views.connect 'projects/:project_id/news/new', :action => 'new'
150 news_views.connect 'news/:id', :action => 'show'
150 news_views.connect 'news/:id', :action => 'show'
151 news_views.connect 'news/:id/edit', :action => 'edit'
151 news_views.connect 'news/:id/edit', :action => 'edit'
152 end
152 end
153 news_routes.with_options do |news_actions|
153 news_routes.with_options do |news_actions|
154 news_actions.connect 'projects/:project_id/news', :action => 'new'
154 news_actions.connect 'projects/:project_id/news', :action => 'new'
155 news_actions.connect 'news/:id/edit', :action => 'edit'
155 news_actions.connect 'news/:id/edit', :action => 'edit'
156 news_actions.connect 'news/:id/destroy', :action => 'destroy'
156 news_actions.connect 'news/:id/destroy', :action => 'destroy'
157 end
157 end
158 end
158 end
159
159
160 map.connect 'projects/:id/members/new', :controller => 'members', :action => 'new'
160 map.connect 'projects/:id/members/new', :controller => 'members', :action => 'new'
161
161
162 map.with_options :controller => 'users' do |users|
162 map.with_options :controller => 'users' do |users|
163 users.with_options :conditions => {:method => :get} do |user_views|
163 users.with_options :conditions => {:method => :get} do |user_views|
164 user_views.connect 'users', :action => 'list'
164 user_views.connect 'users', :action => 'list'
165 user_views.connect 'users', :action => 'index'
165 user_views.connect 'users', :action => 'index'
166 user_views.connect 'users/new', :action => 'add'
166 user_views.connect 'users/new', :action => 'add'
167 user_views.connect 'users/:id/edit/:tab', :action => 'edit', :tab => nil
167 user_views.connect 'users/:id/edit/:tab', :action => 'edit', :tab => nil
168 end
168 end
169 users.with_options :conditions => {:method => :post} do |user_actions|
169 users.with_options :conditions => {:method => :post} do |user_actions|
170 user_actions.connect 'users', :action => 'add'
170 user_actions.connect 'users', :action => 'add'
171 user_actions.connect 'users/new', :action => 'add'
171 user_actions.connect 'users/new', :action => 'add'
172 user_actions.connect 'users/:id/edit', :action => 'edit'
172 user_actions.connect 'users/:id/edit', :action => 'edit'
173 user_actions.connect 'users/:id/memberships', :action => 'edit_membership'
173 user_actions.connect 'users/:id/memberships', :action => 'edit_membership'
174 user_actions.connect 'users/:id/memberships/:membership_id', :action => 'edit_membership'
174 user_actions.connect 'users/:id/memberships/:membership_id', :action => 'edit_membership'
175 user_actions.connect 'users/:id/memberships/:membership_id/destroy', :action => 'destroy_membership'
175 user_actions.connect 'users/:id/memberships/:membership_id/destroy', :action => 'destroy_membership'
176 end
176 end
177 end
177 end
178
178
179 map.with_options :controller => 'projects' do |projects|
179 map.with_options :controller => 'projects' do |projects|
180 projects.with_options :conditions => {:method => :get} do |project_views|
180 projects.with_options :conditions => {:method => :get} do |project_views|
181 project_views.connect 'projects', :action => 'index'
181 project_views.connect 'projects', :action => 'index'
182 project_views.connect 'projects.:format', :action => 'index'
182 project_views.connect 'projects.:format', :action => 'index'
183 project_views.connect 'projects/new', :action => 'add'
183 project_views.connect 'projects/new', :action => 'add'
184 project_views.connect 'projects/:id', :action => 'show'
184 project_views.connect 'projects/:id', :action => 'show'
185 project_views.connect 'projects/:id/:action', :action => /roadmap|changelog|destroy|settings/
185 project_views.connect 'projects/:id/:action', :action => /roadmap|changelog|destroy|settings/
186 project_views.connect 'projects/:id/files', :action => 'list_files'
186 project_views.connect 'projects/:id/files', :action => 'list_files'
187 project_views.connect 'projects/:id/files/new', :action => 'add_file'
187 project_views.connect 'projects/:id/files/new', :action => 'add_file'
188 project_views.connect 'projects/:id/versions/new', :action => 'add_version'
188 project_views.connect 'projects/:id/versions/new', :action => 'add_version'
189 project_views.connect 'projects/:id/categories/new', :action => 'add_issue_category'
189 project_views.connect 'projects/:id/categories/new', :action => 'add_issue_category'
190 project_views.connect 'projects/:id/settings/:tab', :action => 'settings'
190 project_views.connect 'projects/:id/settings/:tab', :action => 'settings'
191 end
191 end
192
192
193 projects.with_options :action => 'activity', :conditions => {:method => :get} do |activity|
193 projects.with_options :action => 'activity', :conditions => {:method => :get} do |activity|
194 activity.connect 'projects/:id/activity'
194 activity.connect 'projects/:id/activity'
195 activity.connect 'projects/:id/activity.:format'
195 activity.connect 'projects/:id/activity.:format'
196 activity.connect 'activity'
196 activity.connect 'activity'
197 activity.connect 'activity.:format'
197 activity.connect 'activity.:format'
198 end
198 end
199
199
200 projects.with_options :conditions => {:method => :post} do |project_actions|
200 projects.with_options :conditions => {:method => :post} do |project_actions|
201 project_actions.connect 'projects/new', :action => 'add'
201 project_actions.connect 'projects/new', :action => 'add'
202 project_actions.connect 'projects', :action => 'add'
202 project_actions.connect 'projects', :action => 'add'
203 project_actions.connect 'projects/:id/:action', :action => /destroy|archive|unarchive/
203 project_actions.connect 'projects/:id/:action', :action => /destroy|archive|unarchive/
204 project_actions.connect 'projects/:id/files/new', :action => 'add_file'
204 project_actions.connect 'projects/:id/files/new', :action => 'add_file'
205 project_actions.connect 'projects/:id/versions/new', :action => 'add_version'
205 project_actions.connect 'projects/:id/versions/new', :action => 'add_version'
206 project_actions.connect 'projects/:id/categories/new', :action => 'add_issue_category'
206 project_actions.connect 'projects/:id/categories/new', :action => 'add_issue_category'
207 end
207 end
208 end
208 end
209
209
210 map.with_options :controller => 'repositories' do |repositories|
210 map.with_options :controller => 'repositories' do |repositories|
211 repositories.with_options :conditions => {:method => :get} do |repository_views|
211 repositories.with_options :conditions => {:method => :get} do |repository_views|
212 repositories.connect 'projects/:id/repository', :action => 'show'
212 repositories.connect 'projects/:id/repository', :action => 'show'
213 repositories.connect 'projects/:id/repository/edit', :action => 'edit'
213 repositories.connect 'projects/:id/repository/edit', :action => 'edit'
214 repositories.connect 'projects/:id/repository/statistics', :action => 'stats'
214 repositories.connect 'projects/:id/repository/statistics', :action => 'stats'
215 repositories.connect 'projects/:id/repository/revisions', :action => 'revisions'
215 repositories.connect 'projects/:id/repository/revisions', :action => 'revisions'
216 repositories.connect 'projects/:id/repository/revisions.:format', :action => 'revisions'
216 repositories.connect 'projects/:id/repository/revisions.:format', :action => 'revisions'
217 repositories.connect 'projects/:id/repository/revisions/:rev', :action => 'revision'
217 repositories.connect 'projects/:id/repository/revisions/:rev', :action => 'revision'
218 repositories.connect 'projects/:id/repository/revisions/:rev/diff', :action => 'diff'
218 repositories.connect 'projects/:id/repository/revisions/:rev/diff', :action => 'diff'
219 repositories.connect 'projects/:id/repository/revisions/:rev/diff.:format', :action => 'diff'
219 repositories.connect 'projects/:id/repository/revisions/:rev/diff.:format', :action => 'diff'
220 repositories.connect 'projects/:id/repository/revisions/:rev/:action/*path'
220 repositories.connect 'projects/:id/repository/revisions/:rev/:action/*path'
221 repositories.connect 'projects/:id/repository/:action/*path'
221 repositories.connect 'projects/:id/repository/:action/*path'
222 end
222 end
223
223
224 repositories.connect 'projects/:id/repository/edit', :action => 'edit', :conditions => {:method => :post}
224 repositories.connect 'projects/:id/repository/edit', :action => 'edit', :conditions => {:method => :post}
225 end
225 end
226
226
227 map.connect 'attachments/:id', :controller => 'attachments', :action => 'show', :id => /\d+/
227 map.connect 'attachments/:id', :controller => 'attachments', :action => 'show', :id => /\d+/
228 map.connect 'attachments/:id/:filename', :controller => 'attachments', :action => 'show', :id => /\d+/, :filename => /.*/
228 map.connect 'attachments/:id/:filename', :controller => 'attachments', :action => 'show', :id => /\d+/, :filename => /.*/
229 map.connect 'attachments/download/:id/:filename', :controller => 'attachments', :action => 'download', :id => /\d+/, :filename => /.*/
229 map.connect 'attachments/download/:id/:filename', :controller => 'attachments', :action => 'download', :id => /\d+/, :filename => /.*/
230
230
231
231
232 #left old routes at the bottom for backwards compat
232 #left old routes at the bottom for backwards compat
233 map.connect 'projects/:project_id/issues/:action', :controller => 'issues'
233 map.connect 'projects/:project_id/issues/:action', :controller => 'issues'
234 map.connect 'projects/:project_id/documents/:action', :controller => 'documents'
234 map.connect 'projects/:project_id/documents/:action', :controller => 'documents'
235 map.connect 'projects/:project_id/boards/:action/:id', :controller => 'boards'
235 map.connect 'projects/:project_id/boards/:action/:id', :controller => 'boards'
236 map.connect 'boards/:board_id/topics/:action/:id', :controller => 'messages'
236 map.connect 'boards/:board_id/topics/:action/:id', :controller => 'messages'
237 map.connect 'wiki/:id/:page/:action', :page => nil, :controller => 'wiki'
237 map.connect 'wiki/:id/:page/:action', :page => nil, :controller => 'wiki'
238 map.connect 'issues/:issue_id/relations/:action/:id', :controller => 'issue_relations'
238 map.connect 'issues/:issue_id/relations/:action/:id', :controller => 'issue_relations'
239 map.connect 'projects/:project_id/news/:action', :controller => 'news'
239 map.connect 'projects/:project_id/news/:action', :controller => 'news'
240 map.connect 'projects/:project_id/timelog/:action/:id', :controller => 'timelog', :project_id => /.+/
240 map.connect 'projects/:project_id/timelog/:action/:id', :controller => 'timelog', :project_id => /.+/
241 map.with_options :controller => 'repositories' do |omap|
241 map.with_options :controller => 'repositories' do |omap|
242 omap.repositories_show 'repositories/browse/:id/*path', :action => 'browse'
242 omap.repositories_show 'repositories/browse/:id/*path', :action => 'browse'
243 omap.repositories_changes 'repositories/changes/:id/*path', :action => 'changes'
243 omap.repositories_changes 'repositories/changes/:id/*path', :action => 'changes'
244 omap.repositories_diff 'repositories/diff/:id/*path', :action => 'diff'
244 omap.repositories_diff 'repositories/diff/:id/*path', :action => 'diff'
245 omap.repositories_entry 'repositories/entry/:id/*path', :action => 'entry'
245 omap.repositories_entry 'repositories/entry/:id/*path', :action => 'entry'
246 omap.repositories_entry 'repositories/annotate/:id/*path', :action => 'annotate'
246 omap.repositories_entry 'repositories/annotate/:id/*path', :action => 'annotate'
247 omap.connect 'repositories/revision/:id/:rev', :action => 'revision'
247 omap.connect 'repositories/revision/:id/:rev', :action => 'revision'
248 end
248 end
249
249
250 map.with_options :controller => 'sys' do |sys|
250 map.with_options :controller => 'sys' do |sys|
251 sys.connect 'sys/projects.:format', :action => 'projects', :conditions => {:method => :get}
251 sys.connect 'sys/projects.:format', :action => 'projects', :conditions => {:method => :get}
252 sys.connect 'sys/projects/:id/repository.:format', :action => 'create_project_repository', :conditions => {:method => :post}
252 sys.connect 'sys/projects/:id/repository.:format', :action => 'create_project_repository', :conditions => {:method => :post}
253 end
253 end
254
254
255 # Install the default route as the lowest priority.
255 # Install the default route as the lowest priority.
256 map.connect ':controller/:action/:id'
256 map.connect ':controller/:action/:id'
257 map.connect 'robots.txt', :controller => 'welcome', :action => 'robots'
257 map.connect 'robots.txt', :controller => 'welcome', :action => 'robots'
258 # Used for OpenID
259 map.root :controller => 'account', :action => 'login'
258 end
260 end
@@ -1,708 +1,710
1 _gloc_rule_default: '|n| n==1 ? "" : "_plural" '
1 _gloc_rule_default: '|n| n==1 ? "" : "_plural" '
2
2
3 actionview_datehelper_select_day_prefix:
3 actionview_datehelper_select_day_prefix:
4 actionview_datehelper_select_month_names: January,February,March,April,May,June,July,August,September,October,November,December
4 actionview_datehelper_select_month_names: January,February,March,April,May,June,July,August,September,October,November,December
5 actionview_datehelper_select_month_names_abbr: Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec
5 actionview_datehelper_select_month_names_abbr: Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec
6 actionview_datehelper_select_month_prefix:
6 actionview_datehelper_select_month_prefix:
7 actionview_datehelper_select_year_prefix:
7 actionview_datehelper_select_year_prefix:
8 actionview_datehelper_time_in_words_day: 1 day
8 actionview_datehelper_time_in_words_day: 1 day
9 actionview_datehelper_time_in_words_day_plural: %d days
9 actionview_datehelper_time_in_words_day_plural: %d days
10 actionview_datehelper_time_in_words_hour_about: about an hour
10 actionview_datehelper_time_in_words_hour_about: about an hour
11 actionview_datehelper_time_in_words_hour_about_plural: about %d hours
11 actionview_datehelper_time_in_words_hour_about_plural: about %d hours
12 actionview_datehelper_time_in_words_hour_about_single: about an hour
12 actionview_datehelper_time_in_words_hour_about_single: about an hour
13 actionview_datehelper_time_in_words_minute: 1 minute
13 actionview_datehelper_time_in_words_minute: 1 minute
14 actionview_datehelper_time_in_words_minute_half: half a minute
14 actionview_datehelper_time_in_words_minute_half: half a minute
15 actionview_datehelper_time_in_words_minute_less_than: less than a minute
15 actionview_datehelper_time_in_words_minute_less_than: less than a minute
16 actionview_datehelper_time_in_words_minute_plural: %d minutes
16 actionview_datehelper_time_in_words_minute_plural: %d minutes
17 actionview_datehelper_time_in_words_minute_single: 1 minute
17 actionview_datehelper_time_in_words_minute_single: 1 minute
18 actionview_datehelper_time_in_words_second_less_than: less than a second
18 actionview_datehelper_time_in_words_second_less_than: less than a second
19 actionview_datehelper_time_in_words_second_less_than_plural: less than %d seconds
19 actionview_datehelper_time_in_words_second_less_than_plural: less than %d seconds
20 actionview_instancetag_blank_option: Please select
20 actionview_instancetag_blank_option: Please select
21
21
22 activerecord_error_inclusion: is not included in the list
22 activerecord_error_inclusion: is not included in the list
23 activerecord_error_exclusion: is reserved
23 activerecord_error_exclusion: is reserved
24 activerecord_error_invalid: is invalid
24 activerecord_error_invalid: is invalid
25 activerecord_error_confirmation: doesn't match confirmation
25 activerecord_error_confirmation: doesn't match confirmation
26 activerecord_error_accepted: must be accepted
26 activerecord_error_accepted: must be accepted
27 activerecord_error_empty: can't be empty
27 activerecord_error_empty: can't be empty
28 activerecord_error_blank: can't be blank
28 activerecord_error_blank: can't be blank
29 activerecord_error_too_long: is too long
29 activerecord_error_too_long: is too long
30 activerecord_error_too_short: is too short
30 activerecord_error_too_short: is too short
31 activerecord_error_wrong_length: is the wrong length
31 activerecord_error_wrong_length: is the wrong length
32 activerecord_error_taken: has already been taken
32 activerecord_error_taken: has already been taken
33 activerecord_error_not_a_number: is not a number
33 activerecord_error_not_a_number: is not a number
34 activerecord_error_not_a_date: is not a valid date
34 activerecord_error_not_a_date: is not a valid date
35 activerecord_error_greater_than_start_date: must be greater than start date
35 activerecord_error_greater_than_start_date: must be greater than start date
36 activerecord_error_not_same_project: doesn't belong to the same project
36 activerecord_error_not_same_project: doesn't belong to the same project
37 activerecord_error_circular_dependency: This relation would create a circular dependency
37 activerecord_error_circular_dependency: This relation would create a circular dependency
38
38
39 general_fmt_age: %d yr
39 general_fmt_age: %d yr
40 general_fmt_age_plural: %d yrs
40 general_fmt_age_plural: %d yrs
41 general_fmt_date: %%m/%%d/%%Y
41 general_fmt_date: %%m/%%d/%%Y
42 general_fmt_datetime: %%m/%%d/%%Y %%I:%%M %%p
42 general_fmt_datetime: %%m/%%d/%%Y %%I:%%M %%p
43 general_fmt_datetime_short: %%b %%d, %%I:%%M %%p
43 general_fmt_datetime_short: %%b %%d, %%I:%%M %%p
44 general_fmt_time: %%I:%%M %%p
44 general_fmt_time: %%I:%%M %%p
45 general_text_No: 'No'
45 general_text_No: 'No'
46 general_text_Yes: 'Yes'
46 general_text_Yes: 'Yes'
47 general_text_no: 'no'
47 general_text_no: 'no'
48 general_text_yes: 'yes'
48 general_text_yes: 'yes'
49 general_lang_name: 'English'
49 general_lang_name: 'English'
50 general_csv_separator: ','
50 general_csv_separator: ','
51 general_csv_decimal_separator: '.'
51 general_csv_decimal_separator: '.'
52 general_csv_encoding: ISO-8859-1
52 general_csv_encoding: ISO-8859-1
53 general_pdf_encoding: ISO-8859-1
53 general_pdf_encoding: ISO-8859-1
54 general_day_names: Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
54 general_day_names: Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
55 general_first_day_of_week: '7'
55 general_first_day_of_week: '7'
56
56
57 notice_account_updated: Account was successfully updated.
57 notice_account_updated: Account was successfully updated.
58 notice_account_invalid_creditentials: Invalid user or password
58 notice_account_invalid_creditentials: Invalid user or password
59 notice_account_password_updated: Password was successfully updated.
59 notice_account_password_updated: Password was successfully updated.
60 notice_account_wrong_password: Wrong password
60 notice_account_wrong_password: Wrong password
61 notice_account_register_done: Account was successfully created. To activate your account, click on the link that was emailed to you.
61 notice_account_register_done: Account was successfully created. To activate your account, click on the link that was emailed to you.
62 notice_account_unknown_email: Unknown user.
62 notice_account_unknown_email: Unknown user.
63 notice_can_t_change_password: This account uses an external authentication source. Impossible to change the password.
63 notice_can_t_change_password: This account uses an external authentication source. Impossible to change the password.
64 notice_account_lost_email_sent: An email with instructions to choose a new password has been sent to you.
64 notice_account_lost_email_sent: An email with instructions to choose a new password has been sent to you.
65 notice_account_activated: Your account has been activated. You can now log in.
65 notice_account_activated: Your account has been activated. You can now log in.
66 notice_successful_create: Successful creation.
66 notice_successful_create: Successful creation.
67 notice_successful_update: Successful update.
67 notice_successful_update: Successful update.
68 notice_successful_delete: Successful deletion.
68 notice_successful_delete: Successful deletion.
69 notice_successful_connection: Successful connection.
69 notice_successful_connection: Successful connection.
70 notice_file_not_found: The page you were trying to access doesn't exist or has been removed.
70 notice_file_not_found: The page you were trying to access doesn't exist or has been removed.
71 notice_locking_conflict: Data has been updated by another user.
71 notice_locking_conflict: Data has been updated by another user.
72 notice_not_authorized: You are not authorized to access this page.
72 notice_not_authorized: You are not authorized to access this page.
73 notice_email_sent: An email was sent to %s
73 notice_email_sent: An email was sent to %s
74 notice_email_error: An error occurred while sending mail (%s)
74 notice_email_error: An error occurred while sending mail (%s)
75 notice_feeds_access_key_reseted: Your RSS access key was reset.
75 notice_feeds_access_key_reseted: Your RSS access key was reset.
76 notice_failed_to_save_issues: "Failed to save %d issue(s) on %d selected: %s."
76 notice_failed_to_save_issues: "Failed to save %d issue(s) on %d selected: %s."
77 notice_no_issue_selected: "No issue is selected! Please, check the issues you want to edit."
77 notice_no_issue_selected: "No issue is selected! Please, check the issues you want to edit."
78 notice_account_pending: "Your account was created and is now pending administrator approval."
78 notice_account_pending: "Your account was created and is now pending administrator approval."
79 notice_default_data_loaded: Default configuration successfully loaded.
79 notice_default_data_loaded: Default configuration successfully loaded.
80 notice_unable_delete_version: Unable to delete version.
80 notice_unable_delete_version: Unable to delete version.
81
81
82 error_can_t_load_default_data: "Default configuration could not be loaded: %s"
82 error_can_t_load_default_data: "Default configuration could not be loaded: %s"
83 error_scm_not_found: "The entry or revision was not found in the repository."
83 error_scm_not_found: "The entry or revision was not found in the repository."
84 error_scm_command_failed: "An error occurred when trying to access the repository: %s"
84 error_scm_command_failed: "An error occurred when trying to access the repository: %s"
85 error_scm_annotate: "The entry does not exist or can not be annotated."
85 error_scm_annotate: "The entry does not exist or can not be annotated."
86 error_issue_not_found_in_project: 'The issue was not found or does not belong to this project'
86 error_issue_not_found_in_project: 'The issue was not found or does not belong to this project'
87
87
88 warning_attachments_not_saved: "%d file(s) could not be saved."
88 warning_attachments_not_saved: "%d file(s) could not be saved."
89
89
90 mail_subject_lost_password: Your %s password
90 mail_subject_lost_password: Your %s password
91 mail_body_lost_password: 'To change your password, click on the following link:'
91 mail_body_lost_password: 'To change your password, click on the following link:'
92 mail_subject_register: Your %s account activation
92 mail_subject_register: Your %s account activation
93 mail_body_register: 'To activate your account, click on the following link:'
93 mail_body_register: 'To activate your account, click on the following link:'
94 mail_body_account_information_external: You can use your "%s" account to log in.
94 mail_body_account_information_external: You can use your "%s" account to log in.
95 mail_body_account_information: Your account information
95 mail_body_account_information: Your account information
96 mail_subject_account_activation_request: %s account activation request
96 mail_subject_account_activation_request: %s account activation request
97 mail_body_account_activation_request: 'A new user (%s) has registered. The account is pending your approval:'
97 mail_body_account_activation_request: 'A new user (%s) has registered. The account is pending your approval:'
98 mail_subject_reminder: "%d issue(s) due in the next days"
98 mail_subject_reminder: "%d issue(s) due in the next days"
99 mail_body_reminder: "%d issue(s) that are assigned to you are due in the next %d days:"
99 mail_body_reminder: "%d issue(s) that are assigned to you are due in the next %d days:"
100
100
101 gui_validation_error: 1 error
101 gui_validation_error: 1 error
102 gui_validation_error_plural: %d errors
102 gui_validation_error_plural: %d errors
103
103
104 field_name: Name
104 field_name: Name
105 field_description: Description
105 field_description: Description
106 field_summary: Summary
106 field_summary: Summary
107 field_is_required: Required
107 field_is_required: Required
108 field_firstname: Firstname
108 field_firstname: Firstname
109 field_lastname: Lastname
109 field_lastname: Lastname
110 field_mail: Email
110 field_mail: Email
111 field_filename: File
111 field_filename: File
112 field_filesize: Size
112 field_filesize: Size
113 field_downloads: Downloads
113 field_downloads: Downloads
114 field_author: Author
114 field_author: Author
115 field_created_on: Created
115 field_created_on: Created
116 field_updated_on: Updated
116 field_updated_on: Updated
117 field_field_format: Format
117 field_field_format: Format
118 field_is_for_all: For all projects
118 field_is_for_all: For all projects
119 field_possible_values: Possible values
119 field_possible_values: Possible values
120 field_regexp: Regular expression
120 field_regexp: Regular expression
121 field_min_length: Minimum length
121 field_min_length: Minimum length
122 field_max_length: Maximum length
122 field_max_length: Maximum length
123 field_value: Value
123 field_value: Value
124 field_category: Category
124 field_category: Category
125 field_title: Title
125 field_title: Title
126 field_project: Project
126 field_project: Project
127 field_issue: Issue
127 field_issue: Issue
128 field_status: Status
128 field_status: Status
129 field_notes: Notes
129 field_notes: Notes
130 field_is_closed: Issue closed
130 field_is_closed: Issue closed
131 field_is_default: Default value
131 field_is_default: Default value
132 field_tracker: Tracker
132 field_tracker: Tracker
133 field_subject: Subject
133 field_subject: Subject
134 field_due_date: Due date
134 field_due_date: Due date
135 field_assigned_to: Assigned to
135 field_assigned_to: Assigned to
136 field_priority: Priority
136 field_priority: Priority
137 field_fixed_version: Target version
137 field_fixed_version: Target version
138 field_user: User
138 field_user: User
139 field_role: Role
139 field_role: Role
140 field_homepage: Homepage
140 field_homepage: Homepage
141 field_is_public: Public
141 field_is_public: Public
142 field_parent: Subproject of
142 field_parent: Subproject of
143 field_is_in_chlog: Issues displayed in changelog
143 field_is_in_chlog: Issues displayed in changelog
144 field_is_in_roadmap: Issues displayed in roadmap
144 field_is_in_roadmap: Issues displayed in roadmap
145 field_login: Login
145 field_login: Login
146 field_mail_notification: Email notifications
146 field_mail_notification: Email notifications
147 field_admin: Administrator
147 field_admin: Administrator
148 field_last_login_on: Last connection
148 field_last_login_on: Last connection
149 field_language: Language
149 field_language: Language
150 field_identity_url: OpenID URL
150 field_effective_date: Date
151 field_effective_date: Date
151 field_password: Password
152 field_password: Password
152 field_new_password: New password
153 field_new_password: New password
153 field_password_confirmation: Confirmation
154 field_password_confirmation: Confirmation
154 field_version: Version
155 field_version: Version
155 field_type: Type
156 field_type: Type
156 field_host: Host
157 field_host: Host
157 field_port: Port
158 field_port: Port
158 field_account: Account
159 field_account: Account
159 field_base_dn: Base DN
160 field_base_dn: Base DN
160 field_attr_login: Login attribute
161 field_attr_login: Login attribute
161 field_attr_firstname: Firstname attribute
162 field_attr_firstname: Firstname attribute
162 field_attr_lastname: Lastname attribute
163 field_attr_lastname: Lastname attribute
163 field_attr_mail: Email attribute
164 field_attr_mail: Email attribute
164 field_onthefly: On-the-fly user creation
165 field_onthefly: On-the-fly user creation
165 field_start_date: Start
166 field_start_date: Start
166 field_done_ratio: %% Done
167 field_done_ratio: %% Done
167 field_auth_source: Authentication mode
168 field_auth_source: Authentication mode
168 field_hide_mail: Hide my email address
169 field_hide_mail: Hide my email address
169 field_comments: Comment
170 field_comments: Comment
170 field_url: URL
171 field_url: URL
171 field_start_page: Start page
172 field_start_page: Start page
172 field_subproject: Subproject
173 field_subproject: Subproject
173 field_hours: Hours
174 field_hours: Hours
174 field_activity: Activity
175 field_activity: Activity
175 field_spent_on: Date
176 field_spent_on: Date
176 field_identifier: Identifier
177 field_identifier: Identifier
177 field_is_filter: Used as a filter
178 field_is_filter: Used as a filter
178 field_issue_to_id: Related issue
179 field_issue_to_id: Related issue
179 field_delay: Delay
180 field_delay: Delay
180 field_assignable: Issues can be assigned to this role
181 field_assignable: Issues can be assigned to this role
181 field_redirect_existing_links: Redirect existing links
182 field_redirect_existing_links: Redirect existing links
182 field_estimated_hours: Estimated time
183 field_estimated_hours: Estimated time
183 field_column_names: Columns
184 field_column_names: Columns
184 field_time_zone: Time zone
185 field_time_zone: Time zone
185 field_searchable: Searchable
186 field_searchable: Searchable
186 field_default_value: Default value
187 field_default_value: Default value
187 field_comments_sorting: Display comments
188 field_comments_sorting: Display comments
188 field_parent_title: Parent page
189 field_parent_title: Parent page
189 field_editable: Editable
190 field_editable: Editable
190
191
191 setting_app_title: Application title
192 setting_app_title: Application title
192 setting_app_subtitle: Application subtitle
193 setting_app_subtitle: Application subtitle
193 setting_welcome_text: Welcome text
194 setting_welcome_text: Welcome text
194 setting_default_language: Default language
195 setting_default_language: Default language
195 setting_login_required: Authentication required
196 setting_login_required: Authentication required
196 setting_self_registration: Self-registration
197 setting_self_registration: Self-registration
197 setting_attachment_max_size: Attachment max. size
198 setting_attachment_max_size: Attachment max. size
198 setting_issues_export_limit: Issues export limit
199 setting_issues_export_limit: Issues export limit
199 setting_mail_from: Emission email address
200 setting_mail_from: Emission email address
200 setting_bcc_recipients: Blind carbon copy recipients (bcc)
201 setting_bcc_recipients: Blind carbon copy recipients (bcc)
201 setting_plain_text_mail: Plain text mail (no HTML)
202 setting_plain_text_mail: Plain text mail (no HTML)
202 setting_host_name: Host name and path
203 setting_host_name: Host name and path
203 setting_text_formatting: Text formatting
204 setting_text_formatting: Text formatting
204 setting_wiki_compression: Wiki history compression
205 setting_wiki_compression: Wiki history compression
205 setting_feeds_limit: Feed content limit
206 setting_feeds_limit: Feed content limit
206 setting_default_projects_public: New projects are public by default
207 setting_default_projects_public: New projects are public by default
207 setting_autofetch_changesets: Autofetch commits
208 setting_autofetch_changesets: Autofetch commits
208 setting_sys_api_enabled: Enable WS for repository management
209 setting_sys_api_enabled: Enable WS for repository management
209 setting_commit_ref_keywords: Referencing keywords
210 setting_commit_ref_keywords: Referencing keywords
210 setting_commit_fix_keywords: Fixing keywords
211 setting_commit_fix_keywords: Fixing keywords
211 setting_autologin: Autologin
212 setting_autologin: Autologin
212 setting_date_format: Date format
213 setting_date_format: Date format
213 setting_time_format: Time format
214 setting_time_format: Time format
214 setting_cross_project_issue_relations: Allow cross-project issue relations
215 setting_cross_project_issue_relations: Allow cross-project issue relations
215 setting_issue_list_default_columns: Default columns displayed on the issue list
216 setting_issue_list_default_columns: Default columns displayed on the issue list
216 setting_repositories_encodings: Repositories encodings
217 setting_repositories_encodings: Repositories encodings
217 setting_commit_logs_encoding: Commit messages encoding
218 setting_commit_logs_encoding: Commit messages encoding
218 setting_emails_footer: Emails footer
219 setting_emails_footer: Emails footer
219 setting_protocol: Protocol
220 setting_protocol: Protocol
220 setting_per_page_options: Objects per page options
221 setting_per_page_options: Objects per page options
221 setting_user_format: Users display format
222 setting_user_format: Users display format
222 setting_activity_days_default: Days displayed on project activity
223 setting_activity_days_default: Days displayed on project activity
223 setting_display_subprojects_issues: Display subprojects issues on main projects by default
224 setting_display_subprojects_issues: Display subprojects issues on main projects by default
224 setting_enabled_scm: Enabled SCM
225 setting_enabled_scm: Enabled SCM
225 setting_mail_handler_api_enabled: Enable WS for incoming emails
226 setting_mail_handler_api_enabled: Enable WS for incoming emails
226 setting_mail_handler_api_key: API key
227 setting_mail_handler_api_key: API key
227 setting_sequential_project_identifiers: Generate sequential project identifiers
228 setting_sequential_project_identifiers: Generate sequential project identifiers
228 setting_gravatar_enabled: Use Gravatar user icons
229 setting_gravatar_enabled: Use Gravatar user icons
229 setting_diff_max_lines_displayed: Max number of diff lines displayed
230 setting_diff_max_lines_displayed: Max number of diff lines displayed
230 setting_repository_log_display_limit: Maximum number of revisions displayed on file log
231 setting_repository_log_display_limit: Maximum number of revisions displayed on file log
231
232
232 permission_edit_project: Edit project
233 permission_edit_project: Edit project
233 permission_select_project_modules: Select project modules
234 permission_select_project_modules: Select project modules
234 permission_manage_members: Manage members
235 permission_manage_members: Manage members
235 permission_manage_versions: Manage versions
236 permission_manage_versions: Manage versions
236 permission_manage_categories: Manage issue categories
237 permission_manage_categories: Manage issue categories
237 permission_add_issues: Add issues
238 permission_add_issues: Add issues
238 permission_edit_issues: Edit issues
239 permission_edit_issues: Edit issues
239 permission_manage_issue_relations: Manage issue relations
240 permission_manage_issue_relations: Manage issue relations
240 permission_add_issue_notes: Add notes
241 permission_add_issue_notes: Add notes
241 permission_edit_issue_notes: Edit notes
242 permission_edit_issue_notes: Edit notes
242 permission_edit_own_issue_notes: Edit own notes
243 permission_edit_own_issue_notes: Edit own notes
243 permission_move_issues: Move issues
244 permission_move_issues: Move issues
244 permission_delete_issues: Delete issues
245 permission_delete_issues: Delete issues
245 permission_manage_public_queries: Manage public queries
246 permission_manage_public_queries: Manage public queries
246 permission_save_queries: Save queries
247 permission_save_queries: Save queries
247 permission_view_gantt: View gantt chart
248 permission_view_gantt: View gantt chart
248 permission_view_calendar: View calender
249 permission_view_calendar: View calender
249 permission_view_issue_watchers: View watchers list
250 permission_view_issue_watchers: View watchers list
250 permission_add_issue_watchers: Add watchers
251 permission_add_issue_watchers: Add watchers
251 permission_log_time: Log spent time
252 permission_log_time: Log spent time
252 permission_view_time_entries: View spent time
253 permission_view_time_entries: View spent time
253 permission_edit_time_entries: Edit time logs
254 permission_edit_time_entries: Edit time logs
254 permission_edit_own_time_entries: Edit own time logs
255 permission_edit_own_time_entries: Edit own time logs
255 permission_manage_news: Manage news
256 permission_manage_news: Manage news
256 permission_comment_news: Comment news
257 permission_comment_news: Comment news
257 permission_manage_documents: Manage documents
258 permission_manage_documents: Manage documents
258 permission_view_documents: View documents
259 permission_view_documents: View documents
259 permission_manage_files: Manage files
260 permission_manage_files: Manage files
260 permission_view_files: View files
261 permission_view_files: View files
261 permission_manage_wiki: Manage wiki
262 permission_manage_wiki: Manage wiki
262 permission_rename_wiki_pages: Rename wiki pages
263 permission_rename_wiki_pages: Rename wiki pages
263 permission_delete_wiki_pages: Delete wiki pages
264 permission_delete_wiki_pages: Delete wiki pages
264 permission_view_wiki_pages: View wiki
265 permission_view_wiki_pages: View wiki
265 permission_view_wiki_edits: View wiki history
266 permission_view_wiki_edits: View wiki history
266 permission_edit_wiki_pages: Edit wiki pages
267 permission_edit_wiki_pages: Edit wiki pages
267 permission_delete_wiki_pages_attachments: Delete attachments
268 permission_delete_wiki_pages_attachments: Delete attachments
268 permission_protect_wiki_pages: Protect wiki pages
269 permission_protect_wiki_pages: Protect wiki pages
269 permission_manage_repository: Manage repository
270 permission_manage_repository: Manage repository
270 permission_browse_repository: Browse repository
271 permission_browse_repository: Browse repository
271 permission_view_changesets: View changesets
272 permission_view_changesets: View changesets
272 permission_commit_access: Commit access
273 permission_commit_access: Commit access
273 permission_manage_boards: Manage boards
274 permission_manage_boards: Manage boards
274 permission_view_messages: View messages
275 permission_view_messages: View messages
275 permission_add_messages: Post messages
276 permission_add_messages: Post messages
276 permission_edit_messages: Edit messages
277 permission_edit_messages: Edit messages
277 permission_edit_own_messages: Edit own messages
278 permission_edit_own_messages: Edit own messages
278 permission_delete_messages: Delete messages
279 permission_delete_messages: Delete messages
279 permission_delete_own_messages: Delete own messages
280 permission_delete_own_messages: Delete own messages
280
281
281 project_module_issue_tracking: Issue tracking
282 project_module_issue_tracking: Issue tracking
282 project_module_time_tracking: Time tracking
283 project_module_time_tracking: Time tracking
283 project_module_news: News
284 project_module_news: News
284 project_module_documents: Documents
285 project_module_documents: Documents
285 project_module_files: Files
286 project_module_files: Files
286 project_module_wiki: Wiki
287 project_module_wiki: Wiki
287 project_module_repository: Repository
288 project_module_repository: Repository
288 project_module_boards: Boards
289 project_module_boards: Boards
289
290
290 label_user: User
291 label_user: User
291 label_user_plural: Users
292 label_user_plural: Users
292 label_user_new: New user
293 label_user_new: New user
293 label_project: Project
294 label_project: Project
294 label_project_new: New project
295 label_project_new: New project
295 label_project_plural: Projects
296 label_project_plural: Projects
296 label_project_all: All Projects
297 label_project_all: All Projects
297 label_project_latest: Latest projects
298 label_project_latest: Latest projects
298 label_issue: Issue
299 label_issue: Issue
299 label_issue_new: New issue
300 label_issue_new: New issue
300 label_issue_plural: Issues
301 label_issue_plural: Issues
301 label_issue_view_all: View all issues
302 label_issue_view_all: View all issues
302 label_issues_by: Issues by %s
303 label_issues_by: Issues by %s
303 label_issue_added: Issue added
304 label_issue_added: Issue added
304 label_issue_updated: Issue updated
305 label_issue_updated: Issue updated
305 label_document: Document
306 label_document: Document
306 label_document_new: New document
307 label_document_new: New document
307 label_document_plural: Documents
308 label_document_plural: Documents
308 label_document_added: Document added
309 label_document_added: Document added
309 label_role: Role
310 label_role: Role
310 label_role_plural: Roles
311 label_role_plural: Roles
311 label_role_new: New role
312 label_role_new: New role
312 label_role_and_permissions: Roles and permissions
313 label_role_and_permissions: Roles and permissions
313 label_member: Member
314 label_member: Member
314 label_member_new: New member
315 label_member_new: New member
315 label_member_plural: Members
316 label_member_plural: Members
316 label_tracker: Tracker
317 label_tracker: Tracker
317 label_tracker_plural: Trackers
318 label_tracker_plural: Trackers
318 label_tracker_new: New tracker
319 label_tracker_new: New tracker
319 label_workflow: Workflow
320 label_workflow: Workflow
320 label_issue_status: Issue status
321 label_issue_status: Issue status
321 label_issue_status_plural: Issue statuses
322 label_issue_status_plural: Issue statuses
322 label_issue_status_new: New status
323 label_issue_status_new: New status
323 label_issue_category: Issue category
324 label_issue_category: Issue category
324 label_issue_category_plural: Issue categories
325 label_issue_category_plural: Issue categories
325 label_issue_category_new: New category
326 label_issue_category_new: New category
326 label_custom_field: Custom field
327 label_custom_field: Custom field
327 label_custom_field_plural: Custom fields
328 label_custom_field_plural: Custom fields
328 label_custom_field_new: New custom field
329 label_custom_field_new: New custom field
329 label_enumerations: Enumerations
330 label_enumerations: Enumerations
330 label_enumeration_new: New value
331 label_enumeration_new: New value
331 label_information: Information
332 label_information: Information
332 label_information_plural: Information
333 label_information_plural: Information
333 label_please_login: Please log in
334 label_please_login: Please log in
334 label_register: Register
335 label_register: Register
336 label_login_with_open_id_option: or login with OpenID
335 label_password_lost: Lost password
337 label_password_lost: Lost password
336 label_home: Home
338 label_home: Home
337 label_my_page: My page
339 label_my_page: My page
338 label_my_account: My account
340 label_my_account: My account
339 label_my_projects: My projects
341 label_my_projects: My projects
340 label_administration: Administration
342 label_administration: Administration
341 label_login: Sign in
343 label_login: Sign in
342 label_logout: Sign out
344 label_logout: Sign out
343 label_help: Help
345 label_help: Help
344 label_reported_issues: Reported issues
346 label_reported_issues: Reported issues
345 label_assigned_to_me_issues: Issues assigned to me
347 label_assigned_to_me_issues: Issues assigned to me
346 label_last_login: Last connection
348 label_last_login: Last connection
347 label_last_updates: Last updated
349 label_last_updates: Last updated
348 label_last_updates_plural: %d last updated
350 label_last_updates_plural: %d last updated
349 label_registered_on: Registered on
351 label_registered_on: Registered on
350 label_activity: Activity
352 label_activity: Activity
351 label_overall_activity: Overall activity
353 label_overall_activity: Overall activity
352 label_user_activity: "%s's activity"
354 label_user_activity: "%s's activity"
353 label_new: New
355 label_new: New
354 label_logged_as: Logged in as
356 label_logged_as: Logged in as
355 label_environment: Environment
357 label_environment: Environment
356 label_authentication: Authentication
358 label_authentication: Authentication
357 label_auth_source: Authentication mode
359 label_auth_source: Authentication mode
358 label_auth_source_new: New authentication mode
360 label_auth_source_new: New authentication mode
359 label_auth_source_plural: Authentication modes
361 label_auth_source_plural: Authentication modes
360 label_subproject_plural: Subprojects
362 label_subproject_plural: Subprojects
361 label_and_its_subprojects: %s and its subprojects
363 label_and_its_subprojects: %s and its subprojects
362 label_min_max_length: Min - Max length
364 label_min_max_length: Min - Max length
363 label_list: List
365 label_list: List
364 label_date: Date
366 label_date: Date
365 label_integer: Integer
367 label_integer: Integer
366 label_float: Float
368 label_float: Float
367 label_boolean: Boolean
369 label_boolean: Boolean
368 label_string: Text
370 label_string: Text
369 label_text: Long text
371 label_text: Long text
370 label_attribute: Attribute
372 label_attribute: Attribute
371 label_attribute_plural: Attributes
373 label_attribute_plural: Attributes
372 label_download: %d Download
374 label_download: %d Download
373 label_download_plural: %d Downloads
375 label_download_plural: %d Downloads
374 label_no_data: No data to display
376 label_no_data: No data to display
375 label_change_status: Change status
377 label_change_status: Change status
376 label_history: History
378 label_history: History
377 label_attachment: File
379 label_attachment: File
378 label_attachment_new: New file
380 label_attachment_new: New file
379 label_attachment_delete: Delete file
381 label_attachment_delete: Delete file
380 label_attachment_plural: Files
382 label_attachment_plural: Files
381 label_file_added: File added
383 label_file_added: File added
382 label_report: Report
384 label_report: Report
383 label_report_plural: Reports
385 label_report_plural: Reports
384 label_news: News
386 label_news: News
385 label_news_new: Add news
387 label_news_new: Add news
386 label_news_plural: News
388 label_news_plural: News
387 label_news_latest: Latest news
389 label_news_latest: Latest news
388 label_news_view_all: View all news
390 label_news_view_all: View all news
389 label_news_added: News added
391 label_news_added: News added
390 label_change_log: Change log
392 label_change_log: Change log
391 label_settings: Settings
393 label_settings: Settings
392 label_overview: Overview
394 label_overview: Overview
393 label_version: Version
395 label_version: Version
394 label_version_new: New version
396 label_version_new: New version
395 label_version_plural: Versions
397 label_version_plural: Versions
396 label_confirmation: Confirmation
398 label_confirmation: Confirmation
397 label_export_to: 'Also available in:'
399 label_export_to: 'Also available in:'
398 label_read: Read...
400 label_read: Read...
399 label_public_projects: Public projects
401 label_public_projects: Public projects
400 label_open_issues: open
402 label_open_issues: open
401 label_open_issues_plural: open
403 label_open_issues_plural: open
402 label_closed_issues: closed
404 label_closed_issues: closed
403 label_closed_issues_plural: closed
405 label_closed_issues_plural: closed
404 label_total: Total
406 label_total: Total
405 label_permissions: Permissions
407 label_permissions: Permissions
406 label_current_status: Current status
408 label_current_status: Current status
407 label_new_statuses_allowed: New statuses allowed
409 label_new_statuses_allowed: New statuses allowed
408 label_all: all
410 label_all: all
409 label_none: none
411 label_none: none
410 label_nobody: nobody
412 label_nobody: nobody
411 label_next: Next
413 label_next: Next
412 label_previous: Previous
414 label_previous: Previous
413 label_used_by: Used by
415 label_used_by: Used by
414 label_details: Details
416 label_details: Details
415 label_add_note: Add a note
417 label_add_note: Add a note
416 label_per_page: Per page
418 label_per_page: Per page
417 label_calendar: Calendar
419 label_calendar: Calendar
418 label_months_from: months from
420 label_months_from: months from
419 label_gantt: Gantt
421 label_gantt: Gantt
420 label_internal: Internal
422 label_internal: Internal
421 label_last_changes: last %d changes
423 label_last_changes: last %d changes
422 label_change_view_all: View all changes
424 label_change_view_all: View all changes
423 label_personalize_page: Personalize this page
425 label_personalize_page: Personalize this page
424 label_comment: Comment
426 label_comment: Comment
425 label_comment_plural: Comments
427 label_comment_plural: Comments
426 label_comment_add: Add a comment
428 label_comment_add: Add a comment
427 label_comment_added: Comment added
429 label_comment_added: Comment added
428 label_comment_delete: Delete comments
430 label_comment_delete: Delete comments
429 label_query: Custom query
431 label_query: Custom query
430 label_query_plural: Custom queries
432 label_query_plural: Custom queries
431 label_query_new: New query
433 label_query_new: New query
432 label_filter_add: Add filter
434 label_filter_add: Add filter
433 label_filter_plural: Filters
435 label_filter_plural: Filters
434 label_equals: is
436 label_equals: is
435 label_not_equals: is not
437 label_not_equals: is not
436 label_in_less_than: in less than
438 label_in_less_than: in less than
437 label_in_more_than: in more than
439 label_in_more_than: in more than
438 label_in: in
440 label_in: in
439 label_today: today
441 label_today: today
440 label_all_time: all time
442 label_all_time: all time
441 label_yesterday: yesterday
443 label_yesterday: yesterday
442 label_this_week: this week
444 label_this_week: this week
443 label_last_week: last week
445 label_last_week: last week
444 label_last_n_days: last %d days
446 label_last_n_days: last %d days
445 label_this_month: this month
447 label_this_month: this month
446 label_last_month: last month
448 label_last_month: last month
447 label_this_year: this year
449 label_this_year: this year
448 label_date_range: Date range
450 label_date_range: Date range
449 label_less_than_ago: less than days ago
451 label_less_than_ago: less than days ago
450 label_more_than_ago: more than days ago
452 label_more_than_ago: more than days ago
451 label_ago: days ago
453 label_ago: days ago
452 label_contains: contains
454 label_contains: contains
453 label_not_contains: doesn't contain
455 label_not_contains: doesn't contain
454 label_day_plural: days
456 label_day_plural: days
455 label_repository: Repository
457 label_repository: Repository
456 label_repository_plural: Repositories
458 label_repository_plural: Repositories
457 label_browse: Browse
459 label_browse: Browse
458 label_modification: %d change
460 label_modification: %d change
459 label_modification_plural: %d changes
461 label_modification_plural: %d changes
460 label_revision: Revision
462 label_revision: Revision
461 label_revision_plural: Revisions
463 label_revision_plural: Revisions
462 label_associated_revisions: Associated revisions
464 label_associated_revisions: Associated revisions
463 label_added: added
465 label_added: added
464 label_modified: modified
466 label_modified: modified
465 label_copied: copied
467 label_copied: copied
466 label_renamed: renamed
468 label_renamed: renamed
467 label_deleted: deleted
469 label_deleted: deleted
468 label_latest_revision: Latest revision
470 label_latest_revision: Latest revision
469 label_latest_revision_plural: Latest revisions
471 label_latest_revision_plural: Latest revisions
470 label_view_revisions: View revisions
472 label_view_revisions: View revisions
471 label_max_size: Maximum size
473 label_max_size: Maximum size
472 label_on: 'on'
474 label_on: 'on'
473 label_sort_highest: Move to top
475 label_sort_highest: Move to top
474 label_sort_higher: Move up
476 label_sort_higher: Move up
475 label_sort_lower: Move down
477 label_sort_lower: Move down
476 label_sort_lowest: Move to bottom
478 label_sort_lowest: Move to bottom
477 label_roadmap: Roadmap
479 label_roadmap: Roadmap
478 label_roadmap_due_in: Due in %s
480 label_roadmap_due_in: Due in %s
479 label_roadmap_overdue: %s late
481 label_roadmap_overdue: %s late
480 label_roadmap_no_issues: No issues for this version
482 label_roadmap_no_issues: No issues for this version
481 label_search: Search
483 label_search: Search
482 label_result_plural: Results
484 label_result_plural: Results
483 label_all_words: All words
485 label_all_words: All words
484 label_wiki: Wiki
486 label_wiki: Wiki
485 label_wiki_edit: Wiki edit
487 label_wiki_edit: Wiki edit
486 label_wiki_edit_plural: Wiki edits
488 label_wiki_edit_plural: Wiki edits
487 label_wiki_page: Wiki page
489 label_wiki_page: Wiki page
488 label_wiki_page_plural: Wiki pages
490 label_wiki_page_plural: Wiki pages
489 label_index_by_title: Index by title
491 label_index_by_title: Index by title
490 label_index_by_date: Index by date
492 label_index_by_date: Index by date
491 label_current_version: Current version
493 label_current_version: Current version
492 label_preview: Preview
494 label_preview: Preview
493 label_feed_plural: Feeds
495 label_feed_plural: Feeds
494 label_changes_details: Details of all changes
496 label_changes_details: Details of all changes
495 label_issue_tracking: Issue tracking
497 label_issue_tracking: Issue tracking
496 label_spent_time: Spent time
498 label_spent_time: Spent time
497 label_f_hour: %.2f hour
499 label_f_hour: %.2f hour
498 label_f_hour_plural: %.2f hours
500 label_f_hour_plural: %.2f hours
499 label_time_tracking: Time tracking
501 label_time_tracking: Time tracking
500 label_change_plural: Changes
502 label_change_plural: Changes
501 label_statistics: Statistics
503 label_statistics: Statistics
502 label_commits_per_month: Commits per month
504 label_commits_per_month: Commits per month
503 label_commits_per_author: Commits per author
505 label_commits_per_author: Commits per author
504 label_view_diff: View differences
506 label_view_diff: View differences
505 label_diff_inline: inline
507 label_diff_inline: inline
506 label_diff_side_by_side: side by side
508 label_diff_side_by_side: side by side
507 label_options: Options
509 label_options: Options
508 label_copy_workflow_from: Copy workflow from
510 label_copy_workflow_from: Copy workflow from
509 label_permissions_report: Permissions report
511 label_permissions_report: Permissions report
510 label_watched_issues: Watched issues
512 label_watched_issues: Watched issues
511 label_related_issues: Related issues
513 label_related_issues: Related issues
512 label_applied_status: Applied status
514 label_applied_status: Applied status
513 label_loading: Loading...
515 label_loading: Loading...
514 label_relation_new: New relation
516 label_relation_new: New relation
515 label_relation_delete: Delete relation
517 label_relation_delete: Delete relation
516 label_relates_to: related to
518 label_relates_to: related to
517 label_duplicates: duplicates
519 label_duplicates: duplicates
518 label_duplicated_by: duplicated by
520 label_duplicated_by: duplicated by
519 label_blocks: blocks
521 label_blocks: blocks
520 label_blocked_by: blocked by
522 label_blocked_by: blocked by
521 label_precedes: precedes
523 label_precedes: precedes
522 label_follows: follows
524 label_follows: follows
523 label_end_to_start: end to start
525 label_end_to_start: end to start
524 label_end_to_end: end to end
526 label_end_to_end: end to end
525 label_start_to_start: start to start
527 label_start_to_start: start to start
526 label_start_to_end: start to end
528 label_start_to_end: start to end
527 label_stay_logged_in: Stay logged in
529 label_stay_logged_in: Stay logged in
528 label_disabled: disabled
530 label_disabled: disabled
529 label_show_completed_versions: Show completed versions
531 label_show_completed_versions: Show completed versions
530 label_me: me
532 label_me: me
531 label_board: Forum
533 label_board: Forum
532 label_board_new: New forum
534 label_board_new: New forum
533 label_board_plural: Forums
535 label_board_plural: Forums
534 label_topic_plural: Topics
536 label_topic_plural: Topics
535 label_message_plural: Messages
537 label_message_plural: Messages
536 label_message_last: Last message
538 label_message_last: Last message
537 label_message_new: New message
539 label_message_new: New message
538 label_message_posted: Message added
540 label_message_posted: Message added
539 label_reply_plural: Replies
541 label_reply_plural: Replies
540 label_send_information: Send account information to the user
542 label_send_information: Send account information to the user
541 label_year: Year
543 label_year: Year
542 label_month: Month
544 label_month: Month
543 label_week: Week
545 label_week: Week
544 label_date_from: From
546 label_date_from: From
545 label_date_to: To
547 label_date_to: To
546 label_language_based: Based on user's language
548 label_language_based: Based on user's language
547 label_sort_by: Sort by %s
549 label_sort_by: Sort by %s
548 label_send_test_email: Send a test email
550 label_send_test_email: Send a test email
549 label_feeds_access_key_created_on: RSS access key created %s ago
551 label_feeds_access_key_created_on: RSS access key created %s ago
550 label_module_plural: Modules
552 label_module_plural: Modules
551 label_added_time_by: Added by %s %s ago
553 label_added_time_by: Added by %s %s ago
552 label_updated_time_by: Updated by %s %s ago
554 label_updated_time_by: Updated by %s %s ago
553 label_updated_time: Updated %s ago
555 label_updated_time: Updated %s ago
554 label_jump_to_a_project: Jump to a project...
556 label_jump_to_a_project: Jump to a project...
555 label_file_plural: Files
557 label_file_plural: Files
556 label_changeset_plural: Changesets
558 label_changeset_plural: Changesets
557 label_default_columns: Default columns
559 label_default_columns: Default columns
558 label_no_change_option: (No change)
560 label_no_change_option: (No change)
559 label_bulk_edit_selected_issues: Bulk edit selected issues
561 label_bulk_edit_selected_issues: Bulk edit selected issues
560 label_theme: Theme
562 label_theme: Theme
561 label_default: Default
563 label_default: Default
562 label_search_titles_only: Search titles only
564 label_search_titles_only: Search titles only
563 label_user_mail_option_all: "For any event on all my projects"
565 label_user_mail_option_all: "For any event on all my projects"
564 label_user_mail_option_selected: "For any event on the selected projects only..."
566 label_user_mail_option_selected: "For any event on the selected projects only..."
565 label_user_mail_option_none: "Only for things I watch or I'm involved in"
567 label_user_mail_option_none: "Only for things I watch or I'm involved in"
566 label_user_mail_no_self_notified: "I don't want to be notified of changes that I make myself"
568 label_user_mail_no_self_notified: "I don't want to be notified of changes that I make myself"
567 label_registration_activation_by_email: account activation by email
569 label_registration_activation_by_email: account activation by email
568 label_registration_manual_activation: manual account activation
570 label_registration_manual_activation: manual account activation
569 label_registration_automatic_activation: automatic account activation
571 label_registration_automatic_activation: automatic account activation
570 label_display_per_page: 'Per page: %s'
572 label_display_per_page: 'Per page: %s'
571 label_age: Age
573 label_age: Age
572 label_change_properties: Change properties
574 label_change_properties: Change properties
573 label_general: General
575 label_general: General
574 label_more: More
576 label_more: More
575 label_scm: SCM
577 label_scm: SCM
576 label_plugins: Plugins
578 label_plugins: Plugins
577 label_ldap_authentication: LDAP authentication
579 label_ldap_authentication: LDAP authentication
578 label_downloads_abbr: D/L
580 label_downloads_abbr: D/L
579 label_optional_description: Optional description
581 label_optional_description: Optional description
580 label_add_another_file: Add another file
582 label_add_another_file: Add another file
581 label_preferences: Preferences
583 label_preferences: Preferences
582 label_chronological_order: In chronological order
584 label_chronological_order: In chronological order
583 label_reverse_chronological_order: In reverse chronological order
585 label_reverse_chronological_order: In reverse chronological order
584 label_planning: Planning
586 label_planning: Planning
585 label_incoming_emails: Incoming emails
587 label_incoming_emails: Incoming emails
586 label_generate_key: Generate a key
588 label_generate_key: Generate a key
587 label_issue_watchers: Watchers
589 label_issue_watchers: Watchers
588 label_example: Example
590 label_example: Example
589 label_display: Display
591 label_display: Display
590
592
591 button_login: Login
593 button_login: Login
592 button_submit: Submit
594 button_submit: Submit
593 button_save: Save
595 button_save: Save
594 button_check_all: Check all
596 button_check_all: Check all
595 button_uncheck_all: Uncheck all
597 button_uncheck_all: Uncheck all
596 button_delete: Delete
598 button_delete: Delete
597 button_create: Create
599 button_create: Create
598 button_create_and_continue: Create and continue
600 button_create_and_continue: Create and continue
599 button_test: Test
601 button_test: Test
600 button_edit: Edit
602 button_edit: Edit
601 button_add: Add
603 button_add: Add
602 button_change: Change
604 button_change: Change
603 button_apply: Apply
605 button_apply: Apply
604 button_clear: Clear
606 button_clear: Clear
605 button_lock: Lock
607 button_lock: Lock
606 button_unlock: Unlock
608 button_unlock: Unlock
607 button_download: Download
609 button_download: Download
608 button_list: List
610 button_list: List
609 button_view: View
611 button_view: View
610 button_move: Move
612 button_move: Move
611 button_back: Back
613 button_back: Back
612 button_cancel: Cancel
614 button_cancel: Cancel
613 button_activate: Activate
615 button_activate: Activate
614 button_sort: Sort
616 button_sort: Sort
615 button_log_time: Log time
617 button_log_time: Log time
616 button_rollback: Rollback to this version
618 button_rollback: Rollback to this version
617 button_watch: Watch
619 button_watch: Watch
618 button_unwatch: Unwatch
620 button_unwatch: Unwatch
619 button_reply: Reply
621 button_reply: Reply
620 button_archive: Archive
622 button_archive: Archive
621 button_unarchive: Unarchive
623 button_unarchive: Unarchive
622 button_reset: Reset
624 button_reset: Reset
623 button_rename: Rename
625 button_rename: Rename
624 button_change_password: Change password
626 button_change_password: Change password
625 button_copy: Copy
627 button_copy: Copy
626 button_annotate: Annotate
628 button_annotate: Annotate
627 button_update: Update
629 button_update: Update
628 button_configure: Configure
630 button_configure: Configure
629 button_quote: Quote
631 button_quote: Quote
630
632
631 status_active: active
633 status_active: active
632 status_registered: registered
634 status_registered: registered
633 status_locked: locked
635 status_locked: locked
634
636
635 text_select_mail_notifications: Select actions for which email notifications should be sent.
637 text_select_mail_notifications: Select actions for which email notifications should be sent.
636 text_regexp_info: eg. ^[A-Z0-9]+$
638 text_regexp_info: eg. ^[A-Z0-9]+$
637 text_min_max_length_info: 0 means no restriction
639 text_min_max_length_info: 0 means no restriction
638 text_project_destroy_confirmation: Are you sure you want to delete this project and related data ?
640 text_project_destroy_confirmation: Are you sure you want to delete this project and related data ?
639 text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
641 text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
640 text_workflow_edit: Select a role and a tracker to edit the workflow
642 text_workflow_edit: Select a role and a tracker to edit the workflow
641 text_are_you_sure: Are you sure ?
643 text_are_you_sure: Are you sure ?
642 text_journal_changed: changed from %s to %s
644 text_journal_changed: changed from %s to %s
643 text_journal_set_to: set to %s
645 text_journal_set_to: set to %s
644 text_journal_deleted: deleted
646 text_journal_deleted: deleted
645 text_tip_task_begin_day: task beginning this day
647 text_tip_task_begin_day: task beginning this day
646 text_tip_task_end_day: task ending this day
648 text_tip_task_end_day: task ending this day
647 text_tip_task_begin_end_day: task beginning and ending this day
649 text_tip_task_begin_end_day: task beginning and ending this day
648 text_project_identifier_info: 'Only lower case letters (a-z), numbers and dashes are allowed.<br />Once saved, the identifier can not be changed.'
650 text_project_identifier_info: 'Only lower case letters (a-z), numbers and dashes are allowed.<br />Once saved, the identifier can not be changed.'
649 text_caracters_maximum: %d characters maximum.
651 text_caracters_maximum: %d characters maximum.
650 text_caracters_minimum: Must be at least %d characters long.
652 text_caracters_minimum: Must be at least %d characters long.
651 text_length_between: Length between %d and %d characters.
653 text_length_between: Length between %d and %d characters.
652 text_tracker_no_workflow: No workflow defined for this tracker
654 text_tracker_no_workflow: No workflow defined for this tracker
653 text_unallowed_characters: Unallowed characters
655 text_unallowed_characters: Unallowed characters
654 text_comma_separated: Multiple values allowed (comma separated).
656 text_comma_separated: Multiple values allowed (comma separated).
655 text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages
657 text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages
656 text_issue_added: Issue %s has been reported by %s.
658 text_issue_added: Issue %s has been reported by %s.
657 text_issue_updated: Issue %s has been updated by %s.
659 text_issue_updated: Issue %s has been updated by %s.
658 text_wiki_destroy_confirmation: Are you sure you want to delete this wiki and all its content ?
660 text_wiki_destroy_confirmation: Are you sure you want to delete this wiki and all its content ?
659 text_issue_category_destroy_question: Some issues (%d) are assigned to this category. What do you want to do ?
661 text_issue_category_destroy_question: Some issues (%d) are assigned to this category. What do you want to do ?
660 text_issue_category_destroy_assignments: Remove category assignments
662 text_issue_category_destroy_assignments: Remove category assignments
661 text_issue_category_reassign_to: Reassign issues to this category
663 text_issue_category_reassign_to: Reassign issues to this category
662 text_user_mail_option: "For unselected projects, you will only receive notifications about things you watch or you're involved in (eg. issues you're the author or assignee)."
664 text_user_mail_option: "For unselected projects, you will only receive notifications about things you watch or you're involved in (eg. issues you're the author or assignee)."
663 text_no_configuration_data: "Roles, trackers, issue statuses and workflow have not been configured yet.\nIt is highly recommended to load the default configuration. You will be able to modify it once loaded."
665 text_no_configuration_data: "Roles, trackers, issue statuses and workflow have not been configured yet.\nIt is highly recommended to load the default configuration. You will be able to modify it once loaded."
664 text_load_default_configuration: Load the default configuration
666 text_load_default_configuration: Load the default configuration
665 text_status_changed_by_changeset: Applied in changeset %s.
667 text_status_changed_by_changeset: Applied in changeset %s.
666 text_issues_destroy_confirmation: 'Are you sure you want to delete the selected issue(s) ?'
668 text_issues_destroy_confirmation: 'Are you sure you want to delete the selected issue(s) ?'
667 text_select_project_modules: 'Select modules to enable for this project:'
669 text_select_project_modules: 'Select modules to enable for this project:'
668 text_default_administrator_account_changed: Default administrator account changed
670 text_default_administrator_account_changed: Default administrator account changed
669 text_file_repository_writable: Attachments directory writable
671 text_file_repository_writable: Attachments directory writable
670 text_plugin_assets_writable: Plugin assets directory writable
672 text_plugin_assets_writable: Plugin assets directory writable
671 text_rmagick_available: RMagick available (optional)
673 text_rmagick_available: RMagick available (optional)
672 text_destroy_time_entries_question: %.02f hours were reported on the issues you are about to delete. What do you want to do ?
674 text_destroy_time_entries_question: %.02f hours were reported on the issues you are about to delete. What do you want to do ?
673 text_destroy_time_entries: Delete reported hours
675 text_destroy_time_entries: Delete reported hours
674 text_assign_time_entries_to_project: Assign reported hours to the project
676 text_assign_time_entries_to_project: Assign reported hours to the project
675 text_reassign_time_entries: 'Reassign reported hours to this issue:'
677 text_reassign_time_entries: 'Reassign reported hours to this issue:'
676 text_user_wrote: '%s wrote:'
678 text_user_wrote: '%s wrote:'
677 text_enumeration_destroy_question: '%d objects are assigned to this value.'
679 text_enumeration_destroy_question: '%d objects are assigned to this value.'
678 text_enumeration_category_reassign_to: 'Reassign them to this value:'
680 text_enumeration_category_reassign_to: 'Reassign them to this value:'
679 text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/email.yml and restart the application to enable them."
681 text_email_delivery_not_configured: "Email delivery is not configured, and notifications are disabled.\nConfigure your SMTP server in config/email.yml and restart the application to enable them."
680 text_repository_usernames_mapping: "Select or update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped."
682 text_repository_usernames_mapping: "Select or update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped."
681 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
683 text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
682 text_custom_field_possible_values_info: 'One line for each value'
684 text_custom_field_possible_values_info: 'One line for each value'
683
685
684 default_role_manager: Manager
686 default_role_manager: Manager
685 default_role_developper: Developer
687 default_role_developper: Developer
686 default_role_reporter: Reporter
688 default_role_reporter: Reporter
687 default_tracker_bug: Bug
689 default_tracker_bug: Bug
688 default_tracker_feature: Feature
690 default_tracker_feature: Feature
689 default_tracker_support: Support
691 default_tracker_support: Support
690 default_issue_status_new: New
692 default_issue_status_new: New
691 default_issue_status_assigned: Assigned
693 default_issue_status_assigned: Assigned
692 default_issue_status_resolved: Resolved
694 default_issue_status_resolved: Resolved
693 default_issue_status_feedback: Feedback
695 default_issue_status_feedback: Feedback
694 default_issue_status_closed: Closed
696 default_issue_status_closed: Closed
695 default_issue_status_rejected: Rejected
697 default_issue_status_rejected: Rejected
696 default_doc_category_user: User documentation
698 default_doc_category_user: User documentation
697 default_doc_category_tech: Technical documentation
699 default_doc_category_tech: Technical documentation
698 default_priority_low: Low
700 default_priority_low: Low
699 default_priority_normal: Normal
701 default_priority_normal: Normal
700 default_priority_high: High
702 default_priority_high: High
701 default_priority_urgent: Urgent
703 default_priority_urgent: Urgent
702 default_priority_immediate: Immediate
704 default_priority_immediate: Immediate
703 default_activity_design: Design
705 default_activity_design: Design
704 default_activity_development: Development
706 default_activity_development: Development
705
707
706 enumeration_issue_priorities: Issue priorities
708 enumeration_issue_priorities: Issue priorities
707 enumeration_doc_categories: Document categories
709 enumeration_doc_categories: Document categories
708 enumeration_activities: Activities (time tracking)
710 enumeration_activities: Activities (time tracking)
@@ -1,706 +1,708
1 body { font-family: Verdana, sans-serif; font-size: 12px; color:#484848; margin: 0; padding: 0; min-width: 900px; }
1 body { font-family: Verdana, sans-serif; font-size: 12px; color:#484848; margin: 0; padding: 0; min-width: 900px; }
2
2
3 h1, h2, h3, h4 { font-family: "Trebuchet MS", Verdana, sans-serif;}
3 h1, h2, h3, h4 { font-family: "Trebuchet MS", Verdana, sans-serif;}
4 h1 {margin:0; padding:0; font-size: 24px;}
4 h1 {margin:0; padding:0; font-size: 24px;}
5 h2, .wiki h1 {font-size: 20px;padding: 2px 10px 1px 0px;margin: 0 0 10px 0; border-bottom: 1px solid #bbbbbb; color: #444;}
5 h2, .wiki h1 {font-size: 20px;padding: 2px 10px 1px 0px;margin: 0 0 10px 0; border-bottom: 1px solid #bbbbbb; color: #444;}
6 h3, .wiki h2 {font-size: 16px;padding: 2px 10px 1px 0px;margin: 0 0 10px 0; border-bottom: 1px solid #bbbbbb; color: #444;}
6 h3, .wiki h2 {font-size: 16px;padding: 2px 10px 1px 0px;margin: 0 0 10px 0; border-bottom: 1px solid #bbbbbb; color: #444;}
7 h4, .wiki h3 {font-size: 13px;padding: 2px 10px 1px 0px;margin-bottom: 5px; border-bottom: 1px dotted #bbbbbb; color: #444;}
7 h4, .wiki h3 {font-size: 13px;padding: 2px 10px 1px 0px;margin-bottom: 5px; border-bottom: 1px dotted #bbbbbb; color: #444;}
8
8
9 /***** Layout *****/
9 /***** Layout *****/
10 #wrapper {background: white;}
10 #wrapper {background: white;}
11
11
12 #top-menu {background: #2C4056; color: #fff; height:1.8em; font-size: 0.8em; padding: 2px 2px 0px 6px;}
12 #top-menu {background: #2C4056; color: #fff; height:1.8em; font-size: 0.8em; padding: 2px 2px 0px 6px;}
13 #top-menu ul {margin: 0; padding: 0;}
13 #top-menu ul {margin: 0; padding: 0;}
14 #top-menu li {
14 #top-menu li {
15 float:left;
15 float:left;
16 list-style-type:none;
16 list-style-type:none;
17 margin: 0px 0px 0px 0px;
17 margin: 0px 0px 0px 0px;
18 padding: 0px 0px 0px 0px;
18 padding: 0px 0px 0px 0px;
19 white-space:nowrap;
19 white-space:nowrap;
20 }
20 }
21 #top-menu a {color: #fff; margin-right: 8px; font-weight: bold;}
21 #top-menu a {color: #fff; margin-right: 8px; font-weight: bold;}
22 #top-menu #loggedas { float: right; margin-right: 0.5em; color: #fff; }
22 #top-menu #loggedas { float: right; margin-right: 0.5em; color: #fff; }
23
23
24 #account {float:right;}
24 #account {float:right;}
25
25
26 #header {height:5.3em;margin:0;background-color:#507AAA;color:#f8f8f8; padding: 4px 8px 0px 6px; position:relative;}
26 #header {height:5.3em;margin:0;background-color:#507AAA;color:#f8f8f8; padding: 4px 8px 0px 6px; position:relative;}
27 #header a {color:#f8f8f8;}
27 #header a {color:#f8f8f8;}
28 #quick-search {float:right;}
28 #quick-search {float:right;}
29
29
30 #main-menu {position: absolute; bottom: 0px; left:6px; margin-right: -500px;}
30 #main-menu {position: absolute; bottom: 0px; left:6px; margin-right: -500px;}
31 #main-menu ul {margin: 0; padding: 0;}
31 #main-menu ul {margin: 0; padding: 0;}
32 #main-menu li {
32 #main-menu li {
33 float:left;
33 float:left;
34 list-style-type:none;
34 list-style-type:none;
35 margin: 0px 2px 0px 0px;
35 margin: 0px 2px 0px 0px;
36 padding: 0px 0px 0px 0px;
36 padding: 0px 0px 0px 0px;
37 white-space:nowrap;
37 white-space:nowrap;
38 }
38 }
39 #main-menu li a {
39 #main-menu li a {
40 display: block;
40 display: block;
41 color: #fff;
41 color: #fff;
42 text-decoration: none;
42 text-decoration: none;
43 font-weight: bold;
43 font-weight: bold;
44 margin: 0;
44 margin: 0;
45 padding: 4px 10px 4px 10px;
45 padding: 4px 10px 4px 10px;
46 }
46 }
47 #main-menu li a:hover {background:#759FCF; color:#fff;}
47 #main-menu li a:hover {background:#759FCF; color:#fff;}
48 #main-menu li a.selected, #main-menu li a.selected:hover {background:#fff; color:#555;}
48 #main-menu li a.selected, #main-menu li a.selected:hover {background:#fff; color:#555;}
49
49
50 #main {background-color:#EEEEEE;}
50 #main {background-color:#EEEEEE;}
51
51
52 #sidebar{ float: right; width: 17%; position: relative; z-index: 9; min-height: 600px; padding: 0; margin: 0;}
52 #sidebar{ float: right; width: 17%; position: relative; z-index: 9; min-height: 600px; padding: 0; margin: 0;}
53 * html #sidebar{ width: 17%; }
53 * html #sidebar{ width: 17%; }
54 #sidebar h3{ font-size: 14px; margin-top:14px; color: #666; }
54 #sidebar h3{ font-size: 14px; margin-top:14px; color: #666; }
55 #sidebar hr{ width: 100%; margin: 0 auto; height: 1px; background: #ccc; border: 0; }
55 #sidebar hr{ width: 100%; margin: 0 auto; height: 1px; background: #ccc; border: 0; }
56 * html #sidebar hr{ width: 95%; position: relative; left: -6px; color: #ccc; }
56 * html #sidebar hr{ width: 95%; position: relative; left: -6px; color: #ccc; }
57
57
58 #content { width: 80%; background-color: #fff; margin: 0px; border-right: 1px solid #ddd; padding: 6px 10px 10px 10px; z-index: 10; }
58 #content { width: 80%; background-color: #fff; margin: 0px; border-right: 1px solid #ddd; padding: 6px 10px 10px 10px; z-index: 10; }
59 * html #content{ width: 80%; padding-left: 0; margin-top: 0px; padding: 6px 10px 10px 10px;}
59 * html #content{ width: 80%; padding-left: 0; margin-top: 0px; padding: 6px 10px 10px 10px;}
60 html>body #content { min-height: 600px; }
60 html>body #content { min-height: 600px; }
61 * html body #content { height: 600px; } /* IE */
61 * html body #content { height: 600px; } /* IE */
62
62
63 #main.nosidebar #sidebar{ display: none; }
63 #main.nosidebar #sidebar{ display: none; }
64 #main.nosidebar #content{ width: auto; border-right: 0; }
64 #main.nosidebar #content{ width: auto; border-right: 0; }
65
65
66 #footer {clear: both; border-top: 1px solid #bbb; font-size: 0.9em; color: #aaa; padding: 5px; text-align:center; background:#fff;}
66 #footer {clear: both; border-top: 1px solid #bbb; font-size: 0.9em; color: #aaa; padding: 5px; text-align:center; background:#fff;}
67
67
68 #login-form table {margin-top:5em; padding:1em; margin-left: auto; margin-right: auto; border: 2px solid #FDBF3B; background-color:#FFEBC1; }
68 #login-form table {margin-top:5em; padding:1em; margin-left: auto; margin-right: auto; border: 2px solid #FDBF3B; background-color:#FFEBC1; }
69 #login-form table td {padding: 6px;}
69 #login-form table td {padding: 6px;}
70 #login-form label {font-weight: bold;}
70 #login-form label {font-weight: bold;}
71
71
72 input#openid_url { background: url(../images/openid-bg.gif) no-repeat; background-color: #fff; background-position: 0 50%; padding-left: 18px; }
73
72 .clear:after{ content: "."; display: block; height: 0; clear: both; visibility: hidden; }
74 .clear:after{ content: "."; display: block; height: 0; clear: both; visibility: hidden; }
73
75
74 /***** Links *****/
76 /***** Links *****/
75 a, a:link, a:visited{ color: #2A5685; text-decoration: none; }
77 a, a:link, a:visited{ color: #2A5685; text-decoration: none; }
76 a:hover, a:active{ color: #c61a1a; text-decoration: underline;}
78 a:hover, a:active{ color: #c61a1a; text-decoration: underline;}
77 a img{ border: 0; }
79 a img{ border: 0; }
78
80
79 a.issue.closed { text-decoration: line-through; }
81 a.issue.closed { text-decoration: line-through; }
80
82
81 /***** Tables *****/
83 /***** Tables *****/
82 table.list { border: 1px solid #e4e4e4; border-collapse: collapse; width: 100%; margin-bottom: 4px; }
84 table.list { border: 1px solid #e4e4e4; border-collapse: collapse; width: 100%; margin-bottom: 4px; }
83 table.list th { background-color:#EEEEEE; padding: 4px; white-space:nowrap; }
85 table.list th { background-color:#EEEEEE; padding: 4px; white-space:nowrap; }
84 table.list td { vertical-align: top; }
86 table.list td { vertical-align: top; }
85 table.list td.id { width: 2%; text-align: center;}
87 table.list td.id { width: 2%; text-align: center;}
86 table.list td.checkbox { width: 15px; padding: 0px;}
88 table.list td.checkbox { width: 15px; padding: 0px;}
87
89
88 tr.project td.name a { padding-left: 16px; white-space:nowrap; }
90 tr.project td.name a { padding-left: 16px; white-space:nowrap; }
89 tr.project.parent td.name a { background: url('../images/bullet_toggle_minus.png') no-repeat; }
91 tr.project.parent td.name a { background: url('../images/bullet_toggle_minus.png') no-repeat; }
90
92
91 tr.issue { text-align: center; white-space: nowrap; }
93 tr.issue { text-align: center; white-space: nowrap; }
92 tr.issue td.subject, tr.issue td.category, td.assigned_to { white-space: normal; }
94 tr.issue td.subject, tr.issue td.category, td.assigned_to { white-space: normal; }
93 tr.issue td.subject { text-align: left; }
95 tr.issue td.subject { text-align: left; }
94 tr.issue td.done_ratio table.progress { margin-left:auto; margin-right: auto;}
96 tr.issue td.done_ratio table.progress { margin-left:auto; margin-right: auto;}
95
97
96 tr.entry { border: 1px solid #f8f8f8; }
98 tr.entry { border: 1px solid #f8f8f8; }
97 tr.entry td { white-space: nowrap; }
99 tr.entry td { white-space: nowrap; }
98 tr.entry td.filename { width: 30%; }
100 tr.entry td.filename { width: 30%; }
99 tr.entry td.size { text-align: right; font-size: 90%; }
101 tr.entry td.size { text-align: right; font-size: 90%; }
100 tr.entry td.revision, tr.entry td.author { text-align: center; }
102 tr.entry td.revision, tr.entry td.author { text-align: center; }
101 tr.entry td.age { text-align: right; }
103 tr.entry td.age { text-align: right; }
102
104
103 tr.entry span.expander {background-image: url(../images/bullet_toggle_plus.png); padding-left: 8px; margin-left: 0; cursor: pointer;}
105 tr.entry span.expander {background-image: url(../images/bullet_toggle_plus.png); padding-left: 8px; margin-left: 0; cursor: pointer;}
104 tr.entry.open span.expander {background-image: url(../images/bullet_toggle_minus.png);}
106 tr.entry.open span.expander {background-image: url(../images/bullet_toggle_minus.png);}
105 tr.entry.file td.filename a { margin-left: 16px; }
107 tr.entry.file td.filename a { margin-left: 16px; }
106
108
107 tr.changeset td.author { text-align: center; width: 15%; }
109 tr.changeset td.author { text-align: center; width: 15%; }
108 tr.changeset td.committed_on { text-align: center; width: 15%; }
110 tr.changeset td.committed_on { text-align: center; width: 15%; }
109
111
110 tr.message { height: 2.6em; }
112 tr.message { height: 2.6em; }
111 tr.message td.last_message { font-size: 80%; }
113 tr.message td.last_message { font-size: 80%; }
112 tr.message.locked td.subject a { background-image: url(../images/locked.png); }
114 tr.message.locked td.subject a { background-image: url(../images/locked.png); }
113 tr.message.sticky td.subject a { background-image: url(../images/sticky.png); font-weight: bold; }
115 tr.message.sticky td.subject a { background-image: url(../images/sticky.png); font-weight: bold; }
114
116
115 tr.user td { width:13%; }
117 tr.user td { width:13%; }
116 tr.user td.email { width:18%; }
118 tr.user td.email { width:18%; }
117 tr.user td { white-space: nowrap; }
119 tr.user td { white-space: nowrap; }
118 tr.user.locked, tr.user.registered { color: #aaa; }
120 tr.user.locked, tr.user.registered { color: #aaa; }
119 tr.user.locked a, tr.user.registered a { color: #aaa; }
121 tr.user.locked a, tr.user.registered a { color: #aaa; }
120
122
121 tr.time-entry { text-align: center; white-space: nowrap; }
123 tr.time-entry { text-align: center; white-space: nowrap; }
122 tr.time-entry td.subject, tr.time-entry td.comments { text-align: left; white-space: normal; }
124 tr.time-entry td.subject, tr.time-entry td.comments { text-align: left; white-space: normal; }
123 td.hours { text-align: right; font-weight: bold; padding-right: 0.5em; }
125 td.hours { text-align: right; font-weight: bold; padding-right: 0.5em; }
124 td.hours .hours-dec { font-size: 0.9em; }
126 td.hours .hours-dec { font-size: 0.9em; }
125
127
126 table.plugins td { vertical-align: middle; }
128 table.plugins td { vertical-align: middle; }
127 table.plugins td.configure { text-align: right; padding-right: 1em; }
129 table.plugins td.configure { text-align: right; padding-right: 1em; }
128 table.plugins span.name { font-weight: bold; display: block; margin-bottom: 6px; }
130 table.plugins span.name { font-weight: bold; display: block; margin-bottom: 6px; }
129 table.plugins span.description { display: block; font-size: 0.9em; }
131 table.plugins span.description { display: block; font-size: 0.9em; }
130 table.plugins span.url { display: block; font-size: 0.9em; }
132 table.plugins span.url { display: block; font-size: 0.9em; }
131
133
132 table.list tbody tr:hover { background-color:#ffffdd; }
134 table.list tbody tr:hover { background-color:#ffffdd; }
133 table td {padding:2px;}
135 table td {padding:2px;}
134 table p {margin:0;}
136 table p {margin:0;}
135 .odd {background-color:#f6f7f8;}
137 .odd {background-color:#f6f7f8;}
136 .even {background-color: #fff;}
138 .even {background-color: #fff;}
137
139
138 .highlight { background-color: #FCFD8D;}
140 .highlight { background-color: #FCFD8D;}
139 .highlight.token-1 { background-color: #faa;}
141 .highlight.token-1 { background-color: #faa;}
140 .highlight.token-2 { background-color: #afa;}
142 .highlight.token-2 { background-color: #afa;}
141 .highlight.token-3 { background-color: #aaf;}
143 .highlight.token-3 { background-color: #aaf;}
142
144
143 .box{
145 .box{
144 padding:6px;
146 padding:6px;
145 margin-bottom: 10px;
147 margin-bottom: 10px;
146 background-color:#f6f6f6;
148 background-color:#f6f6f6;
147 color:#505050;
149 color:#505050;
148 line-height:1.5em;
150 line-height:1.5em;
149 border: 1px solid #e4e4e4;
151 border: 1px solid #e4e4e4;
150 }
152 }
151
153
152 div.square {
154 div.square {
153 border: 1px solid #999;
155 border: 1px solid #999;
154 float: left;
156 float: left;
155 margin: .3em .4em 0 .4em;
157 margin: .3em .4em 0 .4em;
156 overflow: hidden;
158 overflow: hidden;
157 width: .6em; height: .6em;
159 width: .6em; height: .6em;
158 }
160 }
159 .contextual {float:right; white-space: nowrap; line-height:1.4em;margin-top:5px; padding-left: 10px; font-size:0.9em;}
161 .contextual {float:right; white-space: nowrap; line-height:1.4em;margin-top:5px; padding-left: 10px; font-size:0.9em;}
160 .contextual input {font-size:0.9em;}
162 .contextual input {font-size:0.9em;}
161 .message .contextual { margin-top: 0; }
163 .message .contextual { margin-top: 0; }
162
164
163 .splitcontentleft{float:left; width:49%;}
165 .splitcontentleft{float:left; width:49%;}
164 .splitcontentright{float:right; width:49%;}
166 .splitcontentright{float:right; width:49%;}
165 form {display: inline;}
167 form {display: inline;}
166 input, select {vertical-align: middle; margin-top: 1px; margin-bottom: 1px;}
168 input, select {vertical-align: middle; margin-top: 1px; margin-bottom: 1px;}
167 fieldset {border: 1px solid #e4e4e4; margin:0;}
169 fieldset {border: 1px solid #e4e4e4; margin:0;}
168 legend {color: #484848;}
170 legend {color: #484848;}
169 hr { width: 100%; height: 1px; background: #ccc; border: 0;}
171 hr { width: 100%; height: 1px; background: #ccc; border: 0;}
170 blockquote { font-style: italic; border-left: 3px solid #e0e0e0; padding-left: 0.6em; margin-left: 2.4em;}
172 blockquote { font-style: italic; border-left: 3px solid #e0e0e0; padding-left: 0.6em; margin-left: 2.4em;}
171 blockquote blockquote { margin-left: 0;}
173 blockquote blockquote { margin-left: 0;}
172 textarea.wiki-edit { width: 99%; }
174 textarea.wiki-edit { width: 99%; }
173 li p {margin-top: 0;}
175 li p {margin-top: 0;}
174 div.issue {background:#ffffdd; padding:6px; margin-bottom:6px;border: 1px solid #d7d7d7;}
176 div.issue {background:#ffffdd; padding:6px; margin-bottom:6px;border: 1px solid #d7d7d7;}
175 p.breadcrumb { font-size: 0.9em; margin: 4px 0 4px 0;}
177 p.breadcrumb { font-size: 0.9em; margin: 4px 0 4px 0;}
176 p.subtitle { font-size: 0.9em; margin: -6px 0 12px 0; font-style: italic; }
178 p.subtitle { font-size: 0.9em; margin: -6px 0 12px 0; font-style: italic; }
177 p.footnote { font-size: 0.9em; margin-top: 0px; margin-bottom: 0px; }
179 p.footnote { font-size: 0.9em; margin-top: 0px; margin-bottom: 0px; }
178
180
179 fieldset#filters, fieldset#date-range { padding: 0.7em; margin-bottom: 8px; }
181 fieldset#filters, fieldset#date-range { padding: 0.7em; margin-bottom: 8px; }
180 fieldset#filters p { margin: 1.2em 0 0.8em 2px; }
182 fieldset#filters p { margin: 1.2em 0 0.8em 2px; }
181 fieldset#filters table { border-collapse: collapse; }
183 fieldset#filters table { border-collapse: collapse; }
182 fieldset#filters table td { padding: 0; vertical-align: middle; }
184 fieldset#filters table td { padding: 0; vertical-align: middle; }
183 fieldset#filters tr.filter { height: 2em; }
185 fieldset#filters tr.filter { height: 2em; }
184 fieldset#filters td.add-filter { text-align: right; vertical-align: top; }
186 fieldset#filters td.add-filter { text-align: right; vertical-align: top; }
185 .buttons { font-size: 0.9em; }
187 .buttons { font-size: 0.9em; }
186
188
187 div#issue-changesets {float:right; width:45%; margin-left: 1em; margin-bottom: 1em; background: #fff; padding-left: 1em; font-size: 90%;}
189 div#issue-changesets {float:right; width:45%; margin-left: 1em; margin-bottom: 1em; background: #fff; padding-left: 1em; font-size: 90%;}
188 div#issue-changesets .changeset { padding: 4px;}
190 div#issue-changesets .changeset { padding: 4px;}
189 div#issue-changesets .changeset { border-bottom: 1px solid #ddd; }
191 div#issue-changesets .changeset { border-bottom: 1px solid #ddd; }
190 div#issue-changesets p { margin-top: 0; margin-bottom: 1em;}
192 div#issue-changesets p { margin-top: 0; margin-bottom: 1em;}
191
193
192 div#activity dl, #search-results { margin-left: 2em; }
194 div#activity dl, #search-results { margin-left: 2em; }
193 div#activity dd, #search-results dd { margin-bottom: 1em; padding-left: 18px; font-size: 0.9em; }
195 div#activity dd, #search-results dd { margin-bottom: 1em; padding-left: 18px; font-size: 0.9em; }
194 div#activity dt, #search-results dt { margin-bottom: 0px; padding-left: 20px; line-height: 18px; background-position: 0 50%; background-repeat: no-repeat; }
196 div#activity dt, #search-results dt { margin-bottom: 0px; padding-left: 20px; line-height: 18px; background-position: 0 50%; background-repeat: no-repeat; }
195 div#activity dt.me .time { border-bottom: 1px solid #999; }
197 div#activity dt.me .time { border-bottom: 1px solid #999; }
196 div#activity dt .time { color: #777; font-size: 80%; }
198 div#activity dt .time { color: #777; font-size: 80%; }
197 div#activity dd .description, #search-results dd .description { font-style: italic; }
199 div#activity dd .description, #search-results dd .description { font-style: italic; }
198 div#activity span.project:after, #search-results span.project:after { content: " -"; }
200 div#activity span.project:after, #search-results span.project:after { content: " -"; }
199 div#activity dd span.description, #search-results dd span.description { display:block; color: #808080; }
201 div#activity dd span.description, #search-results dd span.description { display:block; color: #808080; }
200
202
201 #search-results dd { margin-bottom: 1em; padding-left: 20px; margin-left:0px; }
203 #search-results dd { margin-bottom: 1em; padding-left: 20px; margin-left:0px; }
202
204
203 div#search-results-counts {float:right;}
205 div#search-results-counts {float:right;}
204 div#search-results-counts ul { margin-top: 0.5em; }
206 div#search-results-counts ul { margin-top: 0.5em; }
205 div#search-results-counts li { list-style-type:none; float: left; margin-left: 1em; }
207 div#search-results-counts li { list-style-type:none; float: left; margin-left: 1em; }
206
208
207 dt.issue { background-image: url(../images/ticket.png); }
209 dt.issue { background-image: url(../images/ticket.png); }
208 dt.issue-edit { background-image: url(../images/ticket_edit.png); }
210 dt.issue-edit { background-image: url(../images/ticket_edit.png); }
209 dt.issue-closed { background-image: url(../images/ticket_checked.png); }
211 dt.issue-closed { background-image: url(../images/ticket_checked.png); }
210 dt.issue-note { background-image: url(../images/ticket_note.png); }
212 dt.issue-note { background-image: url(../images/ticket_note.png); }
211 dt.changeset { background-image: url(../images/changeset.png); }
213 dt.changeset { background-image: url(../images/changeset.png); }
212 dt.news { background-image: url(../images/news.png); }
214 dt.news { background-image: url(../images/news.png); }
213 dt.message { background-image: url(../images/message.png); }
215 dt.message { background-image: url(../images/message.png); }
214 dt.reply { background-image: url(../images/comments.png); }
216 dt.reply { background-image: url(../images/comments.png); }
215 dt.wiki-page { background-image: url(../images/wiki_edit.png); }
217 dt.wiki-page { background-image: url(../images/wiki_edit.png); }
216 dt.attachment { background-image: url(../images/attachment.png); }
218 dt.attachment { background-image: url(../images/attachment.png); }
217 dt.document { background-image: url(../images/document.png); }
219 dt.document { background-image: url(../images/document.png); }
218 dt.project { background-image: url(../images/projects.png); }
220 dt.project { background-image: url(../images/projects.png); }
219
221
220 #search-results dt.issue.closed { background-image: url(../images/ticket_checked.png); }
222 #search-results dt.issue.closed { background-image: url(../images/ticket_checked.png); }
221
223
222 div#roadmap fieldset.related-issues { margin-bottom: 1em; }
224 div#roadmap fieldset.related-issues { margin-bottom: 1em; }
223 div#roadmap fieldset.related-issues ul { margin-top: 0.3em; margin-bottom: 0.3em; }
225 div#roadmap fieldset.related-issues ul { margin-top: 0.3em; margin-bottom: 0.3em; }
224 div#roadmap .wiki h1:first-child { display: none; }
226 div#roadmap .wiki h1:first-child { display: none; }
225 div#roadmap .wiki h1 { font-size: 120%; }
227 div#roadmap .wiki h1 { font-size: 120%; }
226 div#roadmap .wiki h2 { font-size: 110%; }
228 div#roadmap .wiki h2 { font-size: 110%; }
227
229
228 div#version-summary { float:right; width:380px; margin-left: 16px; margin-bottom: 16px; background-color: #fff; }
230 div#version-summary { float:right; width:380px; margin-left: 16px; margin-bottom: 16px; background-color: #fff; }
229 div#version-summary fieldset { margin-bottom: 1em; }
231 div#version-summary fieldset { margin-bottom: 1em; }
230 div#version-summary .total-hours { text-align: right; }
232 div#version-summary .total-hours { text-align: right; }
231
233
232 table#time-report td.hours, table#time-report th.period, table#time-report th.total { text-align: right; padding-right: 0.5em; }
234 table#time-report td.hours, table#time-report th.period, table#time-report th.total { text-align: right; padding-right: 0.5em; }
233 table#time-report tbody tr { font-style: italic; color: #777; }
235 table#time-report tbody tr { font-style: italic; color: #777; }
234 table#time-report tbody tr.last-level { font-style: normal; color: #555; }
236 table#time-report tbody tr.last-level { font-style: normal; color: #555; }
235 table#time-report tbody tr.total { font-style: normal; font-weight: bold; color: #555; background-color:#EEEEEE; }
237 table#time-report tbody tr.total { font-style: normal; font-weight: bold; color: #555; background-color:#EEEEEE; }
236 table#time-report .hours-dec { font-size: 0.9em; }
238 table#time-report .hours-dec { font-size: 0.9em; }
237
239
238 form#issue-form .attributes { margin-bottom: 8px; }
240 form#issue-form .attributes { margin-bottom: 8px; }
239 form#issue-form .attributes p { padding-top: 1px; padding-bottom: 2px; }
241 form#issue-form .attributes p { padding-top: 1px; padding-bottom: 2px; }
240 form#issue-form .attributes select { min-width: 30%; }
242 form#issue-form .attributes select { min-width: 30%; }
241
243
242 ul.projects { margin: 0; padding-left: 1em; }
244 ul.projects { margin: 0; padding-left: 1em; }
243 ul.projects.root { margin: 0; padding: 0; }
245 ul.projects.root { margin: 0; padding: 0; }
244 ul.projects ul { border-left: 3px solid #e0e0e0; }
246 ul.projects ul { border-left: 3px solid #e0e0e0; }
245 ul.projects li { list-style-type:none; }
247 ul.projects li { list-style-type:none; }
246 ul.projects li.root { margin-bottom: 1em; }
248 ul.projects li.root { margin-bottom: 1em; }
247 ul.projects li.child { margin-top: 1em;}
249 ul.projects li.child { margin-top: 1em;}
248 ul.projects div.root a.project { font-family: "Trebuchet MS", Verdana, sans-serif; font-weight: bold; font-size: 16px; margin: 0 0 10px 0; }
250 ul.projects div.root a.project { font-family: "Trebuchet MS", Verdana, sans-serif; font-weight: bold; font-size: 16px; margin: 0 0 10px 0; }
249 .my-project { padding-left: 18px; background: url(../images/fav.png) no-repeat 0 50%; }
251 .my-project { padding-left: 18px; background: url(../images/fav.png) no-repeat 0 50%; }
250
252
251 #tracker_project_ids ul { margin: 0; padding-left: 1em; }
253 #tracker_project_ids ul { margin: 0; padding-left: 1em; }
252 #tracker_project_ids li { list-style-type:none; }
254 #tracker_project_ids li { list-style-type:none; }
253
255
254 ul.properties {padding:0; font-size: 0.9em; color: #777;}
256 ul.properties {padding:0; font-size: 0.9em; color: #777;}
255 ul.properties li {list-style-type:none;}
257 ul.properties li {list-style-type:none;}
256 ul.properties li span {font-style:italic;}
258 ul.properties li span {font-style:italic;}
257
259
258 .total-hours { font-size: 110%; font-weight: bold; }
260 .total-hours { font-size: 110%; font-weight: bold; }
259 .total-hours span.hours-int { font-size: 120%; }
261 .total-hours span.hours-int { font-size: 120%; }
260
262
261 .autoscroll {overflow-x: auto; padding:1px; margin-bottom: 1.2em;}
263 .autoscroll {overflow-x: auto; padding:1px; margin-bottom: 1.2em;}
262 #user_firstname, #user_lastname, #user_mail, #my_account_form select { width: 90%; }
264 #user_firstname, #user_lastname, #user_mail, #my_account_form select { width: 90%; }
263
265
264 .pagination {font-size: 90%}
266 .pagination {font-size: 90%}
265 p.pagination {margin-top:8px;}
267 p.pagination {margin-top:8px;}
266
268
267 /***** Tabular forms ******/
269 /***** Tabular forms ******/
268 .tabular p{
270 .tabular p{
269 margin: 0;
271 margin: 0;
270 padding: 5px 0 8px 0;
272 padding: 5px 0 8px 0;
271 padding-left: 180px; /*width of left column containing the label elements*/
273 padding-left: 180px; /*width of left column containing the label elements*/
272 height: 1%;
274 height: 1%;
273 clear:left;
275 clear:left;
274 }
276 }
275
277
276 html>body .tabular p {overflow:hidden;}
278 html>body .tabular p {overflow:hidden;}
277
279
278 .tabular label{
280 .tabular label{
279 font-weight: bold;
281 font-weight: bold;
280 float: left;
282 float: left;
281 text-align: right;
283 text-align: right;
282 margin-left: -180px; /*width of left column*/
284 margin-left: -180px; /*width of left column*/
283 width: 175px; /*width of labels. Should be smaller than left column to create some right
285 width: 175px; /*width of labels. Should be smaller than left column to create some right
284 margin*/
286 margin*/
285 }
287 }
286
288
287 .tabular label.floating{
289 .tabular label.floating{
288 font-weight: normal;
290 font-weight: normal;
289 margin-left: 0px;
291 margin-left: 0px;
290 text-align: left;
292 text-align: left;
291 width: 270px;
293 width: 270px;
292 }
294 }
293
295
294 input#time_entry_comments { width: 90%;}
296 input#time_entry_comments { width: 90%;}
295
297
296 #preview fieldset {margin-top: 1em; background: url(../images/draft.png)}
298 #preview fieldset {margin-top: 1em; background: url(../images/draft.png)}
297
299
298 .tabular.settings p{ padding-left: 300px; }
300 .tabular.settings p{ padding-left: 300px; }
299 .tabular.settings label{ margin-left: -300px; width: 295px; }
301 .tabular.settings label{ margin-left: -300px; width: 295px; }
300
302
301 .required {color: #bb0000;}
303 .required {color: #bb0000;}
302 .summary {font-style: italic;}
304 .summary {font-style: italic;}
303
305
304 #attachments_fields input[type=text] {margin-left: 8px; }
306 #attachments_fields input[type=text] {margin-left: 8px; }
305
307
306 div.attachments { margin-top: 12px; }
308 div.attachments { margin-top: 12px; }
307 div.attachments p { margin:4px 0 2px 0; }
309 div.attachments p { margin:4px 0 2px 0; }
308 div.attachments img { vertical-align: middle; }
310 div.attachments img { vertical-align: middle; }
309 div.attachments span.author { font-size: 0.9em; color: #888; }
311 div.attachments span.author { font-size: 0.9em; color: #888; }
310
312
311 p.other-formats { text-align: right; font-size:0.9em; color: #666; }
313 p.other-formats { text-align: right; font-size:0.9em; color: #666; }
312 .other-formats span + span:before { content: "| "; }
314 .other-formats span + span:before { content: "| "; }
313
315
314 a.atom { background: url(../images/feed.png) no-repeat 1px 50%; padding: 2px 0px 3px 16px; }
316 a.atom { background: url(../images/feed.png) no-repeat 1px 50%; padding: 2px 0px 3px 16px; }
315
317
316 /***** Flash & error messages ****/
318 /***** Flash & error messages ****/
317 #errorExplanation, div.flash, .nodata, .warning {
319 #errorExplanation, div.flash, .nodata, .warning {
318 padding: 4px 4px 4px 30px;
320 padding: 4px 4px 4px 30px;
319 margin-bottom: 12px;
321 margin-bottom: 12px;
320 font-size: 1.1em;
322 font-size: 1.1em;
321 border: 2px solid;
323 border: 2px solid;
322 }
324 }
323
325
324 div.flash {margin-top: 8px;}
326 div.flash {margin-top: 8px;}
325
327
326 div.flash.error, #errorExplanation {
328 div.flash.error, #errorExplanation {
327 background: url(../images/false.png) 8px 5px no-repeat;
329 background: url(../images/false.png) 8px 5px no-repeat;
328 background-color: #ffe3e3;
330 background-color: #ffe3e3;
329 border-color: #dd0000;
331 border-color: #dd0000;
330 color: #550000;
332 color: #550000;
331 }
333 }
332
334
333 div.flash.notice {
335 div.flash.notice {
334 background: url(../images/true.png) 8px 5px no-repeat;
336 background: url(../images/true.png) 8px 5px no-repeat;
335 background-color: #dfffdf;
337 background-color: #dfffdf;
336 border-color: #9fcf9f;
338 border-color: #9fcf9f;
337 color: #005f00;
339 color: #005f00;
338 }
340 }
339
341
340 div.flash.warning {
342 div.flash.warning {
341 background: url(../images/warning.png) 8px 5px no-repeat;
343 background: url(../images/warning.png) 8px 5px no-repeat;
342 background-color: #FFEBC1;
344 background-color: #FFEBC1;
343 border-color: #FDBF3B;
345 border-color: #FDBF3B;
344 color: #A6750C;
346 color: #A6750C;
345 text-align: left;
347 text-align: left;
346 }
348 }
347
349
348 .nodata, .warning {
350 .nodata, .warning {
349 text-align: center;
351 text-align: center;
350 background-color: #FFEBC1;
352 background-color: #FFEBC1;
351 border-color: #FDBF3B;
353 border-color: #FDBF3B;
352 color: #A6750C;
354 color: #A6750C;
353 }
355 }
354
356
355 #errorExplanation ul { font-size: 0.9em;}
357 #errorExplanation ul { font-size: 0.9em;}
356
358
357 /***** Ajax indicator ******/
359 /***** Ajax indicator ******/
358 #ajax-indicator {
360 #ajax-indicator {
359 position: absolute; /* fixed not supported by IE */
361 position: absolute; /* fixed not supported by IE */
360 background-color:#eee;
362 background-color:#eee;
361 border: 1px solid #bbb;
363 border: 1px solid #bbb;
362 top:35%;
364 top:35%;
363 left:40%;
365 left:40%;
364 width:20%;
366 width:20%;
365 font-weight:bold;
367 font-weight:bold;
366 text-align:center;
368 text-align:center;
367 padding:0.6em;
369 padding:0.6em;
368 z-index:100;
370 z-index:100;
369 filter:alpha(opacity=50);
371 filter:alpha(opacity=50);
370 opacity: 0.5;
372 opacity: 0.5;
371 }
373 }
372
374
373 html>body #ajax-indicator { position: fixed; }
375 html>body #ajax-indicator { position: fixed; }
374
376
375 #ajax-indicator span {
377 #ajax-indicator span {
376 background-position: 0% 40%;
378 background-position: 0% 40%;
377 background-repeat: no-repeat;
379 background-repeat: no-repeat;
378 background-image: url(../images/loading.gif);
380 background-image: url(../images/loading.gif);
379 padding-left: 26px;
381 padding-left: 26px;
380 vertical-align: bottom;
382 vertical-align: bottom;
381 }
383 }
382
384
383 /***** Calendar *****/
385 /***** Calendar *****/
384 table.cal {border-collapse: collapse; width: 100%; margin: 0px 0 6px 0;border: 1px solid #d7d7d7;}
386 table.cal {border-collapse: collapse; width: 100%; margin: 0px 0 6px 0;border: 1px solid #d7d7d7;}
385 table.cal thead th {width: 14%;}
387 table.cal thead th {width: 14%;}
386 table.cal tbody tr {height: 100px;}
388 table.cal tbody tr {height: 100px;}
387 table.cal th { background-color:#EEEEEE; padding: 4px; }
389 table.cal th { background-color:#EEEEEE; padding: 4px; }
388 table.cal td {border: 1px solid #d7d7d7; vertical-align: top; font-size: 0.9em;}
390 table.cal td {border: 1px solid #d7d7d7; vertical-align: top; font-size: 0.9em;}
389 table.cal td p.day-num {font-size: 1.1em; text-align:right;}
391 table.cal td p.day-num {font-size: 1.1em; text-align:right;}
390 table.cal td.odd p.day-num {color: #bbb;}
392 table.cal td.odd p.day-num {color: #bbb;}
391 table.cal td.today {background:#ffffdd;}
393 table.cal td.today {background:#ffffdd;}
392 table.cal td.today p.day-num {font-weight: bold;}
394 table.cal td.today p.day-num {font-weight: bold;}
393
395
394 /***** Tooltips ******/
396 /***** Tooltips ******/
395 .tooltip{position:relative;z-index:24;}
397 .tooltip{position:relative;z-index:24;}
396 .tooltip:hover{z-index:25;color:#000;}
398 .tooltip:hover{z-index:25;color:#000;}
397 .tooltip span.tip{display: none; text-align:left;}
399 .tooltip span.tip{display: none; text-align:left;}
398
400
399 div.tooltip:hover span.tip{
401 div.tooltip:hover span.tip{
400 display:block;
402 display:block;
401 position:absolute;
403 position:absolute;
402 top:12px; left:24px; width:270px;
404 top:12px; left:24px; width:270px;
403 border:1px solid #555;
405 border:1px solid #555;
404 background-color:#fff;
406 background-color:#fff;
405 padding: 4px;
407 padding: 4px;
406 font-size: 0.8em;
408 font-size: 0.8em;
407 color:#505050;
409 color:#505050;
408 }
410 }
409
411
410 /***** Progress bar *****/
412 /***** Progress bar *****/
411 table.progress {
413 table.progress {
412 border: 1px solid #D7D7D7;
414 border: 1px solid #D7D7D7;
413 border-collapse: collapse;
415 border-collapse: collapse;
414 border-spacing: 0pt;
416 border-spacing: 0pt;
415 empty-cells: show;
417 empty-cells: show;
416 text-align: center;
418 text-align: center;
417 float:left;
419 float:left;
418 margin: 1px 6px 1px 0px;
420 margin: 1px 6px 1px 0px;
419 }
421 }
420
422
421 table.progress td { height: 0.9em; }
423 table.progress td { height: 0.9em; }
422 table.progress td.closed { background: #BAE0BA none repeat scroll 0%; }
424 table.progress td.closed { background: #BAE0BA none repeat scroll 0%; }
423 table.progress td.done { background: #DEF0DE none repeat scroll 0%; }
425 table.progress td.done { background: #DEF0DE none repeat scroll 0%; }
424 table.progress td.open { background: #FFF none repeat scroll 0%; }
426 table.progress td.open { background: #FFF none repeat scroll 0%; }
425 p.pourcent {font-size: 80%;}
427 p.pourcent {font-size: 80%;}
426 p.progress-info {clear: left; font-style: italic; font-size: 80%;}
428 p.progress-info {clear: left; font-style: italic; font-size: 80%;}
427
429
428 /***** Tabs *****/
430 /***** Tabs *****/
429 #content .tabs {height: 2.6em; border-bottom: 1px solid #bbbbbb; margin-bottom:1.2em; position:relative;}
431 #content .tabs {height: 2.6em; border-bottom: 1px solid #bbbbbb; margin-bottom:1.2em; position:relative;}
430 #content .tabs ul {margin:0; position:absolute; bottom:-2px; padding-left:1em;}
432 #content .tabs ul {margin:0; position:absolute; bottom:-2px; padding-left:1em;}
431 #content .tabs>ul { bottom:-1px; } /* others */
433 #content .tabs>ul { bottom:-1px; } /* others */
432 #content .tabs ul li {
434 #content .tabs ul li {
433 float:left;
435 float:left;
434 list-style-type:none;
436 list-style-type:none;
435 white-space:nowrap;
437 white-space:nowrap;
436 margin-right:8px;
438 margin-right:8px;
437 background:#fff;
439 background:#fff;
438 }
440 }
439 #content .tabs ul li a{
441 #content .tabs ul li a{
440 display:block;
442 display:block;
441 font-size: 0.9em;
443 font-size: 0.9em;
442 text-decoration:none;
444 text-decoration:none;
443 line-height:1.3em;
445 line-height:1.3em;
444 padding:4px 6px 4px 6px;
446 padding:4px 6px 4px 6px;
445 border: 1px solid #ccc;
447 border: 1px solid #ccc;
446 border-bottom: 1px solid #bbbbbb;
448 border-bottom: 1px solid #bbbbbb;
447 background-color: #eeeeee;
449 background-color: #eeeeee;
448 color:#777;
450 color:#777;
449 font-weight:bold;
451 font-weight:bold;
450 }
452 }
451
453
452 #content .tabs ul li a:hover {
454 #content .tabs ul li a:hover {
453 background-color: #ffffdd;
455 background-color: #ffffdd;
454 text-decoration:none;
456 text-decoration:none;
455 }
457 }
456
458
457 #content .tabs ul li a.selected {
459 #content .tabs ul li a.selected {
458 background-color: #fff;
460 background-color: #fff;
459 border: 1px solid #bbbbbb;
461 border: 1px solid #bbbbbb;
460 border-bottom: 1px solid #fff;
462 border-bottom: 1px solid #fff;
461 }
463 }
462
464
463 #content .tabs ul li a.selected:hover {
465 #content .tabs ul li a.selected:hover {
464 background-color: #fff;
466 background-color: #fff;
465 }
467 }
466
468
467 /***** Diff *****/
469 /***** Diff *****/
468 .diff_out { background: #fcc; }
470 .diff_out { background: #fcc; }
469 .diff_in { background: #cfc; }
471 .diff_in { background: #cfc; }
470
472
471 /***** Wiki *****/
473 /***** Wiki *****/
472 div.wiki table {
474 div.wiki table {
473 border: 1px solid #505050;
475 border: 1px solid #505050;
474 border-collapse: collapse;
476 border-collapse: collapse;
475 margin-bottom: 1em;
477 margin-bottom: 1em;
476 }
478 }
477
479
478 div.wiki table, div.wiki td, div.wiki th {
480 div.wiki table, div.wiki td, div.wiki th {
479 border: 1px solid #bbb;
481 border: 1px solid #bbb;
480 padding: 4px;
482 padding: 4px;
481 }
483 }
482
484
483 div.wiki .external {
485 div.wiki .external {
484 background-position: 0% 60%;
486 background-position: 0% 60%;
485 background-repeat: no-repeat;
487 background-repeat: no-repeat;
486 padding-left: 12px;
488 padding-left: 12px;
487 background-image: url(../images/external.png);
489 background-image: url(../images/external.png);
488 }
490 }
489
491
490 div.wiki a.new {
492 div.wiki a.new {
491 color: #b73535;
493 color: #b73535;
492 }
494 }
493
495
494 div.wiki pre {
496 div.wiki pre {
495 margin: 1em 1em 1em 1.6em;
497 margin: 1em 1em 1em 1.6em;
496 padding: 2px;
498 padding: 2px;
497 background-color: #fafafa;
499 background-color: #fafafa;
498 border: 1px solid #dadada;
500 border: 1px solid #dadada;
499 width:95%;
501 width:95%;
500 overflow-x: auto;
502 overflow-x: auto;
501 }
503 }
502
504
503 div.wiki ul.toc {
505 div.wiki ul.toc {
504 background-color: #ffffdd;
506 background-color: #ffffdd;
505 border: 1px solid #e4e4e4;
507 border: 1px solid #e4e4e4;
506 padding: 4px;
508 padding: 4px;
507 line-height: 1.2em;
509 line-height: 1.2em;
508 margin-bottom: 12px;
510 margin-bottom: 12px;
509 margin-right: 12px;
511 margin-right: 12px;
510 margin-left: 0;
512 margin-left: 0;
511 display: table
513 display: table
512 }
514 }
513 * html div.wiki ul.toc { width: 50%; } /* IE6 doesn't autosize div */
515 * html div.wiki ul.toc { width: 50%; } /* IE6 doesn't autosize div */
514
516
515 div.wiki ul.toc.right { float: right; margin-left: 12px; margin-right: 0; width: auto; }
517 div.wiki ul.toc.right { float: right; margin-left: 12px; margin-right: 0; width: auto; }
516 div.wiki ul.toc.left { float: left; margin-right: 12px; margin-left: 0; width: auto; }
518 div.wiki ul.toc.left { float: left; margin-right: 12px; margin-left: 0; width: auto; }
517 div.wiki ul.toc li { list-style-type:none;}
519 div.wiki ul.toc li { list-style-type:none;}
518 div.wiki ul.toc li.heading2 { margin-left: 6px; }
520 div.wiki ul.toc li.heading2 { margin-left: 6px; }
519 div.wiki ul.toc li.heading3 { margin-left: 12px; font-size: 0.8em; }
521 div.wiki ul.toc li.heading3 { margin-left: 12px; font-size: 0.8em; }
520
522
521 div.wiki ul.toc a {
523 div.wiki ul.toc a {
522 font-size: 0.9em;
524 font-size: 0.9em;
523 font-weight: normal;
525 font-weight: normal;
524 text-decoration: none;
526 text-decoration: none;
525 color: #606060;
527 color: #606060;
526 }
528 }
527 div.wiki ul.toc a:hover { color: #c61a1a; text-decoration: underline;}
529 div.wiki ul.toc a:hover { color: #c61a1a; text-decoration: underline;}
528
530
529 a.wiki-anchor { display: none; margin-left: 6px; text-decoration: none; }
531 a.wiki-anchor { display: none; margin-left: 6px; text-decoration: none; }
530 a.wiki-anchor:hover { color: #aaa !important; text-decoration: none; }
532 a.wiki-anchor:hover { color: #aaa !important; text-decoration: none; }
531 h1:hover a.wiki-anchor, h2:hover a.wiki-anchor, h3:hover a.wiki-anchor { display: inline; color: #ddd; }
533 h1:hover a.wiki-anchor, h2:hover a.wiki-anchor, h3:hover a.wiki-anchor { display: inline; color: #ddd; }
532
534
533 /***** My page layout *****/
535 /***** My page layout *****/
534 .block-receiver {
536 .block-receiver {
535 border:1px dashed #c0c0c0;
537 border:1px dashed #c0c0c0;
536 margin-bottom: 20px;
538 margin-bottom: 20px;
537 padding: 15px 0 15px 0;
539 padding: 15px 0 15px 0;
538 }
540 }
539
541
540 .mypage-box {
542 .mypage-box {
541 margin:0 0 20px 0;
543 margin:0 0 20px 0;
542 color:#505050;
544 color:#505050;
543 line-height:1.5em;
545 line-height:1.5em;
544 }
546 }
545
547
546 .handle {
548 .handle {
547 cursor: move;
549 cursor: move;
548 }
550 }
549
551
550 a.close-icon {
552 a.close-icon {
551 display:block;
553 display:block;
552 margin-top:3px;
554 margin-top:3px;
553 overflow:hidden;
555 overflow:hidden;
554 width:12px;
556 width:12px;
555 height:12px;
557 height:12px;
556 background-repeat: no-repeat;
558 background-repeat: no-repeat;
557 cursor:pointer;
559 cursor:pointer;
558 background-image:url('../images/close.png');
560 background-image:url('../images/close.png');
559 }
561 }
560
562
561 a.close-icon:hover {
563 a.close-icon:hover {
562 background-image:url('../images/close_hl.png');
564 background-image:url('../images/close_hl.png');
563 }
565 }
564
566
565 /***** Gantt chart *****/
567 /***** Gantt chart *****/
566 .gantt_hdr {
568 .gantt_hdr {
567 position:absolute;
569 position:absolute;
568 top:0;
570 top:0;
569 height:16px;
571 height:16px;
570 border-top: 1px solid #c0c0c0;
572 border-top: 1px solid #c0c0c0;
571 border-bottom: 1px solid #c0c0c0;
573 border-bottom: 1px solid #c0c0c0;
572 border-right: 1px solid #c0c0c0;
574 border-right: 1px solid #c0c0c0;
573 text-align: center;
575 text-align: center;
574 overflow: hidden;
576 overflow: hidden;
575 }
577 }
576
578
577 .task {
579 .task {
578 position: absolute;
580 position: absolute;
579 height:8px;
581 height:8px;
580 font-size:0.8em;
582 font-size:0.8em;
581 color:#888;
583 color:#888;
582 padding:0;
584 padding:0;
583 margin:0;
585 margin:0;
584 line-height:0.8em;
586 line-height:0.8em;
585 }
587 }
586
588
587 .task_late { background:#f66 url(../images/task_late.png); border: 1px solid #f66; }
589 .task_late { background:#f66 url(../images/task_late.png); border: 1px solid #f66; }
588 .task_done { background:#66f url(../images/task_done.png); border: 1px solid #66f; }
590 .task_done { background:#66f url(../images/task_done.png); border: 1px solid #66f; }
589 .task_todo { background:#aaa url(../images/task_todo.png); border: 1px solid #aaa; }
591 .task_todo { background:#aaa url(../images/task_todo.png); border: 1px solid #aaa; }
590 .milestone { background-image:url(../images/milestone.png); background-repeat: no-repeat; border: 0; }
592 .milestone { background-image:url(../images/milestone.png); background-repeat: no-repeat; border: 0; }
591
593
592 /***** Icons *****/
594 /***** Icons *****/
593 .icon {
595 .icon {
594 background-position: 0% 40%;
596 background-position: 0% 40%;
595 background-repeat: no-repeat;
597 background-repeat: no-repeat;
596 padding-left: 20px;
598 padding-left: 20px;
597 padding-top: 2px;
599 padding-top: 2px;
598 padding-bottom: 3px;
600 padding-bottom: 3px;
599 }
601 }
600
602
601 .icon22 {
603 .icon22 {
602 background-position: 0% 40%;
604 background-position: 0% 40%;
603 background-repeat: no-repeat;
605 background-repeat: no-repeat;
604 padding-left: 26px;
606 padding-left: 26px;
605 line-height: 22px;
607 line-height: 22px;
606 vertical-align: middle;
608 vertical-align: middle;
607 }
609 }
608
610
609 .icon-add { background-image: url(../images/add.png); }
611 .icon-add { background-image: url(../images/add.png); }
610 .icon-edit { background-image: url(../images/edit.png); }
612 .icon-edit { background-image: url(../images/edit.png); }
611 .icon-copy { background-image: url(../images/copy.png); }
613 .icon-copy { background-image: url(../images/copy.png); }
612 .icon-del { background-image: url(../images/delete.png); }
614 .icon-del { background-image: url(../images/delete.png); }
613 .icon-move { background-image: url(../images/move.png); }
615 .icon-move { background-image: url(../images/move.png); }
614 .icon-save { background-image: url(../images/save.png); }
616 .icon-save { background-image: url(../images/save.png); }
615 .icon-cancel { background-image: url(../images/cancel.png); }
617 .icon-cancel { background-image: url(../images/cancel.png); }
616 .icon-file { background-image: url(../images/file.png); }
618 .icon-file { background-image: url(../images/file.png); }
617 .icon-folder { background-image: url(../images/folder.png); }
619 .icon-folder { background-image: url(../images/folder.png); }
618 .open .icon-folder { background-image: url(../images/folder_open.png); }
620 .open .icon-folder { background-image: url(../images/folder_open.png); }
619 .icon-package { background-image: url(../images/package.png); }
621 .icon-package { background-image: url(../images/package.png); }
620 .icon-home { background-image: url(../images/home.png); }
622 .icon-home { background-image: url(../images/home.png); }
621 .icon-user { background-image: url(../images/user.png); }
623 .icon-user { background-image: url(../images/user.png); }
622 .icon-mypage { background-image: url(../images/user_page.png); }
624 .icon-mypage { background-image: url(../images/user_page.png); }
623 .icon-admin { background-image: url(../images/admin.png); }
625 .icon-admin { background-image: url(../images/admin.png); }
624 .icon-projects { background-image: url(../images/projects.png); }
626 .icon-projects { background-image: url(../images/projects.png); }
625 .icon-help { background-image: url(../images/help.png); }
627 .icon-help { background-image: url(../images/help.png); }
626 .icon-attachment { background-image: url(../images/attachment.png); }
628 .icon-attachment { background-image: url(../images/attachment.png); }
627 .icon-index { background-image: url(../images/index.png); }
629 .icon-index { background-image: url(../images/index.png); }
628 .icon-history { background-image: url(../images/history.png); }
630 .icon-history { background-image: url(../images/history.png); }
629 .icon-time { background-image: url(../images/time.png); }
631 .icon-time { background-image: url(../images/time.png); }
630 .icon-time-add { background-image: url(../images/time_add.png); }
632 .icon-time-add { background-image: url(../images/time_add.png); }
631 .icon-stats { background-image: url(../images/stats.png); }
633 .icon-stats { background-image: url(../images/stats.png); }
632 .icon-warning { background-image: url(../images/warning.png); }
634 .icon-warning { background-image: url(../images/warning.png); }
633 .icon-fav { background-image: url(../images/fav.png); }
635 .icon-fav { background-image: url(../images/fav.png); }
634 .icon-fav-off { background-image: url(../images/fav_off.png); }
636 .icon-fav-off { background-image: url(../images/fav_off.png); }
635 .icon-reload { background-image: url(../images/reload.png); }
637 .icon-reload { background-image: url(../images/reload.png); }
636 .icon-lock { background-image: url(../images/locked.png); }
638 .icon-lock { background-image: url(../images/locked.png); }
637 .icon-unlock { background-image: url(../images/unlock.png); }
639 .icon-unlock { background-image: url(../images/unlock.png); }
638 .icon-checked { background-image: url(../images/true.png); }
640 .icon-checked { background-image: url(../images/true.png); }
639 .icon-details { background-image: url(../images/zoom_in.png); }
641 .icon-details { background-image: url(../images/zoom_in.png); }
640 .icon-report { background-image: url(../images/report.png); }
642 .icon-report { background-image: url(../images/report.png); }
641 .icon-comment { background-image: url(../images/comment.png); }
643 .icon-comment { background-image: url(../images/comment.png); }
642
644
643 .icon22-projects { background-image: url(../images/22x22/projects.png); }
645 .icon22-projects { background-image: url(../images/22x22/projects.png); }
644 .icon22-users { background-image: url(../images/22x22/users.png); }
646 .icon22-users { background-image: url(../images/22x22/users.png); }
645 .icon22-tracker { background-image: url(../images/22x22/tracker.png); }
647 .icon22-tracker { background-image: url(../images/22x22/tracker.png); }
646 .icon22-role { background-image: url(../images/22x22/role.png); }
648 .icon22-role { background-image: url(../images/22x22/role.png); }
647 .icon22-workflow { background-image: url(../images/22x22/workflow.png); }
649 .icon22-workflow { background-image: url(../images/22x22/workflow.png); }
648 .icon22-options { background-image: url(../images/22x22/options.png); }
650 .icon22-options { background-image: url(../images/22x22/options.png); }
649 .icon22-notifications { background-image: url(../images/22x22/notifications.png); }
651 .icon22-notifications { background-image: url(../images/22x22/notifications.png); }
650 .icon22-authent { background-image: url(../images/22x22/authent.png); }
652 .icon22-authent { background-image: url(../images/22x22/authent.png); }
651 .icon22-info { background-image: url(../images/22x22/info.png); }
653 .icon22-info { background-image: url(../images/22x22/info.png); }
652 .icon22-comment { background-image: url(../images/22x22/comment.png); }
654 .icon22-comment { background-image: url(../images/22x22/comment.png); }
653 .icon22-package { background-image: url(../images/22x22/package.png); }
655 .icon22-package { background-image: url(../images/22x22/package.png); }
654 .icon22-settings { background-image: url(../images/22x22/settings.png); }
656 .icon22-settings { background-image: url(../images/22x22/settings.png); }
655 .icon22-plugin { background-image: url(../images/22x22/plugin.png); }
657 .icon22-plugin { background-image: url(../images/22x22/plugin.png); }
656
658
657 img.gravatar {
659 img.gravatar {
658 padding: 2px;
660 padding: 2px;
659 border: solid 1px #d5d5d5;
661 border: solid 1px #d5d5d5;
660 background: #fff;
662 background: #fff;
661 }
663 }
662
664
663 div.issue img.gravatar {
665 div.issue img.gravatar {
664 float: right;
666 float: right;
665 margin: 0 0 0 1em;
667 margin: 0 0 0 1em;
666 padding: 5px;
668 padding: 5px;
667 }
669 }
668
670
669 div.issue table img.gravatar {
671 div.issue table img.gravatar {
670 height: 14px;
672 height: 14px;
671 width: 14px;
673 width: 14px;
672 padding: 2px;
674 padding: 2px;
673 float: left;
675 float: left;
674 margin: 0 0.5em 0 0;
676 margin: 0 0.5em 0 0;
675 }
677 }
676
678
677 #history img.gravatar {
679 #history img.gravatar {
678 padding: 3px;
680 padding: 3px;
679 margin: 0 1.5em 1em 0;
681 margin: 0 1.5em 1em 0;
680 float: left;
682 float: left;
681 }
683 }
682
684
683 td.username img.gravatar {
685 td.username img.gravatar {
684 float: left;
686 float: left;
685 margin: 0 1em 0 0;
687 margin: 0 1em 0 0;
686 }
688 }
687
689
688 #activity dt img.gravatar {
690 #activity dt img.gravatar {
689 float: left;
691 float: left;
690 margin: 0 1em 1em 0;
692 margin: 0 1em 1em 0;
691 }
693 }
692
694
693 #activity dt,
695 #activity dt,
694 .journal {
696 .journal {
695 clear: left;
697 clear: left;
696 }
698 }
697
699
698 h2 img { vertical-align:middle; }
700 h2 img { vertical-align:middle; }
699
701
700
702
701 /***** Media print specific styles *****/
703 /***** Media print specific styles *****/
702 @media print {
704 @media print {
703 #top-menu, #header, #main-menu, #sidebar, #footer, .contextual, .other-formats { display:none; }
705 #top-menu, #header, #main-menu, #sidebar, #footer, .contextual, .other-formats { display:none; }
704 #main { background: #fff; }
706 #main { background: #fff; }
705 #content { width: 99%; margin: 0; padding: 0; border: 0; background: #fff; overflow: visible !important;}
707 #content { width: 99%; margin: 0; padding: 0; border: 0; background: #fff; overflow: visible !important;}
706 }
708 }
General Comments 0
You need to be logged in to leave comments. Login now