##// END OF EJS Templates
nav-bar: added placeholder for notice box.
marcink -
r2898:89a17f27 default
parent child Browse files
Show More
@@ -1,684 +1,695 b''
1 // navigation.less
1 // navigation.less
2 // For use in RhodeCode applications;
2 // For use in RhodeCode applications;
3 // see style guide documentation for guidelines.
3 // see style guide documentation for guidelines.
4
4
5 // HEADER NAVIGATION
5 // HEADER NAVIGATION
6
6
7 .horizontal-list {
7 .horizontal-list {
8 float: right;
8 float: right;
9 display: block;
9 display: block;
10 margin: 0;
10 margin: 0;
11 padding: 0;
11 padding: 0;
12 -webkit-padding-start: 0;
12 -webkit-padding-start: 0;
13 text-align: left;
13 text-align: left;
14 font-size: @navigation-fontsize;
14 font-size: @navigation-fontsize;
15 color: @grey6;
15 color: @grey6;
16 z-index:10;
16 z-index:10;
17
17
18 li {
18 li {
19 line-height: 1em;
19 line-height: 1em;
20 list-style-type: none;
20 list-style-type: none;
21
21
22 a {
22 a {
23 padding: 0 .5em;
23 padding: 0 .5em;
24
24
25 &.menu_link_notifications {
25 &.menu_link_notifications {
26 .pill(7px,@rcblue);
26 .pill(7px,@rcblue);
27 display: inline;
27 display: inline;
28 margin: 0 7px 0 .7em;
28 margin: 0 7px 0 .7em;
29 font-size: @basefontsize;
29 font-size: @basefontsize;
30 color: white;
30 color: white;
31
31
32 &.empty {
32 &.empty {
33 background-color: @grey4;
33 background-color: @grey4;
34 }
34 }
35
35
36 &:hover {
36 &:hover {
37 background-color: @rcdarkblue;
37 background-color: @rcdarkblue;
38 }
38 }
39 }
39 }
40 }
40 }
41 .pill_container {
41 .pill_container {
42 margin: 1.25em 0px 0px 0px;
42 margin: 1.25em 0px 0px 0px;
43 float: right;
43 float: right;
44 }
44 }
45
45
46 &#quick_login_li {
46 &#quick_login_li {
47 &:hover {
47 &:hover {
48 color: @grey5;
48 color: @grey5;
49 }
49 }
50
50
51 a.menu_link_notifications {
51 a.menu_link_notifications {
52 color: white;
52 color: white;
53 }
53 }
54
54
55 .user {
55 .user {
56 padding-bottom: 10px;
56 padding-bottom: 10px;
57 }
57 }
58
58
59 &.open {
59 &.open {
60 .user {
60 .user {
61 border-bottom: 5px solid @rcblue;
61 border-bottom: 5px solid @rcblue;
62 }
62 }
63 }
63 }
64 }
64 }
65
65
66 &:before { content: none; }
66 &:before { content: none; }
67
67
68 &:last-child {
68 &:last-child {
69 .menulabel {
69 .menulabel {
70 padding-right: 0;
70 padding-right: 0;
71 border-right: none;
71 border-right: none;
72
72
73 .show_more {
73 .show_more {
74 padding-right: 0;
74 padding-right: 0;
75 }
75 }
76 }
76 }
77
77
78 &> a {
78 &> a {
79 border-bottom: none;
79 border-bottom: none;
80 }
80 }
81 }
81 }
82
82
83 &.active {
83 &.active {
84 border-bottom: 5px solid @rcblue;
84 border-bottom: 5px solid @rcblue;
85 }
85 }
86
86
87 &.open {
87 &.open {
88
88
89 a {
89 a {
90 color: white;
90 color: white;
91 }
91 }
92 }
92 }
93
93
94 &:focus {
94 &:focus {
95 outline: none;
95 outline: none;
96 }
96 }
97
97
98 ul li {
98 ul li {
99 display: block;
99 display: block;
100
100
101 &:last-child> a {
101 &:last-child> a {
102 border-bottom: none;
102 border-bottom: none;
103 }
103 }
104
104
105 ul li:last-child a {
105 ul li:last-child a {
106 /* we don't expect more then 3 levels of submenu and the third
106 /* we don't expect more then 3 levels of submenu and the third
107 level can have different html structure */
107 level can have different html structure */
108 border-bottom: none;
108 border-bottom: none;
109 }
109 }
110 }
110 }
111 }
111 }
112
112
113 > li {
113 > li {
114 float: left;
114 float: left;
115 display: block;
115 display: block;
116 padding: 0;
116 padding: 0;
117
117
118 > a,
118 > a,
119 &.has_select2 a {
119 &.has_select2 a {
120 display: block;
120 display: block;
121 padding: 10px 0 2px;
121 padding: 10px 0 2px;
122
122
123 .show_more {
123 .show_more {
124 margin-top: -4px;
124 margin-top: -4px;
125 padding-right: .5em;
125 padding-right: .5em;
126 }
126 }
127 }
127 }
128
128
129 .menulabel {
129 .menulabel {
130 padding: 0 .5em;
130 padding: 0 .5em;
131 line-height: 1em;
131 line-height: 1em;
132 // for this specifically we do not use a variable
132 // for this specifically we do not use a variable
133 border-right: 1px solid @grey4;
133 border-right: 1px solid @grey4;
134 }
134 }
135
135
136 .pr_notifications {
136 .pr_notifications {
137 padding-left: .5em;
137 padding-left: .5em;
138 }
138 }
139
139
140 .pr_notifications + .menulabel {
140 .pr_notifications + .menulabel {
141 display:inline;
141 display:inline;
142 padding-left: 0;
142 padding-left: 0;
143 }
143 }
144
144
145 &:hover,
145 &:hover,
146 &.open,
146 &.open,
147 &.active {
147 &.active {
148 a {
148 a {
149 color: @grey1;
149 color: @grey1;
150 }
150 }
151 }
151 }
152 }
152 }
153
153
154 pre {
154 pre {
155 margin: 0;
155 margin: 0;
156 padding: 0;
156 padding: 0;
157 }
157 }
158
158
159 .select2-container,
159 .select2-container,
160 .menulink.childs {
160 .menulink.childs {
161 position: relative;
161 position: relative;
162 }
162 }
163
163
164 #quick_login {
164 #quick_login {
165
165
166 li a {
166 li a {
167 padding: .5em 0;
167 padding: .5em 0;
168 border-bottom: none;
168 border-bottom: none;
169 color: @grey2;
169 color: @grey2;
170
170
171 &:hover { color: @grey1; }
171 &:hover { color: @grey1; }
172 }
172 }
173
173
174 .show_more {
174 .show_more {
175 padding-left: .5em;
175 padding-left: .5em;
176 }
176 }
177 }
177 }
178
178
179 #quick_login_link {
179 #quick_login_link {
180 display: inline-block;
180 display: inline-block;
181
181
182 .gravatar {
182 .gravatar {
183 border: 1px solid @grey2;
183 border: 1px solid @grey2;
184 }
184 }
185
185
186 .gravatar-login {
186 .gravatar-login {
187 height: 20px;
187 height: 20px;
188 width: 20px;
188 width: 20px;
189 margin: -8px 0;
189 margin: -8px 0;
190 padding: 0;
190 padding: 0;
191 }
191 }
192
192
193 &:hover .user {
193 &:hover .user {
194 color: @grey6;
194 color: @grey6;
195 }
195 }
196 }
196 }
197 }
197 }
198 .header .horizontal-list {
198 .header .horizontal-list {
199
199
200 li {
200 li {
201
201
202 &#quick_login_li {
202 &#quick_login_li {
203 padding-left: .5em;
203 padding-left: .5em;
204
204
205 &:hover #quick_login_link {
205 &:hover #quick_login_link {
206 color: inherit;
206 color: inherit;
207 }
207 }
208 }
208 }
209
209
210 &:before { content: none; }
210 &:before { content: none; }
211 }
211 }
212
212
213 > li {
213 > li {
214
214
215 a {
215 a {
216 padding: 18px 0 12px 0;
216 padding: 18px 0 12px 0;
217 color: @nav-grey;
217 color: @nav-grey;
218
218
219 &.menu_link_notifications {
219 &.menu_link_notifications {
220 padding: 1px 8px;
220 padding: 1px 8px;
221 }
221 }
222 }
222 }
223
223
224 &:hover,
224 &:hover,
225 &.open,
225 &.open,
226 &.active {
226 &.active {
227 .pill_container a {
227 .pill_container a {
228 // don't select text for the pill container, it has it' own
228 // don't select text for the pill container, it has it' own
229 // hover behaviour
229 // hover behaviour
230 color: @nav-grey;
230 color: @nav-grey;
231 }
231 }
232 }
232 }
233
233
234 &:hover,
234 &:hover,
235 &.open,
235 &.open,
236 &.active {
236 &.active {
237 a {
237 a {
238 color: @grey6;
238 color: @grey6;
239 }
239 }
240 }
240 }
241
241
242 .select2-dropdown-open a {
242 .select2-dropdown-open a {
243 color: @grey6;
243 color: @grey6;
244 }
244 }
245
245
246 .repo-switcher {
246 .repo-switcher {
247 padding-left: 0;
247 padding-left: 0;
248
248
249 .menulabel {
249 .menulabel {
250 padding-left: 0;
250 padding-left: 0;
251 }
251 }
252 }
252 }
253 }
253 }
254
254
255 li ul li {
255 li ul li {
256 background-color:@grey2;
256 background-color:@grey2;
257
257
258 a {
258 a {
259 padding: .5em 0;
259 padding: .5em 0;
260 border-bottom: @border-thickness solid @border-default-color;
260 border-bottom: @border-thickness solid @border-default-color;
261 color: @grey6;
261 color: @grey6;
262 }
262 }
263
263
264 &:last-child a, &.last a{
264 &:last-child a, &.last a{
265 border-bottom: none;
265 border-bottom: none;
266 }
266 }
267
267
268 &:hover {
268 &:hover {
269 background-color: @grey3;
269 background-color: @grey3;
270 }
270 }
271 }
271 }
272
272
273 .submenu {
273 .submenu {
274 margin-top: 5px;
274 margin-top: 5px;
275 }
275 }
276 }
276 }
277
277
278 // SUBMENUS
278 // SUBMENUS
279 .navigation .submenu {
279 .navigation .submenu {
280 display: none;
280 display: none;
281 }
281 }
282
282
283 .navigation li.open {
283 .navigation li.open {
284 .submenu {
284 .submenu {
285 display: block;
285 display: block;
286 }
286 }
287 }
287 }
288
288
289 .navigation li:last-child .submenu {
289 .navigation li:last-child .submenu {
290 right: -20px;
290 right: -20px;
291 left: auto;
291 left: auto;
292 }
292 }
293
293
294 .submenu {
294 .submenu {
295 position: absolute;
295 position: absolute;
296 top: 100%;
296 top: 100%;
297 left: 0;
297 left: 0;
298 min-width: 150px;
298 min-width: 150px;
299 margin: 6px 0 0;
299 margin: 6px 0 0;
300 padding: 0;
300 padding: 0;
301 text-align: left;
301 text-align: left;
302 font-family: @text-light;
302 font-family: @text-light;
303 border-radius: @border-radius;
303 border-radius: @border-radius;
304 z-index: 20;
304 z-index: 20;
305
305
306 li {
306 li {
307 display: block;
307 display: block;
308 margin: 0;
308 margin: 0;
309 padding: 0 .5em;
309 padding: 0 .5em;
310 line-height: 1em;
310 line-height: 1em;
311 color: @grey3;
311 color: @grey3;
312 background-color: @grey6;
312 background-color: @grey6;
313
313
314 &:before { content: none; }
314 &:before { content: none; }
315
315
316 a {
316 a {
317 display: block;
317 display: block;
318 width: 100%;
318 width: 100%;
319 padding: .5em 0;
319 padding: .5em 0;
320 border-right: none;
320 border-right: none;
321 border-bottom: @border-thickness solid white;
321 border-bottom: @border-thickness solid white;
322 color: @grey3;
322 color: @grey3;
323 }
323 }
324
324
325 ul {
325 ul {
326 display: none;
326 display: none;
327 position: absolute;
327 position: absolute;
328 top: 0;
328 top: 0;
329 right: 100%;
329 right: 100%;
330 padding: 0;
330 padding: 0;
331 z-index: 30;
331 z-index: 30;
332 }
332 }
333 &:hover {
333 &:hover {
334 background-color: @grey5;
334 background-color: @grey5;
335 -webkit-transition: background .3s;
335 -webkit-transition: background .3s;
336 -moz-transition: background .3s;
336 -moz-transition: background .3s;
337 -o-transition: background .3s;
337 -o-transition: background .3s;
338 transition: background .3s;
338 transition: background .3s;
339
339
340 ul {
340 ul {
341 display: block;
341 display: block;
342 }
342 }
343 }
343 }
344 }
344 }
345 }
345 }
346
346
347
347
348
348
349
349
350 // repo dropdown
350 // repo dropdown
351 .quick_repo_menu {
351 .quick_repo_menu {
352 width: 15px;
352 width: 15px;
353 text-align: center;
353 text-align: center;
354 position: relative;
354 position: relative;
355 cursor: pointer;
355 cursor: pointer;
356
356
357 div {
357 div {
358 overflow: visible !important;
358 overflow: visible !important;
359 }
359 }
360
360
361 &.sorting {
361 &.sorting {
362 cursor: auto;
362 cursor: auto;
363 }
363 }
364
364
365 &:hover {
365 &:hover {
366 .menu_items_container {
366 .menu_items_container {
367 position: absolute;
367 position: absolute;
368 display: block;
368 display: block;
369 }
369 }
370 .menu_items {
370 .menu_items {
371 display: block;
371 display: block;
372 }
372 }
373 }
373 }
374
374
375 i {
375 i {
376 margin: 0;
376 margin: 0;
377 color: @grey4;
377 color: @grey4;
378 }
378 }
379
379
380 .menu_items_container {
380 .menu_items_container {
381 position: absolute;
381 position: absolute;
382 top: 0;
382 top: 0;
383 left: 100%;
383 left: 100%;
384 margin: 0;
384 margin: 0;
385 padding: 0;
385 padding: 0;
386 list-style: none;
386 list-style: none;
387 background-color: @grey6;
387 background-color: @grey6;
388 z-index: 999;
388 z-index: 999;
389 text-align: left;
389 text-align: left;
390
390
391 a {
391 a {
392 color: @grey2;
392 color: @grey2;
393 }
393 }
394
394
395 ul.menu_items {
395 ul.menu_items {
396 margin: 0;
396 margin: 0;
397 padding: 0;
397 padding: 0;
398 }
398 }
399
399
400 li {
400 li {
401 margin: 0;
401 margin: 0;
402 padding: 0;
402 padding: 0;
403 line-height: 1em;
403 line-height: 1em;
404 list-style-type: none;
404 list-style-type: none;
405
405
406 &:before { content: none; }
406 &:before { content: none; }
407
407
408 a {
408 a {
409 display: block;
409 display: block;
410 height: 16px;
410 height: 16px;
411 padding: 8px; //must add up to td height (28px)
411 padding: 8px; //must add up to td height (28px)
412
412
413 &:hover {
413 &:hover {
414 background-color: @grey5;
414 background-color: @grey5;
415 -webkit-transition: background .3s;
415 -webkit-transition: background .3s;
416 -moz-transition: background .3s;
416 -moz-transition: background .3s;
417 -o-transition: background .3s;
417 -o-transition: background .3s;
418 transition: background .3s;
418 transition: background .3s;
419 }
419 }
420 }
420 }
421 }
421 }
422 }
422 }
423 }
423 }
424
424
425 // Header Repository Switcher
425 // Header Repository Switcher
426 // Select2 Dropdown
426 // Select2 Dropdown
427 #select2-drop.select2-drop.repo-switcher-dropdown {
427 #select2-drop.select2-drop.repo-switcher-dropdown {
428 width: auto !important;
428 width: auto !important;
429 margin-top: 5px;
429 margin-top: 5px;
430 padding: 1em 0;
430 padding: 1em 0;
431 text-align: left;
431 text-align: left;
432 .border-radius-bottom(@border-radius);
432 .border-radius-bottom(@border-radius);
433 border-color: transparent;
433 border-color: transparent;
434 color: @grey6;
434 color: @grey6;
435 background-color: @grey2;
435 background-color: @grey2;
436
436
437 input {
437 input {
438 min-width: 90%;
438 min-width: 90%;
439 }
439 }
440
440
441 ul.select2-result-sub {
441 ul.select2-result-sub {
442
442
443 li {
443 li {
444 line-height: 1em;
444 line-height: 1em;
445
445
446 &:hover,
446 &:hover,
447 &.select2-highlighted {
447 &.select2-highlighted {
448 background-color: @grey3;
448 background-color: @grey3;
449 }
449 }
450 }
450 }
451
451
452 &:before { content: none; }
452 &:before { content: none; }
453 }
453 }
454
454
455 ul.select2-results {
455 ul.select2-results {
456 min-width: 200px;
456 min-width: 200px;
457 margin: 0;
457 margin: 0;
458 padding: 0;
458 padding: 0;
459 list-style-type: none;
459 list-style-type: none;
460 overflow-x: visible;
460 overflow-x: visible;
461 overflow-y: scroll;
461 overflow-y: scroll;
462
462
463 li {
463 li {
464 padding: 0 8px;
464 padding: 0 8px;
465 line-height: 1em;
465 line-height: 1em;
466 color: @grey6;
466 color: @grey6;
467
467
468 &:before { content: none; }
468 &:before { content: none; }
469
469
470 &>.select2-result-label {
470 &>.select2-result-label {
471 padding: 8px 0;
471 padding: 8px 0;
472 border-bottom: @border-thickness solid @grey3;
472 border-bottom: @border-thickness solid @grey3;
473 white-space: nowrap;
473 white-space: nowrap;
474 color: @grey5;
474 color: @grey5;
475 cursor: pointer;
475 cursor: pointer;
476 }
476 }
477
477
478 &.select2-result-with-children {
478 &.select2-result-with-children {
479 margin: 0;
479 margin: 0;
480 padding: 0;
480 padding: 0;
481 }
481 }
482
482
483 &.select2-result-unselectable > .select2-result-label {
483 &.select2-result-unselectable > .select2-result-label {
484 margin: 0 8px;
484 margin: 0 8px;
485 }
485 }
486
486
487 }
487 }
488 }
488 }
489
489
490 ul.select2-result-sub {
490 ul.select2-result-sub {
491 margin: 0;
491 margin: 0;
492 padding: 0;
492 padding: 0;
493
493
494 li {
494 li {
495 display: block;
495 display: block;
496 margin: 0;
496 margin: 0;
497 border-right: none;
497 border-right: none;
498 line-height: 1em;
498 line-height: 1em;
499 font-family: @text-light;
499 font-family: @text-light;
500 color: @grey2;
500 color: @grey2;
501
501
502 &:before { content: none; }
502 &:before { content: none; }
503
503
504 &:hover {
504 &:hover {
505 background-color: @grey3;
505 background-color: @grey3;
506 }
506 }
507 }
507 }
508 }
508 }
509 }
509 }
510
510
511
511
512 #context-bar {
512 #context-bar {
513 display: block;
513 display: block;
514 margin: 0 auto;
514 margin: 0 auto;
515 padding: 0 @header-padding;
515 padding: 0 @header-padding;
516 background-color: @grey6;
516 background-color: @grey6;
517 border-bottom: @border-thickness solid @grey5;
517 border-bottom: @border-thickness solid @grey5;
518
518
519 .clear {
519 .clear {
520 clear: both;
520 clear: both;
521 }
521 }
522 }
522 }
523
523
524 ul#context-pages {
524 ul#context-pages {
525 li {
525 li {
526 line-height: 1em;
526 line-height: 1em;
527
527
528 &:before { content: none; }
528 &:before { content: none; }
529
529
530 a {
530 a {
531 color: @grey3;
531 color: @grey3;
532 }
532 }
533
533
534 &.active {
534 &.active {
535 // special case, non-variable color
535 // special case, non-variable color
536 border-bottom: 4px solid @nav-grey;
536 border-bottom: 4px solid @nav-grey;
537
537
538 a {
538 a {
539 color: @grey1;
539 color: @grey1;
540 }
540 }
541 }
541 }
542 }
542 }
543 }
543 }
544
544
545 // PAGINATION
545 // PAGINATION
546
546
547 .pagination {
547 .pagination {
548 border: @border-thickness solid @rcblue;
548 border: @border-thickness solid @rcblue;
549 color: @rcblue;
549 color: @rcblue;
550
550
551 .current {
551 .current {
552 color: @grey4;
552 color: @grey4;
553 }
553 }
554 }
554 }
555
555
556 .dataTables_processing {
556 .dataTables_processing {
557 text-align: center;
557 text-align: center;
558 font-size: 1.1em;
558 font-size: 1.1em;
559 position: relative;
559 position: relative;
560 top: 95px;
560 top: 95px;
561 }
561 }
562
562
563 .dataTables_paginate, .pagination-wh {
563 .dataTables_paginate, .pagination-wh {
564 text-align: left;
564 text-align: left;
565 display: inline-block;
565 display: inline-block;
566 border-left: 1px solid @rcblue;
566 border-left: 1px solid @rcblue;
567 float: none;
567 float: none;
568 overflow: hidden;
568 overflow: hidden;
569
569
570 .paginate_button, .pager_curpage,
570 .paginate_button, .pager_curpage,
571 .pager_link, .pg-previous, .pg-next, .pager_dotdot {
571 .pager_link, .pg-previous, .pg-next, .pager_dotdot {
572 display: inline-block;
572 display: inline-block;
573 padding: @menupadding/4 @menupadding;
573 padding: @menupadding/4 @menupadding;
574 border: 1px solid @rcblue;
574 border: 1px solid @rcblue;
575 border-left: 0;
575 border-left: 0;
576 color: @rcblue;
576 color: @rcblue;
577 cursor: pointer;
577 cursor: pointer;
578 float: left;
578 float: left;
579 }
579 }
580
580
581 .pager_curpage, .pager_dotdot,
581 .pager_curpage, .pager_dotdot,
582 .paginate_button.current, .paginate_button.disabled,
582 .paginate_button.current, .paginate_button.disabled,
583 .disabled {
583 .disabled {
584 color: @grey3;
584 color: @grey3;
585 cursor: default;
585 cursor: default;
586 }
586 }
587
587
588 .ellipsis {
588 .ellipsis {
589 display: inline-block;
589 display: inline-block;
590 text-align: left;
590 text-align: left;
591 padding: @menupadding/4 @menupadding;
591 padding: @menupadding/4 @menupadding;
592 border: 1px solid @rcblue;
592 border: 1px solid @rcblue;
593 border-left: 0;
593 border-left: 0;
594 float: left;
594 float: left;
595 }
595 }
596 }
596 }
597
597
598 // SIDEBAR
598 // SIDEBAR
599
599
600 .sidebar {
600 .sidebar {
601 .block-left;
601 .block-left;
602 clear: left;
602 clear: left;
603 max-width: @sidebar-width;
603 max-width: @sidebar-width;
604 margin-right: @sidebarpadding;
604 margin-right: @sidebarpadding;
605 padding-right: @sidebarpadding;
605 padding-right: @sidebarpadding;
606 font-family: @text-regular;
606 font-family: @text-regular;
607 color: @grey1;
607 color: @grey1;
608
608
609 &#graph_nodes {
609 &#graph_nodes {
610 clear:both;
610 clear:both;
611 width: auto;
611 width: auto;
612 margin-left: -100px;
612 margin-left: -100px;
613 padding: 0;
613 padding: 0;
614 border: none;
614 border: none;
615 }
615 }
616
616
617 .nav-pills {
617 .nav-pills {
618 margin: 0;
618 margin: 0;
619 }
619 }
620
620
621 .nav {
621 .nav {
622 list-style: none;
622 list-style: none;
623 padding: 0;
623 padding: 0;
624
624
625 li {
625 li {
626 padding-bottom: @menupadding;
626 padding-bottom: @menupadding;
627 line-height: 1em;
627 line-height: 1em;
628 color: @grey4;
628 color: @grey4;
629
629
630 &.active a {
630 &.active a {
631 color: @grey2;
631 color: @grey2;
632 }
632 }
633
633
634 a {
634 a {
635 color: @grey4;
635 color: @grey4;
636 }
636 }
637
637
638 &:before { content: none; }
638 &:before { content: none; }
639 }
639 }
640
640
641 }
641 }
642 }
642 }
643
643
644 .main_filter_help_box {
644 .main_filter_help_box {
645 padding: 7px 7px;
645 padding: 7px 7px;
646 border-top: 1px solid @grey4;
646 border-top: 1px solid @grey4;
647 border-right: 1px solid @grey4;
647 border-right: 1px solid @grey4;
648 border-bottom: 1px solid @grey4;
648 border-bottom: 1px solid @grey4;
649 display: inline-block;
649 display: inline-block;
650 vertical-align: top;
650 vertical-align: top;
651 margin-left: -5px;
651 margin-left: -5px;
652 background: @grey3;
652 background: @grey3;
653 }
653 }
654
654
655 .main_filter_input_box {
655 .main_filter_input_box {
656 display: inline-block;
656 display: inline-block;
657 }
657 }
658
658
659 .main_filter_box {
659 .main_filter_box {
660 margin: 9px 0 0 0;
660 margin: 9px 0 0 0;
661 }
661 }
662
662
663 #main_filter_help {
663 #main_filter_help {
664 background: @grey3;
664 background: @grey3;
665 border: 1px solid black;
665 border: 1px solid black;
666 position: absolute;
666 position: absolute;
667 white-space: pre-wrap;
667 white-space: pre-wrap;
668 z-index: 9999;
668 z-index: 9999;
669 color: @nav-grey;
669 color: @nav-grey;
670 margin: 1px 7px;
670 margin: 1px 7px;
671 padding: 0 2px;
671 padding: 0 2px;
672 }
672 }
673
673
674 .main_filter_input {
674 .main_filter_input {
675 padding: 6px;
675 padding: 6px;
676 min-width: 220px;
676 min-width: 220px;
677 color: @nav-grey;
677 color: @nav-grey;
678 background: @grey3;
678 background: @grey3;
679 }
679 }
680
680
681 .main_filter_input::placeholder {
681 .main_filter_input::placeholder {
682 color: @nav-grey;
682 color: @nav-grey;
683 opacity: 1;
683 opacity: 1;
684 }
684 }
685
686 .notice-box {
687 display:block !important;
688 padding: 9px 0 !important;
689 }
690
691 .menulabel-notice {
692 border: 1px solid @color5;
693 padding:7px 10px;
694 color: @color5;
695 }
@@ -1,676 +1,685 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <%inherit file="root.mako"/>
2 <%inherit file="root.mako"/>
3
3
4 <%include file="/ejs_templates/templates.html"/>
4 <%include file="/ejs_templates/templates.html"/>
5
5
6 <div class="outerwrapper">
6 <div class="outerwrapper">
7 <!-- HEADER -->
7 <!-- HEADER -->
8 <div class="header">
8 <div class="header">
9 <div id="header-inner" class="wrapper">
9 <div id="header-inner" class="wrapper">
10 <div id="logo">
10 <div id="logo">
11 <div class="logo-wrapper">
11 <div class="logo-wrapper">
12 <a href="${h.route_path('home')}"><img src="${h.asset('images/rhodecode-logo-white-216x60.png')}" alt="RhodeCode"/></a>
12 <a href="${h.route_path('home')}"><img src="${h.asset('images/rhodecode-logo-white-216x60.png')}" alt="RhodeCode"/></a>
13 </div>
13 </div>
14 %if c.rhodecode_name:
14 %if c.rhodecode_name:
15 <div class="branding">- ${h.branding(c.rhodecode_name)}</div>
15 <div class="branding">- ${h.branding(c.rhodecode_name)}</div>
16 %endif
16 %endif
17 </div>
17 </div>
18 <!-- MENU BAR NAV -->
18 <!-- MENU BAR NAV -->
19 ${self.menu_bar_nav()}
19 ${self.menu_bar_nav()}
20 <!-- END MENU BAR NAV -->
20 <!-- END MENU BAR NAV -->
21 </div>
21 </div>
22 </div>
22 </div>
23 ${self.menu_bar_subnav()}
23 ${self.menu_bar_subnav()}
24 <!-- END HEADER -->
24 <!-- END HEADER -->
25
25
26 <!-- CONTENT -->
26 <!-- CONTENT -->
27 <div id="content" class="wrapper">
27 <div id="content" class="wrapper">
28
28
29 <rhodecode-toast id="notifications"></rhodecode-toast>
29 <rhodecode-toast id="notifications"></rhodecode-toast>
30
30
31 <div class="main">
31 <div class="main">
32 ${next.main()}
32 ${next.main()}
33 </div>
33 </div>
34 </div>
34 </div>
35 <!-- END CONTENT -->
35 <!-- END CONTENT -->
36
36
37 </div>
37 </div>
38 <!-- FOOTER -->
38 <!-- FOOTER -->
39 <div id="footer">
39 <div id="footer">
40 <div id="footer-inner" class="title wrapper">
40 <div id="footer-inner" class="title wrapper">
41 <div>
41 <div>
42 <p class="footer-link-right">
42 <p class="footer-link-right">
43 % if c.visual.show_version:
43 % if c.visual.show_version:
44 RhodeCode Enterprise ${c.rhodecode_version} ${c.rhodecode_edition}
44 RhodeCode Enterprise ${c.rhodecode_version} ${c.rhodecode_edition}
45 % endif
45 % endif
46 &copy; 2010-${h.datetime.today().year}, <a href="${h.route_url('rhodecode_official')}" target="_blank">RhodeCode GmbH</a>. All rights reserved.
46 &copy; 2010-${h.datetime.today().year}, <a href="${h.route_url('rhodecode_official')}" target="_blank">RhodeCode GmbH</a>. All rights reserved.
47 % if c.visual.rhodecode_support_url:
47 % if c.visual.rhodecode_support_url:
48 <a href="${c.visual.rhodecode_support_url}" target="_blank">${_('Support')}</a>
48 <a href="${c.visual.rhodecode_support_url}" target="_blank">${_('Support')}</a>
49 % endif
49 % endif
50 </p>
50 </p>
51 <% sid = 'block' if request.GET.get('showrcid') else 'none' %>
51 <% sid = 'block' if request.GET.get('showrcid') else 'none' %>
52 <p class="server-instance" style="display:${sid}">
52 <p class="server-instance" style="display:${sid}">
53 ## display hidden instance ID if specially defined
53 ## display hidden instance ID if specially defined
54 % if c.rhodecode_instanceid:
54 % if c.rhodecode_instanceid:
55 ${_('RhodeCode instance id: %s') % c.rhodecode_instanceid}
55 ${_('RhodeCode instance id: %s') % c.rhodecode_instanceid}
56 % endif
56 % endif
57 </p>
57 </p>
58 </div>
58 </div>
59 </div>
59 </div>
60 </div>
60 </div>
61
61
62 <!-- END FOOTER -->
62 <!-- END FOOTER -->
63
63
64 ### MAKO DEFS ###
64 ### MAKO DEFS ###
65
65
66 <%def name="menu_bar_subnav()">
66 <%def name="menu_bar_subnav()">
67 </%def>
67 </%def>
68
68
69 <%def name="breadcrumbs(class_='breadcrumbs')">
69 <%def name="breadcrumbs(class_='breadcrumbs')">
70 <div class="${class_}">
70 <div class="${class_}">
71 ${self.breadcrumbs_links()}
71 ${self.breadcrumbs_links()}
72 </div>
72 </div>
73 </%def>
73 </%def>
74
74
75 <%def name="admin_menu()">
75 <%def name="admin_menu()">
76 <ul class="admin_menu submenu">
76 <ul class="admin_menu submenu">
77 <li><a href="${h.route_path('admin_audit_logs')}">${_('Admin audit logs')}</a></li>
77 <li><a href="${h.route_path('admin_audit_logs')}">${_('Admin audit logs')}</a></li>
78 <li><a href="${h.route_path('repos')}">${_('Repositories')}</a></li>
78 <li><a href="${h.route_path('repos')}">${_('Repositories')}</a></li>
79 <li><a href="${h.route_path('repo_groups')}">${_('Repository groups')}</a></li>
79 <li><a href="${h.route_path('repo_groups')}">${_('Repository groups')}</a></li>
80 <li><a href="${h.route_path('users')}">${_('Users')}</a></li>
80 <li><a href="${h.route_path('users')}">${_('Users')}</a></li>
81 <li><a href="${h.route_path('user_groups')}">${_('User groups')}</a></li>
81 <li><a href="${h.route_path('user_groups')}">${_('User groups')}</a></li>
82 <li><a href="${h.route_path('admin_permissions_application')}">${_('Permissions')}</a></li>
82 <li><a href="${h.route_path('admin_permissions_application')}">${_('Permissions')}</a></li>
83 <li><a href="${h.route_path('auth_home', traverse='')}">${_('Authentication')}</a></li>
83 <li><a href="${h.route_path('auth_home', traverse='')}">${_('Authentication')}</a></li>
84 <li><a href="${h.route_path('global_integrations_home')}">${_('Integrations')}</a></li>
84 <li><a href="${h.route_path('global_integrations_home')}">${_('Integrations')}</a></li>
85 <li><a href="${h.route_path('admin_defaults_repositories')}">${_('Defaults')}</a></li>
85 <li><a href="${h.route_path('admin_defaults_repositories')}">${_('Defaults')}</a></li>
86 <li class="last"><a href="${h.route_path('admin_settings')}">${_('Settings')}</a></li>
86 <li class="last"><a href="${h.route_path('admin_settings')}">${_('Settings')}</a></li>
87 </ul>
87 </ul>
88 </%def>
88 </%def>
89
89
90
90
91 <%def name="dt_info_panel(elements)">
91 <%def name="dt_info_panel(elements)">
92 <dl class="dl-horizontal">
92 <dl class="dl-horizontal">
93 %for dt, dd, title, show_items in elements:
93 %for dt, dd, title, show_items in elements:
94 <dt>${dt}:</dt>
94 <dt>${dt}:</dt>
95 <dd title="${h.tooltip(title)}">
95 <dd title="${h.tooltip(title)}">
96 %if callable(dd):
96 %if callable(dd):
97 ## allow lazy evaluation of elements
97 ## allow lazy evaluation of elements
98 ${dd()}
98 ${dd()}
99 %else:
99 %else:
100 ${dd}
100 ${dd}
101 %endif
101 %endif
102 %if show_items:
102 %if show_items:
103 <span class="btn-collapse" data-toggle="item-${h.md5_safe(dt)[:6]}-details">${_('Show More')} </span>
103 <span class="btn-collapse" data-toggle="item-${h.md5_safe(dt)[:6]}-details">${_('Show More')} </span>
104 %endif
104 %endif
105 </dd>
105 </dd>
106
106
107 %if show_items:
107 %if show_items:
108 <div class="collapsable-content" data-toggle="item-${h.md5_safe(dt)[:6]}-details" style="display: none">
108 <div class="collapsable-content" data-toggle="item-${h.md5_safe(dt)[:6]}-details" style="display: none">
109 %for item in show_items:
109 %for item in show_items:
110 <dt></dt>
110 <dt></dt>
111 <dd>${item}</dd>
111 <dd>${item}</dd>
112 %endfor
112 %endfor
113 </div>
113 </div>
114 %endif
114 %endif
115
115
116 %endfor
116 %endfor
117 </dl>
117 </dl>
118 </%def>
118 </%def>
119
119
120
120
121 <%def name="gravatar(email, size=16)">
121 <%def name="gravatar(email, size=16)">
122 <%
122 <%
123 if (size > 16):
123 if (size > 16):
124 gravatar_class = 'gravatar gravatar-large'
124 gravatar_class = 'gravatar gravatar-large'
125 else:
125 else:
126 gravatar_class = 'gravatar'
126 gravatar_class = 'gravatar'
127 %>
127 %>
128 <%doc>
128 <%doc>
129 TODO: johbo: For now we serve double size images to make it smooth
129 TODO: johbo: For now we serve double size images to make it smooth
130 for retina. This is how it worked until now. Should be replaced
130 for retina. This is how it worked until now. Should be replaced
131 with a better solution at some point.
131 with a better solution at some point.
132 </%doc>
132 </%doc>
133 <img class="${gravatar_class}" src="${h.gravatar_url(email, size * 2)}" height="${size}" width="${size}">
133 <img class="${gravatar_class}" src="${h.gravatar_url(email, size * 2)}" height="${size}" width="${size}">
134 </%def>
134 </%def>
135
135
136
136
137 <%def name="gravatar_with_user(contact, size=16, show_disabled=False)">
137 <%def name="gravatar_with_user(contact, size=16, show_disabled=False)">
138 <% email = h.email_or_none(contact) %>
138 <% email = h.email_or_none(contact) %>
139 <div class="rc-user tooltip" title="${h.tooltip(h.author_string(email))}">
139 <div class="rc-user tooltip" title="${h.tooltip(h.author_string(email))}">
140 ${self.gravatar(email, size)}
140 ${self.gravatar(email, size)}
141 <span class="${'user user-disabled' if show_disabled else 'user'}"> ${h.link_to_user(contact)}</span>
141 <span class="${'user user-disabled' if show_disabled else 'user'}"> ${h.link_to_user(contact)}</span>
142 </div>
142 </div>
143 </%def>
143 </%def>
144
144
145
145
146 ## admin menu used for people that have some admin resources
146 ## admin menu used for people that have some admin resources
147 <%def name="admin_menu_simple(repositories=None, repository_groups=None, user_groups=None)">
147 <%def name="admin_menu_simple(repositories=None, repository_groups=None, user_groups=None)">
148 <ul class="submenu">
148 <ul class="submenu">
149 %if repositories:
149 %if repositories:
150 <li class="local-admin-repos"><a href="${h.route_path('repos')}">${_('Repositories')}</a></li>
150 <li class="local-admin-repos"><a href="${h.route_path('repos')}">${_('Repositories')}</a></li>
151 %endif
151 %endif
152 %if repository_groups:
152 %if repository_groups:
153 <li class="local-admin-repo-groups"><a href="${h.route_path('repo_groups')}">${_('Repository groups')}</a></li>
153 <li class="local-admin-repo-groups"><a href="${h.route_path('repo_groups')}">${_('Repository groups')}</a></li>
154 %endif
154 %endif
155 %if user_groups:
155 %if user_groups:
156 <li class="local-admin-user-groups"><a href="${h.route_path('user_groups')}">${_('User groups')}</a></li>
156 <li class="local-admin-user-groups"><a href="${h.route_path('user_groups')}">${_('User groups')}</a></li>
157 %endif
157 %endif
158 </ul>
158 </ul>
159 </%def>
159 </%def>
160
160
161 <%def name="repo_page_title(repo_instance)">
161 <%def name="repo_page_title(repo_instance)">
162 <div class="title-content">
162 <div class="title-content">
163 <div class="title-main">
163 <div class="title-main">
164 ## SVN/HG/GIT icons
164 ## SVN/HG/GIT icons
165 %if h.is_hg(repo_instance):
165 %if h.is_hg(repo_instance):
166 <i class="icon-hg"></i>
166 <i class="icon-hg"></i>
167 %endif
167 %endif
168 %if h.is_git(repo_instance):
168 %if h.is_git(repo_instance):
169 <i class="icon-git"></i>
169 <i class="icon-git"></i>
170 %endif
170 %endif
171 %if h.is_svn(repo_instance):
171 %if h.is_svn(repo_instance):
172 <i class="icon-svn"></i>
172 <i class="icon-svn"></i>
173 %endif
173 %endif
174
174
175 ## public/private
175 ## public/private
176 %if repo_instance.private:
176 %if repo_instance.private:
177 <i class="icon-repo-private"></i>
177 <i class="icon-repo-private"></i>
178 %else:
178 %else:
179 <i class="icon-repo-public"></i>
179 <i class="icon-repo-public"></i>
180 %endif
180 %endif
181
181
182 ## repo name with group name
182 ## repo name with group name
183 ${h.breadcrumb_repo_link(c.rhodecode_db_repo)}
183 ${h.breadcrumb_repo_link(c.rhodecode_db_repo)}
184
184
185 </div>
185 </div>
186
186
187 ## FORKED
187 ## FORKED
188 %if repo_instance.fork:
188 %if repo_instance.fork:
189 <p>
189 <p>
190 <i class="icon-code-fork"></i> ${_('Fork of')}
190 <i class="icon-code-fork"></i> ${_('Fork of')}
191 <a href="${h.route_path('repo_summary',repo_name=repo_instance.fork.repo_name)}">${repo_instance.fork.repo_name}</a>
191 <a href="${h.route_path('repo_summary',repo_name=repo_instance.fork.repo_name)}">${repo_instance.fork.repo_name}</a>
192 </p>
192 </p>
193 %endif
193 %endif
194
194
195 ## IMPORTED FROM REMOTE
195 ## IMPORTED FROM REMOTE
196 %if repo_instance.clone_uri:
196 %if repo_instance.clone_uri:
197 <p>
197 <p>
198 <i class="icon-code-fork"></i> ${_('Clone from')}
198 <i class="icon-code-fork"></i> ${_('Clone from')}
199 <a href="${h.safe_str(h.hide_credentials(repo_instance.clone_uri))}">${h.hide_credentials(repo_instance.clone_uri)}</a>
199 <a href="${h.safe_str(h.hide_credentials(repo_instance.clone_uri))}">${h.hide_credentials(repo_instance.clone_uri)}</a>
200 </p>
200 </p>
201 %endif
201 %endif
202
202
203 ## LOCKING STATUS
203 ## LOCKING STATUS
204 %if repo_instance.locked[0]:
204 %if repo_instance.locked[0]:
205 <p class="locking_locked">
205 <p class="locking_locked">
206 <i class="icon-repo-lock"></i>
206 <i class="icon-repo-lock"></i>
207 ${_('Repository locked by %(user)s') % {'user': h.person_by_id(repo_instance.locked[0])}}
207 ${_('Repository locked by %(user)s') % {'user': h.person_by_id(repo_instance.locked[0])}}
208 </p>
208 </p>
209 %elif repo_instance.enable_locking:
209 %elif repo_instance.enable_locking:
210 <p class="locking_unlocked">
210 <p class="locking_unlocked">
211 <i class="icon-repo-unlock"></i>
211 <i class="icon-repo-unlock"></i>
212 ${_('Repository not locked. Pull repository to lock it.')}
212 ${_('Repository not locked. Pull repository to lock it.')}
213 </p>
213 </p>
214 %endif
214 %endif
215
215
216 </div>
216 </div>
217 </%def>
217 </%def>
218
218
219 <%def name="repo_menu(active=None)">
219 <%def name="repo_menu(active=None)">
220 <%
220 <%
221 def is_active(selected):
221 def is_active(selected):
222 if selected == active:
222 if selected == active:
223 return "active"
223 return "active"
224 %>
224 %>
225
225
226 <!--- CONTEXT BAR -->
226 <!--- CONTEXT BAR -->
227 <div id="context-bar">
227 <div id="context-bar">
228 <div class="wrapper">
228 <div class="wrapper">
229 <ul id="context-pages" class="navigation horizontal-list">
229 <ul id="context-pages" class="navigation horizontal-list">
230 <li class="${is_active('summary')}"><a class="menulink" href="${h.route_path('repo_summary', repo_name=c.repo_name)}"><div class="menulabel">${_('Summary')}</div></a></li>
230 <li class="${is_active('summary')}"><a class="menulink" href="${h.route_path('repo_summary', repo_name=c.repo_name)}"><div class="menulabel">${_('Summary')}</div></a></li>
231 <li class="${is_active('changelog')}"><a class="menulink" href="${h.route_path('repo_changelog', repo_name=c.repo_name)}"><div class="menulabel">${_('Changelog')}</div></a></li>
231 <li class="${is_active('changelog')}"><a class="menulink" href="${h.route_path('repo_changelog', repo_name=c.repo_name)}"><div class="menulabel">${_('Changelog')}</div></a></li>
232 <li class="${is_active('files')}"><a class="menulink" href="${h.route_path('repo_files', repo_name=c.repo_name, commit_id=c.rhodecode_db_repo.landing_rev[1], f_path='')}"><div class="menulabel">${_('Files')}</div></a></li>
232 <li class="${is_active('files')}"><a class="menulink" href="${h.route_path('repo_files', repo_name=c.repo_name, commit_id=c.rhodecode_db_repo.landing_rev[1], f_path='')}"><div class="menulabel">${_('Files')}</div></a></li>
233 <li class="${is_active('compare')}"><a class="menulink" href="${h.route_path('repo_compare_select',repo_name=c.repo_name)}"><div class="menulabel">${_('Compare')}</div></a></li>
233 <li class="${is_active('compare')}"><a class="menulink" href="${h.route_path('repo_compare_select',repo_name=c.repo_name)}"><div class="menulabel">${_('Compare')}</div></a></li>
234 ## TODO: anderson: ideally it would have a function on the scm_instance "enable_pullrequest() and enable_fork()"
234 ## TODO: anderson: ideally it would have a function on the scm_instance "enable_pullrequest() and enable_fork()"
235 %if c.rhodecode_db_repo.repo_type in ['git','hg']:
235 %if c.rhodecode_db_repo.repo_type in ['git','hg']:
236 <li class="${is_active('showpullrequest')}">
236 <li class="${is_active('showpullrequest')}">
237 <a class="menulink" href="${h.route_path('pullrequest_show_all', repo_name=c.repo_name)}" title="${h.tooltip(_('Show Pull Requests for %s') % c.repo_name)}">
237 <a class="menulink" href="${h.route_path('pullrequest_show_all', repo_name=c.repo_name)}" title="${h.tooltip(_('Show Pull Requests for %s') % c.repo_name)}">
238 %if c.repository_pull_requests:
238 %if c.repository_pull_requests:
239 <span class="pr_notifications">${c.repository_pull_requests}</span>
239 <span class="pr_notifications">${c.repository_pull_requests}</span>
240 %endif
240 %endif
241 <div class="menulabel">${_('Pull Requests')}</div>
241 <div class="menulabel">${_('Pull Requests')}</div>
242 </a>
242 </a>
243 </li>
243 </li>
244 %endif
244 %endif
245 <li class="${is_active('options')}">
245 <li class="${is_active('options')}">
246 <a class="menulink dropdown">
246 <a class="menulink dropdown">
247 <div class="menulabel">${_('Options')} <div class="show_more"></div></div>
247 <div class="menulabel">${_('Options')} <div class="show_more"></div></div>
248 </a>
248 </a>
249 <ul class="submenu">
249 <ul class="submenu">
250 %if h.HasRepoPermissionAll('repository.admin')(c.repo_name):
250 %if h.HasRepoPermissionAll('repository.admin')(c.repo_name):
251 <li><a href="${h.route_path('edit_repo',repo_name=c.repo_name)}">${_('Settings')}</a></li>
251 <li><a href="${h.route_path('edit_repo',repo_name=c.repo_name)}">${_('Settings')}</a></li>
252 %endif
252 %endif
253 %if c.rhodecode_db_repo.fork:
253 %if c.rhodecode_db_repo.fork:
254 <li>
254 <li>
255 <a title="${h.tooltip(_('Compare fork with %s' % c.rhodecode_db_repo.fork.repo_name))}"
255 <a title="${h.tooltip(_('Compare fork with %s' % c.rhodecode_db_repo.fork.repo_name))}"
256 href="${h.route_path('repo_compare',
256 href="${h.route_path('repo_compare',
257 repo_name=c.rhodecode_db_repo.fork.repo_name,
257 repo_name=c.rhodecode_db_repo.fork.repo_name,
258 source_ref_type=c.rhodecode_db_repo.landing_rev[0],
258 source_ref_type=c.rhodecode_db_repo.landing_rev[0],
259 source_ref=c.rhodecode_db_repo.landing_rev[1],
259 source_ref=c.rhodecode_db_repo.landing_rev[1],
260 target_repo=c.repo_name,target_ref_type='branch' if request.GET.get('branch') else c.rhodecode_db_repo.landing_rev[0],
260 target_repo=c.repo_name,target_ref_type='branch' if request.GET.get('branch') else c.rhodecode_db_repo.landing_rev[0],
261 target_ref=request.GET.get('branch') or c.rhodecode_db_repo.landing_rev[1],
261 target_ref=request.GET.get('branch') or c.rhodecode_db_repo.landing_rev[1],
262 _query=dict(merge=1))}"
262 _query=dict(merge=1))}"
263 >
263 >
264 ${_('Compare fork')}
264 ${_('Compare fork')}
265 </a>
265 </a>
266 </li>
266 </li>
267 %endif
267 %endif
268
268
269 <li><a href="${h.route_path('search_repo',repo_name=c.repo_name)}">${_('Search')}</a></li>
269 <li><a href="${h.route_path('search_repo',repo_name=c.repo_name)}">${_('Search')}</a></li>
270
270
271 %if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name) and c.rhodecode_db_repo.enable_locking:
271 %if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name) and c.rhodecode_db_repo.enable_locking:
272 %if c.rhodecode_db_repo.locked[0]:
272 %if c.rhodecode_db_repo.locked[0]:
273 <li><a class="locking_del" href="${h.route_path('repo_edit_toggle_locking',repo_name=c.repo_name)}">${_('Unlock')}</a></li>
273 <li><a class="locking_del" href="${h.route_path('repo_edit_toggle_locking',repo_name=c.repo_name)}">${_('Unlock')}</a></li>
274 %else:
274 %else:
275 <li><a class="locking_add" href="${h.route_path('repo_edit_toggle_locking',repo_name=c.repo_name)}">${_('Lock')}</a></li>
275 <li><a class="locking_add" href="${h.route_path('repo_edit_toggle_locking',repo_name=c.repo_name)}">${_('Lock')}</a></li>
276 %endif
276 %endif
277 %endif
277 %endif
278 %if c.rhodecode_user.username != h.DEFAULT_USER:
278 %if c.rhodecode_user.username != h.DEFAULT_USER:
279 %if c.rhodecode_db_repo.repo_type in ['git','hg']:
279 %if c.rhodecode_db_repo.repo_type in ['git','hg']:
280 <li><a href="${h.route_path('repo_fork_new',repo_name=c.repo_name)}">${_('Fork')}</a></li>
280 <li><a href="${h.route_path('repo_fork_new',repo_name=c.repo_name)}">${_('Fork')}</a></li>
281 <li><a href="${h.route_path('pullrequest_new',repo_name=c.repo_name)}">${_('Create Pull Request')}</a></li>
281 <li><a href="${h.route_path('pullrequest_new',repo_name=c.repo_name)}">${_('Create Pull Request')}</a></li>
282 %endif
282 %endif
283 %endif
283 %endif
284 </ul>
284 </ul>
285 </li>
285 </li>
286 </ul>
286 </ul>
287 </div>
287 </div>
288 <div class="clear"></div>
288 <div class="clear"></div>
289 </div>
289 </div>
290 <!--- END CONTEXT BAR -->
290 <!--- END CONTEXT BAR -->
291
291
292 </%def>
292 </%def>
293
293
294 <%def name="usermenu(active=False)">
294 <%def name="usermenu(active=False)">
295 ## USER MENU
295 ## USER MENU
296 <li id="quick_login_li" class="${'active' if active else ''}">
296 <li id="quick_login_li" class="${'active' if active else ''}">
297 <a id="quick_login_link" class="menulink childs">
297 <a id="quick_login_link" class="menulink childs">
298 ${gravatar(c.rhodecode_user.email, 20)}
298 ${gravatar(c.rhodecode_user.email, 20)}
299 <span class="user">
299 <span class="user">
300 %if c.rhodecode_user.username != h.DEFAULT_USER:
300 %if c.rhodecode_user.username != h.DEFAULT_USER:
301 <span class="menu_link_user">${c.rhodecode_user.username}</span><div class="show_more"></div>
301 <span class="menu_link_user">${c.rhodecode_user.username}</span><div class="show_more"></div>
302 %else:
302 %else:
303 <span>${_('Sign in')}</span>
303 <span>${_('Sign in')}</span>
304 %endif
304 %endif
305 </span>
305 </span>
306 </a>
306 </a>
307
307
308 <div class="user-menu submenu">
308 <div class="user-menu submenu">
309 <div id="quick_login">
309 <div id="quick_login">
310 %if c.rhodecode_user.username == h.DEFAULT_USER:
310 %if c.rhodecode_user.username == h.DEFAULT_USER:
311 <h4>${_('Sign in to your account')}</h4>
311 <h4>${_('Sign in to your account')}</h4>
312 ${h.form(h.route_path('login', _query={'came_from': h.current_route_path(request)}), needs_csrf_token=False)}
312 ${h.form(h.route_path('login', _query={'came_from': h.current_route_path(request)}), needs_csrf_token=False)}
313 <div class="form form-vertical">
313 <div class="form form-vertical">
314 <div class="fields">
314 <div class="fields">
315 <div class="field">
315 <div class="field">
316 <div class="label">
316 <div class="label">
317 <label for="username">${_('Username')}:</label>
317 <label for="username">${_('Username')}:</label>
318 </div>
318 </div>
319 <div class="input">
319 <div class="input">
320 ${h.text('username',class_='focus',tabindex=1)}
320 ${h.text('username',class_='focus',tabindex=1)}
321 </div>
321 </div>
322
322
323 </div>
323 </div>
324 <div class="field">
324 <div class="field">
325 <div class="label">
325 <div class="label">
326 <label for="password">${_('Password')}:</label>
326 <label for="password">${_('Password')}:</label>
327 %if h.HasPermissionAny('hg.password_reset.enabled')():
327 %if h.HasPermissionAny('hg.password_reset.enabled')():
328 <span class="forgot_password">${h.link_to(_('(Forgot password?)'),h.route_path('reset_password'), class_='pwd_reset')}</span>
328 <span class="forgot_password">${h.link_to(_('(Forgot password?)'),h.route_path('reset_password'), class_='pwd_reset')}</span>
329 %endif
329 %endif
330 </div>
330 </div>
331 <div class="input">
331 <div class="input">
332 ${h.password('password',class_='focus',tabindex=2)}
332 ${h.password('password',class_='focus',tabindex=2)}
333 </div>
333 </div>
334 </div>
334 </div>
335 <div class="buttons">
335 <div class="buttons">
336 <div class="register">
336 <div class="register">
337 %if h.HasPermissionAny('hg.admin', 'hg.register.auto_activate', 'hg.register.manual_activate')():
337 %if h.HasPermissionAny('hg.admin', 'hg.register.auto_activate', 'hg.register.manual_activate')():
338 ${h.link_to(_("Don't have an account?"),h.route_path('register'))} <br/>
338 ${h.link_to(_("Don't have an account?"),h.route_path('register'))} <br/>
339 %endif
339 %endif
340 ${h.link_to(_("Using external auth? Sign In here."),h.route_path('login'))}
340 ${h.link_to(_("Using external auth? Sign In here."),h.route_path('login'))}
341 </div>
341 </div>
342 <div class="submit">
342 <div class="submit">
343 ${h.submit('sign_in',_('Sign In'),class_="btn btn-small",tabindex=3)}
343 ${h.submit('sign_in',_('Sign In'),class_="btn btn-small",tabindex=3)}
344 </div>
344 </div>
345 </div>
345 </div>
346 </div>
346 </div>
347 </div>
347 </div>
348 ${h.end_form()}
348 ${h.end_form()}
349 %else:
349 %else:
350 <div class="">
350 <div class="">
351 <div class="big_gravatar">${gravatar(c.rhodecode_user.email, 48)}</div>
351 <div class="big_gravatar">${gravatar(c.rhodecode_user.email, 48)}</div>
352 <div class="full_name">${c.rhodecode_user.full_name_or_username}</div>
352 <div class="full_name">${c.rhodecode_user.full_name_or_username}</div>
353 <div class="email">${c.rhodecode_user.email}</div>
353 <div class="email">${c.rhodecode_user.email}</div>
354 </div>
354 </div>
355 <div class="">
355 <div class="">
356 <ol class="links">
356 <ol class="links">
357 <li>${h.link_to(_(u'My account'),h.route_path('my_account_profile'))}</li>
357 <li>${h.link_to(_(u'My account'),h.route_path('my_account_profile'))}</li>
358 % if c.rhodecode_user.personal_repo_group:
358 % if c.rhodecode_user.personal_repo_group:
359 <li>${h.link_to(_(u'My personal group'), h.route_path('repo_group_home', repo_group_name=c.rhodecode_user.personal_repo_group.group_name))}</li>
359 <li>${h.link_to(_(u'My personal group'), h.route_path('repo_group_home', repo_group_name=c.rhodecode_user.personal_repo_group.group_name))}</li>
360 % endif
360 % endif
361 <li>${h.link_to(_(u'Pull Requests'), h.route_path('my_account_pullrequests'))}</li>
361 <li>${h.link_to(_(u'Pull Requests'), h.route_path('my_account_pullrequests'))}</li>
362
362
363 <li class="logout">
363 <li class="logout">
364 ${h.secure_form(h.route_path('logout'), request=request)}
364 ${h.secure_form(h.route_path('logout'), request=request)}
365 ${h.submit('log_out', _(u'Sign Out'),class_="btn btn-primary")}
365 ${h.submit('log_out', _(u'Sign Out'),class_="btn btn-primary")}
366 ${h.end_form()}
366 ${h.end_form()}
367 </li>
367 </li>
368 </ol>
368 </ol>
369 </div>
369 </div>
370 %endif
370 %endif
371 </div>
371 </div>
372 </div>
372 </div>
373 %if c.rhodecode_user.username != h.DEFAULT_USER:
373 %if c.rhodecode_user.username != h.DEFAULT_USER:
374 <div class="pill_container">
374 <div class="pill_container">
375 <a class="menu_link_notifications ${'empty' if c.unread_notifications == 0 else ''}" href="${h.route_path('notifications_show_all')}">${c.unread_notifications}</a>
375 <a class="menu_link_notifications ${'empty' if c.unread_notifications == 0 else ''}" href="${h.route_path('notifications_show_all')}">${c.unread_notifications}</a>
376 </div>
376 </div>
377 % endif
377 % endif
378 </li>
378 </li>
379 </%def>
379 </%def>
380
380
381 <%def name="menu_items(active=None)">
381 <%def name="menu_items(active=None)">
382 <%
382 <%
383 def is_active(selected):
383 def is_active(selected):
384 if selected == active:
384 if selected == active:
385 return "active"
385 return "active"
386 return ""
386 return ""
387 %>
387 %>
388 <ul id="quick" class="main_nav navigation horizontal-list">
389
388
390 ## Main filter
389 <ul id="quick" class="main_nav navigation horizontal-list">
390 ## notice box for important system messages
391 <li style="display: none">
392 <a class="notice-box" href="#openNotice" onclick="showNoticeBox(); return false">
393 <div class="menulabel-notice" >
394 0
395 </div>
396 </a>
397 </li>
398
399 ## Main filter
391 <li>
400 <li>
392 <div class="menulabel main_filter_box">
401 <div class="menulabel main_filter_box">
393 <div class="main_filter_input_box">
402 <div class="main_filter_input_box">
394 <input class="main_filter_input" id="main_filter" size="15" type="text" name="main_filter" placeholder="${_('search / go to...')}" value=""/>
403 <input class="main_filter_input" id="main_filter" size="15" type="text" name="main_filter" placeholder="${_('search / go to...')}" value=""/>
395 </div>
404 </div>
396 <div class="main_filter_help_box">
405 <div class="main_filter_help_box">
397 <a href="#showFilterHelp" onclick="showMainFilterBox(); return false">?</a>
406 <a href="#showFilterHelp" onclick="showMainFilterBox(); return false">?</a>
398 </div>
407 </div>
399 </div>
408 </div>
400
409
401 <div id="main_filter_help" style="display: none">
410 <div id="main_filter_help" style="display: none">
402 Use '/' key to quickly access this field.
411 Use '/' key to quickly access this field.
403 Enter name of repository, or repository group for quick search.
412 Enter name of repository, or repository group for quick search.
404
413
405 Prefix query to allow special search:
414 Prefix query to allow special search:
406
415
407 user:admin, to search for usernames
416 user:admin, to search for usernames
408
417
409 user_group:devops, to search for user groups
418 user_group:devops, to search for user groups
410
419
411 commit:efced4, to search for commits
420 commit:efced4, to search for commits
412
421
413 </div>
422 </div>
414 </li>
423 </li>
415
424
416 ## ROOT MENU
425 ## ROOT MENU
417 %if c.rhodecode_user.username != h.DEFAULT_USER:
426 %if c.rhodecode_user.username != h.DEFAULT_USER:
418 <li class="${is_active('journal')}">
427 <li class="${is_active('journal')}">
419 <a class="menulink" title="${_('Show activity journal')}" href="${h.route_path('journal')}">
428 <a class="menulink" title="${_('Show activity journal')}" href="${h.route_path('journal')}">
420 <div class="menulabel">${_('Journal')}</div>
429 <div class="menulabel">${_('Journal')}</div>
421 </a>
430 </a>
422 </li>
431 </li>
423 %else:
432 %else:
424 <li class="${is_active('journal')}">
433 <li class="${is_active('journal')}">
425 <a class="menulink" title="${_('Show Public activity journal')}" href="${h.route_path('journal_public')}">
434 <a class="menulink" title="${_('Show Public activity journal')}" href="${h.route_path('journal_public')}">
426 <div class="menulabel">${_('Public journal')}</div>
435 <div class="menulabel">${_('Public journal')}</div>
427 </a>
436 </a>
428 </li>
437 </li>
429 %endif
438 %endif
430 <li class="${is_active('gists')}">
439 <li class="${is_active('gists')}">
431 <a class="menulink childs" title="${_('Show Gists')}" href="${h.route_path('gists_show')}">
440 <a class="menulink childs" title="${_('Show Gists')}" href="${h.route_path('gists_show')}">
432 <div class="menulabel">${_('Gists')}</div>
441 <div class="menulabel">${_('Gists')}</div>
433 </a>
442 </a>
434 </li>
443 </li>
435 <li class="${is_active('search')}">
444 <li class="${is_active('search')}">
436 <a class="menulink" title="${_('Search in repositories you have access to')}" href="${h.route_path('search')}">
445 <a class="menulink" title="${_('Search in repositories you have access to')}" href="${h.route_path('search')}">
437 <div class="menulabel">${_('Search')}</div>
446 <div class="menulabel">${_('Search')}</div>
438 </a>
447 </a>
439 </li>
448 </li>
440 % if h.HasPermissionAll('hg.admin')('access admin main page'):
449 % if h.HasPermissionAll('hg.admin')('access admin main page'):
441 <li class="${is_active('admin')}">
450 <li class="${is_active('admin')}">
442 <a class="menulink childs" title="${_('Admin settings')}" href="#" onclick="return false;">
451 <a class="menulink childs" title="${_('Admin settings')}" href="#" onclick="return false;">
443 <div class="menulabel">${_('Admin')} <div class="show_more"></div></div>
452 <div class="menulabel">${_('Admin')} <div class="show_more"></div></div>
444 </a>
453 </a>
445 ${admin_menu()}
454 ${admin_menu()}
446 </li>
455 </li>
447 % elif c.rhodecode_user.repositories_admin or c.rhodecode_user.repository_groups_admin or c.rhodecode_user.user_groups_admin:
456 % elif c.rhodecode_user.repositories_admin or c.rhodecode_user.repository_groups_admin or c.rhodecode_user.user_groups_admin:
448 <li class="${is_active('admin')}">
457 <li class="${is_active('admin')}">
449 <a class="menulink childs" title="${_('Delegated Admin settings')}">
458 <a class="menulink childs" title="${_('Delegated Admin settings')}">
450 <div class="menulabel">${_('Admin')} <div class="show_more"></div></div>
459 <div class="menulabel">${_('Admin')} <div class="show_more"></div></div>
451 </a>
460 </a>
452 ${admin_menu_simple(c.rhodecode_user.repositories_admin,
461 ${admin_menu_simple(c.rhodecode_user.repositories_admin,
453 c.rhodecode_user.repository_groups_admin,
462 c.rhodecode_user.repository_groups_admin,
454 c.rhodecode_user.user_groups_admin or h.HasPermissionAny('hg.usergroup.create.true')())}
463 c.rhodecode_user.user_groups_admin or h.HasPermissionAny('hg.usergroup.create.true')())}
455 </li>
464 </li>
456 % endif
465 % endif
457 ## render extra user menu
466 ## render extra user menu
458 ${usermenu(active=(active=='my_account'))}
467 ${usermenu(active=(active=='my_account'))}
459
468
460 % if c.debug_style:
469 % if c.debug_style:
461 <li>
470 <li>
462 <a class="menulink" title="${_('Style')}" href="${h.route_path('debug_style_home')}">
471 <a class="menulink" title="${_('Style')}" href="${h.route_path('debug_style_home')}">
463 <div class="menulabel">${_('[Style]')}</div>
472 <div class="menulabel">${_('[Style]')}</div>
464 </a>
473 </a>
465 </li>
474 </li>
466 % endif
475 % endif
467 </ul>
476 </ul>
468
477
469 <script type="text/javascript">
478 <script type="text/javascript">
470 var visualShowPublicIcon = "${c.visual.show_public_icon}" == "True";
479 var visualShowPublicIcon = "${c.visual.show_public_icon}" == "True";
471
480
472 var formatRepoResult = function(result, container, query, escapeMarkup) {
481 var formatRepoResult = function(result, container, query, escapeMarkup) {
473 return function(data, escapeMarkup) {
482 return function(data, escapeMarkup) {
474 if (!data.repo_id){
483 if (!data.repo_id){
475 return data.text; // optgroup text Repositories
484 return data.text; // optgroup text Repositories
476 }
485 }
477
486
478 var tmpl = '';
487 var tmpl = '';
479 var repoType = data['repo_type'];
488 var repoType = data['repo_type'];
480 var repoName = data['text'];
489 var repoName = data['text'];
481
490
482 if(data && data.type == 'repo'){
491 if(data && data.type == 'repo'){
483 if(repoType === 'hg'){
492 if(repoType === 'hg'){
484 tmpl += '<i class="icon-hg"></i> ';
493 tmpl += '<i class="icon-hg"></i> ';
485 }
494 }
486 else if(repoType === 'git'){
495 else if(repoType === 'git'){
487 tmpl += '<i class="icon-git"></i> ';
496 tmpl += '<i class="icon-git"></i> ';
488 }
497 }
489 else if(repoType === 'svn'){
498 else if(repoType === 'svn'){
490 tmpl += '<i class="icon-svn"></i> ';
499 tmpl += '<i class="icon-svn"></i> ';
491 }
500 }
492 if(data['private']){
501 if(data['private']){
493 tmpl += '<i class="icon-lock" ></i> ';
502 tmpl += '<i class="icon-lock" ></i> ';
494 }
503 }
495 else if(visualShowPublicIcon){
504 else if(visualShowPublicIcon){
496 tmpl += '<i class="icon-unlock-alt"></i> ';
505 tmpl += '<i class="icon-unlock-alt"></i> ';
497 }
506 }
498 }
507 }
499 tmpl += escapeMarkup(repoName);
508 tmpl += escapeMarkup(repoName);
500 return tmpl;
509 return tmpl;
501
510
502 }(result, escapeMarkup);
511 }(result, escapeMarkup);
503 };
512 };
504
513
505
514
506 var autocompleteMainFilterFormatResult = function (data, value, org_formatter) {
515 var autocompleteMainFilterFormatResult = function (data, value, org_formatter) {
507
516
508 if (value.split(':').length === 2) {
517 if (value.split(':').length === 2) {
509 value = value.split(':')[1]
518 value = value.split(':')[1]
510 }
519 }
511
520
512 var searchType = data['type'];
521 var searchType = data['type'];
513 var valueDisplay = data['value_display'];
522 var valueDisplay = data['value_display'];
514
523
515 var escapeRegExChars = function (value) {
524 var escapeRegExChars = function (value) {
516 return value.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
525 return value.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
517 };
526 };
518 var pattern = '(' + escapeRegExChars(value) + ')';
527 var pattern = '(' + escapeRegExChars(value) + ')';
519
528
520 // highlight match
529 // highlight match
521 valueDisplay = Select2.util.escapeMarkup(valueDisplay);
530 valueDisplay = Select2.util.escapeMarkup(valueDisplay);
522 valueDisplay = valueDisplay.replace(new RegExp(pattern, 'gi'), '<strong>$1<\/strong>');
531 valueDisplay = valueDisplay.replace(new RegExp(pattern, 'gi'), '<strong>$1<\/strong>');
523
532
524 var icon = '';
533 var icon = '';
525
534
526 if (searchType === 'hint') {
535 if (searchType === 'hint') {
527 icon += '<i class="icon-folder-close"></i> ';
536 icon += '<i class="icon-folder-close"></i> ';
528 }
537 }
529 else if (searchType === 'search') {
538 else if (searchType === 'search') {
530 icon += '<i class="icon-more"></i> ';
539 icon += '<i class="icon-more"></i> ';
531 }
540 }
532 else if (searchType === 'repo') {
541 else if (searchType === 'repo') {
533 if (data['repo_type'] === 'hg') {
542 if (data['repo_type'] === 'hg') {
534 icon += '<i class="icon-hg"></i> ';
543 icon += '<i class="icon-hg"></i> ';
535 }
544 }
536 else if (data['repo_type'] === 'git') {
545 else if (data['repo_type'] === 'git') {
537 icon += '<i class="icon-git"></i> ';
546 icon += '<i class="icon-git"></i> ';
538 }
547 }
539 else if (data['repo_type'] === 'svn') {
548 else if (data['repo_type'] === 'svn') {
540 icon += '<i class="icon-svn"></i> ';
549 icon += '<i class="icon-svn"></i> ';
541 }
550 }
542 if (data['private']) {
551 if (data['private']) {
543 icon += '<i class="icon-lock" ></i> ';
552 icon += '<i class="icon-lock" ></i> ';
544 }
553 }
545 else if (visualShowPublicIcon) {
554 else if (visualShowPublicIcon) {
546 icon += '<i class="icon-unlock-alt"></i> ';
555 icon += '<i class="icon-unlock-alt"></i> ';
547 }
556 }
548 }
557 }
549 else if (searchType === 'repo_group') {
558 else if (searchType === 'repo_group') {
550 icon += '<i class="icon-folder-close"></i> ';
559 icon += '<i class="icon-folder-close"></i> ';
551 }
560 }
552 else if (searchType === 'user_group') {
561 else if (searchType === 'user_group') {
553 icon += '<i class="icon-group"></i> ';
562 icon += '<i class="icon-group"></i> ';
554 }
563 }
555 else if (searchType === 'user') {
564 else if (searchType === 'user') {
556 icon += '<img class="gravatar" src="{0}"/>'.format(data['icon_link']);
565 icon += '<img class="gravatar" src="{0}"/>'.format(data['icon_link']);
557 }
566 }
558 else if (searchType === 'commit') {
567 else if (searchType === 'commit') {
559 icon += '<i class="icon-tag"></i>';
568 icon += '<i class="icon-tag"></i>';
560 }
569 }
561
570
562 var tmpl = '<div class="ac-container-wrap">{0}{1}</div>';
571 var tmpl = '<div class="ac-container-wrap">{0}{1}</div>';
563 return tmpl.format(icon, valueDisplay);
572 return tmpl.format(icon, valueDisplay);
564 };
573 };
565
574
566 var handleSelect = function(element, suggestion) {
575 var handleSelect = function(element, suggestion) {
567 if (suggestion.type === "hint") {
576 if (suggestion.type === "hint") {
568 // we skip action
577 // we skip action
569 $('#main_filter').focus();
578 $('#main_filter').focus();
570 } else {
579 } else {
571 window.location = suggestion['url'];
580 window.location = suggestion['url'];
572 }
581 }
573 };
582 };
574 var autocompleteMainFilterResult = function (suggestion, originalQuery, queryLowerCase) {
583 var autocompleteMainFilterResult = function (suggestion, originalQuery, queryLowerCase) {
575 if (queryLowerCase.split(':').length === 2) {
584 if (queryLowerCase.split(':').length === 2) {
576 queryLowerCase = queryLowerCase.split(':')[1]
585 queryLowerCase = queryLowerCase.split(':')[1]
577 }
586 }
578 return suggestion.value_display.toLowerCase().indexOf(queryLowerCase) !== -1;
587 return suggestion.value_display.toLowerCase().indexOf(queryLowerCase) !== -1;
579 };
588 };
580
589
581 $('#main_filter').autocomplete({
590 $('#main_filter').autocomplete({
582 serviceUrl: pyroutes.url('goto_switcher_data'),
591 serviceUrl: pyroutes.url('goto_switcher_data'),
583 params: {"repo_group_id": templateContext.repo_group_id},
592 params: {"repo_group_id": templateContext.repo_group_id},
584 minChars:2,
593 minChars:2,
585 maxHeight:400,
594 maxHeight:400,
586 deferRequestBy: 300, //miliseconds
595 deferRequestBy: 300, //miliseconds
587 tabDisabled: true,
596 tabDisabled: true,
588 autoSelectFirst: true,
597 autoSelectFirst: true,
589 formatResult: autocompleteMainFilterFormatResult,
598 formatResult: autocompleteMainFilterFormatResult,
590 lookupFilter: autocompleteMainFilterResult,
599 lookupFilter: autocompleteMainFilterResult,
591 onSelect: function(element, suggestion){
600 onSelect: function(element, suggestion){
592 handleSelect(element, suggestion);
601 handleSelect(element, suggestion);
593 return false;
602 return false;
594 }
603 }
595 });
604 });
596
605
597 showMainFilterBox = function () {
606 showMainFilterBox = function () {
598 $('#main_filter_help').toggle();
607 $('#main_filter_help').toggle();
599 }
608 }
600
609
601 </script>
610 </script>
602 <script src="${h.asset('js/rhodecode/base/keyboard-bindings.js', ver=c.rhodecode_version_hash)}"></script>
611 <script src="${h.asset('js/rhodecode/base/keyboard-bindings.js', ver=c.rhodecode_version_hash)}"></script>
603 </%def>
612 </%def>
604
613
605 <div class="modal" id="help_kb" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
614 <div class="modal" id="help_kb" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
606 <div class="modal-dialog">
615 <div class="modal-dialog">
607 <div class="modal-content">
616 <div class="modal-content">
608 <div class="modal-header">
617 <div class="modal-header">
609 <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
618 <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
610 <h4 class="modal-title" id="myModalLabel">${_('Keyboard shortcuts')}</h4>
619 <h4 class="modal-title" id="myModalLabel">${_('Keyboard shortcuts')}</h4>
611 </div>
620 </div>
612 <div class="modal-body">
621 <div class="modal-body">
613 <div class="block-left">
622 <div class="block-left">
614 <table class="keyboard-mappings">
623 <table class="keyboard-mappings">
615 <tbody>
624 <tbody>
616 <tr>
625 <tr>
617 <th></th>
626 <th></th>
618 <th>${_('Site-wide shortcuts')}</th>
627 <th>${_('Site-wide shortcuts')}</th>
619 </tr>
628 </tr>
620 <%
629 <%
621 elems = [
630 elems = [
622 ('/', 'Use quick search box'),
631 ('/', 'Use quick search box'),
623 ('g h', 'Goto home page'),
632 ('g h', 'Goto home page'),
624 ('g g', 'Goto my private gists page'),
633 ('g g', 'Goto my private gists page'),
625 ('g G', 'Goto my public gists page'),
634 ('g G', 'Goto my public gists page'),
626 ('n r', 'New repository page'),
635 ('n r', 'New repository page'),
627 ('n g', 'New gist page'),
636 ('n g', 'New gist page'),
628 ]
637 ]
629 %>
638 %>
630 %for key, desc in elems:
639 %for key, desc in elems:
631 <tr>
640 <tr>
632 <td class="keys">
641 <td class="keys">
633 <span class="key tag">${key}</span>
642 <span class="key tag">${key}</span>
634 </td>
643 </td>
635 <td>${desc}</td>
644 <td>${desc}</td>
636 </tr>
645 </tr>
637 %endfor
646 %endfor
638 </tbody>
647 </tbody>
639 </table>
648 </table>
640 </div>
649 </div>
641 <div class="block-left">
650 <div class="block-left">
642 <table class="keyboard-mappings">
651 <table class="keyboard-mappings">
643 <tbody>
652 <tbody>
644 <tr>
653 <tr>
645 <th></th>
654 <th></th>
646 <th>${_('Repositories')}</th>
655 <th>${_('Repositories')}</th>
647 </tr>
656 </tr>
648 <%
657 <%
649 elems = [
658 elems = [
650 ('g s', 'Goto summary page'),
659 ('g s', 'Goto summary page'),
651 ('g c', 'Goto changelog page'),
660 ('g c', 'Goto changelog page'),
652 ('g f', 'Goto files page'),
661 ('g f', 'Goto files page'),
653 ('g F', 'Goto files page with file search activated'),
662 ('g F', 'Goto files page with file search activated'),
654 ('g p', 'Goto pull requests page'),
663 ('g p', 'Goto pull requests page'),
655 ('g o', 'Goto repository settings'),
664 ('g o', 'Goto repository settings'),
656 ('g O', 'Goto repository permissions settings'),
665 ('g O', 'Goto repository permissions settings'),
657 ]
666 ]
658 %>
667 %>
659 %for key, desc in elems:
668 %for key, desc in elems:
660 <tr>
669 <tr>
661 <td class="keys">
670 <td class="keys">
662 <span class="key tag">${key}</span>
671 <span class="key tag">${key}</span>
663 </td>
672 </td>
664 <td>${desc}</td>
673 <td>${desc}</td>
665 </tr>
674 </tr>
666 %endfor
675 %endfor
667 </tbody>
676 </tbody>
668 </table>
677 </table>
669 </div>
678 </div>
670 </div>
679 </div>
671 <div class="modal-footer">
680 <div class="modal-footer">
672 </div>
681 </div>
673 </div><!-- /.modal-content -->
682 </div><!-- /.modal-content -->
674 </div><!-- /.modal-dialog -->
683 </div><!-- /.modal-dialog -->
675 </div><!-- /.modal -->
684 </div><!-- /.modal -->
676
685
General Comments 0
You need to be logged in to leave comments. Login now