##// END OF EJS Templates
pull-requests: fixed small UI glitches in pull request view.
marcink -
r4291:a3f90209 default
parent child Browse files
Show More
@@ -1,525 +1,527 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: @grey2;
18 18 background-color: white;
19 19 background-image: none;
20 20 border: none;
21 21 .border ( @border-thickness-buttons, @grey5 );
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 29 box-shadow: @button-shadow;
30 30 -webkit-box-shadow: @button-shadow;
31 31
32 32
33 33
34 34 a {
35 35 display: block;
36 36 margin: 0;
37 37 padding: 0;
38 38 color: inherit;
39 39 text-decoration: none;
40 40
41 41 &:hover {
42 42 text-decoration: none;
43 43 }
44 44 }
45 45
46 46 &:focus,
47 47 &:active {
48 48 outline:none;
49 49 }
50 50
51 51 &:hover {
52 52 color: @rcdarkblue;
53 53 background-color: @grey6;
54 54
55 55 }
56 56
57 57 &.btn-active {
58 58 color: @rcdarkblue;
59 59 background-color: @grey6;
60 60 }
61 61
62 62 .icon-remove {
63 63 display: none;
64 64 }
65 65
66 66 //disabled buttons
67 67 //last; overrides any other styles
68 68 &:disabled {
69 69 opacity: .7;
70 70 cursor: auto;
71 71 background-color: white;
72 72 color: @grey4;
73 73 text-shadow: none;
74 74 }
75 75
76 76 &.no-margin {
77 77 margin: 0 0 0 0;
78 78 }
79 79
80 80
81 81
82 82 }
83 83
84 84
85 85 .btn-default {
86 86 border: @border-thickness solid @grey5;
87 87 background-image: none;
88 88 color: @grey2;
89 89
90 90 a {
91 91 color: @grey2;
92 92 }
93 93
94 94 &:hover,
95 95 &.active {
96 96 color: @rcdarkblue;
97 97 background-color: @white;
98 98 .border ( @border-thickness, @grey4 );
99 99
100 100 a {
101 101 color: @grey2;
102 102 }
103 103 }
104 104 &:disabled {
105 105 .border ( @border-thickness-buttons, @grey5 );
106 106 background-color: transparent;
107 107 }
108 108 &.btn-active {
109 109 color: @rcdarkblue;
110 110 background-color: @white;
111 111 .border ( @border-thickness, @rcdarkblue );
112 112 }
113 113 }
114 114
115 115 .btn-primary,
116 116 .btn-small, /* TODO: anderson: remove .btn-small to not mix with the new btn-sm */
117 117 .btn-success {
118 118 .border ( @border-thickness, @rcblue );
119 119 background-color: @rcblue;
120 120 color: white;
121 121
122 122 a {
123 123 color: white;
124 124 }
125 125
126 126 &:hover,
127 127 &.active {
128 128 .border ( @border-thickness, @rcdarkblue );
129 129 color: white;
130 130 background-color: @rcdarkblue;
131 131
132 132 a {
133 133 color: white;
134 134 }
135 135 }
136 136 &:disabled {
137 137 background-color: @rcblue;
138 138 }
139 139 }
140 140
141 141 .btn-secondary {
142 142 &:extend(.btn-default);
143 143
144 144 background-color: white;
145 145
146 146 &:focus {
147 147 outline: 0;
148 148 }
149 149
150 150 &:hover {
151 151 &:extend(.btn-default:hover);
152 152 }
153 153
154 154 &.btn-link {
155 155 &:extend(.btn-link);
156 156 color: @rcblue;
157 157 }
158 158
159 159 &:disabled {
160 160 color: @rcblue;
161 161 background-color: white;
162 162 }
163 163 }
164 164
165 165 .btn-warning,
166 166 .btn-danger,
167 167 .revoke_perm,
168 168 .btn-x,
169 169 .form .action_button.btn-x {
170 170 .border ( @border-thickness, @alert2 );
171 171 background-color: white;
172 172 color: @alert2;
173 173
174 174 a {
175 175 color: @alert2;
176 176 }
177 177
178 178 &:hover,
179 179 &.active {
180 180 .border ( @border-thickness, @alert2 );
181 181 color: white;
182 182 background-color: @alert2;
183 183
184 184 a {
185 185 color: white;
186 186 }
187 187 }
188 188
189 189 i {
190 190 display:none;
191 191 }
192 192
193 193 &:disabled {
194 194 background-color: white;
195 195 color: @alert2;
196 196 }
197 197 }
198 198
199 199 .btn-approved-status {
200 200 .border ( @border-thickness, @alert1 );
201 201 background-color: white;
202 202 color: @alert1;
203 203
204 204 }
205 205
206 206 .btn-rejected-status {
207 207 .border ( @border-thickness, @alert2 );
208 208 background-color: white;
209 209 color: @alert2;
210 210 }
211 211
212 212 .btn-sm,
213 213 .btn-mini,
214 214 .field-sm .btn {
215 215 padding: @padding/3;
216 216 }
217 217
218 218 .btn-xs {
219 219 padding: @padding/4;
220 220 }
221 221
222 222 .btn-lg {
223 223 padding: @padding * 1.2;
224 224 }
225 225
226 226 .btn-group {
227 227 display: inline-block;
228 228 .btn {
229 229 float: left;
230 230 margin: 0 0 0 0;
231 231 // first item
232 232 &:first-of-type:not(:last-of-type) {
233 233 border-radius: @border-radius 0 0 @border-radius;
234 234
235 235 }
236 236 // middle elements
237 237 &:not(:first-of-type):not(:last-of-type) {
238 238 border-radius: 0;
239 239 border-left-width: 0;
240 240 border-right-width: 0;
241 241 }
242 242 // last item
243 243 &:last-of-type:not(:first-of-type) {
244 244 border-radius: 0 @border-radius @border-radius 0;
245 245 }
246 246
247 247 &:only-child {
248 248 border-radius: @border-radius;
249 249 }
250 250 }
251 251
252 252 }
253 253
254 254
255 255 .btn-group-actions {
256 256 position: relative;
257 257 z-index: 100;
258 258
259 259 &:not(.open) .btn-action-switcher-container {
260 260 display: none;
261 261 }
262 262 }
263 263
264 264
265 265 .btn-action-switcher-container{
266 266 position: absolute;
267 267 top: 30px;
268 left: 0px;
268 left: -82px;
269 269 }
270 270
271 271 .btn-action-switcher {
272 272 display: block;
273 273 position: relative;
274 274 z-index: 300;
275 275 min-width: 240px;
276 276 max-width: 500px;
277 277 margin-top: 4px;
278 278 margin-bottom: 24px;
279 279 font-size: 14px;
280 280 font-weight: 400;
281 281 padding: 8px 0;
282 282 background-color: #fff;
283 283 border: 1px solid @grey4;
284 284 border-radius: 3px;
285 285 box-shadow: @dropdown-shadow;
286 286
287 287 li {
288 288 display: block;
289 289 text-align: left;
290 290 list-style: none;
291 291 padding: 5px 10px;
292 292 }
293 293
294 294 li .action-help-block {
295 295 font-size: 10px;
296 296 line-height: normal;
297 297 color: @grey4;
298 298 }
299 299
300 300 }
301 301
302 302 .btn-link {
303 303 background: transparent;
304 304 border: none;
305 305 padding: 0;
306 306 color: @rcblue;
307 307
308 308 &:hover {
309 309 background: transparent;
310 310 border: none;
311 311 color: @rcdarkblue;
312 312 }
313 313
314 314 //disabled buttons
315 315 //last; overrides any other styles
316 316 &:disabled {
317 317 opacity: .7;
318 318 cursor: auto;
319 319 background-color: white;
320 320 color: @grey4;
321 321 text-shadow: none;
322 322 }
323 323
324 324 // TODO: johbo: Check if we can avoid this, indicates that the structure
325 325 // is not yet good.
326 326 // lisa: The button CSS reflects the button HTML; both need a cleanup.
327 327 &.btn-danger {
328 328 color: @alert2;
329 329
330 330 &:hover {
331 331 color: darken(@alert2,30%);
332 332 }
333 333
334 334 &:disabled {
335 335 color: @alert2;
336 336 }
337 337 }
338 338 }
339 339
340 340 .btn-social {
341 341 &:extend(.btn-default);
342 342 margin: 5px 5px 5px 0px;
343 343 min-width: 160px;
344 344 }
345 345
346 346 // TODO: johbo: check these exceptions
347 347
348 348 .links {
349 349
350 350 .btn + .btn {
351 351 margin-top: @padding;
352 352 }
353 353 }
354 354
355 355
356 356 .action_button {
357 357 display:inline;
358 358 margin: 0;
359 359 padding: 0 1em 0 0;
360 360 font-size: inherit;
361 361 color: @rcblue;
362 362 border: none;
363 363 border-radius: 0;
364 364 background-color: transparent;
365 365
366 366 &.last-item {
367 367 border: none;
368 368 padding: 0 0 0 0;
369 369 }
370 370
371 371 &:last-child {
372 372 border: none;
373 373 padding: 0 0 0 0;
374 374 }
375 375
376 376 &:hover {
377 377 color: @rcdarkblue;
378 378 background-color: transparent;
379 379 border: none;
380 380 }
381 .noselect
381 382 }
383
382 384 .grid_delete {
383 385 .action_button {
384 386 border: none;
385 387 }
386 388 }
387 389
388 390
389 391 // TODO: johbo: Form button tweaks, check if we can use the classes instead
390 392 input[type="submit"] {
391 393 &:extend(.btn-primary);
392 394
393 395 &:focus {
394 396 outline: 0;
395 397 }
396 398
397 399 &:hover {
398 400 &:extend(.btn-primary:hover);
399 401 }
400 402
401 403 &.btn-link {
402 404 &:extend(.btn-link);
403 405 color: @rcblue;
404 406
405 407 &:disabled {
406 408 color: @rcblue;
407 409 background-color: transparent;
408 410 }
409 411 }
410 412
411 413 &:disabled {
412 414 .border ( @border-thickness-buttons, @rcblue );
413 415 background-color: @rcblue;
414 416 color: white;
415 417 opacity: 0.5;
416 418 }
417 419 }
418 420
419 421 input[type="reset"] {
420 422 &:extend(.btn-default);
421 423
422 424 // TODO: johbo: Check if this tweak can be avoided.
423 425 background: transparent;
424 426
425 427 &:focus {
426 428 outline: 0;
427 429 }
428 430
429 431 &:hover {
430 432 &:extend(.btn-default:hover);
431 433 }
432 434
433 435 &.btn-link {
434 436 &:extend(.btn-link);
435 437 color: @rcblue;
436 438
437 439 &:disabled {
438 440 border: none;
439 441 }
440 442 }
441 443
442 444 &:disabled {
443 445 .border ( @border-thickness-buttons, @rcblue );
444 446 background-color: white;
445 447 color: @rcblue;
446 448 }
447 449 }
448 450
449 451 input[type="submit"],
450 452 input[type="reset"] {
451 453 &.btn-danger {
452 454 &:extend(.btn-danger);
453 455
454 456 &:focus {
455 457 outline: 0;
456 458 }
457 459
458 460 &:hover {
459 461 &:extend(.btn-danger:hover);
460 462 }
461 463
462 464 &.btn-link {
463 465 &:extend(.btn-link);
464 466 color: @alert2;
465 467
466 468 &:hover {
467 469 color: darken(@alert2,30%);
468 470 }
469 471 }
470 472
471 473 &:disabled {
472 474 color: @alert2;
473 475 background-color: white;
474 476 }
475 477 }
476 478 &.btn-danger-action {
477 479 .border ( @border-thickness, @alert2 );
478 480 background-color: @alert2;
479 481 color: white;
480 482
481 483 a {
482 484 color: white;
483 485 }
484 486
485 487 &:hover {
486 488 background-color: darken(@alert2,20%);
487 489 }
488 490
489 491 &.active {
490 492 .border ( @border-thickness, @alert2 );
491 493 color: white;
492 494 background-color: @alert2;
493 495
494 496 a {
495 497 color: white;
496 498 }
497 499 }
498 500
499 501 &:disabled {
500 502 background-color: white;
501 503 color: @alert2;
502 504 }
503 505 }
504 506 }
505 507
506 508
507 509 .button-links {
508 510 float: left;
509 511 display: inline;
510 512 margin: 0;
511 513 padding-left: 0;
512 514 list-style: none;
513 515 text-align: right;
514 516
515 517 li {
516 518
517 519
518 520 }
519 521
520 522 li.active {
521 523 background-color: @grey6;
522 524 .border ( @border-thickness, @grey4 );
523 525 }
524 526
525 527 }
@@ -1,3041 +1,3048 b''
1 1 //Primary CSS
2 2
3 3 //--- IMPORTS ------------------//
4 4
5 5 @import 'helpers';
6 6 @import 'mixins';
7 7 @import 'rcicons';
8 8 @import 'variables';
9 9 @import 'bootstrap-variables';
10 10 @import 'form-bootstrap';
11 11 @import 'codemirror';
12 12 @import 'legacy_code_styles';
13 13 @import 'readme-box';
14 14 @import 'progress-bar';
15 15
16 16 @import 'type';
17 17 @import 'alerts';
18 18 @import 'buttons';
19 19 @import 'tags';
20 20 @import 'code-block';
21 21 @import 'examples';
22 22 @import 'login';
23 23 @import 'main-content';
24 24 @import 'select2';
25 25 @import 'comments';
26 26 @import 'panels-bootstrap';
27 27 @import 'panels';
28 28 @import 'deform';
29 29 @import 'tooltips';
30 30
31 31 //--- BASE ------------------//
32 32 .noscript-error {
33 33 top: 0;
34 34 left: 0;
35 35 width: 100%;
36 36 z-index: 101;
37 37 text-align: center;
38 38 font-size: 120%;
39 39 color: white;
40 40 background-color: @alert2;
41 41 padding: 5px 0 5px 0;
42 42 font-weight: @text-semibold-weight;
43 43 font-family: @text-semibold;
44 44 }
45 45
46 46 html {
47 47 display: table;
48 48 height: 100%;
49 49 width: 100%;
50 50 }
51 51
52 52 body {
53 53 display: table-cell;
54 54 width: 100%;
55 55 }
56 56
57 57 //--- LAYOUT ------------------//
58 58
59 59 .hidden{
60 60 display: none !important;
61 61 }
62 62
63 63 .box{
64 64 float: left;
65 65 width: 100%;
66 66 }
67 67
68 68 .browser-header {
69 69 clear: both;
70 70 }
71 71 .main {
72 72 clear: both;
73 73 padding:0 0 @pagepadding;
74 74 height: auto;
75 75
76 76 &:after { //clearfix
77 77 content:"";
78 78 clear:both;
79 79 width:100%;
80 80 display:block;
81 81 }
82 82 }
83 83
84 84 .action-link{
85 85 margin-left: @padding;
86 86 padding-left: @padding;
87 87 border-left: @border-thickness solid @border-default-color;
88 88 }
89 89
90 90 .cursor-pointer {
91 91 cursor: pointer;
92 92 }
93 93
94 94 input + .action-link, .action-link.first{
95 95 border-left: none;
96 96 }
97 97
98 98 .action-link.last{
99 99 margin-right: @padding;
100 100 padding-right: @padding;
101 101 }
102 102
103 103 .action-link.active,
104 104 .action-link.active a{
105 105 color: @grey4;
106 106 }
107 107
108 108 .action-link.disabled {
109 109 color: @grey4;
110 110 cursor: inherit;
111 111 }
112 112
113 113
114 114 .clipboard-action {
115 115 cursor: pointer;
116 116 margin-left: 5px;
117 117
118 118 &:not(.no-grey) {
119 119
120 120 &:hover {
121 121 color: @grey2;
122 122 }
123 123 color: @grey4;
124 124 }
125 125 }
126 126
127 127 ul.simple-list{
128 128 list-style: none;
129 129 margin: 0;
130 130 padding: 0;
131 131 }
132 132
133 133 .main-content {
134 134 padding-bottom: @pagepadding;
135 135 }
136 136
137 137 .wide-mode-wrapper {
138 138 max-width:4000px !important;
139 139 }
140 140
141 141 .wrapper {
142 142 position: relative;
143 143 max-width: @wrapper-maxwidth;
144 144 margin: 0 auto;
145 145 }
146 146
147 147 #content {
148 148 clear: both;
149 149 padding: 0 @contentpadding;
150 150 }
151 151
152 152 .advanced-settings-fields{
153 153 input{
154 154 margin-left: @textmargin;
155 155 margin-right: @padding/2;
156 156 }
157 157 }
158 158
159 159 .cs_files_title {
160 160 margin: @pagepadding 0 0;
161 161 }
162 162
163 163 input.inline[type="file"] {
164 164 display: inline;
165 165 }
166 166
167 167 .error_page {
168 168 margin: 10% auto;
169 169
170 170 h1 {
171 171 color: @grey2;
172 172 }
173 173
174 174 .alert {
175 175 margin: @padding 0;
176 176 }
177 177
178 178 .error-branding {
179 179 color: @grey4;
180 180 font-weight: @text-semibold-weight;
181 181 font-family: @text-semibold;
182 182 }
183 183
184 184 .error_message {
185 185 font-family: @text-regular;
186 186 }
187 187
188 188 .sidebar {
189 189 min-height: 275px;
190 190 margin: 0;
191 191 padding: 0 0 @sidebarpadding @sidebarpadding;
192 192 border: none;
193 193 }
194 194
195 195 .main-content {
196 196 position: relative;
197 197 margin: 0 @sidebarpadding @sidebarpadding;
198 198 padding: 0 0 0 @sidebarpadding;
199 199 border-left: @border-thickness solid @grey5;
200 200
201 201 @media (max-width:767px) {
202 202 clear: both;
203 203 width: 100%;
204 204 margin: 0;
205 205 border: none;
206 206 }
207 207 }
208 208
209 209 .inner-column {
210 210 float: left;
211 211 width: 29.75%;
212 212 min-height: 150px;
213 213 margin: @sidebarpadding 2% 0 0;
214 214 padding: 0 2% 0 0;
215 215 border-right: @border-thickness solid @grey5;
216 216
217 217 @media (max-width:767px) {
218 218 clear: both;
219 219 width: 100%;
220 220 border: none;
221 221 }
222 222
223 223 ul {
224 224 padding-left: 1.25em;
225 225 }
226 226
227 227 &:last-child {
228 228 margin: @sidebarpadding 0 0;
229 229 border: none;
230 230 }
231 231
232 232 h4 {
233 233 margin: 0 0 @padding;
234 234 font-weight: @text-semibold-weight;
235 235 font-family: @text-semibold;
236 236 }
237 237 }
238 238 }
239 239 .error-page-logo {
240 240 width: 130px;
241 241 height: 160px;
242 242 }
243 243
244 244 // HEADER
245 245 .header {
246 246
247 247 // TODO: johbo: Fix login pages, so that they work without a min-height
248 248 // for the header and then remove the min-height. I chose a smaller value
249 249 // intentionally here to avoid rendering issues in the main navigation.
250 250 min-height: 49px;
251 251 min-width: 1024px;
252 252
253 253 position: relative;
254 254 vertical-align: bottom;
255 255 padding: 0 @header-padding;
256 256 background-color: @grey1;
257 257 color: @grey5;
258 258
259 259 .title {
260 260 overflow: visible;
261 261 }
262 262
263 263 &:before,
264 264 &:after {
265 265 content: "";
266 266 clear: both;
267 267 width: 100%;
268 268 }
269 269
270 270 // TODO: johbo: Avoids breaking "Repositories" chooser
271 271 .select2-container .select2-choice .select2-arrow {
272 272 display: none;
273 273 }
274 274 }
275 275
276 276 #header-inner {
277 277 &.title {
278 278 margin: 0;
279 279 }
280 280 &:before,
281 281 &:after {
282 282 content: "";
283 283 clear: both;
284 284 }
285 285 }
286 286
287 287 // Gists
288 288 #files_data {
289 289 clear: both; //for firefox
290 290 padding-top: 10px;
291 291 }
292 292
293 293 #gistid {
294 294 margin-right: @padding;
295 295 }
296 296
297 297 // Global Settings Editor
298 298 .textarea.editor {
299 299 float: left;
300 300 position: relative;
301 301 max-width: @texteditor-width;
302 302
303 303 select {
304 304 position: absolute;
305 305 top:10px;
306 306 right:0;
307 307 }
308 308
309 309 .CodeMirror {
310 310 margin: 0;
311 311 }
312 312
313 313 .help-block {
314 314 margin: 0 0 @padding;
315 315 padding:.5em;
316 316 background-color: @grey6;
317 317 &.pre-formatting {
318 318 white-space: pre;
319 319 }
320 320 }
321 321 }
322 322
323 323 ul.auth_plugins {
324 324 margin: @padding 0 @padding @legend-width;
325 325 padding: 0;
326 326
327 327 li {
328 328 margin-bottom: @padding;
329 329 line-height: 1em;
330 330 list-style-type: none;
331 331
332 332 .auth_buttons .btn {
333 333 margin-right: @padding;
334 334 }
335 335
336 336 }
337 337 }
338 338
339 339
340 340 // My Account PR list
341 341
342 342 #show_closed {
343 343 margin: 0 1em 0 0;
344 344 }
345 345
346 346 #pull_request_list_table {
347 347 .closed {
348 348 background-color: @grey6;
349 349 }
350 350
351 351 .state-creating,
352 352 .state-updating,
353 353 .state-merging
354 354 {
355 355 background-color: @grey6;
356 356 }
357 357
358 358 .td-status {
359 359 padding-left: .5em;
360 360 }
361 361 .log-container .truncate {
362 362 height: 2.75em;
363 363 white-space: pre-line;
364 364 }
365 365 table.rctable .user {
366 366 padding-left: 0;
367 367 }
368 368 table.rctable {
369 369 td.td-description,
370 370 .rc-user {
371 371 min-width: auto;
372 372 }
373 373 }
374 374 }
375 375
376 376 // Pull Requests
377 377
378 378 .pullrequests_section_head {
379 379 display: block;
380 380 clear: both;
381 381 margin: @padding 0;
382 382 font-weight: @text-bold-weight;
383 383 font-family: @text-bold;
384 384 }
385 385
386 386 .pr-commit-flow {
387 387 position: relative;
388 388 font-weight: 600;
389 389
390 390 .tag {
391 391 display: inline-block;
392 392 margin: 0 1em .5em 0;
393 393 }
394 394
395 395 .clone-url {
396 396 display: inline-block;
397 397 margin: 0 0 .5em 0;
398 398 padding: 0;
399 399 line-height: 1.2em;
400 400 }
401 401 }
402 402
403 403 .pr-mergeinfo {
404 404 min-width: 95% !important;
405 405 padding: 0 !important;
406 406 border: 0;
407 407 }
408 408 .pr-mergeinfo-copy {
409 409 padding: 0 0;
410 410 }
411 411
412 412 .pr-pullinfo {
413 413 min-width: 95% !important;
414 414 padding: 0 !important;
415 415 border: 0;
416 416 }
417 417 .pr-pullinfo-copy {
418 418 padding: 0 0;
419 419 }
420 420
421 421 .pr-title-input {
422 width: 80%;
423 font-size: 1em;
422 width: 100%;
423 font-size: 18px;
424 424 margin: 0 0 4px 0;
425 425 padding: 0;
426 426 line-height: 1.7em;
427 427 color: @text-color;
428 428 letter-spacing: .02em;
429 429 font-weight: @text-bold-weight;
430 430 font-family: @text-bold;
431 431
432 432 &:hover {
433 433 box-shadow: none;
434 434 }
435 435 }
436 436
437 437 #pr-title {
438 438 input {
439 439 border: 1px transparent;
440 440 color: black;
441 441 opacity: 1;
442 442 background: #fff;
443 font-size: 18px;
443 444 }
444 445 }
445 446
446 447 .pr-title-closed-tag {
447 448 font-size: 16px;
448 449 }
449 450
450 451 #pr-desc {
451 452 padding: 10px 0;
452 453
453 454 .markdown-block {
454 455 padding: 0;
455 456 margin-bottom: -30px;
456 457 }
457 458 }
458 459
459 460 #pullrequest_title {
460 461 width: 100%;
461 462 box-sizing: border-box;
462 463 }
463 464
464 465 #pr_open_message {
465 466 border: @border-thickness solid #fff;
466 467 border-radius: @border-radius;
467 468 padding: @padding-large-vertical @padding-large-vertical @padding-large-vertical 0;
468 469 text-align: left;
469 470 overflow: hidden;
470 471 }
471 472
472 473 .pr-details-title {
473 474 height: 16px
474 475 }
475 476
476 477 .pr-details-title-author-pref {
477 478 padding-right: 10px
478 479 }
479 480
480 481 .label-pr-detail {
481 482 display: table-cell;
482 483 width: 120px;
483 484 padding-top: 7.5px;
484 485 padding-bottom: 7.5px;
485 486 padding-right: 7.5px;
486 487 }
487 488
488 489 .source-details ul {
489 490 padding: 10px 16px;
490 491 }
491 492
492 493 .source-details-action {
493 494 color: @grey4;
494 495 font-size: 11px
495 496 }
496 497
497 498 .pr-submit-button {
498 499 float: right;
499 500 margin: 0 0 0 5px;
500 501 }
501 502
502 503 .pr-spacing-container {
503 504 padding: 20px;
504 505 clear: both
505 506 }
506 507
507 508 #pr-description-input {
508 509 margin-bottom: 0;
509 510 }
510 511
511 512 .pr-description-label {
512 513 vertical-align: top;
513 514 }
514 515
515 516 #open_edit_pullrequest {
516 517 padding: 0;
517 518 }
518 519
519 520 #close_edit_pullrequest {
520 521
521 522 }
522 523
523 524 #delete_pullrequest {
524 525 clear: inherit;
525 526
526 527 form {
527 528 display: inline;
528 529 }
529 530
530 531 }
531 532
532 533 .perms_section_head {
533 534 min-width: 625px;
534 535
535 536 h2 {
536 537 margin-bottom: 0;
537 538 }
538 539
539 540 .label-checkbox {
540 541 float: left;
541 542 }
542 543
543 544 &.field {
544 545 margin: @space 0 @padding;
545 546 }
546 547
547 548 &:first-child.field {
548 549 margin-top: 0;
549 550
550 551 .label {
551 552 margin-top: 0;
552 553 padding-top: 0;
553 554 }
554 555
555 556 .radios {
556 557 padding-top: 0;
557 558 }
558 559 }
559 560
560 561 .radios {
561 562 position: relative;
562 563 width: 505px;
563 564 }
564 565 }
565 566
566 567 //--- MODULES ------------------//
567 568
568 569
569 570 // Server Announcement
570 571 #server-announcement {
571 572 width: 95%;
572 573 margin: @padding auto;
573 574 padding: @padding;
574 575 border-width: 2px;
575 576 border-style: solid;
576 577 .border-radius(2px);
577 578 font-weight: @text-bold-weight;
578 579 font-family: @text-bold;
579 580
580 581 &.info { border-color: @alert4; background-color: @alert4-inner; }
581 582 &.warning { border-color: @alert3; background-color: @alert3-inner; }
582 583 &.error { border-color: @alert2; background-color: @alert2-inner; }
583 584 &.success { border-color: @alert1; background-color: @alert1-inner; }
584 585 &.neutral { border-color: @grey3; background-color: @grey6; }
585 586 }
586 587
587 588 // Fixed Sidebar Column
588 589 .sidebar-col-wrapper {
589 590 padding-left: @sidebar-all-width;
590 591
591 592 .sidebar {
592 593 width: @sidebar-width;
593 594 margin-left: -@sidebar-all-width;
594 595 }
595 596 }
596 597
597 598 .sidebar-col-wrapper.scw-small {
598 599 padding-left: @sidebar-small-all-width;
599 600
600 601 .sidebar {
601 602 width: @sidebar-small-width;
602 603 margin-left: -@sidebar-small-all-width;
603 604 }
604 605 }
605 606
606 607
607 608 // FOOTER
608 609 #footer {
609 610 padding: 0;
610 611 text-align: center;
611 612 vertical-align: middle;
612 613 color: @grey2;
613 614 font-size: 11px;
614 615
615 616 p {
616 617 margin: 0;
617 618 padding: 1em;
618 619 line-height: 1em;
619 620 }
620 621
621 622 .server-instance { //server instance
622 623 display: none;
623 624 }
624 625
625 626 .title {
626 627 float: none;
627 628 margin: 0 auto;
628 629 }
629 630 }
630 631
631 632 button.close {
632 633 padding: 0;
633 634 cursor: pointer;
634 635 background: transparent;
635 636 border: 0;
636 637 .box-shadow(none);
637 638 -webkit-appearance: none;
638 639 }
639 640
640 641 .close {
641 642 float: right;
642 643 font-size: 21px;
643 644 font-family: @text-bootstrap;
644 645 line-height: 1em;
645 646 font-weight: bold;
646 647 color: @grey2;
647 648
648 649 &:hover,
649 650 &:focus {
650 651 color: @grey1;
651 652 text-decoration: none;
652 653 cursor: pointer;
653 654 }
654 655 }
655 656
656 657 // GRID
657 658 .sorting,
658 659 .sorting_desc,
659 660 .sorting_asc {
660 661 cursor: pointer;
661 662 }
662 663 .sorting_desc:after {
663 664 content: "\00A0\25B2";
664 665 font-size: .75em;
665 666 }
666 667 .sorting_asc:after {
667 668 content: "\00A0\25BC";
668 669 font-size: .68em;
669 670 }
670 671
671 672
672 673 .user_auth_tokens {
673 674
674 675 &.truncate {
675 676 white-space: nowrap;
676 677 overflow: hidden;
677 678 text-overflow: ellipsis;
678 679 }
679 680
680 681 .fields .field .input {
681 682 margin: 0;
682 683 }
683 684
684 685 input#description {
685 686 width: 100px;
686 687 margin: 0;
687 688 }
688 689
689 690 .drop-menu {
690 691 // TODO: johbo: Remove this, should work out of the box when
691 692 // having multiple inputs inline
692 693 margin: 0 0 0 5px;
693 694 }
694 695 }
695 696 #user_list_table {
696 697 .closed {
697 698 background-color: @grey6;
698 699 }
699 700 }
700 701
701 702
702 703 input, textarea {
703 704 &.disabled {
704 705 opacity: .5;
705 706 }
706 707
707 708 &:hover {
708 709 border-color: @grey3;
709 710 box-shadow: @button-shadow;
710 711 }
711 712
712 713 &:focus {
713 714 border-color: @rcblue;
714 715 box-shadow: @button-shadow;
715 716 }
716 717 }
717 718
718 719 // remove extra padding in firefox
719 720 input::-moz-focus-inner { border:0; padding:0 }
720 721
721 722 .adjacent input {
722 723 margin-bottom: @padding;
723 724 }
724 725
725 726 .permissions_boxes {
726 727 display: block;
727 728 }
728 729
729 730 //FORMS
730 731
731 732 .medium-inline,
732 733 input#description.medium-inline {
733 734 display: inline;
734 735 width: @medium-inline-input-width;
735 736 min-width: 100px;
736 737 }
737 738
738 739 select {
739 740 //reset
740 741 -webkit-appearance: none;
741 742 -moz-appearance: none;
742 743
743 744 display: inline-block;
744 745 height: 28px;
745 746 width: auto;
746 747 margin: 0 @padding @padding 0;
747 748 padding: 0 18px 0 8px;
748 749 line-height:1em;
749 750 font-size: @basefontsize;
750 751 border: @border-thickness solid @grey5;
751 752 border-radius: @border-radius;
752 753 background:white url("../images/dt-arrow-dn.png") no-repeat 100% 50%;
753 754 color: @grey4;
754 755 box-shadow: @button-shadow;
755 756
756 757 &:after {
757 758 content: "\00A0\25BE";
758 759 }
759 760
760 761 &:focus, &:hover {
761 762 outline: none;
762 763 border-color: @grey4;
763 764 color: @rcdarkblue;
764 765 }
765 766 }
766 767
767 768 option {
768 769 &:focus {
769 770 outline: none;
770 771 }
771 772 }
772 773
773 774 input,
774 775 textarea {
775 776 padding: @input-padding;
776 777 border: @input-border-thickness solid @border-highlight-color;
777 778 .border-radius (@border-radius);
778 779 font-family: @text-light;
779 780 font-size: @basefontsize;
780 781
781 782 &.input-sm {
782 783 padding: 5px;
783 784 }
784 785
785 786 &#description {
786 787 min-width: @input-description-minwidth;
787 788 min-height: 1em;
788 789 padding: 10px;
789 790 }
790 791 }
791 792
792 793 .field-sm {
793 794 input,
794 795 textarea {
795 796 padding: 5px;
796 797 }
797 798 }
798 799
799 800 textarea {
800 801 display: block;
801 802 clear: both;
802 803 width: 100%;
803 804 min-height: 100px;
804 805 margin-bottom: @padding;
805 806 .box-sizing(border-box);
806 807 overflow: auto;
807 808 }
808 809
809 810 label {
810 811 font-family: @text-light;
811 812 }
812 813
813 814 // GRAVATARS
814 815 // centers gravatar on username to the right
815 816
816 817 .gravatar {
817 818 display: inline;
818 819 min-width: 16px;
819 820 min-height: 16px;
820 821 margin: -5px 0;
821 822 padding: 0;
822 823 line-height: 1em;
823 824 box-sizing: content-box;
824 825 border-radius: 50%;
825 826
826 827 &.gravatar-large {
827 828 margin: -0.5em .25em -0.5em 0;
828 829 }
829 830
830 831 & + .user {
831 832 display: inline;
832 833 margin: 0;
833 834 padding: 0 0 0 .17em;
834 835 line-height: 1em;
835 836 }
836 837
837 838 & + .no-margin {
838 839 margin: 0
839 840 }
840 841
841 842 }
842 843
843 844 .user-inline-data {
844 845 display: inline-block;
845 846 float: left;
846 847 padding-left: .5em;
847 848 line-height: 1.3em;
848 849 }
849 850
850 851 .rc-user { // gravatar + user wrapper
851 852 float: left;
852 853 position: relative;
853 854 min-width: 100px;
854 855 max-width: 200px;
855 856 min-height: (@gravatar-size + @border-thickness * 2); // account for border
856 857 display: block;
857 858 padding: 0 0 0 (@gravatar-size + @basefontsize/4);
858 859
859 860
860 861 .gravatar {
861 862 display: block;
862 863 position: absolute;
863 864 top: 0;
864 865 left: 0;
865 866 min-width: @gravatar-size;
866 867 min-height: @gravatar-size;
867 868 margin: 0;
868 869 }
869 870
870 871 .user {
871 872 display: block;
872 873 max-width: 175px;
873 874 padding-top: 2px;
874 875 overflow: hidden;
875 876 text-overflow: ellipsis;
876 877 }
877 878 }
878 879
879 880 .gist-gravatar,
880 881 .journal_container {
881 882 .gravatar-large {
882 883 margin: 0 .5em -10px 0;
883 884 }
884 885 }
885 886
886 887 .gist-type-fields {
887 888 line-height: 30px;
888 889 height: 30px;
889 890
890 891 .gist-type-fields-wrapper {
891 892 vertical-align: middle;
892 893 display: inline-block;
893 894 line-height: 25px;
894 895 }
895 896 }
896 897
897 898 // ADMIN SETTINGS
898 899
899 900 // Tag Patterns
900 901 .tag_patterns {
901 902 .tag_input {
902 903 margin-bottom: @padding;
903 904 }
904 905 }
905 906
906 907 .locked_input {
907 908 position: relative;
908 909
909 910 input {
910 911 display: inline;
911 912 margin: 3px 5px 0px 0px;
912 913 }
913 914
914 915 br {
915 916 display: none;
916 917 }
917 918
918 919 .error-message {
919 920 float: left;
920 921 width: 100%;
921 922 }
922 923
923 924 .lock_input_button {
924 925 display: inline;
925 926 }
926 927
927 928 .help-block {
928 929 clear: both;
929 930 }
930 931 }
931 932
932 933 // Notifications
933 934
934 935 .notifications_buttons {
935 936 margin: 0 0 @space 0;
936 937 padding: 0;
937 938
938 939 .btn {
939 940 display: inline-block;
940 941 }
941 942 }
942 943
943 944 .notification-list {
944 945
945 946 div {
946 947 vertical-align: middle;
947 948 }
948 949
949 950 .container {
950 951 display: block;
951 952 margin: 0 0 @padding 0;
952 953 }
953 954
954 955 .delete-notifications {
955 956 margin-left: @padding;
956 957 text-align: right;
957 958 cursor: pointer;
958 959 }
959 960
960 961 .read-notifications {
961 962 margin-left: @padding/2;
962 963 text-align: right;
963 964 width: 35px;
964 965 cursor: pointer;
965 966 }
966 967
967 968 .icon-minus-sign {
968 969 color: @alert2;
969 970 }
970 971
971 972 .icon-ok-sign {
972 973 color: @alert1;
973 974 }
974 975 }
975 976
976 977 .user_settings {
977 978 float: left;
978 979 clear: both;
979 980 display: block;
980 981 width: 100%;
981 982
982 983 .gravatar_box {
983 984 margin-bottom: @padding;
984 985
985 986 &:after {
986 987 content: " ";
987 988 clear: both;
988 989 width: 100%;
989 990 }
990 991 }
991 992
992 993 .fields .field {
993 994 clear: both;
994 995 }
995 996 }
996 997
997 998 .advanced_settings {
998 999 margin-bottom: @space;
999 1000
1000 1001 .help-block {
1001 1002 margin-left: 0;
1002 1003 }
1003 1004
1004 1005 button + .help-block {
1005 1006 margin-top: @padding;
1006 1007 }
1007 1008 }
1008 1009
1009 1010 // admin settings radio buttons and labels
1010 1011 .label-2 {
1011 1012 float: left;
1012 1013 width: @label2-width;
1013 1014
1014 1015 label {
1015 1016 color: @grey1;
1016 1017 }
1017 1018 }
1018 1019 .checkboxes {
1019 1020 float: left;
1020 1021 width: @checkboxes-width;
1021 1022 margin-bottom: @padding;
1022 1023
1023 1024 .checkbox {
1024 1025 width: 100%;
1025 1026
1026 1027 label {
1027 1028 margin: 0;
1028 1029 padding: 0;
1029 1030 }
1030 1031 }
1031 1032
1032 1033 .checkbox + .checkbox {
1033 1034 display: inline-block;
1034 1035 }
1035 1036
1036 1037 label {
1037 1038 margin-right: 1em;
1038 1039 }
1039 1040 }
1040 1041
1041 1042 // CHANGELOG
1042 1043 .container_header {
1043 1044 float: left;
1044 1045 display: block;
1045 1046 width: 100%;
1046 1047 margin: @padding 0 @padding;
1047 1048
1048 1049 #filter_changelog {
1049 1050 float: left;
1050 1051 margin-right: @padding;
1051 1052 }
1052 1053
1053 1054 .breadcrumbs_light {
1054 1055 display: inline-block;
1055 1056 }
1056 1057 }
1057 1058
1058 1059 .info_box {
1059 1060 float: right;
1060 1061 }
1061 1062
1062 1063
1063 1064
1064 1065 #graph_content{
1065 1066
1066 1067 // adjust for table headers so that graph renders properly
1067 1068 // #graph_nodes padding - table cell padding
1068 1069 padding-top: (@space - (@basefontsize * 2.4));
1069 1070
1070 1071 &.graph_full_width {
1071 1072 width: 100%;
1072 1073 max-width: 100%;
1073 1074 }
1074 1075 }
1075 1076
1076 1077 #graph {
1077 1078
1078 1079 .pagination-left {
1079 1080 float: left;
1080 1081 clear: both;
1081 1082 }
1082 1083
1083 1084 .log-container {
1084 1085 max-width: 345px;
1085 1086
1086 1087 .message{
1087 1088 max-width: 340px;
1088 1089 }
1089 1090 }
1090 1091
1091 1092 .graph-col-wrapper {
1092 1093
1093 1094 #graph_nodes {
1094 1095 width: 100px;
1095 1096 position: absolute;
1096 1097 left: 70px;
1097 1098 z-index: -1;
1098 1099 }
1099 1100 }
1100 1101
1101 1102 .load-more-commits {
1102 1103 text-align: center;
1103 1104 }
1104 1105 .load-more-commits:hover {
1105 1106 background-color: @grey7;
1106 1107 }
1107 1108 .load-more-commits {
1108 1109 a {
1109 1110 display: block;
1110 1111 }
1111 1112 }
1112 1113 }
1113 1114
1114 1115 .obsolete-toggle {
1115 1116 line-height: 30px;
1116 1117 margin-left: -15px;
1117 1118 }
1118 1119
1119 1120 #rev_range_container, #rev_range_clear, #rev_range_more {
1120 1121 margin-top: -5px;
1121 1122 margin-bottom: -5px;
1122 1123 }
1123 1124
1124 1125 #filter_changelog {
1125 1126 float: left;
1126 1127 }
1127 1128
1128 1129
1129 1130 //--- THEME ------------------//
1130 1131
1131 1132 #logo {
1132 1133 float: left;
1133 1134 margin: 9px 0 0 0;
1134 1135
1135 1136 .header {
1136 1137 background-color: transparent;
1137 1138 }
1138 1139
1139 1140 a {
1140 1141 display: inline-block;
1141 1142 }
1142 1143
1143 1144 img {
1144 1145 height:30px;
1145 1146 }
1146 1147 }
1147 1148
1148 1149 .logo-wrapper {
1149 1150 float:left;
1150 1151 }
1151 1152
1152 1153 .branding {
1153 1154 float: left;
1154 1155 padding: 9px 2px;
1155 1156 line-height: 1em;
1156 1157 font-size: @navigation-fontsize;
1157 1158
1158 1159 a {
1159 1160 color: @grey5
1160 1161 }
1161 1162 @media screen and (max-width: 1200px) {
1162 1163 display: none;
1163 1164 }
1164 1165 }
1165 1166
1166 1167 img {
1167 1168 border: none;
1168 1169 outline: none;
1169 1170 }
1170 1171 user-profile-header
1171 1172 label {
1172 1173
1173 1174 input[type="checkbox"] {
1174 1175 margin-right: 1em;
1175 1176 }
1176 1177 input[type="radio"] {
1177 1178 margin-right: 1em;
1178 1179 }
1179 1180 }
1180 1181
1181 1182 .review-status {
1182 1183 &.under_review {
1183 1184 color: @alert3;
1184 1185 }
1185 1186 &.approved {
1186 1187 color: @alert1;
1187 1188 }
1188 1189 &.rejected,
1189 1190 &.forced_closed{
1190 1191 color: @alert2;
1191 1192 }
1192 1193 &.not_reviewed {
1193 1194 color: @grey5;
1194 1195 }
1195 1196 }
1196 1197
1197 1198 .review-status-under_review {
1198 1199 color: @alert3;
1199 1200 }
1200 1201 .status-tag-under_review {
1201 1202 border-color: @alert3;
1202 1203 }
1203 1204
1204 1205 .review-status-approved {
1205 1206 color: @alert1;
1206 1207 }
1207 1208 .status-tag-approved {
1208 1209 border-color: @alert1;
1209 1210 }
1210 1211
1211 1212 .review-status-rejected,
1212 1213 .review-status-forced_closed {
1213 1214 color: @alert2;
1214 1215 }
1215 1216 .status-tag-rejected,
1216 1217 .status-tag-forced_closed {
1217 1218 border-color: @alert2;
1218 1219 }
1219 1220
1220 1221 .review-status-not_reviewed {
1221 1222 color: @grey5;
1222 1223 }
1223 1224 .status-tag-not_reviewed {
1224 1225 border-color: @grey5;
1225 1226 }
1226 1227
1227 1228 .test_pattern_preview {
1228 1229 margin: @space 0;
1229 1230
1230 1231 p {
1231 1232 margin-bottom: 0;
1232 1233 border-bottom: @border-thickness solid @border-default-color;
1233 1234 color: @grey3;
1234 1235 }
1235 1236
1236 1237 .btn {
1237 1238 margin-bottom: @padding;
1238 1239 }
1239 1240 }
1240 1241 #test_pattern_result {
1241 1242 display: none;
1242 1243 &:extend(pre);
1243 1244 padding: .9em;
1244 1245 color: @grey3;
1245 1246 background-color: @grey7;
1246 1247 border-right: @border-thickness solid @border-default-color;
1247 1248 border-bottom: @border-thickness solid @border-default-color;
1248 1249 border-left: @border-thickness solid @border-default-color;
1249 1250 }
1250 1251
1251 1252 #repo_vcs_settings {
1252 1253 #inherit_overlay_vcs_default {
1253 1254 display: none;
1254 1255 }
1255 1256 #inherit_overlay_vcs_custom {
1256 1257 display: custom;
1257 1258 }
1258 1259 &.inherited {
1259 1260 #inherit_overlay_vcs_default {
1260 1261 display: block;
1261 1262 }
1262 1263 #inherit_overlay_vcs_custom {
1263 1264 display: none;
1264 1265 }
1265 1266 }
1266 1267 }
1267 1268
1268 1269 .issue-tracker-link {
1269 1270 color: @rcblue;
1270 1271 }
1271 1272
1272 1273 // Issue Tracker Table Show/Hide
1273 1274 #repo_issue_tracker {
1274 1275 #inherit_overlay {
1275 1276 display: none;
1276 1277 }
1277 1278 #custom_overlay {
1278 1279 display: custom;
1279 1280 }
1280 1281 &.inherited {
1281 1282 #inherit_overlay {
1282 1283 display: block;
1283 1284 }
1284 1285 #custom_overlay {
1285 1286 display: none;
1286 1287 }
1287 1288 }
1288 1289 }
1289 1290 table.issuetracker {
1290 1291 &.readonly {
1291 1292 tr, td {
1292 1293 color: @grey3;
1293 1294 }
1294 1295 }
1295 1296 .edit {
1296 1297 display: none;
1297 1298 }
1298 1299 .editopen {
1299 1300 .edit {
1300 1301 display: inline;
1301 1302 }
1302 1303 .entry {
1303 1304 display: none;
1304 1305 }
1305 1306 }
1306 1307 tr td.td-action {
1307 1308 min-width: 117px;
1308 1309 }
1309 1310 td input {
1310 1311 max-width: none;
1311 1312 min-width: 30px;
1312 1313 width: 80%;
1313 1314 }
1314 1315 .issuetracker_pref input {
1315 1316 width: 40%;
1316 1317 }
1317 1318 input.edit_issuetracker_update {
1318 1319 margin-right: 0;
1319 1320 width: auto;
1320 1321 }
1321 1322 }
1322 1323
1323 1324 table.integrations {
1324 1325 .td-icon {
1325 1326 width: 20px;
1326 1327 .integration-icon {
1327 1328 height: 20px;
1328 1329 width: 20px;
1329 1330 }
1330 1331 }
1331 1332 }
1332 1333
1333 1334 .integrations {
1334 1335 a.integration-box {
1335 1336 color: @text-color;
1336 1337 &:hover {
1337 1338 .panel {
1338 1339 background: #fbfbfb;
1339 1340 }
1340 1341 }
1341 1342 .integration-icon {
1342 1343 width: 30px;
1343 1344 height: 30px;
1344 1345 margin-right: 20px;
1345 1346 float: left;
1346 1347 }
1347 1348
1348 1349 .panel-body {
1349 1350 padding: 10px;
1350 1351 }
1351 1352 .panel {
1352 1353 margin-bottom: 10px;
1353 1354 }
1354 1355 h2 {
1355 1356 display: inline-block;
1356 1357 margin: 0;
1357 1358 min-width: 140px;
1358 1359 }
1359 1360 }
1360 1361 a.integration-box.dummy-integration {
1361 1362 color: @grey4
1362 1363 }
1363 1364 }
1364 1365
1365 1366 //Permissions Settings
1366 1367 #add_perm {
1367 1368 margin: 0 0 @padding;
1368 1369 cursor: pointer;
1369 1370 }
1370 1371
1371 1372 .perm_ac {
1372 1373 input {
1373 1374 width: 95%;
1374 1375 }
1375 1376 }
1376 1377
1377 1378 .autocomplete-suggestions {
1378 1379 width: auto !important; // overrides autocomplete.js
1379 1380 min-width: 278px;
1380 1381 margin: 0;
1381 1382 border: @border-thickness solid @grey5;
1382 1383 border-radius: @border-radius;
1383 1384 color: @grey2;
1384 1385 background-color: white;
1385 1386 }
1386 1387
1387 1388 .autocomplete-qfilter-suggestions {
1388 1389 width: auto !important; // overrides autocomplete.js
1389 1390 max-height: 100% !important;
1390 1391 min-width: 376px;
1391 1392 margin: 0;
1392 1393 border: @border-thickness solid @grey5;
1393 1394 color: @grey2;
1394 1395 background-color: white;
1395 1396 }
1396 1397
1397 1398 .autocomplete-selected {
1398 1399 background: #F0F0F0;
1399 1400 }
1400 1401
1401 1402 .ac-container-wrap {
1402 1403 margin: 0;
1403 1404 padding: 8px;
1404 1405 border-bottom: @border-thickness solid @grey5;
1405 1406 list-style-type: none;
1406 1407 cursor: pointer;
1407 1408
1408 1409 &:hover {
1409 1410 background-color: @grey7;
1410 1411 }
1411 1412
1412 1413 img {
1413 1414 height: @gravatar-size;
1414 1415 width: @gravatar-size;
1415 1416 margin-right: 1em;
1416 1417 }
1417 1418
1418 1419 strong {
1419 1420 font-weight: normal;
1420 1421 }
1421 1422 }
1422 1423
1423 1424 // Settings Dropdown
1424 1425 .user-menu .container {
1425 1426 padding: 0 4px;
1426 1427 margin: 0;
1427 1428 }
1428 1429
1429 1430 .user-menu .gravatar {
1430 1431 cursor: pointer;
1431 1432 }
1432 1433
1433 1434 .codeblock {
1434 1435 margin-bottom: @padding;
1435 1436 clear: both;
1436 1437
1437 1438 .stats {
1438 1439 overflow: hidden;
1439 1440 }
1440 1441
1441 1442 .message{
1442 1443 textarea{
1443 1444 margin: 0;
1444 1445 }
1445 1446 }
1446 1447
1447 1448 .code-header {
1448 1449 .stats {
1449 1450 line-height: 2em;
1450 1451
1451 1452 .revision_id {
1452 1453 margin-left: 0;
1453 1454 }
1454 1455 .buttons {
1455 1456 padding-right: 0;
1456 1457 }
1457 1458 }
1458 1459
1459 1460 .item{
1460 1461 margin-right: 0.5em;
1461 1462 }
1462 1463 }
1463 1464
1464 1465 #editor_container {
1465 1466 position: relative;
1466 1467 margin: @padding 10px;
1467 1468 }
1468 1469 }
1469 1470
1470 1471 #file_history_container {
1471 1472 display: none;
1472 1473 }
1473 1474
1474 1475 .file-history-inner {
1475 1476 margin-bottom: 10px;
1476 1477 }
1477 1478
1478 1479 // Pull Requests
1479 1480 .summary-details {
1480 1481 width: 72%;
1481 1482 }
1482 1483 .pr-summary {
1483 1484 border-bottom: @border-thickness solid @grey5;
1484 1485 margin-bottom: @space;
1485 1486 }
1487
1486 1488 .reviewers-title {
1487 width: 25%;
1488 min-width: 200px;
1489 width: 25%;
1490 min-width: 200px;
1491
1492 &.first-panel {
1493 margin-top: 34px;
1494 }
1489 1495 }
1496
1490 1497 .reviewers {
1491 1498 width: 25%;
1492 1499 min-width: 200px;
1493 1500 }
1494 1501 .reviewers ul li {
1495 1502 position: relative;
1496 1503 width: 100%;
1497 1504 padding-bottom: 8px;
1498 1505 list-style-type: none;
1499 1506 }
1500 1507
1501 1508 .reviewer_entry {
1502 1509 min-height: 55px;
1503 1510 }
1504 1511
1505 1512 .reviewers_member {
1506 1513 width: 100%;
1507 1514 overflow: auto;
1508 1515 }
1509 1516 .reviewer_reason {
1510 1517 padding-left: 20px;
1511 1518 line-height: 1.5em;
1512 1519 }
1513 1520 .reviewer_status {
1514 1521 display: inline-block;
1515 1522 width: 25px;
1516 1523 min-width: 25px;
1517 1524 height: 1.2em;
1518 1525 line-height: 1em;
1519 1526 }
1520 1527
1521 1528 .reviewer_name {
1522 1529 display: inline-block;
1523 1530 max-width: 83%;
1524 1531 padding-right: 20px;
1525 1532 vertical-align: middle;
1526 1533 line-height: 1;
1527 1534
1528 1535 .rc-user {
1529 1536 min-width: 0;
1530 1537 margin: -2px 1em 0 0;
1531 1538 }
1532 1539
1533 1540 .reviewer {
1534 1541 float: left;
1535 1542 }
1536 1543 }
1537 1544
1538 1545 .reviewer_member_mandatory {
1539 1546 position: absolute;
1540 1547 left: 15px;
1541 1548 top: 8px;
1542 1549 width: 16px;
1543 1550 font-size: 11px;
1544 1551 margin: 0;
1545 1552 padding: 0;
1546 1553 color: black;
1547 1554 }
1548 1555
1549 1556 .reviewer_member_mandatory_remove,
1550 1557 .reviewer_member_remove {
1551 1558 position: absolute;
1552 1559 right: 0;
1553 1560 top: 0;
1554 1561 width: 16px;
1555 1562 margin-bottom: 10px;
1556 1563 padding: 0;
1557 1564 color: black;
1558 1565 }
1559 1566
1560 1567 .reviewer_member_mandatory_remove {
1561 1568 color: @grey4;
1562 1569 }
1563 1570
1564 1571 .reviewer_member_status {
1565 1572 margin-top: 5px;
1566 1573 }
1567 1574 .pr-summary #summary{
1568 1575 width: 100%;
1569 1576 }
1570 1577 .pr-summary .action_button:hover {
1571 1578 border: 0;
1572 1579 cursor: pointer;
1573 1580 }
1574 1581 .pr-details-title {
1575 1582 padding-bottom: 8px;
1576 1583 border-bottom: @border-thickness solid @grey5;
1577 1584
1578 1585 .action_button.disabled {
1579 1586 color: @grey4;
1580 1587 cursor: inherit;
1581 1588 }
1582 1589 .action_button {
1583 1590 color: @rcblue;
1584 1591 }
1585 1592 }
1586 1593 .pr-details-content {
1587 1594 margin-top: @textmargin - 5;
1588 1595 margin-bottom: @textmargin - 5;
1589 1596 }
1590 1597
1591 1598 .pr-reviewer-rules {
1592 1599 padding: 10px 0px 20px 0px;
1593 1600 }
1594 1601
1595 1602 .todo-resolved {
1596 1603 text-decoration: line-through;
1597 1604 }
1598 1605
1599 1606 .todo-table {
1600 1607 width: 100%;
1601 1608
1602 1609 td {
1603 1610 padding: 5px 0px;
1604 1611 }
1605 1612
1606 1613 .td-todo-number {
1607 1614 text-align: left;
1608 1615 white-space: nowrap;
1609 1616 width: 15%;
1610 1617 }
1611 1618
1612 1619 .td-todo-gravatar {
1613 1620 width: 5%;
1614 1621
1615 1622 img {
1616 1623 margin: -3px 0;
1617 1624 }
1618 1625 }
1619 1626
1620 1627 }
1621 1628
1622 1629 .todo-comment-text-wrapper {
1623 1630 display: inline-grid;
1624 1631 }
1625 1632
1626 1633 .todo-comment-text {
1627 1634 margin-left: 5px;
1628 1635 white-space: nowrap;
1629 1636 overflow: hidden;
1630 1637 text-overflow: ellipsis;
1631 1638 }
1632 1639
1633 1640 .group_members {
1634 1641 margin-top: 0;
1635 1642 padding: 0;
1636 1643 list-style: outside none none;
1637 1644
1638 1645 img {
1639 1646 height: @gravatar-size;
1640 1647 width: @gravatar-size;
1641 1648 margin-right: .5em;
1642 1649 margin-left: 3px;
1643 1650 }
1644 1651
1645 1652 .to-delete {
1646 1653 .user {
1647 1654 text-decoration: line-through;
1648 1655 }
1649 1656 }
1650 1657 }
1651 1658
1652 1659 .compare_view_commits_title {
1653 1660 .disabled {
1654 1661 cursor: inherit;
1655 1662 &:hover{
1656 1663 background-color: inherit;
1657 1664 color: inherit;
1658 1665 }
1659 1666 }
1660 1667 }
1661 1668
1662 1669 .subtitle-compare {
1663 1670 margin: -15px 0px 0px 0px;
1664 1671 }
1665 1672
1666 1673 // new entry in group_members
1667 1674 .td-author-new-entry {
1668 1675 background-color: rgba(red(@alert1), green(@alert1), blue(@alert1), 0.3);
1669 1676 }
1670 1677
1671 1678 .usergroup_member_remove {
1672 1679 width: 16px;
1673 1680 margin-bottom: 10px;
1674 1681 padding: 0;
1675 1682 color: black !important;
1676 1683 cursor: pointer;
1677 1684 }
1678 1685
1679 1686 .reviewer_ac .ac-input {
1680 1687 width: 92%;
1681 1688 margin-bottom: 1em;
1682 1689 }
1683 1690
1684 1691 .compare_view_commits tr{
1685 1692 height: 20px;
1686 1693 }
1687 1694 .compare_view_commits td {
1688 1695 vertical-align: top;
1689 1696 padding-top: 10px;
1690 1697 }
1691 1698 .compare_view_commits .author {
1692 1699 margin-left: 5px;
1693 1700 }
1694 1701
1695 1702 .compare_view_commits {
1696 1703 .color-a {
1697 1704 color: @alert1;
1698 1705 }
1699 1706
1700 1707 .color-c {
1701 1708 color: @color3;
1702 1709 }
1703 1710
1704 1711 .color-r {
1705 1712 color: @color5;
1706 1713 }
1707 1714
1708 1715 .color-a-bg {
1709 1716 background-color: @alert1;
1710 1717 }
1711 1718
1712 1719 .color-c-bg {
1713 1720 background-color: @alert3;
1714 1721 }
1715 1722
1716 1723 .color-r-bg {
1717 1724 background-color: @alert2;
1718 1725 }
1719 1726
1720 1727 .color-a-border {
1721 1728 border: 1px solid @alert1;
1722 1729 }
1723 1730
1724 1731 .color-c-border {
1725 1732 border: 1px solid @alert3;
1726 1733 }
1727 1734
1728 1735 .color-r-border {
1729 1736 border: 1px solid @alert2;
1730 1737 }
1731 1738
1732 1739 .commit-change-indicator {
1733 1740 width: 15px;
1734 1741 height: 15px;
1735 1742 position: relative;
1736 1743 left: 15px;
1737 1744 }
1738 1745
1739 1746 .commit-change-content {
1740 1747 text-align: center;
1741 1748 vertical-align: middle;
1742 1749 line-height: 15px;
1743 1750 }
1744 1751 }
1745 1752
1746 1753 .compare_view_filepath {
1747 1754 color: @grey1;
1748 1755 }
1749 1756
1750 1757 .show_more {
1751 1758 display: inline-block;
1752 1759 width: 0;
1753 1760 height: 0;
1754 1761 vertical-align: middle;
1755 1762 content: "";
1756 1763 border: 4px solid;
1757 1764 border-right-color: transparent;
1758 1765 border-bottom-color: transparent;
1759 1766 border-left-color: transparent;
1760 1767 font-size: 0;
1761 1768 }
1762 1769
1763 1770 .journal_more .show_more {
1764 1771 display: inline;
1765 1772
1766 1773 &:after {
1767 1774 content: none;
1768 1775 }
1769 1776 }
1770 1777
1771 1778 .compare_view_commits .collapse_commit:after {
1772 1779 cursor: pointer;
1773 1780 content: "\00A0\25B4";
1774 1781 margin-left: -3px;
1775 1782 font-size: 17px;
1776 1783 color: @grey4;
1777 1784 }
1778 1785
1779 1786 .diff_links {
1780 1787 margin-left: 8px;
1781 1788 }
1782 1789
1783 1790 #pull_request_overview {
1784 1791 div.ancestor {
1785 1792 margin: -33px 0;
1786 1793 }
1787 1794 }
1788 1795
1789 1796 div.ancestor {
1790 1797 line-height: 33px;
1791 1798 }
1792 1799
1793 1800 .cs_icon_td input[type="checkbox"] {
1794 1801 display: none;
1795 1802 }
1796 1803
1797 1804 .cs_icon_td .expand_file_icon:after {
1798 1805 cursor: pointer;
1799 1806 content: "\00A0\25B6";
1800 1807 font-size: 12px;
1801 1808 color: @grey4;
1802 1809 }
1803 1810
1804 1811 .cs_icon_td .collapse_file_icon:after {
1805 1812 cursor: pointer;
1806 1813 content: "\00A0\25BC";
1807 1814 font-size: 12px;
1808 1815 color: @grey4;
1809 1816 }
1810 1817
1811 1818 /*new binary
1812 1819 NEW_FILENODE = 1
1813 1820 DEL_FILENODE = 2
1814 1821 MOD_FILENODE = 3
1815 1822 RENAMED_FILENODE = 4
1816 1823 COPIED_FILENODE = 5
1817 1824 CHMOD_FILENODE = 6
1818 1825 BIN_FILENODE = 7
1819 1826 */
1820 1827 .cs_files_expand {
1821 1828 font-size: @basefontsize + 5px;
1822 1829 line-height: 1.8em;
1823 1830 float: right;
1824 1831 }
1825 1832
1826 1833 .cs_files_expand span{
1827 1834 color: @rcblue;
1828 1835 cursor: pointer;
1829 1836 }
1830 1837 .cs_files {
1831 1838 clear: both;
1832 1839 padding-bottom: @padding;
1833 1840
1834 1841 .cur_cs {
1835 1842 margin: 10px 2px;
1836 1843 font-weight: bold;
1837 1844 }
1838 1845
1839 1846 .node {
1840 1847 float: left;
1841 1848 }
1842 1849
1843 1850 .changes {
1844 1851 float: right;
1845 1852 color: white;
1846 1853 font-size: @basefontsize - 4px;
1847 1854 margin-top: 4px;
1848 1855 opacity: 0.6;
1849 1856 filter: Alpha(opacity=60); /* IE8 and earlier */
1850 1857
1851 1858 .added {
1852 1859 background-color: @alert1;
1853 1860 float: left;
1854 1861 text-align: center;
1855 1862 }
1856 1863
1857 1864 .deleted {
1858 1865 background-color: @alert2;
1859 1866 float: left;
1860 1867 text-align: center;
1861 1868 }
1862 1869
1863 1870 .bin {
1864 1871 background-color: @alert1;
1865 1872 text-align: center;
1866 1873 }
1867 1874
1868 1875 /*new binary*/
1869 1876 .bin.bin1 {
1870 1877 background-color: @alert1;
1871 1878 text-align: center;
1872 1879 }
1873 1880
1874 1881 /*deleted binary*/
1875 1882 .bin.bin2 {
1876 1883 background-color: @alert2;
1877 1884 text-align: center;
1878 1885 }
1879 1886
1880 1887 /*mod binary*/
1881 1888 .bin.bin3 {
1882 1889 background-color: @grey2;
1883 1890 text-align: center;
1884 1891 }
1885 1892
1886 1893 /*rename file*/
1887 1894 .bin.bin4 {
1888 1895 background-color: @alert4;
1889 1896 text-align: center;
1890 1897 }
1891 1898
1892 1899 /*copied file*/
1893 1900 .bin.bin5 {
1894 1901 background-color: @alert4;
1895 1902 text-align: center;
1896 1903 }
1897 1904
1898 1905 /*chmod file*/
1899 1906 .bin.bin6 {
1900 1907 background-color: @grey2;
1901 1908 text-align: center;
1902 1909 }
1903 1910 }
1904 1911 }
1905 1912
1906 1913 .cs_files .cs_added, .cs_files .cs_A,
1907 1914 .cs_files .cs_added, .cs_files .cs_M,
1908 1915 .cs_files .cs_added, .cs_files .cs_D {
1909 1916 height: 16px;
1910 1917 padding-right: 10px;
1911 1918 margin-top: 7px;
1912 1919 text-align: left;
1913 1920 }
1914 1921
1915 1922 .cs_icon_td {
1916 1923 min-width: 16px;
1917 1924 width: 16px;
1918 1925 }
1919 1926
1920 1927 .pull-request-merge {
1921 1928 border: 1px solid @grey5;
1922 1929 padding: 10px 0px 20px;
1923 1930 margin-top: 10px;
1924 1931 margin-bottom: 20px;
1925 1932 }
1926 1933
1927 1934 .pull-request-merge-refresh {
1928 1935 margin: 2px 7px;
1929 1936 a {
1930 1937 color: @grey3;
1931 1938 }
1932 1939 }
1933 1940
1934 1941 .pull-request-merge ul {
1935 1942 padding: 0px 0px;
1936 1943 }
1937 1944
1938 1945 .pull-request-merge li {
1939 1946 list-style-type: none;
1940 1947 }
1941 1948
1942 1949 .pull-request-merge .pull-request-wrap {
1943 1950 height: auto;
1944 1951 padding: 0px 0px;
1945 1952 text-align: right;
1946 1953 }
1947 1954
1948 1955 .pull-request-merge span {
1949 1956 margin-right: 5px;
1950 1957 }
1951 1958
1952 1959 .pull-request-merge-actions {
1953 1960 min-height: 30px;
1954 1961 padding: 0px 0px;
1955 1962 }
1956 1963
1957 1964 .pull-request-merge-info {
1958 1965 padding: 0px 5px 5px 0px;
1959 1966 }
1960 1967
1961 1968 .merge-status {
1962 1969 margin-right: 5px;
1963 1970 }
1964 1971
1965 1972 .merge-message {
1966 1973 font-size: 1.2em
1967 1974 }
1968 1975
1969 1976 .merge-message.success i,
1970 1977 .merge-icon.success i {
1971 1978 color:@alert1;
1972 1979 }
1973 1980
1974 1981 .merge-message.warning i,
1975 1982 .merge-icon.warning i {
1976 1983 color: @alert3;
1977 1984 }
1978 1985
1979 1986 .merge-message.error i,
1980 1987 .merge-icon.error i {
1981 1988 color:@alert2;
1982 1989 }
1983 1990
1984 1991 .pr-versions {
1985 1992 font-size: 1.1em;
1986 1993 padding: 7.5px;
1987 1994
1988 1995 table {
1989 1996
1990 1997 }
1991 1998
1992 1999 td {
1993 2000 line-height: 15px;
1994 2001 }
1995 2002
1996 2003 .compare-radio-button {
1997 2004 position: relative;
1998 2005 top: -3px;
1999 2006 }
2000 2007 }
2001 2008
2002 2009
2003 2010 #close_pull_request {
2004 2011 margin-right: 0px;
2005 2012 }
2006 2013
2007 2014 .empty_data {
2008 2015 color: @grey4;
2009 2016 }
2010 2017
2011 2018 #changeset_compare_view_content {
2012 2019 clear: both;
2013 2020 width: 100%;
2014 2021 box-sizing: border-box;
2015 2022 .border-radius(@border-radius);
2016 2023
2017 2024 .help-block {
2018 2025 margin: @padding 0;
2019 2026 color: @text-color;
2020 2027 &.pre-formatting {
2021 2028 white-space: pre;
2022 2029 }
2023 2030 }
2024 2031
2025 2032 .empty_data {
2026 2033 margin: @padding 0;
2027 2034 }
2028 2035
2029 2036 .alert {
2030 2037 margin-bottom: @space;
2031 2038 }
2032 2039 }
2033 2040
2034 2041 .table_disp {
2035 2042 .status {
2036 2043 width: auto;
2037 2044 }
2038 2045 }
2039 2046
2040 2047
2041 2048 .creation_in_progress {
2042 2049 color: @grey4
2043 2050 }
2044 2051
2045 2052 .status_box_menu {
2046 2053 margin: 0;
2047 2054 }
2048 2055
2049 2056 .notification-table{
2050 2057 margin-bottom: @space;
2051 2058 display: table;
2052 2059 width: 100%;
2053 2060
2054 2061 .container{
2055 2062 display: table-row;
2056 2063
2057 2064 .notification-header{
2058 2065 border-bottom: @border-thickness solid @border-default-color;
2059 2066 }
2060 2067
2061 2068 .notification-subject{
2062 2069 display: table-cell;
2063 2070 }
2064 2071 }
2065 2072 }
2066 2073
2067 2074 // Notifications
2068 2075 .notification-header{
2069 2076 display: table;
2070 2077 width: 100%;
2071 2078 padding: floor(@basefontsize/2) 0;
2072 2079 line-height: 1em;
2073 2080
2074 2081 .desc, .delete-notifications, .read-notifications{
2075 2082 display: table-cell;
2076 2083 text-align: left;
2077 2084 }
2078 2085
2079 2086 .delete-notifications, .read-notifications{
2080 2087 width: 35px;
2081 2088 min-width: 35px; //fixes when only one button is displayed
2082 2089 }
2083 2090 }
2084 2091
2085 2092 .notification-body {
2086 2093 .markdown-block,
2087 2094 .rst-block {
2088 2095 padding: @padding 0;
2089 2096 }
2090 2097
2091 2098 .notification-subject {
2092 2099 padding: @textmargin 0;
2093 2100 border-bottom: @border-thickness solid @border-default-color;
2094 2101 }
2095 2102 }
2096 2103
2097 2104
2098 2105 .notifications_buttons{
2099 2106 float: right;
2100 2107 }
2101 2108
2102 2109 #notification-status{
2103 2110 display: inline;
2104 2111 }
2105 2112
2106 2113 // Repositories
2107 2114
2108 2115 #summary.fields{
2109 2116 display: table;
2110 2117
2111 2118 .field{
2112 2119 display: table-row;
2113 2120
2114 2121 .label-summary{
2115 2122 display: table-cell;
2116 2123 min-width: @label-summary-minwidth;
2117 2124 padding-top: @padding/2;
2118 2125 padding-bottom: @padding/2;
2119 2126 padding-right: @padding/2;
2120 2127 }
2121 2128
2122 2129 .input{
2123 2130 display: table-cell;
2124 2131 padding: @padding/2;
2125 2132
2126 2133 input{
2127 2134 min-width: 29em;
2128 2135 padding: @padding/4;
2129 2136 }
2130 2137 }
2131 2138 .statistics, .downloads{
2132 2139 .disabled{
2133 2140 color: @grey4;
2134 2141 }
2135 2142 }
2136 2143 }
2137 2144 }
2138 2145
2139 2146 #summary{
2140 2147 width: 70%;
2141 2148 }
2142 2149
2143 2150
2144 2151 // Journal
2145 2152 .journal.title {
2146 2153 h5 {
2147 2154 float: left;
2148 2155 margin: 0;
2149 2156 width: 70%;
2150 2157 }
2151 2158
2152 2159 ul {
2153 2160 float: right;
2154 2161 display: inline-block;
2155 2162 margin: 0;
2156 2163 width: 30%;
2157 2164 text-align: right;
2158 2165
2159 2166 li {
2160 2167 display: inline;
2161 2168 font-size: @journal-fontsize;
2162 2169 line-height: 1em;
2163 2170
2164 2171 list-style-type: none;
2165 2172 }
2166 2173 }
2167 2174 }
2168 2175
2169 2176 .filterexample {
2170 2177 position: absolute;
2171 2178 top: 95px;
2172 2179 left: @contentpadding;
2173 2180 color: @rcblue;
2174 2181 font-size: 11px;
2175 2182 font-family: @text-regular;
2176 2183 cursor: help;
2177 2184
2178 2185 &:hover {
2179 2186 color: @rcdarkblue;
2180 2187 }
2181 2188
2182 2189 @media (max-width:768px) {
2183 2190 position: relative;
2184 2191 top: auto;
2185 2192 left: auto;
2186 2193 display: block;
2187 2194 }
2188 2195 }
2189 2196
2190 2197
2191 2198 #journal{
2192 2199 margin-bottom: @space;
2193 2200
2194 2201 .journal_day{
2195 2202 margin-bottom: @textmargin/2;
2196 2203 padding-bottom: @textmargin/2;
2197 2204 font-size: @journal-fontsize;
2198 2205 border-bottom: @border-thickness solid @border-default-color;
2199 2206 }
2200 2207
2201 2208 .journal_container{
2202 2209 margin-bottom: @space;
2203 2210
2204 2211 .journal_user{
2205 2212 display: inline-block;
2206 2213 }
2207 2214 .journal_action_container{
2208 2215 display: block;
2209 2216 margin-top: @textmargin;
2210 2217
2211 2218 div{
2212 2219 display: inline;
2213 2220 }
2214 2221
2215 2222 div.journal_action_params{
2216 2223 display: block;
2217 2224 }
2218 2225
2219 2226 div.journal_repo:after{
2220 2227 content: "\A";
2221 2228 white-space: pre;
2222 2229 }
2223 2230
2224 2231 div.date{
2225 2232 display: block;
2226 2233 margin-bottom: @textmargin;
2227 2234 }
2228 2235 }
2229 2236 }
2230 2237 }
2231 2238
2232 2239 // Files
2233 2240 .edit-file-title {
2234 2241 font-size: 16px;
2235 2242
2236 2243 .title-heading {
2237 2244 padding: 2px;
2238 2245 }
2239 2246 }
2240 2247
2241 2248 .edit-file-fieldset {
2242 2249 margin: @sidebarpadding 0;
2243 2250
2244 2251 .fieldset {
2245 2252 .left-label {
2246 2253 width: 13%;
2247 2254 }
2248 2255 .right-content {
2249 2256 width: 87%;
2250 2257 max-width: 100%;
2251 2258 }
2252 2259 .filename-label {
2253 2260 margin-top: 13px;
2254 2261 }
2255 2262 .commit-message-label {
2256 2263 margin-top: 4px;
2257 2264 }
2258 2265 .file-upload-input {
2259 2266 input {
2260 2267 display: none;
2261 2268 }
2262 2269 margin-top: 10px;
2263 2270 }
2264 2271 .file-upload-label {
2265 2272 margin-top: 10px;
2266 2273 }
2267 2274 p {
2268 2275 margin-top: 5px;
2269 2276 }
2270 2277
2271 2278 }
2272 2279 .custom-path-link {
2273 2280 margin-left: 5px;
2274 2281 }
2275 2282 #commit {
2276 2283 resize: vertical;
2277 2284 }
2278 2285 }
2279 2286
2280 2287 .delete-file-preview {
2281 2288 max-height: 250px;
2282 2289 }
2283 2290
2284 2291 .new-file,
2285 2292 #filter_activate,
2286 2293 #filter_deactivate {
2287 2294 float: right;
2288 2295 margin: 0 0 0 10px;
2289 2296 }
2290 2297
2291 2298 .file-upload-transaction-wrapper {
2292 2299 margin-top: 57px;
2293 2300 clear: both;
2294 2301 }
2295 2302
2296 2303 .file-upload-transaction-wrapper .error {
2297 2304 color: @color5;
2298 2305 }
2299 2306
2300 2307 .file-upload-transaction {
2301 2308 min-height: 200px;
2302 2309 padding: 54px;
2303 2310 border: 1px solid @grey5;
2304 2311 text-align: center;
2305 2312 clear: both;
2306 2313 }
2307 2314
2308 2315 .file-upload-transaction i {
2309 2316 font-size: 48px
2310 2317 }
2311 2318
2312 2319 h3.files_location{
2313 2320 line-height: 2.4em;
2314 2321 }
2315 2322
2316 2323 .browser-nav {
2317 2324 width: 100%;
2318 2325 display: table;
2319 2326 margin-bottom: 20px;
2320 2327
2321 2328 .info_box {
2322 2329 float: left;
2323 2330 display: inline-table;
2324 2331 height: 2.5em;
2325 2332
2326 2333 .browser-cur-rev, .info_box_elem {
2327 2334 display: table-cell;
2328 2335 vertical-align: middle;
2329 2336 }
2330 2337
2331 2338 .drop-menu {
2332 2339 margin: 0 10px;
2333 2340 }
2334 2341
2335 2342 .info_box_elem {
2336 2343 border-top: @border-thickness solid @grey5;
2337 2344 border-bottom: @border-thickness solid @grey5;
2338 2345 box-shadow: @button-shadow;
2339 2346
2340 2347 #at_rev, a {
2341 2348 padding: 0.6em 0.4em;
2342 2349 margin: 0;
2343 2350 .box-shadow(none);
2344 2351 border: 0;
2345 2352 height: 12px;
2346 2353 color: @grey2;
2347 2354 }
2348 2355
2349 2356 input#at_rev {
2350 2357 max-width: 50px;
2351 2358 text-align: center;
2352 2359 }
2353 2360
2354 2361 &.previous {
2355 2362 border: @border-thickness solid @grey5;
2356 2363 border-top-left-radius: @border-radius;
2357 2364 border-bottom-left-radius: @border-radius;
2358 2365
2359 2366 &:hover {
2360 2367 border-color: @grey4;
2361 2368 }
2362 2369
2363 2370 .disabled {
2364 2371 color: @grey5;
2365 2372 cursor: not-allowed;
2366 2373 opacity: 0.5;
2367 2374 }
2368 2375 }
2369 2376
2370 2377 &.next {
2371 2378 border: @border-thickness solid @grey5;
2372 2379 border-top-right-radius: @border-radius;
2373 2380 border-bottom-right-radius: @border-radius;
2374 2381
2375 2382 &:hover {
2376 2383 border-color: @grey4;
2377 2384 }
2378 2385
2379 2386 .disabled {
2380 2387 color: @grey5;
2381 2388 cursor: not-allowed;
2382 2389 opacity: 0.5;
2383 2390 }
2384 2391 }
2385 2392 }
2386 2393
2387 2394 .browser-cur-rev {
2388 2395
2389 2396 span{
2390 2397 margin: 0;
2391 2398 color: @rcblue;
2392 2399 height: 12px;
2393 2400 display: inline-block;
2394 2401 padding: 0.7em 1em ;
2395 2402 border: @border-thickness solid @rcblue;
2396 2403 margin-right: @padding;
2397 2404 }
2398 2405 }
2399 2406
2400 2407 }
2401 2408
2402 2409 .select-index-number {
2403 2410 margin: 0 0 0 20px;
2404 2411 color: @grey3;
2405 2412 }
2406 2413
2407 2414 .search_activate {
2408 2415 display: table-cell;
2409 2416 vertical-align: middle;
2410 2417
2411 2418 input, label{
2412 2419 margin: 0;
2413 2420 padding: 0;
2414 2421 }
2415 2422
2416 2423 input{
2417 2424 margin-left: @textmargin;
2418 2425 }
2419 2426
2420 2427 }
2421 2428 }
2422 2429
2423 2430 .browser-cur-rev{
2424 2431 margin-bottom: @textmargin;
2425 2432 }
2426 2433
2427 2434 #node_filter_box_loading{
2428 2435 .info_text;
2429 2436 }
2430 2437
2431 2438 .browser-search {
2432 2439 margin: -25px 0px 5px 0px;
2433 2440 }
2434 2441
2435 2442 .files-quick-filter {
2436 2443 float: right;
2437 2444 width: 180px;
2438 2445 position: relative;
2439 2446 }
2440 2447
2441 2448 .files-filter-box {
2442 2449 display: flex;
2443 2450 padding: 0px;
2444 2451 border-radius: 3px;
2445 2452 margin-bottom: 0;
2446 2453
2447 2454 a {
2448 2455 border: none !important;
2449 2456 }
2450 2457
2451 2458 li {
2452 2459 list-style-type: none
2453 2460 }
2454 2461 }
2455 2462
2456 2463 .files-filter-box-path {
2457 2464 line-height: 33px;
2458 2465 padding: 0;
2459 2466 width: 20px;
2460 2467 position: absolute;
2461 2468 z-index: 11;
2462 2469 left: 5px;
2463 2470 }
2464 2471
2465 2472 .files-filter-box-input {
2466 2473 margin-right: 0;
2467 2474
2468 2475 input {
2469 2476 border: 1px solid @white;
2470 2477 padding-left: 25px;
2471 2478 width: 145px;
2472 2479
2473 2480 &:hover {
2474 2481 border-color: @grey6;
2475 2482 }
2476 2483
2477 2484 &:focus {
2478 2485 border-color: @grey5;
2479 2486 }
2480 2487 }
2481 2488 }
2482 2489
2483 2490 .browser-result{
2484 2491 td a{
2485 2492 margin-left: 0.5em;
2486 2493 display: inline-block;
2487 2494
2488 2495 em {
2489 2496 font-weight: @text-bold-weight;
2490 2497 font-family: @text-bold;
2491 2498 }
2492 2499 }
2493 2500 }
2494 2501
2495 2502 .browser-highlight{
2496 2503 background-color: @grey5-alpha;
2497 2504 }
2498 2505
2499 2506
2500 2507 .edit-file-fieldset #location,
2501 2508 .edit-file-fieldset #filename {
2502 2509 display: flex;
2503 2510 width: -moz-available; /* WebKit-based browsers will ignore this. */
2504 2511 width: -webkit-fill-available; /* Mozilla-based browsers will ignore this. */
2505 2512 width: fill-available;
2506 2513 border: 0;
2507 2514 }
2508 2515
2509 2516 .path-items {
2510 2517 display: flex;
2511 2518 padding: 0;
2512 2519 border: 1px solid #eeeeee;
2513 2520 width: 100%;
2514 2521 float: left;
2515 2522
2516 2523 .breadcrumb-path {
2517 2524 line-height: 30px;
2518 2525 padding: 0 4px;
2519 2526 white-space: nowrap;
2520 2527 }
2521 2528
2522 2529 .location-path {
2523 2530 width: -moz-available; /* WebKit-based browsers will ignore this. */
2524 2531 width: -webkit-fill-available; /* Mozilla-based browsers will ignore this. */
2525 2532 width: fill-available;
2526 2533
2527 2534 .file-name-input {
2528 2535 padding: 0.5em 0;
2529 2536 }
2530 2537
2531 2538 }
2532 2539
2533 2540 ul {
2534 2541 display: flex;
2535 2542 margin: 0;
2536 2543 padding: 0;
2537 2544 width: 100%;
2538 2545 }
2539 2546
2540 2547 li {
2541 2548 list-style-type: none;
2542 2549 }
2543 2550
2544 2551 }
2545 2552
2546 2553 .editor-items {
2547 2554 height: 40px;
2548 2555 margin: 10px 0 -17px 10px;
2549 2556
2550 2557 .editor-action {
2551 2558 cursor: pointer;
2552 2559 }
2553 2560
2554 2561 .editor-action.active {
2555 2562 border-bottom: 2px solid #5C5C5C;
2556 2563 }
2557 2564
2558 2565 li {
2559 2566 list-style-type: none;
2560 2567 }
2561 2568 }
2562 2569
2563 2570 .edit-file-fieldset .message textarea {
2564 2571 border: 1px solid #eeeeee;
2565 2572 }
2566 2573
2567 2574 #files_data .codeblock {
2568 2575 background-color: #F5F5F5;
2569 2576 }
2570 2577
2571 2578 #editor_preview {
2572 2579 background: white;
2573 2580 }
2574 2581
2575 2582 .show-editor {
2576 2583 padding: 10px;
2577 2584 background-color: white;
2578 2585
2579 2586 }
2580 2587
2581 2588 .show-preview {
2582 2589 padding: 10px;
2583 2590 background-color: white;
2584 2591 border-left: 1px solid #eeeeee;
2585 2592 }
2586 2593 // quick filter
2587 2594 .grid-quick-filter {
2588 2595 float: right;
2589 2596 position: relative;
2590 2597 }
2591 2598
2592 2599 .grid-filter-box {
2593 2600 display: flex;
2594 2601 padding: 0px;
2595 2602 border-radius: 3px;
2596 2603 margin-bottom: 0;
2597 2604
2598 2605 a {
2599 2606 border: none !important;
2600 2607 }
2601 2608
2602 2609 li {
2603 2610 list-style-type: none
2604 2611 }
2605 2612 }
2606 2613
2607 2614 .grid-filter-box-icon {
2608 2615 line-height: 33px;
2609 2616 padding: 0;
2610 2617 width: 20px;
2611 2618 position: absolute;
2612 2619 z-index: 11;
2613 2620 left: 5px;
2614 2621 }
2615 2622
2616 2623 .grid-filter-box-input {
2617 2624 margin-right: 0;
2618 2625
2619 2626 input {
2620 2627 border: 1px solid @white;
2621 2628 padding-left: 25px;
2622 2629 width: 145px;
2623 2630
2624 2631 &:hover {
2625 2632 border-color: @grey6;
2626 2633 }
2627 2634
2628 2635 &:focus {
2629 2636 border-color: @grey5;
2630 2637 }
2631 2638 }
2632 2639 }
2633 2640
2634 2641
2635 2642
2636 2643 // Search
2637 2644
2638 2645 .search-form{
2639 2646 #q {
2640 2647 width: @search-form-width;
2641 2648 }
2642 2649 .fields{
2643 2650 margin: 0 0 @space;
2644 2651 }
2645 2652
2646 2653 label{
2647 2654 display: inline-block;
2648 2655 margin-right: @textmargin;
2649 2656 padding-top: 0.25em;
2650 2657 }
2651 2658
2652 2659
2653 2660 .results{
2654 2661 clear: both;
2655 2662 margin: 0 0 @padding;
2656 2663 }
2657 2664
2658 2665 .search-tags {
2659 2666 padding: 5px 0;
2660 2667 }
2661 2668 }
2662 2669
2663 2670 div.search-feedback-items {
2664 2671 display: inline-block;
2665 2672 }
2666 2673
2667 2674 div.search-code-body {
2668 2675 background-color: #ffffff; padding: 5px 0 5px 10px;
2669 2676 pre {
2670 2677 .match { background-color: #faffa6;}
2671 2678 .break { display: block; width: 100%; background-color: #DDE7EF; color: #747474; }
2672 2679 }
2673 2680 }
2674 2681
2675 2682 .expand_commit.search {
2676 2683 .show_more.open {
2677 2684 height: auto;
2678 2685 max-height: none;
2679 2686 }
2680 2687 }
2681 2688
2682 2689 .search-results {
2683 2690
2684 2691 h2 {
2685 2692 margin-bottom: 0;
2686 2693 }
2687 2694 .codeblock {
2688 2695 border: none;
2689 2696 background: transparent;
2690 2697 }
2691 2698
2692 2699 .codeblock-header {
2693 2700 border: none;
2694 2701 background: transparent;
2695 2702 }
2696 2703
2697 2704 .code-body {
2698 2705 border: @border-thickness solid @grey6;
2699 2706 .border-radius(@border-radius);
2700 2707 }
2701 2708
2702 2709 .td-commit {
2703 2710 &:extend(pre);
2704 2711 border-bottom: @border-thickness solid @border-default-color;
2705 2712 }
2706 2713
2707 2714 .message {
2708 2715 height: auto;
2709 2716 max-width: 350px;
2710 2717 white-space: normal;
2711 2718 text-overflow: initial;
2712 2719 overflow: visible;
2713 2720
2714 2721 .match { background-color: #faffa6;}
2715 2722 .break { background-color: #DDE7EF; width: 100%; color: #747474; display: block; }
2716 2723 }
2717 2724
2718 2725 .path {
2719 2726 border-bottom: none !important;
2720 2727 border-left: 1px solid @grey6 !important;
2721 2728 border-right: 1px solid @grey6 !important;
2722 2729 }
2723 2730 }
2724 2731
2725 2732 table.rctable td.td-search-results div {
2726 2733 max-width: 100%;
2727 2734 }
2728 2735
2729 2736 #tip-box, .tip-box{
2730 2737 padding: @menupadding/2;
2731 2738 display: block;
2732 2739 border: @border-thickness solid @border-highlight-color;
2733 2740 .border-radius(@border-radius);
2734 2741 background-color: white;
2735 2742 z-index: 99;
2736 2743 white-space: pre-wrap;
2737 2744 }
2738 2745
2739 2746 #linktt {
2740 2747 width: 79px;
2741 2748 }
2742 2749
2743 2750 #help_kb .modal-content{
2744 2751 max-width: 750px;
2745 2752 margin: 10% auto;
2746 2753
2747 2754 table{
2748 2755 td,th{
2749 2756 border-bottom: none;
2750 2757 line-height: 2.5em;
2751 2758 }
2752 2759 th{
2753 2760 padding-bottom: @textmargin/2;
2754 2761 }
2755 2762 td.keys{
2756 2763 text-align: center;
2757 2764 }
2758 2765 }
2759 2766
2760 2767 .block-left{
2761 2768 width: 45%;
2762 2769 margin-right: 5%;
2763 2770 }
2764 2771 .modal-footer{
2765 2772 clear: both;
2766 2773 }
2767 2774 .key.tag{
2768 2775 padding: 0.5em;
2769 2776 background-color: @rcblue;
2770 2777 color: white;
2771 2778 border-color: @rcblue;
2772 2779 .box-shadow(none);
2773 2780 }
2774 2781 }
2775 2782
2776 2783
2777 2784
2778 2785 //--- IMPORTS FOR REFACTORED STYLES ------------------//
2779 2786
2780 2787 @import 'statistics-graph';
2781 2788 @import 'tables';
2782 2789 @import 'forms';
2783 2790 @import 'diff';
2784 2791 @import 'summary';
2785 2792 @import 'navigation';
2786 2793
2787 2794 //--- SHOW/HIDE SECTIONS --//
2788 2795
2789 2796 .btn-collapse {
2790 2797 float: right;
2791 2798 text-align: right;
2792 2799 font-family: @text-light;
2793 2800 font-size: @basefontsize;
2794 2801 cursor: pointer;
2795 2802 border: none;
2796 2803 color: @rcblue;
2797 2804 }
2798 2805
2799 2806 table.rctable,
2800 2807 table.dataTable {
2801 2808 .btn-collapse {
2802 2809 float: right;
2803 2810 text-align: right;
2804 2811 }
2805 2812 }
2806 2813
2807 2814 table.rctable {
2808 2815 &.permissions {
2809 2816
2810 2817 th.td-owner {
2811 2818 padding: 0;
2812 2819 }
2813 2820
2814 2821 th {
2815 2822 font-weight: normal;
2816 2823 padding: 0 5px;
2817 2824 }
2818 2825
2819 2826 }
2820 2827 }
2821 2828
2822 2829
2823 2830 // TODO: johbo: Fix for IE10, this avoids that we see a border
2824 2831 // and padding around checkboxes and radio boxes. Move to the right place,
2825 2832 // or better: Remove this once we did the form refactoring.
2826 2833 input[type=checkbox],
2827 2834 input[type=radio] {
2828 2835 padding: 0;
2829 2836 border: none;
2830 2837 }
2831 2838
2832 2839 .toggle-ajax-spinner{
2833 2840 height: 16px;
2834 2841 width: 16px;
2835 2842 }
2836 2843
2837 2844
2838 2845 .markup-form .clearfix {
2839 2846 .border-radius(@border-radius);
2840 2847 margin: 0px;
2841 2848 }
2842 2849
2843 2850 .markup-form-area {
2844 2851 padding: 8px 12px;
2845 2852 border: 1px solid @grey4;
2846 2853 .border-radius(@border-radius);
2847 2854 }
2848 2855
2849 2856 .markup-form-area-header .nav-links {
2850 2857 display: flex;
2851 2858 flex-flow: row wrap;
2852 2859 -webkit-flex-flow: row wrap;
2853 2860 width: 100%;
2854 2861 }
2855 2862
2856 2863 .markup-form-area-footer {
2857 2864 display: flex;
2858 2865 }
2859 2866
2860 2867 .markup-form-area-footer .toolbar {
2861 2868
2862 2869 }
2863 2870
2864 2871 // markup Form
2865 2872 div.markup-form {
2866 2873 margin-top: 20px;
2867 2874 }
2868 2875
2869 2876 .markup-form strong {
2870 2877 display: block;
2871 2878 margin-bottom: 15px;
2872 2879 }
2873 2880
2874 2881 .markup-form textarea {
2875 2882 width: 100%;
2876 2883 height: 100px;
2877 2884 font-family: @text-monospace;
2878 2885 }
2879 2886
2880 2887 form.markup-form {
2881 2888 margin-top: 10px;
2882 2889 margin-left: 10px;
2883 2890 }
2884 2891
2885 2892 .markup-form .comment-block-ta,
2886 2893 .markup-form .preview-box {
2887 2894 .border-radius(@border-radius);
2888 2895 .box-sizing(border-box);
2889 2896 background-color: white;
2890 2897 }
2891 2898
2892 2899 .markup-form .preview-box.unloaded {
2893 2900 height: 50px;
2894 2901 text-align: center;
2895 2902 padding: 20px;
2896 2903 background-color: white;
2897 2904 }
2898 2905
2899 2906
2900 2907 .dropzone-wrapper {
2901 2908 border: 1px solid @grey5;
2902 2909 padding: 20px;
2903 2910 }
2904 2911
2905 2912 .dropzone,
2906 2913 .dropzone-pure {
2907 2914 border: 2px dashed @grey5;
2908 2915 border-radius: 5px;
2909 2916 background: white;
2910 2917 min-height: 200px;
2911 2918 padding: 54px;
2912 2919
2913 2920 .dz-message {
2914 2921 font-weight: 700;
2915 2922 text-align: center;
2916 2923 margin: 2em 0;
2917 2924 }
2918 2925
2919 2926 }
2920 2927
2921 2928 .dz-preview {
2922 2929 margin: 10px 0 !important;
2923 2930 position: relative;
2924 2931 vertical-align: top;
2925 2932 padding: 10px;
2926 2933 border-bottom: 1px solid @grey5;
2927 2934 }
2928 2935
2929 2936 .dz-filename {
2930 2937 font-weight: 700;
2931 2938 float: left;
2932 2939 }
2933 2940
2934 2941 .dz-sending {
2935 2942 float: right;
2936 2943 }
2937 2944
2938 2945 .dz-response {
2939 2946 clear: both
2940 2947 }
2941 2948
2942 2949 .dz-filename-size {
2943 2950 float: right
2944 2951 }
2945 2952
2946 2953 .dz-error-message {
2947 2954 color: @alert2;
2948 2955 padding-top: 10px;
2949 2956 clear: both;
2950 2957 }
2951 2958
2952 2959
2953 2960 .user-hovercard {
2954 2961 padding: 5px;
2955 2962 }
2956 2963
2957 2964 .user-hovercard-icon {
2958 2965 display: inline;
2959 2966 padding: 0;
2960 2967 box-sizing: content-box;
2961 2968 border-radius: 50%;
2962 2969 float: left;
2963 2970 }
2964 2971
2965 2972 .user-hovercard-name {
2966 2973 float: right;
2967 2974 vertical-align: top;
2968 2975 padding-left: 10px;
2969 2976 min-width: 150px;
2970 2977 }
2971 2978
2972 2979 .user-hovercard-bio {
2973 2980 clear: both;
2974 2981 padding-top: 10px;
2975 2982 }
2976 2983
2977 2984 .user-hovercard-header {
2978 2985 clear: both;
2979 2986 min-height: 10px;
2980 2987 }
2981 2988
2982 2989 .user-hovercard-footer {
2983 2990 clear: both;
2984 2991 min-height: 10px;
2985 2992 }
2986 2993
2987 2994 .user-group-hovercard {
2988 2995 padding: 5px;
2989 2996 }
2990 2997
2991 2998 .user-group-hovercard-icon {
2992 2999 display: inline;
2993 3000 padding: 0;
2994 3001 box-sizing: content-box;
2995 3002 border-radius: 50%;
2996 3003 float: left;
2997 3004 }
2998 3005
2999 3006 .user-group-hovercard-name {
3000 3007 float: left;
3001 3008 vertical-align: top;
3002 3009 padding-left: 10px;
3003 3010 min-width: 150px;
3004 3011 }
3005 3012
3006 3013 .user-group-hovercard-icon i {
3007 3014 border: 1px solid @grey4;
3008 3015 border-radius: 4px;
3009 3016 }
3010 3017
3011 3018 .user-group-hovercard-bio {
3012 3019 clear: both;
3013 3020 padding-top: 10px;
3014 3021 line-height: 1.0em;
3015 3022 }
3016 3023
3017 3024 .user-group-hovercard-header {
3018 3025 clear: both;
3019 3026 min-height: 10px;
3020 3027 }
3021 3028
3022 3029 .user-group-hovercard-footer {
3023 3030 clear: both;
3024 3031 min-height: 10px;
3025 3032 }
3026 3033
3027 3034 .pr-hovercard-header {
3028 3035 clear: both;
3029 3036 display: block;
3030 3037 line-height: 20px;
3031 3038 }
3032 3039
3033 3040 .pr-hovercard-user {
3034 3041 display: flex;
3035 3042 align-items: center;
3036 3043 padding-left: 5px;
3037 3044 }
3038 3045
3039 3046 .pr-hovercard-title {
3040 3047 padding-top: 5px;
3041 3048 } No newline at end of file
@@ -1,19 +1,18 b''
1 1 <%page args="config"/>
2 2
3 3 <script>
4 4 var CHANNELSTREAM_URLS = ${config['url_gen'](request)|n};
5 5 %if request.registry.rhodecode_plugins['channelstream']['enabled'] and getattr(c.rhodecode_user, 'username', '') != h.DEFAULT_USER:
6 6 var CHANNELSTREAM_SETTINGS = {
7 7 'enabled': true,
8 8 'ws_location': '${request.registry.settings.get('channelstream.ws_url')}',
9 9 'webapp_location': '${h.route_url('home').rstrip('/')}'
10 10 };
11 11 %else:
12 12 var CHANNELSTREAM_SETTINGS = {
13 13 'enabled':false,
14 14 'ws_location': '',
15 15 'webapp_location': '${h.route_url('home').rstrip('/')}'
16 16 };
17 17 %endif
18
19 18 </script>
@@ -1,912 +1,911 b''
1 1 <%inherit file="/base/base.mako"/>
2 2 <%namespace name="base" file="/base/base.mako"/>
3 3 <%namespace name="dt" file="/data_table/_dt_elements.mako"/>
4 4
5 5 <%def name="title()">
6 6 ${_('{} Pull Request !{}').format(c.repo_name, c.pull_request.pull_request_id)}
7 7 %if c.rhodecode_name:
8 8 &middot; ${h.branding(c.rhodecode_name)}
9 9 %endif
10 10 </%def>
11 11
12 12 <%def name="breadcrumbs_links()">
13 13
14 <div id="pr-title">
15 % if c.pull_request.is_closed():
16 <span class="pr-title-closed-tag tag">${_('Closed')}</span>
17 % endif
18 <input class="pr-title-input large disabled" disabled="disabled" name="pullrequest_title" type="text" value="${c.pull_request.title}">
19 </div>
20 <div id="pr-title-edit" class="input" style="display: none;">
21 <input class="pr-title-input large" id="pr-title-input" name="pullrequest_title" type="text" value="${c.pull_request.title}">
22 </div>
23 14 </%def>
24 15
25 16 <%def name="menu_bar_nav()">
26 17 ${self.menu_items(active='repositories')}
27 18 </%def>
28 19
29 20 <%def name="menu_bar_subnav()">
30 21 ${self.repo_menu(active='showpullrequest')}
31 22 </%def>
32 23
33 24 <%def name="main()">
34 25
35 26 <script type="text/javascript">
36 27 // TODO: marcink switch this to pyroutes
37 28 AJAX_COMMENT_DELETE_URL = "${h.route_path('pullrequest_comment_delete',repo_name=c.repo_name,pull_request_id=c.pull_request.pull_request_id,comment_id='__COMMENT_ID__')}";
38 29 templateContext.pull_request_data.pull_request_id = ${c.pull_request.pull_request_id};
39 30 </script>
40 31
41 32 <div class="box">
42 33
43 ${self.breadcrumbs()}
44
45 34 <div class="box pr-summary">
46 35
47 36 <div class="summary-details block-left">
37 <div id="pr-title">
38 % if c.pull_request.is_closed():
39 <span class="pr-title-closed-tag tag">${_('Closed')}</span>
40 % endif
41 <input class="pr-title-input large disabled" disabled="disabled" name="pullrequest_title" type="text" value="${c.pull_request.title}">
42 </div>
43 <div id="pr-title-edit" class="input" style="display: none;">
44 <input class="pr-title-input large" id="pr-title-input" name="pullrequest_title" type="text" value="${c.pull_request.title}">
45 </div>
46
48 47 <% summary = lambda n:{False:'summary-short'}.get(n) %>
49 48 <div class="pr-details-title">
50 49 <div class="pull-left">
51 50 <a href="${h.route_path('pull_requests_global', pull_request_id=c.pull_request.pull_request_id)}">${_('Pull request !{}').format(c.pull_request.pull_request_id)}</a>
52 51 ${_('Created on')}
53 52 <span class="tooltip" title="${_('Last updated on')} ${h.format_date(c.pull_request.updated_on)}">${h.format_date(c.pull_request.created_on)},</span>
54 53 <span class="pr-details-title-author-pref">${_('by')}</span>
55 54 </div>
56 55
57 56 <div class="pull-left">
58 57 ${self.gravatar_with_user(c.pull_request.author.email, 16, tooltip=True)}
59 58 </div>
60 59
61 60 %if c.allowed_to_update:
62 61 <div class="pull-right">
63 62 <div id="edit_pull_request" class="action_button pr-save" style="display: none;">${_('Update title & description')}</div>
64 63 <div id="delete_pullrequest" class="action_button pr-save ${('' if c.allowed_to_delete else 'disabled' )}" style="display: none;">
65 64 % if c.allowed_to_delete:
66 65 ${h.secure_form(h.route_path('pullrequest_delete', repo_name=c.pull_request.target_repo.repo_name, pull_request_id=c.pull_request.pull_request_id), request=request)}
67 66 ${h.submit('remove_%s' % c.pull_request.pull_request_id, _('Delete pull request'),
68 67 class_="btn btn-link btn-danger no-margin",onclick="return confirm('"+_('Confirm to delete this pull request')+"');")}
69 68 ${h.end_form()}
70 69 % else:
71 70 <span class="tooltip" title="${_('Not allowed to delete this pull request')}">${_('Delete pull request')}</span>
72 71 % endif
73 72 </div>
74 73 <div id="open_edit_pullrequest" class="action_button">${_('Edit')}</div>
75 74 <div id="close_edit_pullrequest" class="action_button" style="display: none;">${_('Cancel')}</div>
76 75 </div>
77 76
78 77 %endif
79 78 </div>
80 79
81 80 <div id="pr-desc" class="input" title="${_('Rendered using {} renderer').format(c.renderer)}">
82 81 ${h.render(c.pull_request.description, renderer=c.renderer, repo_name=c.repo_name)}
83 82 </div>
84 83
85 84 <div id="pr-desc-edit" class="input textarea" style="display: none;">
86 85 <input id="pr-renderer-input" type="hidden" name="description_renderer" value="${c.visual.default_renderer}">
87 86 ${dt.markup_form('pr-description-input', form_text=c.pull_request.description)}
88 87 </div>
89 88
90 89 <div id="summary" class="fields pr-details-content">
91 90
92 91 ## review
93 92 <div class="field">
94 93 <div class="label-pr-detail">
95 94 <label>${_('Review status')}:</label>
96 95 </div>
97 96 <div class="input">
98 97 %if c.pull_request_review_status:
99 98 <div class="tag status-tag-${c.pull_request_review_status}">
100 99 <i class="icon-circle review-status-${c.pull_request_review_status}"></i>
101 100 <span class="changeset-status-lbl">
102 101 %if c.pull_request.is_closed():
103 102 ${_('Closed')},
104 103 %endif
105 104
106 105 ${h.commit_status_lbl(c.pull_request_review_status)}
107 106
108 107 </span>
109 108 </div>
110 109 - ${_ungettext('calculated based on {} reviewer vote', 'calculated based on {} reviewers votes', len(c.pull_request_reviewers)).format(len(c.pull_request_reviewers))}
111 110 %endif
112 111 </div>
113 112 </div>
114 113
115 114 ## source
116 115 <div class="field">
117 116 <div class="label-pr-detail">
118 117 <label>${_('Commit flow')}:</label>
119 118 </div>
120 119 <div class="input">
121 120 <div class="pr-commit-flow">
122 121 ## Source
123 122 %if c.pull_request.source_ref_parts.type == 'branch':
124 123 <a href="${h.route_path('repo_commits', repo_name=c.pull_request.source_repo.repo_name, _query=dict(branch=c.pull_request.source_ref_parts.name))}"><code class="pr-source-info">${c.pull_request.source_ref_parts.type}:${c.pull_request.source_ref_parts.name}</code></a>
125 124 %else:
126 125 <code class="pr-source-info">${'{}:{}'.format(c.pull_request.source_ref_parts.type, c.pull_request.source_ref_parts.name)}</code>
127 126 %endif
128 127 ${_('of')} <a href="${h.route_path('repo_summary', repo_name=c.pull_request.source_repo.repo_name)}">${c.pull_request.source_repo.repo_name}</a>
129 128 &rarr;
130 129 ## Target
131 130 %if c.pull_request.target_ref_parts.type == 'branch':
132 131 <a href="${h.route_path('repo_commits', repo_name=c.pull_request.target_repo.repo_name, _query=dict(branch=c.pull_request.target_ref_parts.name))}"><code class="pr-target-info">${c.pull_request.target_ref_parts.type}:${c.pull_request.target_ref_parts.name}</code></a>
133 132 %else:
134 133 <code class="pr-target-info">${'{}:{}'.format(c.pull_request.target_ref_parts.type, c.pull_request.target_ref_parts.name)}</code>
135 134 %endif
136 135
137 136 ${_('of')} <a href="${h.route_path('repo_summary', repo_name=c.pull_request.target_repo.repo_name)}">${c.pull_request.target_repo.repo_name}</a>
138 137
139 138 <a class="source-details-action" href="#expand-source-details" onclick="return versionController.toggleElement(this, '.source-details')" data-toggle-on='<i class="icon-angle-down">more details</i>' data-toggle-off='<i class="icon-angle-up">less details</i>'>
140 139 <i class="icon-angle-down">more details</i>
141 140 </a>
142 141
143 142 </div>
144 143
145 144 <div class="source-details" style="display: none">
146 145
147 146 <ul>
148 147
149 148 ## common ancestor
150 149 <li>
151 150 ${_('Common ancestor')}:
152 151 % if c.ancestor_commit:
153 152 <a href="${h.route_path('repo_commit', repo_name=c.target_repo.repo_name, commit_id=c.ancestor_commit.raw_id)}">${h.show_id(c.ancestor_commit)}</a>
154 153 % else:
155 154 ${_('not available')}
156 155 % endif
157 156 </li>
158 157
159 158 ## pull url
160 159 <li>
161 160 %if h.is_hg(c.pull_request.source_repo):
162 161 <% clone_url = 'hg pull -r {} {}'.format(h.short_id(c.source_ref), c.pull_request.source_repo.clone_url()) %>
163 162 %elif h.is_git(c.pull_request.source_repo):
164 163 <% clone_url = 'git pull {} {}'.format(c.pull_request.source_repo.clone_url(), c.pull_request.source_ref_parts.name) %>
165 164 %endif
166 165
167 166 <span>${_('Pull changes from source')}</span>: <input type="text" class="input-monospace pr-pullinfo" value="${clone_url}" readonly="readonly">
168 167 <i class="tooltip icon-clipboard clipboard-action pull-right pr-pullinfo-copy" data-clipboard-text="${clone_url}" title="${_('Copy the pull url')}"></i>
169 168 </li>
170 169
171 170 ## Shadow repo
172 171 <li>
173 172 % if not c.pull_request.is_closed() and c.pull_request.shadow_merge_ref:
174 173 %if h.is_hg(c.pull_request.target_repo):
175 174 <% clone_url = 'hg clone --update {} {} pull-request-{}'.format(c.pull_request.shadow_merge_ref.name, c.shadow_clone_url, c.pull_request.pull_request_id) %>
176 175 %elif h.is_git(c.pull_request.target_repo):
177 176 <% clone_url = 'git clone --branch {} {} pull-request-{}'.format(c.pull_request.shadow_merge_ref.name, c.shadow_clone_url, c.pull_request.pull_request_id) %>
178 177 %endif
179 178
180 179 <span class="tooltip" title="${_('Clone repository in its merged state using shadow repository')}">${_('Clone from shadow repository')}</span>: <input type="text" class="input-monospace pr-mergeinfo" value="${clone_url}" readonly="readonly">
181 180 <i class="tooltip icon-clipboard clipboard-action pull-right pr-mergeinfo-copy" data-clipboard-text="${clone_url}" title="${_('Copy the clone url')}"></i>
182 181
183 182 % else:
184 183 <div class="">
185 184 ${_('Shadow repository data not available')}.
186 185 </div>
187 186 % endif
188 187 </li>
189 188
190 189 </ul>
191 190
192 191 </div>
193 192
194 193 </div>
195 194
196 195 </div>
197 196
198 197 ## versions
199 198 <div class="field">
200 199 <div class="label-pr-detail">
201 200 <label>${_('Versions')}:</label>
202 201 </div>
203 202
204 203 <% outdated_comm_count_ver = len(c.inline_versions[None]['outdated']) %>
205 204 <% general_outdated_comm_count_ver = len(c.comment_versions[None]['outdated']) %>
206 205
207 206 <div class="pr-versions">
208 207 % if c.show_version_changes:
209 208 <% outdated_comm_count_ver = len(c.inline_versions[c.at_version_num]['outdated']) %>
210 209 <% general_outdated_comm_count_ver = len(c.comment_versions[c.at_version_num]['outdated']) %>
211 210 ${_ungettext('{} version available for this pull request, ', '{} versions available for this pull request, ', len(c.versions)).format(len(c.versions))}
212 211 <a id="show-pr-versions" onclick="return versionController.toggleVersionView(this)" href="#show-pr-versions"
213 212 data-toggle-on="${_('show versions')}."
214 213 data-toggle-off="${_('hide versions')}.">
215 214 ${_('show versions')}.
216 215 </a>
217 216 <table>
218 217 ## SHOW ALL VERSIONS OF PR
219 218 <% ver_pr = None %>
220 219
221 220 % for data in reversed(list(enumerate(c.versions, 1))):
222 221 <% ver_pos = data[0] %>
223 222 <% ver = data[1] %>
224 223 <% ver_pr = ver.pull_request_version_id %>
225 224 <% display_row = '' if c.at_version and (c.at_version_num == ver_pr or c.from_version_num == ver_pr) else 'none' %>
226 225
227 226 <tr class="version-pr" style="display: ${display_row}">
228 227 <td>
229 228 <code>
230 229 <a href="${request.current_route_path(_query=dict(version=ver_pr or 'latest'))}">v${ver_pos}</a>
231 230 </code>
232 231 </td>
233 232 <td>
234 233 <input ${('checked="checked"' if c.from_version_num == ver_pr else '')} class="compare-radio-button" type="radio" name="ver_source" value="${ver_pr or 'latest'}" data-ver-pos="${ver_pos}"/>
235 234 <input ${('checked="checked"' if c.at_version_num == ver_pr else '')} class="compare-radio-button" type="radio" name="ver_target" value="${ver_pr or 'latest'}" data-ver-pos="${ver_pos}"/>
236 235 </td>
237 236 <td>
238 237 <% review_status = c.review_versions[ver_pr].status if ver_pr in c.review_versions else 'not_reviewed' %>
239 238 <i class="tooltip icon-circle review-status-${review_status}" title="${_('Your review status at this version')}"></i>
240 239
241 240 </td>
242 241 <td>
243 242 % if c.at_version_num != ver_pr:
244 243 <i class="tooltip icon-comment" title="${_('Comments from pull request version v{0}').format(ver_pos)}"></i>
245 244 <code>
246 245 General:${len(c.comment_versions[ver_pr]['at'])} / Inline:${len(c.inline_versions[ver_pr]['at'])}
247 246 </code>
248 247 % endif
249 248 </td>
250 249 <td>
251 250 ##<code>${ver.source_ref_parts.commit_id[:6]}</code>
252 251 </td>
253 252 <td>
254 253 <code>${h.age_component(ver.updated_on, time_is_local=True, tooltip=False)}</code>
255 254 </td>
256 255 </tr>
257 256 % endfor
258 257
259 258 <tr>
260 259 <td colspan="6">
261 260 <button id="show-version-diff" onclick="return versionController.showVersionDiff()" class="btn btn-sm" style="display: none"
262 261 data-label-text-locked="${_('select versions to show changes')}"
263 262 data-label-text-diff="${_('show changes between versions')}"
264 263 data-label-text-show="${_('show pull request for this version')}"
265 264 >
266 265 ${_('select versions to show changes')}
267 266 </button>
268 267 </td>
269 268 </tr>
270 269 </table>
271 270 % else:
272 271 <div>
273 272 ${_('Pull request versions not available')}.
274 273 </div>
275 274 % endif
276 275 </div>
277 276 </div>
278 277
279 278 </div>
280 279
281 280 </div>
282 281
283 282 ## REVIEW RULES
284 283 <div id="review_rules" style="display: none" class="reviewers-title block-right">
285 284 <div class="pr-details-title">
286 285 ${_('Reviewer rules')}
287 286 %if c.allowed_to_update:
288 287 <span id="close_edit_reviewers" class="block-right action_button last-item" style="display: none;">${_('Close')}</span>
289 288 %endif
290 289 </div>
291 290 <div class="pr-reviewer-rules">
292 291 ## review rules will be appended here, by default reviewers logic
293 292 </div>
294 293 <input id="review_data" type="hidden" name="review_data" value="">
295 294 </div>
296 295
297 296 ## REVIEWERS
298 <div class="reviewers-title block-right">
297 <div class="reviewers-title first-panel block-right">
299 298 <div class="pr-details-title">
300 299 ${_('Pull request reviewers')}
301 300 %if c.allowed_to_update:
302 301 <span id="open_edit_reviewers" class="block-right action_button last-item">${_('Edit')}</span>
303 302 %endif
304 303 </div>
305 304 </div>
306 305 <div id="reviewers" class="block-right pr-details-content reviewers">
307 306
308 307 ## members redering block
309 308 <input type="hidden" name="__start__" value="review_members:sequence">
310 309 <ul id="review_members" class="group_members">
311 310
312 311 % for review_obj, member, reasons, mandatory, status in c.pull_request_reviewers:
313 312 <script>
314 313 var member = ${h.json.dumps(h.reviewer_as_json(member, reasons=reasons, mandatory=mandatory, user_group=review_obj.rule_user_group_data()))|n};
315 314 var status = "${(status[0][1].status if status else 'not_reviewed')}";
316 315 var status_lbl = "${h.commit_status_lbl(status[0][1].status if status else 'not_reviewed')}";
317 316 var allowed_to_update = ${h.json.dumps(c.allowed_to_update)};
318 317
319 318 var entry = renderTemplate('reviewMemberEntry', {
320 319 'member': member,
321 320 'mandatory': member.mandatory,
322 321 'reasons': member.reasons,
323 322 'allowed_to_update': allowed_to_update,
324 323 'review_status': status,
325 324 'review_status_label': status_lbl,
326 325 'user_group': member.user_group,
327 326 'create': false
328 327 });
329 328 $('#review_members').append(entry)
330 329 </script>
331 330
332 331 % endfor
333 332
334 333 </ul>
335 334
336 335 <input type="hidden" name="__end__" value="review_members:sequence">
337 336 ## end members redering block
338 337
339 338 %if not c.pull_request.is_closed():
340 339 <div id="add_reviewer" class="ac" style="display: none;">
341 340 %if c.allowed_to_update:
342 341 % if not c.forbid_adding_reviewers:
343 342 <div id="add_reviewer_input" class="reviewer_ac">
344 343 ${h.text('user', class_='ac-input', placeholder=_('Add reviewer or reviewer group'))}
345 344 <div id="reviewers_container"></div>
346 345 </div>
347 346 % endif
348 347 <div class="pull-right">
349 348 <button id="update_pull_request" class="btn btn-small no-margin">${_('Save Changes')}</button>
350 349 </div>
351 350 %endif
352 351 </div>
353 352 %endif
354 353 </div>
355 354
356 355 ## TODOs will be listed here
357 356 <div class="reviewers-title block-right">
358 357 <div class="pr-details-title">
359 358 ## Only show unresolved, that is only what matters
360 359 TODO Comments - ${len(c.unresolved_comments)} / ${(len(c.unresolved_comments) + len(c.resolved_comments))}
361 360
362 361 % if not c.at_version:
363 362 % if c.resolved_comments:
364 363 <span class="block-right action_button last-item noselect" onclick="$('.unresolved-todo-text').toggle(); return versionController.toggleElement(this, '.unresolved-todo');" data-toggle-on="Show resolved" data-toggle-off="Hide resolved">Show resolved</span>
365 364 % else:
366 365 <span class="block-right last-item noselect">Show resolved</span>
367 366 % endif
368 367 % endif
369 368 </div>
370 369 </div>
371 370 <div class="block-right pr-details-content reviewers">
372 371
373 372 <table class="todo-table">
374 373 <%
375 374 def sorter(entry):
376 375 user_id = entry.author.user_id
377 376 resolved = '1' if entry.resolved else '0'
378 377 if user_id == c.rhodecode_user.user_id:
379 378 # own comments first
380 379 user_id = 0
381 380 return '{}_{}_{}'.format(resolved, user_id, str(entry.comment_id).zfill(100))
382 381 %>
383 382
384 383 % if c.at_version:
385 384 <tr>
386 385 <td class="unresolved-todo-text">${_('unresolved TODOs unavailable in this view')}.</td>
387 386 </tr>
388 387 % else:
389 388 % for todo_comment in sorted(c.unresolved_comments + c.resolved_comments, key=sorter):
390 389 <% resolved = todo_comment.resolved %>
391 390 % if inline:
392 391 <% outdated_at_ver = todo_comment.outdated_at_version(getattr(c, 'at_version_num', None)) %>
393 392 % else:
394 393 <% outdated_at_ver = todo_comment.older_than_version(getattr(c, 'at_version_num', None)) %>
395 394 % endif
396 395
397 396 <tr ${('class="unresolved-todo" style="display: none"' if resolved else '') |n}>
398 397
399 398 <td class="td-todo-number">
400 399 % if resolved:
401 400 <a class="permalink todo-resolved tooltip" title="${_('Resolved by comment #{}').format(todo_comment.resolved.comment_id)}" href="#comment-${todo_comment.comment_id}" onclick="return Rhodecode.comments.scrollToComment($('#comment-${todo_comment.comment_id}'), 0, ${h.json.dumps(outdated_at_ver)})">
402 401 <i class="icon-flag-filled"></i> ${todo_comment.comment_id}</a>
403 402 % else:
404 403 <a class="permalink" href="#comment-${todo_comment.comment_id}" onclick="return Rhodecode.comments.scrollToComment($('#comment-${todo_comment.comment_id}'), 0, ${h.json.dumps(outdated_at_ver)})">
405 404 <i class="icon-flag-filled"></i> ${todo_comment.comment_id}</a>
406 405 % endif
407 406 </td>
408 407 <td class="td-todo-gravatar">
409 408 ${base.gravatar(todo_comment.author.email, 16, user=todo_comment.author, tooltip=True, extra_class=['no-margin'])}
410 409 </td>
411 410 <td class="todo-comment-text-wrapper">
412 411 <div class="todo-comment-text">
413 412 <code>${h.chop_at_smart(todo_comment.text, '\n', suffix_if_chopped='...')}</code>
414 413 </div>
415 414 </td>
416 415
417 416 </tr>
418 417 % endfor
419 418
420 419 % if len(c.unresolved_comments) == 0:
421 420 <tr>
422 421 <td class="unresolved-todo-text">${_('No unresolved TODOs')}.</td>
423 422 </tr>
424 423 % endif
425 424
426 425 % endif
427 426
428 427 </table>
429 428
430 429 </div>
431 430 </div>
432 431
433 432 </div>
434 433
435 434 <div class="box">
436 435
437 436 % if c.state_progressing:
438 437
439 438 <h2 style="text-align: center">
440 439 ${_('Cannot show diff when pull request state is changing. Current progress state')}: <span class="tag tag-merge-state-${c.pull_request.state}">${c.pull_request.state}</span>
441 440
442 441 % if c.is_super_admin:
443 442 <br/>
444 443 If you think this is an error try <a href="${h.current_route_path(request, force_state='created')}">forced state reset</a> to <span class="tag tag-merge-state-created">created</span> state.
445 444 % endif
446 445 </h2>
447 446
448 447 % else:
449 448
450 449 ## Diffs rendered here
451 450 <div class="table" >
452 451 <div id="changeset_compare_view_content">
453 452 ##CS
454 453 % if c.missing_requirements:
455 454 <div class="box">
456 455 <div class="alert alert-warning">
457 456 <div>
458 457 <strong>${_('Missing requirements:')}</strong>
459 458 ${_('These commits cannot be displayed, because this repository uses the Mercurial largefiles extension, which was not enabled.')}
460 459 </div>
461 460 </div>
462 461 </div>
463 462 % elif c.missing_commits:
464 463 <div class="box">
465 464 <div class="alert alert-warning">
466 465 <div>
467 466 <strong>${_('Missing commits')}:</strong>
468 467 ${_('This pull request cannot be displayed, because one or more commits no longer exist in the source repository.')}
469 468 ${_('Please update this pull request, push the commits back into the source repository, or consider closing this pull request.')}
470 469 ${_('Consider doing a {force_refresh_url} in case you think this is an error.').format(force_refresh_url=h.link_to('force refresh', h.current_route_path(request, force_refresh='1')))|n}
471 470 </div>
472 471 </div>
473 472 </div>
474 473 % endif
475 474
476 475 <div class="compare_view_commits_title">
477 476 % if not c.compare_mode:
478 477
479 478 % if c.at_version_pos:
480 479 <h4>
481 480 ${_('Showing changes at v%d, commenting is disabled.') % c.at_version_pos}
482 481 </h4>
483 482 % endif
484 483
485 484 <div class="pull-left">
486 485 <div class="btn-group">
487 486 <a class="${('collapsed' if c.collapse_all_commits else '')}" href="#expand-commits" onclick="toggleCommitExpand(this); return false" data-toggle-commits-cnt=${len(c.commit_ranges)} >
488 487 % if c.collapse_all_commits:
489 488 <i class="icon-plus-squared-alt icon-no-margin"></i>
490 489 ${_ungettext('Expand {} commit', 'Expand {} commits', len(c.commit_ranges)).format(len(c.commit_ranges))}
491 490 % else:
492 491 <i class="icon-minus-squared-alt icon-no-margin"></i>
493 492 ${_ungettext('Collapse {} commit', 'Collapse {} commits', len(c.commit_ranges)).format(len(c.commit_ranges))}
494 493 % endif
495 494 </a>
496 495 </div>
497 496 </div>
498 497
499 498 <div class="pull-right">
500 499 % if c.allowed_to_update and not c.pull_request.is_closed():
501 500
502 501 <div class="btn-group btn-group-actions">
503 502 <a id="update_commits" class="btn btn-primary no-margin" onclick="updateController.updateCommits(this); return false">
504 503 ${_('Update commits')}
505 504 </a>
506 505
507 506 <a id="update_commits_switcher" class="tooltip btn btn-primary" style="margin-left: -1px" data-toggle="dropdown" aria-pressed="false" role="button" title="${_('more update options')}">
508 507 <i class="icon-down"></i>
509 508 </a>
510 509
511 510 <div class="btn-action-switcher-container" id="update-commits-switcher">
512 511 <ul class="btn-action-switcher" role="menu">
513 512 <li>
514 513 <a href="#forceUpdate" onclick="updateController.forceUpdateCommits(this); return false">
515 514 ${_('Force update commits')}
516 515 </a>
517 516 <div class="action-help-block">
518 517 ${_('Update commits and force refresh this pull request.')}
519 518 </div>
520 519 </li>
521 520 </ul>
522 521 </div>
523 522 </div>
524 523
525 524 % else:
526 525 <a class="tooltip btn disabled pull-right" disabled="disabled" title="${_('Update is disabled for current view')}">${_('Update commits')}</a>
527 526 % endif
528 527
529 528 </div>
530 529 % endif
531 530 </div>
532 531
533 532 % if not c.missing_commits:
534 533 % if c.compare_mode:
535 534 % if c.at_version:
536 535 <h4>
537 536 ${_('Commits and changes between v{ver_from} and {ver_to} of this pull request, commenting is disabled').format(ver_from=c.from_version_pos, ver_to=c.at_version_pos if c.at_version_pos else 'latest')}:
538 537 </h4>
539 538
540 539 <div class="subtitle-compare">
541 540 ${_('commits added: {}, removed: {}').format(len(c.commit_changes_summary.added), len(c.commit_changes_summary.removed))}
542 541 </div>
543 542
544 543 <div class="container">
545 544 <table class="rctable compare_view_commits">
546 545 <tr>
547 546 <th></th>
548 547 <th>${_('Time')}</th>
549 548 <th>${_('Author')}</th>
550 549 <th>${_('Commit')}</th>
551 550 <th></th>
552 551 <th>${_('Description')}</th>
553 552 </tr>
554 553
555 554 % for c_type, commit in c.commit_changes:
556 555 % if c_type in ['a', 'r']:
557 556 <%
558 557 if c_type == 'a':
559 558 cc_title = _('Commit added in displayed changes')
560 559 elif c_type == 'r':
561 560 cc_title = _('Commit removed in displayed changes')
562 561 else:
563 562 cc_title = ''
564 563 %>
565 564 <tr id="row-${commit.raw_id}" commit_id="${commit.raw_id}" class="compare_select">
566 565 <td>
567 566 <div class="commit-change-indicator color-${c_type}-border">
568 567 <div class="commit-change-content color-${c_type} tooltip" title="${h.tooltip(cc_title)}">
569 568 ${c_type.upper()}
570 569 </div>
571 570 </div>
572 571 </td>
573 572 <td class="td-time">
574 573 ${h.age_component(commit.date)}
575 574 </td>
576 575 <td class="td-user">
577 576 ${base.gravatar_with_user(commit.author, 16, tooltip=True)}
578 577 </td>
579 578 <td class="td-hash">
580 579 <code>
581 580 <a href="${h.route_path('repo_commit', repo_name=c.target_repo.repo_name, commit_id=commit.raw_id)}">
582 581 r${commit.idx}:${h.short_id(commit.raw_id)}
583 582 </a>
584 583 ${h.hidden('revisions', commit.raw_id)}
585 584 </code>
586 585 </td>
587 586 <td class="td-message expand_commit" data-commit-id="${commit.raw_id}" title="${_( 'Expand commit message')}" onclick="commitsController.expandCommit(this); return false">
588 587 <i class="icon-expand-linked"></i>
589 588 </td>
590 589 <td class="mid td-description">
591 590 <div class="log-container truncate-wrap">
592 591 <div class="message truncate" id="c-${commit.raw_id}" data-message-raw="${commit.message}">${h.urlify_commit_message(commit.message, c.repo_name)}</div>
593 592 </div>
594 593 </td>
595 594 </tr>
596 595 % endif
597 596 % endfor
598 597 </table>
599 598 </div>
600 599
601 600 % endif
602 601
603 602 % else:
604 603 <%include file="/compare/compare_commits.mako" />
605 604 % endif
606 605
607 606 <div class="cs_files">
608 607 <%namespace name="cbdiffs" file="/codeblocks/diffs.mako"/>
609 608 % if c.at_version:
610 609 <% c.inline_cnt = len(c.inline_versions[c.at_version_num]['display']) %>
611 610 <% c.comments = c.comment_versions[c.at_version_num]['display'] %>
612 611 % else:
613 612 <% c.inline_cnt = len(c.inline_versions[c.at_version_num]['until']) %>
614 613 <% c.comments = c.comment_versions[c.at_version_num]['until'] %>
615 614 % endif
616 615
617 616 <%
618 617 pr_menu_data = {
619 618 'outdated_comm_count_ver': outdated_comm_count_ver
620 619 }
621 620 %>
622 621
623 622 ${cbdiffs.render_diffset_menu(c.diffset, range_diff_on=c.range_diff_on)}
624 623
625 624 % if c.range_diff_on:
626 625 % for commit in c.commit_ranges:
627 626 ${cbdiffs.render_diffset(
628 627 c.changes[commit.raw_id],
629 628 commit=commit, use_comments=True,
630 629 collapse_when_files_over=5,
631 630 disable_new_comments=True,
632 631 deleted_files_comments=c.deleted_files_comments,
633 632 inline_comments=c.inline_comments,
634 633 pull_request_menu=pr_menu_data, show_todos=False)}
635 634 % endfor
636 635 % else:
637 636 ${cbdiffs.render_diffset(
638 637 c.diffset, use_comments=True,
639 638 collapse_when_files_over=30,
640 639 disable_new_comments=not c.allowed_to_comment,
641 640 deleted_files_comments=c.deleted_files_comments,
642 641 inline_comments=c.inline_comments,
643 642 pull_request_menu=pr_menu_data, show_todos=False)}
644 643 % endif
645 644
646 645 </div>
647 646 % else:
648 647 ## skipping commits we need to clear the view for missing commits
649 648 <div style="clear:both;"></div>
650 649 % endif
651 650
652 651 </div>
653 652 </div>
654 653
655 654 ## template for inline comment form
656 655 <%namespace name="comment" file="/changeset/changeset_file_comment.mako"/>
657 656
658 657 ## comments heading with count
659 658 <div class="comments-heading">
660 659 <i class="icon-comment"></i>
661 660 ${_('Comments')} ${len(c.comments)}
662 661 </div>
663 662
664 663 ## render general comments
665 664 <div id="comment-tr-show">
666 665 % if general_outdated_comm_count_ver:
667 666 <div class="info-box">
668 667 % if general_outdated_comm_count_ver == 1:
669 668 ${_('there is {num} general comment from older versions').format(num=general_outdated_comm_count_ver)},
670 669 <a href="#show-hidden-comments" onclick="$('.comment-general.comment-outdated').show(); $(this).parent().hide(); return false;">${_('show it')}</a>
671 670 % else:
672 671 ${_('there are {num} general comments from older versions').format(num=general_outdated_comm_count_ver)},
673 672 <a href="#show-hidden-comments" onclick="$('.comment-general.comment-outdated').show(); $(this).parent().hide(); return false;">${_('show them')}</a>
674 673 % endif
675 674 </div>
676 675 % endif
677 676 </div>
678 677
679 678 ${comment.generate_comments(c.comments, include_pull_request=True, is_pull_request=True)}
680 679
681 680 % if not c.pull_request.is_closed():
682 681 ## main comment form and it status
683 682 ${comment.comments(h.route_path('pullrequest_comment_create', repo_name=c.repo_name,
684 683 pull_request_id=c.pull_request.pull_request_id),
685 684 c.pull_request_review_status,
686 685 is_pull_request=True, change_status=c.allowed_to_change_status)}
687 686
688 687 ## merge status, and merge action
689 688 <div class="pull-request-merge">
690 689 <%include file="/pullrequests/pullrequest_merge_checks.mako"/>
691 690 </div>
692 691
693 692 %endif
694 693
695 694 % endif
696 695 </div>
697 696
698 697 <script type="text/javascript">
699 698
700 699 versionController = new VersionController();
701 700 versionController.init();
702 701
703 702 reviewersController = new ReviewersController();
704 703 commitsController = new CommitsController();
705 704
706 705 updateController = new UpdatePrController();
707 706
708 707 $(function () {
709 708
710 709 // custom code mirror
711 710 var codeMirrorInstance = $('#pr-description-input').get(0).MarkupForm.cm;
712 711
713 712 var PRDetails = {
714 713 editButton: $('#open_edit_pullrequest'),
715 714 closeButton: $('#close_edit_pullrequest'),
716 715 deleteButton: $('#delete_pullrequest'),
717 716 viewFields: $('#pr-desc, #pr-title'),
718 717 editFields: $('#pr-desc-edit, #pr-title-edit, .pr-save'),
719 718
720 719 init: function () {
721 720 var that = this;
722 721 this.editButton.on('click', function (e) {
723 722 that.edit();
724 723 });
725 724 this.closeButton.on('click', function (e) {
726 725 that.view();
727 726 });
728 727 },
729 728
730 729 edit: function (event) {
731 730 this.viewFields.hide();
732 731 this.editButton.hide();
733 732 this.deleteButton.hide();
734 733 this.closeButton.show();
735 734 this.editFields.show();
736 735 codeMirrorInstance.refresh();
737 736 },
738 737
739 738 view: function (event) {
740 739 this.editButton.show();
741 740 this.deleteButton.show();
742 741 this.editFields.hide();
743 742 this.closeButton.hide();
744 743 this.viewFields.show();
745 744 }
746 745 };
747 746
748 747 var ReviewersPanel = {
749 748 editButton: $('#open_edit_reviewers'),
750 749 closeButton: $('#close_edit_reviewers'),
751 750 addButton: $('#add_reviewer'),
752 751 removeButtons: $('.reviewer_member_remove,.reviewer_member_mandatory_remove'),
753 752
754 753 init: function () {
755 754 var self = this;
756 755 this.editButton.on('click', function (e) {
757 756 self.edit();
758 757 });
759 758 this.closeButton.on('click', function (e) {
760 759 self.close();
761 760 });
762 761 },
763 762
764 763 edit: function (event) {
765 764 this.editButton.hide();
766 765 this.closeButton.show();
767 766 this.addButton.show();
768 767 this.removeButtons.css('visibility', 'visible');
769 768 // review rules
770 769 reviewersController.loadReviewRules(
771 770 ${c.pull_request.reviewer_data_json | n});
772 771 },
773 772
774 773 close: function (event) {
775 774 this.editButton.show();
776 775 this.closeButton.hide();
777 776 this.addButton.hide();
778 777 this.removeButtons.css('visibility', 'hidden');
779 778 // hide review rules
780 779 reviewersController.hideReviewRules()
781 780 }
782 781 };
783 782
784 783 PRDetails.init();
785 784 ReviewersPanel.init();
786 785
787 786 showOutdated = function (self) {
788 787 $('.comment-inline.comment-outdated').show();
789 788 $('.filediff-outdated').show();
790 789 $('.showOutdatedComments').hide();
791 790 $('.hideOutdatedComments').show();
792 791 };
793 792
794 793 hideOutdated = function (self) {
795 794 $('.comment-inline.comment-outdated').hide();
796 795 $('.filediff-outdated').hide();
797 796 $('.hideOutdatedComments').hide();
798 797 $('.showOutdatedComments').show();
799 798 };
800 799
801 800 refreshMergeChecks = function () {
802 801 var loadUrl = "${request.current_route_path(_query=dict(merge_checks=1))}";
803 802 $('.pull-request-merge').css('opacity', 0.3);
804 803 $('.action-buttons-extra').css('opacity', 0.3);
805 804
806 805 $('.pull-request-merge').load(
807 806 loadUrl, function () {
808 807 $('.pull-request-merge').css('opacity', 1);
809 808
810 809 $('.action-buttons-extra').css('opacity', 1);
811 810 }
812 811 );
813 812 };
814 813
815 814 closePullRequest = function (status) {
816 815 if (!confirm(_gettext('Are you sure to close this pull request without merging?'))) {
817 816 return false;
818 817 }
819 818 // inject closing flag
820 819 $('.action-buttons-extra').append('<input type="hidden" class="close-pr-input" id="close_pull_request" value="1">');
821 820 $(generalCommentForm.statusChange).select2("val", status).trigger('change');
822 821 $(generalCommentForm.submitForm).submit();
823 822 };
824 823
825 824 $('#show-outdated-comments').on('click', function (e) {
826 825 var button = $(this);
827 826 var outdated = $('.comment-outdated');
828 827
829 828 if (button.html() === "(Show)") {
830 829 button.html("(Hide)");
831 830 outdated.show();
832 831 } else {
833 832 button.html("(Show)");
834 833 outdated.hide();
835 834 }
836 835 });
837 836
838 837 $('.show-inline-comments').on('change', function (e) {
839 838 var show = 'none';
840 839 var target = e.currentTarget;
841 840 if (target.checked) {
842 841 show = ''
843 842 }
844 843 var boxid = $(target).attr('id_for');
845 844 var comments = $('#{0} .inline-comments'.format(boxid));
846 845 var fn_display = function (idx) {
847 846 $(this).css('display', show);
848 847 };
849 848 $(comments).each(fn_display);
850 849 var btns = $('#{0} .inline-comments-button'.format(boxid));
851 850 $(btns).each(fn_display);
852 851 });
853 852
854 853 $('#merge_pull_request_form').submit(function () {
855 854 if (!$('#merge_pull_request').attr('disabled')) {
856 855 $('#merge_pull_request').attr('disabled', 'disabled');
857 856 }
858 857 return true;
859 858 });
860 859
861 860 $('#edit_pull_request').on('click', function (e) {
862 861 var title = $('#pr-title-input').val();
863 862 var description = codeMirrorInstance.getValue();
864 863 var renderer = $('#pr-renderer-input').val();
865 864 editPullRequest(
866 865 "${c.repo_name}", "${c.pull_request.pull_request_id}",
867 866 title, description, renderer);
868 867 });
869 868
870 869 $('#update_pull_request').on('click', function (e) {
871 870 $(this).attr('disabled', 'disabled');
872 871 $(this).addClass('disabled');
873 872 $(this).html(_gettext('Saving...'));
874 873 reviewersController.updateReviewers(
875 874 "${c.repo_name}", "${c.pull_request.pull_request_id}");
876 875 });
877 876
878 877
879 878 // fixing issue with caches on firefox
880 879 $('#update_commits').removeAttr("disabled");
881 880
882 881 $('.show-inline-comments').on('click', function (e) {
883 882 var boxid = $(this).attr('data-comment-id');
884 883 var button = $(this);
885 884
886 885 if (button.hasClass("comments-visible")) {
887 886 $('#{0} .inline-comments'.format(boxid)).each(function (index) {
888 887 $(this).hide();
889 888 });
890 889 button.removeClass("comments-visible");
891 890 } else {
892 891 $('#{0} .inline-comments'.format(boxid)).each(function (index) {
893 892 $(this).show();
894 893 });
895 894 button.addClass("comments-visible");
896 895 }
897 896 });
898 897
899 898 // register submit callback on commentForm form to track TODOs
900 899 window.commentFormGlobalSubmitSuccessCallback = function () {
901 900 refreshMergeChecks();
902 901 };
903 902
904 903 ReviewerAutoComplete('#user');
905 904
906 905 })
907 906
908 907 </script>
909 908
910 909 </div>
911 910
912 911 </%def>
General Comments 0
You need to be logged in to leave comments. Login now