##// END OF EJS Templates
Multiple changes for the navigation and buttons
Liviu -
r3570:b39f2bc2 new-ui
parent child Browse files
Show More
@@ -1,418 +1,422 b''
1 1
2 2
3 3 //BUTTONS
4 4 button,
5 5 .btn,
6 6 input[type="button"] {
7 7 -webkit-appearance: none;
8 8 display: inline-block;
9 9 margin: 0 @padding/3 0 0;
10 10 padding: @button-padding;
11 11 text-align: center;
12 12 font-size: @basefontsize;
13 13 line-height: 1em;
14 14 font-family: @text-light;
15 15 text-decoration: none;
16 16 text-shadow: none;
17 17 color: @grey4;
18 18 background-color: white;
19 19 background-image: none;
20 20 border: none;
21 21 .border ( @border-thickness-buttons, @grey4 );
22 22 .border-radius (@border-radius);
23 23 cursor: pointer;
24 24 white-space: nowrap;
25 25 -webkit-transition: background .3s,color .3s;
26 26 -moz-transition: background .3s,color .3s;
27 27 -o-transition: background .3s,color .3s;
28 28 transition: background .3s,color .3s;
29 box-shadow: @button-shadow;
30 -webkit-box-shadow: @button-shadow;
31
32
29 33
30 34 a {
31 35 display: block;
32 36 margin: 0;
33 37 padding: 0;
34 38 color: inherit;
35 39 text-decoration: none;
36 40
37 41 &:hover {
38 42 text-decoration: none;
39 43 }
40 44 }
41 45
42 46 &:focus,
43 47 &:active {
44 48 outline:none;
45 49 }
46 50 &:hover {
47 51 color: white;
48 52 background-color: @grey4;
49 53 }
50 54
51 55 .icon-remove-sign {
52 56 display: none;
53 57 }
54 58
55 59 //disabled buttons
56 60 //last; overrides any other styles
57 61 &:disabled {
58 62 opacity: .7;
59 63 cursor: auto;
60 64 background-color: white;
61 65 color: @grey4;
62 66 text-shadow: none;
63 67 }
64 68
65 69 &.no-margin {
66 70 margin: 0 0 0 0;
67 71 }
68 72
69 73 }
70 74
71 75
72 76 .btn-default {
73 77 .border ( @border-thickness-buttons, @rcblue );
74 78 background-image: none;
75 79 color: @rcblue;
76 80
77 81 a {
78 82 color: @rcblue;
79 83 }
80 84
81 85 &:hover,
82 86 &.active {
83 color: white;
84 background-color: @rcdarkblue;
87 color: @rcblue;
88 background-color: @grey7;
85 89 .border ( @border-thickness, @rcdarkblue );
86 90
87 91 a {
88 color: white;
92 color: @rcblue;
89 93 }
90 94 }
91 95 &:disabled {
92 96 .border ( @border-thickness-buttons, @grey4 );
93 97 background-color: transparent;
94 98 }
95 99 }
96 100
97 101 .btn-primary,
98 102 .btn-small, /* TODO: anderson: remove .btn-small to not mix with the new btn-sm */
99 103 .btn-success {
100 104 .border ( @border-thickness, @rcblue );
101 105 background-color: @rcblue;
102 106 color: white;
103 107
104 108 a {
105 109 color: white;
106 110 }
107 111
108 112 &:hover,
109 113 &.active {
110 114 .border ( @border-thickness, @rcdarkblue );
111 115 color: white;
112 116 background-color: @rcdarkblue;
113 117
114 118 a {
115 119 color: white;
116 120 }
117 121 }
118 122 &:disabled {
119 123 background-color: @rcblue;
120 124 }
121 125 }
122 126
123 127 .btn-secondary {
124 128 &:extend(.btn-default);
125 129
126 130 background-color: white;
127 131
128 132 &:focus {
129 133 outline: 0;
130 134 }
131 135
132 136 &:hover {
133 137 &:extend(.btn-default:hover);
134 138 }
135 139
136 140 &.btn-link {
137 141 &:extend(.btn-link);
138 142 color: @rcblue;
139 143 }
140 144
141 145 &:disabled {
142 146 color: @rcblue;
143 147 background-color: white;
144 148 }
145 149 }
146 150
147 151 .btn-warning,
148 152 .btn-danger,
149 153 .revoke_perm,
150 154 .btn-x,
151 155 .form .action_button.btn-x {
152 156 .border ( @border-thickness, @alert2 );
153 157 background-color: white;
154 158 color: @alert2;
155 159
156 160 a {
157 161 color: @alert2;
158 162 }
159 163
160 164 &:hover,
161 165 &.active {
162 166 .border ( @border-thickness, @alert2 );
163 167 color: white;
164 168 background-color: @alert2;
165 169
166 170 a {
167 171 color: white;
168 172 }
169 173 }
170 174
171 175 i {
172 176 display:none;
173 177 }
174 178
175 179 &:disabled {
176 180 background-color: white;
177 181 color: @alert2;
178 182 }
179 183 }
180 184
181 185 .btn-approved-status {
182 186 .border ( @border-thickness, @alert1 );
183 187 background-color: white;
184 188 color: @alert1;
185 189
186 190 }
187 191
188 192 .btn-rejected-status {
189 193 .border ( @border-thickness, @alert2 );
190 194 background-color: white;
191 195 color: @alert2;
192 196 }
193 197
194 198 .btn-sm,
195 199 .btn-mini,
196 200 .field-sm .btn {
197 201 padding: @padding/3;
198 202 }
199 203
200 204 .btn-xs {
201 205 padding: @padding/4;
202 206 }
203 207
204 208 .btn-lg {
205 209 padding: @padding * 1.2;
206 210 }
207 211
208 212 .btn-group {
209 213 display: inline-block;
210 214 .btn {
211 215 float: left;
212 216 margin: 0 0 0 -1px;
213 217 }
214 218 }
215 219
216 220 .btn-link {
217 221 background: transparent;
218 222 border: none;
219 223 padding: 0;
220 224 color: @rcblue;
221 225
222 226 &:hover {
223 227 background: transparent;
224 228 border: none;
225 229 color: @rcdarkblue;
226 230 }
227 231
228 232 //disabled buttons
229 233 //last; overrides any other styles
230 234 &:disabled {
231 235 opacity: .7;
232 236 cursor: auto;
233 237 background-color: white;
234 238 color: @grey4;
235 239 text-shadow: none;
236 240 }
237 241
238 242 // TODO: johbo: Check if we can avoid this, indicates that the structure
239 243 // is not yet good.
240 244 // lisa: The button CSS reflects the button HTML; both need a cleanup.
241 245 &.btn-danger {
242 246 color: @alert2;
243 247
244 248 &:hover {
245 249 color: darken(@alert2,30%);
246 250 }
247 251
248 252 &:disabled {
249 253 color: @alert2;
250 254 }
251 255 }
252 256 }
253 257
254 258 .btn-social {
255 259 &:extend(.btn-default);
256 260 margin: 5px 5px 5px 0px;
257 261 min-width: 160px;
258 262 }
259 263
260 264 // TODO: johbo: check these exceptions
261 265
262 266 .links {
263 267
264 268 .btn + .btn {
265 269 margin-top: @padding;
266 270 }
267 271 }
268 272
269 273
270 274 .action_button {
271 275 display:inline;
272 276 margin: 0;
273 277 padding: 0 1em 0 0;
274 278 font-size: inherit;
275 279 color: @rcblue;
276 280 border: none;
277 281 border-radius: 0;
278 282 background-color: transparent;
279 283
280 284 &.last-item {
281 285 border: none;
282 286 padding: 0 0 0 0;
283 287 }
284 288
285 289 &:last-child {
286 290 border: none;
287 291 padding: 0 0 0 0;
288 292 }
289 293
290 294 &:hover {
291 295 color: @rcdarkblue;
292 296 background-color: transparent;
293 297 border: none;
294 298 }
295 299 }
296 300 .grid_delete {
297 301 .action_button {
298 302 border: none;
299 303 }
300 304 }
301 305
302 306
303 307 // TODO: johbo: Form button tweaks, check if we can use the classes instead
304 308 input[type="submit"] {
305 309 &:extend(.btn-primary);
306 310
307 311 &:focus {
308 312 outline: 0;
309 313 }
310 314
311 315 &:hover {
312 316 &:extend(.btn-primary:hover);
313 317 }
314 318
315 319 &.btn-link {
316 320 &:extend(.btn-link);
317 321 color: @rcblue;
318 322
319 323 &:disabled {
320 324 color: @rcblue;
321 325 background-color: transparent;
322 326 }
323 327 }
324 328
325 329 &:disabled {
326 330 .border ( @border-thickness-buttons, @rcblue );
327 331 background-color: @rcblue;
328 332 color: white;
329 333 }
330 334 }
331 335
332 336 input[type="reset"] {
333 337 &:extend(.btn-default);
334 338
335 339 // TODO: johbo: Check if this tweak can be avoided.
336 340 background: transparent;
337 341
338 342 &:focus {
339 343 outline: 0;
340 344 }
341 345
342 346 &:hover {
343 347 &:extend(.btn-default:hover);
344 348 }
345 349
346 350 &.btn-link {
347 351 &:extend(.btn-link);
348 352 color: @rcblue;
349 353
350 354 &:disabled {
351 355 border: none;
352 356 }
353 357 }
354 358
355 359 &:disabled {
356 360 .border ( @border-thickness-buttons, @rcblue );
357 361 background-color: white;
358 362 color: @rcblue;
359 363 }
360 364 }
361 365
362 366 input[type="submit"],
363 367 input[type="reset"] {
364 368 &.btn-danger {
365 369 &:extend(.btn-danger);
366 370
367 371 &:focus {
368 372 outline: 0;
369 373 }
370 374
371 375 &:hover {
372 376 &:extend(.btn-danger:hover);
373 377 }
374 378
375 379 &.btn-link {
376 380 &:extend(.btn-link);
377 381 color: @alert2;
378 382
379 383 &:hover {
380 384 color: darken(@alert2,30%);
381 385 }
382 386 }
383 387
384 388 &:disabled {
385 389 color: @alert2;
386 390 background-color: white;
387 391 }
388 392 }
389 393 &.btn-danger-action {
390 394 .border ( @border-thickness, @alert2 );
391 395 background-color: @alert2;
392 396 color: white;
393 397
394 398 a {
395 399 color: white;
396 400 }
397 401
398 402 &:hover {
399 403 background-color: darken(@alert2,20%);
400 404 }
401 405
402 406 &.active {
403 407 .border ( @border-thickness, @alert2 );
404 408 color: white;
405 409 background-color: @alert2;
406 410
407 411 a {
408 412 color: white;
409 413 }
410 414 }
411 415
412 416 &:disabled {
413 417 background-color: white;
414 418 color: @alert2;
415 419 }
416 420 }
417 421 }
418 422
@@ -1,578 +1,578 b''
1 1 // comments.less
2 2 // For use in RhodeCode applications;
3 3 // see style guide documentation for guidelines.
4 4
5 5
6 6 // Comments
7 7 @comment-outdated-opacity: 0.6;
8 8
9 9 .comments {
10 10 width: 100%;
11 11 }
12 12
13 13 tr.inline-comments div {
14 14 max-width: 100%;
15 15
16 16 p {
17 white-space: normal;
17 white-space: normal;
18 18 }
19 19
20 20 code, pre, .code, dd {
21 21 overflow-x: auto;
22 22 width: 1062px;
23 23 }
24 24
25 25 dd {
26 26 width: auto;
27 27 }
28 28 }
29 29
30 30 #injected_page_comments {
31 31 .comment-previous-link,
32 32 .comment-next-link,
33 33 .comment-links-divider {
34 34 display: none;
35 35 }
36 36 }
37 37
38 38 .add-comment {
39 39 margin-bottom: 10px;
40 40 }
41 41 .hide-comment-button .add-comment {
42 42 display: none;
43 43 }
44 44
45 45 .comment-bubble {
46 46 color: @grey4;
47 47 margin-top: 4px;
48 48 margin-right: 30px;
49 49 visibility: hidden;
50 50 }
51 51
52 52 .comment-label {
53 53 float: left;
54 54
55 55 padding: 0.4em 0.4em;
56 56 margin: 3px 5px 0px -10px;
57 57 display: inline-block;
58 58 min-height: 0;
59 59
60 60 text-align: center;
61 61 font-size: 10px;
62 62 line-height: .8em;
63 63
64 64 font-family: @text-italic;
65 65 font-style: italic;
66 66 background: #fff none;
67 67 color: @grey4;
68 68 border: 1px solid @grey4;
69 69 white-space: nowrap;
70 70
71 71 text-transform: uppercase;
72 72 min-width: 40px;
73 73
74 74 &.todo {
75 75 color: @color5;
76 76 font-style: italic;
77 77 font-weight: @text-bold-italic-weight;
78 78 font-family: @text-bold-italic;
79 79 }
80 80
81 81 .resolve {
82 82 cursor: pointer;
83 83 text-decoration: underline;
84 84 }
85 85
86 86 .resolved {
87 87 text-decoration: line-through;
88 88 color: @color1;
89 89 }
90 90 .resolved a {
91 91 text-decoration: line-through;
92 92 color: @color1;
93 93 }
94 94 .resolve-text {
95 95 color: @color1;
96 96 margin: 2px 8px;
97 97 font-family: @text-italic;
98 98 font-style: italic;
99 99 }
100 100 }
101 101
102 102 .has-spacer-after {
103 103 &:after {
104 104 content: ' | ';
105 105 color: @grey5;
106 106 }
107 107 }
108 108
109 109 .has-spacer-before {
110 110 &:before {
111 111 content: ' | ';
112 112 color: @grey5;
113 113 }
114 114 }
115 115
116 116 .comment {
117 117
118 118 &.comment-general {
119 119 border: 1px solid @grey5;
120 120 padding: 5px 5px 5px 5px;
121 121 }
122 122
123 123 margin: @padding 0;
124 124 padding: 4px 0 0 0;
125 125 line-height: 1em;
126 126
127 127 .rc-user {
128 128 min-width: 0;
129 129 margin: 0px .5em 0 0;
130 130
131 131 .user {
132 132 display: inline;
133 133 }
134 134 }
135 135
136 136 .meta {
137 137 position: relative;
138 138 width: 100%;
139 139 border-bottom: 1px solid @grey5;
140 140 margin: -5px 0px;
141 141 line-height: 24px;
142 142
143 143 &:hover .permalink {
144 144 visibility: visible;
145 145 color: @rcblue;
146 146 }
147 147 }
148 148
149 149 .author,
150 150 .date {
151 151 display: inline;
152 152
153 153 &:after {
154 154 content: ' | ';
155 155 color: @grey5;
156 156 }
157 157 }
158 158
159 159 .author-general img {
160 160 top: 3px;
161 161 }
162 162 .author-inline img {
163 163 top: 3px;
164 164 }
165 165
166 166 .status-change,
167 167 .permalink,
168 168 .changeset-status-lbl {
169 169 display: inline;
170 170 }
171 171
172 172 .permalink {
173 173 visibility: hidden;
174 174 }
175 175
176 176 .comment-links-divider {
177 177 display: inline;
178 178 }
179 179
180 180 .comment-links-block {
181 181 float:right;
182 182 text-align: right;
183 183 min-width: 85px;
184 184
185 185 [class^="icon-"]:before,
186 186 [class*=" icon-"]:before {
187 187 margin-left: 0;
188 188 margin-right: 0;
189 189 }
190 190 }
191 191
192 192 .comment-previous-link {
193 193 display: inline-block;
194 194
195 195 .arrow_comment_link{
196 196 cursor: pointer;
197 197 i {
198 198 font-size:10px;
199 199 }
200 200 }
201 201 .arrow_comment_link.disabled {
202 202 cursor: default;
203 203 color: @grey5;
204 204 }
205 205 }
206 206
207 207 .comment-next-link {
208 208 display: inline-block;
209 209
210 210 .arrow_comment_link{
211 211 cursor: pointer;
212 212 i {
213 213 font-size:10px;
214 214 }
215 215 }
216 216 .arrow_comment_link.disabled {
217 217 cursor: default;
218 218 color: @grey5;
219 219 }
220 220 }
221 221
222 222 .flag_status {
223 223 display: inline-block;
224 224 margin: -2px .5em 0 .25em
225 225 }
226 226
227 227 .delete-comment {
228 228 display: inline-block;
229 229 color: @rcblue;
230
230
231 231 &:hover {
232 232 cursor: pointer;
233 233 }
234 234 }
235 235
236 236 .text {
237 237 clear: both;
238 238 .border-radius(@border-radius);
239 239 .box-sizing(border-box);
240 240
241 241 .markdown-block p,
242 242 .rst-block p {
243 243 margin: .5em 0 !important;
244 244 // TODO: lisa: This is needed because of other rst !important rules :[
245 245 }
246 246 }
247 247
248 248 .pr-version {
249 249 float: left;
250 250 margin: 0px 4px;
251 251 }
252 252 .pr-version-inline {
253 253 float: left;
254 254 margin: 0px 4px;
255 255 }
256 256 .pr-version-num {
257 257 font-size: 10px;
258 258 }
259 259 }
260 260
261 261 @comment-padding: 5px;
262 262
263 263 .general-comments {
264 264 .comment-outdated {
265 265 opacity: @comment-outdated-opacity;
266 266 }
267 267 }
268 268
269 269 .inline-comments {
270 270 border-radius: @border-radius;
271 271 .comment {
272 272 margin: 0;
273 273 border-radius: @border-radius;
274 274 }
275 275 .comment-outdated {
276 276 opacity: @comment-outdated-opacity;
277 277 }
278 278
279 279 .comment-inline {
280 280 background: white;
281 281 padding: @comment-padding @comment-padding;
282 282 border: @comment-padding solid @grey6;
283 283
284 284 .text {
285 285 border: none;
286 286 }
287 287 .meta {
288 288 border-bottom: 1px solid @grey6;
289 289 margin: -5px 0px;
290 290 line-height: 24px;
291 291 }
292 292 }
293 293 .comment-selected {
294 294 border-left: 6px solid @comment-highlight-color;
295 295 }
296 296 .comment-inline-form {
297 297 padding: @comment-padding;
298 298 display: none;
299 299 }
300 300 .cb-comment-add-button {
301 301 margin: @comment-padding;
302 302 }
303 303 /* hide add comment button when form is open */
304 304 .comment-inline-form-open ~ .cb-comment-add-button {
305 305 display: none;
306 306 }
307 307 .comment-inline-form-open {
308 308 display: block;
309 309 }
310 310 /* hide add comment button when form but no comments */
311 311 .comment-inline-form:first-child + .cb-comment-add-button {
312 312 display: none;
313 313 }
314 314 /* hide add comment button when no comments or form */
315 315 .cb-comment-add-button:first-child {
316 316 display: none;
317 317 }
318 318 /* hide add comment button when only comment is being deleted */
319 319 .comment-deleting:first-child + .cb-comment-add-button {
320 320 display: none;
321 321 }
322 322 }
323 323
324 324
325 325 .show-outdated-comments {
326 326 display: inline;
327 327 color: @rcblue;
328 328 }
329 329
330 330 // Comment Form
331 331 div.comment-form {
332 332 margin-top: 20px;
333 333 }
334 334
335 335 .comment-form strong {
336 336 display: block;
337 337 margin-bottom: 15px;
338 338 }
339 339
340 340 .comment-form textarea {
341 341 width: 100%;
342 342 height: 100px;
343 343 font-family: @text-monospace;
344 344 }
345 345
346 346 form.comment-form {
347 347 margin-top: 10px;
348 348 margin-left: 10px;
349 349 }
350 350
351 351 .comment-inline-form .comment-block-ta,
352 352 .comment-form .comment-block-ta,
353 353 .comment-form .preview-box {
354 354 .border-radius(@border-radius);
355 355 .box-sizing(border-box);
356 356 background-color: white;
357 357 }
358 358
359 359 .comment-form-submit {
360 360 margin-top: 5px;
361 361 margin-left: 525px;
362 362 }
363 363
364 364 .file-comments {
365 365 display: none;
366 366 }
367 367
368 368 .comment-form .preview-box.unloaded,
369 369 .comment-inline-form .preview-box.unloaded {
370 370 height: 50px;
371 371 text-align: center;
372 372 padding: 20px;
373 373 background-color: white;
374 374 }
375 375
376 376 .comment-footer {
377 377 position: relative;
378 378 width: 100%;
379 379 min-height: 42px;
380
380
381 381 .status_box,
382 382 .cancel-button {
383 383 float: left;
384 384 display: inline-block;
385 385 }
386
386
387 387 .action-buttons {
388 388 float: right;
389 389 display: inline-block;
390 390 }
391 391
392 392 .action-buttons-extra {
393 393 display: inline-block;
394 394 }
395 395 }
396 396
397 397 .comment-form {
398 398
399 399 .comment {
400 400 margin-left: 10px;
401 401 }
402 402
403 403 .comment-help {
404 404 color: @grey4;
405 405 padding: 5px 0 5px 0;
406 406 }
407 407
408 408 .comment-title {
409 409 padding: 5px 0 5px 0;
410 410 }
411 411
412 412 .comment-button {
413 413 display: inline-block;
414 414 }
415 415
416 416 .comment-button-input {
417 417 margin-right: 0;
418 418 }
419 419
420 420 .comment-footer {
421 421 margin-bottom: 110px;
422 422 margin-top: 10px;
423 423 }
424 424 }
425 425
426 426
427 427 .comment-form-login {
428 428 .comment-help {
429 padding: 0.9em; //same as the button
429 padding: 0.7em; //same as the button
430 430 }
431 431
432 div.clearfix {
432 div.clearfix {
433 433 clear: both;
434 434 width: 100%;
435 435 display: block;
436 436 }
437 437 }
438 438
439 439 .comment-type {
440 440 margin: 0px;
441 441 border-radius: inherit;
442 442 border-color: @grey6;
443 443 }
444 444
445 445 .preview-box {
446 446 min-height: 105px;
447 447 margin-bottom: 15px;
448 448 background-color: white;
449 449 .border-radius(@border-radius);
450 450 .box-sizing(border-box);
451 451 }
452 452
453 453 .add-another-button {
454 454 margin-left: 10px;
455 455 margin-top: 10px;
456 456 margin-bottom: 10px;
457 457 }
458 458
459 459 .comment .buttons {
460 460 float: right;
461 461 margin: -1px 0px 0px 0px;
462 462 }
463 463
464 464 // Inline Comment Form
465 465 .injected_diff .comment-inline-form,
466 466 .comment-inline-form {
467 467 background-color: white;
468 468 margin-top: 10px;
469 469 margin-bottom: 20px;
470 470 }
471 471
472 472 .inline-form {
473 473 padding: 10px 7px;
474 474 }
475 475
476 476 .inline-form div {
477 477 max-width: 100%;
478 478 }
479 479
480 480 .overlay {
481 481 display: none;
482 482 position: absolute;
483 483 width: 100%;
484 484 text-align: center;
485 485 vertical-align: middle;
486 486 font-size: 16px;
487 487 background: none repeat scroll 0 0 white;
488 488
489 489 &.submitting {
490 490 display: block;
491 491 opacity: 0.5;
492 492 z-index: 100;
493 493 }
494 494 }
495 495 .comment-inline-form .overlay.submitting .overlay-text {
496 496 margin-top: 5%;
497 497 }
498 498
499 499 .comment-inline-form .clearfix,
500 500 .comment-form .clearfix {
501 501 .border-radius(@border-radius);
502 502 margin: 0px;
503 503 }
504 504
505 505 .comment-inline-form .comment-footer {
506 506 margin: 10px 0px 0px 0px;
507 507 }
508 508
509 509 .hide-inline-form-button {
510 510 margin-left: 5px;
511 511 }
512 512 .comment-button .hide-inline-form {
513 513 background: white;
514 514 }
515 515
516 516 .comment-area {
517 517 padding: 8px 12px;
518 518 border: 1px solid @grey5;
519 519 .border-radius(@border-radius);
520 520
521 521 .resolve-action {
522 522 padding: 1px 0px 0px 6px;
523 523 }
524 524
525 525 }
526 526
527 527 .comment-area-header .nav-links {
528 528 display: flex;
529 529 flex-flow: row wrap;
530 530 -webkit-flex-flow: row wrap;
531 531 width: 100%;
532 532 }
533 533
534 534 .comment-area-footer {
535 535 display: flex;
536 536 }
537 537
538 538 .comment-footer .toolbar {
539 539
540 540 }
541 541
542 542 .nav-links {
543 543 padding: 0;
544 544 margin: 0;
545 545 list-style: none;
546 546 height: auto;
547 547 border-bottom: 1px solid @grey5;
548 548 }
549 549 .nav-links li {
550 550 display: inline-block;
551 551 list-style-type: none;
552 552 }
553 553
554 554 .nav-links li a.disabled {
555 555 cursor: not-allowed;
556 556 }
557 557
558 558 .nav-links li.active a {
559 559 border-bottom: 2px solid @rcblue;
560 560 color: #000;
561 561 font-weight: 600;
562 562 }
563 563 .nav-links li a {
564 564 display: inline-block;
565 565 padding: 0px 10px 5px 10px;
566 566 margin-bottom: -1px;
567 567 font-size: 14px;
568 568 line-height: 28px;
569 569 color: #8f8f8f;
570 570 border-bottom: 2px solid transparent;
571 571 }
572 572
573 573 .toolbar-text {
574 574 float: left;
575 575 margin: -5px 0px 0px 0px;
576 576 font-size: 12px;
577 577 }
578 578
@@ -1,139 +1,139 b''
1 1 .deform {
2 2
3 3 * {
4 4 box-sizing: border-box;
5 5 }
6 6
7 7 .required:after {
8 8 color: #e32;
9 9 content: '*';
10 10 display:inline;
11 11 }
12 12
13 13 .control-label {
14 14 width: 200px;
15 15 padding: 10px 0px;
16 16 float: left;
17 17 }
18 18 .control-inputs {
19 19 width: 400px;
20 20 float: left;
21 21 }
22 22 .form-group .radio, .form-group .checkbox {
23 23 position: relative;
24 24 display: block;
25 25 /* margin-bottom: 10px; */
26 26 }
27 27
28 28 .form-group {
29 29 clear: left;
30 30 margin-bottom: 20px;
31 31
32 32 &:after { /* clear fix */
33 33 content: " ";
34 34 display: block;
35 35 clear: left;
36 36 }
37 37 }
38 38
39 39 .form-control {
40 40 width: 100%;
41 padding: 0.9em;
41 padding: 0.7em;
42 42 border: 1px solid #979797;
43 43 border-radius: 2px;
44 44 }
45 45 .form-control.select2-container {
46 46 padding: 0; /* padding already applied in .drop-menu a */
47 47 }
48 48
49 49 .form-control.readonly {
50 50 background: #eeeeee;
51 51 cursor: not-allowed;
52 52 }
53 53
54 54 .error-block {
55 55 color: red;
56 56 margin: 0;
57 57 }
58 58
59 59 .help-block {
60 60 margin: 0;
61 61 }
62 62
63 63 .deform-seq-container .control-inputs {
64 64 width: 100%;
65 65 }
66 66
67 67 .deform-seq-container .deform-seq-item-handle {
68 68 width: 8.3%;
69 69 float: left;
70 70 }
71 71
72 72 .deform-seq-container .deform-seq-item-group {
73 73 width: 91.6%;
74 74 float: left;
75 75 }
76 76
77 77 .form-control {
78 78 input {
79 79 height: 40px;
80 80 }
81 81 input[type=checkbox], input[type=radio] {
82 82 height: auto;
83 83 }
84 84 select {
85 85 height: 40px;
86 86 }
87 87 }
88 88
89 89 .form-control.select2-container {
90 90 height: 40px;
91 91 }
92 92
93 93 .deform-full-field-sequence.control-inputs {
94 94 width: 100%;
95 95 }
96 96
97 97 .deform-table-sequence {
98 98 .deform-seq-container {
99 99 .deform-seq-item {
100 100 margin: 0;
101 101 label {
102 102 display: none;
103 103 }
104 104 .panel-heading {
105 105 display: none;
106 106 }
107 107 .deform-seq-item-group > .panel {
108 108 padding: 0;
109 109 margin: 5px 0;
110 110 border: none;
111 111 &> .panel-body {
112 112 padding: 0;
113 113 }
114 114 }
115 115 &:first-child label {
116 116 display: block;
117 117 }
118 118 }
119 119 }
120 120 }
121 121 .deform-table-2-sequence {
122 122 .deform-seq-container {
123 123 .deform-seq-item {
124 124 .form-group {
125 125 width: 45% !important; padding: 0 2px; float: left; clear: none;
126 126 }
127 127 }
128 128 }
129 129 }
130 130 .deform-table-3-sequence {
131 131 .deform-seq-container {
132 132 .deform-seq-item {
133 133 .form-group {
134 134 width: 30% !important; padding: 0 2px; float: left; clear: none;
135 135 }
136 136 }
137 137 }
138 138 }
139 139 }
@@ -1,742 +1,740 b''
1 1 // navigation.less
2 2 // For use in RhodeCode applications;
3 3 // see style guide documentation for guidelines.
4 4
5 5 // TOP MAIN DARK NAVIGATION
6 6
7 7 .header .main_nav.horizontal-list {
8 8 float: right;
9 9 color: @grey4;
10 10 > li {
11 11 a {
12 12 color: @grey4;
13 13 }
14 14 }
15 15 }
16 16
17 17 // HEADER NAVIGATION
18 18
19 19 .horizontal-list {
20 20 display: block;
21 21 margin: 0;
22 22 padding: 0;
23 23 -webkit-padding-start: 0;
24 24 text-align: left;
25 25 font-size: @navigation-fontsize;
26 26 color: @grey6;
27 27 z-index:10;
28 28
29 29 li {
30 30 line-height: 1em;
31 31 list-style-type: none;
32 32 margin: 0 20px 0 0;
33 33
34 34 a {
35 35 padding: 0 .5em;
36 36
37 37 &.menu_link_notifications {
38 38 .pill(7px,@rcblue);
39 39 display: inline;
40 40 margin: 0 7px 0 .7em;
41 41 font-size: @basefontsize;
42 42 color: white;
43 43
44 44 &.empty {
45 45 background-color: @grey4;
46 46 }
47 47
48 48 &:hover {
49 49 background-color: @rcdarkblue;
50 50 }
51 51 }
52 52 }
53 53 .pill_container {
54 54 margin: 1.25em 0px 0px 0px;
55 55 float: right;
56 56 }
57 57
58 58 &#quick_login_li {
59 59 &:hover {
60 60 color: @grey5;
61 61 }
62 62
63 63 a.menu_link_notifications {
64 64 color: white;
65 65 }
66 66
67 67 .user {
68 68 padding-bottom: 10px;
69 69 }
70 70 }
71 71
72 72 &:before { content: none; }
73 73
74 74 &:last-child {
75 75 .menulabel {
76 76 padding-right: 0;
77 77 border-right: none;
78 78
79 79 .show_more {
80 80 padding-right: 0;
81 81 }
82 82 }
83 83
84 84 &> a {
85 85 border-bottom: none;
86 86 }
87 87 }
88 88
89 89 &.open {
90 90
91 91 a {
92 92 color: white;
93 93 }
94 94 }
95 95
96 96 &:focus {
97 97 outline: none;
98 98 }
99 99
100 100 ul li {
101 101 display: block;
102 102
103 103 &:last-child> a {
104 104 border-bottom: none;
105 105 }
106 106
107 107 ul li:last-child a {
108 108 /* we don't expect more then 3 levels of submenu and the third
109 109 level can have different html structure */
110 110 border-bottom: none;
111 111 }
112 112 }
113 113 }
114 114
115 115 > li {
116 116 float: left;
117 117 display: block;
118 118 padding: 0;
119 119
120 120 > a,
121 121 &.has_select2 a {
122 122 display: block;
123 123 padding: 10px 0;
124 124 }
125 125
126 126 .menulabel {
127 padding: 0 0 0.4em 0;
128 127 line-height: 1em;
129 128 // for this specifically we do not use a variable
130 129 }
131 130
132 131 .pr_notifications {
133 132 padding-left: .5em;
134 133 }
135 134
136 135 .pr_notifications + .menulabel {
137 136 display:inline;
138 137 padding-left: 0;
139 138 }
140 139
141 140 &:hover,
142 141 &.open,
143 142 &.active {
144 143 a {
145 144 color: @rcblue;
146 145 }
147 146 }
148 147 }
149 148
150 149 pre {
151 150 margin: 0;
152 151 padding: 0;
153 152 }
154 153
155 154 .select2-container,
156 155 .menulink.childs {
157 156 position: relative;
158 157 }
159 158
160 159 #quick_login {
161 160
162 161 li a {
163 162 padding: .5em 0;
164 163 border-bottom: none;
165 164 color: @grey2;
166 165
167 166 &:hover { color: @grey1; }
168 167 }
169 168 }
170 169
171 170 #quick_login_link {
172 171 display: inline-block;
173 172
174 173 .gravatar {
175 174 border: 1px solid @grey5;
176 175 }
177 176
178 177 .gravatar-login {
179 178 height: 20px;
180 179 width: 20px;
181 180 margin: -8px 0;
182 181 padding: 0;
183 182 }
184 183
185 184 &:hover .user {
186 185 color: @grey6;
187 186 }
188 187 }
189 188 }
190 189 .header .horizontal-list {
191 190
192 191 li {
193 192
194 193 &#quick_login_li {
195 194 padding-left: .5em;
196 195
197 196 &:hover #quick_login_link {
198 197 color: inherit;
199 198 }
200 199
201 200 .menu_link_user {
202 201 padding: 0 2px;
203 202 }
204 203 }
205 204 list-style-type: none;
206 205 }
207 206
208 207 > li {
209 208
210 209 a {
211 210 padding: 18px 0 12px 0;
212 211 color: @nav-grey;
213 212
214 213 &.menu_link_notifications {
215 214 padding: 1px 8px;
216 215 }
217 216 }
218 217
219 218 &:hover,
220 219 &.open,
221 220 &.active {
222 221 .pill_container a {
223 222 // don't select text for the pill container, it has it' own
224 223 // hover behaviour
225 224 color: @nav-grey;
226 225 }
227 226 }
228 227
229 228 &:hover,
230 229 &.open,
231 230 &.active {
232 231 a {
233 232 color: @grey6;
234 233 }
235 234 }
236 235
237 236 .select2-dropdown-open a {
238 237 color: @grey6;
239 238 }
240 239
241 240 .repo-switcher {
242 241 padding-left: 0;
243 242
244 243 .menulabel {
245 244 padding-left: 0;
246 245 }
247 246 }
248 247 }
249 248
250 249 li ul li {
251 250 background-color:@grey2;
252 251
253 252 a {
254 253 padding: .5em 0;
255 254 border-bottom: @border-thickness solid @border-default-color;
256 255 color: @grey6;
257 256 }
258 257
259 258 &:last-child a, &.last a{
260 259 border-bottom: none;
261 260 }
262 261
263 262 &:hover {
264 263 background-color: @grey3;
265 264 }
266 265 }
267 266
268 267 .submenu {
269 268 margin-top: 5px;
270 269 }
271 270 }
272 271
273 272 // SUBMENUS
274 273 .navigation .submenu {
275 274 display: none;
276 275 }
277 276
278 277 .navigation li.open {
279 278 .submenu {
280 279 display: block;
281 280 }
282 281 }
283 282
284 283 .navigation li:last-child .submenu {
285 284 right: -20px;
286 285 left: auto;
287 286 }
288 287
289 288 .submenu {
290 289 position: absolute;
291 290 top: 100%;
292 291 left: 0;
293 292 min-width: 150px;
294 293 margin: 6px 0 0;
295 294 padding: 0;
296 295 text-align: left;
297 296 font-family: @text-light;
298 297 border-radius: @border-radius;
299 298 z-index: 20;
300 299
301 300 li {
302 301 display: block;
303 302 margin: 0;
304 303 padding: 0 .5em;
305 304 line-height: 1em;
306 305 color: @grey3;
307 306 background-color: @grey6;
308 307 list-style-type: none;
309 308
310 309 a {
311 310 display: block;
312 311 width: 100%;
313 312 padding: .5em 0;
314 313 border-right: none;
315 314 border-bottom: @border-thickness solid white;
316 315 color: @grey3;
317 316 }
318 317
319 318 ul {
320 319 display: none;
321 320 position: absolute;
322 321 top: 0;
323 322 right: 100%;
324 323 padding: 0;
325 324 z-index: 30;
326 325 }
327 326 &:hover {
328 327 background-color: @grey5;
329 328 -webkit-transition: background .3s;
330 329 -moz-transition: background .3s;
331 330 -o-transition: background .3s;
332 331 transition: background .3s;
333 332
334 333 ul {
335 334 display: block;
336 335 }
337 336 }
338 337 }
339 338
340 339 }
341 340
342 341
343 342
344 343
345 344 // repo dropdown
346 345 .quick_repo_menu {
347 346 width: 15px;
348 347 text-align: center;
349 348 position: relative;
350 349 cursor: pointer;
351 350
352 351 div {
353 352 overflow: visible !important;
354 353 }
355 354
356 355 &.sorting {
357 356 cursor: auto;
358 357 }
359 358
360 359 &:hover {
361 360 .menu_items_container {
362 361 position: absolute;
363 362 display: block;
364 363 }
365 364 .menu_items {
366 365 display: block;
367 366 }
368 367 }
369 368
370 369 i {
371 370 margin: 0;
372 371 color: @grey4;
373 372 }
374 373
375 374 .menu_items_container {
376 375 position: absolute;
377 376 top: 0;
378 377 left: 100%;
379 378 margin: 0;
380 379 padding: 0;
381 380 list-style: none;
382 381 background-color: @grey6;
383 382 z-index: 999;
384 383 text-align: left;
385 384
386 385 a {
387 386 color: @grey2;
388 387 }
389 388
390 389 ul.menu_items {
391 390 margin: 0;
392 391 padding: 0;
393 392 }
394 393
395 394 li {
396 395 margin: 0;
397 396 padding: 0;
398 397 line-height: 1em;
399 398 list-style-type: none;
400 399
401 400 a {
402 401 display: block;
403 402 height: 16px;
404 403 padding: 8px; //must add up to td height (28px)
405 404 width: 120px; // set width
406 405
407 406 &:hover {
408 407 background-color: @grey5;
409 408 -webkit-transition: background .3s;
410 409 -moz-transition: background .3s;
411 410 -o-transition: background .3s;
412 411 transition: background .3s;
413 412 }
414 413 }
415 414 }
416 415 }
417 416 }
418 417
419 418 // Header Repository Switcher
420 419 // Select2 Dropdown
421 420 #select2-drop.select2-drop.repo-switcher-dropdown {
422 421 width: auto !important;
423 422 margin-top: 5px;
424 423 padding: 1em 0;
425 424 text-align: left;
426 425 .border-radius-bottom(@border-radius);
427 426 border-color: transparent;
428 427 color: @grey6;
429 428 background-color: @grey2;
430 429
431 430 input {
432 431 min-width: 90%;
433 432 }
434 433
435 434 ul.select2-result-sub {
436 435
437 436 li {
438 437 line-height: 1em;
439 438
440 439 &:hover,
441 440 &.select2-highlighted {
442 441 background-color: @grey3;
443 442 }
444 443 }
445 444
446 445 &:before { content: none; }
447 446 }
448 447
449 448 ul.select2-results {
450 449 min-width: 200px;
451 450 margin: 0;
452 451 padding: 0;
453 452 list-style-type: none;
454 453 overflow-x: visible;
455 454 overflow-y: scroll;
456 455
457 456 li {
458 457 padding: 0 8px;
459 458 line-height: 1em;
460 459 color: @grey6;
461 460
462 461 &>.select2-result-label {
463 462 padding: 8px 0;
464 463 border-bottom: @border-thickness solid @grey3;
465 464 white-space: nowrap;
466 465 color: @grey5;
467 466 cursor: pointer;
468 467 }
469 468
470 469 &.select2-result-with-children {
471 470 margin: 0;
472 471 padding: 0;
473 472 }
474 473
475 474 &.select2-result-unselectable > .select2-result-label {
476 475 margin: 0 8px;
477 476 }
478 477
479 478 }
480 479 }
481 480
482 481 ul.select2-result-sub {
483 482 margin: 0;
484 483 padding: 0;
485 484
486 485 li {
487 486 display: block;
488 487 margin: 0;
489 488 border-right: none;
490 489 line-height: 1em;
491 490 font-family: @text-light;
492 491 color: @grey2;
493 492 list-style-type: none;
494 493
495 494 &:hover {
496 495 background-color: @grey3;
497 496 }
498 497 }
499 498 }
500 499 }
501 500
502 501
503 502 #context-bar {
504 503 display: block;
505 margin: 0 auto;
504 margin: 0 auto 20px 0;
506 505 padding: 0 @header-padding;
507 506 background-color: @grey7;
508 507
509 508 .clear {
510 509 clear: both;
511 510 }
512 511 }
513 512
514 513 ul#context-pages {
515 514 li {
516 line-height: 2em;
517 515 list-style-type: none;
518 516
519 517 a {
520 518 color: @grey3;
521 519
522 520 &:hover {
523 521 color: @grey2;
524 522 }
525 523 }
526 524
527 525 &.active {
528 526 // special case, non-variable color
529 527 border-bottom: 2px solid @rcblue;
530 528
531 529 a {
532 530 color: @rcblue;
533 531 }
534 532 }
535 533 }
536 534 }
537 535
538 536 // PAGINATION
539 537
540 538 .pagination {
541 539 border: @border-thickness solid @rcblue;
542 540 color: @rcblue;
543 541
544 542 .current {
545 543 color: @grey4;
546 544 }
547 545 }
548 546
549 547 .dataTables_processing {
550 548 text-align: center;
551 549 font-size: 1.1em;
552 550 position: relative;
553 551 top: 95px;
554 552 }
555 553
556 554 .dataTables_paginate, .pagination-wh {
557 555 text-align: left;
558 556 display: inline-block;
559 557 border-left: 1px solid @rcblue;
560 558 float: none;
561 559 overflow: hidden;
562 560
563 561 .paginate_button, .pager_curpage,
564 562 .pager_link, .pg-previous, .pg-next, .pager_dotdot {
565 563 display: inline-block;
566 564 padding: @menupadding/4 @menupadding;
567 565 border: 1px solid @rcblue;
568 566 border-left: 0;
569 567 color: @rcblue;
570 568 cursor: pointer;
571 569 float: left;
572 570 }
573 571
574 572 .pager_curpage, .pager_dotdot,
575 573 .paginate_button.current, .paginate_button.disabled,
576 574 .disabled {
577 575 color: @grey3;
578 576 cursor: default;
579 577 }
580 578
581 579 .ellipsis {
582 580 display: inline-block;
583 581 text-align: left;
584 582 padding: @menupadding/4 @menupadding;
585 583 border: 1px solid @rcblue;
586 584 border-left: 0;
587 585 float: left;
588 586 }
589 587 }
590 588
591 589 // SIDEBAR
592 590
593 591 .sidebar {
594 592 .block-left;
595 593 clear: left;
596 594 max-width: @sidebar-width;
597 595 margin-right: @sidebarpadding;
598 596 padding-right: @sidebarpadding;
599 597 font-family: @text-regular;
600 598 color: @grey1;
601 599
602 600 &#graph_nodes {
603 601 clear:both;
604 602 width: auto;
605 603 margin-left: -100px;
606 604 padding: 0;
607 605 border: none;
608 606 }
609 607
610 608 .nav-pills {
611 609 margin: 0;
612 610 }
613 611
614 612 .nav {
615 613 list-style: none;
616 614 padding: 0;
617 615
618 616 li {
619 617 padding-bottom: @menupadding;
620 618 line-height: 1em;
621 619 color: @grey4;
622 620 list-style-type: none;
623 621
624 622 &.active a {
625 623 color: @grey2;
626 624 }
627 625
628 626 a {
629 627 color: @grey4;
630 628 }
631 629 }
632 630
633 631 }
634 632 }
635 633
636 634 .main_filter_help_box {
637 635 padding: 7px 7px;
638 636 display: inline-block;
639 637 vertical-align: top;
640 638 background: inherit;
641 639 position: absolute;
642 640 right: 0;
643 641 top: 9px;
644 642 }
645 643
646 644 .main_filter_input_box {
647 645 display: inline-block;
648 646
649 647 .searchItems {
650 648 display:flex;
651 649 background: @black;
652 650 padding: 0px;
653 651 border-radius: 3px;
654 652 border: 1px solid @black;
655 653
656 654 a {
657 655 border: none !important;
658 656 }
659 657 }
660 658
661 659 .searchTag {
662 660 line-height: 28px;
663 661 padding: 0 5px;
664 662
665 663 .tag {
666 664 color: @grey5;
667 665 border-color: @grey2;
668 666 background: @grey1;
669 667 }
670 668 }
671 669
672 670 .searchTagFilter {
673 671 background-color: @black !important;
674 672 margin-right: 0;
675 673 }
676 674
677 675 .searchTagHelp {
678 676 background-color: @grey1 !important;
679 677 margin: 0;
680 678 }
681 679 .searchTagHelp:hover {
682 680 background-color: @grey1 !important;
683 681 }
684 682 .searchTagInput {
685 683 background-color: @grey1 !important;
686 684 margin-right: 0;
687 685 }
688 686 }
689 687
690 688 .main_filter_box {
691 689 margin: 9px 0 0 0;
692 690 }
693 691
694 692 #main_filter_help {
695 693 background: @grey3;
696 694 border: 1px solid black;
697 695 position: absolute;
698 696 white-space: pre;
699 697 z-index: 9999;
700 698 color: @nav-grey;
701 699 margin: 1px 7px;
702 700 padding: 0 10px;
703 701 }
704 702
705 703 input {
706 704
707 705 &.main_filter_input {
708 706 padding: 5px 10px;
709 707 min-width: 260px;
710 708 color: @grey7;
711 709 background: @black;
712 710 min-height: 18px;
713 711 border: 0;
714 712
715 713 &:active {
716 714 color: @grey2 !important;
717 715 background: white !important;
718 716 }
719 717 &:focus {
720 718 color: @grey2 !important;
721 719 background: white !important;
722 720 }
723 721 }
724 722 }
725 723
726 724
727 725
728 726 .main_filter_input::placeholder {
729 727 color: @nav-grey;
730 728 opacity: 1;
731 729 }
732 730
733 731 .notice-box {
734 732 display:block !important;
735 733 padding: 9px 0 !important;
736 734 }
737 735
738 736 .menulabel-notice {
739 737 border: 1px solid @color5;
740 738 padding:7px 10px;
741 739 color: @color5;
742 740 }
@@ -1,221 +1,226 b''
1 1 // select2.less
2 2 // For use in RhodeCode application drop down select boxes;
3 3 // see style guide documentation for guidelines.
4 4
5 5
6 6 // SELECT2 DROPDOWN MENUS
7 7
8 8 //Select2 Dropdown
9 9 .select2-results{
10 10 .box-sizing(border-box);
11 11 overflow-y: scroll;
12 12 }
13 13
14 14 .select2-container{margin: 0; position: relative; display: inline-block; zoom: 1;}
15 15 .select2-container,
16 16 .select2-drop,
17 17 .select2-search,
18 18 .select2-search input {.box-sizing(border-box);}
19 19 .select2-container .select2-choice{display:block; line-height:1em; -webkit-touch-callout:none;-moz-user-select:none;-ms-user-select:none;user-select:none; }
20 .main .select2-container .select2-choice { background-color: white; }
20 .main .select2-container .select2-choice { background-color: white; box-shadow: @button-shadow;}
21 21 .select2-container .select2-choice abbr { display: none; width: 12px; height: 12px; position: absolute; right: 24px; top: 8px; font-size: 1px; text-decoration: none; border: 0; background: url('../images/select2.png') right top no-repeat; cursor: pointer; outline: 0; }
22 22 .select2-container.select2-allowclear .select2-choice abbr {display: inline-block;}
23 23 .select2-container .select2-choice abbr:hover { background-position: right -11px; cursor: pointer; }
24 24 .select2-drop-mask { border: 0; margin: 0; padding: 0; position: fixed; left: 0; top: 0; min-height: 100%; min-width: 100%; height: auto; width: auto; opacity: 0; z-index: 998; background-color: #fff; filter: alpha(opacity=0); }
25 25 .select2-drop { width: 100%; margin-top: -1px; position: absolute; z-index: 999; top: 100%; background: #fff; color: #000; border: @border-thickness solid @rcblue; border-top: 0; border-radius: 0 0 @border-radius @border-radius; }
26 26 .select2-drop.select2-drop-above { margin-top: 1px; border-top: @border-thickness solid @rclightblue; border-bottom: 0; border-radius: @border-radius @border-radius 0 0; }
27 27 .select2-drop-active { border: @border-thickness solid #5897fb; border-top: none; }
28 28 .select2-drop.select2-drop-above.select2-drop-active {border-top: @border-thickness solid #5897fb;}
29 29 .select2-drop-auto-width { border-top: @border-thickness solid #aaa; width: auto; }
30 30 .select2-drop-auto-width .select2-search {padding-top: 4px;}
31 31 html[dir="rtl"] .select2-container .select2-choice .select2-arrow { left: 0; right: auto; border-left: none; border-right: @border-thickness solid @grey5; border-radius: @border-radius 0 0 @border-radius; }
32 32 html[dir="rtl"] .select2-container .select2-choice .select2-arrow b {background-position: 2px 1px;}
33 33 .select2-search { display: inline-block; width: 100%; min-height: 26px; margin: 0; padding-left: 4px; padding-right: 4px; position: relative; z-index: 1000; white-space: nowrap; }
34 34 .select2-search input { width: 100%; height: auto !important; min-height: 26px; padding: 4px 20px 4px 5px; margin: 0; outline: 0; }
35 35 html[dir="rtl"] .select2-search input { padding: 4px 5px 4px 20px; background: #fff url('../images/select2.png') no-repeat -37px -22px; }
36 36 .select2-drop.select2-drop-above .select2-search input {margin-top: 4px;}
37 37 .select2-dropdown-open .select2-choice .select2-arrow { background: transparent; border-left: none; filter: none; }
38 38 html[dir="rtl"] .select2-dropdown-open .select2-choice .select2-arrow {border-right: none;}
39 39 .select2-hidden-accessible { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; }
40 40 /* results */
41 41 .select2-results { max-height: 200px; padding: 0 0 0 4px; margin: 4px 4px 4px 0; position: relative; overflow-x: hidden; overflow-y: auto; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); }
42 42 html[dir="rtl"] .select2-results { padding: 0 4px 0 0; margin: 4px 0 4px 4px; }
43 43 .select2-results .select2-disabled{background:@grey6;display:list-item;cursor:default}
44 44 .select2-results .select2-selected{display:none}
45 45 .select2-more-results.select2-active{background:#f4f4f4 url('../images/select2-spinner.gif') no-repeat 100%}
46 46 .select2-container.select2-container-disabled .select2-choice abbr{display:none}
47 47 .select2-container.select2-container-disabled {background:@grey6;cursor:default}
48 48 .select2-container.select2-container-disabled .select2-choice {background:@grey6;cursor:default}
49 49 .select2-container-multi .select2-choices li{float:left;list-style:none}
50 50 .select2-container-multi .select2-choices .select2-search-field{margin:0;padding:0;white-space:nowrap}
51 51 .select2-container-multi .select2-choices .select2-search-choice .select2-chosen{cursor:default}
52 52 .select2-search-choice-close{display:block;width:12px;height:13px;position:absolute;right:3px;top:4px;font-size:1px;outline:none;background:url('../images/select2.png') right top no-repeat}
53 53 .select2-container-multi .select2-search-choice-close{left:3px}
54 54 .select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close:hover{background-position:right -11px}
55 55 .select2-container-multi .select2-choices .select2-search-choice-focus .select2-search-choice-close{background-position:right -11px}
56 56 .select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice .select2-search-choice-close{display:none;background:none}
57 57 .select2-offscreen,.select2-offscreen:focus{clip:rect(0 0 0 0) !important;width:1px !important;height:1px !important;
58 58 border:0 !important;margin:0 !important;padding:0 !important;overflow:hidden !important;
59 59 position: absolute !important;outline:0 !important;left:0 !important;top:0 !important}
60 60 .select2-display-none,
61 61 .select2-search-hidden {display:none}
62 62 .select2-search input { border-color: @rclightblue; }
63 63
64 64 .select2-measure-scrollbar{position:absolute;top:-10000px;left:-10000px;width:100px;height:100px;overflow:scroll}
65 65 @media only screen and (-webkit-min-device-pixel-ratio:1.5),
66 66 only screen and (min-resolution:144dpi){
67 67 .select2-search input,
68 68 .select2-search-choice-close,
69 69 .select2-container .select2-choice abbr,
70 70 .select2-container .select2-choice .select2-arrow b{background-image:url('../images/select2x2.png');background-repeat:no-repeat;background-size:60px 40px;}
71 71 .select2-search input{background-position:100% -21px}
72 72 }
73 73 [class^="input-"] [class^="select2-choice"]>div{display:none}
74 74 [class^="input-"] .select2-offscreen{position:absolute}
75 75 select.select2{height:28px;visibility:hidden}
76 76 .autocomplete-suggestions{overflow:auto}
77 77 .autocomplete-suggestion{white-space:nowrap;overflow:hidden}
78 78
79 79 /* Retina-ize icons */
80 80 @media only screen and (-webkit-min-device-pixel-ratio:1.5),
81 81 only screen and (min-resolution:144dpi){
82 82 .select2-search input,
83 83 .select2-search-choice-close,
84 84 .select2-container .select2-choice abbr,
85 85 .select2-container .select2-choice .select2-arrow b{background-image:url('../images/select2x2.png');background-repeat:no-repeat;background-size:60px 40px;}
86 86 .select2-search input{background-position:100% -21px}
87 87 }
88 88
89 89 //Internal Select2 Dropdown Menus
90 90
91 91 .drop-menu-core {
92 92 min-width: 160px;
93 93 margin: 0 @padding 0 0;
94 94 padding: 0;
95 95 border: @border-thickness solid @rcblue;
96 96 border-radius: @border-radius;
97 97 color: @rcblue;
98 98 background-color: white;
99 99 }
100 100
101 101 .drop-menu-dropdown {
102 102 .drop-menu-core;
103 103
104 104 .flag_status {
105 105 margin-top: 0;
106 106 }
107 107 }
108 108
109 109 .drop-menu-base {
110 110 .drop-menu-core;
111 111 position: relative;
112 112 display: inline-block;
113 113 line-height: 1em;
114 114 z-index: 2;
115 115 cursor: pointer;
116 116
117 117 .flag_status {
118 118 margin-top: 0;
119 119 }
120 120
121 121 a {
122 122 display:block;
123 padding: .9em;
123 padding: .7em;
124 124 padding-right: 2em;
125 125 position: relative;
126 126
127 127 &:after {
128 128 position: absolute;
129 129 content: "\00A0\25BE";
130 130 right: .1em;
131 131 line-height: 1em;
132 top: 0.4em;
132 top: 0.2em;
133 133 width: 1em;
134 134 font-size: 20px;
135 135 }
136 136 }
137 137 }
138 138
139 139 .drop-menu {
140 140 .drop-menu-base;
141 141 width: auto !important;
142 142 }
143 143
144 144 .drop-menu-no-width {
145 145 .drop-menu-base;
146 146 width: auto;
147 147 }
148 148
149 149 .field-sm .drop-menu {
150 150 padding: 1px 0 0 0;
151 151 a {
152 152 padding: 6px;
153 153 };
154 154 }
155 155
156 156 .select2-search input {
157 157 width: 100%;
158 158 margin: .5em 0;
159 159 padding: .5em;
160 160 }
161 161
162 162 .select2-no-results {
163 163 padding: .5em;
164 164 }
165 165
166 166 .drop-menu-dropdown ul {
167 167 width: auto;
168 168 margin: 0;
169 169 padding: 0;
170 170 z-index: 50;
171 171
172 172 li {
173 173 margin: 0;
174 174 line-height: 1em;
175 175 list-style-type: none;
176 176
177 177 &:hover,
178 178 &.select2-highlighted {
179 background-color: @rclightblue;
179 background-color: @grey7;
180
181 .select2-result-label {
182 &:hover {
183 color: @grey1!important;
184 }
185 }
180 186 }
181 187
182 188 &.select2-result-with-children {
183 189 &:hover {
184 190 background-color: white;
185 191 }
186 192 }
187 193
188 194 .select2-result-label {
189 195 display:block;
190 196 padding: 8px;
191 197 font-family: @text-regular;
192 border-bottom: @border-thickness solid @rclightblue;
193 color: @rcblue;
198 color: @grey2;
194 199 cursor: pointer;
195 200 }
196 201 &.select2-result-with-children {
197 202
198 203 .select2-result-label {
199 204 color: @rcdarkblue;
200 205 cursor: default;
201 206 font-weight: @text-semibold-weight;
202 207 font-family: @text-semibold;
203 208 }
204 209
205 210 ul.select2-result-sub li .select2-result-label {
206 211 padding-left: 16px;
207 212 font-family: @text-regular;
208 color: @rcblue;
213 color: @grey2;
209 214 cursor: pointer;
210 215 }
211 216 }
212 217 }
213 218 }
214 219
215 220 .side-by-side-selector {
216 221 .left-group,
217 222 .middle-group,
218 223 .right-group {
219 224 margin-bottom: @padding;
220 225 }
221 226 }
@@ -1,552 +1,566 b''
1 1 //
2 2 // Typography
3 3 // modified from Bootstrap
4 4 // --------------------------------------------------
5 5
6 6 // Base
7 7 body {
8 8 font-size: @basefontsize;
9 9 font-family: @text-light;
10 10 letter-spacing: .02em;
11 11 color: @grey2;
12 12 }
13 13
14 14 #content, label{
15 15 font-size: @basefontsize;
16 16 }
17 17
18 18 label {
19 19 color: @grey2;
20 20 }
21 21
22 22 ::selection { background: @rchighlightblue; }
23 23
24 24 // Headings
25 25 // -------------------------
26 26
27 27 h1, h2, h3, h4, h5, h6,
28 28 .h1, .h2, .h3, .h4, .h5, .h6 {
29 29 margin: 0 0 @textmargin 0;
30 30 padding: 0;
31 31 line-height: 1.8em;
32 32 color: @text-color;
33 33 a {
34 34 color: @rcblue;
35 35 }
36 36 }
37 37
38 38 h1, .h1 { font-size: 1.54em; font-weight: @text-bold-weight; font-family: @text-bold; }
39 39 h2, .h2 { font-size: 1.23em; font-weight: @text-semibold-weight; font-family: @text-semibold; }
40 40 h3, .h3 { font-size: 1.23em; font-family: @text-regular; }
41 41 h4, .h4 { font-size: 1em; font-weight: @text-bold-weight; font-family: @text-bold; }
42 42 h5, .h5 { font-size: 1em; font-weight: @text-bold-weight; font-family: @text-bold; }
43 43 h6, .h6 { font-size: 1em; font-weight: @text-bold-weight; font-family: @text-bold; }
44 44
45 45 // Breadcrumbs
46 46 .breadcrumbs {
47 47 font-size: @repo-title-fontsize;
48 48 margin: 0;
49 49 }
50 50
51 51 .breadcrumbs_light {
52 52 float:left;
53 53 font-size: 1.3em;
54 54 line-height: 38px;
55 55 }
56 56
57 57 // Body text
58 58 // -------------------------
59 59
60 60 p {
61 61 margin: 0 0 @textmargin 0;
62 62 padding: 0;
63 63 line-height: 2em;
64 64 }
65 65
66 66 .lead {
67 67 margin-bottom: @textmargin;
68 68 font-weight: 300;
69 69 line-height: 1.4;
70 70
71 71 @media (min-width: @screen-sm-min) {
72 72 font-size: (@basefontsize * 1.5);
73 73 }
74 74 }
75 75
76 76 a,
77 77 .link {
78 78 color: @rcblue;
79 79 text-decoration: none;
80 80 outline: none;
81 81 cursor: pointer;
82 82
83 83 &:focus {
84 84 outline: none;
85 85 }
86 86
87 87 &:hover {
88 88 color: @rcdarkblue;
89 89 }
90 90 }
91 91
92 92 img {
93 93 border: none;
94 94 outline: none;
95 95 }
96 96
97 97 strong {
98 98 font-weight: @text-bold-weight;
99 99 font-family: @text-bold;
100 100 }
101 101
102 102 em {
103 103 font-family: @text-italic;
104 104 font-style: italic;
105 105 }
106 106
107 107 strong em,
108 108 em strong {
109 109 font-style: italic;
110 110 font-weight: @text-bold-italic-weight;
111 111 font-family: @text-bold-italic;
112 112 }
113 113
114 114 //TODO: lisa: b and i are depreciated, but we are still using them in places.
115 115 // Should probably make some decision whether to keep or lose these.
116 116 b {
117 117
118 118 }
119 119
120 120 i {
121 121 font-style: normal;
122 122 }
123 123
124 124 label {
125 125 color: @text-color;
126 126
127 127 input[type="checkbox"] {
128 128 margin-right: 1em;
129 129 }
130 130 input[type="radio"] {
131 131 margin-right: 1em;
132 132 }
133 133 }
134 134
135 135 code,
136 136 .code {
137 137 font-size: .95em;
138 138 font-family: @text-code;
139 139 color: @grey3;
140 140
141 141 a {
142 142 color: lighten(@rcblue,10%)
143 143 }
144 144 }
145 145
146 146 pre {
147 147 margin: 0;
148 148 padding: 0;
149 149 border: 0;
150 150 outline: 0;
151 151 font-size: @basefontsize*.95;
152 152 line-height: 1.4em;
153 153 font-family: @text-code;
154 154 color: @grey3;
155 155 }
156 156
157 157 // Emphasis & misc
158 158 // -------------------------
159 .discreet {
160 color: @grey4;
161 font-size: 85%;
162 font-weight: normal;
163
164 a {
165 color: @grey4;
166
167 &:hover {
168 color: @rcdarkblue;
169 }
170 }
171 }
159 172
160 173 small,
161 174 .small {
162 175 font-size: 75%;
163 176 font-weight: normal;
164 177 line-height: 1em;
165 178 }
166 179
167 180 mark,
168 181 .mark {
169 182 padding: .2em;
170 183 }
171 184
172 185 // Alignment
173 186 .text-left { text-align: left; }
174 187 .text-right { text-align: right; }
175 188 .text-center { text-align: center; }
176 189 .text-justify { text-align: justify; }
177 190 .text-nowrap { white-space: nowrap; }
178 191
179 192 // Transformation
180 193 .text-lowercase { text-transform: lowercase; }
181 194 .text-uppercase { text-transform: uppercase; }
182 195 .text-capitalize { text-transform: capitalize; }
183 196
184 197 // Contextual colors
185 198 .text-muted {
186 199 color: @grey4;
187 200 }
188 201 .text-primary {
189 202 color: @rcblue;
190 203 }
191 204 .text-success {
192 205 color: @alert1;
193 206 }
194 207 .text-info {
195 208 color: @alert4;
196 209 }
197 210 .text-warning {
198 211 color: @alert3;
199 212 }
200 213 .text-danger {
201 214 color: @alert2;
202 215 }
203 216
204 217 // Contextual backgrounds
205 218 .bg-primary {
206 219 background-color: white;
207 220 }
208 221 .bg-success {
209 222 background-color: @alert1;
210 223 }
211 224 .bg-info {
212 225 background-color: @alert4;
213 226 }
214 227 .bg-warning {
215 228 background-color: @alert3;
216 229 }
217 230 .bg-danger {
218 231 background-color: @alert2;
219 232 }
220 233
221 234
222 235 // Page header
223 236 // -------------------------
224 237
225 238 .page-header {
226 239 margin: @pagepadding 0 @textmargin;
227 240 border-bottom: @border-thickness solid @grey5;
228 241 }
229 242
230 243 .title {
231 244 clear: both;
232 245 float: left;
233 246 width: 100%;
234 margin: @pagepadding/2 0 @pagepadding/4;
247 margin: @pagepadding/2 0 0;
248 min-height: 25px;
235 249
236 250 .breadcrumbs {
237 251 float: left;
238 252 clear: both;
239 253 width: 700px;
240 254 margin: 0;
241 255
242 256 .q_filter_box {
243 257 margin-right: @padding;
244 258 }
245 259 }
246 260
247 261 h1 a {
248 262 color: @rcblue;
249 263 }
250 264
251 265 input{
252 266 margin-right: @padding;
253 267 }
254 268
255 269 h5, .h5 {
256 270 color: @grey1;
257 271 margin-bottom: @space;
258 272
259 273 span {
260 274 display: inline-block;
261 275 }
262 276 }
263 277
264 278 p {
265 279 margin-bottom: 0;
266 280 }
267 281
268 282 .links {
269 283 float: right;
270 284 display: inline;
271 285 margin: 0;
272 286 padding-left: 0;
273 287 list-style: none;
274 288 text-align: right;
275 289
276 290 li {
277 291 float: right;
278 292 list-style-type: none;
279 293 }
280 294
281 295 a {
282 296 display: inline-block;
283 297 margin-left: @textmargin/2;
284 298 }
285 299 }
286 300
287 301 .title-content {
288 302 float: left;
289 303 margin: 0;
290 304 padding: 0;
291 305
292 306 & + .breadcrumbs {
293 307 margin-top: @padding;
294 308 }
295 309
296 310 & + .links {
297 311 margin-top: -@button-padding;
298 312
299 313 & + .breadcrumbs {
300 314 margin-top: @padding;
301 315 }
302 316 }
303 317
304 318 .repo-group-desc {
305 319 padding: 8px 0px 0px 0px;
306 320 }
307 321 }
308 322
309 323 .title-main {
310 324 font-size: @repo-title-fontsize;
311 325 }
312 326
313 327 .title-description {
314 328 margin-top: .5em;
315 329 }
316 330
317 331 .q_filter_box {
318 332 width: 200px;
319 333 }
320 334
321 335 }
322 336
323 337 #readme .title {
324 338 text-transform: none;
325 339 }
326 340
327 341 // Lists
328 342 // -------------------------
329 343
330 344 // Unordered and Ordered lists
331 345 ul,
332 346 ol {
333 347 margin-top: 0;
334 348 margin-bottom: @textmargin;
335 349 ul,
336 350 ol {
337 351 margin-bottom: 0;
338 352 }
339 353 }
340 354
341 355 li {
342 356 line-height: 2em;
343 357 }
344 358
345 359 ul li {
346 360 position: relative;
347 361 list-style-type: disc;
348 362
349 363 p:first-child {
350 364 display:inline;
351 365 }
352 366 }
353 367
354 368 // List options
355 369
356 370 // Unstyled keeps list items block level, just removes default browser padding and list-style
357 371 .list-unstyled {
358 372 padding-left: 0;
359 373 list-style: none;
360 374 li:before { content: none; }
361 375 }
362 376
363 377 // Inline turns list items into inline-block
364 378 .list-inline {
365 379 .list-unstyled();
366 380 margin-left: -5px;
367 381
368 382 > li {
369 383 display: inline-block;
370 384 padding-left: 5px;
371 385 padding-right: 5px;
372 386 }
373 387 }
374 388
375 389 // Description Lists
376 390
377 391 dl {
378 392 margin-top: 0; // Remove browser default
379 393 margin-bottom: @textmargin;
380 394 }
381 395
382 396 dt,
383 397 dd {
384 398 line-height: 1.4em;
385 399 }
386 400
387 401 dt {
388 402 margin: @textmargin 0 0 0;
389 403 font-weight: @text-bold-weight;
390 404 font-family: @text-bold;
391 405 }
392 406
393 407 dd {
394 408 margin-left: 0; // Undo browser default
395 409 }
396 410
397 411 // Horizontal description lists
398 412 // Defaults to being stacked without any of the below styles applied, until the
399 413 // grid breakpoint is reached (default of ~768px).
400 414 // These are used in forms as well; see style guide.
401 415 // TODO: lisa: These should really not be used in forms.
402 416
403 417 .dl-horizontal {
404 418
405 419 overflow: hidden;
406 420 margin-bottom: @space;
407 421
408 422 dt, dd {
409 423 float: left;
410 424 margin: 5px 0 5px 0;
411 425 }
412 426
413 427 dt {
414 428 clear: left;
415 429 width: @label-width - @form-vertical-margin;
416 430 }
417 431
418 432 dd {
419 433 &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present
420 434 margin-left: @form-vertical-margin;
421 435 max-width: @form-max-width - (@label-width - @form-vertical-margin) - @form-vertical-margin;
422 436 }
423 437
424 438 pre {
425 439 margin: 0;
426 440 }
427 441
428 442 &.settings {
429 443 dt {
430 444 text-align: left;
431 445 }
432 446 }
433 447
434 448 @media (min-width: 768px) {
435 449 dt {
436 450 float: left;
437 451 width: 185px;
438 452 clear: left;
439 453 text-align: right;
440 454 }
441 455 dd {
442 456 margin-left: 20px;
443 457 }
444 458 }
445 459 }
446 460
447 461
448 462 // Misc
449 463 // -------------------------
450 464
451 465 // Abbreviations and acronyms
452 466 abbr[title],
453 467 abbr[data-original-title] {
454 468 cursor: help;
455 469 border-bottom: @border-thickness dotted @grey4;
456 470 }
457 471 .initialism {
458 472 font-size: 90%;
459 473 text-transform: uppercase;
460 474 }
461 475
462 476 // Blockquotes
463 477 blockquote {
464 478 padding: 1em 2em;
465 479 margin: 0 0 2em;
466 480 font-size: @basefontsize;
467 481 border-left: 2px solid @grey6;
468 482
469 483 p,
470 484 ul,
471 485 ol {
472 486 &:last-child {
473 487 margin-bottom: 0;
474 488 }
475 489 }
476 490
477 491 footer,
478 492 small,
479 493 .small {
480 494 display: block;
481 495 font-size: 80%;
482 496
483 497 &:before {
484 498 content: '\2014 \00A0'; // em dash, nbsp
485 499 }
486 500 }
487 501 }
488 502
489 503 // Opposite alignment of blockquote
490 504 //
491 505 .blockquote-reverse,
492 506 blockquote.pull-right {
493 507 padding-right: 15px;
494 508 padding-left: 0;
495 509 border-right: 5px solid @grey6;
496 510 border-left: 0;
497 511 text-align: right;
498 512
499 513 // Account for citation
500 514 footer,
501 515 small,
502 516 .small {
503 517 &:before { content: ''; }
504 518 &:after {
505 519 content: '\00A0 \2014'; // nbsp, em dash
506 520 }
507 521 }
508 522 }
509 523
510 524 // Addresses
511 525 address {
512 526 margin-bottom: 2em;
513 527 font-style: normal;
514 528 line-height: 1.8em;
515 529 }
516 530
517 531 .error-message {
518 532 display: block;
519 533 margin: @padding/3 0;
520 534 color: @alert2;
521 535 }
522 536
523 537 .issue-tracker-link {
524 538 color: @rcblue;
525 539 }
526 540
527 541 .info_text{
528 542 font-size: @basefontsize;
529 543 color: @grey4;
530 544 font-family: @text-regular;
531 545 }
532 546
533 547 .help-block-inline {
534 548 margin: 0;
535 549 }
536 550
537 551 // help block text
538 552 .help-block {
539 553 display: block;
540 554 margin: 0 0 @padding;
541 555 color: @grey4;
542 556 font-family: @text-light;
543 557 &.pre-formatting {
544 558 white-space: pre-wrap;
545 559 }
546 560 }
547 561
548 562 .error-message {
549 563 display: block;
550 564 margin: @padding/3 0;
551 565 color: @alert2;
552 566 }
@@ -1,150 +1,152 b''
1 1 // variables for use in all RhodeCode products
2 2
3 3 // FONTS
4 4 //Primary Colors (brand)
5 5 @rcblue: #427cc9; //RhodeCode blue
6 6 @rcdarkblue: #305b91; //RhodeCode dark blue
7 7 @rclightblue: lighten(@rcblue, 30%);
8 8 @rchighlightblue: lighten(@rcblue, 35%);
9 9
10 10 // Secondary Colors (greyscale)
11 11 @black: #000;
12 12 @white: #fff;
13 13 @grey1: #2B2B2D; //midnight
14 14 @grey2: #5C5C5C; //charcoal
15 15 @grey3: #7E7F7F; //tungsten
16 16 @grey4: #949494; //light grey
17 17 @grey5: #dbd9da; //greyish
18 18 @grey6: #eeeeee; //silver
19 19 @grey7: #F5F5F5; //light silver
20 20
21 21 // special for navigation
22 22 @nav-grey: #CDCCCD;
23 23
24 24 @grey5-alpha: rgba(219, 217, 218, 0.3);
25 25
26 26 // Tertiary Colors
27 27 @color1: #879938; //olive green
28 28 @color2: #fcc93a; //bright yellow
29 29 @color3: #ff9e07; //orange-yellow
30 30 @color4: #fc663a; //bright orange
31 31 @color5: #d63d44; //signal red
32 32 @color6: #99287c; //violet
33 33 @color7: #682668; //dark purple
34 34 @color8: #194f8e; //dark blue
35 35
36 36 // Alert Colors (bright)
37 37 @alert1: #0ac878; //bright green
38 38 @alert2: #e85e4d; //soft red
39 39 @alert3: #ffc854; //corn yellow
40 40 @alert4: #84a5d2; //light blue
41 41
42 42 // Alert Inner Colors
43 43 @alert1-inner: #daf7eb; //bright green
44 44 @alert2-inner: #fbdfdb; //soft red
45 45 @alert3-inner: #fff4dd; //corn yellow
46 46 @alert4-inner: #e6edf6; //light blue
47 47
48 48 // Highlight color for lines and colors
49 49 @comment-highlight-color: #ffd887;
50 50
51 51 // FONTS
52 52 @basefontsize: 13px;
53 53 @navigation-fontsize: 14px;
54 54 @journal-fontsize: @basefontsize+7px;
55 55 @text-color: @grey2;
56 56 @repo-title-fontsize: 18px;
57 57
58 58 @text-regular: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
59 59 @text-monospace: 'Menlo', 'Liberation Mono', 'Consolas', 'DejaVu Sans Mono', 'Ubuntu Mono', 'Courier New', 'andale mono', 'lucida console', monospace;
60 60
61 61 @text-italic: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
62 62
63 63 @text-bold: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
64 64 @text-bold-weight: 600;
65 65
66 66 @text-semibold: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
67 67 @text-semibold-weight: 500;
68 68
69 69 @text-bold-italic: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
70 70 @text-bold-italic-weight: 600;
71 71
72 72 @text-code: @text-monospace;
73 73 @text-light: @text-regular;
74 74
75 75
76 76 // Used for .close buttons
77 77 @text-bootstrap: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
78 78
79 79 @panel-title: @basefontsize;
80 80 @panel-footer: @basefontsize;
81 81
82 82 // BORDERS
83 83 @border-thickness: 1px;
84 84 @border-thickness-buttons: 1px;
85 85 @border-thickness-tags: 1px;
86 86 @border-radius: 2px;
87 87 @border-default-color: @grey5;
88 88 @border-highlight-color: @grey4;
89 89
90 90 // SPACING
91 91 @contentpadding: 15px; //padding on left and right of pages
92 92 @pagepadding: 40px; //padding on top and bottom of pages
93 93 @menupadding: 12px; //padding for sidebar and content
94 94 @sidebarpadding: 15px; //spacing between sections
95 95 @space: 40px; //spacing between sections
96 96 @padding: 15px; //padding inside modules
97 97 @textmargin: 20px; //spacing below headers
98 98 @header-padding: 20px;
99 99 @panel-padding: @padding;
100 100 @gravatar-size: 16px; // height/width of gravatar w/o border
101 101
102 102 // ADMIN
103 103 @form-max-width: 750px;
104 104
105 105 // FORMS (new)
106 106 @border-thickness-inputs: 1px;
107 107 @input-padding: @button-padding; //needs to match button padding
108 108 // TODO: johbo: Needed for working computation of paddings around labels etc.
109 109 // Expected to be replaced once we are done with the form refactoring.
110 110 @input-padding-px: 12px;
111 111 @legend-width: 220px;
112 112 @form-vertical-margin: 20px;
113 113 @form-check-width: 20px;
114 114 @form-radio-width: 10px;
115 115 @form-textcolor: @grey3;
116 116
117 117 // FORMS
118 118 @label-width: 220px;
119 119 //TODO: lisa: Eventually we don't need both of these; remove
120 120 // label-width when legend-width is no longer used
121 121
122 122 @input-border-thickness: @border-thickness;
123 123 @medium-inline-input-width: 115px;
124 124 @input-description-minwidth: 300px;
125 125 @label2-width: 200px;
126 126 @checkboxes-width: 420px;
127 127 @label-summary-minwidth: 80px;
128 128 @search-form-width: 400px;
129 129 @fields-input-m: 400px;
130 130 @fields-input-l: 720px;
131 131
132 132 // BUTTONS
133 @button-padding: .9em;
133 @button-padding: .7em;
134 @button-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.15);
135
134 136
135 137 // DEFAULT WIDTHS
136 138 @wrapper-maxwidth: 1600px;
137 139 @sidebar-width: 145px;
138 140 @sidebar-all-width: @sidebar-width + 2 * @sidebarpadding;
139 141 @sidebar-small-width: 100px;
140 142 @sidebar-small-all-width: @sidebar-small-width + 2 * @sidebarpadding;
141 143 @texteditor-width: 660px;
142 144 @maincontent-maxwidth: 940px;
143 145 @pullrequest-width: 1025px;
144 146 @summary-menu-stats-width: 200px;
145 147
146 148 // SCREEN WIDTHS
147 149 @screen-sm-min: 320px;
148 150
149 151 // For Bootstrap
150 152 @panel-border-radius: @border-radius;
@@ -1,48 +1,44 b''
1 1 ## -*- coding: utf-8 -*-
2 2 <%inherit file="/base/base.mako"/>
3 3
4 4 <%def name="title()">
5 5 ${_('%s repository group settings') % c.repo_group.name}
6 6 %if c.rhodecode_name:
7 7 &middot; ${h.branding(c.rhodecode_name)}
8 8 %endif
9 9 </%def>
10 10
11 11 <%def name="menu_bar_nav()">
12 12 ${self.menu_items(active='admin')}
13 13 </%def>
14 14
15 15 <%def name="menu_bar_subnav()">
16 16 ${self.repo_group_menu(active='settings')}
17 17 </%def>
18 18
19 19 <%def name="main_content()">
20 20 <%include file="/admin/repo_groups/repo_group_edit_${c.active}.mako"/>
21 21 </%def>
22 22
23 23 <%def name="main()">
24 24
25 25 <div class="box">
26 <div class="title">
27 ${self.repo_group_page_title(c.repo_group)}
28 </div>
29
30 26 <div class="sidebar-col-wrapper">
31 27 ##main
32 28 <div class="sidebar">
33 29 <ul class="nav nav-pills nav-stacked">
34 30 <li class="${'active' if c.active=='settings' else ''}"><a href="${h.route_path('edit_repo_group', repo_group_name=c.repo_group.group_name)}">${_('Settings')}</a></li>
35 31 <li class="${'active' if c.active=='permissions' else ''}"><a href="${h.route_path('edit_repo_group_perms', repo_group_name=c.repo_group.group_name)}">${_('Permissions')}</a></li>
36 32 <li class="${'active' if c.active=='advanced' else ''}"><a href="${h.route_path('edit_repo_group_advanced', repo_group_name=c.repo_group.group_name)}">${_('Advanced')}</a></li>
37 33 <li class="${'active' if c.active=='integrations' else ''}"><a href="${h.route_path('repo_group_integrations_home', repo_group_name=c.repo_group.group_name)}">${_('Integrations')}</a></li>
38 34 </ul>
39 35 </div>
40 36
41 37 <div class="main-content-full-width">
42 38 ${self.main_content()}
43 39 </div>
44 40
45 41 </div>
46 42 </div>
47 43
48 44 </%def>
@@ -1,923 +1,933 b''
1 1 ## -*- coding: utf-8 -*-
2 2 <%inherit file="root.mako"/>
3 3
4 4 <%include file="/ejs_templates/templates.html"/>
5 5
6 6 <div class="outerwrapper">
7 7 <!-- HEADER -->
8 8 <div class="header">
9 9 <div id="header-inner" class="wrapper">
10 10 <div id="logo">
11 11 <div class="logo-wrapper">
12 12 <a href="${h.route_path('home')}"><img src="${h.asset('images/rhodecode-logo-white-60x60.png')}" alt="RhodeCode"/></a>
13 13 </div>
14 14 % if c.rhodecode_name:
15 15 <div class="branding">
16 16 <a href="${h.route_path('home')}">${h.branding(c.rhodecode_name)}</a>
17 17 </div>
18 18 % endif
19 19 </div>
20 20 <!-- MENU BAR NAV -->
21 21 ${self.menu_bar_nav()}
22 22 <!-- END MENU BAR NAV -->
23 23 </div>
24 24 </div>
25 25 ${self.menu_bar_subnav()}
26 26 <!-- END HEADER -->
27 27
28 28 <!-- CONTENT -->
29 29 <div id="content" class="wrapper">
30 30
31 31 <rhodecode-toast id="notifications"></rhodecode-toast>
32 32
33 33 <div class="main">
34 34 ${next.main()}
35 35 </div>
36 36 </div>
37 37 <!-- END CONTENT -->
38 38
39 39 </div>
40 40 <!-- FOOTER -->
41 41 <div id="footer">
42 42 <div id="footer-inner" class="title wrapper">
43 43 <div>
44 44 <p class="footer-link-right">
45 45 % if c.visual.show_version:
46 46 RhodeCode Enterprise ${c.rhodecode_version} ${c.rhodecode_edition}
47 47 % endif
48 48 &copy; 2010-${h.datetime.today().year}, <a href="${h.route_url('rhodecode_official')}" target="_blank">RhodeCode GmbH</a>. All rights reserved.
49 49 % if c.visual.rhodecode_support_url:
50 50 <a href="${c.visual.rhodecode_support_url}" target="_blank">${_('Support')}</a>
51 51 % endif
52 52 </p>
53 53 <% sid = 'block' if request.GET.get('showrcid') else 'none' %>
54 54 <p class="server-instance" style="display:${sid}">
55 55 ## display hidden instance ID if specially defined
56 56 % if c.rhodecode_instanceid:
57 57 ${_('RhodeCode instance id: {}').format(c.rhodecode_instanceid)}
58 58 % endif
59 59 </p>
60 60 </div>
61 61 </div>
62 62 </div>
63 63
64 64 <!-- END FOOTER -->
65 65
66 66 ### MAKO DEFS ###
67 67
68 68 <%def name="menu_bar_subnav()">
69 69 </%def>
70 70
71 71 <%def name="breadcrumbs(class_='breadcrumbs')">
72 72 <div class="${class_}">
73 73 ${self.breadcrumbs_links()}
74 74 </div>
75 75 </%def>
76 76
77 77 <%def name="admin_menu(active=None)">
78 78 <div id="context-bar">
79 79 <div class="wrapper">
80 <div class="title">
81 <div class="title-content">
82 <div class="title-main">
83 Admin Panel
84 </div>
85 </div>
86 </div>
87
80 88 <ul id="context-pages" class="navigation horizontal-list">
81 89 <%
82 90 repositories=c.rhodecode_user.repositories_admin
83 91 repository_groups=c.rhodecode_user.repository_groups_admin
84 92 user_groups=c.rhodecode_user.user_groups_admin or h.HasPermissionAny('hg.usergroup.create.true')()
85 93 def is_active(selected):
86 94 if selected == active:
87 95 return "active"
88 96 %>
89 97 ## super admin case
90 98 % if c.rhodecode_user.is_admin:
91 99 <li class="${is_active('audit_logs')}"><a href="${h.route_path('admin_audit_logs')}">${_('Admin audit logs')}</a></li>
92 100 <li class="${is_active('repositories')}"><a href="${h.route_path('repos')}">${_('Repositories')}</a></li>
93 101 <li class="${is_active('repository_groups')}"><a href="${h.route_path('repo_groups')}">${_('Repository groups')}</a></li>
94 102 <li class="${is_active('users')}"><a href="${h.route_path('users')}">${_('Users')}</a></li>
95 103 <li class="${is_active('user_groups')}"><a href="${h.route_path('user_groups')}">${_('User groups')}</a></li>
96 104 <li class="${is_active('permissions')}"><a href="${h.route_path('admin_permissions_application')}">${_('Permissions')}</a></li>
97 105 <li class="${is_active('authentication')}"><a href="${h.route_path('auth_home', traverse='')}">${_('Authentication')}</a></li>
98 106 <li class="${is_active('integrations')}"><a href="${h.route_path('global_integrations_home')}">${_('Integrations')}</a></li>
99 107 <li class="${is_active('defaults')}"><a href="${h.route_path('admin_defaults_repositories')}">${_('Defaults')}</a></li>
100 108 <li class="${is_active('settings')}"><a href="${h.route_path('admin_settings')}">${_('Settings')}</a></li>
101 109
102 110 ## delegated admin
103 111 % elif repositories or repository_groups or user_groups:
104 112
105 113 %if repositories:
106 114 <li class="${is_active('repositories')} local-admin-repos"><a href="${h.route_path('repos')}">${_('Repositories')}</a></li>
107 115 %endif
108 116 %if repository_groups:
109 117 <li class="${is_active('repository_groups')} local-admin-repo-groups"><a href="${h.route_path('repo_groups')}">${_('Repository groups')}</a></li>
110 118 %endif
111 119 %if user_groups:
112 120 <li class="${is_active('user_groups')} local-admin-user-groups"><a href="${h.route_path('user_groups')}">${_('User groups')}</a></li>
113 121 %endif
114 122 % endif
115 123 </ul>
116 124 </div>
117 125 <div class="clear"></div>
118 126 </div>
119 127 </%def>
120 128
121
122 129 <%def name="dt_info_panel(elements)">
123 130 <dl class="dl-horizontal">
124 131 %for dt, dd, title, show_items in elements:
125 132 <dt>${dt}:</dt>
126 133 <dd title="${h.tooltip(title)}">
127 134 %if callable(dd):
128 135 ## allow lazy evaluation of elements
129 136 ${dd()}
130 137 %else:
131 138 ${dd}
132 139 %endif
133 140 %if show_items:
134 141 <span class="btn-collapse" data-toggle="item-${h.md5_safe(dt)[:6]}-details">${_('Show More')} </span>
135 142 %endif
136 143 </dd>
137 144
138 145 %if show_items:
139 146 <div class="collapsable-content" data-toggle="item-${h.md5_safe(dt)[:6]}-details" style="display: none">
140 147 %for item in show_items:
141 148 <dt></dt>
142 149 <dd>${item}</dd>
143 150 %endfor
144 151 </div>
145 152 %endif
146 153
147 154 %endfor
148 155 </dl>
149 156 </%def>
150 157
151
152 158 <%def name="gravatar(email, size=16)">
153 159 <%
154 160 if (size > 16):
155 161 gravatar_class = 'gravatar gravatar-large'
156 162 else:
157 163 gravatar_class = 'gravatar'
158 164 %>
159 165 <%doc>
160 166 TODO: johbo: For now we serve double size images to make it smooth
161 167 for retina. This is how it worked until now. Should be replaced
162 168 with a better solution at some point.
163 169 </%doc>
164 170 <img class="${gravatar_class}" src="${h.gravatar_url(email, size * 2)}" height="${size}" width="${size}">
165 171 </%def>
166 172
167 173
168 174 <%def name="gravatar_with_user(contact, size=16, show_disabled=False)">
169 175 <% email = h.email_or_none(contact) %>
170 176 <div class="rc-user tooltip" title="${h.tooltip(h.author_string(email))}">
171 177 ${self.gravatar(email, size)}
172 178 <span class="${'user user-disabled' if show_disabled else 'user'}"> ${h.link_to_user(contact)}</span>
173 179 </div>
174 180 </%def>
175 181
176 182
177 183 <%def name="repo_page_title(repo_instance)">
178 184 <div class="title-content">
179 185 <div class="title-main">
180 186 ## SVN/HG/GIT icons
181 187 %if h.is_hg(repo_instance):
182 188 <i class="icon-hg"></i>
183 189 %endif
184 190 %if h.is_git(repo_instance):
185 191 <i class="icon-git"></i>
186 192 %endif
187 193 %if h.is_svn(repo_instance):
188 194 <i class="icon-svn"></i>
189 195 %endif
190 196
191 197 ## public/private
192 198 %if repo_instance.private:
193 199 <i class="icon-repo-private"></i>
194 200 %else:
195 201 <i class="icon-repo-public"></i>
196 202 %endif
197 203
198 204 ## repo name with group name
199 205 ${h.breadcrumb_repo_link(repo_instance)}
200 206
201 207 </div>
202 208
203 209 ## FORKED
204 210 %if repo_instance.fork:
205 <p>
211 <p class="discreet">
206 212 <i class="icon-code-fork"></i> ${_('Fork of')}
207 213 ${h.link_to_if(c.has_origin_repo_read_perm,repo_instance.fork.repo_name, h.route_path('repo_summary', repo_name=repo_instance.fork.repo_name))}
208 214 </p>
209 215 %endif
210 216
211 217 ## IMPORTED FROM REMOTE
212 218 %if repo_instance.clone_uri:
213 <p>
219 <p class="discreet">
214 220 <i class="icon-code-fork"></i> ${_('Clone from')}
215 221 <a href="${h.safe_str(h.hide_credentials(repo_instance.clone_uri))}">${h.hide_credentials(repo_instance.clone_uri)}</a>
216 222 </p>
217 223 %endif
218 224
219 225 ## LOCKING STATUS
220 226 %if repo_instance.locked[0]:
221 <p class="locking_locked">
227 <p class="locking_locked discreet">
222 228 <i class="icon-repo-lock"></i>
223 229 ${_('Repository locked by %(user)s') % {'user': h.person_by_id(repo_instance.locked[0])}}
224 230 </p>
225 231 %elif repo_instance.enable_locking:
226 <p class="locking_unlocked">
232 <p class="locking_unlocked discreet">
227 233 <i class="icon-repo-unlock"></i>
228 234 ${_('Repository not locked. Pull repository to lock it.')}
229 235 </p>
230 236 %endif
231 237
232 238 </div>
233 239 </%def>
234 240
235 241 <%def name="repo_menu(active=None)">
236 242 <%
237 243 def is_active(selected):
238 244 if selected == active:
239 245 return "active"
240 246 %>
241 247
242 248 <!--- REPO CONTEXT BAR -->
243 249 <div id="context-bar">
244 250 <div class="wrapper">
245 251
246 252 <div class="title">
247 253 ${self.repo_page_title(c.rhodecode_db_repo)}
248 254 </div>
249 255
250 256 <ul id="context-pages" class="navigation horizontal-list">
251 257 <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>
252 258 <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>
253 259 <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>
254 260 <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>
255 261
256 262 ## TODO: anderson: ideally it would have a function on the scm_instance "enable_pullrequest() and enable_fork()"
257 263 %if c.rhodecode_db_repo.repo_type in ['git','hg']:
258 264 <li class="${is_active('showpullrequest')}">
259 265 <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)}">
260 266 <div class="menulabel">
261 267 %if c.repository_pull_requests == 1:
262 268 ${c.repository_pull_requests} ${_('Pull Request')}
263 269 %else:
264 270 ${c.repository_pull_requests} ${_('Pull Requests')}
265 271 %endif
266 272 </div>
267 273 </a>
268 274 </li>
269 275 %endif
270 276
271 277 %if h.HasRepoPermissionAll('repository.admin')(c.repo_name):
272 278 <li class="${is_active('settings')}"><a class="menulink" href="${h.route_path('edit_repo',repo_name=c.repo_name)}"><div class="menulabel">${_('Repository Settings')}</div></a></li>
273 279 %endif
274 280
275 281 <li class="${is_active('options')}">
276 282 <a class="menulink dropdown">
277 283 <div class="menulabel">${_('Options')} <div class="show_more"></div></div>
278 284 </a>
279 285 <ul class="submenu">
280 286
281 287 %if c.rhodecode_db_repo.fork:
282 288 <li>
283 289 <a title="${h.tooltip(_('Compare fork with %s' % c.rhodecode_db_repo.fork.repo_name))}"
284 290 href="${h.route_path('repo_compare',
285 291 repo_name=c.rhodecode_db_repo.fork.repo_name,
286 292 source_ref_type=c.rhodecode_db_repo.landing_rev[0],
287 293 source_ref=c.rhodecode_db_repo.landing_rev[1],
288 294 target_repo=c.repo_name,target_ref_type='branch' if request.GET.get('branch') else c.rhodecode_db_repo.landing_rev[0],
289 295 target_ref=request.GET.get('branch') or c.rhodecode_db_repo.landing_rev[1],
290 296 _query=dict(merge=1))}"
291 297 >
292 298 ${_('Compare fork')}
293 299 </a>
294 300 </li>
295 301 %endif
296 302
297 303 %if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name) and c.rhodecode_db_repo.enable_locking:
298 304 %if c.rhodecode_db_repo.locked[0]:
299 305 <li><a class="locking_del" href="${h.route_path('repo_edit_toggle_locking',repo_name=c.repo_name)}">${_('Unlock')}</a></li>
300 306 %else:
301 307 <li><a class="locking_add" href="${h.route_path('repo_edit_toggle_locking',repo_name=c.repo_name)}">${_('Lock')}</a></li>
302 308 %endif
303 309 %endif
304 310 %if c.rhodecode_user.username != h.DEFAULT_USER:
305 311 %if c.rhodecode_db_repo.repo_type in ['git','hg']:
306 312 <li><a href="${h.route_path('repo_fork_new',repo_name=c.repo_name)}">${_('Fork')}</a></li>
307 313 <li><a href="${h.route_path('pullrequest_new',repo_name=c.repo_name)}">${_('Create Pull Request')}</a></li>
308 314 %endif
309 315 %endif
310 316 </ul>
311 317 </li>
312 318 </ul>
313 319 </div>
314 320 <div class="clear"></div>
315 321 </div>
316 322 % if c.rhodecode_db_repo.archived:
317 323 <div class="alert alert-warning text-center">
318 324 <strong>${_('This repository has been archived. It is now read-only.')}</strong>
319 325 </div>
320 326 % endif
321 327 <!--- REPO END CONTEXT BAR -->
322 328
323 329 </%def>
324 330
325 331 <%def name="repo_group_page_title(repo_group_instance)">
326 332 <div class="title-content">
327 333 <div class="title-main">
328 334 ## Repository Group icon
329 335 <i class="icon-folder-close"></i>
330 336
331 337 ## repo name with group name
332 338 ${h.breadcrumb_repo_group_link(repo_group_instance)}
333 339 </div>
334 340
335 341 <%namespace name="dt" file="/data_table/_dt_elements.mako"/>
336 342 <div class="repo-group-desc">
337 343 ${dt.repo_group_desc(repo_group_instance.description_safe, repo_group_instance.personal, c.visual.stylify_metatags)}
338 344 </div>
339 345
340 346 </div>
341 347 </%def>
342 348
343 349 <%def name="repo_group_menu(active=None)">
344 350 <%
345 351 def is_active(selected):
346 352 if selected == active:
347 353 return "active"
348 354
349 355 is_admin = h.HasPermissionAny('hg.admin')('can create repos index page')
350 356
351 357 gr_name = c.repo_group.group_name if c.repo_group else None
352 358 # create repositories with write permission on group is set to true
353 359 create_on_write = h.HasPermissionAny('hg.create.write_on_repogroup.true')()
354 360 group_admin = h.HasRepoGroupPermissionAny('group.admin')(gr_name, 'group admin index page')
355 361 group_write = h.HasRepoGroupPermissionAny('group.write')(gr_name, 'can write into group index page')
356 362
357 363 %>
358 364
359 365 <!--- REPO GROUP CONTEXT BAR -->
360 366 <div id="context-bar">
361 367 <div class="wrapper">
368 <div class="title">
369 ${self.repo_group_page_title(c.repo_group)}
370 </div>
371
362 372 <ul id="context-pages" class="navigation horizontal-list">
363 373 <li class="${is_active('home')}"><a class="menulink" href="${h.route_path('repo_group_home', repo_group_name=c.repo_group.group_name)}"><div class="menulabel">${_('Group Home')}</div></a></li>
364 374 % if is_admin or group_admin:
365 375 <li class="${is_active('settings')}"><a class="menulink" href="${h.route_path('edit_repo_group',repo_group_name=c.repo_group.group_name)}" title="${_('You have admin right to this group, and can edit it')}"><div class="menulabel">${_('Group Settings')}</div></a></li>
366 376 % endif
367 377
368 378 <li class="${is_active('options')}">
369 379 <a class="menulink dropdown">
370 380 <div class="menulabel">${_('Options')} <div class="show_more"></div></div>
371 381 </a>
372 382 <ul class="submenu">
373 383 %if is_admin or group_admin or (group_write and create_on_write):
374 384 <li><a href="${h.route_path('repo_new',_query=dict(parent_group=c.repo_group.group_id))}">${_('Add Repository')}</a></li>
375 385 %endif
376 386 %if is_admin or group_admin:
377 387 <li><a href="${h.route_path('repo_group_new',_query=dict(parent_group=c.repo_group.group_id))}">${_(u'Add Parent Group')}</a></li>
378 388 %endif
379 389 </ul>
380 390 </li>
381 391 </ul>
382 392 </div>
383 393 <div class="clear"></div>
384 394 </div>
385 395
386 396 <!--- REPO GROUP CONTEXT BAR -->
387 397
388 398 </%def>
389 399
390 400
391 401 <%def name="usermenu(active=False)">
392 402 ## USER MENU
393 403 <li id="quick_login_li" class="${'active' if active else ''}">
394 404 % if c.rhodecode_user.username == h.DEFAULT_USER:
395 405 <a id="quick_login_link" class="menulink childs" href="${h.route_path('login', _query={'came_from': h.current_route_path(request)})}">
396 406 ${gravatar(c.rhodecode_user.email, 20)}
397 407 <span class="user">
398 408 <span>${_('Sign in')}</span>
399 409 </span>
400 410 </a>
401 411 % else:
402 412 ## logged in user
403 413 <a id="quick_login_link" class="menulink childs">
404 414 ${gravatar(c.rhodecode_user.email, 20)}
405 415 <span class="user">
406 416 <span class="menu_link_user">${c.rhodecode_user.username}</span>
407 417 <div class="show_more"></div>
408 418 </span>
409 419 </a>
410 420 ## subnav with menu for logged in user
411 421 <div class="user-menu submenu">
412 422 <div id="quick_login">
413 423 %if c.rhodecode_user.username != h.DEFAULT_USER:
414 424 <div class="">
415 425 <div class="big_gravatar">${gravatar(c.rhodecode_user.email, 48)}</div>
416 426 <div class="full_name">${c.rhodecode_user.full_name_or_username}</div>
417 427 <div class="email">${c.rhodecode_user.email}</div>
418 428 </div>
419 429 <div class="">
420 430 <ol class="links">
421 431 <li>${h.link_to(_(u'My account'),h.route_path('my_account_profile'))}</li>
422 432 % if c.rhodecode_user.personal_repo_group:
423 433 <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>
424 434 % endif
425 435 <li>${h.link_to(_(u'Pull Requests'), h.route_path('my_account_pullrequests'))}</li>
426 436 ## bookmark-items
427 437 <li class="bookmark-items">
428 438 ${_('Bookmarks')}
429 439 <div class="pull-right">
430 440 <a href="${h.route_path('my_account_bookmarks')}">${_('Manage')}</a>
431 441 </div>
432 442 </li>
433 443 % if not c.bookmark_items:
434 444 <li>
435 445 <a href="${h.route_path('my_account_bookmarks')}">${_('No Bookmarks yet.')}</a>
436 446 </li>
437 447 % endif
438 448 % for item in c.bookmark_items:
439 449 <li>
440 450 % if item.repository:
441 451 <div>
442 452 <a class="bookmark-item" href="${h.route_path('my_account_goto_bookmark', bookmark_id=item.position)}">
443 453 <code>${item.position}</code>
444 454 % if item.repository.repo_type == 'hg':
445 455 <i class="icon-hg" title="${_('Repository')}" style="font-size: 16px"></i>
446 456 % elif item.repository.repo_type == 'git':
447 457 <i class="icon-git" title="${_('Repository')}" style="font-size: 16px"></i>
448 458 % elif item.repository.repo_type == 'svn':
449 459 <i class="icon-svn" title="${_('Repository')}" style="font-size: 16px"></i>
450 460 % endif
451 461 ${(item.title or h.shorter(item.repository.repo_name, 30))}
452 462 </a>
453 463 </div>
454 464 % elif item.repository_group:
455 465 <div>
456 466 <a class="bookmark-item" href="${h.route_path('my_account_goto_bookmark', bookmark_id=item.position)}">
457 467 <code>${item.position}</code>
458 468 <i class="icon-folder-close" title="${_('Repository group')}" style="font-size: 16px"></i>
459 469 ${(item.title or h.shorter(item.repository_group.group_name, 30))}
460 470 </a>
461 471 </div>
462 472 % else:
463 473 <a class="bookmark-item" href="${h.route_path('my_account_goto_bookmark', bookmark_id=item.position)}">
464 474 <code>${item.position}</code>
465 475 ${item.title}
466 476 </a>
467 477 % endif
468 478 </li>
469 479 % endfor
470 480
471 481 <li class="logout">
472 482 ${h.secure_form(h.route_path('logout'), request=request)}
473 483 ${h.submit('log_out', _(u'Sign Out'),class_="btn btn-primary")}
474 484 ${h.end_form()}
475 485 </li>
476 486 </ol>
477 487 </div>
478 488 %endif
479 489 </div>
480 490 </div>
481 491 ## unread counter
482 492 <div class="pill_container">
483 493 <a class="menu_link_notifications ${'empty' if c.unread_notifications == 0 else ''}" href="${h.route_path('notifications_show_all')}">${c.unread_notifications}</a>
484 494 </div>
485 495 % endif
486 496 </li>
487 497 </%def>
488 498
489 499 <%def name="menu_items(active=None)">
490 500 <%
491 501 def is_active(selected):
492 502 if selected == active:
493 503 return "active"
494 504 return ""
495 505 %>
496 506
497 507 <ul id="quick" class="main_nav navigation horizontal-list">
498 508 ## notice box for important system messages
499 509 <li style="display: none">
500 510 <a class="notice-box" href="#openNotice" onclick="showNoticeBox(); return false">
501 511 <div class="menulabel-notice" >
502 512 0
503 513 </div>
504 514 </a>
505 515 </li>
506 516
507 517 ## Main filter
508 518 <li>
509 519 <div class="menulabel main_filter_box">
510 520 <div class="main_filter_input_box">
511 521 <ul class="searchItems">
512 522
513 523 % if c.template_context['search_context']['repo_id']:
514 524 <li class="searchTag searchTagFilter searchTagHidable" >
515 525 ##<a href="${h.route_path('search_repo',repo_name=c.template_context['search_context']['repo_name'])}">
516 526 <span class="tag">
517 527 This repo
518 528 <a href="#removeGoToFilter" onclick="removeGoToFilter(); return false"><i class="icon-delete"></i></a>
519 529 </span>
520 530 ##</a>
521 531 </li>
522 532 % elif c.template_context['search_context']['repo_group_id']:
523 533 <li class="searchTag searchTagFilter searchTagHidable">
524 534 ##<a href="${h.route_path('search_repo_group',repo_group_name=c.template_context['search_context']['repo_group_name'])}">
525 535 <span class="tag">
526 536 This group
527 537 <a href="#removeGoToFilter" onclick="removeGoToFilter(); return false"><i class="icon-delete"></i></a>
528 538 </span>
529 539 ##</a>
530 540 </li>
531 541 % endif
532 542
533 543 <li class="searchTagInput">
534 544 <input class="main_filter_input" id="main_filter" size="15" type="text" name="main_filter" placeholder="${_('search / go to...')}" value="" />
535 545 </li>
536 546 <li class="searchTag searchTagHelp">
537 547 <a href="#showFilterHelp" onclick="showMainFilterBox(); return false">?</a>
538 548 </li>
539 549 </ul>
540 550 </div>
541 551 </div>
542 552
543 553 <div id="main_filter_help" style="display: none">
544 554 - Use '/' key to quickly access this field.
545 555
546 556 - Enter a name of repository, or repository group for quick search.
547 557
548 558 - Prefix query to allow special search:
549 559
550 560 user:admin, to search for usernames, always global
551 561
552 562 user_group:devops, to search for user groups, always global
553 563
554 564 commit:efced4, to search for commits, scoped to repositories or groups
555 565
556 566 file:models.py, to search for file paths, scoped to repositories or groups
557 567
558 568 % if c.template_context['search_context']['repo_id']:
559 569 For advanced full text search visit: <a href="${h.route_path('search_repo',repo_name=c.template_context['search_context']['repo_name'])}">repository search</a>
560 570 % elif c.template_context['search_context']['repo_group_id']:
561 571 For advanced full text search visit: <a href="${h.route_path('search_repo_group',repo_group_name=c.template_context['search_context']['repo_group_name'])}">repository group search</a>
562 572 % else:
563 573 For advanced full text search visit: <a href="${h.route_path('search')}">global search</a>
564 574 % endif
565 575 </div>
566 576 </li>
567 577
568 578 ## ROOT MENU
569 579 <li class="${is_active('home')}">
570 580 <a class="menulink" title="${_('Home')}" href="${h.route_path('home')}">
571 581 <div class="menulabel">${_('Home')}</div>
572 582 </a>
573 583 </li>
574 584
575 585 %if c.rhodecode_user.username != h.DEFAULT_USER:
576 586 <li class="${is_active('journal')}">
577 587 <a class="menulink" title="${_('Show activity journal')}" href="${h.route_path('journal')}">
578 588 <div class="menulabel">${_('Journal')}</div>
579 589 </a>
580 590 </li>
581 591 %else:
582 592 <li class="${is_active('journal')}">
583 593 <a class="menulink" title="${_('Show Public activity journal')}" href="${h.route_path('journal_public')}">
584 594 <div class="menulabel">${_('Public journal')}</div>
585 595 </a>
586 596 </li>
587 597 %endif
588 598
589 599 <li class="${is_active('gists')}">
590 600 <a class="menulink childs" title="${_('Show Gists')}" href="${h.route_path('gists_show')}">
591 601 <div class="menulabel">${_('Gists')}</div>
592 602 </a>
593 603 </li>
594 604
595 605 <li class="${is_active('admin')}">
596 606 <a class="menulink childs" title="${_('Admin settings')}" href="${h.route_path('admin_home')}">
597 607 <div class="menulabel">${_('Admin')} </div>
598 608 </a>
599 609 </li>
600 610
601 611 ## render extra user menu
602 612 ${usermenu(active=(active=='my_account'))}
603 613
604 614 % if c.debug_style:
605 615 <li>
606 616 <a class="menulink" title="${_('Style')}" href="${h.route_path('debug_style_home')}">
607 617 <div class="menulabel">${_('[Style]')}</div>
608 618 </a>
609 619 </li>
610 620 % endif
611 621 </ul>
612 622
613 623 <script type="text/javascript">
614 624 var visualShowPublicIcon = "${c.visual.show_public_icon}" == "True";
615 625
616 626 var formatRepoResult = function(result, container, query, escapeMarkup) {
617 627 return function(data, escapeMarkup) {
618 628 if (!data.repo_id){
619 629 return data.text; // optgroup text Repositories
620 630 }
621 631
622 632 var tmpl = '';
623 633 var repoType = data['repo_type'];
624 634 var repoName = data['text'];
625 635
626 636 if(data && data.type == 'repo'){
627 637 if(repoType === 'hg'){
628 638 tmpl += '<i class="icon-hg"></i> ';
629 639 }
630 640 else if(repoType === 'git'){
631 641 tmpl += '<i class="icon-git"></i> ';
632 642 }
633 643 else if(repoType === 'svn'){
634 644 tmpl += '<i class="icon-svn"></i> ';
635 645 }
636 646 if(data['private']){
637 647 tmpl += '<i class="icon-lock" ></i> ';
638 648 }
639 649 else if(visualShowPublicIcon){
640 650 tmpl += '<i class="icon-unlock-alt"></i> ';
641 651 }
642 652 }
643 653 tmpl += escapeMarkup(repoName);
644 654 return tmpl;
645 655
646 656 }(result, escapeMarkup);
647 657 };
648 658
649 659 var formatRepoGroupResult = function(result, container, query, escapeMarkup) {
650 660 return function(data, escapeMarkup) {
651 661 if (!data.repo_group_id){
652 662 return data.text; // optgroup text Repositories
653 663 }
654 664
655 665 var tmpl = '';
656 666 var repoGroupName = data['text'];
657 667
658 668 if(data){
659 669
660 670 tmpl += '<i class="icon-folder-close"></i> ';
661 671
662 672 }
663 673 tmpl += escapeMarkup(repoGroupName);
664 674 return tmpl;
665 675
666 676 }(result, escapeMarkup);
667 677 };
668 678
669 679 var escapeRegExChars = function (value) {
670 680 return value.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
671 681 };
672 682
673 683 var getRepoIcon = function(repo_type) {
674 684 if (repo_type === 'hg') {
675 685 return '<i class="icon-hg"></i> ';
676 686 }
677 687 else if (repo_type === 'git') {
678 688 return '<i class="icon-git"></i> ';
679 689 }
680 690 else if (repo_type === 'svn') {
681 691 return '<i class="icon-svn"></i> ';
682 692 }
683 693 return ''
684 694 };
685 695
686 696 var autocompleteMainFilterFormatResult = function (data, value, org_formatter) {
687 697
688 698 if (value.split(':').length === 2) {
689 699 value = value.split(':')[1]
690 700 }
691 701
692 702 var searchType = data['type'];
693 703 var valueDisplay = data['value_display'];
694 704
695 705 var pattern = '(' + escapeRegExChars(value) + ')';
696 706
697 707 valueDisplay = Select2.util.escapeMarkup(valueDisplay);
698 708
699 709 // highlight match
700 710 if (searchType != 'text') {
701 711 valueDisplay = valueDisplay.replace(new RegExp(pattern, 'gi'), '<strong>$1<\/strong>');
702 712 }
703 713
704 714 var icon = '';
705 715
706 716 if (searchType === 'hint') {
707 717 icon += '<i class="icon-folder-close"></i> ';
708 718 }
709 719 // full text search
710 720 else if (searchType === 'search') {
711 721 icon += '<i class="icon-more"></i> ';
712 722 }
713 723 // repository
714 724 else if (searchType === 'repo') {
715 725
716 726 var repoIcon = getRepoIcon(data['repo_type']);
717 727 icon += repoIcon;
718 728
719 729 if (data['private']) {
720 730 icon += '<i class="icon-lock" ></i> ';
721 731 }
722 732 else if (visualShowPublicIcon) {
723 733 icon += '<i class="icon-unlock-alt"></i> ';
724 734 }
725 735 }
726 736 // repository groups
727 737 else if (searchType === 'repo_group') {
728 738 icon += '<i class="icon-folder-close"></i> ';
729 739 }
730 740 // user group
731 741 else if (searchType === 'user_group') {
732 742 icon += '<i class="icon-group"></i> ';
733 743 }
734 744 // user
735 745 else if (searchType === 'user') {
736 746 icon += '<img class="gravatar" src="{0}"/>'.format(data['icon_link']);
737 747 }
738 748 // commit
739 749 else if (searchType === 'commit') {
740 750 var repo_data = data['repo_data'];
741 751 var repoIcon = getRepoIcon(repo_data['repository_type']);
742 752 if (repoIcon) {
743 753 icon += repoIcon;
744 754 } else {
745 755 icon += '<i class="icon-tag"></i>';
746 756 }
747 757 }
748 758 // file
749 759 else if (searchType === 'file') {
750 760 var repo_data = data['repo_data'];
751 761 var repoIcon = getRepoIcon(repo_data['repository_type']);
752 762 if (repoIcon) {
753 763 icon += repoIcon;
754 764 } else {
755 765 icon += '<i class="icon-tag"></i>';
756 766 }
757 767 }
758 768 // generic text
759 769 else if (searchType === 'text') {
760 770 icon = '';
761 771 }
762 772
763 773 var tmpl = '<div class="ac-container-wrap">{0}{1}</div>';
764 774 return tmpl.format(icon, valueDisplay);
765 775 };
766 776
767 777 var handleSelect = function(element, suggestion) {
768 778 if (suggestion.type === "hint") {
769 779 // we skip action
770 780 $('#main_filter').focus();
771 781 }
772 782 else if (suggestion.type === "text") {
773 783 // we skip action
774 784 $('#main_filter').focus();
775 785
776 786 } else {
777 787 window.location = suggestion['url'];
778 788 }
779 789 };
780 790
781 791 var autocompleteMainFilterResult = function (suggestion, originalQuery, queryLowerCase) {
782 792 if (queryLowerCase.split(':').length === 2) {
783 793 queryLowerCase = queryLowerCase.split(':')[1]
784 794 }
785 795 if (suggestion.type === "text") {
786 796 // special case we don't want to "skip" display for
787 797 return true
788 798 }
789 799 return suggestion.value_display.toLowerCase().indexOf(queryLowerCase) !== -1;
790 800 };
791 801
792 802 var cleanContext = {
793 803 repo_view_type: null,
794 804
795 805 repo_id: null,
796 806 repo_name: "",
797 807
798 808 repo_group_id: null,
799 809 repo_group_name: null
800 810 };
801 811 var removeGoToFilter = function () {
802 812 $('.searchTagHidable').hide();
803 813 $('#main_filter').autocomplete(
804 814 'setOptions', {params:{search_context: cleanContext}});
805 815 };
806 816
807 817 $('#main_filter').autocomplete({
808 818 serviceUrl: pyroutes.url('goto_switcher_data'),
809 819 params: {
810 820 "search_context": templateContext.search_context
811 821 },
812 822 minChars:2,
813 823 maxHeight:400,
814 824 deferRequestBy: 300, //miliseconds
815 825 tabDisabled: true,
816 826 autoSelectFirst: false,
817 827 formatResult: autocompleteMainFilterFormatResult,
818 828 lookupFilter: autocompleteMainFilterResult,
819 829 onSelect: function (element, suggestion) {
820 830 handleSelect(element, suggestion);
821 831 return false;
822 832 },
823 833 onSearchError: function (element, query, jqXHR, textStatus, errorThrown) {
824 834 if (jqXHR !== 'abort') {
825 835 alert("Error during search.\nError code: {0}".format(textStatus));
826 836 window.location = '';
827 837 }
828 838 }
829 839 });
830 840
831 841 showMainFilterBox = function () {
832 842 $('#main_filter_help').toggle();
833 843 };
834 844
835 845 $('#main_filter').on('keydown.autocomplete', function (e) {
836 846
837 847 var BACKSPACE = 8;
838 848 var el = $(e.currentTarget);
839 849 if(e.which === BACKSPACE){
840 850 var inputVal = el.val();
841 851 if (inputVal === ""){
842 852 removeGoToFilter()
843 853 }
844 854 }
845 855 });
846 856
847 857 </script>
848 858 <script src="${h.asset('js/rhodecode/base/keyboard-bindings.js', ver=c.rhodecode_version_hash)}"></script>
849 859 </%def>
850 860
851 861 <div class="modal" id="help_kb" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
852 862 <div class="modal-dialog">
853 863 <div class="modal-content">
854 864 <div class="modal-header">
855 865 <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
856 866 <h4 class="modal-title" id="myModalLabel">${_('Keyboard shortcuts')}</h4>
857 867 </div>
858 868 <div class="modal-body">
859 869 <div class="block-left">
860 870 <table class="keyboard-mappings">
861 871 <tbody>
862 872 <tr>
863 873 <th></th>
864 874 <th>${_('Site-wide shortcuts')}</th>
865 875 </tr>
866 876 <%
867 877 elems = [
868 878 ('/', 'Use quick search box'),
869 879 ('g h', 'Goto home page'),
870 880 ('g g', 'Goto my private gists page'),
871 881 ('g G', 'Goto my public gists page'),
872 882 ('g 0-9', 'Goto bookmarked items from 0-9'),
873 883 ('n r', 'New repository page'),
874 884 ('n g', 'New gist page'),
875 885 ]
876 886 %>
877 887 %for key, desc in elems:
878 888 <tr>
879 889 <td class="keys">
880 890 <span class="key tag">${key}</span>
881 891 </td>
882 892 <td>${desc}</td>
883 893 </tr>
884 894 %endfor
885 895 </tbody>
886 896 </table>
887 897 </div>
888 898 <div class="block-left">
889 899 <table class="keyboard-mappings">
890 900 <tbody>
891 901 <tr>
892 902 <th></th>
893 903 <th>${_('Repositories')}</th>
894 904 </tr>
895 905 <%
896 906 elems = [
897 907 ('g s', 'Goto summary page'),
898 908 ('g c', 'Goto changelog page'),
899 909 ('g f', 'Goto files page'),
900 910 ('g F', 'Goto files page with file search activated'),
901 911 ('g p', 'Goto pull requests page'),
902 912 ('g o', 'Goto repository settings'),
903 913 ('g O', 'Goto repository permissions settings'),
904 914 ]
905 915 %>
906 916 %for key, desc in elems:
907 917 <tr>
908 918 <td class="keys">
909 919 <span class="key tag">${key}</span>
910 920 </td>
911 921 <td>${desc}</td>
912 922 </tr>
913 923 %endfor
914 924 </tbody>
915 925 </table>
916 926 </div>
917 927 </div>
918 928 <div class="modal-footer">
919 929 </div>
920 930 </div><!-- /.modal-content -->
921 931 </div><!-- /.modal-dialog -->
922 932 </div><!-- /.modal -->
923 933
General Comments 0
You need to be logged in to leave comments. Login now