Feature #31353 » 0001-moved-user-links-under-a-drop-down-menu.patch
| app/helpers/application_helper.rb | ||
|---|---|---|
| 570 | 570 |
end |
| 571 | 571 |
text ||= l(:label_jump_to_a_project) |
| 572 | 572 |
url = autocomplete_projects_path(:format => 'js', :jump => current_menu_item) |
| 573 |
trigger = content_tag('span', text, :class => 'drdn-trigger')
|
|
| 573 |
trigger = content_tag('span', text, :class => 'drdn-trigger arrow')
|
|
| 574 | 574 |
q = text_field_tag('q', '', :id => 'projects-quick-search',
|
| 575 | 575 |
:class => 'autocomplete', |
| 576 | 576 |
:data => {:automcomplete_url => url},
|
| app/views/layouts/_user_menu.html.erb | ||
|---|---|---|
| 1 |
<% if User.current.logged? %> |
|
| 2 |
<div id="user-menu" class="drdn"> |
|
| 3 |
<div class="drdn-trigger arrow"> |
|
| 4 |
<% if Setting.gravatar_enabled? %> |
|
| 5 |
<%= avatar(User.current, :size => "20") %> |
|
| 6 |
<%else%> |
|
| 7 |
<%= content_tag('span', User.current, :format => :username) %>
|
|
| 8 |
<% end %> |
|
| 9 |
</div> |
|
| 10 |
<div class="drdn-content"> |
|
| 11 |
<div class="drdn-items info"> |
|
| 12 |
<%= content_tag('span', "#{User.current.firstname} #{User.current.lastname}", :class => 'user-name') %>
|
|
| 13 |
<%= content_tag('span', User.current.login, :class => 'login' ) %>
|
|
| 14 |
</div> |
|
| 15 |
<div class="drdn-items menu"> |
|
| 16 |
<%= render_menu :user_menu -%> |
|
| 17 |
</div> |
|
| 18 |
</div> |
|
| 19 |
</div> |
|
| 20 |
<% end %> |
|
| app/views/layouts/base.html.erb | ||
|---|---|---|
| 60 | 60 | |
| 61 | 61 | |
| 62 | 62 |
<div id="top-menu"> |
| 63 |
<div id="top-menu-left"> |
|
| 64 |
<nav id="global-nav"> |
|
| 65 |
<%= render_menu :top_menu if User.current.logged? || !Setting.login_required? -%> |
|
| 66 |
</nav> |
|
| 67 |
</div> |
|
| 68 |
<div id="top-menu-right"> |
|
| 63 | 69 |
<div id="account"> |
| 64 |
<%= render_menu :account_menu -%> |
|
| 70 |
<%= render_menu :account_menu if !User.current.logged? -%>
|
|
| 65 | 71 |
</div> |
| 66 |
<%= content_tag('div', "#{l(:label_logged_as)} #{link_to_user(User.current, :format => :username)}".html_safe, :id => 'loggedas') if User.current.logged? %>
|
|
| 67 |
<%= render_menu :top_menu if User.current.logged? || !Setting.login_required? -%>
|
|
| 72 |
<%= render :partial => 'layouts/user_menu' %>
|
|
| 73 |
</div>
|
|
| 68 | 74 |
</div> |
| 69 | 75 | |
| 70 | 76 |
<div id="header"> |
| config/locales/en.yml | ||
|---|---|---|
| 658 | 658 |
label_password_lost: Lost password |
| 659 | 659 |
label_password_required: Confirm your password to continue |
| 660 | 660 |
label_home: Home |
| 661 |
label_profile: Profile |
|
| 661 | 662 |
label_my_page: My page |
| 662 | 663 |
label_my_account: My account |
| 663 | 664 |
label_my_projects: My projects |
| lib/redmine/preparation.rb | ||
|---|---|---|
| 161 | 161 | |
| 162 | 162 |
MenuManager.map :top_menu do |menu| |
| 163 | 163 |
menu.push :home, :home_path |
| 164 |
menu.push :my_page, {:controller => 'my', :action => 'page'},
|
|
| 165 |
:if => Proc.new {User.current.logged?}
|
|
| 166 | 164 |
menu.push :projects, {:controller => 'projects', :action => 'index'},
|
| 167 | 165 |
:caption => :label_project_plural |
| 168 | 166 |
menu.push :administration, {:controller => 'admin', :action => 'index'},
|
| ... | ... | |
| 174 | 172 |
menu.push :login, :signin_path, :if => Proc.new {!User.current.logged?}
|
| 175 | 173 |
menu.push :register, :register_path, |
| 176 | 174 |
:if => Proc.new {!User.current.logged? && Setting.self_registration?}
|
| 175 |
end |
|
| 176 | ||
| 177 |
MenuManager.map :user_menu do |menu| |
|
| 178 |
menu.push :profile, {:controller => 'users', :action => 'show', :id => 'current' }
|
|
| 179 |
menu.push :my_page, {:controller => 'my', :action => 'page'},
|
|
| 180 |
:if => Proc.new {User.current.logged?}
|
|
| 177 | 181 |
menu.push :my_account, {:controller => 'my', :action => 'account'},
|
| 178 | 182 |
:if => Proc.new {User.current.logged?}
|
| 179 | 183 |
menu.push :logout, :signout_path, :html => {:method => 'post'},
|
| public/stylesheets/application.css | ||
|---|---|---|
| 24 | 24 |
flex-direction: column; |
| 25 | 25 |
} |
| 26 | 26 | |
| 27 |
#top-menu {background: #3E5B76; color: #fff; height:1.8em; font-size: 0.8em; padding: 2px 10px 0px 12px;}
|
|
| 27 |
#top-menu {
|
|
| 28 |
display: flex; |
|
| 29 |
justify-content: space-between; |
|
| 30 |
align-items: center; |
|
| 31 |
padding: 0 16px; |
|
| 32 |
background: #3E5B76; |
|
| 33 |
color: #fff; |
|
| 34 |
height:3.2em; |
|
| 35 |
font-size: 0.9em; |
|
| 36 |
} |
|
| 37 | ||
| 38 |
#top-menu-left {
|
|
| 39 |
display: flex; |
|
| 40 |
align-items: center; |
|
| 41 |
} |
|
| 42 | ||
| 43 |
#top-menu-right {
|
|
| 44 |
display: flex; |
|
| 45 |
justify-content: flex-end; |
|
| 46 |
align-items: center; |
|
| 47 |
} |
|
| 48 | ||
| 28 | 49 |
#top-menu ul {margin: 0; padding: 0;}
|
| 29 | 50 |
#top-menu li {
|
| 30 | 51 |
float:left; |
| ... | ... | |
| 33 | 54 |
padding: 0px 0px 0px 0px; |
| 34 | 55 |
white-space:nowrap; |
| 35 | 56 |
} |
| 36 |
#top-menu a {color: #fff; margin-right: 8px; font-weight: bold;}
|
|
| 37 |
#top-menu #loggedas { float: right; margin-right: 0.5em; color: #fff; }
|
|
| 57 |
#global-nav a, |
|
| 58 |
#account a {color: #fff; margin-right: 8px; font-weight: bold;}
|
|
| 59 | ||
| 38 | 60 | |
| 39 |
#account {float:right;}
|
|
| 61 |
#user-menu a { color: 333; }
|
|
| 40 | 62 | |
| 41 | 63 |
#header {min-height:5.3em;margin:0;background-color:#628DB6;color:#f8f8f8; padding: 4px 16px 20px 16px; position:relative;}
|
| 42 |
#header a {color:#f8f8f8;}
|
|
| 43 | 64 |
#header h1 { overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
|
| 44 | 65 |
#header h1 .breadcrumbs { display:block; font-size: .5em; font-weight: normal; }
|
| 66 |
#header h1 .breadcrumbs { display:block; font-size: .5em; font-weight: normal; }
|
|
| 67 |
#header h1 .breadcrumbs a {color:#f8f8f8;}
|
|
| 45 | 68 | |
| 46 | 69 |
#quick-search {float:right;}
|
| 70 |
#quick-search label a {color:#f8f8f8;}
|
|
| 47 | 71 |
#quick-search #q {width:130px; height:24px; box-sizing:border-box; vertical-align:middle; border:1px solid #ccc; border-radius:3px;}
|
| 48 | 72 | |
| 49 | 73 |
#main-menu {position: absolute; bottom: 0px; left: 10px; margin-right: -500px; width: 100%;}
|
| ... | ... | |
| 164 | 188 | |
| 165 | 189 |
/***** Dropdown *****/ |
| 166 | 190 |
.drdn {position:relative;}
|
| 191 | ||
| 167 | 192 |
.drdn-trigger {
|
| 168 | 193 |
box-sizing:border-box; |
| 169 | 194 |
overflow:hidden; |
| ... | ... | |
| 173 | 198 |
user-select:none; |
| 174 | 199 |
-moz-user-select:none; |
| 175 | 200 |
-webkit-user-select:none; |
| 201 |
padding:3px 16px 3px 6px; |
|
| 202 |
border-radius:4px; |
|
| 176 | 203 |
} |
| 204 | ||
| 205 |
.drdn-trigger.arrow::after {
|
|
| 206 |
position: absolute; |
|
| 207 |
content: ''; |
|
| 208 |
background: url(../images/arrow_down.png) no-repeat; |
|
| 209 |
right: 3px; |
|
| 210 |
top: calc(50% - 5px); |
|
| 211 |
width: 10px; |
|
| 212 |
height: 10px; |
|
| 213 |
z-index: 90; |
|
| 214 |
} |
|
| 215 | ||
| 177 | 216 |
.drdn-content {
|
| 178 | 217 |
display:none; |
| 179 | 218 |
position:absolute; |
| ... | ... | |
| 186 | 225 |
color:#555; |
| 187 | 226 |
z-index:99; |
| 188 | 227 |
} |
| 228 | ||
| 189 | 229 |
.drdn.expanded .drdn-content {display:block;}
|
| 190 | 230 | |
| 191 | 231 |
.drdn-content .quick-search {margin:8px;}
|
| 192 | 232 |
.drdn-content .autocomplete {box-sizing: border-box; width:100% !important; height:28px;}
|
| 193 | 233 |
.drdn-content .autocomplete:focus {border-color:#5ad;}
|
| 194 |
.drdn-items {max-height:400px; overflow:auto;}
|
|
| 195 | 234 |
div + .drdn-items {border-top:1px solid #ccc;}
|
| 196 | 235 |
.drdn-items>* {
|
| 197 | 236 |
display:block; |
| ... | ... | |
| 199 | 238 |
overflow:hidden; |
| 200 | 239 |
text-overflow: ellipsis; |
| 201 | 240 |
white-space:nowrap; |
| 202 |
padding:4px 8px;
|
|
| 241 |
padding:1px 5px;
|
|
| 203 | 242 |
} |
| 204 |
.drdn-items>a:hover {text-decoration:none;}
|
|
| 205 |
.drdn-items>*:focus {border:1px dotted #bbb;}
|
|
| 243 |
.drdn-items a:hover {background-color:#759FCF; color:#fff;}
|
|
| 244 |
.drdn-items a:hover {text-decoration:none;}
|
|
| 245 |
.drdn-items *:focus {border:1px dotted #bbb;}
|
|
| 206 | 246 | |
| 207 | 247 |
.drdn-items.selection>*:before {
|
| 208 | 248 |
content:' '; |
| ... | ... | |
| 219 | 259 |
.drdn-items.selection:empty {
|
| 220 | 260 |
border: none; |
| 221 | 261 |
} |
| 222 |
.drdn-items>span {color:#999;}
|
|
| 223 | 262 | |
| 224 | 263 |
.contextual .drdn-content {top:18px;}
|
| 225 | 264 |
.contextual .drdn-items {padding:2px; min-width: 160px;}
|
| ... | ... | |
| 227 | 266 |
.contextual .drdn-items>a.icon {padding-left: 24px; background-position-x: 4px;}
|
| 228 | 267 |
.contextual .drdn-items>a:hover {color:#2A5685; border:1px solid #628db6; background-color:#eef5fd; border-radius:3px;}
|
| 229 | 268 | |
| 269 |
#user-menu { max-width: 150px; border-radius: 4px; }
|
|
| 270 |
#user-menu .gravatar { background: #ffffffb2; }
|
|
| 271 |
#user-menu .user-name { font-weight: bold; font-size: 1em;}
|
|
| 272 |
#user-menu .drdn-content {
|
|
| 273 |
min-width: 120px; |
|
| 274 |
max-width: 240px; |
|
| 275 |
} |
|
| 276 |
#user-menu .drdn-trigger span {
|
|
| 277 |
font-weight: bold; |
|
| 278 |
padding: 4px; |
|
| 279 |
background-color: #00000033; |
|
| 280 |
border-radius: 4px; |
|
| 281 |
display: block; |
|
| 282 |
overflow: hidden; |
|
| 283 |
text-overflow: ellipsis; |
|
| 284 |
} |
|
| 285 | ||
| 286 |
#user-menu .drdn-items ul {
|
|
| 287 |
display: flex; |
|
| 288 |
flex-direction: column; |
|
| 289 |
} |
|
| 290 | ||
| 291 |
#user-menu .drdn-items.menu a {
|
|
| 292 |
display: block; |
|
| 293 |
padding: 5px; |
|
| 294 |
} |
|
| 295 | ||
| 230 | 296 |
#project-jump.drdn {width:200px;display:inline-block;}
|
| 231 | 297 |
#project-jump .drdn-trigger {
|
| 232 | 298 |
width:100%; |
| 233 | 299 |
height:24px; |
| 234 | 300 |
display:inline-block; |
| 235 |
padding:3px 18px 3px 6px; |
|
| 236 | 301 |
border-radius:3px; |
| 237 | 302 |
border:1px solid #ccc; |
| 238 | 303 |
margin:0 !important; |
| 239 | 304 |
vertical-align:middle; |
| 240 | 305 |
color:#555; |
| 241 |
background:#fff url(../images/arrow_down.png) no-repeat 97% 50%;
|
|
| 306 |
background-color: #fff;
|
|
| 242 | 307 |
} |
| 243 |
#project-jump .drdn.expanded .drdn-trigger {background-image:url(../images/arrow_up.png);}
|
|
| 244 | 308 |
#project-jump .drdn-content {width:280px;}
|
| 245 |
#project-jump .drdn-items>* {color:#555 !important;}
|
|
| 246 |
#project-jump .drdn-items>a:hover {background-color:#759FCF; color:#fff !important;}
|
|
| 309 |
#project-jump .drdn-items {max-height:400px; overflow:auto;}
|
|
| 310 |
.drdn-items.projects a {
|
|
| 311 |
padding: 4px 5px; |
|
| 312 |
} |
|
| 247 | 313 | |
| 248 | 314 |
/***** Tables *****/ |
| 249 | 315 |
table.list, .table-list { border: 1px solid #e4e4e4; width: 100%; margin-bottom: 4px; border-radius: 3px; border-spacing: 0; overflow: hidden;}
|
| public/stylesheets/responsive.css | ||
|---|---|---|
| 121 | 121 |
background: inherit; |
| 122 | 122 |
} |
| 123 | 123 | |
| 124 |
#header #quick-search .drdn-trigger::after {
|
|
| 125 |
display: none; |
|
| 126 |
} |
|
| 127 | ||
| 124 | 128 |
/* styles for combobox within quick-search (#project_quick_jump_box) */ |
| 125 | 129 |
#project-jump.drdn {
|
| 126 | 130 |
position: absolute; |