##// END OF EJS Templates
Slight changes on users list view and hide Anonymous user....
Jean-Philippe Lang -
r1104:4e244be21cc1
parent child
Show More
@@ -1,112 +1,112
1 1 # redMine - project management software
2 2 # Copyright (C) 2006-2007 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 class UsersController < ApplicationController
19 19 layout 'base'
20 20 before_filter :require_admin
21 21
22 22 helper :sort
23 23 include SortHelper
24 24 helper :custom_fields
25 25 include CustomFieldsHelper
26 26
27 27 def index
28 28 list
29 29 render :action => 'list' unless request.xhr?
30 30 end
31 31
32 32 def list
33 33 sort_init 'login', 'asc'
34 34 sort_update
35 35
36 @status = params[:status] ? params[:status].to_i : 1
37 conditions = nil
36 @status = params[:status] ? params[:status].to_i : 1
37 conditions = "status <> 0"
38 38 conditions = ["status=?", @status] unless @status == 0
39 39
40 40 @user_count = User.count(:conditions => conditions)
41 41 @user_pages = Paginator.new self, @user_count,
42 42 per_page_option,
43 43 params['page']
44 44 @users = User.find :all,:order => sort_clause,
45 45 :conditions => conditions,
46 46 :limit => @user_pages.items_per_page,
47 47 :offset => @user_pages.current.offset
48 48
49 49 render :action => "list", :layout => false if request.xhr?
50 50 end
51 51
52 52 def add
53 53 if request.get?
54 54 @user = User.new(:language => Setting.default_language)
55 55 @custom_values = UserCustomField.find(:all, :order => "#{CustomField.table_name}.position").collect { |x| CustomValue.new(:custom_field => x, :customized => @user) }
56 56 else
57 57 @user = User.new(params[:user])
58 58 @user.admin = params[:user][:admin] || false
59 59 @user.login = params[:user][:login]
60 60 @user.password, @user.password_confirmation = params[:password], params[:password_confirmation] unless @user.auth_source_id
61 61 @custom_values = UserCustomField.find(:all, :order => "#{CustomField.table_name}.position").collect { |x| CustomValue.new(:custom_field => x, :customized => @user, :value => (params[:custom_fields] ? params["custom_fields"][x.id.to_s] : nil)) }
62 62 @user.custom_values = @custom_values
63 63 if @user.save
64 64 Mailer.deliver_account_information(@user, params[:password]) if params[:send_information]
65 65 flash[:notice] = l(:notice_successful_create)
66 66 redirect_to :action => 'list'
67 67 end
68 68 end
69 69 @auth_sources = AuthSource.find(:all)
70 70 end
71 71
72 72 def edit
73 73 @user = User.find(params[:id])
74 74 if request.get?
75 75 @custom_values = UserCustomField.find(:all, :order => "#{CustomField.table_name}.position").collect { |x| @user.custom_values.find_by_custom_field_id(x.id) || CustomValue.new(:custom_field => x) }
76 76 else
77 77 @user.admin = params[:user][:admin] if params[:user][:admin]
78 78 @user.login = params[:user][:login] if params[:user][:login]
79 79 @user.password, @user.password_confirmation = params[:password], params[:password_confirmation] unless params[:password].nil? or params[:password].empty? or @user.auth_source_id
80 80 if params[:custom_fields]
81 81 @custom_values = UserCustomField.find(:all, :order => "#{CustomField.table_name}.position").collect { |x| CustomValue.new(:custom_field => x, :customized => @user, :value => params["custom_fields"][x.id.to_s]) }
82 82 @user.custom_values = @custom_values
83 83 end
84 84 if @user.update_attributes(params[:user])
85 85 flash[:notice] = l(:notice_successful_update)
86 86 redirect_to :action => 'list'
87 87 end
88 88 end
89 89 @auth_sources = AuthSource.find(:all)
90 90 @roles = Role.find_all_givable
91 91 @projects = Project.find(:all, :order => 'name', :conditions => "status=#{Project::STATUS_ACTIVE}") - @user.projects
92 92 @membership ||= Member.new
93 93 end
94 94
95 95 def edit_membership
96 96 @user = User.find(params[:id])
97 97 @membership = params[:membership_id] ? Member.find(params[:membership_id]) : Member.new(:user => @user)
98 98 @membership.attributes = params[:membership]
99 99 if request.post? and @membership.save
100 100 flash[:notice] = l(:notice_successful_update)
101 101 end
102 102 redirect_to :action => 'edit', :id => @user and return
103 103 end
104 104
105 105 def destroy_membership
106 106 @user = User.find(params[:id])
107 107 if request.post? and Member.find(params[:membership_id]).destroy
108 108 flash[:notice] = l(:notice_successful_update)
109 109 end
110 110 redirect_to :action => 'edit', :id => @user and return
111 111 end
112 112 end
@@ -1,25 +1,25
1 1 # redMine - project management software
2 2 # Copyright (C) 2006 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 module UsersHelper
19 19 def status_options_for_select(selected)
20 options_for_select([[l(:label_all), "*"],
20 options_for_select([[l(:label_all), ''],
21 21 [l(:status_active), 1],
22 22 [l(:status_registered), 2],
23 23 [l(:status_locked), 3]], selected)
24 24 end
25 25 end
@@ -1,60 +1,54
1 1 <div class="contextual">
2 2 <%= link_to l(:label_user_new), {:action => 'add'}, :class => 'icon icon-add' %>
3 3 </div>
4 4
5 5 <h2><%=l(:label_user_plural)%></h2>
6 6
7 <% form_tag() do %>
7 <% form_tag({}, :method => :get) do %>
8 8 <fieldset><legend><%= l(:label_filter_plural) %></legend>
9 9 <label><%= l(:field_status) %> :</label>
10 10 <%= select_tag 'status', status_options_for_select(@status), :class => "small", :onchange => "this.form.submit(); return false;" %>
11 <%= submit_tag l(:button_apply), :class => "small" %>
12 11 </fieldset>
13 12 <% end %>
14 13 &nbsp;
15 14
16 15 <table class="list">
17 16 <thead><tr>
18 17 <%= sort_header_tag('login', :caption => l(:field_login)) %>
19 18 <%= sort_header_tag('firstname', :caption => l(:field_firstname)) %>
20 19 <%= sort_header_tag('lastname', :caption => l(:field_lastname)) %>
21 20 <th><%=l(:field_mail)%></th>
22 21 <%= sort_header_tag('admin', :caption => l(:field_admin)) %>
23 <%= sort_header_tag('status', :caption => l(:field_status)) %>
24 22 <%= sort_header_tag('created_on', :caption => l(:field_created_on)) %>
25 23 <%= sort_header_tag('last_login_on', :caption => l(:field_last_login_on)) %>
26 24 <th></th>
27 25 </tr></thead>
28 26 <tbody>
29 <% for user in @users %>
30 <tr class="<%= cycle("odd", "even") %>">
31 <td><%= link_to user.login, :action => 'edit', :id => user %></td>
32 <td><%= user.firstname %></td>
33 <td><%= user.lastname %></td>
34 <td><%= user.mail %></td>
35 <td align="center"><%= image_tag 'true.png' if user.admin? %></td>
36 <td align="center"><%= image_tag 'locked.png' if user.locked? %><%= image_tag 'user_new.png' if user.registered? %></td>
37 <td align="center"><%= format_time(user.created_on) %></td>
38 <td align="center"><%= format_time(user.last_login_on) unless user.last_login_on.nil? %></td>
39 <td align="center">
40 <% form_tag({:action => 'edit', :id => user}) do %>
41 <% if user.locked? %>
42 <%= hidden_field_tag 'user[status]', User::STATUS_ACTIVE %>
43 <%= submit_tag l(:button_unlock), :class => "button-small" %>
44 <% elsif user.registered? %>
45 <%= hidden_field_tag 'user[status]', User::STATUS_ACTIVE %>
46 <%= submit_tag l(:button_activate), :class => "button-small" %>
47 <% else %>
48 <%= hidden_field_tag 'user[status]', User::STATUS_LOCKED %>
49 <%= submit_tag l(:button_lock), :class => "button-small" %>
50 <% end %>
51 <% end %>
52 </td>
27 <% for user in @users -%>
28 <tr class="user <%= cycle("odd", "even") %> <%= %w(anon active registered locked)[user.status] %>">
29 <td class="username"><%= link_to user.login, :action => 'edit', :id => user %></td>
30 <td class="firstname"><%= user.firstname %></td>
31 <td class="lastname"><%= user.lastname %></td>
32 <td class="email"><%= user.mail %></td>
33 <td align="center"><%= image_tag('true.png') if user.admin? %></td>
34 <td class="created_on" align="center"><%= format_time(user.created_on) %></td>
35 <td class="last_login_on" align="center"><%= format_time(user.last_login_on) unless user.last_login_on.nil? %></td>
36 <td>
37 <small>
38 <% if user.locked? -%>
39 <%= link_to l(:button_unlock), {:action => 'edit', :id => user, :user => {:status => User::STATUS_ACTIVE}}, :method => :post, :class => 'icon icon-unlock' %>
40 <% elsif user.registered? -%>
41 <%= link_to l(:button_activate), {:action => 'edit', :id => user, :user => {:status => User::STATUS_ACTIVE}}, :method => :post, :class => 'icon icon-unlock' %>
42 <% else -%>
43 <%= link_to l(:button_lock), {:action => 'edit', :id => user, :user => {:status => User::STATUS_LOCKED}}, :method => :post, :class => 'icon icon-lock' %>
44 <% end -%>
45 </small>
46 </td>
53 47 </tr>
54 <% end %>
48 <% end -%>
55 49 </tbody>
56 50 </table>
57 51
58 52 <p class="pagination"><%= pagination_links_full @user_pages, @user_count %></p>
59 53
60 54 <% html_title(l(:label_user_plural)) -%>
@@ -1,525 +1,531
1 1 body { font-family: Verdana, sans-serif; font-size: 12px; color:#484848; margin: 0; padding: 0; min-width: 900px; }
2 2
3 3 h1, h2, h3, h4 { font-family: "Trebuchet MS", Verdana, sans-serif;}
4 4 h1 {margin:0; padding:0; font-size: 24px;}
5 5 h2, .wiki h1 {font-size: 20px;padding: 2px 10px 1px 0px;margin: 0 0 10px 0; border-bottom: 1px solid #bbbbbb; color: #444;}
6 6 h3, .wiki h2 {font-size: 16px;padding: 2px 10px 1px 0px;margin: 0 0 10px 0; border-bottom: 1px solid #bbbbbb; color: #444;}
7 7 h4, .wiki h3 {font-size: 12px;padding: 2px 10px 1px 0px;margin-bottom: 5px; border-bottom: 1px dotted #bbbbbb; color: #444;}
8 8
9 9 /***** Layout *****/
10 10 #wrapper {background: white;}
11 11
12 12 #top-menu {background: #2C4056;color: #fff;height:1.5em; padding: 2px 6px 0px 6px;}
13 13 #top-menu a {color: #fff; padding-right: 4px;}
14 14 #account {float:right;}
15 15
16 16 #header {height:5.3em;margin:0;background-color:#507AAA;color:#f8f8f8; padding: 4px 8px 0px 6px; position:relative;}
17 17 #header a {color:#f8f8f8;}
18 18 #quick-search {float:right;}
19 19
20 20 #main-menu {position: absolute; bottom: 0px; left:6px; margin-right: -500px;}
21 21 #main-menu ul {margin: 0; padding: 0;}
22 22 #main-menu li {
23 23 float:left;
24 24 list-style-type:none;
25 25 margin: 0px 10px 0px 0px;
26 26 padding: 0px 0px 0px 0px;
27 27 white-space:nowrap;
28 28 }
29 29 #main-menu li a {
30 30 display: block;
31 31 color: #fff;
32 32 text-decoration: none;
33 33 margin: 0;
34 34 padding: 4px 4px 4px 4px;
35 35 background: #2C4056;
36 36 }
37 37 #main-menu li a:hover, #main-menu li a.selected {background:#759FCF;}
38 38
39 39 #main {background: url(../images/mainbg.png) repeat-x; background-color:#EEEEEE;}
40 40
41 41 #sidebar{ float: right; width: 17%; position: relative; z-index: 9; min-height: 600px; padding: 0; margin: 0;}
42 42 * html #sidebar{ width: 17%; }
43 43 #sidebar h3{ font-size: 14px; margin-top:14px; color: #666; }
44 44 #sidebar hr{ width: 100%; margin: 0 auto; height: 1px; background: #ccc; border: 0; }
45 45 * html #sidebar hr{ width: 95%; position: relative; left: -6px; color: #ccc; }
46 46
47 47 #content { width: 80%; background: url(../images/contentbg.png) repeat-x; background-color: #fff; margin: 0px; border-right: 1px solid #ddd; padding: 6px 10px 10px 10px; z-index: 10; height:600px; min-height: 600px;}
48 48 * html #content{ width: 80%; padding-left: 0; margin-top: 0px; padding: 6px 10px 10px 10px;}
49 49 html>body #content {
50 50 height: auto;
51 51 min-height: 600px;
52 52 }
53 53
54 54 #main.nosidebar #sidebar{ display: none; }
55 55 #main.nosidebar #content{ width: auto; border-right: 0; }
56 56
57 57 #footer {clear: both; border-top: 1px solid #bbb; font-size: 0.9em; color: #aaa; padding: 5px; text-align:center; background:#fff;}
58 58
59 59 #login-form table {margin-top:5em; padding:1em; margin-left: auto; margin-right: auto; border: 2px solid #FDBF3B; background-color:#FFEBC1; }
60 60 #login-form table td {padding: 6px;}
61 61 #login-form label {font-weight: bold;}
62 62
63 63 .clear:after{ content: "."; display: block; height: 0; clear: both; visibility: hidden; }
64 64
65 65 /***** Links *****/
66 66 a, a:link, a:visited{ color: #2A5685; text-decoration: none; }
67 67 a:hover, a:active{ color: #c61a1a; text-decoration: underline;}
68 68 a img{ border: 0; }
69 69
70 70 /***** Tables *****/
71 71 table.list { border: 1px solid #e4e4e4; border-collapse: collapse; width: 100%; margin-bottom: 4px; }
72 72 table.list th { background-color:#EEEEEE; padding: 4px; white-space:nowrap; }
73 73 table.list td { overflow: hidden; text-overflow: ellipsis; vertical-align: top;}
74 74 table.list td.id { width: 2%; text-align: center;}
75 75 table.list td.checkbox { width: 15px; padding: 0px;}
76 76
77 77 tr.issue { text-align: center; white-space: nowrap; }
78 78 tr.issue td.subject, tr.issue td.category { white-space: normal; }
79 79 tr.issue td.subject { text-align: left; }
80 80 tr.issue td.done_ratio table.progress { margin-left:auto; margin-right: auto;}
81 81
82 82 tr.entry { border: 1px solid #f8f8f8; }
83 83 tr.entry td { white-space: nowrap; }
84 84 tr.entry td.filename { width: 30%; }
85 85 tr.entry td.size { text-align: right; font-size: 90%; }
86 86 tr.entry td.revision, tr.entry td.author { text-align: center; }
87 87 tr.entry td.age { text-align: right; }
88 88
89 89 tr.changeset td.author { text-align: center; width: 15%; }
90 90 tr.changeset td.committed_on { text-align: center; width: 15%; }
91 91
92 92 tr.message { height: 2.6em; }
93 93 tr.message td.last_message { font-size: 80%; }
94 94 tr.message.locked td.subject a { background-image: url(../images/locked.png); }
95 95 tr.message.sticky td.subject a { background-image: url(../images/sticky.png); font-weight: bold; }
96 96
97 tr.user td { width:13%; }
98 tr.user td.email { width:18%; }
99 tr.user td { white-space: nowrap; }
100 tr.user.locked, tr.user.registered { color: #aaa; }
101 tr.user.locked a, tr.user.registered a { color: #aaa; }
102
97 103 table.list tbody tr:hover { background-color:#ffffdd; }
98 104 table td {padding:2px;}
99 105 table p {margin:0;}
100 106 .odd {background-color:#f6f7f8;}
101 107 .even {background-color: #fff;}
102 108
103 109 .highlight { background-color: #FCFD8D;}
104 110 .highlight.token-1 { background-color: #faa;}
105 111 .highlight.token-2 { background-color: #afa;}
106 112 .highlight.token-3 { background-color: #aaf;}
107 113
108 114 .box{
109 115 padding:6px;
110 116 margin-bottom: 10px;
111 117 background-color:#f6f6f6;
112 118 color:#505050;
113 119 line-height:1.5em;
114 120 border: 1px solid #e4e4e4;
115 121 }
116 122
117 123 div.square {
118 124 border: 1px solid #999;
119 125 float: left;
120 126 margin: .3em .4em 0 .4em;
121 127 overflow: hidden;
122 128 width: .6em; height: .6em;
123 129 }
124 130
125 131 .contextual {float:right; white-space: nowrap; line-height:1.4em;margin-top:5px; padding-left: 10px; font-size:0.9em;}
126 132 .contextual input {font-size:0.9em;}
127 133
128 134 .splitcontentleft{float:left; width:49%;}
129 135 .splitcontentright{float:right; width:49%;}
130 136 form {display: inline;}
131 137 input, select {vertical-align: middle; margin-top: 1px; margin-bottom: 1px;}
132 138 fieldset {border: 1px solid #e4e4e4; margin:0;}
133 139 legend {color: #484848;}
134 140 hr { width: 100%; height: 1px; background: #ccc; border: 0;}
135 141 textarea.wiki-edit { width: 99%; }
136 142 li p {margin-top: 0;}
137 143 div.issue {background:#ffffdd; padding:6px; margin-bottom:6px;border: 1px solid #d7d7d7;}
138 144
139 145 div#issue-changesets {float:right; width:45%; margin-left: 1em; margin-bottom: 1em; background: #fff; padding-left: 1em; font-size: 90%;}
140 146 div#issue-changesets .changeset { padding: 4px;}
141 147 div#issue-changesets .changeset { border-bottom: 1px solid #ddd; }
142 148 div#issue-changesets p { margin-top: 0; margin-bottom: 1em;}
143 149
144 150 .autoscroll {overflow-x: auto; padding:1px; width:100%; margin-bottom: 1.2em;}
145 151 #user_firstname, #user_lastname, #user_mail, #my_account_form select { width: 90%; }
146 152
147 153 .pagination {font-size: 90%}
148 154 p.pagination {margin-top:8px;}
149 155
150 156 /***** Tabular forms ******/
151 157 .tabular p{
152 158 margin: 0;
153 159 padding: 5px 0 8px 0;
154 160 padding-left: 180px; /*width of left column containing the label elements*/
155 161 height: 1%;
156 162 clear:left;
157 163 }
158 164
159 165 .tabular label{
160 166 font-weight: bold;
161 167 float: left;
162 168 text-align: right;
163 169 margin-left: -180px; /*width of left column*/
164 170 width: 175px; /*width of labels. Should be smaller than left column to create some right
165 171 margin*/
166 172 }
167 173
168 174 .tabular label.floating{
169 175 font-weight: normal;
170 176 margin-left: 0px;
171 177 text-align: left;
172 178 width: 200px;
173 179 }
174 180
175 181 #preview fieldset {margin-top: 1em; background: url(../images/draft.png)}
176 182
177 183 .tabular.settings p{ padding-left: 300px; }
178 184 .tabular.settings label{ margin-left: -300px; width: 295px; }
179 185
180 186 .required {color: #bb0000;}
181 187 .summary {font-style: italic;}
182 188
183 189 div.attachments p { margin:4px 0 2px 0; }
184 190
185 191 /***** Flash & error messages ****/
186 192 #errorExplanation, div.flash, .nodata {
187 193 padding: 4px 4px 4px 30px;
188 194 margin-bottom: 12px;
189 195 font-size: 1.1em;
190 196 border: 2px solid;
191 197 }
192 198
193 199 div.flash {margin-top: 8px;}
194 200
195 201 div.flash.error, #errorExplanation {
196 202 background: url(../images/false.png) 8px 5px no-repeat;
197 203 background-color: #ffe3e3;
198 204 border-color: #dd0000;
199 205 color: #550000;
200 206 }
201 207
202 208 div.flash.notice {
203 209 background: url(../images/true.png) 8px 5px no-repeat;
204 210 background-color: #dfffdf;
205 211 border-color: #9fcf9f;
206 212 color: #005f00;
207 213 }
208 214
209 215 .nodata {
210 216 text-align: center;
211 217 background-color: #FFEBC1;
212 218 border-color: #FDBF3B;
213 219 color: #A6750C;
214 220 }
215 221
216 222 #errorExplanation ul { font-size: 0.9em;}
217 223
218 224 /***** Ajax indicator ******/
219 225 #ajax-indicator {
220 226 position: absolute; /* fixed not supported by IE */
221 227 background-color:#eee;
222 228 border: 1px solid #bbb;
223 229 top:35%;
224 230 left:40%;
225 231 width:20%;
226 232 font-weight:bold;
227 233 text-align:center;
228 234 padding:0.6em;
229 235 z-index:100;
230 236 filter:alpha(opacity=50);
231 237 opacity: 0.5;
232 238 -khtml-opacity: 0.5;
233 239 }
234 240
235 241 html>body #ajax-indicator { position: fixed; }
236 242
237 243 #ajax-indicator span {
238 244 background-position: 0% 40%;
239 245 background-repeat: no-repeat;
240 246 background-image: url(../images/loading.gif);
241 247 padding-left: 26px;
242 248 vertical-align: bottom;
243 249 }
244 250
245 251 /***** Calendar *****/
246 252 table.cal {border-collapse: collapse; width: 100%; margin: 8px 0 6px 0;border: 1px solid #d7d7d7;}
247 253 table.cal thead th {width: 14%;}
248 254 table.cal tbody tr {height: 100px;}
249 255 table.cal th { background-color:#EEEEEE; padding: 4px; }
250 256 table.cal td {border: 1px solid #d7d7d7; vertical-align: top; font-size: 0.9em;}
251 257 table.cal td p.day-num {font-size: 1.1em; text-align:right;}
252 258 table.cal td.odd p.day-num {color: #bbb;}
253 259 table.cal td.today {background:#ffffdd;}
254 260 table.cal td.today p.day-num {font-weight: bold;}
255 261
256 262 /***** Tooltips ******/
257 263 .tooltip{position:relative;z-index:24;}
258 264 .tooltip:hover{z-index:25;color:#000;}
259 265 .tooltip span.tip{display: none; text-align:left;}
260 266
261 267 div.tooltip:hover span.tip{
262 268 display:block;
263 269 position:absolute;
264 270 top:12px; left:24px; width:270px;
265 271 border:1px solid #555;
266 272 background-color:#fff;
267 273 padding: 4px;
268 274 font-size: 0.8em;
269 275 color:#505050;
270 276 }
271 277
272 278 /***** Progress bar *****/
273 279 table.progress {
274 280 border: 1px solid #D7D7D7;
275 281 border-collapse: collapse;
276 282 border-spacing: 0pt;
277 283 empty-cells: show;
278 284 text-align: center;
279 285 float:left;
280 286 margin: 1px 6px 1px 0px;
281 287 }
282 288
283 289 table.progress td { height: 0.9em; }
284 290 table.progress td.closed { background: #BAE0BA none repeat scroll 0%; }
285 291 table.progress td.done { background: #DEF0DE none repeat scroll 0%; }
286 292 table.progress td.open { background: #FFF none repeat scroll 0%; }
287 293 p.pourcent {font-size: 80%;}
288 294 p.progress-info {clear: left; font-style: italic; font-size: 80%;}
289 295
290 296 div#status_by { float:right; width:380px; margin-left: 16px; margin-bottom: 16px; }
291 297
292 298 /***** Tabs *****/
293 299 #content .tabs {height: 2.6em; border-bottom: 1px solid #bbbbbb; margin-bottom:1.2em; position:relative;}
294 300 #content .tabs ul {margin:0; position:absolute; bottom:-2px; padding-left:1em;}
295 301 #content .tabs>ul { bottom:-1px; } /* others */
296 302 #content .tabs ul li {
297 303 float:left;
298 304 list-style-type:none;
299 305 white-space:nowrap;
300 306 margin-right:8px;
301 307 background:#fff;
302 308 }
303 309 #content .tabs ul li a{
304 310 display:block;
305 311 font-size: 0.9em;
306 312 text-decoration:none;
307 313 line-height:1.3em;
308 314 padding:4px 6px 4px 6px;
309 315 border: 1px solid #ccc;
310 316 border-bottom: 1px solid #bbbbbb;
311 317 background-color: #eeeeee;
312 318 color:#777;
313 319 font-weight:bold;
314 320 }
315 321
316 322 #content .tabs ul li a:hover {
317 323 background-color: #ffffdd;
318 324 text-decoration:none;
319 325 }
320 326
321 327 #content .tabs ul li a.selected {
322 328 background-color: #fff;
323 329 border: 1px solid #bbbbbb;
324 330 border-bottom: 1px solid #fff;
325 331 }
326 332
327 333 #content .tabs ul li a.selected:hover {
328 334 background-color: #fff;
329 335 }
330 336
331 337 /***** Diff *****/
332 338 .diff_out { background: #fcc; }
333 339 .diff_in { background: #cfc; }
334 340
335 341 /***** Wiki *****/
336 342 div.wiki table {
337 343 border: 1px solid #505050;
338 344 border-collapse: collapse;
339 345 }
340 346
341 347 div.wiki table, div.wiki td, div.wiki th {
342 348 border: 1px solid #bbb;
343 349 padding: 4px;
344 350 }
345 351
346 352 div.wiki .external {
347 353 background-position: 0% 60%;
348 354 background-repeat: no-repeat;
349 355 padding-left: 12px;
350 356 background-image: url(../images/external.png);
351 357 }
352 358
353 359 div.wiki a.new {
354 360 color: #b73535;
355 361 }
356 362
357 363 div.wiki pre {
358 364 margin: 1em 1em 1em 1.6em;
359 365 padding: 2px;
360 366 background-color: #fafafa;
361 367 border: 1px solid #dadada;
362 368 width:95%;
363 369 overflow-x: auto;
364 370 }
365 371
366 372 div.wiki div.toc {
367 373 background-color: #ffffdd;
368 374 border: 1px solid #e4e4e4;
369 375 padding: 4px;
370 376 line-height: 1.2em;
371 377 margin-bottom: 12px;
372 378 margin-right: 12px;
373 379 display: table
374 380 }
375 381 * html div.wiki div.toc { width: 50%; } /* IE6 doesn't autosize div */
376 382
377 383 div.wiki div.toc.right { float: right; margin-left: 12px; margin-right: 0; width: auto; }
378 384 div.wiki div.toc.left { float: left; margin-right: 12px; margin-left: 0; width: auto; }
379 385
380 386 div.wiki div.toc a {
381 387 display: block;
382 388 font-size: 0.9em;
383 389 font-weight: normal;
384 390 text-decoration: none;
385 391 color: #606060;
386 392 }
387 393 div.wiki div.toc a:hover { color: #c61a1a; text-decoration: underline;}
388 394
389 395 div.wiki div.toc a.heading2 { margin-left: 6px; }
390 396 div.wiki div.toc a.heading3 { margin-left: 12px; font-size: 0.8em; }
391 397
392 398 /***** My page layout *****/
393 399 .block-receiver {
394 400 border:1px dashed #c0c0c0;
395 401 margin-bottom: 20px;
396 402 padding: 15px 0 15px 0;
397 403 }
398 404
399 405 .mypage-box {
400 406 margin:0 0 20px 0;
401 407 color:#505050;
402 408 line-height:1.5em;
403 409 }
404 410
405 411 .handle {
406 412 cursor: move;
407 413 }
408 414
409 415 a.close-icon {
410 416 display:block;
411 417 margin-top:3px;
412 418 overflow:hidden;
413 419 width:12px;
414 420 height:12px;
415 421 background-repeat: no-repeat;
416 422 cursor:pointer;
417 423 background-image:url('../images/close.png');
418 424 }
419 425
420 426 a.close-icon:hover {
421 427 background-image:url('../images/close_hl.png');
422 428 }
423 429
424 430 /***** Gantt chart *****/
425 431 .gantt_hdr {
426 432 position:absolute;
427 433 top:0;
428 434 height:16px;
429 435 border-top: 1px solid #c0c0c0;
430 436 border-bottom: 1px solid #c0c0c0;
431 437 border-right: 1px solid #c0c0c0;
432 438 text-align: center;
433 439 overflow: hidden;
434 440 }
435 441
436 442 .task {
437 443 position: absolute;
438 444 height:8px;
439 445 font-size:0.8em;
440 446 color:#888;
441 447 padding:0;
442 448 margin:0;
443 449 line-height:0.8em;
444 450 }
445 451
446 452 .task_late { background:#f66 url(../images/task_late.png); border: 1px solid #f66; }
447 453 .task_done { background:#66f url(../images/task_done.png); border: 1px solid #66f; }
448 454 .task_todo { background:#aaa url(../images/task_todo.png); border: 1px solid #aaa; }
449 455 .milestone { background-image:url(../images/milestone.png); background-repeat: no-repeat; border: 0; }
450 456
451 457 /***** Icons *****/
452 458 .icon {
453 459 background-position: 0% 40%;
454 460 background-repeat: no-repeat;
455 461 padding-left: 20px;
456 462 padding-top: 2px;
457 463 padding-bottom: 3px;
458 464 }
459 465
460 466 .icon22 {
461 467 background-position: 0% 40%;
462 468 background-repeat: no-repeat;
463 469 padding-left: 26px;
464 470 line-height: 22px;
465 471 vertical-align: middle;
466 472 }
467 473
468 474 .icon-add { background-image: url(../images/add.png); }
469 475 .icon-edit { background-image: url(../images/edit.png); }
470 476 .icon-copy { background-image: url(../images/copy.png); }
471 477 .icon-del { background-image: url(../images/delete.png); }
472 478 .icon-move { background-image: url(../images/move.png); }
473 479 .icon-save { background-image: url(../images/save.png); }
474 480 .icon-cancel { background-image: url(../images/cancel.png); }
475 481 .icon-pdf { background-image: url(../images/pdf.png); }
476 482 .icon-csv { background-image: url(../images/csv.png); }
477 483 .icon-html { background-image: url(../images/html.png); }
478 484 .icon-image { background-image: url(../images/image.png); }
479 485 .icon-txt { background-image: url(../images/txt.png); }
480 486 .icon-file { background-image: url(../images/file.png); }
481 487 .icon-folder { background-image: url(../images/folder.png); }
482 488 .open .icon-folder { background-image: url(../images/folder_open.png); }
483 489 .icon-package { background-image: url(../images/package.png); }
484 490 .icon-home { background-image: url(../images/home.png); }
485 491 .icon-user { background-image: url(../images/user.png); }
486 492 .icon-mypage { background-image: url(../images/user_page.png); }
487 493 .icon-admin { background-image: url(../images/admin.png); }
488 494 .icon-projects { background-image: url(../images/projects.png); }
489 495 .icon-logout { background-image: url(../images/logout.png); }
490 496 .icon-help { background-image: url(../images/help.png); }
491 497 .icon-attachment { background-image: url(../images/attachment.png); }
492 498 .icon-index { background-image: url(../images/index.png); }
493 499 .icon-history { background-image: url(../images/history.png); }
494 500 .icon-feed { background-image: url(../images/feed.png); }
495 501 .icon-time { background-image: url(../images/time.png); }
496 502 .icon-stats { background-image: url(../images/stats.png); }
497 503 .icon-warning { background-image: url(../images/warning.png); }
498 504 .icon-fav { background-image: url(../images/fav.png); }
499 505 .icon-fav-off { background-image: url(../images/fav_off.png); }
500 506 .icon-reload { background-image: url(../images/reload.png); }
501 507 .icon-lock { background-image: url(../images/locked.png); }
502 508 .icon-unlock { background-image: url(../images/unlock.png); }
503 509 .icon-note { background-image: url(../images/note.png); }
504 510 .icon-checked { background-image: url(../images/true.png); }
505 511
506 512 .icon22-projects { background-image: url(../images/22x22/projects.png); }
507 513 .icon22-users { background-image: url(../images/22x22/users.png); }
508 514 .icon22-tracker { background-image: url(../images/22x22/tracker.png); }
509 515 .icon22-role { background-image: url(../images/22x22/role.png); }
510 516 .icon22-workflow { background-image: url(../images/22x22/workflow.png); }
511 517 .icon22-options { background-image: url(../images/22x22/options.png); }
512 518 .icon22-notifications { background-image: url(../images/22x22/notifications.png); }
513 519 .icon22-authent { background-image: url(../images/22x22/authent.png); }
514 520 .icon22-info { background-image: url(../images/22x22/info.png); }
515 521 .icon22-comment { background-image: url(../images/22x22/comment.png); }
516 522 .icon22-package { background-image: url(../images/22x22/package.png); }
517 523 .icon22-settings { background-image: url(../images/22x22/settings.png); }
518 524 .icon22-plugin { background-image: url(../images/22x22/plugin.png); }
519 525
520 526 /***** Media print specific styles *****/
521 527 @media print {
522 528 #top-menu, #header, #main-menu, #sidebar, #footer, .contextual { display:none; }
523 529 #main { background: #fff; }
524 530 #content { width: 99%; margin: 0; padding: 0; border: 0; background: #fff; }
525 531 }
General Comments 0
You need to be logged in to leave comments. Login now