##// END OF EJS Templates
fix(ui): fixed issues with hover menus and diff download items....
super-admin -
r5294:5bd3eb1a default
parent child Browse files
Show More
@@ -1,1347 +1,1346 b''
1 1 // Default styles
2 2
3 3 .diff-collapse {
4 4 margin: @padding 0;
5 5 text-align: right;
6 6 }
7 7
8 8 .diff-container {
9 9 margin-bottom: @space;
10 10
11 11 .diffblock {
12 12 margin-bottom: @space;
13 13 }
14 14
15 15 &.hidden {
16 16 display: none;
17 17 overflow: hidden;
18 18 }
19 19 }
20 20
21 21
22 22 div.diffblock .sidebyside {
23 23 background: #ffffff;
24 24 }
25 25
26 26 div.diffblock {
27 27 overflow-x: auto;
28 28 overflow-y: hidden;
29 29 clear: both;
30 30 padding: 0px;
31 31 background: @grey6;
32 32 border: @border-thickness solid @grey5;
33 33 -webkit-border-radius: @border-radius @border-radius 0px 0px;
34 34 border-radius: @border-radius @border-radius 0px 0px;
35 35
36 36
37 37 .comments-number {
38 38 float: right;
39 39 }
40 40
41 41 // BEGIN CODE-HEADER STYLES
42 42
43 43 .code-header {
44 44 background: @grey6;
45 45 padding: 10px 0 10px 0;
46 46 height: auto;
47 47 width: 100%;
48 48
49 49 .hash {
50 50 float: left;
51 51 padding: 2px 0 0 2px;
52 52 }
53 53
54 54 .date {
55 55 float: left;
56 56 text-transform: uppercase;
57 57 padding: 4px 0px 0px 2px;
58 58 }
59 59
60 60 div {
61 61 margin-left: 4px;
62 62 }
63 63
64 64 div.compare_header {
65 65 min-height: 40px;
66 66 margin: 0;
67 67 padding: 0 @padding;
68 68
69 69 .drop-menu {
70 70 float:left;
71 71 display: block;
72 72 margin:0 0 @padding 0;
73 73 }
74 74
75 75 .compare-label {
76 76 float: left;
77 77 clear: both;
78 78 display: inline-block;
79 79 min-width: 5em;
80 80 margin: 0;
81 81 padding: @button-padding @button-padding @button-padding 0;
82 82 font-weight: @text-semibold-weight;
83 83 font-family: @text-semibold;
84 84 }
85 85
86 86 .compare-buttons {
87 87 float: left;
88 88 margin: 0;
89 89 padding: 0 0 @padding;
90 90
91 91 .btn {
92 92 margin: 0 @padding 0 0;
93 93 }
94 94 }
95 95 }
96 96
97 97 }
98 98
99 99 .parents {
100 100 float: left;
101 101 width: 100px;
102 102 font-weight: 400;
103 103 vertical-align: middle;
104 104 padding: 0px 2px 0px 2px;
105 105 background-color: @grey6;
106 106
107 107 #parent_link {
108 108 margin: 00px 2px;
109 109
110 110 &.double {
111 111 margin: 0px 2px;
112 112 }
113 113
114 114 &.disabled{
115 115 margin-right: @padding;
116 116 }
117 117 }
118 118 }
119 119
120 120 .children {
121 121 float: right;
122 122 width: 100px;
123 123 font-weight: 400;
124 124 vertical-align: middle;
125 125 text-align: right;
126 126 padding: 0px 2px 0px 2px;
127 127 background-color: @grey6;
128 128
129 129 #child_link {
130 130 margin: 0px 2px;
131 131
132 132 &.double {
133 133 margin: 0px 2px;
134 134 }
135 135
136 136 &.disabled{
137 137 margin-right: @padding;
138 138 }
139 139 }
140 140 }
141 141
142 142 .changeset_header {
143 143 height: 16px;
144 144
145 145 & > div{
146 146 margin-right: @padding;
147 147 }
148 148 }
149 149
150 150 .changeset_file {
151 151 text-align: left;
152 152 float: left;
153 153 padding: 0;
154 154
155 155 a{
156 156 display: inline-block;
157 157 margin-right: 0.5em;
158 158 }
159 159
160 160 #selected_mode{
161 161 margin-left: 0;
162 162 }
163 163 }
164 164
165 165 .diff-menu-wrapper {
166 166 float: left;
167 167 }
168 168
169 169 .diff-menu {
170 170 position: absolute;
171 171 background: none repeat scroll 0 0 #FFFFFF;
172 172 border-color: #003367 @grey3 @grey3;
173 173 border-right: 1px solid @grey3;
174 174 border-style: solid solid solid;
175 175 border-width: @border-thickness;
176 176 box-shadow: 2px 8px 4px rgba(0, 0, 0, 0.2);
177 177 margin-top: 5px;
178 178 margin-left: 1px;
179 179 }
180 180
181 181 .diff-actions, .editor-actions {
182 182 float: left;
183 183
184 184 input{
185 185 margin: 0 0.5em 0 0;
186 186 }
187 187 }
188 188
189 189 // END CODE-HEADER STYLES
190 190
191 191 // BEGIN CODE-BODY STYLES
192 192
193 193 .code-body {
194 194 padding: 0;
195 195 background-color: #ffffff;
196 196 position: relative;
197 197 max-width: none;
198 198 box-sizing: border-box;
199 199 // TODO: johbo: Parent has overflow: auto, this forces the child here
200 200 // to have the intended size and to scroll. Should be simplified.
201 201 width: 100%;
202 202 overflow-x: auto;
203 203 }
204 204
205 205 pre.raw {
206 206 background: white;
207 207 color: @grey1;
208 208 }
209 209 // END CODE-BODY STYLES
210 210
211 211 }
212 212
213 213
214 214 table.code-difftable {
215 215 border-collapse: collapse;
216 216 width: 99%;
217 217 border-radius: 0px !important;
218 218
219 219 td {
220 220 padding: 0 !important;
221 221 background: none !important;
222 222 border: 0 !important;
223 223 }
224 224
225 225 .context {
226 226 background: none repeat scroll 0 0 #DDE7EF;
227 227 }
228 228
229 229 .add {
230 230 background: none repeat scroll 0 0 #DDFFDD;
231 231
232 232 ins {
233 233 background: none repeat scroll 0 0 #AAFFAA;
234 234 text-decoration: none;
235 235 }
236 236 }
237 237
238 238 .del {
239 239 background: none repeat scroll 0 0 #FFDDDD;
240 240
241 241 del {
242 242 background: none repeat scroll 0 0 #FFAAAA;
243 243 text-decoration: none;
244 244 }
245 245 }
246 246
247 247 /** LINE NUMBERS **/
248 248 .lineno {
249 249 padding-left: 2px !important;
250 250 padding-right: 2px;
251 251 text-align: right;
252 252 width: 32px;
253 253 -moz-user-select: none;
254 254 -webkit-user-select: none;
255 255 border-right: @border-thickness solid @grey5 !important;
256 256 border-left: 0px solid #CCC !important;
257 257 border-top: 0px solid #CCC !important;
258 258 border-bottom: none !important;
259 259
260 260 a {
261 261 &:extend(pre);
262 262 text-align: right;
263 263 padding-right: 2px;
264 264 cursor: pointer;
265 265 display: block;
266 266 width: 32px;
267 267 }
268 268 }
269 269
270 270 .context {
271 271 cursor: auto;
272 272 &:extend(pre);
273 273 }
274 274
275 275 .lineno-inline {
276 276 background: none repeat scroll 0 0 #FFF !important;
277 277 padding-left: 2px;
278 278 padding-right: 2px;
279 279 text-align: right;
280 280 width: 30px;
281 281 -moz-user-select: none;
282 282 -webkit-user-select: none;
283 283 }
284 284
285 285 /** CODE **/
286 286 .code {
287 287 display: block;
288 288 width: 100%;
289 289
290 290 td {
291 291 margin: 0;
292 292 padding: 0;
293 293 }
294 294
295 295 pre {
296 296 margin: 0;
297 297 padding: 0;
298 298 margin-left: .5em;
299 299 }
300 300 }
301 301 }
302 302
303 303
304 304 // Comments
305 305 .comment-selected-hl {
306 306 border-left: 6px solid @comment-highlight-color !important;
307 307 padding-left: 3px !important;
308 308 margin-left: -7px !important;
309 309 }
310 310
311 311 div.comment:target,
312 312 div.comment-outdated:target {
313 313 .comment-selected-hl;
314 314 }
315 315
316 316 //TODO: anderson: can't get an absolute number out of anything, so had to put the
317 317 //current values that might change. But to make it clear I put as a calculation
318 318 @comment-max-width: 1065px;
319 319 @pr-extra-margin: 34px;
320 320 @pr-border-spacing: 4px;
321 321 @pr-comment-width: @comment-max-width - @pr-extra-margin - @pr-border-spacing;
322 322
323 323 // Pull Request
324 324 .cs_files .code-difftable {
325 325 border: @border-thickness solid @grey5; //borders only on PRs
326 326
327 327 .comment-inline-form,
328 328 div.comment {
329 329 width: @pr-comment-width;
330 330 }
331 331 }
332 332
333 333 // Changeset
334 334 .code-difftable {
335 335 .comment-inline-form,
336 336 div.comment {
337 337 width: @comment-max-width;
338 338 }
339 339 }
340 340
341 341 //Style page
342 342 @style-extra-margin: @sidebar-width + (@sidebarpadding * 3) + @padding;
343 343 #style-page .code-difftable{
344 344 .comment-inline-form,
345 345 div.comment {
346 346 width: @comment-max-width - @style-extra-margin;
347 347 }
348 348 }
349 349
350 350 #context-bar > h2 {
351 351 font-size: 20px;
352 352 }
353 353
354 354 #context-bar > h2> a {
355 355 font-size: 20px;
356 356 }
357 357 // end of defaults
358 358
359 359 .file_diff_buttons {
360 360 padding: 0 0 @padding;
361 361
362 362 .drop-menu {
363 363 float: left;
364 364 margin: 0 @padding 0 0;
365 365 }
366 366 .btn {
367 367 margin: 0 @padding 0 0;
368 368 }
369 369 }
370 370
371 371 .code-body.textarea.editor {
372 372 max-width: none;
373 373 padding: 15px;
374 374 }
375 375
376 376 td.injected_diff{
377 377 max-width: 1178px;
378 378 overflow-x: auto;
379 379 overflow-y: hidden;
380 380
381 381 div.diff-container,
382 382 div.diffblock{
383 383 max-width: 100%;
384 384 }
385 385
386 386 div.code-body {
387 387 max-width: 1124px;
388 388 overflow-x: auto;
389 389 overflow-y: hidden;
390 390 padding: 0;
391 391 }
392 392 div.diffblock {
393 393 border: none;
394 394 }
395 395
396 396 &.inline-form {
397 397 width: 99%
398 398 }
399 399 }
400 400
401 401
402 402 table.code-difftable {
403 403 width: 100%;
404 404 }
405 405
406 406 /** PYGMENTS COLORING **/
407 407 div.codeblock {
408 408
409 409 // TODO: johbo: Added interim to get rid of the margin around
410 410 // Select2 widgets. This needs further cleanup.
411 411 overflow: auto;
412 412 padding: 0px;
413 413 border: @border-thickness solid @grey6;
414 414 .border-radius(@border-radius);
415 415
416 416 #remove_gist {
417 417 float: right;
418 418 }
419 419
420 420 .gist_url {
421 421 padding: 0px 0px 35px 0px;
422 422 }
423 423
424 424 .gist-desc {
425 425 clear: both;
426 426 margin: 0 0 10px 0;
427 427 code {
428 428 white-space: pre-line;
429 429 line-height: inherit
430 430 }
431 431 }
432 432
433 433 .author {
434 434 clear: both;
435 435 vertical-align: middle;
436 436 font-weight: @text-bold-weight;
437 437 font-family: @text-bold;
438 438 }
439 439
440 440 .btn-mini {
441 441 float: left;
442 442 margin: 0 5px 0 0;
443 443 }
444 444
445 445 .code-header {
446 446 padding: @padding;
447 447 border-bottom: @border-thickness solid @grey5;
448 448
449 449 .rc-user {
450 450 min-width: 0;
451 451 margin-right: .5em;
452 452 }
453 453
454 454 .stats {
455 455 clear: both;
456 456 margin: 0 0 @padding 0;
457 457 padding: 0;
458 458 .left {
459 459 float: left;
460 460 clear: left;
461 461 max-width: 75%;
462 462 margin: 0 0 @padding 0;
463 463
464 464 &.item {
465 465 margin-right: @padding;
466 466 &.last { border-right: none; }
467 467 }
468 468 }
469 469 .buttons { float: right; }
470 470 .author {
471 471 height: 25px; margin-left: 15px; font-weight: bold;
472 472 }
473 473 }
474 474
475 475 .commit {
476 476 margin: 5px 0 0 26px;
477 477 font-weight: normal;
478 478 white-space: pre-wrap;
479 479 }
480 480 }
481 481
482 482 .message {
483 483 position: relative;
484 484 margin: @padding;
485 485
486 486 .codeblock-label {
487 487 margin: 0 0 1em 0;
488 488 }
489 489 }
490 490
491 491 .code-body {
492 492 padding: 0.8em 1em;
493 493 background-color: #ffffff;
494 494 min-width: 100%;
495 495 box-sizing: border-box;
496 496 // TODO: johbo: Parent has overflow: auto, this forces the child here
497 497 // to have the intended size and to scroll. Should be simplified.
498 498 width: 100%;
499 499 overflow-x: auto;
500 500
501 501 img.rendered-binary {
502 502 height: auto;
503 503 width: auto;
504 504 }
505 505
506 506 .markdown-block {
507 507 padding: 1em 0;
508 508 }
509 509 }
510 510
511 511 .codeblock-header {
512 512 background: @grey7;
513 513 height: 36px;
514 514 }
515 515
516 516 .path {
517 517 border-bottom: 1px solid @grey6;
518 518 padding: .65em 1em;
519 519 height: 18px;
520 520 }
521 521 }
522 522
523 523 .code-highlighttable,
524 524 div.codeblock {
525 525
526 526 &.readme {
527 527 background-color: white;
528 528 }
529 529
530 530 .markdown-block table {
531 531 border-collapse: collapse;
532 532
533 533 th,
534 534 td {
535 535 padding: .5em;
536 536 border: @border-thickness solid @border-default-color;
537 537 }
538 538 }
539 539
540 540 table {
541 541 border: 0px;
542 542 margin: 0;
543 543 letter-spacing: normal;
544 544
545 545
546 546 td {
547 547 border: 0px;
548 548 vertical-align: top;
549 549 }
550 550 }
551 551 }
552 552
553 553 div.codeblock .code-header .search-path { padding: 0 0 0 10px; }
554 554 div.search-code-body {
555 555 background-color: #ffffff; padding: 5px 0 5px 10px;
556 556 pre {
557 557 .match { background-color: #faffa6;}
558 558 .break { display: block; width: 100%; background-color: #DDE7EF; color: #747474; }
559 559 }
560 560 .code-highlighttable {
561 561 border-collapse: collapse;
562 562
563 563 tr:hover {
564 564 background: #fafafa;
565 565 }
566 566 td.code {
567 567 padding-left: 10px;
568 568 }
569 569 td.line {
570 570 border-right: 1px solid #ccc !important;
571 571 padding-right: 10px;
572 572 text-align: right;
573 573 font-family: @text-monospace;
574 574 span {
575 575 white-space: pre-wrap;
576 576 color: #666666;
577 577 }
578 578 }
579 579 }
580 580 }
581 581
582 582 div.annotatediv { margin-left: 2px; margin-right: 4px; }
583 583 .code-highlight {
584 584 margin: 0; padding: 0; border-left: @border-thickness solid @grey5;
585 585 pre, .linenodiv pre { padding: 0 5px; margin: 0; }
586 586 pre div:target {background-color: @comment-highlight-color !important;}
587 587 }
588 588
589 589 .linenos a { text-decoration: none; }
590 590
591 591 .CodeMirror-selected { background: @rchighlightblue; }
592 592 .CodeMirror-focused .CodeMirror-selected { background: @rchighlightblue; }
593 593 .CodeMirror ::selection { background: @rchighlightblue; }
594 594 .CodeMirror ::-moz-selection { background: @rchighlightblue; }
595 595
596 596 .code { display: block; border:0px !important; }
597 597
598 598 .code-highlight, /* TODO: dan: merge codehilite into code-highlight */
599 599 .codehilite {
600 600 /*ElasticMatch is custom RhodeCode TAG*/
601 601
602 602 .c-ElasticMatch {
603 603 background-color: #faffa6;
604 604 padding: 0.2em;
605 605 }
606 606 }
607 607
608 608 /* This can be generated with `pygmentize -S default -f html` */
609 609 .code-highlight,
610 610 .codehilite {
611 611 /*ElasticMatch is custom RhodeCode TAG*/
612 612 .c-ElasticMatch { background-color: #faffa6; padding: 0.2em;}
613 613 .hll { background-color: #ffffcc }
614 614 .c { color: #408080; font-style: italic } /* Comment */
615 615 .err, .codehilite .err { border: none } /* Error */
616 616 .k { color: #008000; font-weight: bold } /* Keyword */
617 617 .o { color: #666666 } /* Operator */
618 618 .ch { color: #408080; font-style: italic } /* Comment.Hashbang */
619 619 .cm { color: #408080; font-style: italic } /* Comment.Multiline */
620 620 .cp { color: #BC7A00 } /* Comment.Preproc */
621 621 .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
622 622 .c1 { color: #408080; font-style: italic } /* Comment.Single */
623 623 .cs { color: #408080; font-style: italic } /* Comment.Special */
624 624 .gd { color: #A00000 } /* Generic.Deleted */
625 625 .ge { font-style: italic } /* Generic.Emph */
626 626 .gr { color: #FF0000 } /* Generic.Error */
627 627 .gh { color: #000080; font-weight: bold } /* Generic.Heading */
628 628 .gi { color: #00A000 } /* Generic.Inserted */
629 629 .go { color: #888888 } /* Generic.Output */
630 630 .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
631 631 .gs { font-weight: bold } /* Generic.Strong */
632 632 .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
633 633 .gt { color: #0044DD } /* Generic.Traceback */
634 634 .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
635 635 .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
636 636 .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
637 637 .kp { color: #008000 } /* Keyword.Pseudo */
638 638 .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
639 639 .kt { color: #B00040 } /* Keyword.Type */
640 640 .m { color: #666666 } /* Literal.Number */
641 641 .s { color: #BA2121 } /* Literal.String */
642 642 .na { color: #7D9029 } /* Name.Attribute */
643 643 .nb { color: #008000 } /* Name.Builtin */
644 644 .nc { color: #0000FF; font-weight: bold } /* Name.Class */
645 645 .no { color: #880000 } /* Name.Constant */
646 646 .nd { color: #AA22FF } /* Name.Decorator */
647 647 .ni { color: #999999; font-weight: bold } /* Name.Entity */
648 648 .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
649 649 .nf { color: #0000FF } /* Name.Function */
650 650 .nl { color: #A0A000 } /* Name.Label */
651 651 .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
652 652 .nt { color: #008000; font-weight: bold } /* Name.Tag */
653 653 .nv { color: #19177C } /* Name.Variable */
654 654 .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
655 655 .w { color: #bbbbbb } /* Text.Whitespace */
656 656 .mb { color: #666666 } /* Literal.Number.Bin */
657 657 .mf { color: #666666 } /* Literal.Number.Float */
658 658 .mh { color: #666666 } /* Literal.Number.Hex */
659 659 .mi { color: #666666 } /* Literal.Number.Integer */
660 660 .mo { color: #666666 } /* Literal.Number.Oct */
661 661 .sa { color: #BA2121 } /* Literal.String.Affix */
662 662 .sb { color: #BA2121 } /* Literal.String.Backtick */
663 663 .sc { color: #BA2121 } /* Literal.String.Char */
664 664 .dl { color: #BA2121 } /* Literal.String.Delimiter */
665 665 .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
666 666 .s2 { color: #BA2121 } /* Literal.String.Double */
667 667 .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
668 668 .sh { color: #BA2121 } /* Literal.String.Heredoc */
669 669 .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
670 670 .sx { color: #008000 } /* Literal.String.Other */
671 671 .sr { color: #BB6688 } /* Literal.String.Regex */
672 672 .s1 { color: #BA2121 } /* Literal.String.Single */
673 673 .ss { color: #19177C } /* Literal.String.Symbol */
674 674 .bp { color: #008000 } /* Name.Builtin.Pseudo */
675 675 .fm { color: #0000FF } /* Name.Function.Magic */
676 676 .vc { color: #19177C } /* Name.Variable.Class */
677 677 .vg { color: #19177C } /* Name.Variable.Global */
678 678 .vi { color: #19177C } /* Name.Variable.Instance */
679 679 .vm { color: #19177C } /* Name.Variable.Magic */
680 680 .il { color: #666666 } /* Literal.Number.Integer.Long */
681 681
682 682 }
683 683
684 684 /* customized pre blocks for markdown/rst */
685 685 pre.literal-block, .codehilite pre{
686 686 padding: @padding;
687 687 border: 1px solid @grey6;
688 688 .border-radius(@border-radius);
689 689 background-color: @grey7;
690 690 }
691 691
692 692
693 693 /* START NEW CODE BLOCK CSS */
694 694
695 695 @cb-line-height: 18px;
696 696 @cb-line-code-padding: 10px;
697 697 @cb-text-padding: 5px;
698 698
699 699 @pill-padding: 2px 7px;
700 700 @pill-padding-small: 2px 2px 1px 2px;
701 701
702 702 input.filediff-collapse-state {
703 703 display: none;
704 704
705 705 &:checked + .filediff { /* file diff is collapsed */
706 706 .cb {
707 707 display: none
708 708 }
709 709 .filediff-collapse-indicator {
710 710 float: left;
711 711 cursor: pointer;
712 712 margin: 1px -5px;
713 713 }
714 714 .filediff-collapse-indicator:before {
715 715 content: '\f105';
716 716 }
717 717
718 718 .filediff-menu {
719 719 display: none;
720 720 }
721 721
722 722 }
723 723
724 724 &+ .filediff { /* file diff is expanded */
725 725
726 726 .filediff-collapse-indicator {
727 727 float: left;
728 728 cursor: pointer;
729 729 margin: 1px -5px;
730 730 }
731 731 .filediff-collapse-indicator:before {
732 732 content: '\f107';
733 733 }
734 734
735 735 .filediff-menu {
736 736 display: block;
737 737 }
738 738
739 739 margin: 10px 0;
740 740 &:nth-child(2) {
741 741 margin: 0;
742 742 }
743 743 }
744 744 }
745 745
746 746 .filediffs .anchor {
747 747 display: block;
748 748 height: 40px;
749 749 margin-top: -40px;
750 750 visibility: hidden;
751 751 }
752 752
753 753 .filediffs .anchor:nth-of-type(1) {
754 754 display: block;
755 755 height: 80px;
756 756 margin-top: -80px;
757 757 visibility: hidden;
758 758 }
759 759
760 760 .cs_files {
761 761 clear: both;
762 762 }
763 763
764 764 #diff-file-sticky{
765 765 will-change: min-height;
766 766 height: 80px;
767 767 }
768 768
769 769 .sidebar__inner{
770 770 transform: translate(0, 0); /* For browsers don't support translate3d. */
771 771 transform: translate3d(0, 0, 0);
772 772 will-change: position, transform;
773 773 height: 65px;
774 774 background-color: #fff;
775 775 padding: 5px 0px;
776 776 }
777 777
778 778 .sidebar__bar {
779 779 padding: 5px 0px 0px 0px
780 780 }
781 781
782 782 .fpath-placeholder {
783 783 clear: both;
784 784 visibility: hidden
785 785 }
786 786
787 787 .is-affixed {
788 788
789 789 .sidebar__inner {
790 790 z-index: 30;
791 791 }
792 792
793 793 .sidebar_inner_shadow {
794 794 position: fixed;
795 795 top: 75px;
796 796 right: -100%;
797 797 left: -100%;
798 798 z-index: 30;
799 799 display: block;
800 800 height: 5px;
801 801 content: "";
802 802 background: linear-gradient(rgba(0, 0, 0, 0.075), rgba(0, 0, 0, 0.001)) repeat-x 0 0;
803 803 border-top: 1px solid rgba(0, 0, 0, 0.15);
804 804 }
805 805
806 806 .fpath-placeholder {
807 807 visibility: visible !important;
808 808 }
809 809 }
810 810
811 811 .diffset-menu {
812 812
813 813 }
814 814
815 815 #todo-box {
816 816 clear:both;
817 817 display: none;
818 818 text-align: right
819 819 }
820 820
821 821 .diffset {
822 822 margin: 0px auto;
823 823 .diffset-heading {
824 824 border: 1px solid @grey5;
825 825 margin-bottom: -1px;
826 826 // margin-top: 20px;
827 827 h2 {
828 828 margin: 0;
829 829 line-height: 38px;
830 830 padding-left: 10px;
831 831 }
832 832 .btn {
833 833 margin: 0;
834 834 }
835 835 background: @grey6;
836 836 display: block;
837 837 padding: 5px;
838 838 }
839 839 .diffset-heading-warning {
840 840 background: @alert3-inner;
841 841 border: 1px solid @alert3;
842 842 }
843 843 &.diffset-comments-disabled {
844 844 .cb-comment-box-opener, .comment-inline-form, .cb-comment-add-button {
845 845 display: none !important;
846 846 }
847 847 }
848 848 }
849 849
850 850 .filelist {
851 851 .pill {
852 852 display: block;
853 853 float: left;
854 854 padding: @pill-padding-small;
855 855 }
856 856 }
857 857
858 858 .pill {
859 859 display: block;
860 860 float: left;
861 861 padding: @pill-padding;
862 862 }
863 863
864 864 .pill-group {
865 865 .pill {
866 opacity: .8;
867 866 margin-right: 3px;
868 867 font-size: 12px;
869 868 font-weight: normal;
870 869 min-width: 30px;
871 870 text-align: center;
872 871
873 872 &:first-child {
874 873 border-radius: @border-radius 0 0 @border-radius;
875 874 }
876 875 &:last-child {
877 876 border-radius: 0 @border-radius @border-radius 0;
878 877 }
879 878 &:only-child {
880 879 border-radius: @border-radius;
881 880 margin-right: 0;
882 881 }
883 882 }
884 883 }
885 884
886 885 /* Main comments*/
887 886 #comments {
888 887 .comment-selected {
889 888 border-left: 6px solid @comment-highlight-color;
890 889 padding-left: 3px;
891 890 margin-left: -9px;
892 891 }
893 892 }
894 893
895 894 .filediff {
896 895 border: 1px solid @grey5;
897 896
898 897 /* START OVERRIDES */
899 898 .code-highlight {
900 899 border: none; // TODO: remove this border from the global
901 900 // .code-highlight, it doesn't belong there
902 901 }
903 902 label {
904 903 margin: 0; // TODO: remove this margin definition from global label
905 904 // it doesn't belong there - if margin on labels
906 905 // are needed for a form they should be defined
907 906 // in the form's class
908 907 }
909 908 /* END OVERRIDES */
910 909
911 910 * {
912 911 box-sizing: border-box;
913 912 }
914 913
915 914 .on-hover-icon {
916 915 visibility: hidden;
917 916 }
918 917
919 918 .filediff-anchor {
920 919 visibility: hidden;
921 920 }
922 921 &:hover {
923 922 .filediff-anchor {
924 923 visibility: visible;
925 924 }
926 925 .on-hover-icon {
927 926 visibility: visible;
928 927 }
929 928 }
930 929
931 930 .filediff-heading {
932 931 cursor: pointer;
933 932 display: block;
934 933 padding: 10px 10px;
935 934 }
936 935 .filediff-heading:after {
937 936 content: "";
938 937 display: table;
939 938 clear: both;
940 939 }
941 940 .filediff-heading:hover {
942 941 background: #e1e9f4 !important;
943 942 }
944 943
945 944 .filediff-menu {
946 945 text-align: right;
947 946 padding: 5px 5px 5px 0px;
948 947 background: @grey7;
949 948
950 949 &> a,
951 950 &> span {
952 951 padding: 1px;
953 952 }
954 953 }
955 954
956 955 .filediff-collapse-button, .filediff-expand-button {
957 956 cursor: pointer;
958 957 }
959 958 .filediff-collapse-button {
960 959 display: inline;
961 960 }
962 961 .filediff-expand-button {
963 962 display: none;
964 963 }
965 964 .filediff-collapsed .filediff-collapse-button {
966 965 display: none;
967 966 }
968 967 .filediff-collapsed .filediff-expand-button {
969 968 display: inline;
970 969 }
971 970
972 971 /**** COMMENTS ****/
973 972
974 973 .filediff-menu {
975 974 .show-comment-button {
976 975 display: none;
977 976 }
978 977 }
979 978 &.hide-comments {
980 979 .inline-comments {
981 980 display: none;
982 981 }
983 982 .filediff-menu {
984 983 .show-comment-button {
985 984 display: inline;
986 985 }
987 986 .hide-comment-button {
988 987 display: none;
989 988 }
990 989 }
991 990 }
992 991
993 992 .hide-line-comments {
994 993 .inline-comments {
995 994 display: none;
996 995 }
997 996 }
998 997
999 998 /**** END COMMENTS ****/
1000 999
1001 1000
1002 1001 .nav-chunk {
1003 1002 position: absolute;
1004 1003 right: 20px;
1005 1004 margin-top: -15px;
1006 1005 }
1007 1006
1008 1007 .nav-chunk.selected {
1009 1008 visibility: visible !important;
1010 1009 }
1011 1010
1012 1011 #diff_nav {
1013 1012 color: @grey3;
1014 1013 }
1015 1014
1016 1015 }
1017 1016
1018 1017
1019 1018 .op-added {
1020 1019 color: @alert1;
1021 1020 }
1022 1021
1023 1022 .op-deleted {
1024 1023 color: @alert2;
1025 1024 }
1026 1025
1027 1026 .filediff, .filelist {
1028 1027
1029 1028 .pill {
1030 1029 &[op="name"] {
1031 1030 background: none;
1032 1031 opacity: 1;
1033 1032 color: white;
1034 1033 }
1035 1034 &[op="limited"] {
1036 1035 background: @grey2;
1037 1036 color: white;
1038 1037 }
1039 1038 &[op="binary"] {
1040 1039 background: @color7;
1041 1040 color: white;
1042 1041 }
1043 1042 &[op="modified"] {
1044 1043 background: @alert1;
1045 1044 color: white;
1046 1045 }
1047 1046 &[op="renamed"] {
1048 1047 background: @color4;
1049 1048 color: white;
1050 1049 }
1051 1050 &[op="copied"] {
1052 1051 background: @color4;
1053 1052 color: white;
1054 1053 }
1055 1054 &[op="mode"] {
1056 1055 background: @grey3;
1057 1056 color: white;
1058 1057 }
1059 1058 &[op="symlink"] {
1060 1059 background: @color8;
1061 1060 color: white;
1062 1061 }
1063 1062
1064 1063 &[op="added"] { /* added lines */
1065 1064 background: @alert1;
1066 1065 color: white;
1067 1066 }
1068 1067 &[op="deleted"] { /* deleted lines */
1069 1068 background: @alert2;
1070 1069 color: white;
1071 1070 }
1072 1071
1073 1072 &[op="created"] { /* created file */
1074 1073 background: @alert1;
1075 1074 color: white;
1076 1075 }
1077 1076 &[op="removed"] { /* deleted file */
1078 1077 background: @color5;
1079 1078 color: white;
1080 1079 }
1081 1080
1082 1081 &[op="comments"] { /* comments on file */
1083 1082 background: @grey4;
1084 1083 color: white;
1085 1084 }
1086 1085
1087 1086 &[op="options"] { /* context menu */
1088 1087 background: @grey6;
1089 1088 color: black;
1090 1089 }
1091 1090 }
1092 1091 }
1093 1092
1094 1093
1095 1094 .filediff-outdated {
1096 1095 padding: 8px 0;
1097 1096
1098 1097 .filediff-heading {
1099 1098 opacity: .5;
1100 1099 }
1101 1100 }
1102 1101
1103 1102 table.cb {
1104 1103 width: 100%;
1105 1104 border-collapse: collapse;
1106 1105
1107 1106 .cb-text {
1108 1107 padding: @cb-text-padding;
1109 1108 }
1110 1109 .cb-hunk {
1111 1110 padding: @cb-text-padding;
1112 1111 }
1113 1112 .cb-expand {
1114 1113 display: none;
1115 1114 }
1116 1115 .cb-collapse {
1117 1116 display: inline;
1118 1117 }
1119 1118 &.cb-collapsed {
1120 1119 .cb-line {
1121 1120 display: none;
1122 1121 }
1123 1122 .cb-expand {
1124 1123 display: inline;
1125 1124 }
1126 1125 .cb-collapse {
1127 1126 display: none;
1128 1127 }
1129 1128 .cb-hunk {
1130 1129 display: none;
1131 1130 }
1132 1131 }
1133 1132
1134 1133 /* intentionally general selector since .cb-line-selected must override it
1135 1134 and they both use !important since the td itself may have a random color
1136 1135 generated by annotation blocks. TLDR: if you change it, make sure
1137 1136 annotated block selection and line selection in file view still work */
1138 1137 .cb-line-fresh .cb-content {
1139 1138 background: white !important;
1140 1139 }
1141 1140 .cb-warning {
1142 1141 background: #fff4dd;
1143 1142 }
1144 1143
1145 1144 &.cb-diff-sideside {
1146 1145 td {
1147 1146 &.cb-content {
1148 1147 width: 50%;
1149 1148 }
1150 1149 }
1151 1150 }
1152 1151
1153 1152 tr {
1154 1153 &.cb-annotate {
1155 1154 border-top: 1px solid #eee;
1156 1155 }
1157 1156
1158 1157 &.cb-comment-info {
1159 1158 border-top: 1px solid #eee;
1160 1159 color: rgba(0, 0, 0, 0.3);
1161 1160 background: #edf2f9;
1162 1161
1163 1162 td {
1164 1163
1165 1164 }
1166 1165 }
1167 1166
1168 1167 &.cb-hunk {
1169 1168 font-family: @text-monospace;
1170 1169 color: rgba(0, 0, 0, 0.3);
1171 1170
1172 1171 td {
1173 1172 &:first-child {
1174 1173 background: #edf2f9;
1175 1174 }
1176 1175 &:last-child {
1177 1176 background: #f4f7fb;
1178 1177 }
1179 1178 }
1180 1179 }
1181 1180 }
1182 1181
1183 1182
1184 1183 td {
1185 1184 vertical-align: top;
1186 1185 padding: 0;
1187 1186
1188 1187 &.cb-content {
1189 1188 font-size: 12.35px;
1190 1189
1191 1190 &.cb-line-selected .cb-code {
1192 1191 background: @comment-highlight-color !important;
1193 1192 }
1194 1193
1195 1194 span.cb-code {
1196 1195 line-height: @cb-line-height;
1197 1196 padding-left: @cb-line-code-padding;
1198 1197 padding-right: @cb-line-code-padding;
1199 1198 display: block;
1200 1199 white-space: pre-wrap;
1201 1200 font-family: @text-monospace;
1202 1201 word-break: break-all;
1203 1202 .nonl {
1204 1203 color: @color5;
1205 1204 }
1206 1205 .cb-action {
1207 1206 &:before {
1208 1207 content: " ";
1209 1208 }
1210 1209 &.cb-deletion:before {
1211 1210 content: "- ";
1212 1211 }
1213 1212 &.cb-addition:before {
1214 1213 content: "+ ";
1215 1214 }
1216 1215 }
1217 1216 }
1218 1217
1219 1218 &> button.cb-comment-box-opener {
1220 1219
1221 1220 padding: 2px 2px 1px 3px;
1222 1221 margin-left: -6px;
1223 1222 margin-top: -1px;
1224 1223
1225 1224 border-radius: @border-radius;
1226 1225 position: absolute;
1227 1226 display: none;
1228 1227 }
1229 1228 .cb-comment {
1230 1229 margin-top: 10px;
1231 1230 white-space: normal;
1232 1231 }
1233 1232 }
1234 1233 &:hover {
1235 1234 button.cb-comment-box-opener {
1236 1235 display: block;
1237 1236 }
1238 1237 &+ td button.cb-comment-box-opener {
1239 1238 display: block
1240 1239 }
1241 1240 }
1242 1241
1243 1242 &.cb-data {
1244 1243 text-align: right;
1245 1244 width: 30px;
1246 1245 font-family: @text-monospace;
1247 1246
1248 1247 .icon-comment {
1249 1248 cursor: pointer;
1250 1249 }
1251 1250 &.cb-line-selected {
1252 1251 background: @comment-highlight-color !important;
1253 1252 }
1254 1253 &.cb-line-selected > div {
1255 1254 display: block;
1256 1255 background: @comment-highlight-color !important;
1257 1256 line-height: @cb-line-height;
1258 1257 color: rgba(0, 0, 0, 0.3);
1259 1258 }
1260 1259 }
1261 1260
1262 1261 &.cb-lineno {
1263 1262 padding: 0;
1264 1263 width: 50px;
1265 1264 color: rgba(0, 0, 0, 0.3);
1266 1265 text-align: right;
1267 1266 border-right: 1px solid #eee;
1268 1267 font-family: @text-monospace;
1269 1268 -webkit-user-select: none;
1270 1269 -moz-user-select: none;
1271 1270 user-select: none;
1272 1271
1273 1272 a::before {
1274 1273 content: attr(data-line-no);
1275 1274 }
1276 1275 &.cb-line-selected {
1277 1276 background: @comment-highlight-color !important;
1278 1277 }
1279 1278
1280 1279 a {
1281 1280 display: block;
1282 1281 padding-right: @cb-line-code-padding;
1283 1282 padding-left: @cb-line-code-padding;
1284 1283 line-height: @cb-line-height;
1285 1284 color: rgba(0, 0, 0, 0.3);
1286 1285 }
1287 1286 }
1288 1287
1289 1288 &.cb-empty {
1290 1289 background: @grey7;
1291 1290 }
1292 1291
1293 1292 ins {
1294 1293 color: black;
1295 1294 background: #a6f3a6;
1296 1295 text-decoration: none;
1297 1296 }
1298 1297 del {
1299 1298 color: black;
1300 1299 background: #f8cbcb;
1301 1300 text-decoration: none;
1302 1301 }
1303 1302 &.cb-addition {
1304 1303 background: #ecffec;
1305 1304
1306 1305 &.blob-lineno {
1307 1306 background: #ddffdd;
1308 1307 }
1309 1308 }
1310 1309 &.cb-deletion {
1311 1310 background: #ffecec;
1312 1311
1313 1312 &.blob-lineno {
1314 1313 background: #ffdddd;
1315 1314 }
1316 1315 }
1317 1316 &.cb-annotate-message-spacer {
1318 1317 width:8px;
1319 1318 padding: 1px 0px 0px 3px;
1320 1319 }
1321 1320 &.cb-annotate-info {
1322 1321 width: 320px;
1323 1322 min-width: 320px;
1324 1323 max-width: 320px;
1325 1324 padding: 5px 2px;
1326 1325 font-size: 13px;
1327 1326
1328 1327 .cb-annotate-message {
1329 1328 padding: 2px 0px 0px 0px;
1330 1329 white-space: pre-line;
1331 1330 overflow: hidden;
1332 1331 }
1333 1332 .rc-user {
1334 1333 float: none;
1335 1334 padding: 0 6px 0 17px;
1336 1335 min-width: unset;
1337 1336 min-height: unset;
1338 1337 }
1339 1338 }
1340 1339
1341 1340 &.cb-annotate-revision {
1342 1341 cursor: pointer;
1343 1342 text-align: right;
1344 1343 padding: 1px 3px 0px 3px;
1345 1344 }
1346 1345 }
1347 1346 }
@@ -1,3238 +1,3258 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 @import 'sweetalert2';
31 31
32 32
33 33 //--- BASE ------------------//
34 34 .noscript-error {
35 35 top: 0;
36 36 left: 0;
37 37 width: 100%;
38 38 z-index: 101;
39 39 text-align: center;
40 40 font-size: 120%;
41 41 color: white;
42 42 background-color: @alert2;
43 43 padding: 5px 0 5px 0;
44 44 font-weight: @text-semibold-weight;
45 45 font-family: @text-semibold;
46 46 }
47 47
48 48 html {
49 49 display: table;
50 50 height: 100%;
51 51 width: 100%;
52 52 }
53 53
54 54 body {
55 55 display: table-cell;
56 56 width: 100%;
57 57 }
58 58
59 59 //--- LAYOUT ------------------//
60 60
61 61 .hidden{
62 62 display: none !important;
63 63 }
64 64
65 65 .box{
66 66 float: left;
67 67 width: 100%;
68 68 }
69 69
70 70 .browser-header {
71 71 clear: both;
72 72 }
73 73 .main {
74 74 clear: both;
75 75 padding:0 0 @pagepadding;
76 76 height: auto;
77 77
78 78 &:after { //clearfix
79 79 content:"";
80 80 clear:both;
81 81 width:100%;
82 82 display:block;
83 83 }
84 84 }
85 85
86 86 .flex-container {
87 87 display: flex;
88 88 justify-content: space-between;
89 89 }
90 90
91 91 .action-link{
92 92 margin-left: @padding;
93 93 padding-left: @padding;
94 94 border-left: @border-thickness solid @border-default-color;
95 95 }
96 96
97 97 .cursor-pointer {
98 98 cursor: pointer;
99 99 }
100 100
101 101 input + .action-link, .action-link.first{
102 102 border-left: none;
103 103 }
104 104
105 105 .link-disabled {
106 106 color: @grey4;
107 107 cursor: default;
108 108 }
109 109
110 110 .action-link.last{
111 111 margin-right: @padding;
112 112 padding-right: @padding;
113 113 }
114 114
115 115 .action-link.active,
116 116 .action-link.active a{
117 117 color: @grey4;
118 118 }
119 119
120 120 .action-link.disabled {
121 121 color: @grey4;
122 122 cursor: inherit;
123 123 }
124 124
125 125 .grey-link-action {
126 126 cursor: pointer;
127 127 &:hover {
128 128 color: @grey2;
129 129 }
130 130 color: @grey4;
131 131 }
132 132
133 133 .clipboard-action {
134 134 cursor: pointer;
135 135 margin-left: 5px;
136 136
137 137 &:not(.no-grey) {
138 138
139 139 &:hover {
140 140 color: @grey2;
141 141 }
142 142 color: @grey4;
143 143 }
144 144 }
145 145
146 146 ul.simple-list{
147 147 list-style: none;
148 148 margin: 0;
149 149 padding: 0;
150 150 }
151 151
152 152 .main-content {
153 153 padding-bottom: @pagepadding;
154 154 }
155 155
156 156 .wide-mode-wrapper {
157 157 max-width:4000px !important;
158 158 }
159 159
160 160 .wrapper {
161 161 position: relative;
162 162 max-width: @wrapper-maxwidth;
163 163 margin: 0 auto;
164 164 }
165 165
166 166 #content {
167 167 clear: both;
168 168 padding: 0 @contentpadding;
169 169 }
170 170
171 171 .advanced-settings-fields{
172 172 input{
173 173 margin-left: @textmargin;
174 174 margin-right: @padding/2;
175 175 }
176 176 }
177 177
178 178 .cs_files_title {
179 179 margin: @pagepadding 0 0;
180 180 }
181 181
182 182 input.inline[type="file"] {
183 183 display: inline;
184 184 }
185 185
186 186 .error_page {
187 187 margin: 10% auto;
188 188
189 189 h1 {
190 190 color: @grey2;
191 191 }
192 192
193 193 .alert {
194 194 margin: @padding 0;
195 195 }
196 196
197 197 .error-branding {
198 198 color: @grey4;
199 199 font-weight: @text-semibold-weight;
200 200 font-family: @text-semibold;
201 201 }
202 202
203 203 .error_message {
204 204 font-family: @text-regular;
205 205 }
206 206
207 207 .sidebar {
208 208 min-height: 275px;
209 209 margin: 0;
210 210 padding: 0 0 @sidebarpadding @sidebarpadding;
211 211 border: none;
212 212 }
213 213
214 214 .main-content {
215 215 position: relative;
216 216 margin: 0 @sidebarpadding @sidebarpadding;
217 217 padding: 0 0 0 @sidebarpadding;
218 218 border-left: @border-thickness solid @grey5;
219 219
220 220 @media (max-width:767px) {
221 221 clear: both;
222 222 width: 100%;
223 223 margin: 0;
224 224 border: none;
225 225 }
226 226 }
227 227
228 228 .inner-column {
229 229 float: left;
230 230 width: 29.75%;
231 231 min-height: 150px;
232 232 margin: @sidebarpadding 2% 0 0;
233 233 padding: 0 2% 0 0;
234 234 border-right: @border-thickness solid @grey5;
235 235
236 236 @media (max-width:767px) {
237 237 clear: both;
238 238 width: 100%;
239 239 border: none;
240 240 }
241 241
242 242 ul {
243 243 padding-left: 1.25em;
244 244 }
245 245
246 246 &:last-child {
247 247 margin: @sidebarpadding 0 0;
248 248 border: none;
249 249 }
250 250
251 251 h4 {
252 252 margin: 0 0 @padding;
253 253 font-weight: @text-semibold-weight;
254 254 font-family: @text-semibold;
255 255 }
256 256 }
257 257 }
258 258 .error-page-logo {
259 259 width: 130px;
260 260 height: 160px;
261 261 }
262 262
263 263 // HEADER
264 264 .header {
265 265
266 266 min-height: 49px;
267 267 min-width: 1024px;
268 268
269 269 position: relative;
270 270 vertical-align: bottom;
271 271 padding: 0 @header-padding;
272 272 background-color: @grey1;
273 273 color: @grey5;
274 274
275 275 .title {
276 276 overflow: visible;
277 277 }
278 278
279 279 &:before,
280 280 &:after {
281 281 content: "";
282 282 clear: both;
283 283 width: 100%;
284 284 }
285 285
286 286 // TODO: johbo: Avoids breaking "Repositories" chooser
287 287 .select2-container .select2-choice .select2-arrow {
288 288 display: none;
289 289 }
290 290 }
291 291
292 292 #header-inner {
293 293 &.title {
294 294 margin: 0;
295 295 }
296 296 &:before,
297 297 &:after {
298 298 content: "";
299 299 clear: both;
300 300 }
301 301 }
302 302
303 303 // Gists
304 304 #files_data {
305 305 clear: both; //for firefox
306 306 padding-top: 10px;
307 307 }
308 308
309 309 #gistid {
310 310 margin-right: @padding;
311 311 }
312 312
313 313 // Global Settings Editor
314 314 .textarea.editor {
315 315 float: left;
316 316 position: relative;
317 317 max-width: @texteditor-width;
318 318
319 319 select {
320 320 position: absolute;
321 321 top:10px;
322 322 right:0;
323 323 }
324 324
325 325 .CodeMirror {
326 326 margin: 0;
327 327 }
328 328
329 329 .help-block {
330 330 margin: 0 0 @padding;
331 331 padding:.5em;
332 332 background-color: @grey6;
333 333 &.pre-formatting {
334 334 white-space: pre;
335 335 }
336 336 }
337 337 }
338 338
339 339 ul.auth_plugins {
340 340 margin: @padding 0 @padding @legend-width;
341 341 padding: 0;
342 342
343 343 li {
344 344 margin-bottom: @padding;
345 345 line-height: 1em;
346 346 list-style-type: none;
347 347
348 348 .auth_buttons .btn {
349 349 margin-right: @padding;
350 350 }
351 351
352 352 }
353 353 }
354 354
355 355
356 356 // My Account PR list
357 357
358 358 #show_closed {
359 359 margin: 0 1em 0 0;
360 360 }
361 361
362 362 #pull_request_list_table {
363 363 .closed {
364 364 background-color: @grey6;
365 365 }
366 366
367 367 .state-creating,
368 368 .state-updating,
369 369 .state-merging
370 370 {
371 371 background-color: @grey6;
372 372 }
373 373
374 374 .log-container .truncate {
375 375 height: 2.75em;
376 376 white-space: pre-line;
377 377 }
378 378 table.rctable .user {
379 379 padding-left: 0;
380 380 }
381 381 .td-status {
382 382 padding: 0 0px 0px 10px;
383 383 width: 15px;
384 384 }
385 385 table.rctable {
386 386 td.td-description,
387 387 .rc-user {
388 388 min-width: auto;
389 389 }
390 390 }
391 391 }
392 392
393 393 // Pull Requests
394 394
395 395 .pullrequests_section_head {
396 396 display: block;
397 397 clear: both;
398 398 margin: @padding 0;
399 399 font-weight: @text-bold-weight;
400 400 font-family: @text-bold;
401 401 }
402 402
403 403 .pr-commit-flow {
404 404 position: relative;
405 405 font-weight: 600;
406 406
407 407 .tag {
408 408 display: inline-block;
409 409 margin: 0 1em .5em 0;
410 410 }
411 411
412 412 .clone-url {
413 413 display: inline-block;
414 414 margin: 0 0 .5em 0;
415 415 padding: 0;
416 416 line-height: 1.2em;
417 417 }
418 418 }
419 419
420 420 .pr-mergeinfo {
421 421 min-width: 95% !important;
422 422 padding: 0 !important;
423 423 border: 0;
424 424 }
425 425 .pr-mergeinfo-copy {
426 426 padding: 0 0;
427 427 }
428 428
429 429 .pr-pullinfo {
430 430 min-width: 95% !important;
431 431 padding: 0 !important;
432 432 border: 0;
433 433 }
434 434 .pr-pullinfo-copy {
435 435 padding: 0 0;
436 436 }
437 437
438 438 .pr-title-input {
439 439 width: 100%;
440 440 font-size: 18px;
441 441 margin: 0 0 4px 0;
442 442 padding: 0;
443 443 line-height: 1.7em;
444 444 color: @text-color;
445 445 letter-spacing: .02em;
446 446 font-weight: @text-bold-weight;
447 447 font-family: @text-bold;
448 448
449 449 &:hover {
450 450 box-shadow: none;
451 451 }
452 452 }
453 453
454 454 #pr-title {
455 455 input {
456 456 border: 1px transparent;
457 457 color: black;
458 458 opacity: 1;
459 459 background: #fff;
460 460 font-size: 18px;
461 461 }
462 462 }
463 463
464 464 .pr-title-closed-tag {
465 465 font-size: 16px;
466 466 }
467 467
468 468 #pr-desc {
469 469 padding: 10px 0;
470 470
471 471 .markdown-block {
472 472 padding: 0;
473 473 margin-bottom: -30px;
474 474 }
475 475 }
476 476
477 477 #pullrequest_title {
478 478 width: 100%;
479 479 box-sizing: border-box;
480 480 }
481 481
482 482 #pr_open_message {
483 483 border: @border-thickness solid #fff;
484 484 border-radius: @border-radius;
485 485 text-align: left;
486 486 overflow: hidden;
487 487 white-space: pre-line;
488 488 padding-top: 5px
489 489 }
490 490
491 491 #add_reviewer {
492 492 padding-top: 10px;
493 493 }
494 494
495 495 #add_reviewer_input,
496 496 #add_observer_input {
497 497 padding-top: 10px
498 498 }
499 499
500 500 .pr-details-title-author-pref {
501 501 padding-right: 10px
502 502 }
503 503
504 504 .label-pr-detail {
505 505 display: table-cell;
506 506 width: 120px;
507 507 padding-top: 7.5px;
508 508 padding-bottom: 7.5px;
509 509 padding-right: 7.5px;
510 510 }
511 511
512 512 .source-details ul {
513 513 padding: 10px 16px;
514 514 }
515 515
516 516 .source-details-action {
517 517 color: @grey4;
518 518 font-size: 11px
519 519 }
520 520
521 521 .pr-submit-button {
522 522 float: right;
523 523 margin: 0 0 0 5px;
524 524 }
525 525
526 526 .pr-spacing-container {
527 527 padding: 20px;
528 528 clear: both
529 529 }
530 530
531 531 #pr-description-input {
532 532 margin-bottom: 0;
533 533 }
534 534
535 535 .pr-description-label {
536 536 vertical-align: top;
537 537 }
538 538
539 539 #open_edit_pullrequest {
540 540 padding: 0;
541 541 }
542 542
543 543 #close_edit_pullrequest {
544 544
545 545 }
546 546
547 547 #delete_pullrequest {
548 548 clear: inherit;
549 549
550 550 form {
551 551 display: inline;
552 552 }
553 553
554 554 }
555 555
556 556 .perms_section_head {
557 557 min-width: 625px;
558 558
559 559 h2 {
560 560 margin-bottom: 0;
561 561 }
562 562
563 563 .label-checkbox {
564 564 float: left;
565 565 }
566 566
567 567 &.field {
568 568 margin: @space 0 @padding;
569 569 }
570 570
571 571 &:first-child.field {
572 572 margin-top: 0;
573 573
574 574 .label {
575 575 margin-top: 0;
576 576 padding-top: 0;
577 577 }
578 578
579 579 .radios {
580 580 padding-top: 0;
581 581 }
582 582 }
583 583
584 584 .radios {
585 585 position: relative;
586 586 width: 505px;
587 587 }
588 588 }
589 589
590 590 //--- MODULES ------------------//
591 591
592 592
593 593 // Server Announcement
594 594 #server-announcement {
595 595 width: 95%;
596 596 margin: @padding auto;
597 597 padding: @padding;
598 598 border-width: 2px;
599 599 border-style: solid;
600 600 .border-radius(2px);
601 601 font-weight: @text-bold-weight;
602 602 font-family: @text-bold;
603 603
604 604 &.info { border-color: @alert4; background-color: @alert4-inner; }
605 605 &.warning { border-color: @alert3; background-color: @alert3-inner; }
606 606 &.error { border-color: @alert2; background-color: @alert2-inner; }
607 607 &.success { border-color: @alert1; background-color: @alert1-inner; }
608 608 &.neutral { border-color: @grey3; background-color: @grey6; }
609 609 }
610 610
611 611 // Fixed Sidebar Column
612 612 .sidebar-col-wrapper {
613 613 padding-left: @sidebar-all-width;
614 614
615 615 .sidebar {
616 616 width: @sidebar-width;
617 617 margin-left: -@sidebar-all-width;
618 618 }
619 619 }
620 620
621 621 .sidebar-col-wrapper.scw-small {
622 622 padding-left: @sidebar-small-all-width;
623 623
624 624 .sidebar {
625 625 width: @sidebar-small-width;
626 626 margin-left: -@sidebar-small-all-width;
627 627 }
628 628 }
629 629
630 630
631 631 // FOOTER
632 632 #footer {
633 633 padding: 0;
634 634 text-align: center;
635 635 vertical-align: middle;
636 636 color: @grey2;
637 637 font-size: 11px;
638 638
639 639 p {
640 640 margin: 0;
641 641 padding: 1em;
642 642 line-height: 1em;
643 643 }
644 644
645 645 .server-instance { //server instance
646 646 display: none;
647 647 }
648 648
649 649 .title {
650 650 float: none;
651 651 margin: 0 auto;
652 652 }
653 653 }
654 654
655 655 button.close {
656 656 padding: 0;
657 657 cursor: pointer;
658 658 background: transparent;
659 659 border: 0;
660 660 .box-shadow(none);
661 661 -webkit-appearance: none;
662 662 }
663 663
664 664 .close {
665 665 float: right;
666 666 font-size: 21px;
667 667 font-family: @text-bootstrap;
668 668 line-height: 1em;
669 669 font-weight: bold;
670 670 color: @grey2;
671 671
672 672 &:hover,
673 673 &:focus {
674 674 color: @grey1;
675 675 text-decoration: none;
676 676 cursor: pointer;
677 677 }
678 678 }
679 679
680 680 // GRID
681 681 .sorting,
682 682 .sorting_desc,
683 683 .sorting_asc {
684 684 cursor: pointer;
685 685 }
686 686 .sorting_desc:after {
687 687 content: "\00A0\25B2";
688 688 font-size: .75em;
689 689 }
690 690 .sorting_asc:after {
691 691 content: "\00A0\25BC";
692 692 font-size: .68em;
693 693 }
694 694
695 695
696 696 .user_auth_tokens {
697 697
698 698 &.truncate {
699 699 white-space: nowrap;
700 700 overflow: hidden;
701 701 text-overflow: ellipsis;
702 702 }
703 703
704 704 .fields .field .input {
705 705 margin: 0;
706 706 }
707 707
708 708 input#description {
709 709 width: 100px;
710 710 margin: 0;
711 711 }
712 712
713 713 .drop-menu {
714 714 // TODO: johbo: Remove this, should work out of the box when
715 715 // having multiple inputs inline
716 716 margin: 0 0 0 5px;
717 717 }
718 718 }
719 719 #user_list_table {
720 720 .closed {
721 721 background-color: @grey6;
722 722 }
723 723 }
724 724
725 725
726 726 input, textarea {
727 727 &.disabled {
728 728 opacity: .5;
729 729 }
730 730
731 731 &:hover {
732 732 border-color: @grey3;
733 733 box-shadow: @button-shadow;
734 734 }
735 735
736 736 &:focus {
737 737 border-color: @rcblue;
738 738 box-shadow: @button-shadow;
739 739 }
740 740 }
741 741
742 742 // remove extra padding in firefox
743 743 input::-moz-focus-inner { border:0; padding:0 }
744 744
745 745 .adjacent input {
746 746 margin-bottom: @padding;
747 747 }
748 748
749 749 .permissions_boxes {
750 750 display: block;
751 751 }
752 752
753 753 //FORMS
754 754
755 755 .medium-inline,
756 756 input#description.medium-inline {
757 757 display: inline;
758 758 width: @medium-inline-input-width;
759 759 min-width: 100px;
760 760 }
761 761
762 762 select {
763 763 //reset
764 764 -webkit-appearance: none;
765 765 -moz-appearance: none;
766 766
767 767 display: inline-block;
768 768 height: 28px;
769 769 width: auto;
770 770 margin: 0 @padding @padding 0;
771 771 padding: 0 18px 0 8px;
772 772 line-height:1em;
773 773 font-size: @basefontsize;
774 774 border: @border-thickness solid @grey5;
775 775 border-radius: @border-radius;
776 776 background:white url("../images/dt-arrow-dn.png") no-repeat 100% 50%;
777 777 color: @grey4;
778 778 box-shadow: @button-shadow;
779 779
780 780 &:after {
781 781 content: "\00A0\25BE";
782 782 }
783 783
784 784 &:focus, &:hover {
785 785 outline: none;
786 786 border-color: @grey4;
787 787 color: @rcdarkblue;
788 788 }
789 789 }
790 790
791 791 option {
792 792 &:focus {
793 793 outline: none;
794 794 }
795 795 }
796 796
797 797 input,
798 798 textarea {
799 799 padding: @input-padding;
800 800 border: @input-border-thickness solid @border-highlight-color;
801 801 .border-radius (@border-radius);
802 802 font-family: @text-light;
803 803 font-size: @basefontsize;
804 804
805 805 &.input-sm {
806 806 padding: 5px;
807 807 }
808 808
809 809 &#description {
810 810 min-width: @input-description-minwidth;
811 811 min-height: 1em;
812 812 padding: 10px;
813 813 }
814 814 }
815 815
816 816 .field-sm {
817 817 input,
818 818 textarea {
819 819 padding: 5px;
820 820 }
821 821 }
822 822
823 823 textarea {
824 824 display: block;
825 825 clear: both;
826 826 width: 100%;
827 827 min-height: 100px;
828 828 margin-bottom: @padding;
829 829 .box-sizing(border-box);
830 830 overflow: auto;
831 831 }
832 832
833 833 label {
834 834 font-family: @text-light;
835 835 }
836 836
837 837 // GRAVATARS
838 838 // centers gravatar on username to the right
839 839
840 840 .gravatar {
841 841 display: inline;
842 842 min-width: 16px;
843 843 min-height: 16px;
844 844 margin: -5px 0;
845 845 padding: 0;
846 846 line-height: 1em;
847 847 box-sizing: content-box;
848 848 border-radius: 50%;
849 849
850 850 &.gravatar-large {
851 851 margin: -0.5em .25em -0.5em 0;
852 852 }
853 853
854 854 & + .user {
855 855 display: inline;
856 856 margin: 0;
857 857 padding: 0 0 0 .17em;
858 858 line-height: 1em;
859 859 }
860 860
861 861 & + .no-margin {
862 862 margin: 0
863 863 }
864 864
865 865 }
866 866
867 867 .user-inline-data {
868 868 display: inline-block;
869 869 float: left;
870 870 padding-left: .5em;
871 871 line-height: 1.3em;
872 872 }
873 873
874 874 .rc-user { // gravatar + user wrapper
875 875 float: left;
876 876 position: relative;
877 877 min-width: 100px;
878 878 max-width: 200px;
879 879 min-height: (@gravatar-size + @border-thickness * 2); // account for border
880 880 display: block;
881 881 padding: 0 0 0 (@gravatar-size + @basefontsize/4);
882 882
883 883
884 884 .gravatar {
885 885 display: block;
886 886 position: absolute;
887 887 top: 0;
888 888 left: 0;
889 889 min-width: @gravatar-size;
890 890 min-height: @gravatar-size;
891 891 margin: 0;
892 892 }
893 893
894 894 .user {
895 895 display: block;
896 896 max-width: 175px;
897 897 padding-top: 2px;
898 898 overflow: hidden;
899 899 text-overflow: ellipsis;
900 900 }
901 901 }
902 902
903 903 .gist-gravatar,
904 904 .journal_container {
905 905 .gravatar-large {
906 906 margin: 0 .5em -10px 0;
907 907 }
908 908 }
909 909
910 910 .gist-type-fields {
911 911 line-height: 30px;
912 912 height: 30px;
913 913
914 914 .gist-type-fields-wrapper {
915 915 vertical-align: middle;
916 916 display: inline-block;
917 917 line-height: 25px;
918 918 }
919 919 }
920 920
921 921 // ADMIN SETTINGS
922 922
923 923 // Tag Patterns
924 924 .tag_patterns {
925 925 .tag_input {
926 926 margin-bottom: @padding;
927 927 }
928 928 }
929 929
930 930 .locked_input {
931 931 position: relative;
932 932
933 933 input {
934 934 display: inline;
935 935 margin: 3px 5px 0px 0px;
936 936 }
937 937
938 938 br {
939 939 display: none;
940 940 }
941 941
942 942 .error-message {
943 943 float: left;
944 944 width: 100%;
945 945 }
946 946
947 947 .lock_input_button {
948 948 display: inline;
949 949 }
950 950
951 951 .help-block {
952 952 clear: both;
953 953 }
954 954 }
955 955
956 956 // Notifications
957 957
958 958 .notifications_buttons {
959 959 margin: 0 0 @space 0;
960 960 padding: 0;
961 961
962 962 .btn {
963 963 display: inline-block;
964 964 }
965 965 }
966 966
967 967 .notification-list {
968 968
969 969 div {
970 970 vertical-align: middle;
971 971 }
972 972
973 973 .container {
974 974 display: block;
975 975 margin: 0 0 @padding 0;
976 976 }
977 977
978 978 .delete-notifications {
979 979 margin-left: @padding;
980 980 text-align: right;
981 981 cursor: pointer;
982 982 }
983 983
984 984 .read-notifications {
985 985 margin-left: @padding/2;
986 986 text-align: right;
987 987 width: 35px;
988 988 cursor: pointer;
989 989 }
990 990
991 991 .icon-minus-sign {
992 992 color: @alert2;
993 993 }
994 994
995 995 .icon-ok-sign {
996 996 color: @alert1;
997 997 }
998 998 }
999 999
1000 1000 .user_settings {
1001 1001 float: left;
1002 1002 clear: both;
1003 1003 display: block;
1004 1004 width: 100%;
1005 1005
1006 1006 .gravatar_box {
1007 1007 margin-bottom: @padding;
1008 1008
1009 1009 &:after {
1010 1010 content: " ";
1011 1011 clear: both;
1012 1012 width: 100%;
1013 1013 }
1014 1014 }
1015 1015
1016 1016 .fields .field {
1017 1017 clear: both;
1018 1018 }
1019 1019 }
1020 1020
1021 1021 .advanced_settings {
1022 1022 margin-bottom: @space;
1023 1023
1024 1024 .help-block {
1025 1025 margin-left: 0;
1026 1026 }
1027 1027
1028 1028 button + .help-block {
1029 1029 margin-top: @padding;
1030 1030 }
1031 1031 }
1032 1032
1033 1033 // admin settings radio buttons and labels
1034 1034 .label-2 {
1035 1035 float: left;
1036 1036 width: @label2-width;
1037 1037
1038 1038 label {
1039 1039 color: @grey1;
1040 1040 }
1041 1041 }
1042 1042 .checkboxes {
1043 1043 float: left;
1044 1044 width: @checkboxes-width;
1045 1045 margin-bottom: @padding;
1046 1046
1047 1047 .checkbox {
1048 1048 width: 100%;
1049 1049
1050 1050 label {
1051 1051 margin: 0;
1052 1052 padding: 0;
1053 1053 }
1054 1054 }
1055 1055
1056 1056 .checkbox + .checkbox {
1057 1057 display: inline-block;
1058 1058 }
1059 1059
1060 1060 label {
1061 1061 margin-right: 1em;
1062 1062 }
1063 1063 }
1064 1064
1065 1065 // CHANGELOG
1066 1066 .container_header {
1067 1067 float: left;
1068 1068 display: block;
1069 1069 width: 100%;
1070 1070 margin: @padding 0 @padding;
1071 1071
1072 1072 #filter_changelog {
1073 1073 float: left;
1074 1074 margin-right: @padding;
1075 1075 }
1076 1076
1077 1077 .breadcrumbs_light {
1078 1078 display: inline-block;
1079 1079 }
1080 1080 }
1081 1081
1082 1082 .info_box {
1083 1083 float: right;
1084 1084 }
1085 1085
1086 1086
1087 1087
1088 1088 #graph_content{
1089 1089
1090 1090 // adjust for table headers so that graph renders properly
1091 1091 // #graph_nodes padding - table cell padding
1092 1092 padding-top: (@space - (@basefontsize * 2.4));
1093 1093
1094 1094 &.graph_full_width {
1095 1095 width: 100%;
1096 1096 max-width: 100%;
1097 1097 }
1098 1098 }
1099 1099
1100 1100 #graph {
1101 1101
1102 1102 .pagination-left {
1103 1103 float: left;
1104 1104 clear: both;
1105 1105 }
1106 1106
1107 1107 .log-container {
1108 1108 max-width: 345px;
1109 1109
1110 1110 .message{
1111 1111 max-width: 340px;
1112 1112 }
1113 1113 }
1114 1114
1115 1115 .graph-col-wrapper {
1116 1116
1117 1117 #graph_nodes {
1118 1118 width: 100px;
1119 1119 position: absolute;
1120 1120 left: 70px;
1121 1121 z-index: -1;
1122 1122 }
1123 1123 }
1124 1124
1125 1125 .load-more-commits {
1126 1126 text-align: center;
1127 1127 }
1128 1128 .load-more-commits:hover {
1129 1129 background-color: @grey7;
1130 1130 }
1131 1131 .load-more-commits {
1132 1132 a {
1133 1133 display: block;
1134 1134 }
1135 1135 }
1136 1136 }
1137 1137
1138 1138 .obsolete-toggle {
1139 1139 line-height: 30px;
1140 1140 margin-left: -15px;
1141 1141 }
1142 1142
1143 1143 #rev_range_action {
1144 1144 margin-bottom: -8px;
1145 1145 }
1146 1146
1147 1147 #filter_changelog {
1148 1148 float: left;
1149 1149 }
1150 1150
1151 1151
1152 1152 //--- THEME ------------------//
1153 1153
1154 1154 #logo {
1155 1155 float: left;
1156 1156 margin: 9px 0 0 0;
1157 1157
1158 1158 .header {
1159 1159 background-color: transparent;
1160 1160 }
1161 1161
1162 1162 a {
1163 1163 display: inline-block;
1164 1164 }
1165 1165
1166 1166 img {
1167 1167 height:30px;
1168 1168 }
1169 1169 }
1170 1170
1171 1171 .logo-wrapper {
1172 1172 float:left;
1173 1173 }
1174 1174
1175 1175 .branding {
1176 1176 float: left;
1177 1177 padding: 9px 2px;
1178 1178 line-height: 1em;
1179 1179 font-size: @navigation-fontsize;
1180 1180
1181 1181 a {
1182 1182 color: @grey5
1183 1183 }
1184 1184
1185 1185 // 1024px or smaller
1186 1186 @media screen and (max-width: 1180px) {
1187 1187 display: none;
1188 1188 }
1189 1189
1190 1190 }
1191 1191
1192 1192 img {
1193 1193 border: none;
1194 1194 outline: none;
1195 1195 }
1196 1196 user-profile-header
1197 1197 label {
1198 1198
1199 1199 input[type="checkbox"] {
1200 1200 margin-right: 1em;
1201 1201 }
1202 1202 input[type="radio"] {
1203 1203 margin-right: 1em;
1204 1204 }
1205 1205 }
1206 1206
1207 1207 .review-status {
1208 1208 &.under_review {
1209 1209 color: @alert3;
1210 1210 }
1211 1211 &.approved {
1212 1212 color: @alert1;
1213 1213 }
1214 1214 &.rejected,
1215 1215 &.forced_closed{
1216 1216 color: @alert2;
1217 1217 }
1218 1218 &.not_reviewed {
1219 1219 color: @grey5;
1220 1220 }
1221 1221 }
1222 1222
1223 1223 .review-status-under_review {
1224 1224 color: @alert3;
1225 1225 }
1226 1226 .status-tag-under_review {
1227 1227 border-color: @alert3;
1228 1228 }
1229 1229
1230 1230 .review-status-approved {
1231 1231 color: @alert1;
1232 1232 }
1233 1233 .status-tag-approved {
1234 1234 border-color: @alert1;
1235 1235 }
1236 1236
1237 1237 .review-status-rejected,
1238 1238 .review-status-forced_closed {
1239 1239 color: @alert2;
1240 1240 }
1241 1241 .status-tag-rejected,
1242 1242 .status-tag-forced_closed {
1243 1243 border-color: @alert2;
1244 1244 }
1245 1245
1246 1246 .review-status-not_reviewed {
1247 1247 color: @grey5;
1248 1248 }
1249 1249 .status-tag-not_reviewed {
1250 1250 border-color: @grey5;
1251 1251 }
1252 1252
1253 1253 .test_pattern_preview {
1254 1254 margin: @space 0;
1255 1255
1256 1256 p {
1257 1257 margin-bottom: 0;
1258 1258 border-bottom: @border-thickness solid @border-default-color;
1259 1259 color: @grey3;
1260 1260 }
1261 1261
1262 1262 .btn {
1263 1263 margin-bottom: @padding;
1264 1264 }
1265 1265 }
1266 1266 #test_pattern_result {
1267 1267 display: none;
1268 1268 &:extend(pre);
1269 1269 padding: .9em;
1270 1270 color: @grey3;
1271 1271 background-color: @grey7;
1272 1272 border-right: @border-thickness solid @border-default-color;
1273 1273 border-bottom: @border-thickness solid @border-default-color;
1274 1274 border-left: @border-thickness solid @border-default-color;
1275 1275 }
1276 1276
1277 1277 #repo_vcs_settings {
1278 1278 #inherit_overlay_vcs_default {
1279 1279 display: none;
1280 1280 }
1281 1281 #inherit_overlay_vcs_custom {
1282 1282 display: custom;
1283 1283 }
1284 1284 &.inherited {
1285 1285 #inherit_overlay_vcs_default {
1286 1286 display: block;
1287 1287 }
1288 1288 #inherit_overlay_vcs_custom {
1289 1289 display: none;
1290 1290 }
1291 1291 }
1292 1292 }
1293 1293
1294 1294 .issue-tracker-link {
1295 1295 color: @rcblue;
1296 1296 }
1297 1297
1298 1298 // Issue Tracker Table Show/Hide
1299 1299 #repo_issue_tracker {
1300 1300 #inherit_overlay {
1301 1301 display: none;
1302 1302 }
1303 1303 #custom_overlay {
1304 1304 display: custom;
1305 1305 }
1306 1306 &.inherited {
1307 1307 #inherit_overlay {
1308 1308 display: block;
1309 1309 }
1310 1310 #custom_overlay {
1311 1311 display: none;
1312 1312 }
1313 1313 }
1314 1314 }
1315 1315 table.issuetracker {
1316 1316 &.readonly {
1317 1317 tr, td {
1318 1318 color: @grey3;
1319 1319 }
1320 1320 }
1321 1321 .edit {
1322 1322 display: none;
1323 1323 }
1324 1324 .editopen {
1325 1325 .edit {
1326 1326 display: inline;
1327 1327 }
1328 1328 .entry {
1329 1329 display: none;
1330 1330 }
1331 1331 }
1332 1332 tr td.td-action {
1333 1333 min-width: 117px;
1334 1334 }
1335 1335 td input {
1336 1336 max-width: none;
1337 1337 min-width: 30px;
1338 1338 width: 80%;
1339 1339 }
1340 1340 .issuetracker_pref input {
1341 1341 width: 40%;
1342 1342 }
1343 1343 input.edit_issuetracker_update {
1344 1344 margin-right: 0;
1345 1345 width: auto;
1346 1346 }
1347 1347 }
1348 1348
1349 1349 table.integrations {
1350 1350 .td-icon {
1351 1351 width: 20px;
1352 1352 .integration-icon {
1353 1353 height: 20px;
1354 1354 width: 20px;
1355 1355 }
1356 1356 }
1357 1357 }
1358 1358
1359 1359 .integrations {
1360 1360 a.integration-box {
1361 1361 color: @text-color;
1362 1362 &:hover {
1363 1363 .panel {
1364 1364 background: #fbfbfb;
1365 1365 }
1366 1366 }
1367 1367 .integration-icon {
1368 1368 width: 30px;
1369 1369 height: 30px;
1370 1370 margin-right: 20px;
1371 1371 float: left;
1372 1372 }
1373 1373
1374 1374 .panel-body {
1375 1375 padding: 10px;
1376 1376 }
1377 1377 .panel {
1378 1378 margin-bottom: 10px;
1379 1379 }
1380 1380 h2 {
1381 1381 display: inline-block;
1382 1382 margin: 0;
1383 1383 min-width: 140px;
1384 1384 }
1385 1385 }
1386 1386 a.integration-box.dummy-integration {
1387 1387 color: @grey4
1388 1388 }
1389 1389 }
1390 1390
1391 1391 //Permissions Settings
1392 1392 #add_perm {
1393 1393 margin: 0 0 @padding;
1394 1394 cursor: pointer;
1395 1395 }
1396 1396
1397 1397 .perm_ac {
1398 1398 input {
1399 1399 width: 95%;
1400 1400 }
1401 1401 }
1402 1402
1403 1403 .autocomplete-suggestions {
1404 1404 width: auto !important; // overrides autocomplete.js
1405 1405 min-width: 278px;
1406 1406 margin: 0;
1407 1407 border: @border-thickness solid @grey5;
1408 1408 border-radius: @border-radius;
1409 1409 color: @grey2;
1410 1410 background-color: white;
1411 1411 }
1412 1412
1413 1413 .autocomplete-qfilter-suggestions {
1414 1414 width: auto !important; // overrides autocomplete.js
1415 1415 max-height: 100% !important;
1416 1416 min-width: 376px;
1417 1417 margin: 0;
1418 1418 border: @border-thickness solid @grey5;
1419 1419 color: @grey2;
1420 1420 background-color: white;
1421 1421 }
1422 1422
1423 1423 .autocomplete-selected {
1424 1424 background: #F0F0F0;
1425 1425 }
1426 1426
1427 1427 .ac-container-wrap {
1428 1428 margin: 0;
1429 1429 padding: 8px;
1430 1430 border-bottom: @border-thickness solid @grey5;
1431 1431 list-style-type: none;
1432 1432 cursor: pointer;
1433 1433
1434 1434 &:hover {
1435 1435 background-color: @grey7;
1436 1436 }
1437 1437
1438 1438 img {
1439 1439 height: @gravatar-size;
1440 1440 width: @gravatar-size;
1441 1441 margin-right: 1em;
1442 1442 }
1443 1443
1444 1444 strong {
1445 1445 font-weight: normal;
1446 1446 }
1447 1447 }
1448 1448
1449 1449 // Settings Dropdown
1450 1450 .user-menu .container {
1451 1451 padding: 0 4px;
1452 1452 margin: 0;
1453 1453 }
1454 1454
1455 1455 .user-menu .gravatar {
1456 1456 cursor: pointer;
1457 1457 }
1458 1458
1459 1459 .codeblock {
1460 1460 margin-bottom: @padding;
1461 1461 clear: both;
1462 1462
1463 1463 .stats {
1464 1464 overflow: hidden;
1465 1465 }
1466 1466
1467 1467 .message{
1468 1468 textarea{
1469 1469 margin: 0;
1470 1470 }
1471 1471 }
1472 1472
1473 1473 .code-header {
1474 1474 .stats {
1475 1475 line-height: 2em;
1476 1476
1477 1477 .revision_id {
1478 1478 margin-left: 0;
1479 1479 }
1480 1480 .buttons {
1481 1481 padding-right: 0;
1482 1482 }
1483 1483 }
1484 1484
1485 1485 .item{
1486 1486 margin-right: 0.5em;
1487 1487 }
1488 1488 }
1489 1489
1490 1490 #editor_container {
1491 1491 position: relative;
1492 1492 margin: @padding 10px;
1493 1493 }
1494 1494 }
1495 1495
1496 1496 #file_history_container {
1497 1497 display: none;
1498 1498 }
1499 1499
1500 1500 .file-history-inner {
1501 1501 margin-bottom: 10px;
1502 1502 }
1503 1503
1504 1504 // Pull Requests
1505 1505 .summary-details {
1506 1506 width: 100%;
1507 1507 }
1508 1508 .pr-summary {
1509 1509 border-bottom: @border-thickness solid @grey5;
1510 1510 margin-bottom: @space;
1511 1511 }
1512 1512
1513 1513 .reviewers {
1514 1514 width: 98%;
1515 1515 }
1516 1516
1517 1517 .reviewers ul li {
1518 1518 position: relative;
1519 1519 width: 100%;
1520 1520 padding-bottom: 8px;
1521 1521 list-style-type: none;
1522 1522 }
1523 1523
1524 1524 .reviewer_entry {
1525 1525 min-height: 55px;
1526 1526 }
1527 1527
1528 1528 .reviewer_reason {
1529 1529 padding-left: 20px;
1530 1530 line-height: 1.5em;
1531 1531 }
1532 1532 .reviewer_status {
1533 1533 display: inline-block;
1534 1534 width: 20px;
1535 1535 min-width: 20px;
1536 1536 height: 1.2em;
1537 1537 line-height: 1em;
1538 1538 }
1539 1539
1540 1540 .reviewer_name {
1541 1541 display: inline-block;
1542 1542 max-width: 83%;
1543 1543 vertical-align: middle;
1544 1544 line-height: 1;
1545 1545
1546 1546 .rc-user {
1547 1547 min-width: 0;
1548 1548 margin: -2px 1em 0 0;
1549 1549 }
1550 1550
1551 1551 .reviewer {
1552 1552 float: left;
1553 1553 }
1554 1554 }
1555 1555
1556 1556 .reviewer_member_mandatory {
1557 1557 width: 16px;
1558 1558 font-size: 11px;
1559 1559 margin: 0;
1560 1560 padding: 0;
1561 1561 color: black;
1562 1562 opacity: 0.4;
1563 1563 }
1564 1564
1565 1565 .reviewer_member_mandatory_remove,
1566 1566 .reviewer_member_remove {
1567 1567 width: 16px;
1568 1568 padding: 0;
1569 1569 color: black;
1570 1570 cursor: pointer;
1571 1571 }
1572 1572
1573 1573 .reviewer_member_mandatory_remove {
1574 1574 color: @grey4;
1575 1575 }
1576 1576
1577 1577 .reviewer_member_status {
1578 1578 margin-top: 5px;
1579 1579 }
1580 1580 .pr-summary #summary{
1581 1581 width: 100%;
1582 1582 }
1583 1583 .pr-summary .action_button:hover {
1584 1584 border: 0;
1585 1585 cursor: pointer;
1586 1586 }
1587 1587 .pr-details-title {
1588 1588 height: 20px;
1589 1589 line-height: 16px;
1590 1590
1591 1591 padding-bottom: 4px;
1592 1592 border-bottom: @border-thickness solid @grey5;
1593 1593
1594 1594 .action_button.disabled {
1595 1595 color: @grey4;
1596 1596 cursor: inherit;
1597 1597 }
1598 1598 .action_button {
1599 1599 color: @rcblue;
1600 1600 }
1601 1601 }
1602 1602 .pr-details-content {
1603 1603 margin-top: @textmargin - 5;
1604 1604 margin-bottom: @textmargin - 5;
1605 1605 }
1606 1606
1607 1607 .pr-reviewer-rules {
1608 1608 padding: 10px 0px 20px 0px;
1609 1609 }
1610 1610
1611 1611 .todo-resolved {
1612 1612 text-decoration: line-through;
1613 1613 }
1614 1614
1615 1615 .todo-table, .comments-table {
1616 1616 width: 100%;
1617 1617
1618 1618 td {
1619 1619 padding: 5px 0px;
1620 1620 }
1621 1621
1622 1622 .td-todo-number {
1623 1623 text-align: left;
1624 1624 white-space: nowrap;
1625 1625 width: 1%;
1626 1626 padding-right: 2px;
1627 1627 }
1628 1628
1629 1629 .td-todo-gravatar {
1630 1630 width: 5%;
1631 1631
1632 1632 img {
1633 1633 margin: -3px 0;
1634 1634 }
1635 1635 }
1636 1636
1637 1637 }
1638 1638
1639 1639 .todo-comment-text-wrapper {
1640 1640 display: inline-grid;
1641 1641 }
1642 1642
1643 1643 .todo-comment-text {
1644 1644 margin-left: 5px;
1645 1645 white-space: nowrap;
1646 1646 overflow: hidden;
1647 1647 text-overflow: ellipsis;
1648 1648 }
1649 1649
1650 1650 table.group_members {
1651 1651 width: 100%
1652 1652 }
1653 1653
1654 1654 .group_members {
1655 1655 margin-top: 0;
1656 1656 padding: 0;
1657 1657
1658 1658 img {
1659 1659 height: @gravatar-size;
1660 1660 width: @gravatar-size;
1661 1661 margin-right: .5em;
1662 1662 margin-left: 3px;
1663 1663 }
1664 1664
1665 1665 .to-delete {
1666 1666 .user {
1667 1667 text-decoration: line-through;
1668 1668 }
1669 1669 }
1670 1670 }
1671 1671
1672 1672 .compare_view_commits_title {
1673 1673 .disabled {
1674 1674 cursor: inherit;
1675 1675 &:hover{
1676 1676 background-color: inherit;
1677 1677 color: inherit;
1678 1678 }
1679 1679 }
1680 1680 }
1681 1681
1682 1682 .subtitle-compare {
1683 1683 margin: -15px 0px 0px 0px;
1684 1684 }
1685 1685
1686 1686 // new entry in group_members
1687 1687 .td-author-new-entry {
1688 1688 background-color: rgba(red(@alert1), green(@alert1), blue(@alert1), 0.3);
1689 1689 }
1690 1690
1691 1691 .usergroup_member_remove {
1692 1692 width: 16px;
1693 1693 margin-bottom: 10px;
1694 1694 padding: 0;
1695 1695 color: black !important;
1696 1696 cursor: pointer;
1697 1697 }
1698 1698
1699 1699 .reviewer_ac .ac-input {
1700 1700 width: 98%;
1701 1701 margin-bottom: 1em;
1702 1702 }
1703 1703
1704 1704 .observer_ac .ac-input {
1705 1705 width: 98%;
1706 1706 margin-bottom: 1em;
1707 1707 }
1708 1708
1709 1709 .rule-table {
1710 1710 width: 100%;
1711 1711 }
1712 1712
1713 1713 .rule-table td {
1714 1714
1715 1715 }
1716 1716
1717 1717 .rule-table .td-role {
1718 1718 width: 100px
1719 1719 }
1720 1720
1721 1721 .rule-table .td-mandatory {
1722 1722 width: 100px
1723 1723 }
1724 1724
1725 1725 .rule-table .td-group-votes {
1726 1726 width: 150px
1727 1727 }
1728 1728
1729 1729 .compare_view_commits tr{
1730 1730 height: 20px;
1731 1731 }
1732 1732 .compare_view_commits td {
1733 1733 vertical-align: top;
1734 1734 padding-top: 10px;
1735 1735 }
1736 1736 .compare_view_commits .author {
1737 1737 margin-left: 5px;
1738 1738 }
1739 1739
1740 1740 .compare_view_commits {
1741 1741 .color-a {
1742 1742 color: @alert1;
1743 1743 }
1744 1744
1745 1745 .color-c {
1746 1746 color: @color3;
1747 1747 }
1748 1748
1749 1749 .color-r {
1750 1750 color: @color5;
1751 1751 }
1752 1752
1753 1753 .color-a-bg {
1754 1754 background-color: @alert1;
1755 1755 }
1756 1756
1757 1757 .color-c-bg {
1758 1758 background-color: @alert3;
1759 1759 }
1760 1760
1761 1761 .color-r-bg {
1762 1762 background-color: @alert2;
1763 1763 }
1764 1764
1765 1765 .color-a-border {
1766 1766 border: 1px solid @alert1;
1767 1767 }
1768 1768
1769 1769 .color-c-border {
1770 1770 border: 1px solid @alert3;
1771 1771 }
1772 1772
1773 1773 .color-r-border {
1774 1774 border: 1px solid @alert2;
1775 1775 }
1776 1776
1777 1777 .commit-change-indicator {
1778 1778 width: 15px;
1779 1779 height: 15px;
1780 1780 position: relative;
1781 1781 left: 15px;
1782 1782 }
1783 1783
1784 1784 .commit-change-content {
1785 1785 text-align: center;
1786 1786 vertical-align: middle;
1787 1787 line-height: 15px;
1788 1788 }
1789 1789 }
1790 1790
1791 1791 .compare_view_filepath {
1792 1792 color: @grey1;
1793 1793 }
1794 1794
1795 1795 .show_more {
1796 1796 display: inline-block;
1797 1797 width: 0;
1798 1798 height: 0;
1799 1799 vertical-align: middle;
1800 1800 content: "";
1801 1801 border: 4px solid;
1802 1802 border-right-color: transparent;
1803 1803 border-bottom-color: transparent;
1804 1804 border-left-color: transparent;
1805 1805 font-size: 0;
1806 1806 }
1807 1807
1808 1808 .journal_more .show_more {
1809 1809 display: inline;
1810 1810
1811 1811 &:after {
1812 1812 content: none;
1813 1813 }
1814 1814 }
1815 1815
1816 1816 .compare_view_commits .collapse_commit:after {
1817 1817 cursor: pointer;
1818 1818 content: "\00A0\25B4";
1819 1819 margin-left: -3px;
1820 1820 font-size: 17px;
1821 1821 color: @grey4;
1822 1822 }
1823 1823
1824 1824 .diff_links {
1825 1825 margin-left: 8px;
1826 1826 }
1827 1827
1828 1828 #pull_request_overview {
1829 1829 div.ancestor {
1830 1830 margin: -33px 0;
1831 1831 }
1832 1832 }
1833 1833
1834 1834 div.ancestor {
1835 1835
1836 1836 }
1837 1837
1838 1838 .cs_icon_td input[type="checkbox"] {
1839 1839 display: none;
1840 1840 }
1841 1841
1842 1842 .cs_icon_td .expand_file_icon:after {
1843 1843 cursor: pointer;
1844 1844 content: "\00A0\25B6";
1845 1845 font-size: 12px;
1846 1846 color: @grey4;
1847 1847 }
1848 1848
1849 1849 .cs_icon_td .collapse_file_icon:after {
1850 1850 cursor: pointer;
1851 1851 content: "\00A0\25BC";
1852 1852 font-size: 12px;
1853 1853 color: @grey4;
1854 1854 }
1855 1855
1856 1856 /*new binary
1857 1857 NEW_FILENODE = 1
1858 1858 DEL_FILENODE = 2
1859 1859 MOD_FILENODE = 3
1860 1860 RENAMED_FILENODE = 4
1861 1861 COPIED_FILENODE = 5
1862 1862 CHMOD_FILENODE = 6
1863 1863 BIN_FILENODE = 7
1864 1864 */
1865 1865 .cs_files_expand {
1866 1866 font-size: @basefontsize + 5px;
1867 1867 line-height: 1.8em;
1868 1868 float: right;
1869 1869 }
1870 1870
1871 1871 .cs_files_expand span{
1872 1872 color: @rcblue;
1873 1873 cursor: pointer;
1874 1874 }
1875 1875 .cs_files {
1876 1876 clear: both;
1877 1877 padding-bottom: @padding;
1878 1878
1879 1879 .cur_cs {
1880 1880 margin: 10px 2px;
1881 1881 font-weight: bold;
1882 1882 }
1883 1883
1884 1884 .node {
1885 1885 float: left;
1886 1886 }
1887 1887
1888 1888 .changes {
1889 1889 float: right;
1890 1890 color: white;
1891 1891 font-size: @basefontsize - 4px;
1892 1892 margin-top: 4px;
1893 1893 opacity: 0.6;
1894 1894 filter: Alpha(opacity=60); /* IE8 and earlier */
1895 1895
1896 1896 .added {
1897 1897 background-color: @alert1;
1898 1898 float: left;
1899 1899 text-align: center;
1900 1900 }
1901 1901
1902 1902 .deleted {
1903 1903 background-color: @alert2;
1904 1904 float: left;
1905 1905 text-align: center;
1906 1906 }
1907 1907
1908 1908 .bin {
1909 1909 background-color: @alert1;
1910 1910 text-align: center;
1911 1911 }
1912 1912
1913 1913 /*new binary*/
1914 1914 .bin.bin1 {
1915 1915 background-color: @alert1;
1916 1916 text-align: center;
1917 1917 }
1918 1918
1919 1919 /*deleted binary*/
1920 1920 .bin.bin2 {
1921 1921 background-color: @alert2;
1922 1922 text-align: center;
1923 1923 }
1924 1924
1925 1925 /*mod binary*/
1926 1926 .bin.bin3 {
1927 1927 background-color: @grey2;
1928 1928 text-align: center;
1929 1929 }
1930 1930
1931 1931 /*rename file*/
1932 1932 .bin.bin4 {
1933 1933 background-color: @alert4;
1934 1934 text-align: center;
1935 1935 }
1936 1936
1937 1937 /*copied file*/
1938 1938 .bin.bin5 {
1939 1939 background-color: @alert4;
1940 1940 text-align: center;
1941 1941 }
1942 1942
1943 1943 /*chmod file*/
1944 1944 .bin.bin6 {
1945 1945 background-color: @grey2;
1946 1946 text-align: center;
1947 1947 }
1948 1948 }
1949 1949 }
1950 1950
1951 1951 .cs_files .cs_added, .cs_files .cs_A,
1952 1952 .cs_files .cs_added, .cs_files .cs_M,
1953 1953 .cs_files .cs_added, .cs_files .cs_D {
1954 1954 height: 16px;
1955 1955 padding-right: 10px;
1956 1956 margin-top: 7px;
1957 1957 text-align: left;
1958 1958 }
1959 1959
1960 1960 .cs_icon_td {
1961 1961 min-width: 16px;
1962 1962 width: 16px;
1963 1963 }
1964 1964
1965 1965 .pull-request-merge {
1966 1966 border: 1px solid @grey5;
1967 1967 padding: 10px 0px 20px;
1968 1968 margin-top: 10px;
1969 1969 margin-bottom: 20px;
1970 1970 }
1971 1971
1972 1972 .pull-request-merge-refresh {
1973 1973 margin: 2px 7px;
1974 1974 a {
1975 1975 color: @grey3;
1976 1976 }
1977 1977 }
1978 1978
1979 1979 .pull-request-merge ul {
1980 1980 padding: 0px 0px;
1981 1981 }
1982 1982
1983 1983 .pull-request-merge li {
1984 1984 list-style-type: none;
1985 1985 }
1986 1986
1987 1987 .pull-request-merge .pull-request-wrap {
1988 1988 height: auto;
1989 1989 padding: 0px 0px;
1990 1990 text-align: right;
1991 1991 }
1992 1992
1993 1993 .pull-request-merge span {
1994 1994 margin-right: 5px;
1995 1995 }
1996 1996
1997 1997 .pull-request-merge-actions {
1998 1998 min-height: 30px;
1999 1999 padding: 0px 0px;
2000 2000 }
2001 2001
2002 2002 .pull-request-merge-info {
2003 2003 padding: 0px 5px 5px 0px;
2004 2004 }
2005 2005
2006 2006 .merge-status {
2007 2007 margin-right: 5px;
2008 2008 }
2009 2009
2010 2010 .merge-message {
2011 2011 font-size: 1.2em
2012 2012 }
2013 2013
2014 2014 .merge-message.success i,
2015 2015 .merge-icon.success i {
2016 2016 color:@alert1;
2017 2017 }
2018 2018
2019 2019 .merge-message.warning i,
2020 2020 .merge-icon.warning i {
2021 2021 color: @alert3;
2022 2022 }
2023 2023
2024 2024 .merge-message.error i,
2025 2025 .merge-icon.error i {
2026 2026 color:@alert2;
2027 2027 }
2028 2028
2029 2029 .pr-versions {
2030 2030 font-size: 1.1em;
2031 2031 padding: 7.5px;
2032 2032
2033 2033 table {
2034 2034
2035 2035 }
2036 2036
2037 2037 td {
2038 2038 line-height: 15px;
2039 2039 }
2040 2040
2041 2041 .compare-radio-button {
2042 2042 position: relative;
2043 2043 top: -3px;
2044 2044 }
2045 2045 }
2046 2046
2047 2047
2048 2048 #close_pull_request {
2049 2049 margin-right: 0px;
2050 2050 }
2051 2051
2052 2052 .empty_data {
2053 2053 color: @grey4;
2054 2054 }
2055 2055
2056 2056 #changeset_compare_view_content {
2057 2057 clear: both;
2058 2058 width: 100%;
2059 2059 box-sizing: border-box;
2060 2060 .border-radius(@border-radius);
2061 2061
2062 2062 .help-block {
2063 2063 margin: @padding 0;
2064 2064 color: @text-color;
2065 2065 &.pre-formatting {
2066 2066 white-space: pre;
2067 2067 }
2068 2068 }
2069 2069
2070 2070 .empty_data {
2071 2071 margin: @padding 0;
2072 2072 }
2073 2073
2074 2074 .alert {
2075 2075 margin-bottom: @space;
2076 2076 }
2077 2077 }
2078 2078
2079 2079 .table_disp {
2080 2080 .status {
2081 2081 width: auto;
2082 2082 }
2083 2083 }
2084 2084
2085 2085
2086 2086 .creation_in_progress {
2087 2087 color: @grey4
2088 2088 }
2089 2089
2090 2090 .status_box_menu {
2091 2091 margin: 0;
2092 2092 }
2093 2093
2094 2094 .notification-table{
2095 2095 margin-bottom: @space;
2096 2096 display: table;
2097 2097 width: 100%;
2098 2098
2099 2099 .container{
2100 2100 display: table-row;
2101 2101
2102 2102 .notification-header{
2103 2103 border-bottom: @border-thickness solid @border-default-color;
2104 2104 }
2105 2105
2106 2106 .notification-subject{
2107 2107 display: table-cell;
2108 2108 }
2109 2109 }
2110 2110 }
2111 2111
2112 2112 // Notifications
2113 2113 .notification-header{
2114 2114 display: table;
2115 2115 width: 100%;
2116 2116 padding: floor(@basefontsize/2) 0;
2117 2117 line-height: 1em;
2118 2118
2119 2119 .desc, .delete-notifications, .read-notifications{
2120 2120 display: table-cell;
2121 2121 text-align: left;
2122 2122 }
2123 2123
2124 2124 .delete-notifications, .read-notifications{
2125 2125 width: 35px;
2126 2126 min-width: 35px; //fixes when only one button is displayed
2127 2127 }
2128 2128 }
2129 2129
2130 2130 .notification-body {
2131 2131 .markdown-block,
2132 2132 .rst-block {
2133 2133 padding: @padding 0;
2134 2134 }
2135 2135
2136 2136 .notification-subject {
2137 2137 padding: @textmargin 0;
2138 2138 border-bottom: @border-thickness solid @border-default-color;
2139 2139 }
2140 2140 }
2141 2141
2142 2142 .notice-messages {
2143 2143 .markdown-block,
2144 2144 .rst-block {
2145 2145 padding: 0;
2146 2146 }
2147 2147 }
2148 2148
2149 2149 .notifications_buttons{
2150 2150 float: right;
2151 2151 }
2152 2152
2153 2153 #notification-status{
2154 2154 display: inline;
2155 2155 }
2156 2156
2157 2157 // Repositories
2158 2158
2159 2159 #summary.fields{
2160 2160 display: table;
2161 2161
2162 2162 .field{
2163 2163 display: table-row;
2164 2164
2165 2165 .label-summary{
2166 2166 display: table-cell;
2167 2167 min-width: @label-summary-minwidth;
2168 2168 padding-top: @padding/2;
2169 2169 padding-bottom: @padding/2;
2170 2170 padding-right: @padding/2;
2171 2171 }
2172 2172
2173 2173 .input{
2174 2174 display: table-cell;
2175 2175 padding: @padding/2;
2176 2176
2177 2177 input{
2178 2178 min-width: 29em;
2179 2179 padding: @padding/4;
2180 2180 }
2181 2181 }
2182 2182 .statistics, .downloads{
2183 2183 .disabled{
2184 2184 color: @grey4;
2185 2185 }
2186 2186 }
2187 2187 }
2188 2188 }
2189 2189
2190 2190 #summary{
2191 2191 width: 70%;
2192 2192 }
2193 2193
2194 2194
2195 2195 // Journal
2196 2196 .journal.title {
2197 2197 h5 {
2198 2198 float: left;
2199 2199 margin: 0;
2200 2200 width: 70%;
2201 2201 }
2202 2202
2203 2203 ul {
2204 2204 float: right;
2205 2205 display: inline-block;
2206 2206 margin: 0;
2207 2207 width: 30%;
2208 2208 text-align: right;
2209 2209
2210 2210 li {
2211 2211 display: inline;
2212 2212 font-size: @journal-fontsize;
2213 2213 line-height: 1em;
2214 2214
2215 2215 list-style-type: none;
2216 2216 }
2217 2217 }
2218 2218 }
2219 2219
2220 2220 .filterexample {
2221 2221 position: absolute;
2222 2222 top: 95px;
2223 2223 left: @contentpadding;
2224 2224 color: @rcblue;
2225 2225 font-size: 11px;
2226 2226 font-family: @text-regular;
2227 2227 cursor: help;
2228 2228
2229 2229 &:hover {
2230 2230 color: @rcdarkblue;
2231 2231 }
2232 2232
2233 2233 @media (max-width:768px) {
2234 2234 position: relative;
2235 2235 top: auto;
2236 2236 left: auto;
2237 2237 display: block;
2238 2238 }
2239 2239 }
2240 2240
2241 2241
2242 2242 #journal{
2243 2243 margin-bottom: @space;
2244 2244
2245 2245 .journal_day{
2246 2246 margin-bottom: @textmargin/2;
2247 2247 padding-bottom: @textmargin/2;
2248 2248 font-size: @journal-fontsize;
2249 2249 border-bottom: @border-thickness solid @border-default-color;
2250 2250 }
2251 2251
2252 2252 .journal_container{
2253 2253 margin-bottom: @space;
2254 2254
2255 2255 .journal_user{
2256 2256 display: inline-block;
2257 2257 }
2258 2258 .journal_action_container{
2259 2259 display: block;
2260 2260 margin-top: @textmargin;
2261 2261
2262 2262 div{
2263 2263 display: inline;
2264 2264 }
2265 2265
2266 2266 div.journal_action_params{
2267 2267 display: block;
2268 2268 }
2269 2269
2270 2270 div.journal_repo:after{
2271 2271 content: "\A";
2272 2272 white-space: pre;
2273 2273 }
2274 2274
2275 2275 div.date{
2276 2276 display: block;
2277 2277 margin-bottom: @textmargin;
2278 2278 }
2279 2279 }
2280 2280 }
2281 2281 }
2282 2282
2283 2283 // Files
2284 2284 .edit-file-title {
2285 2285 font-size: 16px;
2286 2286
2287 2287 .title-heading {
2288 2288 padding: 2px;
2289 2289 }
2290 2290 }
2291 2291
2292 2292 .edit-file-fieldset {
2293 2293 margin: @sidebarpadding 0;
2294 2294
2295 2295 .fieldset {
2296 2296 .left-label {
2297 2297 width: 13%;
2298 2298 }
2299 2299 .right-content {
2300 2300 width: 87%;
2301 2301 max-width: 100%;
2302 2302 }
2303 2303 .filename-label {
2304 2304 margin-top: 13px;
2305 2305 }
2306 2306 .commit-message-label {
2307 2307 margin-top: 4px;
2308 2308 }
2309 2309 .file-upload-input {
2310 2310 input {
2311 2311 display: none;
2312 2312 }
2313 2313 margin-top: 10px;
2314 2314 }
2315 2315 .file-upload-label {
2316 2316 margin-top: 10px;
2317 2317 }
2318 2318 p {
2319 2319 margin-top: 5px;
2320 2320 }
2321 2321
2322 2322 }
2323 2323 .custom-path-link {
2324 2324 margin-left: 5px;
2325 2325 }
2326 2326 #commit {
2327 2327 resize: vertical;
2328 2328 }
2329 2329 }
2330 2330
2331 2331 .delete-file-preview {
2332 2332 max-height: 250px;
2333 2333 }
2334 2334
2335 2335 .new-file,
2336 2336 #filter_activate,
2337 2337 #filter_deactivate {
2338 2338 float: right;
2339 2339 margin: 0 0 0 10px;
2340 2340 }
2341 2341
2342 2342 .file-upload-transaction-wrapper {
2343 2343 margin-top: 57px;
2344 2344 clear: both;
2345 2345 }
2346 2346
2347 2347 .file-upload-transaction-wrapper .error {
2348 2348 color: @color5;
2349 2349 }
2350 2350
2351 2351 .file-upload-transaction {
2352 2352 min-height: 200px;
2353 2353 padding: 54px;
2354 2354 border: 1px solid @grey5;
2355 2355 text-align: center;
2356 2356 clear: both;
2357 2357 }
2358 2358
2359 2359 .file-upload-transaction i {
2360 2360 font-size: 48px
2361 2361 }
2362 2362
2363 2363 h3.files_location{
2364 2364 line-height: 2.4em;
2365 2365 }
2366 2366
2367 2367 .browser-nav {
2368 2368 width: 100%;
2369 2369 display: table;
2370 2370 margin-bottom: 20px;
2371 2371
2372 2372 .info_box {
2373 2373 float: left;
2374 2374 display: inline-table;
2375 2375 height: 2.5em;
2376 2376
2377 2377 .browser-cur-rev, .info_box_elem {
2378 2378 display: table-cell;
2379 2379 vertical-align: middle;
2380 2380 }
2381 2381
2382 2382 .drop-menu {
2383 2383 margin: 0 10px;
2384 2384 }
2385 2385
2386 2386 .info_box_elem {
2387 2387 border-top: @border-thickness solid @grey5;
2388 2388 border-bottom: @border-thickness solid @grey5;
2389 2389 box-shadow: @button-shadow;
2390 2390
2391 2391 #at_rev, a {
2392 2392 padding: 0.6em 0.4em;
2393 2393 margin: 0;
2394 2394 .box-shadow(none);
2395 2395 border: 0;
2396 2396 height: 12px;
2397 2397 color: @grey2;
2398 2398 }
2399 2399
2400 2400 input#at_rev {
2401 2401 max-width: 50px;
2402 2402 text-align: center;
2403 2403 }
2404 2404
2405 2405 &.previous {
2406 2406 border: @border-thickness solid @grey5;
2407 2407 border-top-left-radius: @border-radius;
2408 2408 border-bottom-left-radius: @border-radius;
2409 2409
2410 2410 &:hover {
2411 2411 border-color: @grey4;
2412 2412 }
2413 2413
2414 2414 .disabled {
2415 2415 color: @grey5;
2416 2416 cursor: not-allowed;
2417 2417 opacity: 0.5;
2418 2418 }
2419 2419 }
2420 2420
2421 2421 &.next {
2422 2422 border: @border-thickness solid @grey5;
2423 2423 border-top-right-radius: @border-radius;
2424 2424 border-bottom-right-radius: @border-radius;
2425 2425
2426 2426 &:hover {
2427 2427 border-color: @grey4;
2428 2428 }
2429 2429
2430 2430 .disabled {
2431 2431 color: @grey5;
2432 2432 cursor: not-allowed;
2433 2433 opacity: 0.5;
2434 2434 }
2435 2435 }
2436 2436 }
2437 2437
2438 2438 .browser-cur-rev {
2439 2439
2440 2440 span{
2441 2441 margin: 0;
2442 2442 color: @rcblue;
2443 2443 height: 12px;
2444 2444 display: inline-block;
2445 2445 padding: 0.7em 1em ;
2446 2446 border: @border-thickness solid @rcblue;
2447 2447 margin-right: @padding;
2448 2448 }
2449 2449 }
2450 2450
2451 2451 }
2452 2452
2453 2453 .select-index-number {
2454 2454 margin: 0 0 0 20px;
2455 2455 color: @grey3;
2456 2456 }
2457 2457
2458 2458 .search_activate {
2459 2459 display: table-cell;
2460 2460 vertical-align: middle;
2461 2461
2462 2462 input, label{
2463 2463 margin: 0;
2464 2464 padding: 0;
2465 2465 }
2466 2466
2467 2467 input{
2468 2468 margin-left: @textmargin;
2469 2469 }
2470 2470
2471 2471 }
2472 2472 }
2473 2473
2474 2474 .browser-cur-rev{
2475 2475 margin-bottom: @textmargin;
2476 2476 }
2477 2477
2478 2478 #node_filter_box_loading{
2479 2479 .info_text;
2480 2480 }
2481 2481
2482 2482 .browser-search {
2483 2483 margin: -25px 0px 5px 0px;
2484 2484 }
2485 2485
2486 2486 .files-quick-filter {
2487 2487 float: right;
2488 2488 width: 180px;
2489 2489 position: relative;
2490 2490 }
2491 2491
2492 2492 .files-filter-box {
2493 2493 display: flex;
2494 2494 padding: 0px;
2495 2495 border-radius: 3px;
2496 2496 margin-bottom: 0;
2497 2497
2498 2498 a {
2499 2499 border: none !important;
2500 2500 }
2501 2501
2502 2502 li {
2503 2503 list-style-type: none
2504 2504 }
2505 2505 }
2506 2506
2507 2507 .files-filter-box-path {
2508 2508 line-height: 33px;
2509 2509 padding: 0;
2510 2510 width: 20px;
2511 2511 position: absolute;
2512 2512 z-index: 11;
2513 2513 left: 5px;
2514 2514 }
2515 2515
2516 2516 .files-filter-box-input {
2517 2517 margin-right: 0;
2518 2518
2519 2519 input {
2520 2520 border: 1px solid @white;
2521 2521 padding-left: 25px;
2522 2522 width: 145px;
2523 2523
2524 2524 &:hover {
2525 2525 border-color: @grey6;
2526 2526 }
2527 2527
2528 2528 &:focus {
2529 2529 border-color: @grey5;
2530 2530 }
2531 2531 }
2532 2532 }
2533 2533
2534 2534 .browser-result{
2535 2535 td a{
2536 2536 margin-left: 0.5em;
2537 2537 display: inline-block;
2538 2538
2539 2539 em {
2540 2540 font-weight: @text-bold-weight;
2541 2541 font-family: @text-bold;
2542 2542 }
2543 2543 }
2544 2544 }
2545 2545
2546 2546 .browser-highlight{
2547 2547 background-color: @grey5-alpha;
2548 2548 }
2549 2549
2550 2550
2551 2551 .edit-file-fieldset #location,
2552 2552 .edit-file-fieldset #filename {
2553 2553 display: flex;
2554 2554 width: -moz-available; /* WebKit-based browsers will ignore this. */
2555 2555 width: -webkit-fill-available; /* Mozilla-based browsers will ignore this. */
2556 2556 width: fill-available;
2557 2557 border: 0;
2558 2558 }
2559 2559
2560 2560 .path-items {
2561 2561 display: flex;
2562 2562 padding: 0;
2563 2563 border: 1px solid #eeeeee;
2564 2564 width: 100%;
2565 2565 float: left;
2566 2566
2567 2567 .breadcrumb-path {
2568 2568 line-height: 30px;
2569 2569 padding: 0 4px;
2570 2570 white-space: nowrap;
2571 2571 }
2572 2572
2573 2573 .upload-form {
2574 2574 margin-top: 46px;
2575 2575 }
2576 2576
2577 2577 .location-path {
2578 2578 width: -moz-available; /* WebKit-based browsers will ignore this. */
2579 2579 width: -webkit-fill-available; /* Mozilla-based browsers will ignore this. */
2580 2580 width: fill-available;
2581 2581
2582 2582 .file-name-input {
2583 2583 padding: 0.5em 0;
2584 2584 }
2585 2585
2586 2586 }
2587 2587
2588 2588 ul {
2589 2589 display: flex;
2590 2590 margin: 0;
2591 2591 padding: 0;
2592 2592 width: 100%;
2593 2593 }
2594 2594
2595 2595 li {
2596 2596 list-style-type: none;
2597 2597 }
2598 2598
2599 2599 }
2600 2600
2601 2601 .editor-items {
2602 2602 height: 40px;
2603 2603 margin: 10px 0 -17px 10px;
2604 2604
2605 2605 .editor-action {
2606 2606 cursor: pointer;
2607 2607 }
2608 2608
2609 2609 .editor-action.active {
2610 2610 border-bottom: 2px solid #5C5C5C;
2611 2611 }
2612 2612
2613 2613 li {
2614 2614 list-style-type: none;
2615 2615 }
2616 2616 }
2617 2617
2618 2618 .edit-file-fieldset .message textarea {
2619 2619 border: 1px solid #eeeeee;
2620 2620 }
2621 2621
2622 2622 #files_data .codeblock {
2623 2623 background-color: #F5F5F5;
2624 2624 }
2625 2625
2626 2626 #editor_preview {
2627 2627 background: white;
2628 2628 }
2629 2629
2630 2630 .show-editor {
2631 2631 padding: 10px;
2632 2632 background-color: white;
2633 2633
2634 2634 }
2635 2635
2636 2636 .show-preview {
2637 2637 padding: 10px;
2638 2638 background-color: white;
2639 2639 border-left: 1px solid #eeeeee;
2640 2640 }
2641 2641 // quick filter
2642 2642 .grid-quick-filter {
2643 2643 float: right;
2644 2644 position: relative;
2645 2645 }
2646 2646
2647 2647 .grid-filter-box {
2648 2648 display: flex;
2649 2649 padding: 0px;
2650 2650 border-radius: 3px;
2651 2651 margin-bottom: 0;
2652 2652
2653 2653 a {
2654 2654 border: none !important;
2655 2655 }
2656 2656
2657 2657 li {
2658 2658 list-style-type: none
2659 2659 }
2660 2660
2661 2661 }
2662 2662
2663 2663 .grid-filter-box-icon {
2664 2664 line-height: 33px;
2665 2665 padding: 0;
2666 2666 width: 20px;
2667 2667 position: absolute;
2668 2668 z-index: 11;
2669 2669 left: 5px;
2670 2670 }
2671 2671
2672 2672 .grid-filter-box-input {
2673 2673 margin-right: 0;
2674 2674
2675 2675 input {
2676 2676 border: 1px solid @white;
2677 2677 padding-left: 25px;
2678 2678 width: 145px;
2679 2679
2680 2680 &:hover {
2681 2681 border-color: @grey6;
2682 2682 }
2683 2683
2684 2684 &:focus {
2685 2685 border-color: @grey5;
2686 2686 }
2687 2687 }
2688 2688 }
2689 2689
2690 2690
2691 2691
2692 2692 // Search
2693 2693
2694 2694 .search-form{
2695 2695 #q {
2696 2696 width: @search-form-width;
2697 2697 }
2698 2698 .fields{
2699 2699 margin: 0 0 @space;
2700 2700 }
2701 2701
2702 2702 label{
2703 2703 display: inline-block;
2704 2704 margin-right: @textmargin;
2705 2705 padding-top: 0.25em;
2706 2706 }
2707 2707
2708 2708
2709 2709 .results{
2710 2710 clear: both;
2711 2711 margin: 0 0 @padding;
2712 2712 }
2713 2713
2714 2714 .search-tags {
2715 2715 padding: 5px 0;
2716 2716 }
2717 2717 }
2718 2718
2719 2719 div.search-feedback-items {
2720 2720 display: inline-block;
2721 2721 }
2722 2722
2723 2723 div.search-code-body {
2724 2724 background-color: #ffffff; padding: 5px 0 5px 10px;
2725 2725 pre {
2726 2726 .match { background-color: #faffa6;}
2727 2727 .break { display: block; width: 100%; background-color: #DDE7EF; color: #747474; }
2728 2728 }
2729 2729 }
2730 2730
2731 2731 .expand_commit.search {
2732 2732 .show_more.open {
2733 2733 height: auto;
2734 2734 max-height: none;
2735 2735 }
2736 2736 }
2737 2737
2738 2738 .search-results {
2739 2739
2740 2740 h2 {
2741 2741 margin-bottom: 0;
2742 2742 }
2743 2743 .codeblock {
2744 2744 border: none;
2745 2745 background: transparent;
2746 2746 }
2747 2747
2748 2748 .codeblock-header {
2749 2749 border: none;
2750 2750 background: transparent;
2751 2751 }
2752 2752
2753 2753 .code-body {
2754 2754 border: @border-thickness solid @grey6;
2755 2755 .border-radius(@border-radius);
2756 2756 }
2757 2757
2758 2758 .td-commit {
2759 2759 &:extend(pre);
2760 2760 border-bottom: @border-thickness solid @border-default-color;
2761 2761 }
2762 2762
2763 2763 .message {
2764 2764 height: auto;
2765 2765 max-width: 350px;
2766 2766 white-space: normal;
2767 2767 text-overflow: initial;
2768 2768 overflow: visible;
2769 2769
2770 2770 .match { background-color: #faffa6;}
2771 2771 .break { background-color: #DDE7EF; width: 100%; color: #747474; display: block; }
2772 2772 }
2773 2773
2774 2774 .path {
2775 2775 border-bottom: none !important;
2776 2776 border-left: 1px solid @grey6 !important;
2777 2777 border-right: 1px solid @grey6 !important;
2778 2778 }
2779 2779 }
2780 2780
2781 2781 table.rctable td.td-search-results div {
2782 2782 max-width: 100%;
2783 2783 }
2784 2784
2785 2785 #tip-box, .tip-box{
2786 2786 padding: @menupadding/2;
2787 2787 display: block;
2788 2788 border: @border-thickness solid @border-highlight-color;
2789 2789 .border-radius(@border-radius);
2790 2790 background-color: white;
2791 2791 z-index: 99;
2792 2792 white-space: pre-wrap;
2793 2793 }
2794 2794
2795 2795 #linktt {
2796 2796 width: 79px;
2797 2797 }
2798 2798
2799 2799 #help_kb .modal-content{
2800 2800 max-width: 800px;
2801 2801 margin: 10% auto;
2802 2802
2803 2803 table{
2804 2804 td,th{
2805 2805 border-bottom: none;
2806 2806 line-height: 2.5em;
2807 2807 }
2808 2808 th{
2809 2809 padding-bottom: @textmargin/2;
2810 2810 }
2811 2811 td.keys{
2812 2812 text-align: center;
2813 2813 }
2814 2814 }
2815 2815
2816 2816 .block-left{
2817 2817 width: 45%;
2818 2818 margin-right: 5%;
2819 2819 }
2820 2820 .modal-footer{
2821 2821 clear: both;
2822 2822 }
2823 2823 .key.tag{
2824 2824 padding: 0.5em;
2825 2825 background-color: @rcblue;
2826 2826 color: white;
2827 2827 border-color: @rcblue;
2828 2828 .box-shadow(none);
2829 2829 }
2830 2830 }
2831 2831
2832 2832
2833 2833
2834 2834 //--- IMPORTS FOR REFACTORED STYLES ------------------//
2835 2835
2836 2836 @import 'statistics-graph';
2837 2837 @import 'tables';
2838 2838 @import 'forms';
2839 2839 @import 'diff';
2840 2840 @import 'summary';
2841 2841 @import 'navigation';
2842 2842
2843 2843 //--- SHOW/HIDE SECTIONS --//
2844 2844
2845 2845 .btn-collapse {
2846 2846 float: right;
2847 2847 text-align: right;
2848 2848 font-family: @text-light;
2849 2849 font-size: @basefontsize;
2850 2850 cursor: pointer;
2851 2851 border: none;
2852 2852 color: @rcblue;
2853 2853 }
2854 2854
2855 2855 table.rctable,
2856 2856 table.dataTable {
2857 2857 .btn-collapse {
2858 2858 float: right;
2859 2859 text-align: right;
2860 2860 }
2861 2861 }
2862 2862
2863 2863 table.rctable {
2864 2864 &.permissions {
2865 2865
2866 2866 th.td-owner {
2867 2867 padding: 0;
2868 2868 }
2869 2869
2870 2870 th {
2871 2871 font-weight: normal;
2872 2872 padding: 0 5px;
2873 2873 }
2874 2874
2875 2875 }
2876 2876 }
2877 2877
2878 2878
2879 2879 // TODO: johbo: Fix for IE10, this avoids that we see a border
2880 2880 // and padding around checkboxes and radio boxes. Move to the right place,
2881 2881 // or better: Remove this once we did the form refactoring.
2882 2882 input[type=checkbox],
2883 2883 input[type=radio] {
2884 2884 padding: 0;
2885 2885 border: none;
2886 2886 }
2887 2887
2888 2888 .toggle-ajax-spinner{
2889 2889 height: 16px;
2890 2890 width: 16px;
2891 2891 }
2892 2892
2893 2893
2894 2894 .markup-form .clearfix {
2895 2895 .border-radius(@border-radius);
2896 2896 margin: 0px;
2897 2897 }
2898 2898
2899 2899 .markup-form-area {
2900 2900 padding: 8px 12px;
2901 2901 border: 1px solid @grey4;
2902 2902 .border-radius(@border-radius);
2903 2903 }
2904 2904
2905 2905 .markup-form-area-header .nav-links {
2906 2906 display: flex;
2907 2907 flex-flow: row wrap;
2908 2908 -webkit-flex-flow: row wrap;
2909 2909 width: 100%;
2910 2910 }
2911 2911
2912 2912 .markup-form-area-footer {
2913 2913 display: flex;
2914 2914 }
2915 2915
2916 2916 .markup-form-area-footer .toolbar {
2917 2917
2918 2918 }
2919 2919
2920 2920 // markup Form
2921 2921 div.markup-form {
2922 2922 margin-top: 20px;
2923 2923 }
2924 2924
2925 2925 .markup-form strong {
2926 2926 display: block;
2927 2927 margin-bottom: 15px;
2928 2928 }
2929 2929
2930 2930 .markup-form textarea {
2931 2931 width: 100%;
2932 2932 height: 100px;
2933 2933 font-family: @text-monospace;
2934 2934 }
2935 2935
2936 2936 form.markup-form {
2937 2937 margin-top: 10px;
2938 2938 margin-left: 10px;
2939 2939 }
2940 2940
2941 2941 .markup-form .comment-block-ta,
2942 2942 .markup-form .preview-box {
2943 2943 .border-radius(@border-radius);
2944 2944 .box-sizing(border-box);
2945 2945 background-color: white;
2946 2946 }
2947 2947
2948 2948 .markup-form .preview-box.unloaded {
2949 2949 height: 50px;
2950 2950 text-align: center;
2951 2951 padding: 20px;
2952 2952 background-color: white;
2953 2953 }
2954 2954
2955 2955
2956 2956 .dropzone-wrapper {
2957 2957 border: 1px solid @grey5;
2958 2958 padding: 20px;
2959 2959 }
2960 2960
2961 2961 .dropzone,
2962 2962 .dropzone-pure {
2963 2963 border: 2px dashed @grey5;
2964 2964 border-radius: 5px;
2965 2965 background: white;
2966 2966 min-height: 200px;
2967 2967 padding: 54px;
2968 2968
2969 2969 .dz-message {
2970 2970 font-weight: 700;
2971 2971 text-align: center;
2972 2972 margin: 2em 0;
2973 2973 }
2974 2974
2975 2975 }
2976 2976
2977 2977 .dz-preview {
2978 2978 margin: 10px 0 !important;
2979 2979 position: relative;
2980 2980 vertical-align: top;
2981 2981 padding: 10px;
2982 2982 border-bottom: 1px solid @grey5;
2983 2983 }
2984 2984
2985 2985 .dz-filename {
2986 2986 font-weight: 700;
2987 2987 float: left;
2988 2988 }
2989 2989
2990 2990 .dz-sending {
2991 2991 float: right;
2992 2992 }
2993 2993
2994 2994 .dz-response {
2995 2995 clear: both
2996 2996 }
2997 2997
2998 2998 .dz-filename-size {
2999 2999 float: right
3000 3000 }
3001 3001
3002 3002 .dz-error-message {
3003 3003 color: @alert2;
3004 3004 padding-top: 10px;
3005 3005 clear: both;
3006 3006 }
3007 3007
3008 3008
3009 3009 .user-hovercard {
3010 3010 padding: 5px;
3011 3011 }
3012 3012
3013 3013 .user-hovercard-icon {
3014 3014 display: inline;
3015 3015 padding: 0;
3016 3016 box-sizing: content-box;
3017 3017 border-radius: 50%;
3018 3018 float: left;
3019 3019 }
3020 3020
3021 3021 .user-hovercard-name {
3022 3022 float: right;
3023 3023 vertical-align: top;
3024 3024 padding-left: 10px;
3025 3025 min-width: 150px;
3026 3026 }
3027 3027
3028 3028 .user-hovercard-bio {
3029 3029 clear: both;
3030 3030 padding-top: 10px;
3031 3031 }
3032 3032
3033 3033 .user-hovercard-header {
3034 3034 clear: both;
3035 3035 min-height: 10px;
3036 3036 }
3037 3037
3038 3038 .user-hovercard-footer {
3039 3039 clear: both;
3040 3040 min-height: 10px;
3041 3041 }
3042 3042
3043 3043 .user-group-hovercard {
3044 3044 padding: 5px;
3045 3045 }
3046 3046
3047 3047 .user-group-hovercard-icon {
3048 3048 display: inline;
3049 3049 padding: 0;
3050 3050 box-sizing: content-box;
3051 3051 border-radius: 50%;
3052 3052 float: left;
3053 3053 }
3054 3054
3055 3055 .user-group-hovercard-name {
3056 3056 float: left;
3057 3057 vertical-align: top;
3058 3058 padding-left: 10px;
3059 3059 min-width: 150px;
3060 3060 }
3061 3061
3062 3062 .user-group-hovercard-icon i {
3063 3063 border: 1px solid @grey4;
3064 3064 border-radius: 4px;
3065 3065 }
3066 3066
3067 3067 .user-group-hovercard-bio {
3068 3068 clear: both;
3069 3069 padding-top: 10px;
3070 3070 line-height: 1.0em;
3071 3071 }
3072 3072
3073 3073 .user-group-hovercard-header {
3074 3074 clear: both;
3075 3075 min-height: 10px;
3076 3076 }
3077 3077
3078 3078 .user-group-hovercard-footer {
3079 3079 clear: both;
3080 3080 min-height: 10px;
3081 3081 }
3082 3082
3083 3083 .pr-hovercard-header {
3084 3084 clear: both;
3085 3085 display: block;
3086 3086 line-height: 20px;
3087 3087 }
3088 3088
3089 3089 .pr-hovercard-user {
3090 3090 display: flex;
3091 3091 align-items: center;
3092 3092 padding-left: 5px;
3093 3093 }
3094 3094
3095 3095 .pr-hovercard-title {
3096 3096 padding-top: 5px;
3097 3097 }
3098 3098
3099 3099 .action-divider {
3100 3100 opacity: 0.5;
3101 3101 }
3102 3102
3103 3103 .details-inline-block {
3104 3104 display: inline-block;
3105 3105 position: relative;
3106 3106 }
3107 3107
3108 3108 .details-inline-block summary {
3109 3109 list-style: none;
3110 3110 }
3111 3111
3112 3112 details:not([open]) > :not(summary) {
3113 3113 display: none !important;
3114 3114 }
3115 3115
3116 3116 .details-reset > summary {
3117 3117 list-style: none;
3118 3118 }
3119 3119
3120 3120 .details-reset > summary::-webkit-details-marker {
3121 3121 display: none;
3122 3122 }
3123 3123
3124 3124 .details-dropdown {
3125 3125 position: absolute;
3126 3126 top: 100%;
3127 3127 width: 185px;
3128 3128 list-style: none;
3129 3129 background-color: #fff;
3130 3130 background-clip: padding-box;
3131 3131 border: 1px solid @grey5;
3132 3132 box-shadow: 0 8px 24px rgba(149, 157, 165, .2);
3133 3133 left: -150px;
3134 3134 text-align: left;
3135 3135 z-index: 90;
3136 3136 }
3137 3137
3138 3138 .dropdown-divider {
3139 3139 display: block;
3140 3140 height: 0;
3141 3141 margin: 8px 0;
3142 3142 border-top: 1px solid @grey5;
3143 3143 }
3144 3144
3145 3145 .dropdown-item {
3146 3146 display: block;
3147 3147 padding: 4px 8px 4px 16px;
3148 3148 overflow: hidden;
3149 3149 text-overflow: ellipsis;
3150 3150 white-space: nowrap;
3151 3151 font-weight: normal;
3152 3152 }
3153 3153
3154 3154 .right-sidebar {
3155 3155 position: fixed;
3156 3156 top: 0px;
3157 3157 bottom: 0;
3158 3158 right: 0;
3159 3159
3160 3160 background: #fafafa;
3161 3161 z-index: 50;
3162 3162 }
3163 3163
3164 3164 .right-sidebar {
3165 3165 border-left: 1px solid @grey5;
3166 3166 }
3167 3167
3168 3168 .right-sidebar.right-sidebar-expanded {
3169 3169 width: 300px;
3170 3170 overflow: scroll;
3171 3171 }
3172 3172
3173 3173 .right-sidebar.right-sidebar-collapsed {
3174 3174 width: 40px;
3175 3175 padding: 0;
3176 3176 display: block;
3177 3177 overflow: hidden;
3178 3178 }
3179 3179
3180 3180 .sidenav {
3181 3181 float: right;
3182 3182 will-change: min-height;
3183 3183 background: #fafafa;
3184 3184 width: 100%;
3185 3185 }
3186 3186
3187 3187 .sidebar-toggle {
3188 3188 height: 30px;
3189 3189 text-align: center;
3190 3190 margin: 15px 0px 0 0;
3191 3191 }
3192 3192
3193 3193 .sidebar-toggle a {
3194 3194
3195 3195 }
3196 3196
3197 3197 .sidebar-content {
3198 3198 margin-left: 15px;
3199 3199 margin-right: 15px;
3200 3200 }
3201 3201
3202 3202 .sidebar-heading {
3203 3203 font-size: 1.2em;
3204 3204 font-weight: 700;
3205 3205 margin-top: 10px;
3206 3206 }
3207 3207
3208 3208 .sidebar-element {
3209 3209 margin-top: 20px;
3210 3210
3211 3211 .icon-draft {
3212 3212 color: @color-draft
3213 3213 }
3214 3214 }
3215 3215
3216 3216
3217 3217 .right-sidebar-collapsed-state {
3218 3218 display: flex;
3219 3219 flex-direction: column;
3220 3220 justify-content: center;
3221 3221 align-items: center;
3222 3222 padding: 0 10px;
3223 3223 cursor: pointer;
3224 3224 font-size: 1.3em;
3225 3225 margin: 0 -15px;
3226 3226 }
3227 3227
3228 3228 .right-sidebar-collapsed-state:hover {
3229 3229 background-color: @grey5;
3230 3230 }
3231 3231
3232 3232 .old-comments-marker {
3233 3233 text-align: left;
3234 3234 }
3235 3235
3236 3236 .old-comments-marker td {
3237 3237 padding-top: 15px;
3238 3238 }
3239
3240 .inline-menu {
3241 display: inline-flex;
3242 list-style: none;
3243 margin: 0;
3244 padding: 0;
3245 }
3246
3247 .inline-menu-item {
3248 display: inline-flex;
3249 justify-content: center;
3250 position: relative;
3251 }
3252
3253 .inline-menu-item-ellipsis {
3254 overflow: hidden;
3255 white-space: nowrap; /* Don't forget this one */
3256 text-overflow: ellipsis;
3257 width: 130px;
3258 }
@@ -1,440 +1,422 b''
1 1
2 2 <%inherit file="/base/base.mako"/>
3 3 <%namespace name="base" file="/base/base.mako"/>
4 4 <%namespace name="diff_block" file="/changeset/diff_block.mako"/>
5 5 <%namespace name="file_base" file="/files/base.mako"/>
6 6 <%namespace name="sidebar" file="/base/sidebar.mako"/>
7 7
8 8
9 9 <%def name="title()">
10 10 ${_('{} Commit').format(c.repo_name)} - ${h.show_id(c.commit)}
11 11 %if c.rhodecode_name:
12 12 &middot; ${h.branding(c.rhodecode_name)}
13 13 %endif
14 14 </%def>
15 15
16 16 <%def name="menu_bar_nav()">
17 17 ${self.menu_items(active='repositories')}
18 18 </%def>
19 19
20 20 <%def name="menu_bar_subnav()">
21 21 ${self.repo_menu(active='commits')}
22 22 </%def>
23 23
24 24 <%def name="main()">
25 25 <script type="text/javascript">
26 26 templateContext.commit_data.commit_id = "${c.commit.raw_id}";
27 27 </script>
28 28
29 29 <div class="box">
30 30
31 31 <div class="summary">
32 32
33 33 <div class="fieldset">
34 34 <div class="left-content">
35 35 <%
36 36 rc_user = h.discover_user(c.commit.author_email)
37 37 %>
38 38 <div class="left-content-avatar">
39 39 <%
40 40 email = h.email_or_none(c.commit.author)
41 41 rc_user = h.discover_user(c.commit.author)
42 42 %>
43 43 ${base.gravatar(email, 30, tooltip=(True if rc_user else False), user=rc_user)}
44 44
45 45 </div>
46 46
47 47 <div class="left-content-message">
48 48 <div class="fieldset collapsable-content no-hide" data-toggle="summary-details">
49 49 <div class="commit truncate-wrap">${h.urlify_commit_message(h.chop_at_smart(c.commit.message, '\n', suffix_if_chopped='...'), c.repo_name)}</div>
50 50 </div>
51 51
52 52 <div class="fieldset collapsable-content" data-toggle="summary-details" style="display: none">
53 53
54 54 <div class="commit">${h.urlify_commit_message(c.commit.message,c.repo_name)}</div>
55 55 </div>
56 56
57 57 <div class="fieldset" data-toggle="summary-details">
58 58 <div class="">
59 59 <table>
60 60 <tr class="file_author">
61 61
62 62 <td>
63 63 <span class="user commit-author">${h.link_to_user(rc_user or c.commit.author)}</span>
64 64 <span class="commit-date">- ${h.age_component(c.commit.date)}</span>
65 65 </td>
66 66
67 67 <td>
68 68 ## second cell for consistency with files
69 69 </td>
70 70 </tr>
71 71 </table>
72 72 </div>
73 73 </div>
74 74
75 75 </div>
76 76 </div>
77 77
78 78 <div class="right-content">
79 79
80 80 <div data-toggle="summary-details">
81 81 <div class="tags tags-main">
82 82 <code><a href="${h.route_path('repo_commit',repo_name=c.repo_name,commit_id=c.commit.raw_id)}">${h.show_id(c.commit)}</a></code>
83 83 <i class="tooltip icon-clipboard clipboard-action" data-clipboard-text="${c.commit.raw_id}" title="${_('Copy the full commit id')}"></i>
84 84 ${file_base.refs(c.commit)}
85 85
86 86
87 87 ## phase
88 88 % if hasattr(c.commit, 'phase') and getattr(c.commit, 'phase') != 'public':
89 89 <span class="tag phase-${c.commit.phase} tooltip" title="${_('Commit phase')}">
90 90 <i class="icon-info"></i>${c.commit.phase}
91 91 </span>
92 92 % endif
93 93
94 94 ## obsolete commits
95 95 % if getattr(c.commit, 'obsolete', False):
96 96 <span class="tag obsolete-${c.commit.obsolete} tooltip" title="${_('Evolve State')}">
97 97 ${_('obsolete')}
98 98 </span>
99 99 % endif
100 100
101 101 ## hidden commits
102 102 % if getattr(c.commit, 'hidden', False):
103 103 <span class="tag hidden-${c.commit.hidden} tooltip" title="${_('Evolve State')}">
104 104 ${_('hidden')}
105 105 </span>
106 106 % endif
107 107 </div>
108 108
109 109 <span id="parent_link" class="tag tagtag">
110 110 <a href="#parentCommit" title="${_('Parent Commit')}"><i class="icon-left icon-no-margin"></i>${_('parent')}</a>
111 111 </span>
112 112
113 113 <span id="child_link" class="tag tagtag">
114 114 <a href="#childCommit" title="${_('Child Commit')}">${_('child')}<i class="icon-right icon-no-margin"></i></a>
115 115 </span>
116 116 <span class="tag tooltip" title="${_('Browse files at this commit')}">
117 117 <i class="icon-code"></i>
118 118 <a href="${h.route_path('repo_files', repo_name=c.repo_name, commit_id=c.commit.raw_id, f_path='')}">${_('Browse files')}</a>
119 119 </span>
120 120
121 121 </div>
122 122
123 123 </div>
124 124 </div>
125 125
126 126 <div class="fieldset collapsable-content" data-toggle="summary-details" style="display: none;">
127 <div class="left-label-summary">
128 <p>${_('Diff options')}:</p>
129 <div class="right-label-summary">
130 <div class="diff-actions">
131 <a href="${h.route_path('repo_commit_raw',repo_name=c.repo_name,commit_id=c.commit.raw_id)}">
132 ${_('Raw Diff')}
133 </a>
134 |
135 <a href="${h.route_path('repo_commit_patch',repo_name=c.repo_name,commit_id=c.commit.raw_id)}">
136 ${_('Patch Diff')}
137 </a>
138 |
139 <a href="${h.route_path('repo_commit_download',repo_name=c.repo_name,commit_id=c.commit.raw_id,_query=dict(diff='download'))}">
140 ${_('Download Diff')}
141 </a>
142 </div>
143 </div>
144 </div>
145 127 </div>
146 128
147 129 <div class="clear-fix"></div>
148 130
149 131 <div class="btn-collapse" data-toggle="summary-details">
150 132 ${_('Show More')}
151 133 </div>
152 134
153 135 </div>
154 136
155 137 <div class="cs_files">
156 138 <%namespace name="cbdiffs" file="/codeblocks/diffs.mako"/>
157 139 ${cbdiffs.render_diffset_menu(c.changes[c.commit.raw_id], commit=c.commit)}
158 140 ${cbdiffs.render_diffset(
159 141 c.changes[c.commit.raw_id], commit=c.commit, use_comments=True,
160 142 inline_comments=c.inline_comments,
161 143 show_todos=False)}
162 144 </div>
163 145
164 146 ## template for inline comment form
165 147 <%namespace name="comment" file="/changeset/changeset_file_comment.mako"/>
166 148
167 149 ## comments heading with count
168 150 <div class="comments-heading">
169 151 <i class="icon-comment"></i>
170 152 ${_('General Comments')} ${len(c.comments)}
171 153 </div>
172 154
173 155 ## render comments
174 156 ${comment.generate_comments(c.comments)}
175 157
176 158 ## main comment form and it status
177 159 ${comment.comments(h.route_path('repo_commit_comment_create', repo_name=c.repo_name, commit_id=c.commit.raw_id),
178 160 h.commit_status(c.rhodecode_db_repo, c.commit.raw_id))}
179 161 </div>
180 162
181 163 ### NAV SIDEBAR
182 164 <aside class="right-sidebar right-sidebar-expanded" id="commit-nav-sticky" style="display: none">
183 165 <div class="sidenav navbar__inner" >
184 166 ## TOGGLE
185 167 <div class="sidebar-toggle" onclick="toggleSidebar(); return false">
186 168 <a href="#toggleSidebar" class="grey-link-action">
187 169
188 170 </a>
189 171 </div>
190 172
191 173 ## CONTENT
192 174 <div class="sidebar-content">
193 175
194 176 ## RULES SUMMARY/RULES
195 177 <div class="sidebar-element clear-both">
196 178 <% vote_title = _ungettext(
197 179 'Status calculated based on votes from {} reviewer',
198 180 'Status calculated based on votes from {} reviewers', c.reviewers_count).format(c.reviewers_count)
199 181 %>
200 182
201 183 <div class="tooltip right-sidebar-collapsed-state" style="display: none" onclick="toggleSidebar(); return false" title="${vote_title}">
202 184 <i class="icon-circle review-status-${c.commit_review_status}"></i>
203 185 ${c.reviewers_count}
204 186 </div>
205 187 </div>
206 188
207 189 ## REVIEWERS
208 190 <div class="right-sidebar-expanded-state pr-details-title">
209 191 <span class="tooltip sidebar-heading" title="${vote_title}">
210 192 <i class="icon-circle review-status-${c.commit_review_status}"></i>
211 193 ${_('Reviewers')}
212 194 </span>
213 195 </div>
214 196
215 197 <div id="reviewers" class="right-sidebar-expanded-state pr-details-content reviewers">
216 198
217 199 <table id="review_members" class="group_members">
218 200 ## This content is loaded via JS and ReviewersPanel
219 201 </table>
220 202
221 203 </div>
222 204
223 205 ## TODOs
224 206 <div class="sidebar-element clear-both">
225 207 <div class="tooltip right-sidebar-collapsed-state" style="display: none" onclick="toggleSidebar(); return false" title="TODOs">
226 208 <i class="icon-flag-filled"></i>
227 209 <span id="todos-count">${len(c.unresolved_comments)}</span>
228 210 </div>
229 211
230 212 <div class="right-sidebar-expanded-state pr-details-title">
231 213 ## Only show unresolved, that is only what matters
232 214 <span class="sidebar-heading noselect" onclick="refreshTODOs(); return false">
233 215 <i class="icon-flag-filled"></i>
234 216 TODOs
235 217 </span>
236 218
237 219 % if c.resolved_comments:
238 220 <span class="block-right action_button last-item noselect" onclick="$('.unresolved-todo-text').toggle(); return toggleElement(this, '.resolved-todo');" data-toggle-on="Show resolved" data-toggle-off="Hide resolved">Show resolved</span>
239 221 % else:
240 222 <span class="block-right last-item noselect">Show resolved</span>
241 223 % endif
242 224
243 225 </div>
244 226
245 227 <div class="right-sidebar-expanded-state pr-details-content">
246 228 % if c.unresolved_comments + c.resolved_comments:
247 229 ${sidebar.comments_table(c.unresolved_comments + c.resolved_comments, len(c.unresolved_comments), todo_comments=True, is_pr=False)}
248 230 % else:
249 231 <table>
250 232 <tr>
251 233 <td>
252 234 ${_('No TODOs yet')}
253 235 </td>
254 236 </tr>
255 237 </table>
256 238 % endif
257 239 </div>
258 240 </div>
259 241
260 242 ## COMMENTS
261 243 <div class="sidebar-element clear-both">
262 244 <div class="tooltip right-sidebar-collapsed-state" style="display: none" onclick="toggleSidebar(); return false" title="${_('Comments')}">
263 245 <i class="icon-comment" style="color: #949494"></i>
264 246 <span id="comments-count">${len(c.inline_comments_flat+c.comments)}</span>
265 247 <span class="display-none" id="general-comments-count">${len(c.comments)}</span>
266 248 <span class="display-none" id="inline-comments-count">${len(c.inline_comments_flat)}</span>
267 249 </div>
268 250
269 251 <div class="right-sidebar-expanded-state pr-details-title">
270 252 <span class="sidebar-heading noselect" onclick="refreshComments(); return false">
271 253 <i class="icon-comment" style="color: #949494"></i>
272 254 ${_('Comments')}
273 255 </span>
274 256
275 257 </div>
276 258
277 259 <div class="right-sidebar-expanded-state pr-details-content">
278 260 % if c.inline_comments_flat + c.comments:
279 261 ${sidebar.comments_table(c.inline_comments_flat + c.comments, len(c.inline_comments_flat+c.comments), is_pr=False)}
280 262 % else:
281 263 <table>
282 264 <tr>
283 265 <td>
284 266 ${_('No Comments yet')}
285 267 </td>
286 268 </tr>
287 269 </table>
288 270 % endif
289 271 </div>
290 272
291 273 </div>
292 274
293 275 </div>
294 276
295 277 </div>
296 278 </aside>
297 279
298 280 ## FORM FOR MAKING JS ACTION AS CHANGESET COMMENTS
299 281 <script type="text/javascript">
300 282 window.setReviewersData = ${c.commit_set_reviewers_data_json | n};
301 283
302 284 $(document).ready(function () {
303 285 var boxmax = parseInt($('#trimmed_message_box').css('max-height'), 10);
304 286
305 287 if ($('#trimmed_message_box').height() === boxmax) {
306 288 $('#message_expand').show();
307 289 }
308 290
309 291 $('#message_expand').on('click', function (e) {
310 292 $('#trimmed_message_box').css('max-height', 'none');
311 293 $(this).hide();
312 294 });
313 295
314 296 $('.show-inline-comments').on('click', function (e) {
315 297 var boxid = $(this).attr('data-comment-id');
316 298 var button = $(this);
317 299
318 300 if (button.hasClass("comments-visible")) {
319 301 $('#{0} .inline-comments'.format(boxid)).each(function (index) {
320 302 $(this).hide();
321 303 });
322 304 button.removeClass("comments-visible");
323 305 } else {
324 306 $('#{0} .inline-comments'.format(boxid)).each(function (index) {
325 307 $(this).show();
326 308 });
327 309 button.addClass("comments-visible");
328 310 }
329 311 });
330 312
331 313 // next links
332 314 $('#child_link').on('click', function (e) {
333 315 // fetch via ajax what is going to be the next link, if we have
334 316 // >1 links show them to user to choose
335 317 if (!$('#child_link').hasClass('disabled')) {
336 318 $.ajax({
337 319 url: '${h.route_path('repo_commit_children',repo_name=c.repo_name, commit_id=c.commit.raw_id)}',
338 320 success: function (data) {
339 321 if (data.results.length === 0) {
340 322 $('#child_link').html("${_('No Child Commits')}").addClass('disabled');
341 323 }
342 324 if (data.results.length === 1) {
343 325 var commit = data.results[0];
344 326 window.location = pyroutes.url('repo_commit', {
345 327 'repo_name': '${c.repo_name}',
346 328 'commit_id': commit.raw_id
347 329 });
348 330 } else if (data.results.length === 2) {
349 331 $('#child_link').addClass('disabled');
350 332 $('#child_link').addClass('double');
351 333
352 334 var _html = '';
353 335 _html += '<a title="__title__" href="__url__"><span class="tag branchtag"><i class="icon-code-fork"></i>__branch__</span> __rev__</a> '
354 336 .replace('__branch__', data.results[0].branch)
355 337 .replace('__rev__', 'r{0}:{1}'.format(data.results[0].revision, data.results[0].raw_id.substr(0, 6)))
356 338 .replace('__title__', data.results[0].message)
357 339 .replace('__url__', pyroutes.url('repo_commit', {
358 340 'repo_name': '${c.repo_name}',
359 341 'commit_id': data.results[0].raw_id
360 342 }));
361 343 _html += ' | ';
362 344 _html += '<a title="__title__" href="__url__"><span class="tag branchtag"><i class="icon-code-fork"></i>__branch__</span> __rev__</a> '
363 345 .replace('__branch__', data.results[1].branch)
364 346 .replace('__rev__', 'r{0}:{1}'.format(data.results[1].revision, data.results[1].raw_id.substr(0, 6)))
365 347 .replace('__title__', data.results[1].message)
366 348 .replace('__url__', pyroutes.url('repo_commit', {
367 349 'repo_name': '${c.repo_name}',
368 350 'commit_id': data.results[1].raw_id
369 351 }));
370 352 $('#child_link').html(_html);
371 353 }
372 354 }
373 355 });
374 356 e.preventDefault();
375 357 }
376 358 });
377 359
378 360 // prev links
379 361 $('#parent_link').on('click', function (e) {
380 362 // fetch via ajax what is going to be the next link, if we have
381 363 // >1 links show them to user to choose
382 364 if (!$('#parent_link').hasClass('disabled')) {
383 365 $.ajax({
384 366 url: '${h.route_path("repo_commit_parents",repo_name=c.repo_name, commit_id=c.commit.raw_id)}',
385 367 success: function (data) {
386 368 if (data.results.length === 0) {
387 369 $('#parent_link').html('${_('No Parent Commits')}').addClass('disabled');
388 370 }
389 371 if (data.results.length === 1) {
390 372 var commit = data.results[0];
391 373 window.location = pyroutes.url('repo_commit', {
392 374 'repo_name': '${c.repo_name}',
393 375 'commit_id': commit.raw_id
394 376 });
395 377 } else if (data.results.length === 2) {
396 378 $('#parent_link').addClass('disabled');
397 379 $('#parent_link').addClass('double');
398 380
399 381 var _html = '';
400 382 _html += '<a title="__title__" href="__url__"><span class="tag branchtag"><i class="icon-code-fork"></i>__branch__</span> __rev__</a>'
401 383 .replace('__branch__', data.results[0].branch)
402 384 .replace('__rev__', 'r{0}:{1}'.format(data.results[0].revision, data.results[0].raw_id.substr(0, 6)))
403 385 .replace('__title__', data.results[0].message)
404 386 .replace('__url__', pyroutes.url('repo_commit', {
405 387 'repo_name': '${c.repo_name}',
406 388 'commit_id': data.results[0].raw_id
407 389 }));
408 390 _html += ' | ';
409 391 _html += '<a title="__title__" href="__url__"><span class="tag branchtag"><i class="icon-code-fork"></i>__branch__</span> __rev__</a>'
410 392 .replace('__branch__', data.results[1].branch)
411 393 .replace('__rev__', 'r{0}:{1}'.format(data.results[1].revision, data.results[1].raw_id.substr(0, 6)))
412 394 .replace('__title__', data.results[1].message)
413 395 .replace('__url__', pyroutes.url('repo_commit', {
414 396 'repo_name': '${c.repo_name}',
415 397 'commit_id': data.results[1].raw_id
416 398 }));
417 399 $('#parent_link').html(_html);
418 400 }
419 401 }
420 402 });
421 403 e.preventDefault();
422 404 }
423 405 });
424 406
425 407 // browse tree @ revision
426 408 $('#files_link').on('click', function (e) {
427 409 window.location = '${h.route_path('repo_files:default_path',repo_name=c.repo_name, commit_id=c.commit.raw_id)}';
428 410 e.preventDefault();
429 411 });
430 412
431 413 reviewersController = new ReviewersController();
432 414 ReviewersPanel.init(reviewersController, null, setReviewersData);
433 415
434 416 var channel = '${c.commit_broadcast_channel}';
435 417 new ReviewerPresenceController(channel)
436 418
437 419 })
438 420 </script>
439 421
440 422 </%def>
@@ -1,1403 +1,1421 b''
1 1 <%namespace name="base" file="/base/base.mako"/>
2 2 <%namespace name="commentblock" file="/changeset/changeset_file_comment.mako"/>
3 3
4 4 <%def name="diff_line_anchor(commit, filename, line, type)"><%
5 5 return '%s_%s_%i' % (h.md5_safe(commit+filename), type, line)
6 6 %></%def>
7 7
8 8 <%def name="action_class(action)">
9 9 <%
10 10 return {
11 11 '-': 'cb-deletion',
12 12 '+': 'cb-addition',
13 13 ' ': 'cb-context',
14 14 }.get(action, 'cb-empty')
15 15 %>
16 16 </%def>
17 17
18 18 <%def name="op_class(op_id)">
19 19 <%
20 20 return {
21 21 DEL_FILENODE: 'deletion', # file deleted
22 22 BIN_FILENODE: 'warning' # binary diff hidden
23 23 }.get(op_id, 'addition')
24 24 %>
25 25 </%def>
26 26
27 27
28 28
29 29 <%def name="render_diffset(diffset, commit=None,
30 30
31 31 # collapse all file diff entries when there are more than this amount of files in the diff
32 32 collapse_when_files_over=20,
33 33
34 34 # collapse lines in the diff when more than this amount of lines changed in the file diff
35 35 lines_changed_limit=500,
36 36
37 37 # add a ruler at to the output
38 38 ruler_at_chars=0,
39 39
40 40 # show inline comments
41 41 use_comments=False,
42 42
43 43 # disable new comments
44 44 disable_new_comments=False,
45 45
46 46 # special file-comments that were deleted in previous versions
47 47 # it's used for showing outdated comments for deleted files in a PR
48 48 deleted_files_comments=None,
49 49
50 50 # for cache purpose
51 51 inline_comments=None,
52 52
53 53 # additional menu for PRs
54 54 pull_request_menu=None,
55 55
56 56 # show/hide todo next to comments
57 57 show_todos=True,
58 58
59 59 )">
60 60
61 61 <%
62 62 diffset_container_id = h.md5_safe(diffset.target_ref)
63 63 collapse_all = len(diffset.files) > collapse_when_files_over
64 64 active_pattern_entries = h.get_active_pattern_entries(getattr(c, 'repo_name', None))
65 65 from rhodecode.lib.diffs import NEW_FILENODE, DEL_FILENODE, \
66 66 MOD_FILENODE, RENAMED_FILENODE, CHMOD_FILENODE, BIN_FILENODE, COPIED_FILENODE
67 67 %>
68 68
69 69 %if use_comments:
70 70
71 71 ## Template for injecting comments
72 72 <div id="cb-comments-inline-container-template" class="js-template">
73 73 ${inline_comments_container([])}
74 74 </div>
75 75
76 76 <div class="js-template" id="cb-comment-inline-form-template">
77 77 <div class="comment-inline-form ac">
78 78 %if not c.rhodecode_user.is_default:
79 79 ## render template for inline comments
80 80 ${commentblock.comment_form(form_type='inline')}
81 81 %endif
82 82 </div>
83 83 </div>
84 84
85 85 %endif
86 86
87 87 %if c.user_session_attrs["diffmode"] == 'sideside':
88 88 <style>
89 89 .wrapper {
90 90 max-width: 1600px !important;
91 91 }
92 92 </style>
93 93 %endif
94 94
95 95 %if ruler_at_chars:
96 96 <style>
97 97 .diff table.cb .cb-content:after {
98 98 content: "";
99 99 border-left: 1px solid blue;
100 100 position: absolute;
101 101 top: 0;
102 102 height: 18px;
103 103 opacity: .2;
104 104 z-index: 10;
105 105 //## +5 to account for diff action (+/-)
106 106 left: ${ruler_at_chars + 5}ch;
107 107 </style>
108 108 %endif
109 109
110 110 <div class="diffset ${disable_new_comments and 'diffset-comments-disabled'}">
111 111
112 112 <div style="height: 20px; line-height: 20px">
113 113 ## expand/collapse action
114 114 <div class="pull-left">
115 115 <a class="${'collapsed' if collapse_all else ''}" href="#expand-files" onclick="toggleExpand(this, '${diffset_container_id}'); return false">
116 116 % if collapse_all:
117 117 <i class="icon-plus-squared-alt icon-no-margin"></i>${_('Expand all files')}
118 118 % else:
119 119 <i class="icon-minus-squared-alt icon-no-margin"></i>${_('Collapse all files')}
120 120 % endif
121 121 </a>
122 122
123 123 </div>
124 124
125 125 ## todos
126 126 % if show_todos and getattr(c, 'at_version', None):
127 127 <div class="pull-right">
128 128 <i class="icon-flag-filled" style="color: #949494">TODOs:</i>
129 129 ${_('not available in this view')}
130 130 </div>
131 131 % elif show_todos:
132 132 <div class="pull-right">
133 133 <div class="comments-number" style="padding-left: 10px">
134 134 % if hasattr(c, 'unresolved_comments') and hasattr(c, 'resolved_comments'):
135 135 <i class="icon-flag-filled" style="color: #949494">TODOs:</i>
136 136 % if c.unresolved_comments:
137 137 <a href="#show-todos" onclick="$('#todo-box').toggle(); return false">
138 138 ${_('{} unresolved').format(len(c.unresolved_comments))}
139 139 </a>
140 140 % else:
141 141 ${_('0 unresolved')}
142 142 % endif
143 143
144 144 ${_('{} Resolved').format(len(c.resolved_comments))}
145 145 % endif
146 146 </div>
147 147 </div>
148 148 % endif
149 149
150 150 ## ## comments
151 151 ## <div class="pull-right">
152 152 ## <div class="comments-number" style="padding-left: 10px">
153 153 ## % if hasattr(c, 'comments') and hasattr(c, 'inline_cnt'):
154 154 ## <i class="icon-comment" style="color: #949494">COMMENTS:</i>
155 155 ## % if c.comments:
156 156 ## <a href="#comments">${_ungettext("{} General", "{} General", len(c.comments)).format(len(c.comments))}</a>,
157 157 ## % else:
158 158 ## ${_('0 General')}
159 159 ## % endif
160 160 ##
161 161 ## % if c.inline_cnt:
162 162 ## <a href="#" onclick="return Rhodecode.comments.nextComment();"
163 163 ## id="inline-comments-counter">${_ungettext("{} Inline", "{} Inline", c.inline_cnt).format(c.inline_cnt)}
164 164 ## </a>
165 165 ## % else:
166 166 ## ${_('0 Inline')}
167 167 ## % endif
168 168 ## % endif
169 169 ##
170 170 ## % if pull_request_menu:
171 171 ## <%
172 172 ## outdated_comm_count_ver = pull_request_menu['outdated_comm_count_ver']
173 173 ## %>
174 174 ##
175 175 ## % if outdated_comm_count_ver:
176 176 ## <a href="#" onclick="showOutdated(); Rhodecode.comments.nextOutdatedComment(); return false;">
177 177 ## (${_("{} Outdated").format(outdated_comm_count_ver)})
178 178 ## </a>
179 179 ## <a href="#" class="showOutdatedComments" onclick="showOutdated(this); return false;"> | ${_('show outdated')}</a>
180 180 ## <a href="#" class="hideOutdatedComments" style="display: none" onclick="hideOutdated(this); return false;"> | ${_('hide outdated')}</a>
181 181 ## % else:
182 182 ## (${_("{} Outdated").format(outdated_comm_count_ver)})
183 183 ## % endif
184 184 ##
185 185 ## % endif
186 186 ##
187 187 ## </div>
188 188 ## </div>
189 189
190 190 </div>
191 191
192 192 % if diffset.limited_diff:
193 193 <div class="diffset-heading ${(diffset.limited_diff and 'diffset-heading-warning' or '')}">
194 194 <h2 class="clearinner">
195 195 ${_('The requested changes are too big and content was truncated.')}
196 196 <a href="${h.current_route_path(request, fulldiff=1)}" onclick="return confirm('${_("Showing a big diff might take some time and resources, continue?")}')">${_('Show full diff')}</a>
197 197 </h2>
198 198 </div>
199 199 % endif
200 200
201 201 <div id="todo-box">
202 202 % if hasattr(c, 'unresolved_comments') and c.unresolved_comments:
203 203 % for co in c.unresolved_comments:
204 204 <a class="permalink" href="#comment-${co.comment_id}"
205 205 onclick="Rhodecode.comments.scrollToComment($('#comment-${co.comment_id}'))">
206 206 <i class="icon-flag-filled-red"></i>
207 207 ${co.comment_id}</a>${('' if loop.last else ',')}
208 208 % endfor
209 209 % endif
210 210 </div>
211 211 %if diffset.has_hidden_changes:
212 212 <p class="empty_data">${_('Some changes may be hidden')}</p>
213 213 %elif not diffset.files:
214 214 <p class="empty_data">${_('No files')}</p>
215 215 %endif
216 216
217 217 <div class="filediffs">
218 218
219 219 ## initial value could be marked as False later on
220 220 <% over_lines_changed_limit = False %>
221 221 %for i, filediff in enumerate(diffset.files):
222 222
223 223 %if filediff.source_file_path and filediff.target_file_path:
224 224 %if filediff.source_file_path != filediff.target_file_path:
225 225 ## file was renamed, or copied
226 226 %if RENAMED_FILENODE in filediff.patch['stats']['ops']:
227 227 <%
228 228 final_file_name = h.literal('{} <i class="icon-angle-left"></i> <del>{}</del>'.format(filediff.target_file_path, filediff.source_file_path))
229 229 final_path = filediff.target_file_path
230 230 %>
231 231 %elif COPIED_FILENODE in filediff.patch['stats']['ops']:
232 232 <%
233 233 final_file_name = h.literal('{} <i class="icon-angle-left"></i> {}'.format(filediff.target_file_path, filediff.source_file_path))
234 234 final_path = filediff.target_file_path
235 235 %>
236 236 %endif
237 237 %else:
238 238 ## file was modified
239 239 <%
240 240 final_file_name = filediff.source_file_path
241 241 final_path = final_file_name
242 242 %>
243 243 %endif
244 244 %else:
245 245 %if filediff.source_file_path:
246 246 ## file was deleted
247 247 <%
248 248 final_file_name = filediff.source_file_path
249 249 final_path = final_file_name
250 250 %>
251 251 %else:
252 252 ## file was added
253 253 <%
254 254 final_file_name = filediff.target_file_path
255 255 final_path = final_file_name
256 256 %>
257 257 %endif
258 258 %endif
259 259
260 260 <%
261 261 lines_changed = filediff.patch['stats']['added'] + filediff.patch['stats']['deleted']
262 262 over_lines_changed_limit = lines_changed > lines_changed_limit
263 263 %>
264 264 ## anchor with support of sticky header
265 265 <div class="anchor" id="a_${h.FID(filediff.raw_id, filediff.patch['filename'])}"></div>
266 266
267 267 <input ${(collapse_all and 'checked' or '')} class="filediff-collapse-state collapse-${diffset_container_id}" id="filediff-collapse-${id(filediff)}" type="checkbox" onchange="updateSticky();">
268 268 <div
269 269 class="filediff"
270 270 data-f-path="${filediff.patch['filename']}"
271 271 data-anchor-id="${h.FID(filediff.raw_id, filediff.patch['filename'])}"
272 272 >
273 273 <label for="filediff-collapse-${id(filediff)}" class="filediff-heading">
274 274 <%
275 275 file_comments = list((get_inline_comments(inline_comments, filediff.patch['filename']) or {}).values())
276 276 total_file_comments = [_c for _c in h.itertools.chain.from_iterable(file_comments) if not (_c.outdated or _c.draft)]
277 277 %>
278 278 <div class="filediff-collapse-indicator icon-"></div>
279 279
280 ## Comments/Options PILL
281 <span class="pill-group pull-right">
282 <span class="pill" op="comments">
283 <i class="icon-comment"></i> ${len(total_file_comments)}
280 <%
281 from rhodecode.lib.diffs import NEW_FILENODE, DEL_FILENODE, MOD_FILENODE, RENAMED_FILENODE, CHMOD_FILENODE, BIN_FILENODE, COPIED_FILENODE
282 %>
283 <span class="pill">
284 <i class="icon-file-text"></i>
285 ${final_file_name}
284 286 </span>
285 287
288 ## Options PILL
289 <span class="pill-group pull-right">
286 290 <details class="details-reset details-inline-block">
287 291 <summary class="noselect">
288 292 <i class="pill icon-options cursor-pointer" op="options"></i>
289 293 </summary>
290 294 <details-menu class="details-dropdown">
291 295
292 296 <div class="dropdown-item">
293 <span>${final_path}</span>
294 <span class="pull-right icon-clipboard clipboard-action" data-clipboard-text="${final_path}" title="Copy file path"></span>
297 <ul class="inline-menu">
298 <li class="inline-menu-item"><span class="inline-menu-item-ellipsis">${final_path}</span></li>
299 <li class="inline-menu-item"><span class="pull-right icon-clipboard clipboard-action" data-clipboard-text="${final_path}" title="Copy file path"></span></li>
300 </ul>
295 301 </div>
296 302
297 303 <div class="dropdown-divider"></div>
298 304
299 305 <div class="dropdown-item">
300 306 <% permalink = request.current_route_url(_anchor='a_{}'.format(h.FID(filediff.raw_id, filediff.patch['filename']))) %>
301 <a href="${permalink}">ΒΆ permalink</a>
302 <span class="pull-right icon-clipboard clipboard-action" data-clipboard-text="${permalink}" title="Copy permalink"></span>
307 <ul class="inline-menu">
308 <li class="inline-menu-item"><a href="${permalink}">ΒΆ permalink</a></li>
309 <li class="inline-menu-item"><span class="pull-right icon-clipboard clipboard-action" data-clipboard-text="${permalink}" title="Copy permalink"></span></li>
310 </ul>
303 311 </div>
304 312
305 313 </details-menu>
306 314 </details>
315 </span>
307 316
317 ## Comments PILL
318 <span class="pill-group pull-right">
319 <span class="pill" op="comments">
320 <i class="icon-comment"></i> ${len(total_file_comments)}
321 </span>
308 322 </span>
309 323
310 ${diff_ops(final_file_name, filediff)}
324 ## DIFF STATS PILL
325 <span class="pill-group pull-right">
326
327 ## ops pills
328 %if filediff.limited_diff:
329 <span class="pill tooltip" op="limited"
330 title="The stats for this diff are not complete">limited diff</span>
331 %endif
332
333 %if NEW_FILENODE in filediff.patch['stats']['ops']:
334 <span class="pill" op="created">created</span>
335 %if filediff['target_mode'].startswith('120'):
336 <span class="pill" op="symlink">symlink</span>
337 %else:
338 <span class="pill" op="mode">${nice_mode(filediff['target_mode'])}</span>
339 %endif
340 %endif
341
342 %if RENAMED_FILENODE in filediff.patch['stats']['ops']:
343 <span class="pill" op="renamed">renamed</span>
344 %endif
345
346 %if COPIED_FILENODE in filediff.patch['stats']['ops']:
347 <span class="pill" op="copied">copied</span>
348 %endif
349
350 %if DEL_FILENODE in filediff.patch['stats']['ops']:
351 <span class="pill" op="removed">removed</span>
352 %endif
353
354 %if CHMOD_FILENODE in filediff.patch['stats']['ops']:
355 <span class="pill" op="mode"> ${nice_mode(filediff['source_mode'])} ➑ ${nice_mode(filediff['target_mode'])}</span>
356 %endif
357
358 %if BIN_FILENODE in filediff.patch['stats']['ops']:
359 <span class="pill" op="binary">binary</span>
360 %if MOD_FILENODE in filediff.patch['stats']['ops']:
361 <span class="pill" op="modified">modified</span>
362 %endif
363 %endif
364
365 <span class="pill" op="added">${('+' if filediff.patch['stats']['added'] else '')}${filediff.patch['stats']['added']}</span>
366 <span class="pill" op="deleted">${((h.safe_int(filediff.patch['stats']['deleted']) or 0) * -1)}</span>
367 </span>
311 368
312 369 </label>
313 370
314 371 ${diff_menu(filediff, use_comments=use_comments)}
315 372 <table id="file-${h.safeid(h.safe_str(filediff.patch['filename']))}" data-f-path="${filediff.patch['filename']}" data-anchor-id="${h.FID(filediff.raw_id, filediff.patch['filename'])}" class="code-visible-block cb cb-diff-${c.user_session_attrs["diffmode"]} code-highlight ${(over_lines_changed_limit and 'cb-collapsed' or '')}">
316 373
317 374 ## new/deleted/empty content case
318 375 % if not filediff.hunks:
319 376 ## Comment container, on "fakes" hunk that contains all data to render comments
320 377 ${render_hunk_lines(filediff, c.user_session_attrs["diffmode"], filediff.hunk_ops, use_comments=use_comments, inline_comments=inline_comments, active_pattern_entries=active_pattern_entries)}
321 378 % endif
322 379
323 380 %if filediff.limited_diff:
324 381 <tr class="cb-warning cb-collapser">
325 382 <td class="cb-text" ${(c.user_session_attrs["diffmode"] == 'unified' and 'colspan=4' or 'colspan=6')}>
326 383 ${_('The requested commit or file is too big and content was truncated.')} <a href="${h.current_route_path(request, fulldiff=1)}" onclick="return confirm('${_("Showing a big diff might take some time and resources, continue?")}')">${_('Show full diff')}</a>
327 384 </td>
328 385 </tr>
329 386 %else:
330 387 %if over_lines_changed_limit:
331 388 <tr class="cb-warning cb-collapser">
332 389 <td class="cb-text" ${(c.user_session_attrs["diffmode"] == 'unified' and 'colspan=4' or 'colspan=6')}>
333 390 ${_('This diff has been collapsed as it changes many lines, (%i lines changed)' % lines_changed)}
334 391 <a href="#" class="cb-expand"
335 392 onclick="$(this).closest('table').removeClass('cb-collapsed'); updateSticky(); return false;">${_('Show them')}
336 393 </a>
337 394 <a href="#" class="cb-collapse"
338 395 onclick="$(this).closest('table').addClass('cb-collapsed'); updateSticky(); return false;">${_('Hide them')}
339 396 </a>
340 397 </td>
341 398 </tr>
342 399 %endif
343 400 %endif
344 401
345 402 % for hunk in filediff.hunks:
346 403 <tr class="cb-hunk">
347 404 <td ${(c.user_session_attrs["diffmode"] == 'unified' and 'colspan=3' or '')}>
348 405 ## TODO: dan: add ajax loading of more context here
349 406 ## <a href="#">
350 407 <i class="icon-more"></i>
351 408 ## </a>
352 409 </td>
353 410 <td ${(c.user_session_attrs["diffmode"] == 'sideside' and 'colspan=5' or '')}>
354 411 @@
355 412 -${hunk.source_start},${hunk.source_length}
356 413 +${hunk.target_start},${hunk.target_length}
357 414 ${hunk.section_header}
358 415 </td>
359 416 </tr>
360 417
361 418 ${render_hunk_lines(filediff, c.user_session_attrs["diffmode"], hunk, use_comments=use_comments, inline_comments=inline_comments, active_pattern_entries=active_pattern_entries)}
362 419 % endfor
363 420
364 421 <% unmatched_comments = (inline_comments or {}).get(filediff.patch['filename'], {}) %>
365 422
366 423 ## outdated comments that do not fit into currently displayed lines
367 424 % for lineno, comments in unmatched_comments.items():
368 425
369 426 %if c.user_session_attrs["diffmode"] == 'unified':
370 427 % if loop.index == 0:
371 428 <tr class="cb-hunk">
372 429 <td colspan="3"></td>
373 430 <td>
374 431 <div>
375 432 ${_('Unmatched/outdated inline comments below')}
376 433 </div>
377 434 </td>
378 435 </tr>
379 436 % endif
380 437 <tr class="cb-line">
381 438 <td class="cb-data cb-context"></td>
382 439 <td class="cb-lineno cb-context"></td>
383 440 <td class="cb-lineno cb-context"></td>
384 441 <td class="cb-content cb-context">
385 442 ${inline_comments_container(comments, active_pattern_entries=active_pattern_entries)}
386 443 </td>
387 444 </tr>
388 445 %elif c.user_session_attrs["diffmode"] == 'sideside':
389 446 % if loop.index == 0:
390 447 <tr class="cb-comment-info">
391 448 <td colspan="2"></td>
392 449 <td class="cb-line">
393 450 <div>
394 451 ${_('Unmatched/outdated inline comments below')}
395 452 </div>
396 453 </td>
397 454 <td colspan="2"></td>
398 455 <td class="cb-line">
399 456 <div>
400 457 ${_('Unmatched/outdated comments below')}
401 458 </div>
402 459 </td>
403 460 </tr>
404 461 % endif
405 462 <tr class="cb-line">
406 463 <td class="cb-data cb-context"></td>
407 464 <td class="cb-lineno cb-context"></td>
408 465 <td class="cb-content cb-context">
409 466 % if lineno.startswith('o'):
410 467 ${inline_comments_container(comments, active_pattern_entries=active_pattern_entries)}
411 468 % endif
412 469 </td>
413 470
414 471 <td class="cb-data cb-context"></td>
415 472 <td class="cb-lineno cb-context"></td>
416 473 <td class="cb-content cb-context">
417 474 % if lineno.startswith('n'):
418 475 ${inline_comments_container(comments, active_pattern_entries=active_pattern_entries)}
419 476 % endif
420 477 </td>
421 478 </tr>
422 479 %endif
423 480
424 481 % endfor
425 482
426 483 </table>
427 484 </div>
428 485 %endfor
429 486
430 487 ## outdated comments that are made for a file that has been deleted
431 488 % for filename, comments_dict in (deleted_files_comments or {}).items():
432 489
433 490 <%
434 491 display_state = 'display: none'
435 492 open_comments_in_file = [x for x in comments_dict['comments'] if x.outdated is False]
436 493 if open_comments_in_file:
437 494 display_state = ''
438 495 fid = str(id(filename))
439 496 %>
440 497 <div class="filediffs filediff-outdated" style="${display_state}">
441 498 <input ${(collapse_all and 'checked' or '')} class="filediff-collapse-state collapse-${diffset_container_id}" id="filediff-collapse-${id(filename)}" type="checkbox" onchange="updateSticky();">
442 499 <div class="filediff" data-f-path="${filename}" id="a_${h.FID(fid, filename)}">
443 500 <label for="filediff-collapse-${id(filename)}" class="filediff-heading">
444 501 <div class="filediff-collapse-indicator icon-"></div>
445 502
446 503 <span class="pill">
447 504 ## file was deleted
448 505 ${filename}
449 506 </span>
450 507 <span class="pill-group pull-left" >
451 508 ## file op, doesn't need translation
452 509 <span class="pill" op="removed">unresolved comments</span>
453 510 </span>
454 511 <a class="pill filediff-anchor" href="#a_${h.FID(fid, filename)}">ΒΆ</a>
455 512 <span class="pill-group pull-right">
456 513 <span class="pill" op="deleted">
457 514 % if comments_dict['stats'] >0:
458 515 -${comments_dict['stats']}
459 516 % else:
460 517 ${comments_dict['stats']}
461 518 % endif
462 519 </span>
463 520 </span>
464 521 </label>
465 522
466 523 <table class="cb cb-diff-${c.user_session_attrs["diffmode"]} code-highlight ${(over_lines_changed_limit and 'cb-collapsed' or '')}">
467 524 <tr>
468 525 % if c.user_session_attrs["diffmode"] == 'unified':
469 526 <td></td>
470 527 %endif
471 528
472 529 <td></td>
473 530 <td class="cb-text cb-${op_class(BIN_FILENODE)}" ${(c.user_session_attrs["diffmode"] == 'unified' and 'colspan=4' or 'colspan=5')}>
474 531 <strong>${_('This file was removed from diff during updates to this pull-request.')}</strong><br/>
475 532 ${_('There are still outdated/unresolved comments attached to it.')}
476 533 </td>
477 534 </tr>
478 535 %if c.user_session_attrs["diffmode"] == 'unified':
479 536 <tr class="cb-line">
480 537 <td class="cb-data cb-context"></td>
481 538 <td class="cb-lineno cb-context"></td>
482 539 <td class="cb-lineno cb-context"></td>
483 540 <td class="cb-content cb-context">
484 541 ${inline_comments_container(comments_dict['comments'], active_pattern_entries=active_pattern_entries)}
485 542 </td>
486 543 </tr>
487 544 %elif c.user_session_attrs["diffmode"] == 'sideside':
488 545 <tr class="cb-line">
489 546 <td class="cb-data cb-context"></td>
490 547 <td class="cb-lineno cb-context"></td>
491 548 <td class="cb-content cb-context"></td>
492 549
493 550 <td class="cb-data cb-context"></td>
494 551 <td class="cb-lineno cb-context"></td>
495 552 <td class="cb-content cb-context">
496 553 ${inline_comments_container(comments_dict['comments'], active_pattern_entries=active_pattern_entries)}
497 554 </td>
498 555 </tr>
499 556 %endif
500 557 </table>
501 558 </div>
502 559 </div>
503 560 % endfor
504 561
505 562 </div>
506 563 </div>
507 564 </%def>
508 565
509 <%def name="diff_ops(file_name, filediff)">
510 <%
511 from rhodecode.lib.diffs import NEW_FILENODE, DEL_FILENODE, \
512 MOD_FILENODE, RENAMED_FILENODE, CHMOD_FILENODE, BIN_FILENODE, COPIED_FILENODE
513 %>
514 <span class="pill">
515 <i class="icon-file-text"></i>
516 ${file_name}
517 </span>
518
519 <span class="pill-group pull-right">
520
521 ## ops pills
522 %if filediff.limited_diff:
523 <span class="pill tooltip" op="limited" title="The stats for this diff are not complete">limited diff</span>
524 %endif
525
526 %if NEW_FILENODE in filediff.patch['stats']['ops']:
527 <span class="pill" op="created">created</span>
528 %if filediff['target_mode'].startswith('120'):
529 <span class="pill" op="symlink">symlink</span>
530 %else:
531 <span class="pill" op="mode">${nice_mode(filediff['target_mode'])}</span>
532 %endif
533 %endif
534
535 %if RENAMED_FILENODE in filediff.patch['stats']['ops']:
536 <span class="pill" op="renamed">renamed</span>
537 %endif
538
539 %if COPIED_FILENODE in filediff.patch['stats']['ops']:
540 <span class="pill" op="copied">copied</span>
541 %endif
542
543 %if DEL_FILENODE in filediff.patch['stats']['ops']:
544 <span class="pill" op="removed">removed</span>
545 %endif
546
547 %if CHMOD_FILENODE in filediff.patch['stats']['ops']:
548 <span class="pill" op="mode">
549 ${nice_mode(filediff['source_mode'])} ➑ ${nice_mode(filediff['target_mode'])}
550 </span>
551 %endif
552
553 %if BIN_FILENODE in filediff.patch['stats']['ops']:
554 <span class="pill" op="binary">binary</span>
555 %if MOD_FILENODE in filediff.patch['stats']['ops']:
556 <span class="pill" op="modified">modified</span>
557 %endif
558 %endif
559
560 <span class="pill" op="added">${('+' if filediff.patch['stats']['added'] else '')}${filediff.patch['stats']['added']}</span>
561 <span class="pill" op="deleted">${((h.safe_int(filediff.patch['stats']['deleted']) or 0) * -1)}</span>
562
563 </span>
564
565 </%def>
566
567 566 <%def name="nice_mode(filemode)">
568 567 ${(filemode.startswith('100') and filemode[3:] or filemode)}
569 568 </%def>
570 569
571 570 <%def name="diff_menu(filediff, use_comments=False)">
572 571 <div class="filediff-menu">
573 572
574 573 %if filediff.diffset.source_ref:
575 574
576 575 ## FILE BEFORE CHANGES
577 576 %if filediff.operation in ['D', 'M']:
578 577 <a
579 578 class="tooltip"
580 579 href="${h.route_path('repo_files',repo_name=filediff.diffset.target_repo_name,commit_id=filediff.diffset.source_ref,f_path=filediff.source_file_path)}"
581 580 title="${h.tooltip(_('Show file at commit: %(commit_id)s') % {'commit_id': filediff.diffset.source_ref[:12]})}"
582 581 >
583 582 ${_('Show file before')}
584 583 </a> |
585 584 %else:
586 585 <span
587 586 class="tooltip"
588 587 title="${h.tooltip(_('File not present at commit: %(commit_id)s') % {'commit_id': filediff.diffset.source_ref[:12]})}"
589 588 >
590 589 ${_('Show file before')}
591 590 </span> |
592 591 %endif
593 592
594 593 ## FILE AFTER CHANGES
595 594 %if filediff.operation in ['A', 'M']:
596 595 <a
597 596 class="tooltip"
598 597 href="${h.route_path('repo_files',repo_name=filediff.diffset.source_repo_name,commit_id=filediff.diffset.target_ref,f_path=filediff.target_file_path)}"
599 598 title="${h.tooltip(_('Show file at commit: %(commit_id)s') % {'commit_id': filediff.diffset.target_ref[:12]})}"
600 599 >
601 600 ${_('Show file after')}
602 601 </a>
603 602 %else:
604 603 <span
605 604 class="tooltip"
606 605 title="${h.tooltip(_('File not present at commit: %(commit_id)s') % {'commit_id': filediff.diffset.target_ref[:12]})}"
607 606 >
608 607 ${_('Show file after')}
609 608 </span>
610 609 %endif
611 610
612 611 % if use_comments:
613 612 |
614 613 <a href="#" onclick="Rhodecode.comments.toggleDiffComments(this);return toggleElement(this)"
615 614 data-toggle-on="${_('Hide comments')}"
616 615 data-toggle-off="${_('Show comments')}">
617 616 <span class="hide-comment-button">${_('Hide comments')}</span>
618 617 </a>
619 618 % endif
620 619
621 620 %endif
622 621
623 622 </div>
624 623 </%def>
625 624
626 625
627 626 <%def name="inline_comments_container(comments, active_pattern_entries=None, line_no='', f_path='')">
628 627
629 628 <div class="inline-comments">
630 629 %for comment in comments:
631 630 ${commentblock.comment_block(comment, inline=True, active_pattern_entries=active_pattern_entries)}
632 631 %endfor
633 632
634 633 <%
635 634 extra_class = ''
636 635 extra_style = ''
637 636
638 637 if comments and comments[-1].outdated_at_version(c.at_version_num):
639 638 extra_class = ' comment-outdated'
640 639 extra_style = 'display: none;'
641 640
642 641 %>
643 642
644 643 <div class="reply-thread-container-wrapper${extra_class}" style="${extra_style}">
645 644 <div class="reply-thread-container${extra_class}">
646 645 <div class="reply-thread-gravatar">
647 646 % if c.rhodecode_user.username != h.DEFAULT_USER:
648 647 ${base.gravatar(c.rhodecode_user.email, 20, tooltip=True, user=c.rhodecode_user)}
649 648 % endif
650 649 </div>
651 650
652 651 <div class="reply-thread-reply-button">
653 652 % if c.rhodecode_user.username != h.DEFAULT_USER:
654 653 ## initial reply button, some JS logic can append here a FORM to leave a first comment.
655 654 <button class="cb-comment-add-button" onclick="return Rhodecode.comments.createComment(this, '${f_path}', '${line_no}', null)">Reply...</button>
656 655 % endif
657 656 </div>
658 657 ##% endif
659 658 <div class="reply-thread-last"></div>
660 659 </div>
661 660 </div>
662 661 </div>
663 662
664 663 </%def>
665 664
666 665 <%!
667 666
668 667 def get_inline_comments(comments, filename):
669 668 if hasattr(filename, 'str_path'):
670 669 filename = filename.str_path
671 670
672 671 if not isinstance(filename, str):
673 672 return None
674 673
675 674 if comments and filename in comments:
676 675 return comments[filename]
677 676
678 677 return None
679 678
680 679 def get_comments_for(diff_type, comments, filename, line_version, line_number):
681 680 if hasattr(filename, 'str_path'):
682 681 filename = filename.str_path
683 682
684 683 if not isinstance(filename, str):
685 684 return None
686 685
687 686 file_comments = get_inline_comments(comments, filename)
688 687 if file_comments is None:
689 688 return None
690 689
691 690 line_key = f'{line_version}{line_number}' ## e.g o37, n12
692 691 if line_key in file_comments:
693 692 data = file_comments.pop(line_key)
694 693 return data
695 694 %>
696 695
697 696 <%def name="render_hunk_lines_sideside(filediff, hunk, use_comments=False, inline_comments=None, active_pattern_entries=None)">
698 697
699 698 <% chunk_count = 1 %>
700 699 %for loop_obj, item in h.looper(hunk.sideside):
701 700 <%
702 701 line = item
703 702 i = loop_obj.index
704 703 prev_line = loop_obj.previous
705 704 old_line_anchor, new_line_anchor = None, None
706 705
707 706 if line.original.lineno:
708 707 old_line_anchor = diff_line_anchor(filediff.raw_id, hunk.source_file_path, line.original.lineno, 'o')
709 708 if line.modified.lineno:
710 709 new_line_anchor = diff_line_anchor(filediff.raw_id, hunk.target_file_path, line.modified.lineno, 'n')
711 710
712 711 line_action = line.modified.action or line.original.action
713 712 prev_line_action = prev_line and (prev_line.modified.action or prev_line.original.action)
714 713 %>
715 714
716 715 <tr class="cb-line">
717 716 <td class="cb-data ${action_class(line.original.action)}"
718 717 data-line-no="${line.original.lineno}"
719 718 >
720 719
721 720 <% line_old_comments, line_old_comments_no_drafts = None, None %>
722 721 %if line.original.get_comment_args:
723 722 <%
724 723 line_old_comments = get_comments_for('side-by-side', inline_comments, *line.original.get_comment_args)
725 724 line_old_comments_no_drafts = [c for c in line_old_comments if not c.draft] if line_old_comments else []
726 725 has_outdated = any([x.outdated for x in line_old_comments_no_drafts])
727 726 %>
728 727 %endif
729 728 %if line_old_comments_no_drafts:
730 729 % if has_outdated:
731 730 <i class="tooltip toggle-comment-action icon-comment-toggle" title="${_('Comments including outdated: {}. Click here to toggle them.').format(len(line_old_comments_no_drafts))}" onclick="return Rhodecode.comments.toggleLineComments(this)"></i>
732 731 % else:
733 732 <i class="tooltip toggle-comment-action icon-comment" title="${_('Comments: {}. Click to toggle them.').format(len(line_old_comments_no_drafts))}" onclick="return Rhodecode.comments.toggleLineComments(this)"></i>
734 733 % endif
735 734 %endif
736 735 </td>
737 736 <td class="cb-lineno ${action_class(line.original.action)}"
738 737 data-line-no="${line.original.lineno}"
739 738 %if old_line_anchor:
740 739 id="${old_line_anchor}"
741 740 %endif
742 741 >
743 742 %if line.original.lineno:
744 743 <a name="${old_line_anchor}" href="#${old_line_anchor}">${line.original.lineno}</a>
745 744 %endif
746 745 </td>
747 746
748 747 <% line_no = 'o{}'.format(line.original.lineno) %>
749 748 <td class="cb-content ${action_class(line.original.action)}"
750 749 data-line-no="${line_no}"
751 750 >
752 751 %if use_comments and line.original.lineno:
753 752 ${render_add_comment_button(line_no=line_no, f_path=filediff.patch['filename'])}
754 753 %endif
755 754 <span class="cb-code"><span class="cb-action ${action_class(line.original.action)}"></span>${line.original.content or '' | n}</span>
756 755
757 756 %if use_comments and line.original.lineno and line_old_comments:
758 757 ${inline_comments_container(line_old_comments, active_pattern_entries=active_pattern_entries, line_no=line_no, f_path=filediff.patch['filename'])}
759 758 %endif
760 759
761 760 </td>
762 761 <td class="cb-data ${action_class(line.modified.action)}"
763 762 data-line-no="${line.modified.lineno}"
764 763 >
765 764 <div>
766 765
767 766 <% line_new_comments, line_new_comments_no_drafts = None, None %>
768 767 %if line.modified.get_comment_args:
769 768 <%
770 769 line_new_comments = get_comments_for('side-by-side', inline_comments, *line.modified.get_comment_args)
771 770 line_new_comments_no_drafts = [c for c in line_new_comments if not c.draft] if line_new_comments else []
772 771 has_outdated = any([x.outdated for x in line_new_comments_no_drafts])
773 772 %>
774 773 %endif
775 774
776 775 %if line_new_comments_no_drafts:
777 776 % if has_outdated:
778 777 <i class="tooltip toggle-comment-action icon-comment-toggle" title="${_('Comments including outdated: {}. Click here to toggle them.').format(len(line_new_comments_no_drafts))}" onclick="return Rhodecode.comments.toggleLineComments(this)"></i>
779 778 % else:
780 779 <i class="tooltip toggle-comment-action icon-comment" title="${_('Comments: {}. Click to toggle them.').format(len(line_new_comments_no_drafts))}" onclick="return Rhodecode.comments.toggleLineComments(this)"></i>
781 780 % endif
782 781 %endif
783 782 </div>
784 783 </td>
785 784 <td class="cb-lineno ${action_class(line.modified.action)}"
786 785 data-line-no="${line.modified.lineno}"
787 786 %if new_line_anchor:
788 787 id="${new_line_anchor}"
789 788 %endif
790 789 >
791 790 %if line.modified.lineno:
792 791 <a name="${new_line_anchor}" href="#${new_line_anchor}">${line.modified.lineno}</a>
793 792 %endif
794 793 </td>
795 794
796 795 <% line_no = 'n{}'.format(line.modified.lineno) %>
797 796 <td class="cb-content ${action_class(line.modified.action)}"
798 797 data-line-no="${line_no}"
799 798 >
800 799 %if use_comments and line.modified.lineno:
801 800 ${render_add_comment_button(line_no=line_no, f_path=filediff.patch['filename'])}
802 801 %endif
803 802 <span class="cb-code"><span class="cb-action ${action_class(line.modified.action)}"></span>${line.modified.content or '' | n}</span>
804 803 % if line_action in ['+', '-'] and prev_line_action not in ['+', '-']:
805 804 <div class="nav-chunk" style="visibility: hidden">
806 805 <i class="icon-eye" title="viewing diff hunk-${hunk.index}-${chunk_count}"></i>
807 806 </div>
808 807 <% chunk_count +=1 %>
809 808 % endif
810 809 %if use_comments and line.modified.lineno and line_new_comments:
811 810 ${inline_comments_container(line_new_comments, active_pattern_entries=active_pattern_entries, line_no=line_no, f_path=filediff.patch['filename'])}
812 811 %endif
813 812
814 813 </td>
815 814 </tr>
816 815 %endfor
817 816 </%def>
818 817
819 818
820 819 <%def name="render_hunk_lines_unified(filediff, hunk, use_comments=False, inline_comments=None, active_pattern_entries=None)">
821 820 %for old_line_no, new_line_no, action, content, comments_args in hunk.unified:
822 821
823 822 <%
824 823 old_line_anchor, new_line_anchor = None, None
825 824 if old_line_no:
826 825 old_line_anchor = diff_line_anchor(filediff.raw_id, hunk.source_file_path, old_line_no, 'o')
827 826 if new_line_no:
828 827 new_line_anchor = diff_line_anchor(filediff.raw_id, hunk.target_file_path, new_line_no, 'n')
829 828 %>
830 829 <tr class="cb-line">
831 830 <td class="cb-data ${action_class(action)}">
832 831 <div>
833 832
834 833 <% comments, comments_no_drafts = None, None %>
835 834 %if comments_args:
836 835 <%
837 836 comments = get_comments_for('unified', inline_comments, *comments_args)
838 837 comments_no_drafts = [c for c in line_new_comments if not c.draft] if line_new_comments else []
839 838 has_outdated = any([x.outdated for x in comments_no_drafts])
840 839 %>
841 840 %endif
842 841
843 842 % if comments_no_drafts:
844 843 % if has_outdated:
845 844 <i class="tooltip toggle-comment-action icon-comment-toggle" title="${_('Comments including outdated: {}. Click here to toggle them.').format(len(comments_no_drafts))}" onclick="return Rhodecode.comments.toggleLineComments(this)"></i>
846 845 % else:
847 846 <i class="tooltip toggle-comment-action icon-comment" title="${_('Comments: {}. Click to toggle them.').format(len(comments_no_drafts))}" onclick="return Rhodecode.comments.toggleLineComments(this)"></i>
848 847 % endif
849 848 % endif
850 849 </div>
851 850 </td>
852 851 <td class="cb-lineno ${action_class(action)}"
853 852 data-line-no="${old_line_no}"
854 853 %if old_line_anchor:
855 854 id="${old_line_anchor}"
856 855 %endif
857 856 >
858 857 %if old_line_anchor:
859 858 <a name="${old_line_anchor}" href="#${old_line_anchor}">${old_line_no}</a>
860 859 %endif
861 860 </td>
862 861 <td class="cb-lineno ${action_class(action)}"
863 862 data-line-no="${new_line_no}"
864 863 %if new_line_anchor:
865 864 id="${new_line_anchor}"
866 865 %endif
867 866 >
868 867 %if new_line_anchor:
869 868 <a name="${new_line_anchor}" href="#${new_line_anchor}">${new_line_no}</a>
870 869 %endif
871 870 </td>
872 871 <% line_no = '{}{}'.format(new_line_no and 'n' or 'o', new_line_no or old_line_no) %>
873 872 <td class="cb-content ${action_class(action)}"
874 873 data-line-no="${line_no}"
875 874 >
876 875 %if use_comments:
877 876 ${render_add_comment_button(line_no=line_no, f_path=filediff.patch['filename'])}
878 877 %endif
879 878 <span class="cb-code"><span class="cb-action ${action_class(action)}"></span> ${content or '' | n}</span>
880 879 %if use_comments and comments:
881 880 ${inline_comments_container(comments, active_pattern_entries=active_pattern_entries, line_no=line_no, f_path=filediff.patch['filename'])}
882 881 %endif
883 882 </td>
884 883 </tr>
885 884 %endfor
886 885 </%def>
887 886
888 887
889 888 <%def name="render_hunk_lines(filediff, diff_mode, hunk, use_comments, inline_comments, active_pattern_entries)">
890 889 % if diff_mode == 'unified':
891 890 ${render_hunk_lines_unified(filediff, hunk, use_comments=use_comments, inline_comments=inline_comments, active_pattern_entries=active_pattern_entries)}
892 891 % elif diff_mode == 'sideside':
893 892 ${render_hunk_lines_sideside(filediff, hunk, use_comments=use_comments, inline_comments=inline_comments, active_pattern_entries=active_pattern_entries)}
894 893 % else:
895 894 <tr class="cb-line">
896 895 <td>unknown diff mode</td>
897 896 </tr>
898 897 % endif
899 898 </%def>file changes
900 899
901 900
902 901 <%def name="render_add_comment_button(line_no='', f_path='')">
903 902 % if not c.rhodecode_user.is_default:
904 903 <button class="btn btn-small btn-primary cb-comment-box-opener" onclick="return Rhodecode.comments.createComment(this, '${f_path}', '${line_no}', null)">
905 904 <span><i class="icon-comment"></i></span>
906 905 </button>
907 906 % endif
908 907 </%def>
909 908
910 909 <%def name="render_diffset_menu(diffset, range_diff_on=None, commit=None, pull_request_menu=None)">
911 910 <% diffset_container_id = h.md5_safe(diffset.target_ref) %>
912 911
913 912 <div id="diff-file-sticky" class="diffset-menu clearinner">
914 913 ## auto adjustable
915 914 <div class="sidebar__inner">
916 915 <div class="sidebar__bar">
917 916 <div class="pull-right">
918 917
919 918 <div class="btn-group" style="margin-right: 5px;">
920 919 <a class="tooltip btn" onclick="scrollDown();return false" title="${_('Scroll to page bottom')}">
921 920 <i class="icon-arrow_down"></i>
922 921 </a>
923 922 <a class="tooltip btn" onclick="scrollUp();return false" title="${_('Scroll to page top')}">
924 923 <i class="icon-arrow_up"></i>
925 924 </a>
926 925 </div>
927 926
928 927 <div class="btn-group">
929 928 <a class="btn tooltip toggle-wide-diff" href="#toggle-wide-diff" onclick="toggleWideDiff(this); return false" title="${h.tooltip(_('Toggle wide diff'))}">
930 929 <i class="icon-wide-mode"></i>
931 930 </a>
932 931 </div>
933 932 <div class="btn-group">
934 933
935 934 <a
936 935 class="btn ${(c.user_session_attrs["diffmode"] == 'sideside' and 'btn-active')} tooltip"
937 936 title="${h.tooltip(_('View diff as side by side'))}"
938 937 href="${h.current_route_path(request, diffmode='sideside')}">
939 938 <span>${_('Side by Side')}</span>
940 939 </a>
941 940
942 941 <a
943 942 class="btn ${(c.user_session_attrs["diffmode"] == 'unified' and 'btn-active')} tooltip"
944 943 title="${h.tooltip(_('View diff as unified'))}" href="${h.current_route_path(request, diffmode='unified')}">
945 944 <span>${_('Unified')}</span>
946 945 </a>
947 946
948 947 % if range_diff_on is True:
949 948 <a
950 949 title="${_('Turn off: Show the diff as commit range')}"
951 950 class="btn btn-primary"
952 951 href="${h.current_route_path(request, **{"range-diff":"0"})}">
953 952 <span>${_('Range Diff')}</span>
954 953 </a>
955 954 % elif range_diff_on is False:
956 955 <a
957 956 title="${_('Show the diff as commit range')}"
958 957 class="btn"
959 958 href="${h.current_route_path(request, **{"range-diff":"1"})}">
960 959 <span>${_('Range Diff')}</span>
961 960 </a>
962 961 % endif
963 962 </div>
964 963 <div class="btn-group">
965 964
966 965 <details class="details-reset details-inline-block">
967 966 <summary class="noselect btn">
968 967 <i class="icon-options cursor-pointer" op="options"></i>
969 968 </summary>
970 969
971 <div>
972 970 <details-menu class="details-dropdown" style="top: 35px;">
973 971
974 972 <div class="dropdown-item">
975 973 <div style="padding: 2px 0px">
976 974 % if request.GET.get('ignorews', '') == '1':
977 975 <a href="${h.current_route_path(request, ignorews=0)}">${_('Show whitespace changes')}</a>
978 976 % else:
979 977 <a href="${h.current_route_path(request, ignorews=1)}">${_('Hide whitespace changes')}</a>
980 978 % endif
981 979 </div>
982 980 </div>
983 981
984 982 <div class="dropdown-item">
985 983 <div style="padding: 2px 0px">
986 984 % if request.GET.get('fullcontext', '') == '1':
987 985 <a href="${h.current_route_path(request, fullcontext=0)}">${_('Hide full context diff')}</a>
988 986 % else:
989 987 <a href="${h.current_route_path(request, fullcontext=1)}">${_('Show full context diff')}</a>
990 988 % endif
991 989 </div>
992 990 </div>
993 991
992 % if commit:
993 <div class="dropdown-item">
994 <a href="${h.route_path('repo_commit_raw',repo_name=c.repo_name,commit_id=c.commit.raw_id)}">
995 ${_('Raw Diff')}
996 </a>
997 </div>
998
999 <div class="dropdown-item">
1000 <a href="${h.route_path('repo_commit_patch',repo_name=c.repo_name,commit_id=c.commit.raw_id)}">
1001 ${_('Patch Diff')}
1002 </a>
1003 </div>
1004
1005 <div class="dropdown-item">
1006 <a href="${h.route_path('repo_commit_download',repo_name=c.repo_name,commit_id=c.commit.raw_id,_query=dict(diff='download'))}">
1007 ${_('Download Diff')}
1008 </a>
1009 </div>
1010 % endif
1011
994 1012 </details-menu>
995 </div>
1013
996 1014 </details>
997 1015
998 1016 </div>
999 1017 </div>
1000 1018 <div class="pull-left">
1001 1019 <div class="btn-group">
1002 1020 <div class="pull-left">
1003 1021 ${h.hidden('file_filter_{}'.format(diffset_container_id))}
1004 1022 </div>
1005 1023
1006 1024 </div>
1007 1025 </div>
1008 1026 </div>
1009 1027 <div class="fpath-placeholder pull-left">
1010 1028 <i class="icon-file-text"></i>
1011 1029 <strong class="fpath-placeholder-text">
1012 1030 Context file:
1013 1031 </strong>
1014 1032 </div>
1015 1033 <div class="pull-right noselect">
1016 1034 %if commit:
1017 1035 <span>
1018 1036 <code>${h.show_id(commit)}</code>
1019 1037 </span>
1020 1038 %elif pull_request_menu and pull_request_menu.get('pull_request'):
1021 1039 <span>
1022 1040 <code>!${pull_request_menu['pull_request'].pull_request_id}</code>
1023 1041 </span>
1024 1042 %endif
1025 1043 % if commit or pull_request_menu:
1026 1044 <span class="tooltip" title="Navigate to previous or next change inside files." id="diff_nav">Loading diff...:</span>
1027 1045 <span class="cursor-pointer" onclick="scrollToPrevChunk(); return false">
1028 1046 <i class="icon-angle-up"></i>
1029 1047 </span>
1030 1048 <span class="cursor-pointer" onclick="scrollToNextChunk(); return false">
1031 1049 <i class="icon-angle-down"></i>
1032 1050 </span>
1033 1051 % endif
1034 1052 </div>
1035 1053 <div class="sidebar_inner_shadow"></div>
1036 1054 </div>
1037 1055 </div>
1038 1056
1039 1057 % if diffset:
1040 1058 %if diffset.limited_diff:
1041 1059 <% file_placeholder = _ungettext('%(num)s file changed', '%(num)s files changed', diffset.changed_files) % {'num': diffset.changed_files} %>
1042 1060 %else:
1043 1061 <% file_placeholder = h.literal(_ungettext('%(num)s file changed: <span class="op-added">%(linesadd)s inserted</span>, <span class="op-deleted">%(linesdel)s deleted</span>', '%(num)s files changed: <span class="op-added">%(linesadd)s inserted</span>, <span class="op-deleted">%(linesdel)s deleted</span>',
1044 1062 diffset.changed_files) % {'num': diffset.changed_files, 'linesadd': diffset.lines_added, 'linesdel': diffset.lines_deleted}) %>
1045 1063
1046 1064 %endif
1047 1065 ## case on range-diff placeholder needs to be updated
1048 1066 % if range_diff_on is True:
1049 1067 <% file_placeholder = _('Disabled on range diff') %>
1050 1068 % endif
1051 1069
1052 1070 <script type="text/javascript">
1053 1071 var feedFilesOptions = function (query, initialData) {
1054 1072 var data = {results: []};
1055 1073 var isQuery = typeof query.term !== 'undefined';
1056 1074
1057 1075 var section = _gettext('Changed files');
1058 1076 var filteredData = [];
1059 1077
1060 1078 //filter results
1061 1079 $.each(initialData.results, function (idx, value) {
1062 1080
1063 1081 if (!isQuery || query.term.length === 0 || value.text.toUpperCase().indexOf(query.term.toUpperCase()) >= 0) {
1064 1082 filteredData.push({
1065 1083 'id': this.id,
1066 1084 'text': this.text,
1067 1085 "ops": this.ops,
1068 1086 })
1069 1087 }
1070 1088
1071 1089 });
1072 1090
1073 1091 data.results = filteredData;
1074 1092
1075 1093 query.callback(data);
1076 1094 };
1077 1095
1078 1096 var selectionFormatter = function(data, escapeMarkup) {
1079 1097 var container = '<div class="filelist" style="padding-right:100px">{0}</div>';
1080 1098 var tmpl = '<div><strong>{0}</strong></div>'.format(escapeMarkup(data['text']));
1081 1099 var pill = '<div class="pill-group" style="position: absolute; top:7px; right: 0">' +
1082 1100 '<span class="pill" op="added">{0}</span>' +
1083 1101 '<span class="pill" op="deleted">{1}</span>' +
1084 1102 '</div>'
1085 1103 ;
1086 1104 var added = data['ops']['added'];
1087 1105 if (added === 0) {
1088 1106 // don't show +0
1089 1107 added = 0;
1090 1108 } else {
1091 1109 added = '+' + added;
1092 1110 }
1093 1111
1094 1112 var deleted = -1*data['ops']['deleted'];
1095 1113
1096 1114 tmpl += pill.format(added, deleted);
1097 1115 return container.format(tmpl);
1098 1116 };
1099 1117 var formatFileResult = function(result, container, query, escapeMarkup) {
1100 1118 return selectionFormatter(result, escapeMarkup);
1101 1119 };
1102 1120
1103 1121 var formatSelection = function (data, container) {
1104 1122 return '${file_placeholder}'
1105 1123 };
1106 1124
1107 1125 if (window.preloadFileFilterData === undefined) {
1108 1126 window.preloadFileFilterData = {}
1109 1127 }
1110 1128
1111 1129 preloadFileFilterData["${diffset_container_id}"] = {
1112 1130 results: [
1113 1131 % for filediff in diffset.files:
1114 1132 {id:"a_${h.FID(filediff.raw_id, filediff.patch['filename'])}",
1115 1133 text:"${filediff.patch['filename']}",
1116 1134 ops:${h.str_json(filediff.patch['stats'])|n}}${('' if loop.last else ',')}
1117 1135 % endfor
1118 1136 ]
1119 1137 };
1120 1138
1121 1139 var diffFileFilterId = "#file_filter_" + "${diffset_container_id}";
1122 1140 var diffFileFilter = $(diffFileFilterId).select2({
1123 1141 'dropdownAutoWidth': true,
1124 1142 'width': 'auto',
1125 1143
1126 1144 containerCssClass: "drop-menu",
1127 1145 dropdownCssClass: "drop-menu-dropdown",
1128 1146 data: preloadFileFilterData["${diffset_container_id}"],
1129 1147 query: function(query) {
1130 1148 feedFilesOptions(query, preloadFileFilterData["${diffset_container_id}"]);
1131 1149 },
1132 1150 initSelection: function(element, callback) {
1133 1151 callback({'init': true});
1134 1152 },
1135 1153 formatResult: formatFileResult,
1136 1154 formatSelection: formatSelection
1137 1155 });
1138 1156
1139 1157 % if range_diff_on is True:
1140 1158 diffFileFilter.select2("enable", false);
1141 1159 % endif
1142 1160
1143 1161 $(diffFileFilterId).on('select2-selecting', function (e) {
1144 1162 var idSelector = e.choice.id;
1145 1163
1146 1164 // expand the container if we quick-select the field
1147 1165 $('#'+idSelector).next().prop('checked', false);
1148 1166 // hide the mast as we later do preventDefault()
1149 1167 $("#select2-drop-mask").click();
1150 1168
1151 1169 window.location.hash = '#'+idSelector;
1152 1170 updateSticky();
1153 1171
1154 1172 e.preventDefault();
1155 1173 });
1156 1174
1157 1175 diffNavText = 'diff navigation:'
1158 1176
1159 1177 getCurrentChunk = function () {
1160 1178
1161 1179 var chunksAll = $('.nav-chunk').filter(function () {
1162 1180 return $(this).parents('.filediff').prev().get(0).checked !== true
1163 1181 })
1164 1182 var chunkSelected = $('.nav-chunk.selected');
1165 1183 var initial = false;
1166 1184
1167 1185 if (chunkSelected.length === 0) {
1168 1186 // no initial chunk selected, we pick first
1169 1187 chunkSelected = $(chunksAll.get(0));
1170 1188 var initial = true;
1171 1189 }
1172 1190
1173 1191 return {
1174 1192 'all': chunksAll,
1175 1193 'selected': chunkSelected,
1176 1194 'initial': initial,
1177 1195 }
1178 1196 }
1179 1197
1180 1198 animateDiffNavText = function () {
1181 1199 var $diffNav = $('#diff_nav')
1182 1200
1183 1201 var callback = function () {
1184 1202 $diffNav.animate({'opacity': 1.00}, 200)
1185 1203 };
1186 1204 $diffNav.animate({'opacity': 0.15}, 200, callback);
1187 1205 }
1188 1206
1189 1207 scrollToChunk = function (moveBy) {
1190 1208 var chunk = getCurrentChunk();
1191 1209 var all = chunk.all
1192 1210 var selected = chunk.selected
1193 1211
1194 1212 var curPos = all.index(selected);
1195 1213 var newPos = curPos;
1196 1214 if (!chunk.initial) {
1197 1215 var newPos = curPos + moveBy;
1198 1216 }
1199 1217
1200 1218 var curElem = all.get(newPos);
1201 1219
1202 1220 if (curElem === undefined) {
1203 1221 // end or back
1204 1222 $('#diff_nav').html('no next diff element:')
1205 1223 animateDiffNavText()
1206 1224 return
1207 1225 } else if (newPos < 0) {
1208 1226 $('#diff_nav').html('no previous diff element:')
1209 1227 animateDiffNavText()
1210 1228 return
1211 1229 } else {
1212 1230 $('#diff_nav').html(diffNavText)
1213 1231 }
1214 1232
1215 1233 curElem = $(curElem)
1216 1234 var offset = 100;
1217 1235 $(window).scrollTop(curElem.position().top - offset);
1218 1236
1219 1237 //clear selection
1220 1238 all.removeClass('selected')
1221 1239 curElem.addClass('selected')
1222 1240 }
1223 1241
1224 1242 scrollToPrevChunk = function () {
1225 1243 scrollToChunk(-1)
1226 1244 }
1227 1245 scrollToNextChunk = function () {
1228 1246 scrollToChunk(1)
1229 1247 }
1230 1248
1231 1249 </script>
1232 1250 % endif
1233 1251
1234 1252 <script type="text/javascript">
1235 1253 $('#diff_nav').html('loading diff...') // wait until whole page is loaded
1236 1254
1237 1255 $(document).ready(function () {
1238 1256
1239 1257 var contextPrefix = _gettext('Context file: ');
1240 1258 ## sticky sidebar
1241 1259 var sidebarElement = document.getElementById('diff-file-sticky');
1242 1260 sidebar = new StickySidebar(sidebarElement, {
1243 1261 topSpacing: 0,
1244 1262 bottomSpacing: 0,
1245 1263 innerWrapperSelector: '.sidebar__inner'
1246 1264 });
1247 1265 sidebarElement.addEventListener('affixed.static.stickySidebar', function () {
1248 1266 // reset our file so it's not holding new value
1249 1267 $('.fpath-placeholder-text').html(contextPrefix + ' - ')
1250 1268 });
1251 1269
1252 1270 updateSticky = function () {
1253 1271 sidebar.updateSticky();
1254 1272 Waypoint.refreshAll();
1255 1273 };
1256 1274
1257 1275 var animateText = function (fPath, anchorId) {
1258 1276 fPath = Select2.util.escapeMarkup(fPath);
1259 1277 $('.fpath-placeholder-text').html(contextPrefix + '<a href="#a_' + anchorId + '">' + fPath + '</a>')
1260 1278 };
1261 1279
1262 1280 ## dynamic file waypoints
1263 1281 var setFPathInfo = function(fPath, anchorId){
1264 1282 animateText(fPath, anchorId)
1265 1283 };
1266 1284
1267 1285 var codeBlock = $('.filediff');
1268 1286
1269 1287 // forward waypoint
1270 1288 codeBlock.waypoint(
1271 1289 function(direction) {
1272 1290 if (direction === "down"){
1273 1291 setFPathInfo($(this.element).data('fPath'), $(this.element).data('anchorId'))
1274 1292 }
1275 1293 }, {
1276 1294 offset: function () {
1277 1295 return 70;
1278 1296 },
1279 1297 context: '.fpath-placeholder'
1280 1298 }
1281 1299 );
1282 1300
1283 1301 // backward waypoint
1284 1302 codeBlock.waypoint(
1285 1303 function(direction) {
1286 1304 if (direction === "up"){
1287 1305 setFPathInfo($(this.element).data('fPath'), $(this.element).data('anchorId'))
1288 1306 }
1289 1307 }, {
1290 1308 offset: function () {
1291 1309 return -this.element.clientHeight + 90;
1292 1310 },
1293 1311 context: '.fpath-placeholder'
1294 1312 }
1295 1313 );
1296 1314
1297 1315 toggleWideDiff = function (el) {
1298 1316 updateSticky();
1299 1317 var wide = Rhodecode.comments.toggleWideMode(this);
1300 1318 storeUserSessionAttr('rc_user_session_attr.wide_diff_mode', wide);
1301 1319 if (wide === true) {
1302 1320 $(el).addClass('btn-active');
1303 1321 } else {
1304 1322 $(el).removeClass('btn-active');
1305 1323 }
1306 1324 return null;
1307 1325 };
1308 1326
1309 1327 toggleExpand = function (el, diffsetEl) {
1310 1328 var el = $(el);
1311 1329 if (el.hasClass('collapsed')) {
1312 1330 $('.filediff-collapse-state.collapse-{0}'.format(diffsetEl)).prop('checked', false);
1313 1331 el.removeClass('collapsed');
1314 1332 el.html(
1315 1333 '<i class="icon-minus-squared-alt icon-no-margin"></i>' +
1316 1334 _gettext('Collapse all files'));
1317 1335 }
1318 1336 else {
1319 1337 $('.filediff-collapse-state.collapse-{0}'.format(diffsetEl)).prop('checked', true);
1320 1338 el.addClass('collapsed');
1321 1339 el.html(
1322 1340 '<i class="icon-plus-squared-alt icon-no-margin"></i>' +
1323 1341 _gettext('Expand all files'));
1324 1342 }
1325 1343 updateSticky()
1326 1344 };
1327 1345
1328 1346 toggleCommitExpand = function (el) {
1329 1347 var $el = $(el);
1330 1348 var commits = $el.data('toggleCommitsCnt');
1331 1349 var collapseMsg = _ngettext('Collapse {0} commit', 'Collapse {0} commits', commits).format(commits);
1332 1350 var expandMsg = _ngettext('Expand {0} commit', 'Expand {0} commits', commits).format(commits);
1333 1351
1334 1352 if ($el.hasClass('collapsed')) {
1335 1353 $('.compare_select').show();
1336 1354 $('.compare_select_hidden').hide();
1337 1355
1338 1356 $el.removeClass('collapsed');
1339 1357 $el.html(
1340 1358 '<i class="icon-minus-squared-alt icon-no-margin"></i>' +
1341 1359 collapseMsg);
1342 1360 }
1343 1361 else {
1344 1362 $('.compare_select').hide();
1345 1363 $('.compare_select_hidden').show();
1346 1364 $el.addClass('collapsed');
1347 1365 $el.html(
1348 1366 '<i class="icon-plus-squared-alt icon-no-margin"></i>' +
1349 1367 expandMsg);
1350 1368 }
1351 1369 updateSticky();
1352 1370 };
1353 1371
1354 1372 // get stored diff mode and pre-enable it
1355 1373 if (templateContext.session_attrs.wide_diff_mode === "true") {
1356 1374 Rhodecode.comments.toggleWideMode(null);
1357 1375 $('.toggle-wide-diff').addClass('btn-active');
1358 1376 updateSticky();
1359 1377 }
1360 1378
1361 1379 // DIFF NAV //
1362 1380
1363 1381 // element to detect scroll direction of
1364 1382 var $window = $(window);
1365 1383
1366 1384 // initialize last scroll position
1367 1385 var lastScrollY = $window.scrollTop();
1368 1386
1369 1387 $window.on('resize scrollstop', {latency: 350}, function () {
1370 1388 var visibleChunks = $('.nav-chunk').withinviewport({top: 75});
1371 1389
1372 1390 // get current scroll position
1373 1391 var currentScrollY = $window.scrollTop();
1374 1392
1375 1393 // determine current scroll direction
1376 1394 if (currentScrollY > lastScrollY) {
1377 1395 var y = 'down'
1378 1396 } else if (currentScrollY !== lastScrollY) {
1379 1397 var y = 'up';
1380 1398 }
1381 1399
1382 1400 var pos = -1; // by default we use last element in viewport
1383 1401 if (y === 'down') {
1384 1402 pos = -1;
1385 1403 } else if (y === 'up') {
1386 1404 pos = 0;
1387 1405 }
1388 1406
1389 1407 if (visibleChunks.length > 0) {
1390 1408 $('.nav-chunk').removeClass('selected');
1391 1409 $(visibleChunks.get(pos)).addClass('selected');
1392 1410 }
1393 1411
1394 1412 // update last scroll position to current position
1395 1413 lastScrollY = currentScrollY;
1396 1414
1397 1415 });
1398 1416 $('#diff_nav').html(diffNavText);
1399 1417
1400 1418 });
1401 1419 </script>
1402 1420
1403 1421 </%def>
General Comments 0
You need to be logged in to leave comments. Login now