##// END OF EJS Templates
commits: unified expand commit logic and UI....
marcink -
r3187:d9b9dddd default
parent child Browse files
Show More
@@ -1,2475 +1,2470 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
30 30 //--- BASE ------------------//
31 31 .noscript-error {
32 32 top: 0;
33 33 left: 0;
34 34 width: 100%;
35 35 z-index: 101;
36 36 text-align: center;
37 37 font-size: 120%;
38 38 color: white;
39 39 background-color: @alert2;
40 40 padding: 5px 0 5px 0;
41 41 font-weight: @text-semibold-weight;
42 42 font-family: @text-semibold;
43 43 }
44 44
45 45 html {
46 46 display: table;
47 47 height: 100%;
48 48 width: 100%;
49 49 }
50 50
51 51 body {
52 52 display: table-cell;
53 53 width: 100%;
54 54 }
55 55
56 56 //--- LAYOUT ------------------//
57 57
58 58 .hidden{
59 59 display: none !important;
60 60 }
61 61
62 62 .box{
63 63 float: left;
64 64 width: 100%;
65 65 }
66 66
67 67 .browser-header {
68 68 clear: both;
69 69 }
70 70 .main {
71 71 clear: both;
72 72 padding:0 0 @pagepadding;
73 73 height: auto;
74 74
75 75 &:after { //clearfix
76 76 content:"";
77 77 clear:both;
78 78 width:100%;
79 79 display:block;
80 80 }
81 81 }
82 82
83 83 .action-link{
84 84 margin-left: @padding;
85 85 padding-left: @padding;
86 86 border-left: @border-thickness solid @border-default-color;
87 87 }
88 88
89 89 input + .action-link, .action-link.first{
90 90 border-left: none;
91 91 }
92 92
93 93 .action-link.last{
94 94 margin-right: @padding;
95 95 padding-right: @padding;
96 96 }
97 97
98 98 .action-link.active,
99 99 .action-link.active a{
100 100 color: @grey4;
101 101 }
102 102
103 103 .action-link.disabled {
104 104 color: @grey4;
105 105 cursor: inherit;
106 106 }
107 107
108 108 .clipboard-action {
109 109 cursor: pointer;
110 110 }
111 111
112 112 ul.simple-list{
113 113 list-style: none;
114 114 margin: 0;
115 115 padding: 0;
116 116 }
117 117
118 118 .main-content {
119 119 padding-bottom: @pagepadding;
120 120 }
121 121
122 122 .wide-mode-wrapper {
123 123 max-width:4000px !important;
124 124 }
125 125
126 126 .wrapper {
127 127 position: relative;
128 128 max-width: @wrapper-maxwidth;
129 129 margin: 0 auto;
130 130 }
131 131
132 132 #content {
133 133 clear: both;
134 134 padding: 0 @contentpadding;
135 135 }
136 136
137 137 .advanced-settings-fields{
138 138 input{
139 139 margin-left: @textmargin;
140 140 margin-right: @padding/2;
141 141 }
142 142 }
143 143
144 144 .cs_files_title {
145 145 margin: @pagepadding 0 0;
146 146 }
147 147
148 148 input.inline[type="file"] {
149 149 display: inline;
150 150 }
151 151
152 152 .error_page {
153 153 margin: 10% auto;
154 154
155 155 h1 {
156 156 color: @grey2;
157 157 }
158 158
159 159 .alert {
160 160 margin: @padding 0;
161 161 }
162 162
163 163 .error-branding {
164 164 color: @grey4;
165 165 font-weight: @text-semibold-weight;
166 166 font-family: @text-semibold;
167 167 }
168 168
169 169 .error_message {
170 170 font-family: @text-regular;
171 171 }
172 172
173 173 .sidebar {
174 174 min-height: 275px;
175 175 margin: 0;
176 176 padding: 0 0 @sidebarpadding @sidebarpadding;
177 177 border: none;
178 178 }
179 179
180 180 .main-content {
181 181 position: relative;
182 182 margin: 0 @sidebarpadding @sidebarpadding;
183 183 padding: 0 0 0 @sidebarpadding;
184 184 border-left: @border-thickness solid @grey5;
185 185
186 186 @media (max-width:767px) {
187 187 clear: both;
188 188 width: 100%;
189 189 margin: 0;
190 190 border: none;
191 191 }
192 192 }
193 193
194 194 .inner-column {
195 195 float: left;
196 196 width: 29.75%;
197 197 min-height: 150px;
198 198 margin: @sidebarpadding 2% 0 0;
199 199 padding: 0 2% 0 0;
200 200 border-right: @border-thickness solid @grey5;
201 201
202 202 @media (max-width:767px) {
203 203 clear: both;
204 204 width: 100%;
205 205 border: none;
206 206 }
207 207
208 208 ul {
209 209 padding-left: 1.25em;
210 210 }
211 211
212 212 &:last-child {
213 213 margin: @sidebarpadding 0 0;
214 214 border: none;
215 215 }
216 216
217 217 h4 {
218 218 margin: 0 0 @padding;
219 219 font-weight: @text-semibold-weight;
220 220 font-family: @text-semibold;
221 221 }
222 222 }
223 223 }
224 224 .error-page-logo {
225 225 width: 130px;
226 226 height: 160px;
227 227 }
228 228
229 229 // HEADER
230 230 .header {
231 231
232 232 // TODO: johbo: Fix login pages, so that they work without a min-height
233 233 // for the header and then remove the min-height. I chose a smaller value
234 234 // intentionally here to avoid rendering issues in the main navigation.
235 235 min-height: 49px;
236 236
237 237 position: relative;
238 238 vertical-align: bottom;
239 239 padding: 0 @header-padding;
240 240 background-color: @grey2;
241 241 color: @grey5;
242 242
243 243 .title {
244 244 overflow: visible;
245 245 }
246 246
247 247 &:before,
248 248 &:after {
249 249 content: "";
250 250 clear: both;
251 251 width: 100%;
252 252 }
253 253
254 254 // TODO: johbo: Avoids breaking "Repositories" chooser
255 255 .select2-container .select2-choice .select2-arrow {
256 256 display: none;
257 257 }
258 258 }
259 259
260 260 #header-inner {
261 261 &.title {
262 262 margin: 0;
263 263 }
264 264 &:before,
265 265 &:after {
266 266 content: "";
267 267 clear: both;
268 268 }
269 269 }
270 270
271 271 // Gists
272 272 #files_data {
273 273 clear: both; //for firefox
274 274 }
275 275 #gistid {
276 276 margin-right: @padding;
277 277 }
278 278
279 279 // Global Settings Editor
280 280 .textarea.editor {
281 281 float: left;
282 282 position: relative;
283 283 max-width: @texteditor-width;
284 284
285 285 select {
286 286 position: absolute;
287 287 top:10px;
288 288 right:0;
289 289 }
290 290
291 291 .CodeMirror {
292 292 margin: 0;
293 293 }
294 294
295 295 .help-block {
296 296 margin: 0 0 @padding;
297 297 padding:.5em;
298 298 background-color: @grey6;
299 299 &.pre-formatting {
300 300 white-space: pre;
301 301 }
302 302 }
303 303 }
304 304
305 305 ul.auth_plugins {
306 306 margin: @padding 0 @padding @legend-width;
307 307 padding: 0;
308 308
309 309 li {
310 310 margin-bottom: @padding;
311 311 line-height: 1em;
312 312 list-style-type: none;
313 313
314 314 .auth_buttons .btn {
315 315 margin-right: @padding;
316 316 }
317 317
318 318 &:before { content: none; }
319 319 }
320 320 }
321 321
322 322
323 323 // My Account PR list
324 324
325 325 #show_closed {
326 326 margin: 0 1em 0 0;
327 327 }
328 328
329 329 .pullrequestlist {
330 330 .closed {
331 331 background-color: @grey6;
332 332 }
333 333 .td-status {
334 334 padding-left: .5em;
335 335 }
336 336 .log-container .truncate {
337 337 height: 2.75em;
338 338 white-space: pre-line;
339 339 }
340 340 table.rctable .user {
341 341 padding-left: 0;
342 342 }
343 343 table.rctable {
344 344 td.td-description,
345 345 .rc-user {
346 346 min-width: auto;
347 347 }
348 348 }
349 349 }
350 350
351 351 // Pull Requests
352 352
353 353 .pullrequests_section_head {
354 354 display: block;
355 355 clear: both;
356 356 margin: @padding 0;
357 357 font-weight: @text-bold-weight;
358 358 font-family: @text-bold;
359 359 }
360 360
361 361 .pr-origininfo, .pr-targetinfo {
362 362 position: relative;
363 363
364 364 .tag {
365 365 display: inline-block;
366 366 margin: 0 1em .5em 0;
367 367 }
368 368
369 369 .clone-url {
370 370 display: inline-block;
371 371 margin: 0 0 .5em 0;
372 372 padding: 0;
373 373 line-height: 1.2em;
374 374 }
375 375 }
376 376
377 377 .pr-mergeinfo {
378 378 min-width: 95% !important;
379 379 padding: 0 !important;
380 380 border: 0;
381 381 }
382 382 .pr-mergeinfo-copy {
383 383 padding: 0 0;
384 384 }
385 385
386 386 .pr-pullinfo {
387 387 min-width: 95% !important;
388 388 padding: 0 !important;
389 389 border: 0;
390 390 }
391 391 .pr-pullinfo-copy {
392 392 padding: 0 0;
393 393 }
394 394
395 395
396 396 #pr-title-input {
397 397 width: 72%;
398 398 font-size: 1em;
399 399 margin: 0;
400 400 padding: 0 0 0 @padding/4;
401 401 line-height: 1.7em;
402 402 color: @text-color;
403 403 letter-spacing: .02em;
404 404 font-weight: @text-bold-weight;
405 405 font-family: @text-bold;
406 406 }
407 407
408 408 #pullrequest_title {
409 409 width: 100%;
410 410 box-sizing: border-box;
411 411 }
412 412
413 413 #pr_open_message {
414 414 border: @border-thickness solid #fff;
415 415 border-radius: @border-radius;
416 416 padding: @padding-large-vertical @padding-large-vertical @padding-large-vertical 0;
417 417 text-align: left;
418 418 overflow: hidden;
419 419 }
420 420
421 421 .pr-submit-button {
422 422 float: right;
423 423 margin: 0 0 0 5px;
424 424 }
425 425
426 426 .pr-spacing-container {
427 427 padding: 20px;
428 428 clear: both
429 429 }
430 430
431 431 #pr-description-input {
432 432 margin-bottom: 0;
433 433 }
434 434
435 435 .pr-description-label {
436 436 vertical-align: top;
437 437 }
438 438
439 439 .perms_section_head {
440 440 min-width: 625px;
441 441
442 442 h2 {
443 443 margin-bottom: 0;
444 444 }
445 445
446 446 .label-checkbox {
447 447 float: left;
448 448 }
449 449
450 450 &.field {
451 451 margin: @space 0 @padding;
452 452 }
453 453
454 454 &:first-child.field {
455 455 margin-top: 0;
456 456
457 457 .label {
458 458 margin-top: 0;
459 459 padding-top: 0;
460 460 }
461 461
462 462 .radios {
463 463 padding-top: 0;
464 464 }
465 465 }
466 466
467 467 .radios {
468 468 position: relative;
469 469 width: 505px;
470 470 }
471 471 }
472 472
473 473 //--- MODULES ------------------//
474 474
475 475
476 476 // Server Announcement
477 477 #server-announcement {
478 478 width: 95%;
479 479 margin: @padding auto;
480 480 padding: @padding;
481 481 border-width: 2px;
482 482 border-style: solid;
483 483 .border-radius(2px);
484 484 font-weight: @text-bold-weight;
485 485 font-family: @text-bold;
486 486
487 487 &.info { border-color: @alert4; background-color: @alert4-inner; }
488 488 &.warning { border-color: @alert3; background-color: @alert3-inner; }
489 489 &.error { border-color: @alert2; background-color: @alert2-inner; }
490 490 &.success { border-color: @alert1; background-color: @alert1-inner; }
491 491 &.neutral { border-color: @grey3; background-color: @grey6; }
492 492 }
493 493
494 494 // Fixed Sidebar Column
495 495 .sidebar-col-wrapper {
496 496 padding-left: @sidebar-all-width;
497 497
498 498 .sidebar {
499 499 width: @sidebar-width;
500 500 margin-left: -@sidebar-all-width;
501 501 }
502 502 }
503 503
504 504 .sidebar-col-wrapper.scw-small {
505 505 padding-left: @sidebar-small-all-width;
506 506
507 507 .sidebar {
508 508 width: @sidebar-small-width;
509 509 margin-left: -@sidebar-small-all-width;
510 510 }
511 511 }
512 512
513 513
514 514 // FOOTER
515 515 #footer {
516 516 padding: 0;
517 517 text-align: center;
518 518 vertical-align: middle;
519 519 color: @grey2;
520 520 background-color: @grey6;
521 521
522 522 p {
523 523 margin: 0;
524 524 padding: 1em;
525 525 line-height: 1em;
526 526 }
527 527
528 528 .server-instance { //server instance
529 529 display: none;
530 530 }
531 531
532 532 .title {
533 533 float: none;
534 534 margin: 0 auto;
535 535 }
536 536 }
537 537
538 538 button.close {
539 539 padding: 0;
540 540 cursor: pointer;
541 541 background: transparent;
542 542 border: 0;
543 543 .box-shadow(none);
544 544 -webkit-appearance: none;
545 545 }
546 546
547 547 .close {
548 548 float: right;
549 549 font-size: 21px;
550 550 font-family: @text-bootstrap;
551 551 line-height: 1em;
552 552 font-weight: bold;
553 553 color: @grey2;
554 554
555 555 &:hover,
556 556 &:focus {
557 557 color: @grey1;
558 558 text-decoration: none;
559 559 cursor: pointer;
560 560 }
561 561 }
562 562
563 563 // GRID
564 564 .sorting,
565 565 .sorting_desc,
566 566 .sorting_asc {
567 567 cursor: pointer;
568 568 }
569 569 .sorting_desc:after {
570 570 content: "\00A0\25B2";
571 571 font-size: .75em;
572 572 }
573 573 .sorting_asc:after {
574 574 content: "\00A0\25BC";
575 575 font-size: .68em;
576 576 }
577 577
578 578
579 579 .user_auth_tokens {
580 580
581 581 &.truncate {
582 582 white-space: nowrap;
583 583 overflow: hidden;
584 584 text-overflow: ellipsis;
585 585 }
586 586
587 587 .fields .field .input {
588 588 margin: 0;
589 589 }
590 590
591 591 input#description {
592 592 width: 100px;
593 593 margin: 0;
594 594 }
595 595
596 596 .drop-menu {
597 597 // TODO: johbo: Remove this, should work out of the box when
598 598 // having multiple inputs inline
599 599 margin: 0 0 0 5px;
600 600 }
601 601 }
602 602 #user_list_table {
603 603 .closed {
604 604 background-color: @grey6;
605 605 }
606 606 }
607 607
608 608
609 609 input {
610 610 &.disabled {
611 611 opacity: .5;
612 612 }
613 613 }
614 614
615 615 // remove extra padding in firefox
616 616 input::-moz-focus-inner { border:0; padding:0 }
617 617
618 618 .adjacent input {
619 619 margin-bottom: @padding;
620 620 }
621 621
622 622 .permissions_boxes {
623 623 display: block;
624 624 }
625 625
626 //TODO: lisa: this should be in tables
627 .show_more_col {
628 width: 20px;
629 }
630
631 626 //FORMS
632 627
633 628 .medium-inline,
634 629 input#description.medium-inline {
635 630 display: inline;
636 631 width: @medium-inline-input-width;
637 632 min-width: 100px;
638 633 }
639 634
640 635 select {
641 636 //reset
642 637 -webkit-appearance: none;
643 638 -moz-appearance: none;
644 639
645 640 display: inline-block;
646 641 height: 28px;
647 642 width: auto;
648 643 margin: 0 @padding @padding 0;
649 644 padding: 0 18px 0 8px;
650 645 line-height:1em;
651 646 font-size: @basefontsize;
652 647 border: @border-thickness solid @rcblue;
653 648 background:white url("../images/dt-arrow-dn.png") no-repeat 100% 50%;
654 649 color: @rcblue;
655 650
656 651 &:after {
657 652 content: "\00A0\25BE";
658 653 }
659 654
660 655 &:focus {
661 656 outline: none;
662 657 }
663 658 }
664 659
665 660 option {
666 661 &:focus {
667 662 outline: none;
668 663 }
669 664 }
670 665
671 666 input,
672 667 textarea {
673 668 padding: @input-padding;
674 669 border: @input-border-thickness solid @border-highlight-color;
675 670 .border-radius (@border-radius);
676 671 font-family: @text-light;
677 672 font-size: @basefontsize;
678 673
679 674 &.input-sm {
680 675 padding: 5px;
681 676 }
682 677
683 678 &#description {
684 679 min-width: @input-description-minwidth;
685 680 min-height: 1em;
686 681 padding: 10px;
687 682 }
688 683 }
689 684
690 685 .field-sm {
691 686 input,
692 687 textarea {
693 688 padding: 5px;
694 689 }
695 690 }
696 691
697 692 textarea {
698 693 display: block;
699 694 clear: both;
700 695 width: 100%;
701 696 min-height: 100px;
702 697 margin-bottom: @padding;
703 698 .box-sizing(border-box);
704 699 overflow: auto;
705 700 }
706 701
707 702 label {
708 703 font-family: @text-light;
709 704 }
710 705
711 706 // GRAVATARS
712 707 // centers gravatar on username to the right
713 708
714 709 .gravatar {
715 710 display: inline;
716 711 min-width: 16px;
717 712 min-height: 16px;
718 713 margin: -5px 0;
719 714 padding: 0;
720 715 line-height: 1em;
721 716 border: 1px solid @grey4;
722 717 box-sizing: content-box;
723 718
724 719 &.gravatar-large {
725 720 margin: -0.5em .25em -0.5em 0;
726 721 }
727 722
728 723 & + .user {
729 724 display: inline;
730 725 margin: 0;
731 726 padding: 0 0 0 .17em;
732 727 line-height: 1em;
733 728 }
734 729 }
735 730
736 731 .user-inline-data {
737 732 display: inline-block;
738 733 float: left;
739 734 padding-left: .5em;
740 735 line-height: 1.3em;
741 736 }
742 737
743 738 .rc-user { // gravatar + user wrapper
744 739 float: left;
745 740 position: relative;
746 741 min-width: 100px;
747 742 max-width: 200px;
748 743 min-height: (@gravatar-size + @border-thickness * 2); // account for border
749 744 display: block;
750 745 padding: 0 0 0 (@gravatar-size + @basefontsize/2 + @border-thickness * 2);
751 746
752 747
753 748 .gravatar {
754 749 display: block;
755 750 position: absolute;
756 751 top: 0;
757 752 left: 0;
758 753 min-width: @gravatar-size;
759 754 min-height: @gravatar-size;
760 755 margin: 0;
761 756 }
762 757
763 758 .user {
764 759 display: block;
765 760 max-width: 175px;
766 761 padding-top: 2px;
767 762 overflow: hidden;
768 763 text-overflow: ellipsis;
769 764 }
770 765 }
771 766
772 767 .gist-gravatar,
773 768 .journal_container {
774 769 .gravatar-large {
775 770 margin: 0 .5em -10px 0;
776 771 }
777 772 }
778 773
779 774
780 775 // ADMIN SETTINGS
781 776
782 777 // Tag Patterns
783 778 .tag_patterns {
784 779 .tag_input {
785 780 margin-bottom: @padding;
786 781 }
787 782 }
788 783
789 784 .locked_input {
790 785 position: relative;
791 786
792 787 input {
793 788 display: inline;
794 789 margin: 3px 5px 0px 0px;
795 790 }
796 791
797 792 br {
798 793 display: none;
799 794 }
800 795
801 796 .error-message {
802 797 float: left;
803 798 width: 100%;
804 799 }
805 800
806 801 .lock_input_button {
807 802 display: inline;
808 803 }
809 804
810 805 .help-block {
811 806 clear: both;
812 807 }
813 808 }
814 809
815 810 // Notifications
816 811
817 812 .notifications_buttons {
818 813 margin: 0 0 @space 0;
819 814 padding: 0;
820 815
821 816 .btn {
822 817 display: inline-block;
823 818 }
824 819 }
825 820
826 821 .notification-list {
827 822
828 823 div {
829 824 display: inline-block;
830 825 vertical-align: middle;
831 826 }
832 827
833 828 .container {
834 829 display: block;
835 830 margin: 0 0 @padding 0;
836 831 }
837 832
838 833 .delete-notifications {
839 834 margin-left: @padding;
840 835 text-align: right;
841 836 cursor: pointer;
842 837 }
843 838
844 839 .read-notifications {
845 840 margin-left: @padding/2;
846 841 text-align: right;
847 842 width: 35px;
848 843 cursor: pointer;
849 844 }
850 845
851 846 .icon-minus-sign {
852 847 color: @alert2;
853 848 }
854 849
855 850 .icon-ok-sign {
856 851 color: @alert1;
857 852 }
858 853 }
859 854
860 855 .user_settings {
861 856 float: left;
862 857 clear: both;
863 858 display: block;
864 859 width: 100%;
865 860
866 861 .gravatar_box {
867 862 margin-bottom: @padding;
868 863
869 864 &:after {
870 865 content: " ";
871 866 clear: both;
872 867 width: 100%;
873 868 }
874 869 }
875 870
876 871 .fields .field {
877 872 clear: both;
878 873 }
879 874 }
880 875
881 876 .advanced_settings {
882 877 margin-bottom: @space;
883 878
884 879 .help-block {
885 880 margin-left: 0;
886 881 }
887 882
888 883 button + .help-block {
889 884 margin-top: @padding;
890 885 }
891 886 }
892 887
893 888 // admin settings radio buttons and labels
894 889 .label-2 {
895 890 float: left;
896 891 width: @label2-width;
897 892
898 893 label {
899 894 color: @grey1;
900 895 }
901 896 }
902 897 .checkboxes {
903 898 float: left;
904 899 width: @checkboxes-width;
905 900 margin-bottom: @padding;
906 901
907 902 .checkbox {
908 903 width: 100%;
909 904
910 905 label {
911 906 margin: 0;
912 907 padding: 0;
913 908 }
914 909 }
915 910
916 911 .checkbox + .checkbox {
917 912 display: inline-block;
918 913 }
919 914
920 915 label {
921 916 margin-right: 1em;
922 917 }
923 918 }
924 919
925 920 // CHANGELOG
926 921 .container_header {
927 922 float: left;
928 923 display: block;
929 924 width: 100%;
930 925 margin: @padding 0 @padding;
931 926
932 927 #filter_changelog {
933 928 float: left;
934 929 margin-right: @padding;
935 930 }
936 931
937 932 .breadcrumbs_light {
938 933 display: inline-block;
939 934 }
940 935 }
941 936
942 937 .info_box {
943 938 float: right;
944 939 }
945 940
946 941
947 942 #graph_nodes {
948 943 padding-top: 43px;
949 944 }
950 945
951 946 #graph_content{
952 947
953 948 // adjust for table headers so that graph renders properly
954 949 // #graph_nodes padding - table cell padding
955 950 padding-top: (@space - (@basefontsize * 2.4));
956 951
957 952 &.graph_full_width {
958 953 width: 100%;
959 954 max-width: 100%;
960 955 }
961 956 }
962 957
963 958 #graph {
964 959 .flag_status {
965 960 margin: 0;
966 961 }
967 962
968 963 .pagination-left {
969 964 float: left;
970 965 clear: both;
971 966 }
972 967
973 968 .log-container {
974 969 max-width: 345px;
975 970
976 971 .message{
977 972 max-width: 340px;
978 973 }
979 974 }
980 975
981 976 .graph-col-wrapper {
982 977 padding-left: 110px;
983 978
984 979 #graph_nodes {
985 980 width: 100px;
986 981 margin-left: -110px;
987 982 float: left;
988 983 clear: left;
989 984 }
990 985 }
991 986
992 987 .load-more-commits {
993 988 text-align: center;
994 989 }
995 990 .load-more-commits:hover {
996 991 background-color: @grey7;
997 992 }
998 993 .load-more-commits {
999 994 a {
1000 995 display: block;
1001 996 }
1002 997 }
1003 998 }
1004 999
1005 1000 #filter_changelog {
1006 1001 float: left;
1007 1002 }
1008 1003
1009 1004
1010 1005 //--- THEME ------------------//
1011 1006
1012 1007 #logo {
1013 1008 float: left;
1014 1009 margin: 9px 0 0 0;
1015 1010
1016 1011 .header {
1017 1012 background-color: transparent;
1018 1013 }
1019 1014
1020 1015 a {
1021 1016 display: inline-block;
1022 1017 }
1023 1018
1024 1019 img {
1025 1020 height:30px;
1026 1021 }
1027 1022 }
1028 1023
1029 1024 .logo-wrapper {
1030 1025 float:left;
1031 1026 }
1032 1027
1033 1028 .branding{
1034 1029 float: left;
1035 1030 padding: 9px 2px;
1036 1031 line-height: 1em;
1037 1032 font-size: @navigation-fontsize;
1038 1033 }
1039 1034
1040 1035 img {
1041 1036 border: none;
1042 1037 outline: none;
1043 1038 }
1044 1039 user-profile-header
1045 1040 label {
1046 1041
1047 1042 input[type="checkbox"] {
1048 1043 margin-right: 1em;
1049 1044 }
1050 1045 input[type="radio"] {
1051 1046 margin-right: 1em;
1052 1047 }
1053 1048 }
1054 1049
1055 1050 .flag_status {
1056 1051 margin: 2px 8px 6px 2px;
1057 1052 &.under_review {
1058 1053 .circle(5px, @alert3);
1059 1054 }
1060 1055 &.approved {
1061 1056 .circle(5px, @alert1);
1062 1057 }
1063 1058 &.rejected,
1064 1059 &.forced_closed{
1065 1060 .circle(5px, @alert2);
1066 1061 }
1067 1062 &.not_reviewed {
1068 1063 .circle(5px, @grey5);
1069 1064 }
1070 1065 }
1071 1066
1072 1067 .flag_status_comment_box {
1073 1068 margin: 5px 6px 0px 2px;
1074 1069 }
1075 1070 .test_pattern_preview {
1076 1071 margin: @space 0;
1077 1072
1078 1073 p {
1079 1074 margin-bottom: 0;
1080 1075 border-bottom: @border-thickness solid @border-default-color;
1081 1076 color: @grey3;
1082 1077 }
1083 1078
1084 1079 .btn {
1085 1080 margin-bottom: @padding;
1086 1081 }
1087 1082 }
1088 1083 #test_pattern_result {
1089 1084 display: none;
1090 1085 &:extend(pre);
1091 1086 padding: .9em;
1092 1087 color: @grey3;
1093 1088 background-color: @grey7;
1094 1089 border-right: @border-thickness solid @border-default-color;
1095 1090 border-bottom: @border-thickness solid @border-default-color;
1096 1091 border-left: @border-thickness solid @border-default-color;
1097 1092 }
1098 1093
1099 1094 #repo_vcs_settings {
1100 1095 #inherit_overlay_vcs_default {
1101 1096 display: none;
1102 1097 }
1103 1098 #inherit_overlay_vcs_custom {
1104 1099 display: custom;
1105 1100 }
1106 1101 &.inherited {
1107 1102 #inherit_overlay_vcs_default {
1108 1103 display: block;
1109 1104 }
1110 1105 #inherit_overlay_vcs_custom {
1111 1106 display: none;
1112 1107 }
1113 1108 }
1114 1109 }
1115 1110
1116 1111 .issue-tracker-link {
1117 1112 color: @rcblue;
1118 1113 }
1119 1114
1120 1115 // Issue Tracker Table Show/Hide
1121 1116 #repo_issue_tracker {
1122 1117 #inherit_overlay {
1123 1118 display: none;
1124 1119 }
1125 1120 #custom_overlay {
1126 1121 display: custom;
1127 1122 }
1128 1123 &.inherited {
1129 1124 #inherit_overlay {
1130 1125 display: block;
1131 1126 }
1132 1127 #custom_overlay {
1133 1128 display: none;
1134 1129 }
1135 1130 }
1136 1131 }
1137 1132 table.issuetracker {
1138 1133 &.readonly {
1139 1134 tr, td {
1140 1135 color: @grey3;
1141 1136 }
1142 1137 }
1143 1138 .edit {
1144 1139 display: none;
1145 1140 }
1146 1141 .editopen {
1147 1142 .edit {
1148 1143 display: inline;
1149 1144 }
1150 1145 .entry {
1151 1146 display: none;
1152 1147 }
1153 1148 }
1154 1149 tr td.td-action {
1155 1150 min-width: 117px;
1156 1151 }
1157 1152 td input {
1158 1153 max-width: none;
1159 1154 min-width: 30px;
1160 1155 width: 80%;
1161 1156 }
1162 1157 .issuetracker_pref input {
1163 1158 width: 40%;
1164 1159 }
1165 1160 input.edit_issuetracker_update {
1166 1161 margin-right: 0;
1167 1162 width: auto;
1168 1163 }
1169 1164 }
1170 1165
1171 1166 table.integrations {
1172 1167 .td-icon {
1173 1168 width: 20px;
1174 1169 .integration-icon {
1175 1170 height: 20px;
1176 1171 width: 20px;
1177 1172 }
1178 1173 }
1179 1174 }
1180 1175
1181 1176 .integrations {
1182 1177 a.integration-box {
1183 1178 color: @text-color;
1184 1179 &:hover {
1185 1180 .panel {
1186 1181 background: #fbfbfb;
1187 1182 }
1188 1183 }
1189 1184 .integration-icon {
1190 1185 width: 30px;
1191 1186 height: 30px;
1192 1187 margin-right: 20px;
1193 1188 float: left;
1194 1189 }
1195 1190
1196 1191 .panel-body {
1197 1192 padding: 10px;
1198 1193 }
1199 1194 .panel {
1200 1195 margin-bottom: 10px;
1201 1196 }
1202 1197 h2 {
1203 1198 display: inline-block;
1204 1199 margin: 0;
1205 1200 min-width: 140px;
1206 1201 }
1207 1202 }
1208 1203 a.integration-box.dummy-integration {
1209 1204 color: @grey4
1210 1205 }
1211 1206 }
1212 1207
1213 1208 //Permissions Settings
1214 1209 #add_perm {
1215 1210 margin: 0 0 @padding;
1216 1211 cursor: pointer;
1217 1212 }
1218 1213
1219 1214 .perm_ac {
1220 1215 input {
1221 1216 width: 95%;
1222 1217 }
1223 1218 }
1224 1219
1225 1220 .autocomplete-suggestions {
1226 1221 width: auto !important; // overrides autocomplete.js
1227 1222 margin: 0;
1228 1223 border: @border-thickness solid @rcblue;
1229 1224 border-radius: @border-radius;
1230 1225 color: @rcblue;
1231 1226 background-color: white;
1232 1227 }
1233 1228 .autocomplete-selected {
1234 1229 background: #F0F0F0;
1235 1230 }
1236 1231 .ac-container-wrap {
1237 1232 margin: 0;
1238 1233 padding: 8px;
1239 1234 border-bottom: @border-thickness solid @rclightblue;
1240 1235 list-style-type: none;
1241 1236 cursor: pointer;
1242 1237
1243 1238 &:hover {
1244 1239 background-color: @rclightblue;
1245 1240 }
1246 1241
1247 1242 img {
1248 1243 height: @gravatar-size;
1249 1244 width: @gravatar-size;
1250 1245 margin-right: 1em;
1251 1246 }
1252 1247
1253 1248 strong {
1254 1249 font-weight: normal;
1255 1250 }
1256 1251 }
1257 1252
1258 1253 // Settings Dropdown
1259 1254 .user-menu .container {
1260 1255 padding: 0 4px;
1261 1256 margin: 0;
1262 1257 }
1263 1258
1264 1259 .user-menu .gravatar {
1265 1260 cursor: pointer;
1266 1261 }
1267 1262
1268 1263 .codeblock {
1269 1264 margin-bottom: @padding;
1270 1265 clear: both;
1271 1266
1272 1267 .stats{
1273 1268 overflow: hidden;
1274 1269 }
1275 1270
1276 1271 .message{
1277 1272 textarea{
1278 1273 margin: 0;
1279 1274 }
1280 1275 }
1281 1276
1282 1277 .code-header {
1283 1278 .stats {
1284 1279 line-height: 2em;
1285 1280
1286 1281 .revision_id {
1287 1282 margin-left: 0;
1288 1283 }
1289 1284 .buttons {
1290 1285 padding-right: 0;
1291 1286 }
1292 1287 }
1293 1288
1294 1289 .item{
1295 1290 margin-right: 0.5em;
1296 1291 }
1297 1292 }
1298 1293
1299 1294 #editor_container{
1300 1295 position: relative;
1301 1296 margin: @padding;
1302 1297 }
1303 1298 }
1304 1299
1305 1300 #file_history_container {
1306 1301 display: none;
1307 1302 }
1308 1303
1309 1304 .file-history-inner {
1310 1305 margin-bottom: 10px;
1311 1306 }
1312 1307
1313 1308 // Pull Requests
1314 1309 .summary-details {
1315 1310 width: 72%;
1316 1311 }
1317 1312 .pr-summary {
1318 1313 border-bottom: @border-thickness solid @grey5;
1319 1314 margin-bottom: @space;
1320 1315 }
1321 1316 .reviewers-title {
1322 1317 width: 25%;
1323 1318 min-width: 200px;
1324 1319 }
1325 1320 .reviewers {
1326 1321 width: 25%;
1327 1322 min-width: 200px;
1328 1323 }
1329 1324 .reviewers ul li {
1330 1325 position: relative;
1331 1326 width: 100%;
1332 1327 padding-bottom: 8px;
1333 1328 }
1334 1329
1335 1330 .reviewer_entry {
1336 1331 min-height: 55px;
1337 1332 }
1338 1333
1339 1334 .reviewers_member {
1340 1335 width: 100%;
1341 1336 overflow: auto;
1342 1337 }
1343 1338 .reviewer_reason {
1344 1339 padding-left: 20px;
1345 1340 line-height: 1.5em;
1346 1341 }
1347 1342 .reviewer_status {
1348 1343 display: inline-block;
1349 1344 vertical-align: top;
1350 1345 width: 25px;
1351 1346 min-width: 25px;
1352 1347 height: 1.2em;
1353 1348 margin-top: 3px;
1354 1349 line-height: 1em;
1355 1350 }
1356 1351
1357 1352 .reviewer_name {
1358 1353 display: inline-block;
1359 1354 max-width: 83%;
1360 1355 padding-right: 20px;
1361 1356 vertical-align: middle;
1362 1357 line-height: 1;
1363 1358
1364 1359 .rc-user {
1365 1360 min-width: 0;
1366 1361 margin: -2px 1em 0 0;
1367 1362 }
1368 1363
1369 1364 .reviewer {
1370 1365 float: left;
1371 1366 }
1372 1367 }
1373 1368
1374 1369 .reviewer_member_mandatory {
1375 1370 position: absolute;
1376 1371 left: 15px;
1377 1372 top: 8px;
1378 1373 width: 16px;
1379 1374 font-size: 11px;
1380 1375 margin: 0;
1381 1376 padding: 0;
1382 1377 color: black;
1383 1378 }
1384 1379
1385 1380 .reviewer_member_mandatory_remove,
1386 1381 .reviewer_member_remove {
1387 1382 position: absolute;
1388 1383 right: 0;
1389 1384 top: 0;
1390 1385 width: 16px;
1391 1386 margin-bottom: 10px;
1392 1387 padding: 0;
1393 1388 color: black;
1394 1389 }
1395 1390
1396 1391 .reviewer_member_mandatory_remove {
1397 1392 color: @grey4;
1398 1393 }
1399 1394
1400 1395 .reviewer_member_status {
1401 1396 margin-top: 5px;
1402 1397 }
1403 1398 .pr-summary #summary{
1404 1399 width: 100%;
1405 1400 }
1406 1401 .pr-summary .action_button:hover {
1407 1402 border: 0;
1408 1403 cursor: pointer;
1409 1404 }
1410 1405 .pr-details-title {
1411 1406 padding-bottom: 8px;
1412 1407 border-bottom: @border-thickness solid @grey5;
1413 1408
1414 1409 .action_button.disabled {
1415 1410 color: @grey4;
1416 1411 cursor: inherit;
1417 1412 }
1418 1413 .action_button {
1419 1414 color: @rcblue;
1420 1415 }
1421 1416 }
1422 1417 .pr-details-content {
1423 1418 margin-top: @textmargin;
1424 1419 margin-bottom: @textmargin;
1425 1420 }
1426 1421
1427 1422 .pr-reviewer-rules {
1428 1423 padding: 10px 0px 20px 0px;
1429 1424 }
1430 1425
1431 1426 .group_members {
1432 1427 margin-top: 0;
1433 1428 padding: 0;
1434 1429 list-style: outside none none;
1435 1430
1436 1431 img {
1437 1432 height: @gravatar-size;
1438 1433 width: @gravatar-size;
1439 1434 margin-right: .5em;
1440 1435 margin-left: 3px;
1441 1436 }
1442 1437
1443 1438 .to-delete {
1444 1439 .user {
1445 1440 text-decoration: line-through;
1446 1441 }
1447 1442 }
1448 1443 }
1449 1444
1450 1445 .compare_view_commits_title {
1451 1446 .disabled {
1452 1447 cursor: inherit;
1453 1448 &:hover{
1454 1449 background-color: inherit;
1455 1450 color: inherit;
1456 1451 }
1457 1452 }
1458 1453 }
1459 1454
1460 1455 .subtitle-compare {
1461 1456 margin: -15px 0px 0px 0px;
1462 1457 }
1463 1458
1464 1459 .comments-summary-td {
1465 1460 border-top: 1px dashed @grey5;
1466 1461 }
1467 1462
1468 1463 // new entry in group_members
1469 1464 .td-author-new-entry {
1470 1465 background-color: rgba(red(@alert1), green(@alert1), blue(@alert1), 0.3);
1471 1466 }
1472 1467
1473 1468 .usergroup_member_remove {
1474 1469 width: 16px;
1475 1470 margin-bottom: 10px;
1476 1471 padding: 0;
1477 1472 color: black !important;
1478 1473 cursor: pointer;
1479 1474 }
1480 1475
1481 1476 .reviewer_ac .ac-input {
1482 1477 width: 92%;
1483 1478 margin-bottom: 1em;
1484 1479 }
1485 1480
1486 1481 .compare_view_commits tr{
1487 1482 height: 20px;
1488 1483 }
1489 1484 .compare_view_commits td {
1490 1485 vertical-align: top;
1491 1486 padding-top: 10px;
1492 1487 }
1493 1488 .compare_view_commits .author {
1494 1489 margin-left: 5px;
1495 1490 }
1496 1491
1497 1492 .compare_view_commits {
1498 1493 .color-a {
1499 1494 color: @alert1;
1500 1495 }
1501 1496
1502 1497 .color-c {
1503 1498 color: @color3;
1504 1499 }
1505 1500
1506 1501 .color-r {
1507 1502 color: @color5;
1508 1503 }
1509 1504
1510 1505 .color-a-bg {
1511 1506 background-color: @alert1;
1512 1507 }
1513 1508
1514 1509 .color-c-bg {
1515 1510 background-color: @alert3;
1516 1511 }
1517 1512
1518 1513 .color-r-bg {
1519 1514 background-color: @alert2;
1520 1515 }
1521 1516
1522 1517 .color-a-border {
1523 1518 border: 1px solid @alert1;
1524 1519 }
1525 1520
1526 1521 .color-c-border {
1527 1522 border: 1px solid @alert3;
1528 1523 }
1529 1524
1530 1525 .color-r-border {
1531 1526 border: 1px solid @alert2;
1532 1527 }
1533 1528
1534 1529 .commit-change-indicator {
1535 1530 width: 15px;
1536 1531 height: 15px;
1537 1532 position: relative;
1538 1533 left: 15px;
1539 1534 }
1540 1535
1541 1536 .commit-change-content {
1542 1537 text-align: center;
1543 1538 vertical-align: middle;
1544 1539 line-height: 15px;
1545 1540 }
1546 1541 }
1547 1542
1548 1543 .compare_view_filepath {
1549 1544 color: @grey1;
1550 1545 }
1551 1546
1552 1547 .show_more {
1553 1548 display: inline-block;
1554 1549 width: 0;
1555 1550 height: 0;
1556 1551 vertical-align: middle;
1557 1552 content: "";
1558 1553 border: 4px solid;
1559 1554 border-right-color: transparent;
1560 1555 border-bottom-color: transparent;
1561 1556 border-left-color: transparent;
1562 1557 font-size: 0;
1563 1558 }
1564 1559
1565 1560 .journal_more .show_more {
1566 1561 display: inline;
1567 1562
1568 1563 &:after {
1569 1564 content: none;
1570 1565 }
1571 1566 }
1572 1567
1573 1568 .compare_view_commits .collapse_commit:after {
1574 1569 cursor: pointer;
1575 1570 content: "\00A0\25B4";
1576 1571 margin-left: -3px;
1577 1572 font-size: 17px;
1578 1573 color: @grey4;
1579 1574 }
1580 1575
1581 1576 .diff_links {
1582 1577 margin-left: 8px;
1583 1578 }
1584 1579
1585 1580 div.ancestor {
1586 1581 margin: -30px 0px;
1587 1582 }
1588 1583
1589 1584 .cs_icon_td input[type="checkbox"] {
1590 1585 display: none;
1591 1586 }
1592 1587
1593 1588 .cs_icon_td .expand_file_icon:after {
1594 1589 cursor: pointer;
1595 1590 content: "\00A0\25B6";
1596 1591 font-size: 12px;
1597 1592 color: @grey4;
1598 1593 }
1599 1594
1600 1595 .cs_icon_td .collapse_file_icon:after {
1601 1596 cursor: pointer;
1602 1597 content: "\00A0\25BC";
1603 1598 font-size: 12px;
1604 1599 color: @grey4;
1605 1600 }
1606 1601
1607 1602 /*new binary
1608 1603 NEW_FILENODE = 1
1609 1604 DEL_FILENODE = 2
1610 1605 MOD_FILENODE = 3
1611 1606 RENAMED_FILENODE = 4
1612 1607 COPIED_FILENODE = 5
1613 1608 CHMOD_FILENODE = 6
1614 1609 BIN_FILENODE = 7
1615 1610 */
1616 1611 .cs_files_expand {
1617 1612 font-size: @basefontsize + 5px;
1618 1613 line-height: 1.8em;
1619 1614 float: right;
1620 1615 }
1621 1616
1622 1617 .cs_files_expand span{
1623 1618 color: @rcblue;
1624 1619 cursor: pointer;
1625 1620 }
1626 1621 .cs_files {
1627 1622 clear: both;
1628 1623 padding-bottom: @padding;
1629 1624
1630 1625 .cur_cs {
1631 1626 margin: 10px 2px;
1632 1627 font-weight: bold;
1633 1628 }
1634 1629
1635 1630 .node {
1636 1631 float: left;
1637 1632 }
1638 1633
1639 1634 .changes {
1640 1635 float: right;
1641 1636 color: white;
1642 1637 font-size: @basefontsize - 4px;
1643 1638 margin-top: 4px;
1644 1639 opacity: 0.6;
1645 1640 filter: Alpha(opacity=60); /* IE8 and earlier */
1646 1641
1647 1642 .added {
1648 1643 background-color: @alert1;
1649 1644 float: left;
1650 1645 text-align: center;
1651 1646 }
1652 1647
1653 1648 .deleted {
1654 1649 background-color: @alert2;
1655 1650 float: left;
1656 1651 text-align: center;
1657 1652 }
1658 1653
1659 1654 .bin {
1660 1655 background-color: @alert1;
1661 1656 text-align: center;
1662 1657 }
1663 1658
1664 1659 /*new binary*/
1665 1660 .bin.bin1 {
1666 1661 background-color: @alert1;
1667 1662 text-align: center;
1668 1663 }
1669 1664
1670 1665 /*deleted binary*/
1671 1666 .bin.bin2 {
1672 1667 background-color: @alert2;
1673 1668 text-align: center;
1674 1669 }
1675 1670
1676 1671 /*mod binary*/
1677 1672 .bin.bin3 {
1678 1673 background-color: @grey2;
1679 1674 text-align: center;
1680 1675 }
1681 1676
1682 1677 /*rename file*/
1683 1678 .bin.bin4 {
1684 1679 background-color: @alert4;
1685 1680 text-align: center;
1686 1681 }
1687 1682
1688 1683 /*copied file*/
1689 1684 .bin.bin5 {
1690 1685 background-color: @alert4;
1691 1686 text-align: center;
1692 1687 }
1693 1688
1694 1689 /*chmod file*/
1695 1690 .bin.bin6 {
1696 1691 background-color: @grey2;
1697 1692 text-align: center;
1698 1693 }
1699 1694 }
1700 1695 }
1701 1696
1702 1697 .cs_files .cs_added, .cs_files .cs_A,
1703 1698 .cs_files .cs_added, .cs_files .cs_M,
1704 1699 .cs_files .cs_added, .cs_files .cs_D {
1705 1700 height: 16px;
1706 1701 padding-right: 10px;
1707 1702 margin-top: 7px;
1708 1703 text-align: left;
1709 1704 }
1710 1705
1711 1706 .cs_icon_td {
1712 1707 min-width: 16px;
1713 1708 width: 16px;
1714 1709 }
1715 1710
1716 1711 .pull-request-merge {
1717 1712 border: 1px solid @grey5;
1718 1713 padding: 10px 0px 20px;
1719 1714 margin-top: 10px;
1720 1715 margin-bottom: 20px;
1721 1716 }
1722 1717
1723 1718 .pull-request-merge ul {
1724 1719 padding: 0px 0px;
1725 1720 }
1726 1721
1727 1722 .pull-request-merge li:before{
1728 1723 content:none;
1729 1724 }
1730 1725
1731 1726 .pull-request-merge .pull-request-wrap {
1732 1727 height: auto;
1733 1728 padding: 0px 0px;
1734 1729 text-align: right;
1735 1730 }
1736 1731
1737 1732 .pull-request-merge span {
1738 1733 margin-right: 5px;
1739 1734 }
1740 1735
1741 1736 .pull-request-merge-actions {
1742 1737 min-height: 30px;
1743 1738 padding: 0px 0px;
1744 1739 }
1745 1740
1746 1741 .pull-request-merge-info {
1747 1742 padding: 0px 5px 5px 0px;
1748 1743 }
1749 1744
1750 1745 .merge-status {
1751 1746 margin-right: 5px;
1752 1747 }
1753 1748
1754 1749 .merge-message {
1755 1750 font-size: 1.2em
1756 1751 }
1757 1752
1758 1753 .merge-message.success i,
1759 1754 .merge-icon.success i {
1760 1755 color:@alert1;
1761 1756 }
1762 1757
1763 1758 .merge-message.warning i,
1764 1759 .merge-icon.warning i {
1765 1760 color: @alert3;
1766 1761 }
1767 1762
1768 1763 .merge-message.error i,
1769 1764 .merge-icon.error i {
1770 1765 color:@alert2;
1771 1766 }
1772 1767
1773 1768 .pr-versions {
1774 1769 font-size: 1.1em;
1775 1770
1776 1771 table {
1777 1772 padding: 0px 5px;
1778 1773 }
1779 1774
1780 1775 td {
1781 1776 line-height: 15px;
1782 1777 }
1783 1778
1784 1779 .flag_status {
1785 1780 margin: 0;
1786 1781 }
1787 1782
1788 1783 .compare-radio-button {
1789 1784 position: relative;
1790 1785 top: -3px;
1791 1786 }
1792 1787 }
1793 1788
1794 1789
1795 1790 #close_pull_request {
1796 1791 margin-right: 0px;
1797 1792 }
1798 1793
1799 1794 .empty_data {
1800 1795 color: @grey4;
1801 1796 }
1802 1797
1803 1798 #changeset_compare_view_content {
1804 1799 margin-bottom: @space;
1805 1800 clear: both;
1806 1801 width: 100%;
1807 1802 box-sizing: border-box;
1808 1803 .border-radius(@border-radius);
1809 1804
1810 1805 .help-block {
1811 1806 margin: @padding 0;
1812 1807 color: @text-color;
1813 1808 &.pre-formatting {
1814 1809 white-space: pre;
1815 1810 }
1816 1811 }
1817 1812
1818 1813 .empty_data {
1819 1814 margin: @padding 0;
1820 1815 }
1821 1816
1822 1817 .alert {
1823 1818 margin-bottom: @space;
1824 1819 }
1825 1820 }
1826 1821
1827 1822 .table_disp {
1828 1823 .status {
1829 1824 width: auto;
1830 1825
1831 1826 .flag_status {
1832 1827 float: left;
1833 1828 }
1834 1829 }
1835 1830 }
1836 1831
1837 1832
1838 1833 .creation_in_progress {
1839 1834 color: @grey4
1840 1835 }
1841 1836
1842 1837 .status_box_menu {
1843 1838 margin: 0;
1844 1839 }
1845 1840
1846 1841 .notification-table{
1847 1842 margin-bottom: @space;
1848 1843 display: table;
1849 1844 width: 100%;
1850 1845
1851 1846 .container{
1852 1847 display: table-row;
1853 1848
1854 1849 .notification-header{
1855 1850 border-bottom: @border-thickness solid @border-default-color;
1856 1851 }
1857 1852
1858 1853 .notification-subject{
1859 1854 display: table-cell;
1860 1855 }
1861 1856 }
1862 1857 }
1863 1858
1864 1859 // Notifications
1865 1860 .notification-header{
1866 1861 display: table;
1867 1862 width: 100%;
1868 1863 padding: floor(@basefontsize/2) 0;
1869 1864 line-height: 1em;
1870 1865
1871 1866 .desc, .delete-notifications, .read-notifications{
1872 1867 display: table-cell;
1873 1868 text-align: left;
1874 1869 }
1875 1870
1876 1871 .desc{
1877 1872 width: 1163px;
1878 1873 }
1879 1874
1880 1875 .delete-notifications, .read-notifications{
1881 1876 width: 35px;
1882 1877 min-width: 35px; //fixes when only one button is displayed
1883 1878 }
1884 1879 }
1885 1880
1886 1881 .notification-body {
1887 1882 .markdown-block,
1888 1883 .rst-block {
1889 1884 padding: @padding 0;
1890 1885 }
1891 1886
1892 1887 .notification-subject {
1893 1888 padding: @textmargin 0;
1894 1889 border-bottom: @border-thickness solid @border-default-color;
1895 1890 }
1896 1891 }
1897 1892
1898 1893
1899 1894 .notifications_buttons{
1900 1895 float: right;
1901 1896 }
1902 1897
1903 1898 #notification-status{
1904 1899 display: inline;
1905 1900 }
1906 1901
1907 1902 // Repositories
1908 1903
1909 1904 #summary.fields{
1910 1905 display: table;
1911 1906
1912 1907 .field{
1913 1908 display: table-row;
1914 1909
1915 1910 .label-summary{
1916 1911 display: table-cell;
1917 1912 min-width: @label-summary-minwidth;
1918 1913 padding-top: @padding/2;
1919 1914 padding-bottom: @padding/2;
1920 1915 padding-right: @padding/2;
1921 1916 }
1922 1917
1923 1918 .input{
1924 1919 display: table-cell;
1925 1920 padding: @padding/2;
1926 1921
1927 1922 input{
1928 1923 min-width: 29em;
1929 1924 padding: @padding/4;
1930 1925 }
1931 1926 }
1932 1927 .statistics, .downloads{
1933 1928 .disabled{
1934 1929 color: @grey4;
1935 1930 }
1936 1931 }
1937 1932 }
1938 1933 }
1939 1934
1940 1935 #summary{
1941 1936 width: 70%;
1942 1937 }
1943 1938
1944 1939
1945 1940 // Journal
1946 1941 .journal.title {
1947 1942 h5 {
1948 1943 float: left;
1949 1944 margin: 0;
1950 1945 width: 70%;
1951 1946 }
1952 1947
1953 1948 ul {
1954 1949 float: right;
1955 1950 display: inline-block;
1956 1951 margin: 0;
1957 1952 width: 30%;
1958 1953 text-align: right;
1959 1954
1960 1955 li {
1961 1956 display: inline;
1962 1957 font-size: @journal-fontsize;
1963 1958 line-height: 1em;
1964 1959
1965 1960 &:before { content: none; }
1966 1961 }
1967 1962 }
1968 1963 }
1969 1964
1970 1965 .filterexample {
1971 1966 position: absolute;
1972 1967 top: 95px;
1973 1968 left: @contentpadding;
1974 1969 color: @rcblue;
1975 1970 font-size: 11px;
1976 1971 font-family: @text-regular;
1977 1972 cursor: help;
1978 1973
1979 1974 &:hover {
1980 1975 color: @rcdarkblue;
1981 1976 }
1982 1977
1983 1978 @media (max-width:768px) {
1984 1979 position: relative;
1985 1980 top: auto;
1986 1981 left: auto;
1987 1982 display: block;
1988 1983 }
1989 1984 }
1990 1985
1991 1986
1992 1987 #journal{
1993 1988 margin-bottom: @space;
1994 1989
1995 1990 .journal_day{
1996 1991 margin-bottom: @textmargin/2;
1997 1992 padding-bottom: @textmargin/2;
1998 1993 font-size: @journal-fontsize;
1999 1994 border-bottom: @border-thickness solid @border-default-color;
2000 1995 }
2001 1996
2002 1997 .journal_container{
2003 1998 margin-bottom: @space;
2004 1999
2005 2000 .journal_user{
2006 2001 display: inline-block;
2007 2002 }
2008 2003 .journal_action_container{
2009 2004 display: block;
2010 2005 margin-top: @textmargin;
2011 2006
2012 2007 div{
2013 2008 display: inline;
2014 2009 }
2015 2010
2016 2011 div.journal_action_params{
2017 2012 display: block;
2018 2013 }
2019 2014
2020 2015 div.journal_repo:after{
2021 2016 content: "\A";
2022 2017 white-space: pre;
2023 2018 }
2024 2019
2025 2020 div.date{
2026 2021 display: block;
2027 2022 margin-bottom: @textmargin;
2028 2023 }
2029 2024 }
2030 2025 }
2031 2026 }
2032 2027
2033 2028 // Files
2034 2029 .edit-file-title {
2035 2030 border-bottom: @border-thickness solid @border-default-color;
2036 2031
2037 2032 .breadcrumbs {
2038 2033 margin-bottom: 0;
2039 2034 }
2040 2035 }
2041 2036
2042 2037 .edit-file-fieldset {
2043 2038 margin-top: @sidebarpadding;
2044 2039
2045 2040 .fieldset {
2046 2041 .left-label {
2047 2042 width: 13%;
2048 2043 }
2049 2044 .right-content {
2050 2045 width: 87%;
2051 2046 max-width: 100%;
2052 2047 }
2053 2048 .filename-label {
2054 2049 margin-top: 13px;
2055 2050 }
2056 2051 .commit-message-label {
2057 2052 margin-top: 4px;
2058 2053 }
2059 2054 .file-upload-input {
2060 2055 input {
2061 2056 display: none;
2062 2057 }
2063 2058 margin-top: 10px;
2064 2059 }
2065 2060 .file-upload-label {
2066 2061 margin-top: 10px;
2067 2062 }
2068 2063 p {
2069 2064 margin-top: 5px;
2070 2065 }
2071 2066
2072 2067 }
2073 2068 .custom-path-link {
2074 2069 margin-left: 5px;
2075 2070 }
2076 2071 #commit {
2077 2072 resize: vertical;
2078 2073 }
2079 2074 }
2080 2075
2081 2076 .delete-file-preview {
2082 2077 max-height: 250px;
2083 2078 }
2084 2079
2085 2080 .new-file,
2086 2081 #filter_activate,
2087 2082 #filter_deactivate {
2088 2083 float: left;
2089 2084 margin: 0 0 0 15px;
2090 2085 }
2091 2086
2092 2087 h3.files_location{
2093 2088 line-height: 2.4em;
2094 2089 }
2095 2090
2096 2091 .browser-nav {
2097 2092 display: table;
2098 2093 margin-bottom: @space;
2099 2094
2100 2095
2101 2096 .info_box {
2102 2097 display: inline-table;
2103 2098 height: 2.5em;
2104 2099
2105 2100 .browser-cur-rev, .info_box_elem {
2106 2101 display: table-cell;
2107 2102 vertical-align: middle;
2108 2103 }
2109 2104
2110 2105 .info_box_elem {
2111 2106 border-top: @border-thickness solid @rcblue;
2112 2107 border-bottom: @border-thickness solid @rcblue;
2113 2108
2114 2109 #at_rev, a {
2115 2110 padding: 0.6em 0.9em;
2116 2111 margin: 0;
2117 2112 .box-shadow(none);
2118 2113 border: 0;
2119 2114 height: 12px;
2120 2115 }
2121 2116
2122 2117 input#at_rev {
2123 2118 max-width: 50px;
2124 2119 text-align: right;
2125 2120 }
2126 2121
2127 2122 &.previous {
2128 2123 border: @border-thickness solid @rcblue;
2129 2124 .disabled {
2130 2125 color: @grey4;
2131 2126 cursor: not-allowed;
2132 2127 }
2133 2128 }
2134 2129
2135 2130 &.next {
2136 2131 border: @border-thickness solid @rcblue;
2137 2132 .disabled {
2138 2133 color: @grey4;
2139 2134 cursor: not-allowed;
2140 2135 }
2141 2136 }
2142 2137 }
2143 2138
2144 2139 .browser-cur-rev {
2145 2140
2146 2141 span{
2147 2142 margin: 0;
2148 2143 color: @rcblue;
2149 2144 height: 12px;
2150 2145 display: inline-block;
2151 2146 padding: 0.7em 1em ;
2152 2147 border: @border-thickness solid @rcblue;
2153 2148 margin-right: @padding;
2154 2149 }
2155 2150 }
2156 2151 }
2157 2152
2158 2153 .search_activate {
2159 2154 display: table-cell;
2160 2155 vertical-align: middle;
2161 2156
2162 2157 input, label{
2163 2158 margin: 0;
2164 2159 padding: 0;
2165 2160 }
2166 2161
2167 2162 input{
2168 2163 margin-left: @textmargin;
2169 2164 }
2170 2165
2171 2166 }
2172 2167 }
2173 2168
2174 2169 .browser-cur-rev{
2175 2170 margin-bottom: @textmargin;
2176 2171 }
2177 2172
2178 2173 #node_filter_box_loading{
2179 2174 .info_text;
2180 2175 }
2181 2176
2182 2177 .browser-search {
2183 2178 margin: -25px 0px 5px 0px;
2184 2179 }
2185 2180
2186 2181 .node-filter {
2187 2182 font-size: @repo-title-fontsize;
2188 2183 padding: 4px 0px 0px 0px;
2189 2184
2190 2185 .node-filter-path {
2191 2186 float: left;
2192 2187 color: @grey4;
2193 2188 }
2194 2189 .node-filter-input {
2195 2190 float: left;
2196 2191 margin: -2px 0px 0px 2px;
2197 2192 input {
2198 2193 padding: 2px;
2199 2194 border: none;
2200 2195 font-size: @repo-title-fontsize;
2201 2196 }
2202 2197 }
2203 2198 }
2204 2199
2205 2200
2206 2201 .browser-result{
2207 2202 td a{
2208 2203 margin-left: 0.5em;
2209 2204 display: inline-block;
2210 2205
2211 2206 em {
2212 2207 font-weight: @text-bold-weight;
2213 2208 font-family: @text-bold;
2214 2209 }
2215 2210 }
2216 2211 }
2217 2212
2218 2213 .browser-highlight{
2219 2214 background-color: @grey5-alpha;
2220 2215 }
2221 2216
2222 2217
2223 2218 // Search
2224 2219
2225 2220 .search-form{
2226 2221 #q {
2227 2222 width: @search-form-width;
2228 2223 }
2229 2224 .fields{
2230 2225 margin: 0 0 @space;
2231 2226 }
2232 2227
2233 2228 label{
2234 2229 display: inline-block;
2235 2230 margin-right: @textmargin;
2236 2231 padding-top: 0.25em;
2237 2232 }
2238 2233
2239 2234
2240 2235 .results{
2241 2236 clear: both;
2242 2237 margin: 0 0 @padding;
2243 2238 }
2244 2239 }
2245 2240
2246 2241 div.search-feedback-items {
2247 2242 display: inline-block;
2248 2243 }
2249 2244
2250 2245 div.search-code-body {
2251 2246 background-color: #ffffff; padding: 5px 0 5px 10px;
2252 2247 pre {
2253 2248 .match { background-color: #faffa6;}
2254 2249 .break { display: block; width: 100%; background-color: #DDE7EF; color: #747474; }
2255 2250 }
2256 2251 }
2257 2252
2258 2253 .expand_commit.search {
2259 2254 .show_more.open {
2260 2255 height: auto;
2261 2256 max-height: none;
2262 2257 }
2263 2258 }
2264 2259
2265 2260 .search-results {
2266 2261
2267 2262 h2 {
2268 2263 margin-bottom: 0;
2269 2264 }
2270 2265 .codeblock {
2271 2266 border: none;
2272 2267 background: transparent;
2273 2268 }
2274 2269
2275 2270 .codeblock-header {
2276 2271 border: none;
2277 2272 background: transparent;
2278 2273 }
2279 2274
2280 2275 .code-body {
2281 2276 border: @border-thickness solid @border-default-color;
2282 2277 .border-radius(@border-radius);
2283 2278 }
2284 2279
2285 2280 .td-commit {
2286 2281 &:extend(pre);
2287 2282 border-bottom: @border-thickness solid @border-default-color;
2288 2283 }
2289 2284
2290 2285 .message {
2291 2286 height: auto;
2292 2287 max-width: 350px;
2293 2288 white-space: normal;
2294 2289 text-overflow: initial;
2295 2290 overflow: visible;
2296 2291
2297 2292 .match { background-color: #faffa6;}
2298 2293 .break { background-color: #DDE7EF; width: 100%; color: #747474; display: block; }
2299 2294 }
2300 2295
2301 2296 }
2302 2297
2303 2298 table.rctable td.td-search-results div {
2304 2299 max-width: 100%;
2305 2300 }
2306 2301
2307 2302 #tip-box, .tip-box{
2308 2303 padding: @menupadding/2;
2309 2304 display: block;
2310 2305 border: @border-thickness solid @border-highlight-color;
2311 2306 .border-radius(@border-radius);
2312 2307 background-color: white;
2313 2308 z-index: 99;
2314 2309 white-space: pre-wrap;
2315 2310 }
2316 2311
2317 2312 #linktt {
2318 2313 width: 79px;
2319 2314 }
2320 2315
2321 2316 #help_kb .modal-content{
2322 2317 max-width: 750px;
2323 2318 margin: 10% auto;
2324 2319
2325 2320 table{
2326 2321 td,th{
2327 2322 border-bottom: none;
2328 2323 line-height: 2.5em;
2329 2324 }
2330 2325 th{
2331 2326 padding-bottom: @textmargin/2;
2332 2327 }
2333 2328 td.keys{
2334 2329 text-align: center;
2335 2330 }
2336 2331 }
2337 2332
2338 2333 .block-left{
2339 2334 width: 45%;
2340 2335 margin-right: 5%;
2341 2336 }
2342 2337 .modal-footer{
2343 2338 clear: both;
2344 2339 }
2345 2340 .key.tag{
2346 2341 padding: 0.5em;
2347 2342 background-color: @rcblue;
2348 2343 color: white;
2349 2344 border-color: @rcblue;
2350 2345 .box-shadow(none);
2351 2346 }
2352 2347 }
2353 2348
2354 2349
2355 2350
2356 2351 //--- IMPORTS FOR REFACTORED STYLES ------------------//
2357 2352
2358 2353 @import 'statistics-graph';
2359 2354 @import 'tables';
2360 2355 @import 'forms';
2361 2356 @import 'diff';
2362 2357 @import 'summary';
2363 2358 @import 'navigation';
2364 2359
2365 2360 //--- SHOW/HIDE SECTIONS --//
2366 2361
2367 2362 .btn-collapse {
2368 2363 float: right;
2369 2364 text-align: right;
2370 2365 font-family: @text-light;
2371 2366 font-size: @basefontsize;
2372 2367 cursor: pointer;
2373 2368 border: none;
2374 2369 color: @rcblue;
2375 2370 }
2376 2371
2377 2372 table.rctable,
2378 2373 table.dataTable {
2379 2374 .btn-collapse {
2380 2375 float: right;
2381 2376 text-align: right;
2382 2377 }
2383 2378 }
2384 2379
2385 2380 table.rctable {
2386 2381 &.permissions {
2387 2382
2388 2383 th.td-owner {
2389 2384 padding: 0;
2390 2385 }
2391 2386
2392 2387 th {
2393 2388 font-weight: normal;
2394 2389 padding: 0 5px;
2395 2390 }
2396 2391
2397 2392 }
2398 2393 }
2399 2394
2400 2395
2401 2396 // TODO: johbo: Fix for IE10, this avoids that we see a border
2402 2397 // and padding around checkboxes and radio boxes. Move to the right place,
2403 2398 // or better: Remove this once we did the form refactoring.
2404 2399 input[type=checkbox],
2405 2400 input[type=radio] {
2406 2401 padding: 0;
2407 2402 border: none;
2408 2403 }
2409 2404
2410 2405 .toggle-ajax-spinner{
2411 2406 height: 16px;
2412 2407 width: 16px;
2413 2408 }
2414 2409
2415 2410
2416 2411 .markup-form .clearfix {
2417 2412 .border-radius(@border-radius);
2418 2413 margin: 0px;
2419 2414 }
2420 2415
2421 2416 .markup-form-area {
2422 2417 padding: 8px 12px;
2423 2418 border: 1px solid @grey4;
2424 2419 .border-radius(@border-radius);
2425 2420 }
2426 2421
2427 2422 .markup-form-area-header .nav-links {
2428 2423 display: flex;
2429 2424 flex-flow: row wrap;
2430 2425 -webkit-flex-flow: row wrap;
2431 2426 width: 100%;
2432 2427 }
2433 2428
2434 2429 .markup-form-area-footer {
2435 2430 display: flex;
2436 2431 }
2437 2432
2438 2433 .markup-form-area-footer .toolbar {
2439 2434
2440 2435 }
2441 2436
2442 2437 // markup Form
2443 2438 div.markup-form {
2444 2439 margin-top: 20px;
2445 2440 }
2446 2441
2447 2442 .markup-form strong {
2448 2443 display: block;
2449 2444 margin-bottom: 15px;
2450 2445 }
2451 2446
2452 2447 .markup-form textarea {
2453 2448 width: 100%;
2454 2449 height: 100px;
2455 2450 font-family: @text-monospace;
2456 2451 }
2457 2452
2458 2453 form.markup-form {
2459 2454 margin-top: 10px;
2460 2455 margin-left: 10px;
2461 2456 }
2462 2457
2463 2458 .markup-form .comment-block-ta,
2464 2459 .markup-form .preview-box {
2465 2460 .border-radius(@border-radius);
2466 2461 .box-sizing(border-box);
2467 2462 background-color: white;
2468 2463 }
2469 2464
2470 2465 .markup-form .preview-box.unloaded {
2471 2466 height: 50px;
2472 2467 text-align: center;
2473 2468 padding: 20px;
2474 2469 background-color: white;
2475 2470 }
@@ -1,501 +1,505 b''
1 1
2 2 // tables.less
3 3 // For use in RhodeCode application tables;
4 4 // see style guide documentation for guidelines.
5 5
6 6 // TABLES
7 7
8 8 .rctable,
9 9 table.rctable,
10 10 table.dataTable {
11 11 clear:both;
12 12 width: 100%;
13 13 margin: 0 auto @padding;
14 14 padding: 0;
15 15 vertical-align: baseline;
16 16 line-height:1.5em;
17 17 border: none;
18 18 outline: none;
19 19 border-collapse: collapse;
20 20 border-spacing: 0;
21 21 color: @grey2;
22 22
23 23 b {
24 24 font-weight: normal;
25 25 }
26 26
27 27 em {
28 28 font-weight: bold;
29 29 font-style: normal;
30 30 }
31 31
32 32 th,
33 33 td {
34 34 height: auto;
35 35 max-width: 20%;
36 36 padding: .65em 1em .65em 0;
37 37 vertical-align: middle;
38 38 border-bottom: @border-thickness solid @grey5;
39 39 white-space: normal;
40 40
41 41 &.td-radio,
42 42 &.td-checkbox {
43 43 padding-right: 0;
44 44 text-align: center;
45 45
46 46 input {
47 47 margin: 0 1em;
48 48 }
49 49 }
50 50
51 51 &.truncate-wrap {
52 52 white-space: nowrap !important;
53 53 }
54 54
55 55 pre {
56 56 margin: 0;
57 57 }
58 58
59 59 .show_more {
60 60 height: inherit;
61 61 }
62 62 }
63 63
64 64 .expired td {
65 65 background-color: @grey7;
66 66 }
67 67
68 68 th {
69 69 text-align: left;
70 70 font-weight: @text-semibold-weight;
71 71 font-family: @text-semibold;
72 72 }
73 73
74 74 .hl {
75 75 td {
76 76 background-color: lighten(@alert4,25%);
77 77 }
78 78 }
79 79
80 80 // Special Data Cell Types
81 81 // See style guide for desciptions and examples.
82 82
83 83 td {
84 84
85 85 &.user {
86 86 padding-left: 1em;
87 87 }
88 88
89 89 &.td-rss {
90 90 width: 20px;
91 91 min-width: 0;
92 92 margin: 0;
93 93 }
94 94
95 95 &.quick_repo_menu {
96 96 width: 15px;
97 97 text-align: center;
98 98
99 99 &:hover {
100 100 background-color: @grey5;
101 101 }
102 102 }
103 103
104 104 &.td-hash {
105 105 min-width: 80px;
106 106 width: 200px;
107 107
108 108 .obsolete {
109 109 text-decoration: line-through;
110 110 color: lighten(@grey2,25%);
111 111 }
112 112 }
113 113
114 114 &.td-time {
115 115 width: 160px;
116 116 white-space: nowrap;
117 117 }
118 118
119 119 &.annotate{
120 120 padding-right: 0;
121 121
122 122 div.annotatediv{
123 123 margin: 0 0.7em;
124 124 }
125 125 }
126 126
127 127 &.tags-col {
128 128 padding-right: 0;
129 129 }
130 130
131 131 &.td-description {
132 132 min-width: 350px;
133 133
134 134 &.truncate, .truncate-wrap {
135 135 white-space: nowrap;
136 136 overflow: hidden;
137 137 text-overflow: ellipsis;
138 138 max-width: 350px;
139 139 }
140 140 }
141 141
142 142 &.td-componentname {
143 143 white-space: nowrap;
144 144 }
145 145
146 146 &.td-name {
147 147
148 148 }
149 149
150 150 &.td-journalaction {
151 151 min-width: 300px;
152 152
153 153 .journal_action_params {
154 154 // waiting for feedback
155 155 }
156 156 }
157 157
158 158 &.td-active {
159 159 padding-left: .65em;
160 160 }
161 161
162 162 &.td-url {
163 163 white-space: nowrap;
164 164 }
165 165
166 166 &.td-comments {
167 167 min-width: 3em;
168 168 }
169 169
170 170 &.td-buttons {
171 171 padding: .3em 0;
172 172 }
173 173
174 174 &.td-action {
175 175 // this is for the remove/delete/edit buttons
176 176 padding-right: 0;
177 177 min-width: 95px;
178 178 text-transform: capitalize;
179 179
180 180 i {
181 181 display: none;
182 182 }
183 183 }
184 184
185 185 // TODO: lisa: this needs to be cleaned up with the buttons
186 186 .grid_edit,
187 187 .grid_delete {
188 188 display: inline-block;
189 189 margin: 0 @padding/3 0 0;
190 190 font-family: @text-light;
191 191
192 192 i {
193 193 display: none;
194 194 }
195 195 }
196 196
197 197 .grid_edit + .grid_delete {
198 198 border-left: @border-thickness solid @grey5;
199 199 padding-left: @padding/2;
200 200 }
201 201
202 202 &.td-compare {
203 203
204 204 input {
205 205 margin-right: 1em;
206 206 }
207 207
208 208 .compare-radio-button {
209 209 margin: 0 1em 0 0;
210 210 }
211 211
212 212
213 213 }
214 214
215 215 &.td-tags {
216 216 padding: .5em 1em .5em 0;
217 217 width: 140px;
218 218
219 219 .tag {
220 220 margin: 1px;
221 221 float: left;
222 222 }
223 223 }
224 224
225 225 .icon-svn, .icon-hg, .icon-git {
226 226 font-size: 1.4em;
227 227 }
228 228
229 229 &.collapse_commit,
230 230 &.expand_commit {
231 231 padding-right: 0;
232 232 padding-left: 1em;
233 cursor: pointer;
234 width: 20px;
233 235 }
234 236 }
235 237
236 238 .perm_admin_row {
237 239 color: @grey4;
238 240 background-color: @grey6;
239 241 }
240 242
241 243 .noborder {
242 244 border: none;
243 245
244 246 td {
245 247 border: none;
246 248 }
247 249 }
248 250 }
249 251 .rctable.audit-log {
250 252 td {
251 253 vertical-align: top;
252 254 }
253 255 }
254 256
255 257 // TRUNCATING
256 258 // TODO: lisaq: should this possibly be moved out of tables.less?
257 259 // for truncated text
258 260 // used inside of table cells and in code block headers
259 261 .truncate-wrap {
260 262 white-space: nowrap !important;
261 263
262 264 //truncated text
263 265 .truncate {
264 266 max-width: 450px;
265 267 width: 300px;
266 268 overflow: hidden;
267 269 text-overflow: ellipsis;
268 270 -o-text-overflow: ellipsis;
269 271 -ms-text-overflow: ellipsis;
270 272
271 273 &.autoexpand {
272 274 width: 120px;
273 275 margin-right: 200px;
274 276 }
275 277 }
276 278 &:hover .truncate.autoexpand {
277 279 overflow: visible;
278 280 }
279 281
280 282 .tags-truncate {
281 283 width: 150px;
282 284 height: 22px;
283 285 overflow: hidden;
284 286
285 287 .tag {
286 288 display: inline-block;
287 289 }
288 290
289 291 &.truncate {
290 292 height: 22px;
291 293 max-height:2em;
292 294 width: 140px;
293 295 }
294 296 }
295 297 }
296 298
297 299 .apikeys_wrap {
298 300 margin-bottom: @padding;
299 301
300 302 table.rctable td:first-child {
301 303 width: 340px;
302 304 }
303 305 }
304 306
305 307
306 308
307 309 // SPECIAL CASES
308 310
309 311 // Repository Followers
310 312 table.rctable.followers_data {
311 313 width: 75%;
312 314 margin: 0;
313 315 }
314 316
315 317 // Repository List
316 318 // Group Members List
317 319 table.rctable.group_members,
318 320 table#repo_list_table {
319 321 min-width: 600px;
320 322 }
321 323
322 324 // Keyboard mappings
323 325 table.keyboard-mappings {
324 326 th {
325 327 text-align: left;
326 328 font-weight: @text-semibold-weight;
327 329 font-family: @text-semibold;
328 330 }
329 331 }
330 332
331 333 // Branches, Tags, and Bookmarks
332 334 #obj_list_table.dataTable {
333 335 td.td-time {
334 336 padding-right: 1em;
335 337 }
336 338 }
337 339
338 340 // User Admin
339 341 .rctable.useremails,
340 342 .rctable.account_emails {
341 343 .tag,
342 344 .btn {
343 345 float: right;
344 346 }
345 347 .btn { //to line up with tags
346 348 margin-right: 1.65em;
347 349 }
348 350 }
349 351
350 352 // User List
351 353 #user_list_table {
352 354
353 355 td.td-user {
354 356 min-width: 100px;
355 357 }
356 358 }
357 359
358 360 // Pull Request List Table
359 361 #pull_request_list_table.dataTable {
360 362
361 363 //TODO: lisa: This needs to be removed once the description is adjusted
362 364 // for using an expand_commit button (see issue 765)
363 365 td {
364 366 vertical-align: middle;
365 367 }
366 368 }
367 369
368 370 // Settings (no border)
369 371 table.rctable.dl-settings {
370 372 td {
371 373 border: none;
372 374 vertical-align: baseline;
373 375 }
374 376 }
375 377
376 378
377 379 // Statistics
378 380 table.trending_language_tbl {
379 381 width: 100%;
380 382 line-height: 1em;
381 383
382 384 td div {
383 385 overflow: visible;
384 386 }
385 387 }
386 388
387 389 .trending_language_tbl, .trending_language_tbl td {
388 390 border: 0;
389 391 margin: 0;
390 392 padding: 0;
391 393 background: transparent;
392 394 }
393 395
394 396 .trending_language_tbl, .trending_language_tbl tr {
395 397 border-spacing: 0 3px;
396 398 }
397 399
398 400 .trending_language {
399 401 position: relative;
400 402 width: 100%;
401 403 height: 19px;
402 404 overflow: hidden;
403 405 background-color: @grey6;
404 406
405 407 span, b{
406 408 position: absolute;
407 409 display: block;
408 410 height: 12px;
409 411 margin-bottom: 0px;
410 412 white-space: pre;
411 413 padding: floor(@basefontsize/4);
412 414 top: 0;
413 415 left: 0;
414 416 }
415 417
416 418 span{
417 419 color: @text-color;
418 420 z-index: 0;
419 421 min-width: 20px;
420 422 }
421 423
422 424 b {
423 425 z-index: 1;
424 426 overflow: hidden;
425 427 background-color: @rcblue;
426 428 color: #FFF;
427 429 text-decoration: none;
428 430 }
429 431
430 432 }
431 433
432 434 // Changesets
433 435 #changesets.rctable {
434 436
435 437 // td must be fixed height for graph
436 438 td {
437 439 height: 32px;
438 440 padding: 0 1em 0 0;
439 441 vertical-align: middle;
440 442 white-space: nowrap;
441 443
442 444 &.td-description {
443 445 white-space: normal;
444 446 }
445 447
446 448 &.expand_commit {
447 449 padding-right: 0;
450 cursor: pointer;
451 width: 20px;
448 452 }
449 453 }
450 454 }
451 455
452 456 // Compare
453 457 table.compare_view_commits {
454 458 margin-top: @space;
455 459
456 460 td.td-time {
457 461 padding-left: .5em;
458 462 }
459 463
460 464 // special case to not show hover actions on hidden indicator
461 465 tr.compare_select_hidden:hover {
462 466 cursor: inherit;
463 467
464 468 td {
465 469 background-color: inherit;
466 470 }
467 471 }
468 472
469 473 tr:hover {
470 474 cursor: pointer;
471 475
472 476 td {
473 477 background-color: lighten(@alert4,25%);
474 478 }
475 479 }
476 480
477 481
478 482 }
479 483
480 484 .file_history {
481 485 td.td-actions {
482 486 text-align: right;
483 487 }
484 488 }
485 489
486 490
487 491 // Gist List
488 492 #gist_list_table {
489 493 td {
490 494 vertical-align: middle;
491 495
492 496 div{
493 497 display: inline-block;
494 498 vertical-align: middle;
495 499 }
496 500
497 501 img{
498 502 vertical-align: middle;
499 503 }
500 504 }
501 505 }
@@ -1,185 +1,189 b''
1 1 // # Copyright (C) 2016-2018 RhodeCode GmbH
2 2 // #
3 3 // # This program is free software: you can redistribute it and/or modify
4 4 // # it under the terms of the GNU Affero General Public License, version 3
5 5 // # (only), as published by the Free Software Foundation.
6 6 // #
7 7 // # This program is distributed in the hope that it will be useful,
8 8 // # but WITHOUT ANY WARRANTY; without even the implied warranty of
9 9 // # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 10 // # GNU General Public License for more details.
11 11 // #
12 12 // # You should have received a copy of the GNU Affero General Public License
13 13 // # along with this program. If not, see <http://www.gnu.org/licenses/>.
14 14 // #
15 15 // # This program is dual-licensed. If you wish to learn more about the
16 16 // # RhodeCode Enterprise Edition, including its added features, Support services,
17 17 // # and proprietary license terms, please see https://rhodecode.com/licenses/
18 18
19 19
20 20 var CommitsController = function () {
21 21 var self = this;
22 22 this.$graphCanvas = $('#graph_canvas');
23 23 this.$commitCounter = $('#commit-counter');
24 24
25 25 this.getCurrentGraphData = function () {
26 26 // raw form
27 27 return self.$graphCanvas.data('commits');
28 28 };
29 29
30 30 this.setLabelText = function (graphData) {
31 31 var shown = $('.commit_hash').length;
32 32 var total = self.$commitCounter.data('total');
33 33
34 34 if (shown == 1) {
35 35 var text = _gettext('showing {0} out of {1} commit').format(shown, total);
36 36 } else {
37 37 var text = _gettext('showing {0} out of {1} commits').format(shown, total);
38 38 }
39 39 self.$commitCounter.html(text)
40 40 };
41 41
42 42 this.reloadGraph = function (chunk) {
43 43 chunk = chunk || 'next';
44 44
45 45 // reset state on re-render !
46 46 self.$graphCanvas.html('');
47 47
48 48 var edgeData = $("[data-graph]").data('graph') || this.$graphCanvas.data('graph') || [];
49 49
50 50 // Determine max number of edges per row in graph
51 51 var edgeCount = 1;
52 52 $.each(edgeData, function (i, item) {
53 53 $.each(item[2], function (key, value) {
54 54 if (value[1] > edgeCount) {
55 55 edgeCount = value[1];
56 56 }
57 57 });
58 58 });
59 59
60 60 var x_step = Math.min(10, Math.floor(86 / edgeCount));
61 61 var graph_options = {
62 62 width: 100,
63 63 height: $('#changesets').find('.commits-range').height(),
64 64 x_step: x_step,
65 65 y_step: 42,
66 66 dotRadius: 3.5,
67 67 lineWidth: 2.5
68 68 };
69 69
70 70 var prevCommitsData = this.$graphCanvas.data('commits') || [];
71 71 var nextCommitsData = $("[data-graph]").data('commits') || [];
72 72
73 73 if (chunk == 'next') {
74 74 var commitData = $.merge(prevCommitsData, nextCommitsData);
75 75 } else {
76 76 var commitData = $.merge(nextCommitsData, prevCommitsData);
77 77 }
78 78
79 79 this.$graphCanvas.data('graph', edgeData);
80 80 this.$graphCanvas.data('commits', commitData);
81 81
82 82 // destroy dynamic loaded graph
83 83 $("[data-graph]").remove();
84 84
85 85 this.$graphCanvas.commits(graph_options);
86 86
87 87 this.setLabelText(edgeData);
88 88 if ($('.load-more-commits').find('.prev-commits').get(0)) {
89 89 var padding = 75;
90 90
91 91 } else {
92 92 var padding = 43;
93 93 }
94 94 $('#graph_nodes').css({'padding-top': padding});
95 95 };
96 96
97 97 this.getChunkUrl = function (page, chunk, branch, commit_id, f_path) {
98 98 var urlData = {
99 99 'repo_name': templateContext.repo_name,
100 100 'page': page,
101 101 'chunk': chunk
102 102 };
103 103
104 104 if (branch !== undefined && branch !== '') {
105 105 urlData['branch'] = branch;
106 106 }
107 107 if (commit_id !== undefined && commit_id !== '') {
108 108 urlData['commit_id'] = commit_id;
109 109 }
110 110 if (f_path !== undefined && f_path !== '') {
111 111 urlData['f_path'] = f_path;
112 112 }
113 113
114 114 if (urlData['commit_id'] && urlData['f_path']) {
115 115 return pyroutes.url('repo_changelog_elements_file', urlData);
116 116 }
117 117 else {
118 118 return pyroutes.url('repo_changelog_elements', urlData);
119 119 }
120 120
121 121 };
122 122
123 123 this.loadNext = function (node, page, branch, commit_id, f_path) {
124 124 var loadUrl = this.getChunkUrl(page, 'next', branch, commit_id, f_path);
125 125 var postData = {'graph': JSON.stringify(this.getCurrentGraphData())};
126 126
127 127 $.post(loadUrl, postData, function (data) {
128 128 $(node).closest('tbody').append(data);
129 129 $(node).closest('td').remove();
130 130 self.reloadGraph('next');
131 131 })
132 132 };
133 133
134 134 this.loadPrev = function (node, page, branch, commit_id, f_path) {
135 135 var loadUrl = this.getChunkUrl(page, 'prev', branch, commit_id, f_path);
136 136 var postData = {'graph': JSON.stringify(this.getCurrentGraphData())};
137 137
138 138 $.post(loadUrl, postData, function (data) {
139 139 $(node).closest('tbody').prepend(data);
140 140 $(node).closest('td').remove();
141 141 self.reloadGraph('prev');
142 142 })
143 143 };
144 144
145 this.expandCommit = function (node) {
145 this.expandCommit = function (node, reloadGraph) {
146 reloadGraph = reloadGraph || false;
146 147
147 148 var target_expand = $(node);
148 149 var cid = target_expand.data('commitId');
149 150
150 151 if (target_expand.hasClass('open')) {
151 152 $('#c-' + cid).css({
152 153 'height': '1.5em',
153 154 'white-space': 'nowrap',
154 155 'text-overflow': 'ellipsis',
155 156 'overflow': 'hidden'
156 157 });
157 158 $('#t-' + cid).css({
158 159 'height': 'auto',
159 160 'line-height': '.9em',
160 161 'text-overflow': 'ellipsis',
161 162 'overflow': 'hidden',
162 163 'white-space': 'nowrap'
163 164 });
164 165 target_expand.removeClass('open');
165 166 }
166 167 else {
167 168 $('#c-' + cid).css({
168 169 'height': 'auto',
169 170 'white-space': 'pre-line',
170 171 'text-overflow': 'initial',
171 172 'overflow': 'visible'
172 173 });
173 174 $('#t-' + cid).css({
174 175 'height': 'auto',
175 176 'max-height': 'none',
176 177 'text-overflow': 'initial',
177 178 'overflow': 'visible',
178 179 'white-space': 'normal'
179 180 });
180 181 target_expand.addClass('open');
181 182 }
182 // redraw the graph
183 self.reloadGraph();
183
184 if (reloadGraph) {
185 // redraw the graph
186 self.reloadGraph();
187 }
184 188 }
185 189 };
@@ -1,152 +1,149 b''
1 1 ## small box that displays changed/added/removed details fetched by AJAX
2 2 <%namespace name="base" file="/base/base.mako"/>
3 3
4
5 4 % if c.prev_page:
6 5 <tr>
7 6 <td colspan="9" class="load-more-commits">
8 7 <a class="prev-commits" href="#loadPrevCommits" onclick="commitsController.loadPrev(this, ${c.prev_page}, '${c.branch_name}', '${c.commit_id}', '${c.f_path}');return false">
9 8 ${_('load previous')}
10 9 </a>
11 10 </td>
12 11 </tr>
13 12 % endif
14 13
15 14 ## to speed up lookups cache some functions before the loop
16 15 <%
17 16 active_patterns = h.get_active_pattern_entries(c.repo_name)
18 17 urlify_commit_message = h.partial(h.urlify_commit_message, active_pattern_entries=active_patterns)
19 18 %>
20 19
21 20 % for cnt,commit in enumerate(c.pagination):
22 21 <tr id="sha_${commit.raw_id}" class="changelogRow container ${'tablerow%s' % (cnt%2)}">
23 22
24 23 <td class="td-checkbox">
25 24 ${h.checkbox(commit.raw_id,class_="commit-range")}
26 25 </td>
27 26 <td class="td-status">
28 27
29 28 %if c.statuses.get(commit.raw_id):
30 29 <div class="changeset-status-ico">
31 30 %if c.statuses.get(commit.raw_id)[2]:
32 31 <a class="tooltip" title="${_('Commit status: %s\nClick to open associated pull request #%s') % (h.commit_status_lbl(c.statuses.get(commit.raw_id)[0]), c.statuses.get(commit.raw_id)[2])}" href="${h.route_path('pullrequest_show',repo_name=c.statuses.get(commit.raw_id)[3],pull_request_id=c.statuses.get(commit.raw_id)[2])}">
33 32 <div class="${'flag_status {}'.format(c.statuses.get(commit.raw_id)[0])}"></div>
34 33 </a>
35 34 %else:
36 35 <a class="tooltip" title="${_('Commit status: {}').format(h.commit_status_lbl(c.statuses.get(commit.raw_id)[0]))}" href="${h.route_path('repo_commit',repo_name=c.repo_name,commit_id=commit.raw_id,_anchor='comment-%s' % c.comments[commit.raw_id][0].comment_id)}">
37 36 <div class="${'flag_status {}'.format(c.statuses.get(commit.raw_id)[0])}"></div>
38 37 </a>
39 38 %endif
40 39 </div>
41 40 %else:
42 41 <div class="tooltip flag_status not_reviewed" title="${_('Commit status: Not Reviewed')}"></div>
43 42 %endif
44 43 </td>
45 44 <td class="td-comments comments-col">
46 45 %if c.comments.get(commit.raw_id):
47 46 <a title="${_('Commit has comments')}" href="${h.route_path('repo_commit',repo_name=c.repo_name,commit_id=commit.raw_id,_anchor='comment-%s' % c.comments[commit.raw_id][0].comment_id)}">
48 47 <i class="icon-comment"></i> ${len(c.comments[commit.raw_id])}
49 48 </a>
50 49 %endif
51 50 </td>
52 51 <td class="td-hash">
53 52 <code>
54 53
55 54 <a href="${h.route_path('repo_commit',repo_name=c.repo_name,commit_id=commit.raw_id)}">
56 55 <span class="${'commit_hash obsolete' if getattr(commit, 'obsolete', None) else 'commit_hash'}">${h.show_id(commit)}</span>
57 56 </a>
58 57 <i class="tooltip icon-clipboard clipboard-action" data-clipboard-text="${commit.raw_id}" title="${_('Copy the full commit id')}"></i>
59 58 </code>
60 59 </td>
61 60 <td class="td-tags tags-col">
62 61 ## phase
63 62 % if hasattr(commit, 'phase'):
64 63 % if commit.phase != 'public':
65 64 <span class="tag phase-${commit.phase} tooltip" title="${_('Commit phase')}">${commit.phase}</span>
66 65 % endif
67 66 % endif
68 67
69 68 ## obsolete commits
70 69 % if hasattr(commit, 'obsolete'):
71 70 % if commit.obsolete:
72 71 <span class="tag obsolete-${commit.obsolete} tooltip" title="${_('Evolve State')}">${_('obsolete')}</span>
73 72 % endif
74 73 % endif
75 74
76 75 ## hidden commits
77 76 % if hasattr(commit, 'hidden'):
78 77 % if commit.hidden:
79 78 <span class="tag obsolete-${commit.hidden} tooltip" title="${_('Evolve State')}">${_('hidden')}</span>
80 79 % endif
81 80 % endif
82 81 </td>
83 <td class="td-message expand_commit" data-commit-id="${commit.raw_id}" title="${_('Expand commit message')}" onclick="commitsController.expandCommit(this); return false">
84 <div class="show_more_col">
82 <td class="td-message expand_commit" data-commit-id="${commit.raw_id}" title="${_('Expand commit message')}" onclick="commitsController.expandCommit(this, true); return false">
85 83 <i class="icon-expand-linked"></i>&nbsp;
86 </div>
87 84 </td>
88 85 <td class="td-description mid">
89 86 <div class="log-container truncate-wrap">
90 <div class="message truncate" id="c-${commit.raw_id}">${urlify_commit_message(commit.message, c.repo_name)}</div>
87 <div class="message truncate" id="c-${commit.raw_id}" data-message-raw="${commit.message}">${urlify_commit_message(commit.message, c.repo_name)}</div>
91 88 </div>
92 89 </td>
93 90
94 91 <td class="td-time">
95 92 ${h.age_component(commit.date)}
96 93 </td>
97 94 <td class="td-user">
98 95 ${base.gravatar_with_user(commit.author)}
99 96 </td>
100 97
101 98 <td class="td-tags tags-col">
102 99 <div id="t-${commit.raw_id}">
103 100
104 101 ## merge
105 102 %if commit.merge:
106 103 <span class="tag mergetag">
107 104 <i class="icon-merge"></i>${_('merge')}
108 105 </span>
109 106 %endif
110 107
111 108 ## branch
112 109 %if commit.branch:
113 110 <span class="tag branchtag" title="${h.tooltip(_('Branch %s') % commit.branch)}">
114 111 <a href="${h.route_path('repo_changelog',repo_name=c.repo_name,_query=dict(branch=commit.branch))}"><i class="icon-code-fork"></i>${h.shorter(commit.branch)}</a>
115 112 </span>
116 113 %endif
117 114
118 115 ## bookmarks
119 116 %if h.is_hg(c.rhodecode_repo):
120 117 %for book in commit.bookmarks:
121 118 <span class="tag booktag" title="${h.tooltip(_('Bookmark %s') % book)}">
122 119 <a href="${h.route_path('repo_files:default_path',repo_name=c.repo_name,commit_id=commit.raw_id, _query=dict(at=book))}"><i class="icon-bookmark"></i>${h.shorter(book)}</a>
123 120 </span>
124 121 %endfor
125 122 %endif
126 123
127 124 ## tags
128 125 %for tag in commit.tags:
129 126 <span class="tag tagtag" title="${h.tooltip(_('Tag %s') % tag)}">
130 127 <a href="${h.route_path('repo_files:default_path',repo_name=c.repo_name,commit_id=commit.raw_id, _query=dict(at=tag))}"><i class="icon-tag"></i>${h.shorter(tag)}</a>
131 128 </span>
132 129 %endfor
133 130
134 131 </div>
135 132 </td>
136 133 </tr>
137 134 % endfor
138 135
139 136 % if c.next_page:
140 137 <tr>
141 138 <td colspan="10" class="load-more-commits">
142 139 <a class="next-commits" href="#loadNextCommits" onclick="commitsController.loadNext(this, ${c.next_page}, '${c.branch_name}', '${c.commit_id}', '${c.f_path}');return false">
143 140 ${_('load next')}
144 141 </a>
145 142 </td>
146 143 </tr>
147 144 % endif
148 145 <tr class="chunk-graph-data" style="display:none"
149 146 data-graph='${c.graph_data|n}'
150 147 data-node='${c.prev_page}:${c.next_page}'
151 148 data-commits='${c.graph_commits|n}'>
152 149 </tr> No newline at end of file
@@ -1,117 +1,82 b''
1 1 ## Changesets table !
2 2 <%namespace name="base" file="/base/base.mako"/>
3 3
4 4 %if c.ancestor:
5 5 <div class="ancestor">${_('Common Ancestor Commit')}:
6 6 <a href="${h.route_path('repo_commit', repo_name=c.repo_name, commit_id=c.ancestor)}">
7 7 ${h.short_id(c.ancestor)}
8 8 </a>. ${_('Compare was calculated based on this shared commit.')}
9 9 <input id="common_ancestor" type="hidden" name="common_ancestor" value="${c.ancestor}">
10 10 </div>
11 11 %endif
12 12
13 13 <div class="container">
14 14 <input type="hidden" name="__start__" value="revisions:sequence">
15 15 <table class="rctable compare_view_commits">
16 16 <tr>
17 17 <th>${_('Time')}</th>
18 18 <th>${_('Author')}</th>
19 19 <th>${_('Commit')}</th>
20 20 <th></th>
21 21 <th>${_('Description')}</th>
22 22 </tr>
23 23 ## to speed up lookups cache some functions before the loop
24 24 <%
25 25 active_patterns = h.get_active_pattern_entries(c.repo_name)
26 26 urlify_commit_message = h.partial(h.urlify_commit_message, active_pattern_entries=active_patterns)
27 27 %>
28 28 %for commit in c.commit_ranges:
29 29 <tr id="row-${commit.raw_id}"
30 30 commit_id="${commit.raw_id}"
31 31 class="compare_select"
32 32 style="${'display: none' if c.collapse_all_commits else ''}"
33 33 >
34 34 <td class="td-time">
35 35 ${h.age_component(commit.date)}
36 36 </td>
37 37 <td class="td-user">
38 38 ${base.gravatar_with_user(commit.author, 16)}
39 39 </td>
40 40 <td class="td-hash">
41 41 <code>
42 42 <a href="${h.route_path('repo_commit', repo_name=c.target_repo.repo_name, commit_id=commit.raw_id)}">
43 43 r${commit.idx}:${h.short_id(commit.raw_id)}
44 44 </a>
45 45 ${h.hidden('revisions',commit.raw_id)}
46 46 </code>
47 47 </td>
48 <td class="expand_commit"
49 data-commit-id="${commit.raw_id}"
50 title="${_( 'Expand commit message')}"
51 >
52 <div class="show_more_col">
48 <td class="td-message expand_commit" data-commit-id="${commit.raw_id}" title="${_('Expand commit message')}" onclick="commitsController.expandCommit(this); return false">
53 49 <i class="icon-expand-linked"></i>
54 </div>
55 50 </td>
56 51 <td class="mid td-description">
57 52 <div class="log-container truncate-wrap">
58 <div
59 id="c-${commit.raw_id}"
60 class="message truncate"
61 data-message-raw="${commit.message}"
62 >
63 ${urlify_commit_message(commit.message, c.repo_name)}
64 </div>
53 <div class="message truncate" id="c-${commit.raw_id}" data-message-raw="${commit.message}">${urlify_commit_message(commit.message, c.repo_name)}</div>
65 54 </div>
66 55 </td>
67 56 </tr>
68 57 %endfor
69 58 <tr class="compare_select_hidden" style="${'' if c.collapse_all_commits else 'display: none'}">
70 59 <td colspan="5">
71 60 ${_ungettext('%s commit hidden','%s commits hidden', len(c.commit_ranges)) % len(c.commit_ranges)},
72 61 <a href="#" onclick="$('.compare_select').show();$('.compare_select_hidden').hide(); return false">${_ungettext('show it','show them', len(c.commit_ranges))}</a>
73 62 </td>
74 63 </tr>
75 64 % if not c.commit_ranges:
76 65 <tr class="compare_select">
77 66 <td colspan="5">
78 67 ${_('No commits in this compare')}
79 68 </td>
80 69 </tr>
81 70 % endif
82 71 </table>
83 72 <input type="hidden" name="__end__" value="revisions:sequence">
84 73
85 74 </div>
86 75
87 76 <script>
88 $('.expand_commit').on('click',function(e){
89 var target_expand = $(this);
90 var cid = target_expand.data('commitId');
91
92 // ## TODO: dan: extract styles into css, and just toggleClass('open') here
93 if (target_expand.hasClass('open')){
94 $('#c-'+cid).css({
95 'height': '1.5em',
96 'white-space': 'nowrap',
97 'text-overflow': 'ellipsis',
98 'overflow':'hidden'
99 });
100 target_expand.removeClass('open');
101 }
102 else {
103 $('#c-'+cid).css({
104 'height': 'auto',
105 'white-space': 'pre-line',
106 'text-overflow': 'initial',
107 'overflow':'visible'
108 });
109 target_expand.addClass('open');
110 }
111 });
112
77 commitsController = new CommitsController();
113 78 $('.compare_select').on('click',function(e){
114 79 var cid = $(this).attr('commit_id');
115 80 $('#row-'+cid).toggleClass('hl', !$('#row-'+cid).hasClass('hl'));
116 81 });
117 82 </script>
@@ -1,874 +1,845 b''
1 1 <%inherit file="/base/base.mako"/>
2 2 <%namespace name="base" file="/base/base.mako"/>
3 3 <%namespace name="dt" file="/data_table/_dt_elements.mako"/>
4 4
5 5 <%def name="title()">
6 6 ${_('%s Pull Request #%s') % (c.repo_name, c.pull_request.pull_request_id)}
7 7 %if c.rhodecode_name:
8 8 &middot; ${h.branding(c.rhodecode_name)}
9 9 %endif
10 10 </%def>
11 11
12 12 <%def name="breadcrumbs_links()">
13 13 <span id="pr-title">
14 14 ${c.pull_request.title}
15 15 %if c.pull_request.is_closed():
16 16 (${_('Closed')})
17 17 %endif
18 18 </span>
19 19 <div id="pr-title-edit" class="input" style="display: none;">
20 20 ${h.text('pullrequest_title', id_="pr-title-input", class_="large", value=c.pull_request.title)}
21 21 </div>
22 22 </%def>
23 23
24 24 <%def name="menu_bar_nav()">
25 25 ${self.menu_items(active='repositories')}
26 26 </%def>
27 27
28 28 <%def name="menu_bar_subnav()">
29 29 ${self.repo_menu(active='showpullrequest')}
30 30 </%def>
31 31
32 32 <%def name="main()">
33 33
34 34 <script type="text/javascript">
35 35 // TODO: marcink switch this to pyroutes
36 36 AJAX_COMMENT_DELETE_URL = "${h.route_path('pullrequest_comment_delete',repo_name=c.repo_name,pull_request_id=c.pull_request.pull_request_id,comment_id='__COMMENT_ID__')}";
37 37 templateContext.pull_request_data.pull_request_id = ${c.pull_request.pull_request_id};
38 38 </script>
39 39 <div class="box">
40 40
41 41 <div class="title">
42 42 ${self.repo_page_title(c.rhodecode_db_repo)}
43 43 </div>
44 44
45 45 ${self.breadcrumbs()}
46 46
47 47 <div class="box pr-summary">
48 48
49 49 <div class="summary-details block-left">
50 50 <% summary = lambda n:{False:'summary-short'}.get(n) %>
51 51 <div class="pr-details-title">
52 52 <a href="${h.route_path('pull_requests_global', pull_request_id=c.pull_request.pull_request_id)}">${_('Pull request #%s') % c.pull_request.pull_request_id}</a> ${_('From')} ${h.format_date(c.pull_request.created_on)}
53 53 %if c.allowed_to_update:
54 54 <div id="delete_pullrequest" class="pull-right action_button ${'' if c.allowed_to_delete else 'disabled' }" style="clear:inherit;padding: 0">
55 55 % if c.allowed_to_delete:
56 56 ${h.secure_form(h.route_path('pullrequest_delete', repo_name=c.pull_request.target_repo.repo_name, pull_request_id=c.pull_request.pull_request_id), request=request)}
57 57 ${h.submit('remove_%s' % c.pull_request.pull_request_id, _('Delete'),
58 58 class_="btn btn-link btn-danger no-margin",onclick="return confirm('"+_('Confirm to delete this pull request')+"');")}
59 59 ${h.end_form()}
60 60 % else:
61 61 ${_('Delete')}
62 62 % endif
63 63 </div>
64 64 <div id="open_edit_pullrequest" class="pull-right action_button">${_('Edit')}</div>
65 65 <div id="close_edit_pullrequest" class="pull-right action_button" style="display: none;padding: 0">${_('Cancel')}</div>
66 66 %endif
67 67 </div>
68 68
69 69 <div id="summary" class="fields pr-details-content">
70 70 <div class="field">
71 71 <div class="label-summary">
72 72 <label>${_('Source')}:</label>
73 73 </div>
74 74 <div class="input">
75 75 <div class="pr-origininfo">
76 76 ## branch link is only valid if it is a branch
77 77 <span class="tag">
78 78 %if c.pull_request.source_ref_parts.type == 'branch':
79 79 <a href="${h.route_path('repo_changelog', repo_name=c.pull_request.source_repo.repo_name, _query=dict(branch=c.pull_request.source_ref_parts.name))}">${c.pull_request.source_ref_parts.type}: ${c.pull_request.source_ref_parts.name}</a>
80 80 %else:
81 81 ${c.pull_request.source_ref_parts.type}: ${c.pull_request.source_ref_parts.name}
82 82 %endif
83 83 </span>
84 84 <span class="clone-url">
85 85 <a href="${h.route_path('repo_summary', repo_name=c.pull_request.source_repo.repo_name)}">${c.pull_request.source_repo.clone_url()}</a>
86 86 </span>
87 87 <br/>
88 88 % if c.ancestor_commit:
89 89 ${_('Common ancestor')}:
90 90 <code><a href="${h.route_path('repo_commit', repo_name=c.target_repo.repo_name, commit_id=c.ancestor_commit.raw_id)}">${h.show_id(c.ancestor_commit)}</a></code>
91 91 % endif
92 92 </div>
93 93 %if h.is_hg(c.pull_request.source_repo):
94 94 <% clone_url = 'hg pull -r {} {}'.format(h.short_id(c.source_ref), c.pull_request.source_repo.clone_url()) %>
95 95 %elif h.is_git(c.pull_request.source_repo):
96 96 <% clone_url = 'git pull {} {}'.format(c.pull_request.source_repo.clone_url(), c.pull_request.source_ref_parts.name) %>
97 97 %endif
98 98
99 99 <div class="">
100 100 <input type="text" class="input-monospace pr-pullinfo" value="${clone_url}" readonly="readonly">
101 101 <i class="tooltip icon-clipboard clipboard-action pull-right pr-pullinfo-copy" data-clipboard-text="${clone_url}" title="${_('Copy the pull url')}"></i>
102 102 </div>
103 103
104 104 </div>
105 105 </div>
106 106 <div class="field">
107 107 <div class="label-summary">
108 108 <label>${_('Target')}:</label>
109 109 </div>
110 110 <div class="input">
111 111 <div class="pr-targetinfo">
112 112 ## branch link is only valid if it is a branch
113 113 <span class="tag">
114 114 %if c.pull_request.target_ref_parts.type == 'branch':
115 115 <a href="${h.route_path('repo_changelog', repo_name=c.pull_request.target_repo.repo_name, _query=dict(branch=c.pull_request.target_ref_parts.name))}">${c.pull_request.target_ref_parts.type}: ${c.pull_request.target_ref_parts.name}</a>
116 116 %else:
117 117 ${c.pull_request.target_ref_parts.type}: ${c.pull_request.target_ref_parts.name}
118 118 %endif
119 119 </span>
120 120 <span class="clone-url">
121 121 <a href="${h.route_path('repo_summary', repo_name=c.pull_request.target_repo.repo_name)}">${c.pull_request.target_repo.clone_url()}</a>
122 122 </span>
123 123 </div>
124 124 </div>
125 125 </div>
126 126
127 127 ## Link to the shadow repository.
128 128 <div class="field">
129 129 <div class="label-summary">
130 130 <label>${_('Merge')}:</label>
131 131 </div>
132 132 <div class="input">
133 133 % if not c.pull_request.is_closed() and c.pull_request.shadow_merge_ref:
134 134 %if h.is_hg(c.pull_request.target_repo):
135 135 <% clone_url = 'hg clone --update {} {} pull-request-{}'.format(c.pull_request.shadow_merge_ref.name, c.shadow_clone_url, c.pull_request.pull_request_id) %>
136 136 %elif h.is_git(c.pull_request.target_repo):
137 137 <% clone_url = 'git clone --branch {} {} pull-request-{}'.format(c.pull_request.shadow_merge_ref.name, c.shadow_clone_url, c.pull_request.pull_request_id) %>
138 138 %endif
139 139 <div class="">
140 140 <input type="text" class="input-monospace pr-mergeinfo" value="${clone_url}" readonly="readonly">
141 141 <i class="tooltip icon-clipboard clipboard-action pull-right pr-mergeinfo-copy" data-clipboard-text="${clone_url}" title="${_('Copy the clone url')}"></i>
142 142 </div>
143 143 % else:
144 144 <div class="">
145 145 ${_('Shadow repository data not available')}.
146 146 </div>
147 147 % endif
148 148 </div>
149 149 </div>
150 150
151 151 <div class="field">
152 152 <div class="label-summary">
153 153 <label>${_('Review')}:</label>
154 154 </div>
155 155 <div class="input">
156 156 %if c.pull_request_review_status:
157 157 <div class="${'flag_status %s' % c.pull_request_review_status} tooltip pull-left"></div>
158 158 <span class="changeset-status-lbl tooltip">
159 159 %if c.pull_request.is_closed():
160 160 ${_('Closed')},
161 161 %endif
162 162 ${h.commit_status_lbl(c.pull_request_review_status)}
163 163 </span>
164 164 - ${_ungettext('calculated based on %s reviewer vote', 'calculated based on %s reviewers votes', len(c.pull_request_reviewers)) % len(c.pull_request_reviewers)}
165 165 %endif
166 166 </div>
167 167 </div>
168 168 <div class="field">
169 169 <div class="pr-description-label label-summary" title="${_('Rendered using {} renderer').format(c.renderer)}">
170 170 <label>${_('Description')}:</label>
171 171 </div>
172 172 <div id="pr-desc" class="input">
173 173 <div class="pr-description">${h.render(c.pull_request.description, renderer=c.renderer)}</div>
174 174 </div>
175 175 <div id="pr-desc-edit" class="input textarea editor" style="display: none;">
176 176 <input id="pr-renderer-input" type="hidden" name="description_renderer" value="${c.visual.default_renderer}">
177 177 ${dt.markup_form('pr-description-input', form_text=c.pull_request.description)}
178 178 </div>
179 179 </div>
180 180
181 181 <div class="field">
182 182 <div class="label-summary">
183 183 <label>${_('Versions')}:</label>
184 184 </div>
185 185
186 186 <% outdated_comm_count_ver = len(c.inline_versions[None]['outdated']) %>
187 187 <% general_outdated_comm_count_ver = len(c.comment_versions[None]['outdated']) %>
188 188
189 189 <div class="pr-versions">
190 190 % if c.show_version_changes:
191 191 <% outdated_comm_count_ver = len(c.inline_versions[c.at_version_num]['outdated']) %>
192 192 <% general_outdated_comm_count_ver = len(c.comment_versions[c.at_version_num]['outdated']) %>
193 193 <a id="show-pr-versions" class="input" onclick="return versionController.toggleVersionView(this)" href="#show-pr-versions"
194 194 data-toggle-on="${_ungettext('{} version available for this pull request, show it.', '{} versions available for this pull request, show them.', len(c.versions)).format(len(c.versions))}"
195 195 data-toggle-off="${_('Hide all versions of this pull request')}">
196 196 ${_ungettext('{} version available for this pull request, show it.', '{} versions available for this pull request, show them.', len(c.versions)).format(len(c.versions))}
197 197 </a>
198 198 <table>
199 199 ## SHOW ALL VERSIONS OF PR
200 200 <% ver_pr = None %>
201 201
202 202 % for data in reversed(list(enumerate(c.versions, 1))):
203 203 <% ver_pos = data[0] %>
204 204 <% ver = data[1] %>
205 205 <% ver_pr = ver.pull_request_version_id %>
206 206 <% display_row = '' if c.at_version and (c.at_version_num == ver_pr or c.from_version_num == ver_pr) else 'none' %>
207 207
208 208 <tr class="version-pr" style="display: ${display_row}">
209 209 <td>
210 210 <code>
211 211 <a href="${request.current_route_path(_query=dict(version=ver_pr or 'latest'))}">v${ver_pos}</a>
212 212 </code>
213 213 </td>
214 214 <td>
215 215 <input ${'checked="checked"' if c.from_version_num == ver_pr else ''} class="compare-radio-button" type="radio" name="ver_source" value="${ver_pr or 'latest'}" data-ver-pos="${ver_pos}"/>
216 216 <input ${'checked="checked"' if c.at_version_num == ver_pr else ''} class="compare-radio-button" type="radio" name="ver_target" value="${ver_pr or 'latest'}" data-ver-pos="${ver_pos}"/>
217 217 </td>
218 218 <td>
219 219 <% review_status = c.review_versions[ver_pr].status if ver_pr in c.review_versions else 'not_reviewed' %>
220 220 <div class="${'flag_status %s' % review_status} tooltip pull-left" title="${_('Your review status at this version')}">
221 221 </div>
222 222 </td>
223 223 <td>
224 224 % if c.at_version_num != ver_pr:
225 225 <i class="icon-comment"></i>
226 226 <code class="tooltip" title="${_('Comment from pull request version v{0}, general:{1} inline:{2}').format(ver_pos, len(c.comment_versions[ver_pr]['at']), len(c.inline_versions[ver_pr]['at']))}">
227 227 G:${len(c.comment_versions[ver_pr]['at'])} / I:${len(c.inline_versions[ver_pr]['at'])}
228 228 </code>
229 229 % endif
230 230 </td>
231 231 <td>
232 232 ##<code>${ver.source_ref_parts.commit_id[:6]}</code>
233 233 </td>
234 234 <td>
235 235 ${h.age_component(ver.updated_on, time_is_local=True)}
236 236 </td>
237 237 </tr>
238 238 % endfor
239 239
240 240 <tr>
241 241 <td colspan="6">
242 242 <button id="show-version-diff" onclick="return versionController.showVersionDiff()" class="btn btn-sm" style="display: none"
243 243 data-label-text-locked="${_('select versions to show changes')}"
244 244 data-label-text-diff="${_('show changes between versions')}"
245 245 data-label-text-show="${_('show pull request for this version')}"
246 246 >
247 247 ${_('select versions to show changes')}
248 248 </button>
249 249 </td>
250 250 </tr>
251 251
252 252 ## show comment/inline comments summary
253 253 <%def name="comments_summary()">
254 254 <tr>
255 255 <td colspan="6" class="comments-summary-td">
256 256
257 257 % if c.at_version:
258 258 <% inline_comm_count_ver = len(c.inline_versions[c.at_version_num]['display']) %>
259 259 <% general_comm_count_ver = len(c.comment_versions[c.at_version_num]['display']) %>
260 260 ${_('Comments at this version')}:
261 261 % else:
262 262 <% inline_comm_count_ver = len(c.inline_versions[c.at_version_num]['until']) %>
263 263 <% general_comm_count_ver = len(c.comment_versions[c.at_version_num]['until']) %>
264 264 ${_('Comments for this pull request')}:
265 265 % endif
266 266
267 267
268 268 %if general_comm_count_ver:
269 269 <a href="#comments">${_("%d General ") % general_comm_count_ver}</a>
270 270 %else:
271 271 ${_("%d General ") % general_comm_count_ver}
272 272 %endif
273 273
274 274 %if inline_comm_count_ver:
275 275 , <a href="#" onclick="return Rhodecode.comments.nextComment();" id="inline-comments-counter">${_("%d Inline") % inline_comm_count_ver}</a>
276 276 %else:
277 277 , ${_("%d Inline") % inline_comm_count_ver}
278 278 %endif
279 279
280 280 %if outdated_comm_count_ver:
281 281 , <a href="#" onclick="showOutdated(); Rhodecode.comments.nextOutdatedComment(); return false;">${_("%d Outdated") % outdated_comm_count_ver}</a>
282 282 <a href="#" class="showOutdatedComments" onclick="showOutdated(this); return false;"> | ${_('show outdated comments')}</a>
283 283 <a href="#" class="hideOutdatedComments" style="display: none" onclick="hideOutdated(this); return false;"> | ${_('hide outdated comments')}</a>
284 284 %else:
285 285 , ${_("%d Outdated") % outdated_comm_count_ver}
286 286 %endif
287 287 </td>
288 288 </tr>
289 289 </%def>
290 290 ${comments_summary()}
291 291 </table>
292 292 % else:
293 293 <div class="input">
294 294 ${_('Pull request versions not available')}.
295 295 </div>
296 296 <div>
297 297 <table>
298 298 ${comments_summary()}
299 299 </table>
300 300 </div>
301 301 % endif
302 302 </div>
303 303 </div>
304 304
305 305 <div id="pr-save" class="field" style="display: none;">
306 306 <div class="label-summary"></div>
307 307 <div class="input">
308 308 <span id="edit_pull_request" class="btn btn-small no-margin">${_('Save Changes')}</span>
309 309 </div>
310 310 </div>
311 311 </div>
312 312 </div>
313 313 <div>
314 314 ## AUTHOR
315 315 <div class="reviewers-title block-right">
316 316 <div class="pr-details-title">
317 317 ${_('Author of this pull request')}
318 318 </div>
319 319 </div>
320 320 <div class="block-right pr-details-content reviewers">
321 321 <ul class="group_members">
322 322 <li>
323 323 ${self.gravatar_with_user(c.pull_request.author.email, 16)}
324 324 </li>
325 325 </ul>
326 326 </div>
327 327
328 328 ## REVIEW RULES
329 329 <div id="review_rules" style="display: none" class="reviewers-title block-right">
330 330 <div class="pr-details-title">
331 331 ${_('Reviewer rules')}
332 332 %if c.allowed_to_update:
333 333 <span id="close_edit_reviewers" class="block-right action_button last-item" style="display: none;">${_('Close')}</span>
334 334 %endif
335 335 </div>
336 336 <div class="pr-reviewer-rules">
337 337 ## review rules will be appended here, by default reviewers logic
338 338 </div>
339 339 <input id="review_data" type="hidden" name="review_data" value="">
340 340 </div>
341 341
342 342 ## REVIEWERS
343 343 <div class="reviewers-title block-right">
344 344 <div class="pr-details-title">
345 345 ${_('Pull request reviewers')}
346 346 %if c.allowed_to_update:
347 347 <span id="open_edit_reviewers" class="block-right action_button last-item">${_('Edit')}</span>
348 348 %endif
349 349 </div>
350 350 </div>
351 351 <div id="reviewers" class="block-right pr-details-content reviewers">
352 352
353 353 ## members redering block
354 354 <input type="hidden" name="__start__" value="review_members:sequence">
355 355 <ul id="review_members" class="group_members">
356 356
357 357 % for review_obj, member, reasons, mandatory, status in c.pull_request_reviewers:
358 358 <script>
359 359 var member = ${h.json.dumps(h.reviewer_as_json(member, reasons=reasons, mandatory=mandatory, user_group=review_obj.rule_user_group_data()))|n};
360 360 var status = "${(status[0][1].status if status else 'not_reviewed')}";
361 361 var status_lbl = "${h.commit_status_lbl(status[0][1].status if status else 'not_reviewed')}";
362 362 var allowed_to_update = ${h.json.dumps(c.allowed_to_update)};
363 363
364 364 var entry = renderTemplate('reviewMemberEntry', {
365 365 'member': member,
366 366 'mandatory': member.mandatory,
367 367 'reasons': member.reasons,
368 368 'allowed_to_update': allowed_to_update,
369 369 'review_status': status,
370 370 'review_status_label': status_lbl,
371 371 'user_group': member.user_group,
372 372 'create': false
373 373 });
374 374 $('#review_members').append(entry)
375 375 </script>
376 376
377 377 % endfor
378 378
379 379 </ul>
380 380 <input type="hidden" name="__end__" value="review_members:sequence">
381 381 ## end members redering block
382 382
383 383 %if not c.pull_request.is_closed():
384 384 <div id="add_reviewer" class="ac" style="display: none;">
385 385 %if c.allowed_to_update:
386 386 % if not c.forbid_adding_reviewers:
387 387 <div id="add_reviewer_input" class="reviewer_ac">
388 388 ${h.text('user', class_='ac-input', placeholder=_('Add reviewer or reviewer group'))}
389 389 <div id="reviewers_container"></div>
390 390 </div>
391 391 % endif
392 392 <div class="pull-right">
393 393 <button id="update_pull_request" class="btn btn-small no-margin">${_('Save Changes')}</button>
394 394 </div>
395 395 %endif
396 396 </div>
397 397 %endif
398 398 </div>
399 399 </div>
400 400 </div>
401 401 <div class="box">
402 402 ##DIFF
403 403 <div class="table" >
404 404 <div id="changeset_compare_view_content">
405 405 ##CS
406 406 % if c.missing_requirements:
407 407 <div class="box">
408 408 <div class="alert alert-warning">
409 409 <div>
410 410 <strong>${_('Missing requirements:')}</strong>
411 411 ${_('These commits cannot be displayed, because this repository uses the Mercurial largefiles extension, which was not enabled.')}
412 412 </div>
413 413 </div>
414 414 </div>
415 415 % elif c.missing_commits:
416 416 <div class="box">
417 417 <div class="alert alert-warning">
418 418 <div>
419 419 <strong>${_('Missing commits')}:</strong>
420 420 ${_('This pull request cannot be displayed, because one or more commits no longer exist in the source repository.')}
421 421 ${_('Please update this pull request, push the commits back into the source repository, or consider closing this pull request.')}
422 422 ${_('Consider doing a {force_refresh_url} in case you think this is an error.').format(force_refresh_url=h.link_to('force refresh', h.current_route_path(request, force_refresh='1')))|n}
423 423 </div>
424 424 </div>
425 425 </div>
426 426 % endif
427 427
428 428 <div class="compare_view_commits_title">
429 429 % if not c.compare_mode:
430 430
431 431 % if c.at_version_pos:
432 432 <h4>
433 433 ${_('Showing changes at v%d, commenting is disabled.') % c.at_version_pos}
434 434 </h4>
435 435 % endif
436 436
437 437 <div class="pull-left">
438 438 <div class="btn-group">
439 439 <a
440 440 class="btn"
441 441 href="#"
442 442 onclick="$('.compare_select').show();$('.compare_select_hidden').hide(); return false">
443 443 ${_ungettext('Expand %s commit','Expand %s commits', len(c.commit_ranges)) % len(c.commit_ranges)}
444 444 </a>
445 445 <a
446 446 class="btn"
447 447 href="#"
448 448 onclick="$('.compare_select').hide();$('.compare_select_hidden').show(); return false">
449 449 ${_ungettext('Collapse %s commit','Collapse %s commits', len(c.commit_ranges)) % len(c.commit_ranges)}
450 450 </a>
451 451 </div>
452 452 </div>
453 453
454 454 <div class="pull-right">
455 455 % if c.allowed_to_update and not c.pull_request.is_closed():
456 456 <a id="update_commits" class="btn btn-primary no-margin pull-right">${_('Update commits')}</a>
457 457 % else:
458 458 <a class="tooltip btn disabled pull-right" disabled="disabled" title="${_('Update is disabled for current view')}">${_('Update commits')}</a>
459 459 % endif
460 460
461 461 </div>
462 462 % endif
463 463 </div>
464 464
465 465 % if not c.missing_commits:
466 466 % if c.compare_mode:
467 467 % if c.at_version:
468 468 <h4>
469 469 ${_('Commits and changes between v{ver_from} and {ver_to} of this pull request, commenting is disabled').format(ver_from=c.from_version_pos, ver_to=c.at_version_pos if c.at_version_pos else 'latest')}:
470 470 </h4>
471 471
472 472 <div class="subtitle-compare">
473 473 ${_('commits added: {}, removed: {}').format(len(c.commit_changes_summary.added), len(c.commit_changes_summary.removed))}
474 474 </div>
475 475
476 476 <div class="container">
477 477 <table class="rctable compare_view_commits">
478 478 <tr>
479 479 <th></th>
480 480 <th>${_('Time')}</th>
481 481 <th>${_('Author')}</th>
482 482 <th>${_('Commit')}</th>
483 483 <th></th>
484 484 <th>${_('Description')}</th>
485 485 </tr>
486 486
487 487 % for c_type, commit in c.commit_changes:
488 488 % if c_type in ['a', 'r']:
489 489 <%
490 490 if c_type == 'a':
491 491 cc_title = _('Commit added in displayed changes')
492 492 elif c_type == 'r':
493 493 cc_title = _('Commit removed in displayed changes')
494 494 else:
495 495 cc_title = ''
496 496 %>
497 497 <tr id="row-${commit.raw_id}" commit_id="${commit.raw_id}" class="compare_select">
498 498 <td>
499 499 <div class="commit-change-indicator color-${c_type}-border">
500 500 <div class="commit-change-content color-${c_type} tooltip" title="${h.tooltip(cc_title)}">
501 501 ${c_type.upper()}
502 502 </div>
503 503 </div>
504 504 </td>
505 505 <td class="td-time">
506 506 ${h.age_component(commit.date)}
507 507 </td>
508 508 <td class="td-user">
509 509 ${base.gravatar_with_user(commit.author, 16)}
510 510 </td>
511 511 <td class="td-hash">
512 512 <code>
513 513 <a href="${h.route_path('repo_commit', repo_name=c.target_repo.repo_name, commit_id=commit.raw_id)}">
514 514 r${commit.idx}:${h.short_id(commit.raw_id)}
515 515 </a>
516 516 ${h.hidden('revisions', commit.raw_id)}
517 517 </code>
518 518 </td>
519 <td class="expand_commit" data-commit-id="${commit.raw_id}" title="${_( 'Expand commit message')}">
520 <div class="show_more_col">
519 <td class="td-message expand_commit" data-commit-id="${commit.raw_id}" title="${_( 'Expand commit message')}" onclick="commitsController.expandCommit(this); return false">
521 520 <i class="icon-expand-linked"></i>
522 </div>
523 521 </td>
524 522 <td class="mid td-description">
525 523 <div class="log-container truncate-wrap">
526 <div class="message truncate" id="c-${commit.raw_id}" data-message-raw="${commit.message}">
527 ${h.urlify_commit_message(commit.message, c.repo_name)}
528 </div>
524 <div class="message truncate" id="c-${commit.raw_id}" data-message-raw="${commit.message}">${h.urlify_commit_message(commit.message, c.repo_name)}</div>
529 525 </div>
530 526 </td>
531 527 </tr>
532 528 % endif
533 529 % endfor
534 530 </table>
535 531 </div>
536 532
537 <script>
538 $('.expand_commit').on('click',function(e){
539 var target_expand = $(this);
540 var cid = target_expand.data('commitId');
541
542 if (target_expand.hasClass('open')){
543 $('#c-'+cid).css({
544 'height': '1.5em',
545 'white-space': 'nowrap',
546 'text-overflow': 'ellipsis',
547 'overflow':'hidden'
548 });
549 target_expand.removeClass('open');
550 }
551 else {
552 $('#c-'+cid).css({
553 'height': 'auto',
554 'white-space': 'pre-line',
555 'text-overflow': 'initial',
556 'overflow':'visible'
557 });
558 target_expand.addClass('open');
559 }
560 });
561 </script>
562
563 533 % endif
564 534
565 535 % else:
566 536 <%include file="/compare/compare_commits.mako" />
567 537 % endif
568 538
569 539 <div class="cs_files">
570 540 <%namespace name="cbdiffs" file="/codeblocks/diffs.mako"/>
571 541
572 542 ${cbdiffs.render_diffset_menu(c.diffset, range_diff_on=c.range_diff_on)}
573 543
574 544 % if c.range_diff_on:
575 545 % for commit in c.commit_ranges:
576 546 ${cbdiffs.render_diffset(
577 547 c.changes[commit.raw_id],
578 548 commit=commit, use_comments=True,
579 549 collapse_when_files_over=5,
580 550 disable_new_comments=True,
581 551 deleted_files_comments=c.deleted_files_comments,
582 552 inline_comments=c.inline_comments)}
583 553 % endfor
584 554 % else:
585 555 ${cbdiffs.render_diffset(
586 556 c.diffset, use_comments=True,
587 557 collapse_when_files_over=30,
588 558 disable_new_comments=not c.allowed_to_comment,
589 559 deleted_files_comments=c.deleted_files_comments,
590 560 inline_comments=c.inline_comments)}
591 561 % endif
592 562
593 563 </div>
594 564 % else:
595 565 ## skipping commits we need to clear the view for missing commits
596 566 <div style="clear:both;"></div>
597 567 % endif
598 568
599 569 </div>
600 570 </div>
601 571
602 572 ## template for inline comment form
603 573 <%namespace name="comment" file="/changeset/changeset_file_comment.mako"/>
604 574
605 575 ## render general comments
606 576
607 577 <div id="comment-tr-show">
608 578 <div class="comment">
609 579 % if general_outdated_comm_count_ver:
610 580 <div class="meta">
611 581 % if general_outdated_comm_count_ver == 1:
612 582 ${_('there is {num} general comment from older versions').format(num=general_outdated_comm_count_ver)},
613 583 <a href="#show-hidden-comments" onclick="$('.comment-general.comment-outdated').show(); $(this).parent().hide(); return false;">${_('show it')}</a>
614 584 % else:
615 585 ${_('there are {num} general comments from older versions').format(num=general_outdated_comm_count_ver)},
616 586 <a href="#show-hidden-comments" onclick="$('.comment-general.comment-outdated').show(); $(this).parent().hide(); return false;">${_('show them')}</a>
617 587 % endif
618 588 </div>
619 589 % endif
620 590 </div>
621 591 </div>
622 592
623 593 ${comment.generate_comments(c.comments, include_pull_request=True, is_pull_request=True)}
624 594
625 595 % if not c.pull_request.is_closed():
626 596 ## merge status, and merge action
627 597 <div class="pull-request-merge">
628 598 <%include file="/pullrequests/pullrequest_merge_checks.mako"/>
629 599 </div>
630 600
631 601 ## main comment form and it status
632 602 ${comment.comments(h.route_path('pullrequest_comment_create', repo_name=c.repo_name,
633 603 pull_request_id=c.pull_request.pull_request_id),
634 604 c.pull_request_review_status,
635 605 is_pull_request=True, change_status=c.allowed_to_change_status)}
636 606 %endif
637 607
638 608 <script type="text/javascript">
639 609 if (location.hash) {
640 610 var result = splitDelimitedHash(location.hash);
641 611 var line = $('html').find(result.loc);
642 612 // show hidden comments if we use location.hash
643 613 if (line.hasClass('comment-general')) {
644 614 $(line).show();
645 615 } else if (line.hasClass('comment-inline')) {
646 616 $(line).show();
647 617 var $cb = $(line).closest('.cb');
648 618 $cb.removeClass('cb-collapsed')
649 619 }
650 620 if (line.length > 0){
651 621 offsetScroll(line, 70);
652 622 }
653 623 }
654 624
655 625 versionController = new VersionController();
656 626 versionController.init();
657 627
658 628 reviewersController = new ReviewersController();
629 commitsController = new CommitsController();
659 630
660 631 $(function(){
661 632
662 633 // custom code mirror
663 634 var codeMirrorInstance = $('#pr-description-input').get(0).MarkupForm.cm;
664 635
665 636 var PRDetails = {
666 637 editButton: $('#open_edit_pullrequest'),
667 638 closeButton: $('#close_edit_pullrequest'),
668 639 deleteButton: $('#delete_pullrequest'),
669 640 viewFields: $('#pr-desc, #pr-title'),
670 641 editFields: $('#pr-desc-edit, #pr-title-edit, #pr-save'),
671 642
672 643 init: function() {
673 644 var that = this;
674 645 this.editButton.on('click', function(e) { that.edit(); });
675 646 this.closeButton.on('click', function(e) { that.view(); });
676 647 },
677 648
678 649 edit: function(event) {
679 650 this.viewFields.hide();
680 651 this.editButton.hide();
681 652 this.deleteButton.hide();
682 653 this.closeButton.show();
683 654 this.editFields.show();
684 655 codeMirrorInstance.refresh();
685 656 },
686 657
687 658 view: function(event) {
688 659 this.editButton.show();
689 660 this.deleteButton.show();
690 661 this.editFields.hide();
691 662 this.closeButton.hide();
692 663 this.viewFields.show();
693 664 }
694 665 };
695 666
696 667 var ReviewersPanel = {
697 668 editButton: $('#open_edit_reviewers'),
698 669 closeButton: $('#close_edit_reviewers'),
699 670 addButton: $('#add_reviewer'),
700 671 removeButtons: $('.reviewer_member_remove,.reviewer_member_mandatory_remove'),
701 672
702 673 init: function() {
703 674 var self = this;
704 675 this.editButton.on('click', function(e) { self.edit(); });
705 676 this.closeButton.on('click', function(e) { self.close(); });
706 677 },
707 678
708 679 edit: function(event) {
709 680 this.editButton.hide();
710 681 this.closeButton.show();
711 682 this.addButton.show();
712 683 this.removeButtons.css('visibility', 'visible');
713 684 // review rules
714 685 reviewersController.loadReviewRules(
715 686 ${c.pull_request.reviewer_data_json | n});
716 687 },
717 688
718 689 close: function(event) {
719 690 this.editButton.show();
720 691 this.closeButton.hide();
721 692 this.addButton.hide();
722 693 this.removeButtons.css('visibility', 'hidden');
723 694 // hide review rules
724 695 reviewersController.hideReviewRules()
725 696 }
726 697 };
727 698
728 699 PRDetails.init();
729 700 ReviewersPanel.init();
730 701
731 702 showOutdated = function(self){
732 703 $('.comment-inline.comment-outdated').show();
733 704 $('.filediff-outdated').show();
734 705 $('.showOutdatedComments').hide();
735 706 $('.hideOutdatedComments').show();
736 707 };
737 708
738 709 hideOutdated = function(self){
739 710 $('.comment-inline.comment-outdated').hide();
740 711 $('.filediff-outdated').hide();
741 712 $('.hideOutdatedComments').hide();
742 713 $('.showOutdatedComments').show();
743 714 };
744 715
745 716 refreshMergeChecks = function(){
746 717 var loadUrl = "${request.current_route_path(_query=dict(merge_checks=1))}";
747 718 $('.pull-request-merge').css('opacity', 0.3);
748 719 $('.action-buttons-extra').css('opacity', 0.3);
749 720
750 721 $('.pull-request-merge').load(
751 722 loadUrl, function() {
752 723 $('.pull-request-merge').css('opacity', 1);
753 724
754 725 $('.action-buttons-extra').css('opacity', 1);
755 726 injectCloseAction();
756 727 }
757 728 );
758 729 };
759 730
760 731 injectCloseAction = function() {
761 732 var closeAction = $('#close-pull-request-action').html();
762 733 var $actionButtons = $('.action-buttons-extra');
763 734 // clear the action before
764 735 $actionButtons.html("");
765 736 $actionButtons.html(closeAction);
766 737 };
767 738
768 739 closePullRequest = function (status) {
769 740 // inject closing flag
770 741 $('.action-buttons-extra').append('<input type="hidden" class="close-pr-input" id="close_pull_request" value="1">');
771 742 $(generalCommentForm.statusChange).select2("val", status).trigger('change');
772 743 $(generalCommentForm.submitForm).submit();
773 744 };
774 745
775 746 $('#show-outdated-comments').on('click', function(e){
776 747 var button = $(this);
777 748 var outdated = $('.comment-outdated');
778 749
779 750 if (button.html() === "(Show)") {
780 751 button.html("(Hide)");
781 752 outdated.show();
782 753 } else {
783 754 button.html("(Show)");
784 755 outdated.hide();
785 756 }
786 757 });
787 758
788 759 $('.show-inline-comments').on('change', function(e){
789 760 var show = 'none';
790 761 var target = e.currentTarget;
791 762 if(target.checked){
792 763 show = ''
793 764 }
794 765 var boxid = $(target).attr('id_for');
795 766 var comments = $('#{0} .inline-comments'.format(boxid));
796 767 var fn_display = function(idx){
797 768 $(this).css('display', show);
798 769 };
799 770 $(comments).each(fn_display);
800 771 var btns = $('#{0} .inline-comments-button'.format(boxid));
801 772 $(btns).each(fn_display);
802 773 });
803 774
804 775 $('#merge_pull_request_form').submit(function() {
805 776 if (!$('#merge_pull_request').attr('disabled')) {
806 777 $('#merge_pull_request').attr('disabled', 'disabled');
807 778 }
808 779 return true;
809 780 });
810 781
811 782 $('#edit_pull_request').on('click', function(e){
812 783 var title = $('#pr-title-input').val();
813 784 var description = codeMirrorInstance.getValue();
814 785 var renderer = $('#pr-renderer-input').val();
815 786 editPullRequest(
816 787 "${c.repo_name}", "${c.pull_request.pull_request_id}",
817 788 title, description, renderer);
818 789 });
819 790
820 791 $('#update_pull_request').on('click', function(e){
821 792 $(this).attr('disabled', 'disabled');
822 793 $(this).addClass('disabled');
823 794 $(this).html(_gettext('Saving...'));
824 795 reviewersController.updateReviewers(
825 796 "${c.repo_name}", "${c.pull_request.pull_request_id}");
826 797 });
827 798
828 799 $('#update_commits').on('click', function(e){
829 800 var isDisabled = !$(e.currentTarget).attr('disabled');
830 801 $(e.currentTarget).attr('disabled', 'disabled');
831 802 $(e.currentTarget).addClass('disabled');
832 803 $(e.currentTarget).removeClass('btn-primary');
833 804 $(e.currentTarget).text(_gettext('Updating...'));
834 805 if(isDisabled){
835 806 updateCommits(
836 807 "${c.repo_name}", "${c.pull_request.pull_request_id}");
837 808 }
838 809 });
839 810 // fixing issue with caches on firefox
840 811 $('#update_commits').removeAttr("disabled");
841 812
842 813 $('.show-inline-comments').on('click', function(e){
843 814 var boxid = $(this).attr('data-comment-id');
844 815 var button = $(this);
845 816
846 817 if(button.hasClass("comments-visible")) {
847 818 $('#{0} .inline-comments'.format(boxid)).each(function(index){
848 819 $(this).hide();
849 820 });
850 821 button.removeClass("comments-visible");
851 822 } else {
852 823 $('#{0} .inline-comments'.format(boxid)).each(function(index){
853 824 $(this).show();
854 825 });
855 826 button.addClass("comments-visible");
856 827 }
857 828 });
858 829
859 830 // register submit callback on commentForm form to track TODOs
860 831 window.commentFormGlobalSubmitSuccessCallback = function(){
861 832 refreshMergeChecks();
862 833 };
863 834 // initial injection
864 835 injectCloseAction();
865 836
866 837 ReviewerAutoComplete('#user');
867 838
868 839 })
869 840 </script>
870 841
871 842 </div>
872 843 </div>
873 844
874 845 </%def>
@@ -1,82 +1,82 b''
1 1 <%namespace name="base" file="/base/base.mako"/>
2 2
3 3 <table class="rctable search-results">
4 4 <tr>
5 5 <th>${_('Repository')}</th>
6 6 <th>${_('Commit')}</th>
7 7 <th></th>
8 8 <th>${_('Commit message')}</th>
9 9 <th>
10 10 %if c.sort == 'newfirst':
11 11 <a href="${c.url_generator(sort='oldfirst')}">${_('Age (new first)')}</a>
12 12 %else:
13 13 <a href="${c.url_generator(sort='newfirst')}">${_('Age (old first)')}</a>
14 14 %endif
15 15 </th>
16 16 <th>${_('Author')}</th>
17 17 </tr>
18 18 %for entry in c.formatted_results:
19 19 ## search results are additionally filtered, and this check is just a safe gate
20 20 % if h.HasRepoPermissionAny('repository.write','repository.read','repository.admin')(entry['repository'], 'search results commit check'):
21 21 <tr class="body">
22 22 <td class="td-componentname">
23 23 %if h.get_repo_type_by_name(entry.get('repository')) == 'hg':
24 24 <i class="icon-hg"></i>
25 25 %elif h.get_repo_type_by_name(entry.get('repository')) == 'git':
26 26 <i class="icon-git"></i>
27 27 %elif h.get_repo_type_by_name(entry.get('repository')) == 'svn':
28 28 <i class="icon-svn"></i>
29 29 %endif
30 30 ${h.link_to(entry['repository'], h.route_path('repo_summary',repo_name=entry['repository']))}
31 31 </td>
32 32 <td class="td-commit">
33 33 ${h.link_to(h._shorten_commit_id(entry['commit_id']),
34 34 h.route_path('repo_commit',repo_name=entry['repository'],commit_id=entry['commit_id']))}
35 35 </td>
36 36 <td class="td-message expand_commit search open" data-commit-id="${h.md5_safe(entry['repository'])+entry['commit_id']}" id="t-${h.md5_safe(entry['repository'])+entry['commit_id']}" title="${_('Expand commit message')}">
37 <div class="show_more_col">
37 <div>
38 38 <i class="icon-expand-linked"></i>&nbsp;
39 39 </div>
40 40 </td>
41 41 <td data-commit-id="${h.md5_safe(entry['repository'])+entry['commit_id']}" id="c-${h.md5_safe(entry['repository'])+entry['commit_id']}" class="message td-description open">
42 42 %if entry.get('message_hl'):
43 43 ${h.literal(entry['message_hl'])}
44 44 %else:
45 45 ${h.urlify_commit_message(entry['message'], entry['repository'])}
46 46 %endif
47 47 </td>
48 48 <td class="td-time">
49 49 ${h.age_component(h.time_to_utcdatetime(entry['date']))}
50 50 </td>
51 51
52 52 <td class="td-user author">
53 53 ${base.gravatar_with_user(entry['author'])}
54 54 </td>
55 55 </tr>
56 56 % endif
57 57 %endfor
58 58 </table>
59 59
60 60 %if c.cur_query and c.formatted_results:
61 61 <div class="pagination-wh pagination-left">
62 62 ${c.formatted_results.pager('$link_previous ~2~ $link_next')}
63 63 </div>
64 64 %endif
65 65
66 66 <script>
67 67 $('.expand_commit').on('click',function(e){
68 68 var target_expand = $(this);
69 69 var cid = target_expand.data('commit-id');
70 70
71 71 if (target_expand.hasClass('open')){
72 72 $('#c-'+cid).css({'height': '1.5em', 'white-space': 'nowrap', 'text-overflow': 'ellipsis', 'overflow':'hidden'})
73 73 $('#t-'+cid).css({'height': 'auto', 'line-height': '.9em', 'text-overflow': 'ellipsis', 'overflow':'hidden'})
74 74 target_expand.removeClass('open');
75 75 }
76 76 else {
77 77 $('#c-'+cid).css({'height': 'auto', 'white-space': 'normal', 'text-overflow': 'initial', 'overflow':'visible'})
78 78 $('#t-'+cid).css({'height': 'auto', 'max-height': 'none', 'text-overflow': 'initial', 'overflow':'visible'})
79 79 target_expand.addClass('open');
80 80 }
81 81 });
82 82 </script>
General Comments 0
You need to be logged in to leave comments. Login now