##// END OF EJS Templates
ui: bulk changes
Liviu -
r3560:92732458 new-ui
parent child Browse files
Show More
@@ -1,2474 +1,2474 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 background-color: @grey2;
240 background-color: @grey1;
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 }
319 319 }
320 320
321 321
322 322 // My Account PR list
323 323
324 324 #show_closed {
325 325 margin: 0 1em 0 0;
326 326 }
327 327
328 328 .pullrequestlist {
329 329 .closed {
330 330 background-color: @grey6;
331 331 }
332 332 .td-status {
333 333 padding-left: .5em;
334 334 }
335 335 .log-container .truncate {
336 336 height: 2.75em;
337 337 white-space: pre-line;
338 338 }
339 339 table.rctable .user {
340 340 padding-left: 0;
341 341 }
342 342 table.rctable {
343 343 td.td-description,
344 344 .rc-user {
345 345 min-width: auto;
346 346 }
347 347 }
348 348 }
349 349
350 350 // Pull Requests
351 351
352 352 .pullrequests_section_head {
353 353 display: block;
354 354 clear: both;
355 355 margin: @padding 0;
356 356 font-weight: @text-bold-weight;
357 357 font-family: @text-bold;
358 358 }
359 359
360 360 .pr-origininfo, .pr-targetinfo {
361 361 position: relative;
362 362
363 363 .tag {
364 364 display: inline-block;
365 365 margin: 0 1em .5em 0;
366 366 }
367 367
368 368 .clone-url {
369 369 display: inline-block;
370 370 margin: 0 0 .5em 0;
371 371 padding: 0;
372 372 line-height: 1.2em;
373 373 }
374 374 }
375 375
376 376 .pr-mergeinfo {
377 377 min-width: 95% !important;
378 378 padding: 0 !important;
379 379 border: 0;
380 380 }
381 381 .pr-mergeinfo-copy {
382 382 padding: 0 0;
383 383 }
384 384
385 385 .pr-pullinfo {
386 386 min-width: 95% !important;
387 387 padding: 0 !important;
388 388 border: 0;
389 389 }
390 390 .pr-pullinfo-copy {
391 391 padding: 0 0;
392 392 }
393 393
394 394
395 395 #pr-title-input {
396 396 width: 72%;
397 397 font-size: 1em;
398 398 margin: 0;
399 399 padding: 0 0 0 @padding/4;
400 400 line-height: 1.7em;
401 401 color: @text-color;
402 402 letter-spacing: .02em;
403 403 font-weight: @text-bold-weight;
404 404 font-family: @text-bold;
405 405 }
406 406
407 407 #pullrequest_title {
408 408 width: 100%;
409 409 box-sizing: border-box;
410 410 }
411 411
412 412 #pr_open_message {
413 413 border: @border-thickness solid #fff;
414 414 border-radius: @border-radius;
415 415 padding: @padding-large-vertical @padding-large-vertical @padding-large-vertical 0;
416 416 text-align: left;
417 417 overflow: hidden;
418 418 }
419 419
420 420 .pr-submit-button {
421 421 float: right;
422 422 margin: 0 0 0 5px;
423 423 }
424 424
425 425 .pr-spacing-container {
426 426 padding: 20px;
427 427 clear: both
428 428 }
429 429
430 430 #pr-description-input {
431 431 margin-bottom: 0;
432 432 }
433 433
434 434 .pr-description-label {
435 435 vertical-align: top;
436 436 }
437 437
438 438 .perms_section_head {
439 439 min-width: 625px;
440 440
441 441 h2 {
442 442 margin-bottom: 0;
443 443 }
444 444
445 445 .label-checkbox {
446 446 float: left;
447 447 }
448 448
449 449 &.field {
450 450 margin: @space 0 @padding;
451 451 }
452 452
453 453 &:first-child.field {
454 454 margin-top: 0;
455 455
456 456 .label {
457 457 margin-top: 0;
458 458 padding-top: 0;
459 459 }
460 460
461 461 .radios {
462 462 padding-top: 0;
463 463 }
464 464 }
465 465
466 466 .radios {
467 467 position: relative;
468 468 width: 505px;
469 469 }
470 470 }
471 471
472 472 //--- MODULES ------------------//
473 473
474 474
475 475 // Server Announcement
476 476 #server-announcement {
477 477 width: 95%;
478 478 margin: @padding auto;
479 479 padding: @padding;
480 480 border-width: 2px;
481 481 border-style: solid;
482 482 .border-radius(2px);
483 483 font-weight: @text-bold-weight;
484 484 font-family: @text-bold;
485 485
486 486 &.info { border-color: @alert4; background-color: @alert4-inner; }
487 487 &.warning { border-color: @alert3; background-color: @alert3-inner; }
488 488 &.error { border-color: @alert2; background-color: @alert2-inner; }
489 489 &.success { border-color: @alert1; background-color: @alert1-inner; }
490 490 &.neutral { border-color: @grey3; background-color: @grey6; }
491 491 }
492 492
493 493 // Fixed Sidebar Column
494 494 .sidebar-col-wrapper {
495 495 padding-left: @sidebar-all-width;
496 496
497 497 .sidebar {
498 498 width: @sidebar-width;
499 499 margin-left: -@sidebar-all-width;
500 500 }
501 501 }
502 502
503 503 .sidebar-col-wrapper.scw-small {
504 504 padding-left: @sidebar-small-all-width;
505 505
506 506 .sidebar {
507 507 width: @sidebar-small-width;
508 508 margin-left: -@sidebar-small-all-width;
509 509 }
510 510 }
511 511
512 512
513 513 // FOOTER
514 514 #footer {
515 515 padding: 0;
516 516 text-align: center;
517 517 vertical-align: middle;
518 518 color: @grey2;
519 519 background-color: @grey6;
520 520
521 521 p {
522 522 margin: 0;
523 523 padding: 1em;
524 524 line-height: 1em;
525 525 }
526 526
527 527 .server-instance { //server instance
528 528 display: none;
529 529 }
530 530
531 531 .title {
532 532 float: none;
533 533 margin: 0 auto;
534 534 }
535 535 }
536 536
537 537 button.close {
538 538 padding: 0;
539 539 cursor: pointer;
540 540 background: transparent;
541 541 border: 0;
542 542 .box-shadow(none);
543 543 -webkit-appearance: none;
544 544 }
545 545
546 546 .close {
547 547 float: right;
548 548 font-size: 21px;
549 549 font-family: @text-bootstrap;
550 550 line-height: 1em;
551 551 font-weight: bold;
552 552 color: @grey2;
553 553
554 554 &:hover,
555 555 &:focus {
556 556 color: @grey1;
557 557 text-decoration: none;
558 558 cursor: pointer;
559 559 }
560 560 }
561 561
562 562 // GRID
563 563 .sorting,
564 564 .sorting_desc,
565 565 .sorting_asc {
566 566 cursor: pointer;
567 567 }
568 568 .sorting_desc:after {
569 569 content: "\00A0\25B2";
570 570 font-size: .75em;
571 571 }
572 572 .sorting_asc:after {
573 573 content: "\00A0\25BC";
574 574 font-size: .68em;
575 575 }
576 576
577 577
578 578 .user_auth_tokens {
579 579
580 580 &.truncate {
581 581 white-space: nowrap;
582 582 overflow: hidden;
583 583 text-overflow: ellipsis;
584 584 }
585 585
586 586 .fields .field .input {
587 587 margin: 0;
588 588 }
589 589
590 590 input#description {
591 591 width: 100px;
592 592 margin: 0;
593 593 }
594 594
595 595 .drop-menu {
596 596 // TODO: johbo: Remove this, should work out of the box when
597 597 // having multiple inputs inline
598 598 margin: 0 0 0 5px;
599 599 }
600 600 }
601 601 #user_list_table {
602 602 .closed {
603 603 background-color: @grey6;
604 604 }
605 605 }
606 606
607 607
608 608 input {
609 609 &.disabled {
610 610 opacity: .5;
611 611 }
612 612 }
613 613
614 614 // remove extra padding in firefox
615 615 input::-moz-focus-inner { border:0; padding:0 }
616 616
617 617 .adjacent input {
618 618 margin-bottom: @padding;
619 619 }
620 620
621 621 .permissions_boxes {
622 622 display: block;
623 623 }
624 624
625 625 //FORMS
626 626
627 627 .medium-inline,
628 628 input#description.medium-inline {
629 629 display: inline;
630 630 width: @medium-inline-input-width;
631 631 min-width: 100px;
632 632 }
633 633
634 634 select {
635 635 //reset
636 636 -webkit-appearance: none;
637 637 -moz-appearance: none;
638 638
639 639 display: inline-block;
640 640 height: 28px;
641 641 width: auto;
642 642 margin: 0 @padding @padding 0;
643 643 padding: 0 18px 0 8px;
644 644 line-height:1em;
645 645 font-size: @basefontsize;
646 646 border: @border-thickness solid @rcblue;
647 647 background:white url("../images/dt-arrow-dn.png") no-repeat 100% 50%;
648 648 color: @rcblue;
649 649
650 650 &:after {
651 651 content: "\00A0\25BE";
652 652 }
653 653
654 654 &:focus {
655 655 outline: none;
656 656 }
657 657 }
658 658
659 659 option {
660 660 &:focus {
661 661 outline: none;
662 662 }
663 663 }
664 664
665 665 input,
666 666 textarea {
667 667 padding: @input-padding;
668 668 border: @input-border-thickness solid @border-highlight-color;
669 669 .border-radius (@border-radius);
670 670 font-family: @text-light;
671 671 font-size: @basefontsize;
672 672
673 673 &.input-sm {
674 674 padding: 5px;
675 675 }
676 676
677 677 &#description {
678 678 min-width: @input-description-minwidth;
679 679 min-height: 1em;
680 680 padding: 10px;
681 681 }
682 682 }
683 683
684 684 .field-sm {
685 685 input,
686 686 textarea {
687 687 padding: 5px;
688 688 }
689 689 }
690 690
691 691 textarea {
692 692 display: block;
693 693 clear: both;
694 694 width: 100%;
695 695 min-height: 100px;
696 696 margin-bottom: @padding;
697 697 .box-sizing(border-box);
698 698 overflow: auto;
699 699 }
700 700
701 701 label {
702 702 font-family: @text-light;
703 703 }
704 704
705 705 // GRAVATARS
706 706 // centers gravatar on username to the right
707 707
708 708 .gravatar {
709 709 display: inline;
710 710 min-width: 16px;
711 711 min-height: 16px;
712 712 margin: -5px 0;
713 713 padding: 0;
714 714 line-height: 1em;
715 715 border: 1px solid @grey4;
716 716 box-sizing: content-box;
717 717
718 718 &.gravatar-large {
719 719 margin: -0.5em .25em -0.5em 0;
720 720 }
721 721
722 722 & + .user {
723 723 display: inline;
724 724 margin: 0;
725 725 padding: 0 0 0 .17em;
726 726 line-height: 1em;
727 727 }
728 728 }
729 729
730 730 .user-inline-data {
731 731 display: inline-block;
732 732 float: left;
733 733 padding-left: .5em;
734 734 line-height: 1.3em;
735 735 }
736 736
737 737 .rc-user { // gravatar + user wrapper
738 738 float: left;
739 739 position: relative;
740 740 min-width: 100px;
741 741 max-width: 200px;
742 742 min-height: (@gravatar-size + @border-thickness * 2); // account for border
743 743 display: block;
744 744 padding: 0 0 0 (@gravatar-size + @basefontsize/2 + @border-thickness * 2);
745 745
746 746
747 747 .gravatar {
748 748 display: block;
749 749 position: absolute;
750 750 top: 0;
751 751 left: 0;
752 752 min-width: @gravatar-size;
753 753 min-height: @gravatar-size;
754 754 margin: 0;
755 755 }
756 756
757 757 .user {
758 758 display: block;
759 759 max-width: 175px;
760 760 padding-top: 2px;
761 761 overflow: hidden;
762 762 text-overflow: ellipsis;
763 763 }
764 764 }
765 765
766 766 .gist-gravatar,
767 767 .journal_container {
768 768 .gravatar-large {
769 769 margin: 0 .5em -10px 0;
770 770 }
771 771 }
772 772
773 773
774 774 // ADMIN SETTINGS
775 775
776 776 // Tag Patterns
777 777 .tag_patterns {
778 778 .tag_input {
779 779 margin-bottom: @padding;
780 780 }
781 781 }
782 782
783 783 .locked_input {
784 784 position: relative;
785 785
786 786 input {
787 787 display: inline;
788 788 margin: 3px 5px 0px 0px;
789 789 }
790 790
791 791 br {
792 792 display: none;
793 793 }
794 794
795 795 .error-message {
796 796 float: left;
797 797 width: 100%;
798 798 }
799 799
800 800 .lock_input_button {
801 801 display: inline;
802 802 }
803 803
804 804 .help-block {
805 805 clear: both;
806 806 }
807 807 }
808 808
809 809 // Notifications
810 810
811 811 .notifications_buttons {
812 812 margin: 0 0 @space 0;
813 813 padding: 0;
814 814
815 815 .btn {
816 816 display: inline-block;
817 817 }
818 818 }
819 819
820 820 .notification-list {
821 821
822 822 div {
823 823 display: inline-block;
824 824 vertical-align: middle;
825 825 }
826 826
827 827 .container {
828 828 display: block;
829 829 margin: 0 0 @padding 0;
830 830 }
831 831
832 832 .delete-notifications {
833 833 margin-left: @padding;
834 834 text-align: right;
835 835 cursor: pointer;
836 836 }
837 837
838 838 .read-notifications {
839 839 margin-left: @padding/2;
840 840 text-align: right;
841 841 width: 35px;
842 842 cursor: pointer;
843 843 }
844 844
845 845 .icon-minus-sign {
846 846 color: @alert2;
847 847 }
848 848
849 849 .icon-ok-sign {
850 850 color: @alert1;
851 851 }
852 852 }
853 853
854 854 .user_settings {
855 855 float: left;
856 856 clear: both;
857 857 display: block;
858 858 width: 100%;
859 859
860 860 .gravatar_box {
861 861 margin-bottom: @padding;
862 862
863 863 &:after {
864 864 content: " ";
865 865 clear: both;
866 866 width: 100%;
867 867 }
868 868 }
869 869
870 870 .fields .field {
871 871 clear: both;
872 872 }
873 873 }
874 874
875 875 .advanced_settings {
876 876 margin-bottom: @space;
877 877
878 878 .help-block {
879 879 margin-left: 0;
880 880 }
881 881
882 882 button + .help-block {
883 883 margin-top: @padding;
884 884 }
885 885 }
886 886
887 887 // admin settings radio buttons and labels
888 888 .label-2 {
889 889 float: left;
890 890 width: @label2-width;
891 891
892 892 label {
893 893 color: @grey1;
894 894 }
895 895 }
896 896 .checkboxes {
897 897 float: left;
898 898 width: @checkboxes-width;
899 899 margin-bottom: @padding;
900 900
901 901 .checkbox {
902 902 width: 100%;
903 903
904 904 label {
905 905 margin: 0;
906 906 padding: 0;
907 907 }
908 908 }
909 909
910 910 .checkbox + .checkbox {
911 911 display: inline-block;
912 912 }
913 913
914 914 label {
915 915 margin-right: 1em;
916 916 }
917 917 }
918 918
919 919 // CHANGELOG
920 920 .container_header {
921 921 float: left;
922 922 display: block;
923 923 width: 100%;
924 924 margin: @padding 0 @padding;
925 925
926 926 #filter_changelog {
927 927 float: left;
928 928 margin-right: @padding;
929 929 }
930 930
931 931 .breadcrumbs_light {
932 932 display: inline-block;
933 933 }
934 934 }
935 935
936 936 .info_box {
937 937 float: right;
938 938 }
939 939
940 940
941 941 #graph_nodes {
942 942 padding-top: 43px;
943 943 }
944 944
945 945 #graph_content{
946 946
947 947 // adjust for table headers so that graph renders properly
948 948 // #graph_nodes padding - table cell padding
949 949 padding-top: (@space - (@basefontsize * 2.4));
950 950
951 951 &.graph_full_width {
952 952 width: 100%;
953 953 max-width: 100%;
954 954 }
955 955 }
956 956
957 957 #graph {
958 958 .flag_status {
959 959 margin: 0;
960 960 }
961 961
962 962 .pagination-left {
963 963 float: left;
964 964 clear: both;
965 965 }
966 966
967 967 .log-container {
968 968 max-width: 345px;
969 969
970 970 .message{
971 971 max-width: 340px;
972 972 }
973 973 }
974 974
975 975 .graph-col-wrapper {
976 976 padding-left: 110px;
977 977
978 978 #graph_nodes {
979 979 width: 100px;
980 980 margin-left: -110px;
981 981 float: left;
982 982 clear: left;
983 983 }
984 984 }
985 985
986 986 .load-more-commits {
987 987 text-align: center;
988 988 }
989 989 .load-more-commits:hover {
990 990 background-color: @grey7;
991 991 }
992 992 .load-more-commits {
993 993 a {
994 994 display: block;
995 995 }
996 996 }
997 997 }
998 998
999 999 #filter_changelog {
1000 1000 float: left;
1001 1001 }
1002 1002
1003 1003
1004 1004 //--- THEME ------------------//
1005 1005
1006 1006 #logo {
1007 1007 float: left;
1008 1008 margin: 9px 0 0 0;
1009 1009
1010 1010 .header {
1011 1011 background-color: transparent;
1012 1012 }
1013 1013
1014 1014 a {
1015 1015 display: inline-block;
1016 1016 }
1017 1017
1018 1018 img {
1019 1019 height:30px;
1020 1020 }
1021 1021 }
1022 1022
1023 1023 .logo-wrapper {
1024 1024 float:left;
1025 1025 }
1026 1026
1027 1027 .branding{
1028 1028 float: left;
1029 1029 padding: 9px 2px;
1030 1030 line-height: 1em;
1031 1031 font-size: @navigation-fontsize;
1032 1032 }
1033 1033
1034 1034 img {
1035 1035 border: none;
1036 1036 outline: none;
1037 1037 }
1038 1038 user-profile-header
1039 1039 label {
1040 1040
1041 1041 input[type="checkbox"] {
1042 1042 margin-right: 1em;
1043 1043 }
1044 1044 input[type="radio"] {
1045 1045 margin-right: 1em;
1046 1046 }
1047 1047 }
1048 1048
1049 1049 .flag_status {
1050 1050 margin: 2px 8px 6px 2px;
1051 1051 &.under_review {
1052 1052 .circle(5px, @alert3);
1053 1053 }
1054 1054 &.approved {
1055 1055 .circle(5px, @alert1);
1056 1056 }
1057 1057 &.rejected,
1058 1058 &.forced_closed{
1059 1059 .circle(5px, @alert2);
1060 1060 }
1061 1061 &.not_reviewed {
1062 1062 .circle(5px, @grey5);
1063 1063 }
1064 1064 }
1065 1065
1066 1066 .flag_status_comment_box {
1067 1067 margin: 5px 6px 0px 2px;
1068 1068 }
1069 1069 .test_pattern_preview {
1070 1070 margin: @space 0;
1071 1071
1072 1072 p {
1073 1073 margin-bottom: 0;
1074 1074 border-bottom: @border-thickness solid @border-default-color;
1075 1075 color: @grey3;
1076 1076 }
1077 1077
1078 1078 .btn {
1079 1079 margin-bottom: @padding;
1080 1080 }
1081 1081 }
1082 1082 #test_pattern_result {
1083 1083 display: none;
1084 1084 &:extend(pre);
1085 1085 padding: .9em;
1086 1086 color: @grey3;
1087 1087 background-color: @grey7;
1088 1088 border-right: @border-thickness solid @border-default-color;
1089 1089 border-bottom: @border-thickness solid @border-default-color;
1090 1090 border-left: @border-thickness solid @border-default-color;
1091 1091 }
1092 1092
1093 1093 #repo_vcs_settings {
1094 1094 #inherit_overlay_vcs_default {
1095 1095 display: none;
1096 1096 }
1097 1097 #inherit_overlay_vcs_custom {
1098 1098 display: custom;
1099 1099 }
1100 1100 &.inherited {
1101 1101 #inherit_overlay_vcs_default {
1102 1102 display: block;
1103 1103 }
1104 1104 #inherit_overlay_vcs_custom {
1105 1105 display: none;
1106 1106 }
1107 1107 }
1108 1108 }
1109 1109
1110 1110 .issue-tracker-link {
1111 1111 color: @rcblue;
1112 1112 }
1113 1113
1114 1114 // Issue Tracker Table Show/Hide
1115 1115 #repo_issue_tracker {
1116 1116 #inherit_overlay {
1117 1117 display: none;
1118 1118 }
1119 1119 #custom_overlay {
1120 1120 display: custom;
1121 1121 }
1122 1122 &.inherited {
1123 1123 #inherit_overlay {
1124 1124 display: block;
1125 1125 }
1126 1126 #custom_overlay {
1127 1127 display: none;
1128 1128 }
1129 1129 }
1130 1130 }
1131 1131 table.issuetracker {
1132 1132 &.readonly {
1133 1133 tr, td {
1134 1134 color: @grey3;
1135 1135 }
1136 1136 }
1137 1137 .edit {
1138 1138 display: none;
1139 1139 }
1140 1140 .editopen {
1141 1141 .edit {
1142 1142 display: inline;
1143 1143 }
1144 1144 .entry {
1145 1145 display: none;
1146 1146 }
1147 1147 }
1148 1148 tr td.td-action {
1149 1149 min-width: 117px;
1150 1150 }
1151 1151 td input {
1152 1152 max-width: none;
1153 1153 min-width: 30px;
1154 1154 width: 80%;
1155 1155 }
1156 1156 .issuetracker_pref input {
1157 1157 width: 40%;
1158 1158 }
1159 1159 input.edit_issuetracker_update {
1160 1160 margin-right: 0;
1161 1161 width: auto;
1162 1162 }
1163 1163 }
1164 1164
1165 1165 table.integrations {
1166 1166 .td-icon {
1167 1167 width: 20px;
1168 1168 .integration-icon {
1169 1169 height: 20px;
1170 1170 width: 20px;
1171 1171 }
1172 1172 }
1173 1173 }
1174 1174
1175 1175 .integrations {
1176 1176 a.integration-box {
1177 1177 color: @text-color;
1178 1178 &:hover {
1179 1179 .panel {
1180 1180 background: #fbfbfb;
1181 1181 }
1182 1182 }
1183 1183 .integration-icon {
1184 1184 width: 30px;
1185 1185 height: 30px;
1186 1186 margin-right: 20px;
1187 1187 float: left;
1188 1188 }
1189 1189
1190 1190 .panel-body {
1191 1191 padding: 10px;
1192 1192 }
1193 1193 .panel {
1194 1194 margin-bottom: 10px;
1195 1195 }
1196 1196 h2 {
1197 1197 display: inline-block;
1198 1198 margin: 0;
1199 1199 min-width: 140px;
1200 1200 }
1201 1201 }
1202 1202 a.integration-box.dummy-integration {
1203 1203 color: @grey4
1204 1204 }
1205 1205 }
1206 1206
1207 1207 //Permissions Settings
1208 1208 #add_perm {
1209 1209 margin: 0 0 @padding;
1210 1210 cursor: pointer;
1211 1211 }
1212 1212
1213 1213 .perm_ac {
1214 1214 input {
1215 1215 width: 95%;
1216 1216 }
1217 1217 }
1218 1218
1219 1219 .autocomplete-suggestions {
1220 1220 width: auto !important; // overrides autocomplete.js
1221 1221 margin: 0;
1222 1222 border: @border-thickness solid @rcblue;
1223 1223 border-radius: @border-radius;
1224 1224 color: @rcblue;
1225 1225 background-color: white;
1226 1226 }
1227 1227 .autocomplete-selected {
1228 1228 background: #F0F0F0;
1229 1229 }
1230 1230 .ac-container-wrap {
1231 1231 margin: 0;
1232 1232 padding: 8px;
1233 1233 border-bottom: @border-thickness solid @rclightblue;
1234 1234 list-style-type: none;
1235 1235 cursor: pointer;
1236 1236
1237 1237 &:hover {
1238 1238 background-color: @rclightblue;
1239 1239 }
1240 1240
1241 1241 img {
1242 1242 height: @gravatar-size;
1243 1243 width: @gravatar-size;
1244 1244 margin-right: 1em;
1245 1245 }
1246 1246
1247 1247 strong {
1248 1248 font-weight: normal;
1249 1249 }
1250 1250 }
1251 1251
1252 1252 // Settings Dropdown
1253 1253 .user-menu .container {
1254 1254 padding: 0 4px;
1255 1255 margin: 0;
1256 1256 }
1257 1257
1258 1258 .user-menu .gravatar {
1259 1259 cursor: pointer;
1260 1260 }
1261 1261
1262 1262 .codeblock {
1263 1263 margin-bottom: @padding;
1264 1264 clear: both;
1265 1265
1266 1266 .stats {
1267 1267 overflow: hidden;
1268 1268 }
1269 1269
1270 1270 .message{
1271 1271 textarea{
1272 1272 margin: 0;
1273 1273 }
1274 1274 }
1275 1275
1276 1276 .code-header {
1277 1277 .stats {
1278 1278 line-height: 2em;
1279 1279
1280 1280 .revision_id {
1281 1281 margin-left: 0;
1282 1282 }
1283 1283 .buttons {
1284 1284 padding-right: 0;
1285 1285 }
1286 1286 }
1287 1287
1288 1288 .item{
1289 1289 margin-right: 0.5em;
1290 1290 }
1291 1291 }
1292 1292
1293 1293 #editor_container{
1294 1294 position: relative;
1295 1295 margin: @padding;
1296 1296 }
1297 1297 }
1298 1298
1299 1299 #file_history_container {
1300 1300 display: none;
1301 1301 }
1302 1302
1303 1303 .file-history-inner {
1304 1304 margin-bottom: 10px;
1305 1305 }
1306 1306
1307 1307 // Pull Requests
1308 1308 .summary-details {
1309 1309 width: 72%;
1310 1310 }
1311 1311 .pr-summary {
1312 1312 border-bottom: @border-thickness solid @grey5;
1313 1313 margin-bottom: @space;
1314 1314 }
1315 1315 .reviewers-title {
1316 1316 width: 25%;
1317 1317 min-width: 200px;
1318 1318 }
1319 1319 .reviewers {
1320 1320 width: 25%;
1321 1321 min-width: 200px;
1322 1322 }
1323 1323 .reviewers ul li {
1324 1324 position: relative;
1325 1325 width: 100%;
1326 1326 padding-bottom: 8px;
1327 1327 list-style-type: none;
1328 1328 }
1329 1329
1330 1330 .reviewer_entry {
1331 1331 min-height: 55px;
1332 1332 }
1333 1333
1334 1334 .reviewers_member {
1335 1335 width: 100%;
1336 1336 overflow: auto;
1337 1337 }
1338 1338 .reviewer_reason {
1339 1339 padding-left: 20px;
1340 1340 line-height: 1.5em;
1341 1341 }
1342 1342 .reviewer_status {
1343 1343 display: inline-block;
1344 1344 vertical-align: top;
1345 1345 width: 25px;
1346 1346 min-width: 25px;
1347 1347 height: 1.2em;
1348 1348 margin-top: 3px;
1349 1349 line-height: 1em;
1350 1350 }
1351 1351
1352 1352 .reviewer_name {
1353 1353 display: inline-block;
1354 1354 max-width: 83%;
1355 1355 padding-right: 20px;
1356 1356 vertical-align: middle;
1357 1357 line-height: 1;
1358 1358
1359 1359 .rc-user {
1360 1360 min-width: 0;
1361 1361 margin: -2px 1em 0 0;
1362 1362 }
1363 1363
1364 1364 .reviewer {
1365 1365 float: left;
1366 1366 }
1367 1367 }
1368 1368
1369 1369 .reviewer_member_mandatory {
1370 1370 position: absolute;
1371 1371 left: 15px;
1372 1372 top: 8px;
1373 1373 width: 16px;
1374 1374 font-size: 11px;
1375 1375 margin: 0;
1376 1376 padding: 0;
1377 1377 color: black;
1378 1378 }
1379 1379
1380 1380 .reviewer_member_mandatory_remove,
1381 1381 .reviewer_member_remove {
1382 1382 position: absolute;
1383 1383 right: 0;
1384 1384 top: 0;
1385 1385 width: 16px;
1386 1386 margin-bottom: 10px;
1387 1387 padding: 0;
1388 1388 color: black;
1389 1389 }
1390 1390
1391 1391 .reviewer_member_mandatory_remove {
1392 1392 color: @grey4;
1393 1393 }
1394 1394
1395 1395 .reviewer_member_status {
1396 1396 margin-top: 5px;
1397 1397 }
1398 1398 .pr-summary #summary{
1399 1399 width: 100%;
1400 1400 }
1401 1401 .pr-summary .action_button:hover {
1402 1402 border: 0;
1403 1403 cursor: pointer;
1404 1404 }
1405 1405 .pr-details-title {
1406 1406 padding-bottom: 8px;
1407 1407 border-bottom: @border-thickness solid @grey5;
1408 1408
1409 1409 .action_button.disabled {
1410 1410 color: @grey4;
1411 1411 cursor: inherit;
1412 1412 }
1413 1413 .action_button {
1414 1414 color: @rcblue;
1415 1415 }
1416 1416 }
1417 1417 .pr-details-content {
1418 1418 margin-top: @textmargin;
1419 1419 margin-bottom: @textmargin;
1420 1420 }
1421 1421
1422 1422 .pr-reviewer-rules {
1423 1423 padding: 10px 0px 20px 0px;
1424 1424 }
1425 1425
1426 1426 .group_members {
1427 1427 margin-top: 0;
1428 1428 padding: 0;
1429 1429 list-style: outside none none;
1430 1430
1431 1431 img {
1432 1432 height: @gravatar-size;
1433 1433 width: @gravatar-size;
1434 1434 margin-right: .5em;
1435 1435 margin-left: 3px;
1436 1436 }
1437 1437
1438 1438 .to-delete {
1439 1439 .user {
1440 1440 text-decoration: line-through;
1441 1441 }
1442 1442 }
1443 1443 }
1444 1444
1445 1445 .compare_view_commits_title {
1446 1446 .disabled {
1447 1447 cursor: inherit;
1448 1448 &:hover{
1449 1449 background-color: inherit;
1450 1450 color: inherit;
1451 1451 }
1452 1452 }
1453 1453 }
1454 1454
1455 1455 .subtitle-compare {
1456 1456 margin: -15px 0px 0px 0px;
1457 1457 }
1458 1458
1459 1459 .comments-summary-td {
1460 1460 border-top: 1px dashed @grey5;
1461 1461 }
1462 1462
1463 1463 // new entry in group_members
1464 1464 .td-author-new-entry {
1465 1465 background-color: rgba(red(@alert1), green(@alert1), blue(@alert1), 0.3);
1466 1466 }
1467 1467
1468 1468 .usergroup_member_remove {
1469 1469 width: 16px;
1470 1470 margin-bottom: 10px;
1471 1471 padding: 0;
1472 1472 color: black !important;
1473 1473 cursor: pointer;
1474 1474 }
1475 1475
1476 1476 .reviewer_ac .ac-input {
1477 1477 width: 92%;
1478 1478 margin-bottom: 1em;
1479 1479 }
1480 1480
1481 1481 .compare_view_commits tr{
1482 1482 height: 20px;
1483 1483 }
1484 1484 .compare_view_commits td {
1485 1485 vertical-align: top;
1486 1486 padding-top: 10px;
1487 1487 }
1488 1488 .compare_view_commits .author {
1489 1489 margin-left: 5px;
1490 1490 }
1491 1491
1492 1492 .compare_view_commits {
1493 1493 .color-a {
1494 1494 color: @alert1;
1495 1495 }
1496 1496
1497 1497 .color-c {
1498 1498 color: @color3;
1499 1499 }
1500 1500
1501 1501 .color-r {
1502 1502 color: @color5;
1503 1503 }
1504 1504
1505 1505 .color-a-bg {
1506 1506 background-color: @alert1;
1507 1507 }
1508 1508
1509 1509 .color-c-bg {
1510 1510 background-color: @alert3;
1511 1511 }
1512 1512
1513 1513 .color-r-bg {
1514 1514 background-color: @alert2;
1515 1515 }
1516 1516
1517 1517 .color-a-border {
1518 1518 border: 1px solid @alert1;
1519 1519 }
1520 1520
1521 1521 .color-c-border {
1522 1522 border: 1px solid @alert3;
1523 1523 }
1524 1524
1525 1525 .color-r-border {
1526 1526 border: 1px solid @alert2;
1527 1527 }
1528 1528
1529 1529 .commit-change-indicator {
1530 1530 width: 15px;
1531 1531 height: 15px;
1532 1532 position: relative;
1533 1533 left: 15px;
1534 1534 }
1535 1535
1536 1536 .commit-change-content {
1537 1537 text-align: center;
1538 1538 vertical-align: middle;
1539 1539 line-height: 15px;
1540 1540 }
1541 1541 }
1542 1542
1543 1543 .compare_view_filepath {
1544 1544 color: @grey1;
1545 1545 }
1546 1546
1547 1547 .show_more {
1548 1548 display: inline-block;
1549 1549 width: 0;
1550 1550 height: 0;
1551 1551 vertical-align: middle;
1552 1552 content: "";
1553 1553 border: 4px solid;
1554 1554 border-right-color: transparent;
1555 1555 border-bottom-color: transparent;
1556 1556 border-left-color: transparent;
1557 1557 font-size: 0;
1558 1558 }
1559 1559
1560 1560 .journal_more .show_more {
1561 1561 display: inline;
1562 1562
1563 1563 &:after {
1564 1564 content: none;
1565 1565 }
1566 1566 }
1567 1567
1568 1568 .compare_view_commits .collapse_commit:after {
1569 1569 cursor: pointer;
1570 1570 content: "\00A0\25B4";
1571 1571 margin-left: -3px;
1572 1572 font-size: 17px;
1573 1573 color: @grey4;
1574 1574 }
1575 1575
1576 1576 .diff_links {
1577 1577 margin-left: 8px;
1578 1578 }
1579 1579
1580 1580 div.ancestor {
1581 1581 margin: -30px 0px;
1582 1582 }
1583 1583
1584 1584 .cs_icon_td input[type="checkbox"] {
1585 1585 display: none;
1586 1586 }
1587 1587
1588 1588 .cs_icon_td .expand_file_icon:after {
1589 1589 cursor: pointer;
1590 1590 content: "\00A0\25B6";
1591 1591 font-size: 12px;
1592 1592 color: @grey4;
1593 1593 }
1594 1594
1595 1595 .cs_icon_td .collapse_file_icon:after {
1596 1596 cursor: pointer;
1597 1597 content: "\00A0\25BC";
1598 1598 font-size: 12px;
1599 1599 color: @grey4;
1600 1600 }
1601 1601
1602 1602 /*new binary
1603 1603 NEW_FILENODE = 1
1604 1604 DEL_FILENODE = 2
1605 1605 MOD_FILENODE = 3
1606 1606 RENAMED_FILENODE = 4
1607 1607 COPIED_FILENODE = 5
1608 1608 CHMOD_FILENODE = 6
1609 1609 BIN_FILENODE = 7
1610 1610 */
1611 1611 .cs_files_expand {
1612 1612 font-size: @basefontsize + 5px;
1613 1613 line-height: 1.8em;
1614 1614 float: right;
1615 1615 }
1616 1616
1617 1617 .cs_files_expand span{
1618 1618 color: @rcblue;
1619 1619 cursor: pointer;
1620 1620 }
1621 1621 .cs_files {
1622 1622 clear: both;
1623 1623 padding-bottom: @padding;
1624 1624
1625 1625 .cur_cs {
1626 1626 margin: 10px 2px;
1627 1627 font-weight: bold;
1628 1628 }
1629 1629
1630 1630 .node {
1631 1631 float: left;
1632 1632 }
1633 1633
1634 1634 .changes {
1635 1635 float: right;
1636 1636 color: white;
1637 1637 font-size: @basefontsize - 4px;
1638 1638 margin-top: 4px;
1639 1639 opacity: 0.6;
1640 1640 filter: Alpha(opacity=60); /* IE8 and earlier */
1641 1641
1642 1642 .added {
1643 1643 background-color: @alert1;
1644 1644 float: left;
1645 1645 text-align: center;
1646 1646 }
1647 1647
1648 1648 .deleted {
1649 1649 background-color: @alert2;
1650 1650 float: left;
1651 1651 text-align: center;
1652 1652 }
1653 1653
1654 1654 .bin {
1655 1655 background-color: @alert1;
1656 1656 text-align: center;
1657 1657 }
1658 1658
1659 1659 /*new binary*/
1660 1660 .bin.bin1 {
1661 1661 background-color: @alert1;
1662 1662 text-align: center;
1663 1663 }
1664 1664
1665 1665 /*deleted binary*/
1666 1666 .bin.bin2 {
1667 1667 background-color: @alert2;
1668 1668 text-align: center;
1669 1669 }
1670 1670
1671 1671 /*mod binary*/
1672 1672 .bin.bin3 {
1673 1673 background-color: @grey2;
1674 1674 text-align: center;
1675 1675 }
1676 1676
1677 1677 /*rename file*/
1678 1678 .bin.bin4 {
1679 1679 background-color: @alert4;
1680 1680 text-align: center;
1681 1681 }
1682 1682
1683 1683 /*copied file*/
1684 1684 .bin.bin5 {
1685 1685 background-color: @alert4;
1686 1686 text-align: center;
1687 1687 }
1688 1688
1689 1689 /*chmod file*/
1690 1690 .bin.bin6 {
1691 1691 background-color: @grey2;
1692 1692 text-align: center;
1693 1693 }
1694 1694 }
1695 1695 }
1696 1696
1697 1697 .cs_files .cs_added, .cs_files .cs_A,
1698 1698 .cs_files .cs_added, .cs_files .cs_M,
1699 1699 .cs_files .cs_added, .cs_files .cs_D {
1700 1700 height: 16px;
1701 1701 padding-right: 10px;
1702 1702 margin-top: 7px;
1703 1703 text-align: left;
1704 1704 }
1705 1705
1706 1706 .cs_icon_td {
1707 1707 min-width: 16px;
1708 1708 width: 16px;
1709 1709 }
1710 1710
1711 1711 .pull-request-merge {
1712 1712 border: 1px solid @grey5;
1713 1713 padding: 10px 0px 20px;
1714 1714 margin-top: 10px;
1715 1715 margin-bottom: 20px;
1716 1716 }
1717 1717
1718 1718 .pull-request-merge ul {
1719 1719 padding: 0px 0px;
1720 1720 }
1721 1721
1722 1722 .pull-request-merge li {
1723 1723 list-style-type: none;
1724 1724 }
1725 1725
1726 1726 .pull-request-merge .pull-request-wrap {
1727 1727 height: auto;
1728 1728 padding: 0px 0px;
1729 1729 text-align: right;
1730 1730 }
1731 1731
1732 1732 .pull-request-merge span {
1733 1733 margin-right: 5px;
1734 1734 }
1735 1735
1736 1736 .pull-request-merge-actions {
1737 1737 min-height: 30px;
1738 1738 padding: 0px 0px;
1739 1739 }
1740 1740
1741 1741 .pull-request-merge-info {
1742 1742 padding: 0px 5px 5px 0px;
1743 1743 }
1744 1744
1745 1745 .merge-status {
1746 1746 margin-right: 5px;
1747 1747 }
1748 1748
1749 1749 .merge-message {
1750 1750 font-size: 1.2em
1751 1751 }
1752 1752
1753 1753 .merge-message.success i,
1754 1754 .merge-icon.success i {
1755 1755 color:@alert1;
1756 1756 }
1757 1757
1758 1758 .merge-message.warning i,
1759 1759 .merge-icon.warning i {
1760 1760 color: @alert3;
1761 1761 }
1762 1762
1763 1763 .merge-message.error i,
1764 1764 .merge-icon.error i {
1765 1765 color:@alert2;
1766 1766 }
1767 1767
1768 1768 .pr-versions {
1769 1769 font-size: 1.1em;
1770 1770
1771 1771 table {
1772 1772 padding: 0px 5px;
1773 1773 }
1774 1774
1775 1775 td {
1776 1776 line-height: 15px;
1777 1777 }
1778 1778
1779 1779 .flag_status {
1780 1780 margin: 0;
1781 1781 }
1782 1782
1783 1783 .compare-radio-button {
1784 1784 position: relative;
1785 1785 top: -3px;
1786 1786 }
1787 1787 }
1788 1788
1789 1789
1790 1790 #close_pull_request {
1791 1791 margin-right: 0px;
1792 1792 }
1793 1793
1794 1794 .empty_data {
1795 1795 color: @grey4;
1796 1796 }
1797 1797
1798 1798 #changeset_compare_view_content {
1799 1799 margin-bottom: @space;
1800 1800 clear: both;
1801 1801 width: 100%;
1802 1802 box-sizing: border-box;
1803 1803 .border-radius(@border-radius);
1804 1804
1805 1805 .help-block {
1806 1806 margin: @padding 0;
1807 1807 color: @text-color;
1808 1808 &.pre-formatting {
1809 1809 white-space: pre;
1810 1810 }
1811 1811 }
1812 1812
1813 1813 .empty_data {
1814 1814 margin: @padding 0;
1815 1815 }
1816 1816
1817 1817 .alert {
1818 1818 margin-bottom: @space;
1819 1819 }
1820 1820 }
1821 1821
1822 1822 .table_disp {
1823 1823 .status {
1824 1824 width: auto;
1825 1825
1826 1826 .flag_status {
1827 1827 float: left;
1828 1828 }
1829 1829 }
1830 1830 }
1831 1831
1832 1832
1833 1833 .creation_in_progress {
1834 1834 color: @grey4
1835 1835 }
1836 1836
1837 1837 .status_box_menu {
1838 1838 margin: 0;
1839 1839 }
1840 1840
1841 1841 .notification-table{
1842 1842 margin-bottom: @space;
1843 1843 display: table;
1844 1844 width: 100%;
1845 1845
1846 1846 .container{
1847 1847 display: table-row;
1848 1848
1849 1849 .notification-header{
1850 1850 border-bottom: @border-thickness solid @border-default-color;
1851 1851 }
1852 1852
1853 1853 .notification-subject{
1854 1854 display: table-cell;
1855 1855 }
1856 1856 }
1857 1857 }
1858 1858
1859 1859 // Notifications
1860 1860 .notification-header{
1861 1861 display: table;
1862 1862 width: 100%;
1863 1863 padding: floor(@basefontsize/2) 0;
1864 1864 line-height: 1em;
1865 1865
1866 1866 .desc, .delete-notifications, .read-notifications{
1867 1867 display: table-cell;
1868 1868 text-align: left;
1869 1869 }
1870 1870
1871 1871 .desc{
1872 1872 width: 1163px;
1873 1873 }
1874 1874
1875 1875 .delete-notifications, .read-notifications{
1876 1876 width: 35px;
1877 1877 min-width: 35px; //fixes when only one button is displayed
1878 1878 }
1879 1879 }
1880 1880
1881 1881 .notification-body {
1882 1882 .markdown-block,
1883 1883 .rst-block {
1884 1884 padding: @padding 0;
1885 1885 }
1886 1886
1887 1887 .notification-subject {
1888 1888 padding: @textmargin 0;
1889 1889 border-bottom: @border-thickness solid @border-default-color;
1890 1890 }
1891 1891 }
1892 1892
1893 1893
1894 1894 .notifications_buttons{
1895 1895 float: right;
1896 1896 }
1897 1897
1898 1898 #notification-status{
1899 1899 display: inline;
1900 1900 }
1901 1901
1902 1902 // Repositories
1903 1903
1904 1904 #summary.fields{
1905 1905 display: table;
1906 1906
1907 1907 .field{
1908 1908 display: table-row;
1909 1909
1910 1910 .label-summary{
1911 1911 display: table-cell;
1912 1912 min-width: @label-summary-minwidth;
1913 1913 padding-top: @padding/2;
1914 1914 padding-bottom: @padding/2;
1915 1915 padding-right: @padding/2;
1916 1916 }
1917 1917
1918 1918 .input{
1919 1919 display: table-cell;
1920 1920 padding: @padding/2;
1921 1921
1922 1922 input{
1923 1923 min-width: 29em;
1924 1924 padding: @padding/4;
1925 1925 }
1926 1926 }
1927 1927 .statistics, .downloads{
1928 1928 .disabled{
1929 1929 color: @grey4;
1930 1930 }
1931 1931 }
1932 1932 }
1933 1933 }
1934 1934
1935 1935 #summary{
1936 1936 width: 70%;
1937 1937 }
1938 1938
1939 1939
1940 1940 // Journal
1941 1941 .journal.title {
1942 1942 h5 {
1943 1943 float: left;
1944 1944 margin: 0;
1945 1945 width: 70%;
1946 1946 }
1947 1947
1948 1948 ul {
1949 1949 float: right;
1950 1950 display: inline-block;
1951 1951 margin: 0;
1952 1952 width: 30%;
1953 1953 text-align: right;
1954 1954
1955 1955 li {
1956 1956 display: inline;
1957 1957 font-size: @journal-fontsize;
1958 1958 line-height: 1em;
1959 1959
1960 1960 list-style-type: none;
1961 1961 }
1962 1962 }
1963 1963 }
1964 1964
1965 1965 .filterexample {
1966 1966 position: absolute;
1967 1967 top: 95px;
1968 1968 left: @contentpadding;
1969 1969 color: @rcblue;
1970 1970 font-size: 11px;
1971 1971 font-family: @text-regular;
1972 1972 cursor: help;
1973 1973
1974 1974 &:hover {
1975 1975 color: @rcdarkblue;
1976 1976 }
1977 1977
1978 1978 @media (max-width:768px) {
1979 1979 position: relative;
1980 1980 top: auto;
1981 1981 left: auto;
1982 1982 display: block;
1983 1983 }
1984 1984 }
1985 1985
1986 1986
1987 1987 #journal{
1988 1988 margin-bottom: @space;
1989 1989
1990 1990 .journal_day{
1991 1991 margin-bottom: @textmargin/2;
1992 1992 padding-bottom: @textmargin/2;
1993 1993 font-size: @journal-fontsize;
1994 1994 border-bottom: @border-thickness solid @border-default-color;
1995 1995 }
1996 1996
1997 1997 .journal_container{
1998 1998 margin-bottom: @space;
1999 1999
2000 2000 .journal_user{
2001 2001 display: inline-block;
2002 2002 }
2003 2003 .journal_action_container{
2004 2004 display: block;
2005 2005 margin-top: @textmargin;
2006 2006
2007 2007 div{
2008 2008 display: inline;
2009 2009 }
2010 2010
2011 2011 div.journal_action_params{
2012 2012 display: block;
2013 2013 }
2014 2014
2015 2015 div.journal_repo:after{
2016 2016 content: "\A";
2017 2017 white-space: pre;
2018 2018 }
2019 2019
2020 2020 div.date{
2021 2021 display: block;
2022 2022 margin-bottom: @textmargin;
2023 2023 }
2024 2024 }
2025 2025 }
2026 2026 }
2027 2027
2028 2028 // Files
2029 2029 .edit-file-title {
2030 2030 border-bottom: @border-thickness solid @border-default-color;
2031 2031
2032 2032 .breadcrumbs {
2033 2033 margin-bottom: 0;
2034 2034 }
2035 2035 }
2036 2036
2037 2037 .edit-file-fieldset {
2038 2038 margin-top: @sidebarpadding;
2039 2039
2040 2040 .fieldset {
2041 2041 .left-label {
2042 2042 width: 13%;
2043 2043 }
2044 2044 .right-content {
2045 2045 width: 87%;
2046 2046 max-width: 100%;
2047 2047 }
2048 2048 .filename-label {
2049 2049 margin-top: 13px;
2050 2050 }
2051 2051 .commit-message-label {
2052 2052 margin-top: 4px;
2053 2053 }
2054 2054 .file-upload-input {
2055 2055 input {
2056 2056 display: none;
2057 2057 }
2058 2058 margin-top: 10px;
2059 2059 }
2060 2060 .file-upload-label {
2061 2061 margin-top: 10px;
2062 2062 }
2063 2063 p {
2064 2064 margin-top: 5px;
2065 2065 }
2066 2066
2067 2067 }
2068 2068 .custom-path-link {
2069 2069 margin-left: 5px;
2070 2070 }
2071 2071 #commit {
2072 2072 resize: vertical;
2073 2073 }
2074 2074 }
2075 2075
2076 2076 .delete-file-preview {
2077 2077 max-height: 250px;
2078 2078 }
2079 2079
2080 2080 .new-file,
2081 2081 #filter_activate,
2082 2082 #filter_deactivate {
2083 2083 float: left;
2084 2084 margin: 0 0 0 15px;
2085 2085 }
2086 2086
2087 2087 h3.files_location{
2088 2088 line-height: 2.4em;
2089 2089 }
2090 2090
2091 2091 .browser-nav {
2092 2092 display: table;
2093 2093 margin-bottom: @space;
2094 2094
2095 2095
2096 2096 .info_box {
2097 2097 display: inline-table;
2098 2098 height: 2.5em;
2099 2099
2100 2100 .browser-cur-rev, .info_box_elem {
2101 2101 display: table-cell;
2102 2102 vertical-align: middle;
2103 2103 }
2104 2104
2105 2105 .info_box_elem {
2106 2106 border-top: @border-thickness solid @rcblue;
2107 2107 border-bottom: @border-thickness solid @rcblue;
2108 2108
2109 2109 #at_rev, a {
2110 2110 padding: 0.6em 0.9em;
2111 2111 margin: 0;
2112 2112 .box-shadow(none);
2113 2113 border: 0;
2114 2114 height: 12px;
2115 2115 }
2116 2116
2117 2117 input#at_rev {
2118 2118 max-width: 50px;
2119 2119 text-align: right;
2120 2120 }
2121 2121
2122 2122 &.previous {
2123 2123 border: @border-thickness solid @rcblue;
2124 2124 .disabled {
2125 2125 color: @grey4;
2126 2126 cursor: not-allowed;
2127 2127 }
2128 2128 }
2129 2129
2130 2130 &.next {
2131 2131 border: @border-thickness solid @rcblue;
2132 2132 .disabled {
2133 2133 color: @grey4;
2134 2134 cursor: not-allowed;
2135 2135 }
2136 2136 }
2137 2137 }
2138 2138
2139 2139 .browser-cur-rev {
2140 2140
2141 2141 span{
2142 2142 margin: 0;
2143 2143 color: @rcblue;
2144 2144 height: 12px;
2145 2145 display: inline-block;
2146 2146 padding: 0.7em 1em ;
2147 2147 border: @border-thickness solid @rcblue;
2148 2148 margin-right: @padding;
2149 2149 }
2150 2150 }
2151 2151 }
2152 2152
2153 2153 .search_activate {
2154 2154 display: table-cell;
2155 2155 vertical-align: middle;
2156 2156
2157 2157 input, label{
2158 2158 margin: 0;
2159 2159 padding: 0;
2160 2160 }
2161 2161
2162 2162 input{
2163 2163 margin-left: @textmargin;
2164 2164 }
2165 2165
2166 2166 }
2167 2167 }
2168 2168
2169 2169 .browser-cur-rev{
2170 2170 margin-bottom: @textmargin;
2171 2171 }
2172 2172
2173 2173 #node_filter_box_loading{
2174 2174 .info_text;
2175 2175 }
2176 2176
2177 2177 .browser-search {
2178 2178 margin: -25px 0px 5px 0px;
2179 2179 }
2180 2180
2181 2181 .node-filter {
2182 2182 font-size: @repo-title-fontsize;
2183 2183 padding: 4px 0px 0px 0px;
2184 2184
2185 2185 .node-filter-path {
2186 2186 float: left;
2187 2187 color: @grey4;
2188 2188 }
2189 2189 .node-filter-input {
2190 2190 float: left;
2191 2191 margin: -2px 0px 0px 2px;
2192 2192 input {
2193 2193 padding: 2px;
2194 2194 border: none;
2195 2195 font-size: @repo-title-fontsize;
2196 2196 }
2197 2197 }
2198 2198 }
2199 2199
2200 2200
2201 2201 .browser-result{
2202 2202 td a{
2203 2203 margin-left: 0.5em;
2204 2204 display: inline-block;
2205 2205
2206 2206 em {
2207 2207 font-weight: @text-bold-weight;
2208 2208 font-family: @text-bold;
2209 2209 }
2210 2210 }
2211 2211 }
2212 2212
2213 2213 .browser-highlight{
2214 2214 background-color: @grey5-alpha;
2215 2215 }
2216 2216
2217 2217
2218 2218 // Search
2219 2219
2220 2220 .search-form{
2221 2221 #q {
2222 2222 width: @search-form-width;
2223 2223 }
2224 2224 .fields{
2225 2225 margin: 0 0 @space;
2226 2226 }
2227 2227
2228 2228 label{
2229 2229 display: inline-block;
2230 2230 margin-right: @textmargin;
2231 2231 padding-top: 0.25em;
2232 2232 }
2233 2233
2234 2234
2235 2235 .results{
2236 2236 clear: both;
2237 2237 margin: 0 0 @padding;
2238 2238 }
2239 2239
2240 2240 .search-tags {
2241 2241 padding: 5px 0;
2242 2242 }
2243 2243 }
2244 2244
2245 2245 div.search-feedback-items {
2246 2246 display: inline-block;
2247 2247 }
2248 2248
2249 2249 div.search-code-body {
2250 2250 background-color: #ffffff; padding: 5px 0 5px 10px;
2251 2251 pre {
2252 2252 .match { background-color: #faffa6;}
2253 2253 .break { display: block; width: 100%; background-color: #DDE7EF; color: #747474; }
2254 2254 }
2255 2255 }
2256 2256
2257 2257 .expand_commit.search {
2258 2258 .show_more.open {
2259 2259 height: auto;
2260 2260 max-height: none;
2261 2261 }
2262 2262 }
2263 2263
2264 2264 .search-results {
2265 2265
2266 2266 h2 {
2267 2267 margin-bottom: 0;
2268 2268 }
2269 2269 .codeblock {
2270 2270 border: none;
2271 2271 background: transparent;
2272 2272 }
2273 2273
2274 2274 .codeblock-header {
2275 2275 border: none;
2276 2276 background: transparent;
2277 2277 }
2278 2278
2279 2279 .code-body {
2280 2280 border: @border-thickness solid @border-default-color;
2281 2281 .border-radius(@border-radius);
2282 2282 }
2283 2283
2284 2284 .td-commit {
2285 2285 &:extend(pre);
2286 2286 border-bottom: @border-thickness solid @border-default-color;
2287 2287 }
2288 2288
2289 2289 .message {
2290 2290 height: auto;
2291 2291 max-width: 350px;
2292 2292 white-space: normal;
2293 2293 text-overflow: initial;
2294 2294 overflow: visible;
2295 2295
2296 2296 .match { background-color: #faffa6;}
2297 2297 .break { background-color: #DDE7EF; width: 100%; color: #747474; display: block; }
2298 2298 }
2299 2299
2300 2300 }
2301 2301
2302 2302 table.rctable td.td-search-results div {
2303 2303 max-width: 100%;
2304 2304 }
2305 2305
2306 2306 #tip-box, .tip-box{
2307 2307 padding: @menupadding/2;
2308 2308 display: block;
2309 2309 border: @border-thickness solid @border-highlight-color;
2310 2310 .border-radius(@border-radius);
2311 2311 background-color: white;
2312 2312 z-index: 99;
2313 2313 white-space: pre-wrap;
2314 2314 }
2315 2315
2316 2316 #linktt {
2317 2317 width: 79px;
2318 2318 }
2319 2319
2320 2320 #help_kb .modal-content{
2321 2321 max-width: 750px;
2322 2322 margin: 10% auto;
2323 2323
2324 2324 table{
2325 2325 td,th{
2326 2326 border-bottom: none;
2327 2327 line-height: 2.5em;
2328 2328 }
2329 2329 th{
2330 2330 padding-bottom: @textmargin/2;
2331 2331 }
2332 2332 td.keys{
2333 2333 text-align: center;
2334 2334 }
2335 2335 }
2336 2336
2337 2337 .block-left{
2338 2338 width: 45%;
2339 2339 margin-right: 5%;
2340 2340 }
2341 2341 .modal-footer{
2342 2342 clear: both;
2343 2343 }
2344 2344 .key.tag{
2345 2345 padding: 0.5em;
2346 2346 background-color: @rcblue;
2347 2347 color: white;
2348 2348 border-color: @rcblue;
2349 2349 .box-shadow(none);
2350 2350 }
2351 2351 }
2352 2352
2353 2353
2354 2354
2355 2355 //--- IMPORTS FOR REFACTORED STYLES ------------------//
2356 2356
2357 2357 @import 'statistics-graph';
2358 2358 @import 'tables';
2359 2359 @import 'forms';
2360 2360 @import 'diff';
2361 2361 @import 'summary';
2362 2362 @import 'navigation';
2363 2363
2364 2364 //--- SHOW/HIDE SECTIONS --//
2365 2365
2366 2366 .btn-collapse {
2367 2367 float: right;
2368 2368 text-align: right;
2369 2369 font-family: @text-light;
2370 2370 font-size: @basefontsize;
2371 2371 cursor: pointer;
2372 2372 border: none;
2373 2373 color: @rcblue;
2374 2374 }
2375 2375
2376 2376 table.rctable,
2377 2377 table.dataTable {
2378 2378 .btn-collapse {
2379 2379 float: right;
2380 2380 text-align: right;
2381 2381 }
2382 2382 }
2383 2383
2384 2384 table.rctable {
2385 2385 &.permissions {
2386 2386
2387 2387 th.td-owner {
2388 2388 padding: 0;
2389 2389 }
2390 2390
2391 2391 th {
2392 2392 font-weight: normal;
2393 2393 padding: 0 5px;
2394 2394 }
2395 2395
2396 2396 }
2397 2397 }
2398 2398
2399 2399
2400 2400 // TODO: johbo: Fix for IE10, this avoids that we see a border
2401 2401 // and padding around checkboxes and radio boxes. Move to the right place,
2402 2402 // or better: Remove this once we did the form refactoring.
2403 2403 input[type=checkbox],
2404 2404 input[type=radio] {
2405 2405 padding: 0;
2406 2406 border: none;
2407 2407 }
2408 2408
2409 2409 .toggle-ajax-spinner{
2410 2410 height: 16px;
2411 2411 width: 16px;
2412 2412 }
2413 2413
2414 2414
2415 2415 .markup-form .clearfix {
2416 2416 .border-radius(@border-radius);
2417 2417 margin: 0px;
2418 2418 }
2419 2419
2420 2420 .markup-form-area {
2421 2421 padding: 8px 12px;
2422 2422 border: 1px solid @grey4;
2423 2423 .border-radius(@border-radius);
2424 2424 }
2425 2425
2426 2426 .markup-form-area-header .nav-links {
2427 2427 display: flex;
2428 2428 flex-flow: row wrap;
2429 2429 -webkit-flex-flow: row wrap;
2430 2430 width: 100%;
2431 2431 }
2432 2432
2433 2433 .markup-form-area-footer {
2434 2434 display: flex;
2435 2435 }
2436 2436
2437 2437 .markup-form-area-footer .toolbar {
2438 2438
2439 2439 }
2440 2440
2441 2441 // markup Form
2442 2442 div.markup-form {
2443 2443 margin-top: 20px;
2444 2444 }
2445 2445
2446 2446 .markup-form strong {
2447 2447 display: block;
2448 2448 margin-bottom: 15px;
2449 2449 }
2450 2450
2451 2451 .markup-form textarea {
2452 2452 width: 100%;
2453 2453 height: 100px;
2454 2454 font-family: @text-monospace;
2455 2455 }
2456 2456
2457 2457 form.markup-form {
2458 2458 margin-top: 10px;
2459 2459 margin-left: 10px;
2460 2460 }
2461 2461
2462 2462 .markup-form .comment-block-ta,
2463 2463 .markup-form .preview-box {
2464 2464 .border-radius(@border-radius);
2465 2465 .box-sizing(border-box);
2466 2466 background-color: white;
2467 2467 }
2468 2468
2469 2469 .markup-form .preview-box.unloaded {
2470 2470 height: 50px;
2471 2471 text-align: center;
2472 2472 padding: 20px;
2473 2473 background-color: white;
2474 2474 }
@@ -1,698 +1,708 b''
1 1 // navigation.less
2 2 // For use in RhodeCode applications;
3 3 // see style guide documentation for guidelines.
4 4
5 // TOP MAIN DARK NAVIGATION
6
7 .header .main_nav.horizontal-list {
8 float: right;
9 color: @grey4;
10 > li {
11 a {
12 color: @grey4;
13 }
14 }
15 }
16
5 17 // HEADER NAVIGATION
6 18
7 19 .horizontal-list {
8 float: right;
9 20 display: block;
10 21 margin: 0;
11 22 padding: 0;
12 23 -webkit-padding-start: 0;
13 24 text-align: left;
14 25 font-size: @navigation-fontsize;
15 26 color: @grey6;
16 27 z-index:10;
17 28
18 29 li {
19 30 line-height: 1em;
20 31 list-style-type: none;
32 margin: 0 20px 0 0;
21 33
22 34 a {
23 35 padding: 0 .5em;
24 36
25 37 &.menu_link_notifications {
26 38 .pill(7px,@rcblue);
27 39 display: inline;
28 40 margin: 0 7px 0 .7em;
29 41 font-size: @basefontsize;
30 42 color: white;
31 43
32 44 &.empty {
33 45 background-color: @grey4;
34 46 }
35 47
36 48 &:hover {
37 49 background-color: @rcdarkblue;
38 50 }
39 51 }
40 52 }
41 53 .pill_container {
42 54 margin: 1.25em 0px 0px 0px;
43 55 float: right;
44 56 }
45 57
46 58 &#quick_login_li {
47 59 &:hover {
48 60 color: @grey5;
49 61 }
50 62
51 63 a.menu_link_notifications {
52 64 color: white;
53 65 }
54 66
55 67 .user {
56 68 padding-bottom: 10px;
57 69 }
58 70
59 71 &.open {
60 72 .user {
61 73 border-bottom: 5px solid @rcblue;
62 74 }
63 75 }
64 76 }
65 77
66 78 &:before { content: none; }
67 79
68 80 &:last-child {
69 81 .menulabel {
70 82 padding-right: 0;
71 83 border-right: none;
72 84
73 85 .show_more {
74 86 padding-right: 0;
75 87 }
76 88 }
77 89
78 90 &> a {
79 91 border-bottom: none;
80 92 }
81 93 }
82 94
83 &.active {
84 border-bottom: 5px solid @rcblue;
85 }
86
87 95 &.open {
88 96
89 97 a {
90 98 color: white;
91 99 }
92 100 }
93 101
94 102 &:focus {
95 103 outline: none;
96 104 }
97 105
98 106 ul li {
99 107 display: block;
100 108
101 109 &:last-child> a {
102 110 border-bottom: none;
103 111 }
104 112
105 113 ul li:last-child a {
106 114 /* we don't expect more then 3 levels of submenu and the third
107 115 level can have different html structure */
108 116 border-bottom: none;
109 117 }
110 118 }
111 119 }
112 120
113 121 > li {
114 122 float: left;
115 123 display: block;
116 124 padding: 0;
117 125
118 126 > a,
119 127 &.has_select2 a {
120 128 display: block;
121 padding: 10px 0 2px;
129 padding: 10px 0;
122 130 }
123 131
124 132 .menulabel {
125 padding: 0 .5em;
133 padding: 0 0 0.4em 0;
126 134 line-height: 1em;
127 135 // for this specifically we do not use a variable
128 border-right: 1px solid @grey4;
129 136 }
130 137
131 138 .pr_notifications {
132 139 padding-left: .5em;
133 140 }
134 141
135 142 .pr_notifications + .menulabel {
136 143 display:inline;
137 144 padding-left: 0;
138 145 }
139 146
140 147 &:hover,
141 148 &.open,
142 149 &.active {
143 150 a {
144 color: @grey1;
151 color: @rcblue;
145 152 }
146 153 }
147 154 }
148 155
149 156 pre {
150 157 margin: 0;
151 158 padding: 0;
152 159 }
153 160
154 161 .select2-container,
155 162 .menulink.childs {
156 163 position: relative;
157 164 }
158 165
159 166 #quick_login {
160 167
161 168 li a {
162 169 padding: .5em 0;
163 170 border-bottom: none;
164 171 color: @grey2;
165 172
166 173 &:hover { color: @grey1; }
167 174 }
168 175 }
169 176
170 177 #quick_login_link {
171 178 display: inline-block;
172 179
173 180 .gravatar {
174 181 border: 1px solid @grey5;
175 182 }
176 183
177 184 .gravatar-login {
178 185 height: 20px;
179 186 width: 20px;
180 187 margin: -8px 0;
181 188 padding: 0;
182 189 }
183 190
184 191 &:hover .user {
185 192 color: @grey6;
186 193 }
187 194 }
188 195 }
189 196 .header .horizontal-list {
190 197
191 198 li {
192 199
193 200 &#quick_login_li {
194 201 padding-left: .5em;
195 202
196 203 &:hover #quick_login_link {
197 204 color: inherit;
198 205 }
199 206
200 207 .menu_link_user {
201 208 padding: 0 2px;
202 209 }
203 210 }
204 211 list-style-type: none;
205 212 }
206 213
207 214 > li {
208 215
209 216 a {
210 217 padding: 18px 0 12px 0;
211 218 color: @nav-grey;
212 219
213 220 &.menu_link_notifications {
214 221 padding: 1px 8px;
215 222 }
216 223 }
217 224
218 225 &:hover,
219 226 &.open,
220 227 &.active {
221 228 .pill_container a {
222 229 // don't select text for the pill container, it has it' own
223 230 // hover behaviour
224 231 color: @nav-grey;
225 232 }
226 233 }
227 234
228 235 &:hover,
229 236 &.open,
230 237 &.active {
231 238 a {
232 239 color: @grey6;
233 240 }
234 241 }
235 242
236 243 .select2-dropdown-open a {
237 244 color: @grey6;
238 245 }
239 246
240 247 .repo-switcher {
241 248 padding-left: 0;
242 249
243 250 .menulabel {
244 251 padding-left: 0;
245 252 }
246 253 }
247 254 }
248 255
249 256 li ul li {
250 257 background-color:@grey2;
251 258
252 259 a {
253 260 padding: .5em 0;
254 261 border-bottom: @border-thickness solid @border-default-color;
255 262 color: @grey6;
256 263 }
257 264
258 265 &:last-child a, &.last a{
259 266 border-bottom: none;
260 267 }
261 268
262 269 &:hover {
263 270 background-color: @grey3;
264 271 }
265 272 }
266 273
267 274 .submenu {
268 275 margin-top: 5px;
269 276 }
270 277 }
271 278
272 279 // SUBMENUS
273 280 .navigation .submenu {
274 281 display: none;
275 282 }
276 283
277 284 .navigation li.open {
278 285 .submenu {
279 286 display: block;
280 287 }
281 288 }
282 289
283 290 .navigation li:last-child .submenu {
284 291 right: -20px;
285 292 left: auto;
286 293 }
287 294
288 295 .submenu {
289 296 position: absolute;
290 297 top: 100%;
291 298 left: 0;
292 299 min-width: 150px;
293 300 margin: 6px 0 0;
294 301 padding: 0;
295 302 text-align: left;
296 303 font-family: @text-light;
297 304 border-radius: @border-radius;
298 305 z-index: 20;
299 306
300 307 li {
301 308 display: block;
302 309 margin: 0;
303 310 padding: 0 .5em;
304 311 line-height: 1em;
305 312 color: @grey3;
306 313 background-color: @grey6;
307 314 list-style-type: none;
308 315
309 316 a {
310 317 display: block;
311 318 width: 100%;
312 319 padding: .5em 0;
313 320 border-right: none;
314 321 border-bottom: @border-thickness solid white;
315 322 color: @grey3;
316 323 }
317 324
318 325 ul {
319 326 display: none;
320 327 position: absolute;
321 328 top: 0;
322 329 right: 100%;
323 330 padding: 0;
324 331 z-index: 30;
325 332 }
326 333 &:hover {
327 334 background-color: @grey5;
328 335 -webkit-transition: background .3s;
329 336 -moz-transition: background .3s;
330 337 -o-transition: background .3s;
331 338 transition: background .3s;
332 339
333 340 ul {
334 341 display: block;
335 342 }
336 343 }
337 344 }
338 345
339 346 }
340 347
341 348
342 349
343 350
344 351 // repo dropdown
345 352 .quick_repo_menu {
346 353 width: 15px;
347 354 text-align: center;
348 355 position: relative;
349 356 cursor: pointer;
350 357
351 358 div {
352 359 overflow: visible !important;
353 360 }
354 361
355 362 &.sorting {
356 363 cursor: auto;
357 364 }
358 365
359 366 &:hover {
360 367 .menu_items_container {
361 368 position: absolute;
362 369 display: block;
363 370 }
364 371 .menu_items {
365 372 display: block;
366 373 }
367 374 }
368 375
369 376 i {
370 377 margin: 0;
371 378 color: @grey4;
372 379 }
373 380
374 381 .menu_items_container {
375 382 position: absolute;
376 383 top: 0;
377 384 left: 100%;
378 385 margin: 0;
379 386 padding: 0;
380 387 list-style: none;
381 388 background-color: @grey6;
382 389 z-index: 999;
383 390 text-align: left;
384 391
385 392 a {
386 393 color: @grey2;
387 394 }
388 395
389 396 ul.menu_items {
390 397 margin: 0;
391 398 padding: 0;
392 399 }
393 400
394 401 li {
395 402 margin: 0;
396 403 padding: 0;
397 404 line-height: 1em;
398 405 list-style-type: none;
399 406
400 407 a {
401 408 display: block;
402 409 height: 16px;
403 410 padding: 8px; //must add up to td height (28px)
404 411 width: 120px; // set width
405 412
406 413 &:hover {
407 414 background-color: @grey5;
408 415 -webkit-transition: background .3s;
409 416 -moz-transition: background .3s;
410 417 -o-transition: background .3s;
411 418 transition: background .3s;
412 419 }
413 420 }
414 421 }
415 422 }
416 423 }
417 424
418 425 // Header Repository Switcher
419 426 // Select2 Dropdown
420 427 #select2-drop.select2-drop.repo-switcher-dropdown {
421 428 width: auto !important;
422 429 margin-top: 5px;
423 430 padding: 1em 0;
424 431 text-align: left;
425 432 .border-radius-bottom(@border-radius);
426 433 border-color: transparent;
427 434 color: @grey6;
428 435 background-color: @grey2;
429 436
430 437 input {
431 438 min-width: 90%;
432 439 }
433 440
434 441 ul.select2-result-sub {
435 442
436 443 li {
437 444 line-height: 1em;
438 445
439 446 &:hover,
440 447 &.select2-highlighted {
441 448 background-color: @grey3;
442 449 }
443 450 }
444 451
445 452 &:before { content: none; }
446 453 }
447 454
448 455 ul.select2-results {
449 456 min-width: 200px;
450 457 margin: 0;
451 458 padding: 0;
452 459 list-style-type: none;
453 460 overflow-x: visible;
454 461 overflow-y: scroll;
455 462
456 463 li {
457 464 padding: 0 8px;
458 465 line-height: 1em;
459 466 color: @grey6;
460 467
461 468 &>.select2-result-label {
462 469 padding: 8px 0;
463 470 border-bottom: @border-thickness solid @grey3;
464 471 white-space: nowrap;
465 472 color: @grey5;
466 473 cursor: pointer;
467 474 }
468 475
469 476 &.select2-result-with-children {
470 477 margin: 0;
471 478 padding: 0;
472 479 }
473 480
474 481 &.select2-result-unselectable > .select2-result-label {
475 482 margin: 0 8px;
476 483 }
477 484
478 485 }
479 486 }
480 487
481 488 ul.select2-result-sub {
482 489 margin: 0;
483 490 padding: 0;
484 491
485 492 li {
486 493 display: block;
487 494 margin: 0;
488 495 border-right: none;
489 496 line-height: 1em;
490 497 font-family: @text-light;
491 498 color: @grey2;
492 499 list-style-type: none;
493 500
494 501 &:hover {
495 502 background-color: @grey3;
496 503 }
497 504 }
498 505 }
499 506 }
500 507
501 508
502 509 #context-bar {
503 510 display: block;
504 511 margin: 0 auto;
505 512 padding: 0 @header-padding;
506 background-color: @grey6;
507 border-bottom: @border-thickness solid @grey5;
513 background-color: @grey7;
508 514
509 515 .clear {
510 516 clear: both;
511 517 }
512 518 }
513 519
514 520 ul#context-pages {
515 521 li {
516 line-height: 1em;
522 line-height: 2em;
517 523 list-style-type: none;
518 524
519 525 a {
520 526 color: @grey3;
527
528 &:hover {
529 color: @grey2;
530 }
521 531 }
522 532
523 533 &.active {
524 534 // special case, non-variable color
525 border-bottom: 4px solid @nav-grey;
535 border-bottom: 2px solid @rcblue;
526 536
527 537 a {
528 color: @grey1;
538 color: @rcblue;
529 539 }
530 540 }
531 541 }
532 542 }
533 543
534 544 // PAGINATION
535 545
536 546 .pagination {
537 547 border: @border-thickness solid @rcblue;
538 548 color: @rcblue;
539 549
540 550 .current {
541 551 color: @grey4;
542 552 }
543 553 }
544 554
545 555 .dataTables_processing {
546 556 text-align: center;
547 557 font-size: 1.1em;
548 558 position: relative;
549 559 top: 95px;
550 560 }
551 561
552 562 .dataTables_paginate, .pagination-wh {
553 563 text-align: left;
554 564 display: inline-block;
555 565 border-left: 1px solid @rcblue;
556 566 float: none;
557 567 overflow: hidden;
558 568
559 569 .paginate_button, .pager_curpage,
560 570 .pager_link, .pg-previous, .pg-next, .pager_dotdot {
561 571 display: inline-block;
562 572 padding: @menupadding/4 @menupadding;
563 573 border: 1px solid @rcblue;
564 574 border-left: 0;
565 575 color: @rcblue;
566 576 cursor: pointer;
567 577 float: left;
568 578 }
569 579
570 580 .pager_curpage, .pager_dotdot,
571 581 .paginate_button.current, .paginate_button.disabled,
572 582 .disabled {
573 583 color: @grey3;
574 584 cursor: default;
575 585 }
576 586
577 587 .ellipsis {
578 588 display: inline-block;
579 589 text-align: left;
580 590 padding: @menupadding/4 @menupadding;
581 591 border: 1px solid @rcblue;
582 592 border-left: 0;
583 593 float: left;
584 594 }
585 595 }
586 596
587 597 // SIDEBAR
588 598
589 599 .sidebar {
590 600 .block-left;
591 601 clear: left;
592 602 max-width: @sidebar-width;
593 603 margin-right: @sidebarpadding;
594 604 padding-right: @sidebarpadding;
595 605 font-family: @text-regular;
596 606 color: @grey1;
597 607
598 608 &#graph_nodes {
599 609 clear:both;
600 610 width: auto;
601 611 margin-left: -100px;
602 612 padding: 0;
603 613 border: none;
604 614 }
605 615
606 616 .nav-pills {
607 617 margin: 0;
608 618 }
609 619
610 620 .nav {
611 621 list-style: none;
612 622 padding: 0;
613 623
614 624 li {
615 625 padding-bottom: @menupadding;
616 626 line-height: 1em;
617 627 color: @grey4;
618 628 list-style-type: none;
619 629
620 630 &.active a {
621 631 color: @grey2;
622 632 }
623 633
624 634 a {
625 635 color: @grey4;
626 636 }
627 637 }
628 638
629 639 }
630 640 }
631 641
632 642 .main_filter_help_box {
633 643 padding: 7px 7px;
634 border-top: 1px solid @grey4;
635 border-right: 1px solid @grey4;
636 border-bottom: 1px solid @grey4;
637 644 display: inline-block;
638 645 vertical-align: top;
639 646 background: inherit;
640 647 position: absolute;
641 right: 8px;
648 right: 0;
642 649 top: 9px;
643 650 }
644 651
645 652 .main_filter_input_box {
646 653 display: inline-block;
647 654 }
648 655
649 656 .main_filter_box {
650 657 margin: 9px 0 0 0;
651 658 }
652 659
653 660 #main_filter_help {
654 661 background: @grey3;
655 662 border: 1px solid black;
656 663 position: absolute;
657 664 white-space: pre;
658 665 z-index: 9999;
659 666 color: @nav-grey;
660 667 margin: 1px 7px;
661 668 padding: 0 10px;
662 669 }
663 670
664 .main_filter_input {
665 padding: 5px;
666 min-width: 260px;
667 color: @nav-grey;
668 background: @grey3;
669 min-height: 18px;
670
671 input {
671 672
672 &:active {
673 color: @grey2 !important;
674 background: white !important;
675 }
676 &:focus {
677 color: @grey2 !important;
678 background: white !important;
673 &.main_filter_input {
674 padding: 5px 10px;
675 min-width: 260px;
676 color: @grey7;
677 background: @black;
678 min-height: 18px;
679 border: 0;
680
681 &:active {
682 color: @grey2 !important;
683 background: white !important;
684 }
685 &:focus {
686 color: @grey2 !important;
687 background: white !important;
688 }
679 689 }
680 690 }
681 691
682 692
683 693
684 694 .main_filter_input::placeholder {
685 695 color: @nav-grey;
686 696 opacity: 1;
687 697 }
688 698
689 699 .notice-box {
690 700 display:block !important;
691 701 padding: 9px 0 !important;
692 702 }
693 703
694 704 .menulabel-notice {
695 705 border: 1px solid @color5;
696 706 padding:7px 10px;
697 707 color: @color5;
698 708 }
@@ -1,552 +1,552 b''
1 1 //
2 2 // Typography
3 3 // modified from Bootstrap
4 4 // --------------------------------------------------
5 5
6 6 // Base
7 7 body {
8 8 font-size: @basefontsize;
9 9 font-family: @text-light;
10 10 letter-spacing: .02em;
11 11 color: @grey2;
12 12 }
13 13
14 14 #content, label{
15 15 font-size: @basefontsize;
16 16 }
17 17
18 18 label {
19 19 color: @grey2;
20 20 }
21 21
22 22 ::selection { background: @rchighlightblue; }
23 23
24 24 // Headings
25 25 // -------------------------
26 26
27 27 h1, h2, h3, h4, h5, h6,
28 28 .h1, .h2, .h3, .h4, .h5, .h6 {
29 29 margin: 0 0 @textmargin 0;
30 30 padding: 0;
31 31 line-height: 1.8em;
32 32 color: @text-color;
33 33 a {
34 34 color: @rcblue;
35 35 }
36 36 }
37 37
38 38 h1, .h1 { font-size: 1.54em; font-weight: @text-bold-weight; font-family: @text-bold; }
39 39 h2, .h2 { font-size: 1.23em; font-weight: @text-semibold-weight; font-family: @text-semibold; }
40 40 h3, .h3 { font-size: 1.23em; font-family: @text-regular; }
41 41 h4, .h4 { font-size: 1em; font-weight: @text-bold-weight; font-family: @text-bold; }
42 42 h5, .h5 { font-size: 1em; font-weight: @text-bold-weight; font-family: @text-bold; }
43 43 h6, .h6 { font-size: 1em; font-weight: @text-bold-weight; font-family: @text-bold; }
44 44
45 45 // Breadcrumbs
46 46 .breadcrumbs {
47 47 font-size: @repo-title-fontsize;
48 48 margin: 0;
49 49 }
50 50
51 51 .breadcrumbs_light {
52 52 float:left;
53 53 font-size: 1.3em;
54 54 line-height: 38px;
55 55 }
56 56
57 57 // Body text
58 58 // -------------------------
59 59
60 60 p {
61 61 margin: 0 0 @textmargin 0;
62 62 padding: 0;
63 63 line-height: 2em;
64 64 }
65 65
66 66 .lead {
67 67 margin-bottom: @textmargin;
68 68 font-weight: 300;
69 69 line-height: 1.4;
70 70
71 71 @media (min-width: @screen-sm-min) {
72 72 font-size: (@basefontsize * 1.5);
73 73 }
74 74 }
75 75
76 76 a,
77 77 .link {
78 78 color: @rcblue;
79 79 text-decoration: none;
80 80 outline: none;
81 81 cursor: pointer;
82 82
83 83 &:focus {
84 84 outline: none;
85 85 }
86 86
87 87 &:hover {
88 88 color: @rcdarkblue;
89 89 }
90 90 }
91 91
92 92 img {
93 93 border: none;
94 94 outline: none;
95 95 }
96 96
97 97 strong {
98 98 font-weight: @text-bold-weight;
99 99 font-family: @text-bold;
100 100 }
101 101
102 102 em {
103 103 font-family: @text-italic;
104 104 font-style: italic;
105 105 }
106 106
107 107 strong em,
108 108 em strong {
109 109 font-style: italic;
110 110 font-weight: @text-bold-italic-weight;
111 111 font-family: @text-bold-italic;
112 112 }
113 113
114 114 //TODO: lisa: b and i are depreciated, but we are still using them in places.
115 115 // Should probably make some decision whether to keep or lose these.
116 116 b {
117 117
118 118 }
119 119
120 120 i {
121 121 font-style: normal;
122 122 }
123 123
124 124 label {
125 125 color: @text-color;
126 126
127 127 input[type="checkbox"] {
128 128 margin-right: 1em;
129 129 }
130 130 input[type="radio"] {
131 131 margin-right: 1em;
132 132 }
133 133 }
134 134
135 135 code,
136 136 .code {
137 137 font-size: .95em;
138 138 font-family: @text-code;
139 139 color: @grey3;
140 140
141 141 a {
142 142 color: lighten(@rcblue,10%)
143 143 }
144 144 }
145 145
146 146 pre {
147 147 margin: 0;
148 148 padding: 0;
149 149 border: 0;
150 150 outline: 0;
151 151 font-size: @basefontsize*.95;
152 152 line-height: 1.4em;
153 153 font-family: @text-code;
154 154 color: @grey3;
155 155 }
156 156
157 157 // Emphasis & misc
158 158 // -------------------------
159 159
160 160 small,
161 161 .small {
162 162 font-size: 75%;
163 163 font-weight: normal;
164 164 line-height: 1em;
165 165 }
166 166
167 167 mark,
168 168 .mark {
169 169 padding: .2em;
170 170 }
171 171
172 172 // Alignment
173 173 .text-left { text-align: left; }
174 174 .text-right { text-align: right; }
175 175 .text-center { text-align: center; }
176 176 .text-justify { text-align: justify; }
177 177 .text-nowrap { white-space: nowrap; }
178 178
179 179 // Transformation
180 180 .text-lowercase { text-transform: lowercase; }
181 181 .text-uppercase { text-transform: uppercase; }
182 182 .text-capitalize { text-transform: capitalize; }
183 183
184 184 // Contextual colors
185 185 .text-muted {
186 186 color: @grey4;
187 187 }
188 188 .text-primary {
189 189 color: @rcblue;
190 190 }
191 191 .text-success {
192 192 color: @alert1;
193 193 }
194 194 .text-info {
195 195 color: @alert4;
196 196 }
197 197 .text-warning {
198 198 color: @alert3;
199 199 }
200 200 .text-danger {
201 201 color: @alert2;
202 202 }
203 203
204 204 // Contextual backgrounds
205 205 .bg-primary {
206 206 background-color: white;
207 207 }
208 208 .bg-success {
209 209 background-color: @alert1;
210 210 }
211 211 .bg-info {
212 212 background-color: @alert4;
213 213 }
214 214 .bg-warning {
215 215 background-color: @alert3;
216 216 }
217 217 .bg-danger {
218 218 background-color: @alert2;
219 219 }
220 220
221 221
222 222 // Page header
223 223 // -------------------------
224 224
225 225 .page-header {
226 226 margin: @pagepadding 0 @textmargin;
227 227 border-bottom: @border-thickness solid @grey5;
228 228 }
229 229
230 230 .title {
231 231 clear: both;
232 232 float: left;
233 233 width: 100%;
234 margin: @pagepadding/2 0 @pagepadding;
234 margin: @pagepadding/2 0 @pagepadding/4;
235 235
236 236 .breadcrumbs {
237 237 float: left;
238 238 clear: both;
239 239 width: 700px;
240 240 margin: 0;
241 241
242 242 .q_filter_box {
243 243 margin-right: @padding;
244 244 }
245 245 }
246 246
247 247 h1 a {
248 248 color: @rcblue;
249 249 }
250 250
251 251 input{
252 252 margin-right: @padding;
253 253 }
254 254
255 255 h5, .h5 {
256 256 color: @grey1;
257 257 margin-bottom: @space;
258 258
259 259 span {
260 260 display: inline-block;
261 261 }
262 262 }
263 263
264 264 p {
265 265 margin-bottom: 0;
266 266 }
267 267
268 268 .links {
269 269 float: right;
270 270 display: inline;
271 271 margin: 0;
272 272 padding-left: 0;
273 273 list-style: none;
274 274 text-align: right;
275 275
276 276 li {
277 277 float: right;
278 278 list-style-type: none;
279 279 }
280 280
281 281 a {
282 282 display: inline-block;
283 283 margin-left: @textmargin/2;
284 284 }
285 285 }
286 286
287 287 .title-content {
288 288 float: left;
289 289 margin: 0;
290 290 padding: 0;
291 291
292 292 & + .breadcrumbs {
293 293 margin-top: @padding;
294 294 }
295 295
296 296 & + .links {
297 297 margin-top: -@button-padding;
298 298
299 299 & + .breadcrumbs {
300 300 margin-top: @padding;
301 301 }
302 302 }
303 303
304 304 .repo-group-desc {
305 305 padding: 8px 0px 0px 0px;
306 306 }
307 307 }
308 308
309 309 .title-main {
310 310 font-size: @repo-title-fontsize;
311 311 }
312 312
313 313 .title-description {
314 314 margin-top: .5em;
315 315 }
316 316
317 317 .q_filter_box {
318 318 width: 200px;
319 319 }
320 320
321 321 }
322 322
323 323 #readme .title {
324 324 text-transform: none;
325 325 }
326 326
327 327 // Lists
328 328 // -------------------------
329 329
330 330 // Unordered and Ordered lists
331 331 ul,
332 332 ol {
333 333 margin-top: 0;
334 334 margin-bottom: @textmargin;
335 335 ul,
336 336 ol {
337 337 margin-bottom: 0;
338 338 }
339 339 }
340 340
341 341 li {
342 342 line-height: 2em;
343 343 }
344 344
345 345 ul li {
346 346 position: relative;
347 347 list-style-type: disc;
348 348
349 349 p:first-child {
350 350 display:inline;
351 351 }
352 352 }
353 353
354 354 // List options
355 355
356 356 // Unstyled keeps list items block level, just removes default browser padding and list-style
357 357 .list-unstyled {
358 358 padding-left: 0;
359 359 list-style: none;
360 360 li:before { content: none; }
361 361 }
362 362
363 363 // Inline turns list items into inline-block
364 364 .list-inline {
365 365 .list-unstyled();
366 366 margin-left: -5px;
367 367
368 368 > li {
369 369 display: inline-block;
370 370 padding-left: 5px;
371 371 padding-right: 5px;
372 372 }
373 373 }
374 374
375 375 // Description Lists
376 376
377 377 dl {
378 378 margin-top: 0; // Remove browser default
379 379 margin-bottom: @textmargin;
380 380 }
381 381
382 382 dt,
383 383 dd {
384 384 line-height: 1.4em;
385 385 }
386 386
387 387 dt {
388 388 margin: @textmargin 0 0 0;
389 389 font-weight: @text-bold-weight;
390 390 font-family: @text-bold;
391 391 }
392 392
393 393 dd {
394 394 margin-left: 0; // Undo browser default
395 395 }
396 396
397 397 // Horizontal description lists
398 398 // Defaults to being stacked without any of the below styles applied, until the
399 399 // grid breakpoint is reached (default of ~768px).
400 400 // These are used in forms as well; see style guide.
401 401 // TODO: lisa: These should really not be used in forms.
402 402
403 403 .dl-horizontal {
404 404
405 405 overflow: hidden;
406 406 margin-bottom: @space;
407 407
408 408 dt, dd {
409 409 float: left;
410 410 margin: 5px 0 5px 0;
411 411 }
412 412
413 413 dt {
414 414 clear: left;
415 415 width: @label-width - @form-vertical-margin;
416 416 }
417 417
418 418 dd {
419 419 &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present
420 420 margin-left: @form-vertical-margin;
421 421 max-width: @form-max-width - (@label-width - @form-vertical-margin) - @form-vertical-margin;
422 422 }
423 423
424 424 pre {
425 425 margin: 0;
426 426 }
427 427
428 428 &.settings {
429 429 dt {
430 430 text-align: left;
431 431 }
432 432 }
433 433
434 434 @media (min-width: 768px) {
435 435 dt {
436 436 float: left;
437 437 width: 185px;
438 438 clear: left;
439 439 text-align: right;
440 440 }
441 441 dd {
442 442 margin-left: 20px;
443 443 }
444 444 }
445 445 }
446 446
447 447
448 448 // Misc
449 449 // -------------------------
450 450
451 451 // Abbreviations and acronyms
452 452 abbr[title],
453 453 abbr[data-original-title] {
454 454 cursor: help;
455 455 border-bottom: @border-thickness dotted @grey4;
456 456 }
457 457 .initialism {
458 458 font-size: 90%;
459 459 text-transform: uppercase;
460 460 }
461 461
462 462 // Blockquotes
463 463 blockquote {
464 464 padding: 1em 2em;
465 465 margin: 0 0 2em;
466 466 font-size: @basefontsize;
467 467 border-left: 2px solid @grey6;
468 468
469 469 p,
470 470 ul,
471 471 ol {
472 472 &:last-child {
473 473 margin-bottom: 0;
474 474 }
475 475 }
476 476
477 477 footer,
478 478 small,
479 479 .small {
480 480 display: block;
481 481 font-size: 80%;
482 482
483 483 &:before {
484 484 content: '\2014 \00A0'; // em dash, nbsp
485 485 }
486 486 }
487 487 }
488 488
489 489 // Opposite alignment of blockquote
490 490 //
491 491 .blockquote-reverse,
492 492 blockquote.pull-right {
493 493 padding-right: 15px;
494 494 padding-left: 0;
495 495 border-right: 5px solid @grey6;
496 496 border-left: 0;
497 497 text-align: right;
498 498
499 499 // Account for citation
500 500 footer,
501 501 small,
502 502 .small {
503 503 &:before { content: ''; }
504 504 &:after {
505 505 content: '\00A0 \2014'; // nbsp, em dash
506 506 }
507 507 }
508 508 }
509 509
510 510 // Addresses
511 511 address {
512 512 margin-bottom: 2em;
513 513 font-style: normal;
514 514 line-height: 1.8em;
515 515 }
516 516
517 517 .error-message {
518 518 display: block;
519 519 margin: @padding/3 0;
520 520 color: @alert2;
521 521 }
522 522
523 523 .issue-tracker-link {
524 524 color: @rcblue;
525 525 }
526 526
527 527 .info_text{
528 528 font-size: @basefontsize;
529 529 color: @grey4;
530 530 font-family: @text-regular;
531 531 }
532 532
533 533 .help-block-inline {
534 534 margin: 0;
535 535 }
536 536
537 537 // help block text
538 538 .help-block {
539 539 display: block;
540 540 margin: 0 0 @padding;
541 541 color: @grey4;
542 542 font-family: @text-light;
543 543 &.pre-formatting {
544 544 white-space: pre-wrap;
545 545 }
546 546 }
547 547
548 548 .error-message {
549 549 display: block;
550 550 margin: @padding/3 0;
551 551 color: @alert2;
552 552 }
@@ -1,148 +1,150 b''
1 1 // variables for use in all RhodeCode products
2 2
3 3 // FONTS
4 4 //Primary Colors (brand)
5 5 @rcblue: #427cc9; //RhodeCode blue
6 6 @rcdarkblue: #305b91; //RhodeCode dark blue
7 7 @rclightblue: lighten(@rcblue, 30%);
8 8 @rchighlightblue: lighten(@rcblue, 35%);
9 9
10 10 // Secondary Colors (greyscale)
11 @grey1: #202020; //midnight
12 @grey2: #323232; //charcoal
13 @grey3: #666666; //tungsten
14 @grey4: #979797; //light grey
11 @black: #000;
12 @white: #fff;
13 @grey1: #2B2B2D; //midnight
14 @grey2: #5C5C5C; //charcoal
15 @grey3: #7E7F7F; //tungsten
16 @grey4: #949494; //light grey
15 17 @grey5: #dbd9da; //greyish
16 18 @grey6: #eeeeee; //silver
17 @grey7: #f9f9f9; //light silver
19 @grey7: #F5F5F5; //light silver
18 20
19 21 // special for navigation
20 22 @nav-grey: #CDCCCD;
21 23
22 24 @grey5-alpha: rgba(219, 217, 218, 0.3);
23 25
24 26 // Tertiary Colors
25 27 @color1: #879938; //olive green
26 28 @color2: #fcc93a; //bright yellow
27 29 @color3: #ff9e07; //orange-yellow
28 30 @color4: #fc663a; //bright orange
29 31 @color5: #d63d44; //signal red
30 32 @color6: #99287c; //violet
31 33 @color7: #682668; //dark purple
32 34 @color8: #194f8e; //dark blue
33 35
34 36 // Alert Colors (bright)
35 37 @alert1: #0ac878; //bright green
36 38 @alert2: #e85e4d; //soft red
37 39 @alert3: #ffc854; //corn yellow
38 40 @alert4: #84a5d2; //light blue
39 41
40 42 // Alert Inner Colors
41 43 @alert1-inner: #daf7eb; //bright green
42 44 @alert2-inner: #fbdfdb; //soft red
43 45 @alert3-inner: #fff4dd; //corn yellow
44 46 @alert4-inner: #e6edf6; //light blue
45 47
46 48 // Highlight color for lines and colors
47 49 @comment-highlight-color: #ffd887;
48 50
49 51 // FONTS
50 52 @basefontsize: 13px;
51 53 @navigation-fontsize: 14px;
52 54 @journal-fontsize: @basefontsize+7px;
53 55 @text-color: @grey2;
54 56 @repo-title-fontsize: 18px;
55 57
56 58 @text-regular: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
57 59 @text-monospace: 'Menlo', 'Liberation Mono', 'Consolas', 'DejaVu Sans Mono', 'Ubuntu Mono', 'Courier New', 'andale mono', 'lucida console', monospace;
58 60
59 61 @text-italic: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
60 62
61 63 @text-bold: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
62 64 @text-bold-weight: 600;
63 65
64 66 @text-semibold: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
65 67 @text-semibold-weight: 500;
66 68
67 69 @text-bold-italic: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
68 70 @text-bold-italic-weight: 600;
69 71
70 72 @text-code: @text-monospace;
71 73 @text-light: @text-regular;
72 74
73 75
74 76 // Used for .close buttons
75 77 @text-bootstrap: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
76 78
77 79 @panel-title: @basefontsize;
78 80 @panel-footer: @basefontsize;
79 81
80 82 // BORDERS
81 83 @border-thickness: 1px;
82 84 @border-thickness-buttons: 1px;
83 85 @border-thickness-tags: 1px;
84 86 @border-radius: 2px;
85 87 @border-default-color: @grey5;
86 88 @border-highlight-color: @grey4;
87 89
88 90 // SPACING
89 91 @contentpadding: 15px; //padding on left and right of pages
90 92 @pagepadding: 40px; //padding on top and bottom of pages
91 93 @menupadding: 12px; //padding for sidebar and content
92 94 @sidebarpadding: 15px; //spacing between sections
93 95 @space: 40px; //spacing between sections
94 96 @padding: 15px; //padding inside modules
95 97 @textmargin: 20px; //spacing below headers
96 98 @header-padding: 20px;
97 99 @panel-padding: @padding;
98 100 @gravatar-size: 16px; // height/width of gravatar w/o border
99 101
100 102 // ADMIN
101 103 @form-max-width: 750px;
102 104
103 105 // FORMS (new)
104 106 @border-thickness-inputs: 1px;
105 107 @input-padding: @button-padding; //needs to match button padding
106 108 // TODO: johbo: Needed for working computation of paddings around labels etc.
107 109 // Expected to be replaced once we are done with the form refactoring.
108 110 @input-padding-px: 12px;
109 111 @legend-width: 220px;
110 112 @form-vertical-margin: 20px;
111 113 @form-check-width: 20px;
112 114 @form-radio-width: 10px;
113 115 @form-textcolor: @grey3;
114 116
115 117 // FORMS
116 118 @label-width: 220px;
117 119 //TODO: lisa: Eventually we don't need both of these; remove
118 120 // label-width when legend-width is no longer used
119 121
120 122 @input-border-thickness: @border-thickness;
121 123 @medium-inline-input-width: 115px;
122 124 @input-description-minwidth: 300px;
123 125 @label2-width: 200px;
124 126 @checkboxes-width: 420px;
125 127 @label-summary-minwidth: 80px;
126 128 @search-form-width: 400px;
127 129 @fields-input-m: 400px;
128 130 @fields-input-l: 720px;
129 131
130 132 // BUTTONS
131 133 @button-padding: .9em;
132 134
133 135 // DEFAULT WIDTHS
134 @wrapper-maxwidth: 1200px;
136 @wrapper-maxwidth: 1600px;
135 137 @sidebar-width: 145px;
136 138 @sidebar-all-width: @sidebar-width + 2 * @sidebarpadding;
137 139 @sidebar-small-width: 100px;
138 140 @sidebar-small-all-width: @sidebar-small-width + 2 * @sidebarpadding;
139 141 @texteditor-width: 660px;
140 142 @maincontent-maxwidth: 940px;
141 143 @pullrequest-width: 1025px;
142 144 @summary-menu-stats-width: 200px;
143 145
144 146 // SCREEN WIDTHS
145 147 @screen-sm-min: 320px;
146 148
147 149 // For Bootstrap
148 150 @panel-border-radius: @border-radius;
@@ -1,314 +1,313 b''
1 1 ## -*- coding: utf-8 -*-
2 2
3 3 <%inherit file="/base/base.mako"/>
4 4
5 5 <%def name="title()">
6 6 ${_('%s Changelog') % c.repo_name}
7 7 %if c.changelog_for_path:
8 8 /${c.changelog_for_path}
9 9 %endif
10 10 %if c.rhodecode_name:
11 11 &middot; ${h.branding(c.rhodecode_name)}
12 12 %endif
13 13 </%def>
14 14
15 15 <%def name="breadcrumbs_links()">
16 16 %if c.changelog_for_path:
17 17 /${c.changelog_for_path}
18 18 %endif
19 19 </%def>
20 20
21 21 <%def name="menu_bar_nav()">
22 22 ${self.menu_items(active='repositories')}
23 23 </%def>
24 24
25 25 <%def name="menu_bar_subnav()">
26 26 ${self.repo_menu(active='changelog')}
27 27 </%def>
28 28
29 29 <%def name="main()">
30 30
31 31 <div class="box">
32 32 <div class="title">
33 ${self.repo_page_title(c.rhodecode_db_repo)}
34 33 <ul class="links">
35 34 <li>
36 35 <a href="#" class="btn btn-small" id="rev_range_container" style="display:none;"></a>
37 36 %if c.rhodecode_db_repo.fork:
38 37 <span>
39 38 <a id="compare_fork_button"
40 39 title="${h.tooltip(_('Compare fork with %s' % c.rhodecode_db_repo.fork.repo_name))}"
41 40 class="btn btn-small"
42 41 href="${h.route_path('repo_compare',
43 42 repo_name=c.rhodecode_db_repo.fork.repo_name,
44 43 source_ref_type=c.rhodecode_db_repo.landing_rev[0],
45 44 source_ref=c.rhodecode_db_repo.landing_rev[1],
46 45 target_ref_type='branch' if request.GET.get('branch') else c.rhodecode_db_repo.landing_rev[0],
47 46 target_ref=request.GET.get('branch') or c.rhodecode_db_repo.landing_rev[1],
48 47 _query=dict(merge=1, target_repo=c.repo_name))}"
49 48 >
50 49 ${_('Compare fork with Parent (%s)' % c.rhodecode_db_repo.fork.repo_name)}
51 50 </a>
52 51 </span>
53 52 %endif
54 53
55 54 ## pr open link
56 55 %if h.is_hg(c.rhodecode_repo) or h.is_git(c.rhodecode_repo):
57 56 <span>
58 57 <a id="open_new_pull_request" class="btn btn-small btn-success" href="${h.route_path('pullrequest_new',repo_name=c.repo_name)}">
59 58 ${_('Open new pull request')}
60 59 </a>
61 60 </span>
62 61 %endif
63 62
64 63 ## clear selection
65 64 <div title="${_('Clear selection')}" class="btn" id="rev_range_clear" style="display:none">
66 65 ${_('Clear selection')}
67 66 </div>
68 67
69 68 </li>
70 69 </ul>
71 70 </div>
72 71
73 72 % if c.pagination:
74 73 <script type="text/javascript" src="${h.asset('js/src/plugins/jquery.commits-graph.js')}"></script>
75 74
76 75 <div class="graph-header">
77 76 <div id="filter_changelog">
78 77 ${h.hidden('branch_filter')}
79 78 %if c.selected_name:
80 79 <div class="btn btn-default" id="clear_filter" >
81 80 ${_('Clear filter')}
82 81 </div>
83 82 %endif
84 83 </div>
85 84 ${self.breadcrumbs('breadcrumbs_light')}
86 85 <div class="pull-right">
87 86 % if h.is_hg(c.rhodecode_repo):
88 87 % if c.show_hidden:
89 88 <a class="action-link" href="${h.current_route_path(request, evolve=0)}">${_('Hide obsolete/hidden')}</a>
90 89 % else:
91 90 <a class="action-link" href="${h.current_route_path(request, evolve=1)}">${_('Show obsolete/hidden')}</a>
92 91 % endif
93 92 % else:
94 93 <span class="action-link disabled">${_('Show hidden')}</span>
95 94 % endif
96 95 </div>
97 96 <div id="commit-counter" data-total=${c.total_cs} class="pull-right">
98 97 ${_ungettext('showing %d out of %d commit', 'showing %d out of %d commits', c.showing_commits) % (c.showing_commits, c.total_cs)}
99 98 </div>
100 99 </div>
101 100
102 101 <div id="graph">
103 102 <div class="graph-col-wrapper">
104 103 <div id="graph_nodes">
105 104 <div id="graph_canvas"></div>
106 105 </div>
107 106 <div id="graph_content" class="main-content graph_full_width">
108 107
109 108 <div class="table">
110 109 <table id="changesets" class="rctable">
111 110 <tr>
112 111 ## checkbox
113 112 <th></th>
114 113 <th colspan="2"></th>
115 114
116 115 <th>${_('Commit')}</th>
117 116 ## Mercurial phase/evolve state
118 117 <th></th>
119 118 ## commit message expand arrow
120 119 <th></th>
121 120 <th>${_('Commit Message')}</th>
122 121
123 122 <th>${_('Age')}</th>
124 123 <th>${_('Author')}</th>
125 124
126 125 <th>${_('Refs')}</th>
127 126 </tr>
128 127
129 128 <tbody class="commits-range">
130 129 <%include file='changelog_elements.mako'/>
131 130 </tbody>
132 131 </table>
133 132 </div>
134 133 </div>
135 134 <div class="pagination-wh pagination-left">
136 135 ${c.pagination.pager('$link_previous ~2~ $link_next')}
137 136 </div>
138 137 </div>
139 138
140 139 <script type="text/javascript">
141 140 var cache = {};
142 141 $(function(){
143 142
144 143 // Create links to commit ranges when range checkboxes are selected
145 144 var $commitCheckboxes = $('.commit-range');
146 145 // cache elements
147 146 var $commitRangeContainer = $('#rev_range_container');
148 147 var $commitRangeClear = $('#rev_range_clear');
149 148
150 149 var checkboxRangeSelector = function(e){
151 150 var selectedCheckboxes = [];
152 151 for (pos in $commitCheckboxes){
153 152 if($commitCheckboxes[pos].checked){
154 153 selectedCheckboxes.push($commitCheckboxes[pos]);
155 154 }
156 155 }
157 156 var open_new_pull_request = $('#open_new_pull_request');
158 157 if(open_new_pull_request){
159 158 var selected_changes = selectedCheckboxes.length;
160 159 if (selected_changes > 1 || selected_changes == 1 && templateContext.repo_type == 'svn') {
161 160 open_new_pull_request.hide();
162 161 } else {
163 162 if (selected_changes == 1) {
164 163 open_new_pull_request.html(_gettext('Open new pull request for selected commit'));
165 164 } else if (selected_changes == 0) {
166 165 open_new_pull_request.html(_gettext('Open new pull request'));
167 166 }
168 167 open_new_pull_request.show();
169 168 }
170 169 }
171 170
172 171 if (selectedCheckboxes.length>0){
173 172 var revEnd = selectedCheckboxes[0].name;
174 173 var revStart = selectedCheckboxes[selectedCheckboxes.length-1].name;
175 174 var url = pyroutes.url('repo_commit',
176 175 {'repo_name': '${c.repo_name}',
177 176 'commit_id': revStart+'...'+revEnd});
178 177
179 178 var link = (revStart == revEnd)
180 179 ? _gettext('Show selected commit __S')
181 180 : _gettext('Show selected commits __S ... __E');
182 181
183 182 link = link.replace('__S', revStart.substr(0,6));
184 183 link = link.replace('__E', revEnd.substr(0,6));
185 184
186 185 $commitRangeContainer
187 186 .attr('href',url)
188 187 .html(link)
189 188 .show();
190 189
191 190 $commitRangeClear.show();
192 191 var _url = pyroutes.url('pullrequest_new',
193 192 {'repo_name': '${c.repo_name}',
194 193 'commit': revEnd});
195 194 open_new_pull_request.attr('href', _url);
196 195 $('#compare_fork_button').hide();
197 196 } else {
198 197 $commitRangeContainer.hide();
199 198 $commitRangeClear.hide();
200 199
201 200 %if c.branch_name:
202 201 var _url = pyroutes.url('pullrequest_new',
203 202 {'repo_name': '${c.repo_name}',
204 203 'branch':'${c.branch_name}'});
205 204 open_new_pull_request.attr('href', _url);
206 205 %else:
207 206 var _url = pyroutes.url('pullrequest_new',
208 207 {'repo_name': '${c.repo_name}'});
209 208 open_new_pull_request.attr('href', _url);
210 209 %endif
211 210 $('#compare_fork_button').show();
212 211 }
213 212 };
214 213
215 214 $commitCheckboxes.on('click', checkboxRangeSelector);
216 215
217 216 $commitRangeClear.on('click',function(e) {
218 217 $commitCheckboxes.attr('checked', false);
219 218 checkboxRangeSelector();
220 219 e.preventDefault();
221 220 });
222 221
223 222 // make sure the buttons are consistent when navigate back and forth
224 223 checkboxRangeSelector();
225 224
226 225 var msgs = $('.message');
227 226 // get first element height
228 227 var el = $('#graph_content .container')[0];
229 228 var row_h = el.clientHeight;
230 229 for (var i=0; i < msgs.length; i++) {
231 230 var m = msgs[i];
232 231
233 232 var h = m.clientHeight;
234 233 var pad = $(m).css('padding');
235 234 if (h > row_h) {
236 235 var offset = row_h - (h+12);
237 236 $(m.nextElementSibling).css('display','block');
238 237 $(m.nextElementSibling).css('margin-top',offset+'px');
239 238 }
240 239 }
241 240
242 241 $("#clear_filter").on("click", function() {
243 242 var filter = {'repo_name': '${c.repo_name}'};
244 243 window.location = pyroutes.url('repo_changelog', filter);
245 244 });
246 245
247 246 $("#branch_filter").select2({
248 247 'dropdownAutoWidth': true,
249 248 'width': 'resolve',
250 249 'placeholder': "${c.selected_name or _('Filter changelog')}",
251 250 containerCssClass: "drop-menu",
252 251 dropdownCssClass: "drop-menu-dropdown",
253 252 query: function(query){
254 253 var key = 'cache';
255 254 var cached = cache[key] ;
256 255 if(cached) {
257 256 var data = {results: []};
258 257 //filter results
259 258 $.each(cached.results, function(){
260 259 var section = this.text;
261 260 var children = [];
262 261 $.each(this.children, function(){
263 262 if(query.term.length == 0 || this.text.toUpperCase().indexOf(query.term.toUpperCase()) >= 0 ){
264 263 children.push({'id': this.id, 'text': this.text, 'type': this.type})
265 264 }
266 265 });
267 266 data.results.push({'text': section, 'children': children});
268 267 query.callback({results: data.results});
269 268 });
270 269 }else{
271 270 $.ajax({
272 271 url: pyroutes.url('repo_refs_changelog_data', {'repo_name': '${c.repo_name}'}),
273 272 data: {},
274 273 dataType: 'json',
275 274 type: 'GET',
276 275 success: function(data) {
277 276 cache[key] = data;
278 277 query.callback({results: data.results});
279 278 }
280 279 })
281 280 }
282 281 }
283 282 });
284 283 $('#branch_filter').on('change', function(e){
285 284 var data = $('#branch_filter').select2('data');
286 285 //type: branch_closed
287 286 var selected = data.text;
288 287 var filter = {'repo_name': '${c.repo_name}'};
289 288 if(data.type == 'branch' || data.type == 'branch_closed'){
290 289 filter["branch"] = selected;
291 290 if (data.type == 'branch_closed') {
292 291 filter["evolve"] = '1';
293 292 }
294 293 }
295 294 else if (data.type == 'book'){
296 295 filter["bookmark"] = selected;
297 296 }
298 297 window.location = pyroutes.url('repo_changelog', filter);
299 298 });
300 299
301 300 commitsController = new CommitsController();
302 301 % if not c.changelog_for_path:
303 302 commitsController.reloadGraph();
304 303 % endif
305 304
306 305 });
307 306
308 307 </script>
309 308 </div>
310 309 % else:
311 310 ${_('There are no changes yet')}
312 311 % endif
313 312 </div>
314 313 </%def>
@@ -1,309 +1,305 b''
1 1 ## -*- coding: utf-8 -*-
2 2 <%inherit file="/base/base.mako"/>
3 3 <%namespace name="cbdiffs" file="/codeblocks/diffs.mako"/>
4 4
5 5 <%def name="title()">
6 6 %if c.compare_home:
7 7 ${_('%s Compare') % c.repo_name}
8 8 %else:
9 9 ${_('%s Compare') % c.repo_name} - ${'%s@%s' % (c.source_repo.repo_name, c.source_ref)} &gt; ${'%s@%s' % (c.target_repo.repo_name, c.target_ref)}
10 10 %endif
11 11 %if c.rhodecode_name:
12 12 &middot; ${h.branding(c.rhodecode_name)}
13 13 %endif
14 14 </%def>
15 15
16 16 <%def name="breadcrumbs_links()">
17 17 ${_ungettext('%s commit','%s commits', len(c.commit_ranges)) % len(c.commit_ranges)}
18 18 </%def>
19 19
20 20 <%def name="menu_bar_nav()">
21 21 ${self.menu_items(active='repositories')}
22 22 </%def>
23 23
24 24 <%def name="menu_bar_subnav()">
25 25 ${self.repo_menu(active='compare')}
26 26 </%def>
27 27
28 28 <%def name="main()">
29 29 <script type="text/javascript">
30 30 // set fake commitId on this commit-range page
31 31 templateContext.commit_data.commit_id = "${h.EmptyCommit().raw_id}";
32 32 </script>
33 33
34 34 <div class="box">
35 <div class="title">
36 ${self.repo_page_title(c.rhodecode_db_repo)}
37 </div>
38
39 35 <div class="summary changeset">
40 36 <div class="summary-detail">
41 37 <div class="summary-detail-header">
42 38 <span class="breadcrumbs files_location">
43 39 <h4>
44 40 ${_('Compare Commits')}
45 41 % if c.file_path:
46 42 ${_('for file')} <a href="#${'a_' + h.FID('',c.file_path)}">${c.file_path}</a>
47 43 % endif
48 44
49 45 % if c.commit_ranges:
50 46 <code>
51 47 r${c.source_commit.idx}:${h.short_id(c.source_commit.raw_id)}...r${c.target_commit.idx}:${h.short_id(c.target_commit.raw_id)}
52 48 </code>
53 49 % endif
54 50 </h4>
55 51 </span>
56 52 </div>
57 53
58 54 <div class="fieldset">
59 55 <div class="left-label">
60 56 ${_('Target')}:
61 57 </div>
62 58 <div class="right-content">
63 59 <div>
64 60 <div class="code-header" >
65 61 <div class="compare_header">
66 62 ## The hidden elements are replaced with a select2 widget
67 63 ${h.hidden('compare_source')}
68 64 </div>
69 65 </div>
70 66 </div>
71 67 </div>
72 68 </div>
73 69
74 70 <div class="fieldset">
75 71 <div class="left-label">
76 72 ${_('Source')}:
77 73 </div>
78 74 <div class="right-content">
79 75 <div>
80 76 <div class="code-header" >
81 77 <div class="compare_header">
82 78 ## The hidden elements are replaced with a select2 widget
83 79 ${h.hidden('compare_target')}
84 80 </div>
85 81 </div>
86 82 </div>
87 83 </div>
88 84 </div>
89 85
90 86 <div class="fieldset">
91 87 <div class="left-label">
92 88 ${_('Actions')}:
93 89 </div>
94 90 <div class="right-content">
95 91 <div>
96 92 <div class="code-header" >
97 93 <div class="compare_header">
98 94
99 95 <div class="compare-buttons">
100 96 % if c.compare_home:
101 97 <a id="compare_revs" class="btn btn-primary"> ${_('Compare Commits')}</a>
102 98
103 99 <a class="btn disabled tooltip" disabled="disabled" title="${_('Action unavailable in current view')}">${_('Swap')}</a>
104 100 <a class="btn disabled tooltip" disabled="disabled" title="${_('Action unavailable in current view')}">${_('Comment')}</a>
105 101 <div id="changeset_compare_view_content">
106 102 <div class="help-block">${_('Compare commits, branches, bookmarks or tags.')}</div>
107 103 </div>
108 104
109 105 % elif c.preview_mode:
110 106 <a class="btn disabled tooltip" disabled="disabled" title="${_('Action unavailable in current view')}">${_('Compare Commits')}</a>
111 107 <a class="btn disabled tooltip" disabled="disabled" title="${_('Action unavailable in current view')}">${_('Swap')}</a>
112 108 <a class="btn disabled tooltip" disabled="disabled" title="${_('Action unavailable in current view')}">${_('Comment')}</a>
113 109
114 110 % else:
115 111 <a id="compare_revs" class="btn btn-primary"> ${_('Compare Commits')}</a>
116 112 <a id="btn-swap" class="btn btn-primary" href="${c.swap_url}">${_('Swap')}</a>
117 113
118 114 ## allow comment only if there are commits to comment on
119 115 % if c.diffset and c.diffset.files and c.commit_ranges:
120 116 <a id="compare_changeset_status_toggle" class="btn btn-primary">${_('Comment')}</a>
121 117 % else:
122 118 <a class="btn disabled tooltip" disabled="disabled" title="${_('Action unavailable in current view')}">${_('Comment')}</a>
123 119 % endif
124 120 % endif
125 121 </div>
126 122 </div>
127 123 </div>
128 124 </div>
129 125 </div>
130 126 </div>
131 127
132 128 ## commit status form
133 129 <div class="fieldset" id="compare_changeset_status" style="display: none; margin-bottom: -80px;">
134 130 <div class="left-label">
135 131 ${_('Commit status')}:
136 132 </div>
137 133 <div class="right-content">
138 134 <%namespace name="comment" file="/changeset/changeset_file_comment.mako"/>
139 135 ## main comment form and it status
140 136 <%
141 137 def revs(_revs):
142 138 form_inputs = []
143 139 for cs in _revs:
144 140 tmpl = '<input type="hidden" data-commit-id="%(cid)s" name="commit_ids" value="%(cid)s">' % {'cid': cs.raw_id}
145 141 form_inputs.append(tmpl)
146 142 return form_inputs
147 143 %>
148 144 <div>
149 145 ${comment.comments(h.route_path('repo_commit_comment_create', repo_name=c.repo_name, commit_id='0'*16), None, is_compare=True, form_extras=revs(c.commit_ranges))}
150 146 </div>
151 147 </div>
152 148 </div>
153 149
154 150 </div> <!-- end summary-detail -->
155 151 </div> <!-- end summary -->
156 152
157 153 ## use JS script to load it quickly before potentially large diffs render long time
158 154 ## this prevents from situation when large diffs block rendering of select2 fields
159 155 <script type="text/javascript">
160 156
161 157 var cache = {};
162 158
163 159 var formatSelection = function(repoName){
164 160 return function(data, container, escapeMarkup) {
165 161 var selection = data ? this.text(data) : "";
166 162 return escapeMarkup('{0}@{1}'.format(repoName, selection));
167 163 }
168 164 };
169 165
170 166 var feedCompareData = function(query, cachedValue){
171 167 var data = {results: []};
172 168 //filter results
173 169 $.each(cachedValue.results, function() {
174 170 var section = this.text;
175 171 var children = [];
176 172 $.each(this.children, function() {
177 173 if (query.term.length === 0 || this.text.toUpperCase().indexOf(query.term.toUpperCase()) >= 0) {
178 174 children.push({
179 175 'id': this.id,
180 176 'text': this.text,
181 177 'type': this.type
182 178 })
183 179 }
184 180 });
185 181 data.results.push({
186 182 'text': section,
187 183 'children': children
188 184 })
189 185 });
190 186 //push the typed in changeset
191 187 data.results.push({
192 188 'text': _gettext('specify commit'),
193 189 'children': [{
194 190 'id': query.term,
195 191 'text': query.term,
196 192 'type': 'rev'
197 193 }]
198 194 });
199 195 query.callback(data);
200 196 };
201 197
202 198 var loadCompareData = function(repoName, query, cache){
203 199 $.ajax({
204 200 url: pyroutes.url('repo_refs_data', {'repo_name': repoName}),
205 201 data: {},
206 202 dataType: 'json',
207 203 type: 'GET',
208 204 success: function(data) {
209 205 cache[repoName] = data;
210 206 query.callback({results: data.results});
211 207 }
212 208 })
213 209 };
214 210
215 211 var enable_fields = ${"false" if c.preview_mode else "true"};
216 212 $("#compare_source").select2({
217 213 placeholder: "${'%s@%s' % (c.source_repo.repo_name, c.source_ref)}",
218 214 containerCssClass: "drop-menu",
219 215 dropdownCssClass: "drop-menu-dropdown",
220 216 formatSelection: formatSelection("${c.source_repo.repo_name}"),
221 217 dropdownAutoWidth: true,
222 218 query: function(query) {
223 219 var repoName = '${c.source_repo.repo_name}';
224 220 var cachedValue = cache[repoName];
225 221
226 222 if (cachedValue){
227 223 feedCompareData(query, cachedValue);
228 224 }
229 225 else {
230 226 loadCompareData(repoName, query, cache);
231 227 }
232 228 }
233 229 }).select2("enable", enable_fields);
234 230
235 231 $("#compare_target").select2({
236 232 placeholder: "${'%s@%s' % (c.target_repo.repo_name, c.target_ref)}",
237 233 dropdownAutoWidth: true,
238 234 containerCssClass: "drop-menu",
239 235 dropdownCssClass: "drop-menu-dropdown",
240 236 formatSelection: formatSelection("${c.target_repo.repo_name}"),
241 237 query: function(query) {
242 238 var repoName = '${c.target_repo.repo_name}';
243 239 var cachedValue = cache[repoName];
244 240
245 241 if (cachedValue){
246 242 feedCompareData(query, cachedValue);
247 243 }
248 244 else {
249 245 loadCompareData(repoName, query, cache);
250 246 }
251 247 }
252 248 }).select2("enable", enable_fields);
253 249 var initial_compare_source = {id: "${c.source_ref}", type:"${c.source_ref_type}"};
254 250 var initial_compare_target = {id: "${c.target_ref}", type:"${c.target_ref_type}"};
255 251
256 252 $('#compare_revs').on('click', function(e) {
257 253 var source = $('#compare_source').select2('data') || initial_compare_source;
258 254 var target = $('#compare_target').select2('data') || initial_compare_target;
259 255 if (source && target) {
260 256 var url_data = {
261 257 repo_name: "${c.repo_name}",
262 258 source_ref: source.id,
263 259 source_ref_type: source.type,
264 260 target_ref: target.id,
265 261 target_ref_type: target.type
266 262 };
267 263 window.location = pyroutes.url('repo_compare', url_data);
268 264 }
269 265 });
270 266 $('#compare_changeset_status_toggle').on('click', function(e) {
271 267 $('#compare_changeset_status').toggle();
272 268 });
273 269
274 270 </script>
275 271
276 272 ## table diff data
277 273 <div class="table">
278 274
279 275
280 276 % if not c.compare_home:
281 277 <div id="changeset_compare_view_content">
282 278 <div class="pull-left">
283 279 <div class="btn-group">
284 280 <a
285 281 class="btn"
286 282 href="#"
287 283 onclick="$('.compare_select').show();$('.compare_select_hidden').hide(); return false">
288 284 ${_ungettext('Expand %s commit','Expand %s commits', len(c.commit_ranges)) % len(c.commit_ranges)}
289 285 </a>
290 286 <a
291 287 class="btn"
292 288 href="#"
293 289 onclick="$('.compare_select').hide();$('.compare_select_hidden').show(); return false">
294 290 ${_ungettext('Collapse %s commit','Collapse %s commits', len(c.commit_ranges)) % len(c.commit_ranges)}
295 291 </a>
296 292 </div>
297 293 </div>
298 294 <div style="padding:0 10px 10px 0px" class="pull-left"></div>
299 295 ## commit compare generated below
300 296 <%include file="compare_commits.mako"/>
301 297 ${cbdiffs.render_diffset_menu(c.diffset)}
302 298 ${cbdiffs.render_diffset(c.diffset)}
303 299 </div>
304 300 % endif
305 301
306 302 </div>
307 303 </div>
308 304
309 305 </%def>
@@ -1,324 +1,320 b''
1 1 <%inherit file="/base/base.mako"/>
2 2
3 3 <%def name="title(*args)">
4 4 ${_('%s Files') % c.repo_name}
5 5 %if hasattr(c,'file'):
6 6 &middot; ${h.safe_unicode(c.file.path) or '\\'}
7 7 %endif
8 8
9 9 %if c.rhodecode_name:
10 10 &middot; ${h.branding(c.rhodecode_name)}
11 11 %endif
12 12 </%def>
13 13
14 14 <%def name="breadcrumbs_links()">
15 15 ${_('Files')}
16 16 %if c.file:
17 17 @ ${h.show_id(c.commit)}
18 18 %endif
19 19 </%def>
20 20
21 21 <%def name="menu_bar_nav()">
22 22 ${self.menu_items(active='repositories')}
23 23 </%def>
24 24
25 25 <%def name="menu_bar_subnav()">
26 26 ${self.repo_menu(active='files')}
27 27 </%def>
28 28
29 29 <%def name="main()">
30 <div class="title">
31 ${self.repo_page_title(c.rhodecode_db_repo)}
32 </div>
33
34 30 <div id="pjax-container" class="summary">
35 31 <div id="files_data">
36 32 <%include file='files_pjax.mako'/>
37 33 </div>
38 34 </div>
39 35 <script>
40 36 var curState = {
41 37 commit_id: "${c.commit.raw_id}"
42 38 };
43 39
44 40 var getState = function(context) {
45 41 var url = $(location).attr('href');
46 42 var _base_url = '${h.route_path("repo_files",repo_name=c.repo_name,commit_id='',f_path='')}';
47 43 var _annotate_url = '${h.route_path("repo_files:annotated",repo_name=c.repo_name,commit_id='',f_path='')}';
48 44 _base_url = _base_url.replace('//', '/');
49 45 _annotate_url = _annotate_url.replace('//', '/');
50 46
51 47 //extract f_path from url.
52 48 var parts = url.split(_base_url);
53 49 if (parts.length != 2) {
54 50 parts = url.split(_annotate_url);
55 51 if (parts.length != 2) {
56 52 var rev = "tip";
57 53 var f_path = "";
58 54 } else {
59 55 var parts2 = parts[1].split('/');
60 56 var rev = parts2.shift(); // pop the first element which is the revision
61 57 var f_path = parts2.join('/');
62 58 }
63 59
64 60 } else {
65 61 var parts2 = parts[1].split('/');
66 62 var rev = parts2.shift(); // pop the first element which is the revision
67 63 var f_path = parts2.join('/');
68 64 }
69 65
70 66 var _node_list_url = pyroutes.url('repo_files_nodelist',
71 67 {repo_name: templateContext.repo_name,
72 68 commit_id: rev, f_path: f_path});
73 69 var _url_base = pyroutes.url('repo_files',
74 70 {repo_name: templateContext.repo_name,
75 71 commit_id: rev, f_path:'__FPATH__'});
76 72 return {
77 73 url: url,
78 74 f_path: f_path,
79 75 rev: rev,
80 76 commit_id: curState.commit_id,
81 77 node_list_url: _node_list_url,
82 78 url_base: _url_base
83 79 };
84 80 };
85 81
86 82 var metadataRequest = null;
87 83 var getFilesMetadata = function() {
88 84 if (metadataRequest && metadataRequest.readyState != 4) {
89 85 metadataRequest.abort();
90 86 }
91 87 if (fileSourcePage) {
92 88 return false;
93 89 }
94 90
95 91 if ($('#file-tree-wrapper').hasClass('full-load')) {
96 92 // in case our HTML wrapper has full-load class we don't
97 93 // trigger the async load of metadata
98 94 return false;
99 95 }
100 96
101 97 var state = getState('metadata');
102 98 var url_data = {
103 99 'repo_name': templateContext.repo_name,
104 100 'commit_id': state.commit_id,
105 101 'f_path': state.f_path
106 102 };
107 103
108 104 var url = pyroutes.url('repo_nodetree_full', url_data);
109 105
110 106 metadataRequest = $.ajax({url: url});
111 107
112 108 metadataRequest.done(function(data) {
113 109 $('#file-tree').html(data);
114 110 timeagoActivate();
115 111 });
116 112 metadataRequest.fail(function (data, textStatus, errorThrown) {
117 113 console.log(data);
118 114 if (data.status != 0) {
119 115 alert("Error while fetching metadata.\nError code {0} ({1}).Please consider reloading the page".format(data.status,data.statusText));
120 116 }
121 117 });
122 118 };
123 119
124 120 var callbacks = function() {
125 121 var state = getState('callbacks');
126 122 timeagoActivate();
127 123
128 124 // used for history, and switch to
129 125 var initialCommitData = {
130 126 id: null,
131 127 text: '${_("Pick Commit")}',
132 128 type: 'sha',
133 129 raw_id: null,
134 130 files_url: null
135 131 };
136 132
137 133 if ($('#trimmed_message_box').height() < 50) {
138 134 $('#message_expand').hide();
139 135 }
140 136
141 137 $('#message_expand').on('click', function(e) {
142 138 $('#trimmed_message_box').css('max-height', 'none');
143 139 $(this).hide();
144 140 });
145 141
146 142 if (fileSourcePage) {
147 143 // variants for with source code, not tree view
148 144
149 145 // select code link event
150 146 $("#hlcode").mouseup(getSelectionLink);
151 147
152 148 // file history select2
153 149 select2FileHistorySwitcher('#diff1', initialCommitData, state);
154 150
155 151 // show at, diff to actions handlers
156 152 $('#diff1').on('change', function(e) {
157 153 $('#diff_to_commit').removeClass('disabled').removeAttr("disabled");
158 154 $('#diff_to_commit').val(_gettext('Diff to Commit ') + e.val.truncateAfter(8, '...'));
159 155
160 156 $('#show_at_commit').removeClass('disabled').removeAttr("disabled");
161 157 $('#show_at_commit').val(_gettext('Show at Commit ') + e.val.truncateAfter(8, '...'));
162 158 });
163 159
164 160 $('#diff_to_commit').on('click', function(e) {
165 161 var diff1 = $('#diff1').val();
166 162 var diff2 = $('#diff2').val();
167 163
168 164 var url_data = {
169 165 repo_name: templateContext.repo_name,
170 166 source_ref: diff1,
171 167 source_ref_type: 'rev',
172 168 target_ref: diff2,
173 169 target_ref_type: 'rev',
174 170 merge: 1,
175 171 f_path: state.f_path
176 172 };
177 173 window.location = pyroutes.url('repo_compare', url_data);
178 174 });
179 175
180 176 $('#show_at_commit').on('click', function(e) {
181 177 var diff1 = $('#diff1').val();
182 178
183 179 var annotate = $('#annotate').val();
184 180 if (annotate === "True") {
185 181 var url = pyroutes.url('repo_files:annotated',
186 182 {'repo_name': templateContext.repo_name,
187 183 'commit_id': diff1, 'f_path': state.f_path});
188 184 } else {
189 185 var url = pyroutes.url('repo_files',
190 186 {'repo_name': templateContext.repo_name,
191 187 'commit_id': diff1, 'f_path': state.f_path});
192 188 }
193 189 window.location = url;
194 190
195 191 });
196 192
197 193 // show more authors
198 194 $('#show_authors').on('click', function(e) {
199 195 e.preventDefault();
200 196 var url = pyroutes.url('repo_file_authors',
201 197 {'repo_name': templateContext.repo_name,
202 198 'commit_id': state.rev, 'f_path': state.f_path});
203 199
204 200 $.pjax({
205 201 url: url,
206 202 data: 'annotate=${"1" if c.annotate else "0"}',
207 203 container: '#file_authors',
208 204 push: false,
209 205 timeout: pjaxTimeout
210 206 }).complete(function(){
211 207 $('#show_authors').hide();
212 208 })
213 209 });
214 210
215 211 // load file short history
216 212 $('#file_history_overview').on('click', function(e) {
217 213 e.preventDefault();
218 214 path = state.f_path;
219 215 if (path.indexOf("#") >= 0) {
220 216 path = path.slice(0, path.indexOf("#"));
221 217 }
222 218 var url = pyroutes.url('repo_changelog_file',
223 219 {'repo_name': templateContext.repo_name,
224 220 'commit_id': state.rev, 'f_path': path, 'limit': 6});
225 221 $('#file_history_container').show();
226 222 $('#file_history_container').html('<div class="file-history-inner">{0}</div>'.format(_gettext('Loading ...')));
227 223
228 224 $.pjax({
229 225 url: url,
230 226 container: '#file_history_container',
231 227 push: false,
232 228 timeout: pjaxTimeout
233 229 })
234 230 });
235 231
236 232 }
237 233 else {
238 234 getFilesMetadata();
239 235
240 236 // fuzzy file filter
241 237 fileBrowserListeners(state.node_list_url, state.url_base);
242 238
243 239 // switch to widget
244 240 select2RefSwitcher('#refs_filter', initialCommitData);
245 241 $('#refs_filter').on('change', function(e) {
246 242 var data = $('#refs_filter').select2('data');
247 243 curState.commit_id = data.raw_id;
248 244 $.pjax({url: data.files_url, container: '#pjax-container', timeout: pjaxTimeout});
249 245 });
250 246
251 247 $("#prev_commit_link").on('click', function(e) {
252 248 var data = $(this).data();
253 249 curState.commit_id = data.commitId;
254 250 });
255 251
256 252 $("#next_commit_link").on('click', function(e) {
257 253 var data = $(this).data();
258 254 curState.commit_id = data.commitId;
259 255 });
260 256
261 257 $('#at_rev').on("keypress", function(e) {
262 258 /* ENTER PRESSED */
263 259 if (e.keyCode === 13) {
264 260 var rev = $('#at_rev').val();
265 261 // explicit reload page here. with pjax entering bad input
266 262 // produces not so nice results
267 263 window.location = pyroutes.url('repo_files',
268 264 {'repo_name': templateContext.repo_name,
269 265 'commit_id': rev, 'f_path': state.f_path});
270 266 }
271 267 });
272 268 }
273 269 };
274 270
275 271 var pjaxTimeout = 5000;
276 272
277 273 $(document).pjax(".pjax-link", "#pjax-container", {
278 274 "fragment": "#pjax-content",
279 275 "maxCacheLength": 1000,
280 276 "timeout": pjaxTimeout
281 277 });
282 278
283 279 // define global back/forward states
284 280 var isPjaxPopState = false;
285 281 $(document).on('pjax:popstate', function() {
286 282 isPjaxPopState = true;
287 283 });
288 284
289 285 $(document).on('pjax:end', function(xhr, options) {
290 286 if (isPjaxPopState) {
291 287 isPjaxPopState = false;
292 288 callbacks();
293 289 _NODEFILTER.resetFilter();
294 290 }
295 291
296 292 // run callback for tracking if defined for google analytics etc.
297 293 // this is used to trigger tracking on pjax
298 294 if (typeof window.rhodecode_statechange_callback !== 'undefined') {
299 295 var state = getState('statechange');
300 296 rhodecode_statechange_callback(state.url, null)
301 297 }
302 298 });
303 299
304 300 $(document).on('pjax:success', function(event, xhr, options) {
305 301 if (event.target.id == "file_history_container") {
306 302 $('#file_history_overview').hide();
307 303 $('#file_history_overview_full').show();
308 304 timeagoActivate();
309 305 } else {
310 306 callbacks();
311 307 }
312 308 });
313 309
314 310 $(document).ready(function() {
315 311 callbacks();
316 312 var search_GET = "${request.GET.get('search','')}";
317 313 if (search_GET === "1") {
318 314 _NODEFILTER.initFilter();
319 315 }
320 316 });
321 317
322 318 </script>
323 319
324 320 </%def>
@@ -1,131 +1,127 b''
1 1 ## -*- coding: utf-8 -*-
2 2 <%inherit file="/base/base.mako"/>
3 3
4 4 <%def name="title()">
5 5 ${_('Fork repository %s') % c.repo_name}
6 6 %if c.rhodecode_name:
7 7 &middot; ${h.branding(c.rhodecode_name)}
8 8 %endif
9 9 </%def>
10 10
11 11 <%def name="breadcrumbs_links()"></%def>
12 12
13 13 <%def name="menu_bar_nav()">
14 14 ${self.menu_items(active='repositories')}
15 15 </%def>
16 16
17 17 <%def name="menu_bar_subnav()">
18 18 ${self.repo_menu(active='options')}
19 19 </%def>
20 20
21 21 <%def name="main()">
22 22 <div class="box">
23 <div class="title">
24 ${self.repo_page_title(c.rhodecode_db_repo)}
25 </div>
26
27 23 ${h.secure_form(h.route_path('repo_fork_create',repo_name=c.rhodecode_db_repo.repo_name), request=request)}
28 24 <div class="form">
29 25 <!-- fields -->
30 26 <div class="fields">
31 27
32 28 <div class="field">
33 29 <div class="label">
34 30 <label for="repo_name">${_('Fork name')}:</label>
35 31 </div>
36 32 <div class="input">
37 33 ${h.text('repo_name', class_="medium")}
38 34 ${h.hidden('repo_type',c.rhodecode_db_repo.repo_type)}
39 35 ${h.hidden('fork_parent_id',c.rhodecode_db_repo.repo_id)}
40 36 </div>
41 37 </div>
42 38
43 39 <div class="field">
44 40 <div class="label">
45 41 <label for="repo_group">${_('Repository group')}:</label>
46 42 </div>
47 43 <div class="select">
48 44 ${h.select('repo_group','',c.repo_groups,class_="medium")}
49 45 % if c.personal_repo_group:
50 46 <a class="btn" href="#" id="select_my_group" data-personal-group-id="${c.personal_repo_group.group_id}">
51 47 ${_('Select my personal group (%(repo_group_name)s)') % {'repo_group_name': c.personal_repo_group.group_name}}
52 48 </a>
53 49 % endif
54 50 <span class="help-block">${_('Optionally select a group to put this repository into.')}</span>
55 51 </div>
56 52 </div>
57 53
58 54 <div class="field">
59 55 <div class="label label-textarea">
60 56 <label for="description">${_('Description')}:</label>
61 57 </div>
62 58 <div class="textarea editor">
63 59 ${h.textarea('description',cols=23,rows=5,class_="medium")}
64 60 <% metatags_url = h.literal('''<a href="#metatagsShow" onclick="$('#meta-tags-desc').toggle();return false">meta-tags</a>''') %>
65 61 <span class="help-block">${_('Plain text format with support of {metatags}. Add a README file for longer descriptions').format(metatags=metatags_url)|n}</span>
66 62 <span id="meta-tags-desc" style="display: none">
67 63 <%namespace name="dt" file="/data_table/_dt_elements.mako"/>
68 64 ${dt.metatags_help()}
69 65 </span>
70 66 </div>
71 67 </div>
72 68
73 69 <div class="field">
74 70 <div class="label">
75 71 <label for="landing_rev">${_('Landing commit')}:</label>
76 72 </div>
77 73 <div class="select">
78 74 ${h.select('landing_rev','',c.landing_revs,class_="medium")}
79 75 <span class="help-block">${_('The default commit for file pages, downloads, full text search index, and README generation.')}</span>
80 76 </div>
81 77 </div>
82 78
83 79 <div class="field">
84 80 <div class="label label-checkbox">
85 81 <label for="private">${_('Copy permissions')}:</label>
86 82 </div>
87 83 <div class="checkboxes">
88 84 ${h.checkbox('copy_permissions',value="True", checked="checked")}
89 85 <span class="help-block">${_('Copy permissions from parent repository.')}</span>
90 86 </div>
91 87 </div>
92 88
93 89 <div class="field">
94 90 <div class="label label-checkbox">
95 91 <label for="private">${_('Private')}:</label>
96 92 </div>
97 93 <div class="checkboxes">
98 94 ${h.checkbox('private',value="True")}
99 95 <span class="help-block">${_('Private repositories are only visible to people explicitly added as collaborators.')}</span>
100 96 </div>
101 97 </div>
102 98
103 99 <div class="buttons">
104 100 ${h.submit('',_('Fork this Repository'),class_="btn")}
105 101 </div>
106 102 </div>
107 103 </div>
108 104 ${h.end_form()}
109 105 </div>
110 106 <script>
111 107 $(document).ready(function(){
112 108 $("#repo_group").select2({
113 109 'dropdownAutoWidth': true,
114 110 'containerCssClass': "drop-menu",
115 111 'dropdownCssClass': "drop-menu-dropdown",
116 112 'width': "resolve"
117 113 });
118 114 $("#landing_rev").select2({
119 115 'containerCssClass': "drop-menu",
120 116 'dropdownCssClass': "drop-menu-dropdown",
121 117 'minimumResultsForSearch': -1
122 118 });
123 119 $('#repo_name').focus();
124 120
125 121 $('#select_my_group').on('click', function(e){
126 122 e.preventDefault();
127 123 $("#repo_group").val($(this).data('personalGroupId')).trigger("change");
128 124 })
129 125 })
130 126 </script>
131 127 </%def>
@@ -1,548 +1,544 b''
1 1 <%inherit file="/base/base.mako"/>
2 2 <%namespace name="dt" file="/data_table/_dt_elements.mako"/>
3 3
4 4 <%def name="title()">
5 5 ${c.repo_name} ${_('New pull request')}
6 6 </%def>
7 7
8 8 <%def name="breadcrumbs_links()">
9 9 ${_('New pull request')}
10 10 </%def>
11 11
12 12 <%def name="menu_bar_nav()">
13 13 ${self.menu_items(active='repositories')}
14 14 </%def>
15 15
16 16 <%def name="menu_bar_subnav()">
17 17 ${self.repo_menu(active='showpullrequest')}
18 18 </%def>
19 19
20 20 <%def name="main()">
21 21 <div class="box">
22 <div class="title">
23 ${self.repo_page_title(c.rhodecode_db_repo)}
24 </div>
25
26 22 ${h.secure_form(h.route_path('pullrequest_create', repo_name=c.repo_name, _query=request.GET.mixed()), id='pull_request_form', request=request)}
27 23
28 24 ${self.breadcrumbs()}
29 25
30 26 <div class="box pr-summary">
31 27
32 28 <div class="summary-details block-left">
33 29
34 30
35 31 <div class="pr-details-title">
36 32 ${_('Summary')}
37 33 </div>
38 34
39 35 <div class="form" style="padding-top: 10px">
40 36 <!-- fields -->
41 37
42 38 <div class="fields" >
43 39
44 40 <div class="field">
45 41 <div class="label">
46 42 <label for="pullrequest_title">${_('Title')}:</label>
47 43 </div>
48 44 <div class="input">
49 45 ${h.text('pullrequest_title', c.default_title, class_="medium autogenerated-title")}
50 46 </div>
51 47 </div>
52 48
53 49 <div class="field">
54 50 <div class="label label-textarea">
55 51 <label for="pullrequest_desc">${_('Description')}:</label>
56 52 </div>
57 53 <div class="textarea text-area editor">
58 54 <input id="pr-renderer-input" type="hidden" name="description_renderer" value="${c.visual.default_renderer}">
59 55 ${dt.markup_form('pullrequest_desc')}
60 56 </div>
61 57 </div>
62 58
63 59 <div class="field">
64 60 <div class="label label-textarea">
65 61 <label for="commit_flow">${_('Commit flow')}:</label>
66 62 </div>
67 63
68 64 ## TODO: johbo: Abusing the "content" class here to get the
69 65 ## desired effect. Should be replaced by a proper solution.
70 66
71 67 ##ORG
72 68 <div class="content">
73 69 <strong>${_('Source repository')}:</strong>
74 70 ${c.rhodecode_db_repo.description}
75 71 </div>
76 72 <div class="content">
77 73 ${h.hidden('source_repo')}
78 74 ${h.hidden('source_ref')}
79 75 </div>
80 76
81 77 ##OTHER, most Probably the PARENT OF THIS FORK
82 78 <div class="content">
83 79 ## filled with JS
84 80 <div id="target_repo_desc"></div>
85 81 </div>
86 82
87 83 <div class="content">
88 84 ${h.hidden('target_repo')}
89 85 ${h.hidden('target_ref')}
90 86 <span id="target_ref_loading" style="display: none">
91 87 ${_('Loading refs...')}
92 88 </span>
93 89 </div>
94 90 </div>
95 91
96 92 <div class="field">
97 93 <div class="label label-textarea">
98 94 <label for="pullrequest_submit"></label>
99 95 </div>
100 96 <div class="input">
101 97 <div class="pr-submit-button">
102 98 <input id="pr_submit" class="btn" name="save" type="submit" value="${_('Submit Pull Request')}">
103 99 </div>
104 100 <div id="pr_open_message"></div>
105 101 </div>
106 102 </div>
107 103
108 104 <div class="pr-spacing-container"></div>
109 105 </div>
110 106 </div>
111 107 </div>
112 108 <div>
113 109 ## AUTHOR
114 110 <div class="reviewers-title block-right">
115 111 <div class="pr-details-title">
116 112 ${_('Author of this pull request')}
117 113 </div>
118 114 </div>
119 115 <div class="block-right pr-details-content reviewers">
120 116 <ul class="group_members">
121 117 <li>
122 118 ${self.gravatar_with_user(c.rhodecode_user.email, 16)}
123 119 </li>
124 120 </ul>
125 121 </div>
126 122
127 123 ## REVIEW RULES
128 124 <div id="review_rules" style="display: none" class="reviewers-title block-right">
129 125 <div class="pr-details-title">
130 126 ${_('Reviewer rules')}
131 127 </div>
132 128 <div class="pr-reviewer-rules">
133 129 ## review rules will be appended here, by default reviewers logic
134 130 </div>
135 131 </div>
136 132
137 133 ## REVIEWERS
138 134 <div class="reviewers-title block-right">
139 135 <div class="pr-details-title">
140 136 ${_('Pull request reviewers')}
141 137 <span class="calculate-reviewers"> - ${_('loading...')}</span>
142 138 </div>
143 139 </div>
144 140 <div id="reviewers" class="block-right pr-details-content reviewers">
145 141 ## members goes here, filled via JS based on initial selection !
146 142 <input type="hidden" name="__start__" value="review_members:sequence">
147 143 <ul id="review_members" class="group_members"></ul>
148 144 <input type="hidden" name="__end__" value="review_members:sequence">
149 145 <div id="add_reviewer_input" class='ac'>
150 146 <div class="reviewer_ac">
151 147 ${h.text('user', class_='ac-input', placeholder=_('Add reviewer or reviewer group'))}
152 148 <div id="reviewers_container"></div>
153 149 </div>
154 150 </div>
155 151 </div>
156 152 </div>
157 153 </div>
158 154 <div class="box">
159 155 <div>
160 156 ## overview pulled by ajax
161 157 <div id="pull_request_overview"></div>
162 158 </div>
163 159 </div>
164 160 ${h.end_form()}
165 161 </div>
166 162
167 163 <script type="text/javascript">
168 164 $(function(){
169 165 var defaultSourceRepo = '${c.default_repo_data['source_repo_name']}';
170 166 var defaultSourceRepoData = ${c.default_repo_data['source_refs_json']|n};
171 167 var defaultTargetRepo = '${c.default_repo_data['target_repo_name']}';
172 168 var defaultTargetRepoData = ${c.default_repo_data['target_refs_json']|n};
173 169
174 170 var $pullRequestForm = $('#pull_request_form');
175 171 var $pullRequestSubmit = $('#pr_submit', $pullRequestForm);
176 172 var $sourceRepo = $('#source_repo', $pullRequestForm);
177 173 var $targetRepo = $('#target_repo', $pullRequestForm);
178 174 var $sourceRef = $('#source_ref', $pullRequestForm);
179 175 var $targetRef = $('#target_ref', $pullRequestForm);
180 176
181 177 var sourceRepo = function() { return $sourceRepo.eq(0).val() };
182 178 var sourceRef = function() { return $sourceRef.eq(0).val().split(':') };
183 179
184 180 var targetRepo = function() { return $targetRepo.eq(0).val() };
185 181 var targetRef = function() { return $targetRef.eq(0).val().split(':') };
186 182
187 183 var calculateContainerWidth = function() {
188 184 var maxWidth = 0;
189 185 var repoSelect2Containers = ['#source_repo', '#target_repo'];
190 186 $.each(repoSelect2Containers, function(idx, value) {
191 187 $(value).select2('container').width('auto');
192 188 var curWidth = $(value).select2('container').width();
193 189 if (maxWidth <= curWidth) {
194 190 maxWidth = curWidth;
195 191 }
196 192 $.each(repoSelect2Containers, function(idx, value) {
197 193 $(value).select2('container').width(maxWidth + 10);
198 194 });
199 195 });
200 196 };
201 197
202 198 var initRefSelection = function(selectedRef) {
203 199 return function(element, callback) {
204 200 // translate our select2 id into a text, it's a mapping to show
205 201 // simple label when selecting by internal ID.
206 202 var id, refData;
207 203 if (selectedRef === undefined || selectedRef === null) {
208 204 id = element.val();
209 205 refData = element.val().split(':');
210 206
211 207 if (refData.length !== 3){
212 208 refData = ["", "", ""]
213 209 }
214 210 } else {
215 211 id = selectedRef;
216 212 refData = selectedRef.split(':');
217 213 }
218 214
219 215 var text = refData[1];
220 216 if (refData[0] === 'rev') {
221 217 text = text.substring(0, 12);
222 218 }
223 219
224 220 var data = {id: id, text: text};
225 221 callback(data);
226 222 };
227 223 };
228 224
229 225 var formatRefSelection = function(data, container, escapeMarkup) {
230 226 var prefix = '';
231 227 var refData = data.id.split(':');
232 228 if (refData[0] === 'branch') {
233 229 prefix = '<i class="icon-branch"></i>';
234 230 }
235 231 else if (refData[0] === 'book') {
236 232 prefix = '<i class="icon-bookmark"></i>';
237 233 }
238 234 else if (refData[0] === 'tag') {
239 235 prefix = '<i class="icon-tag"></i>';
240 236 }
241 237
242 238 var originalOption = data.element;
243 239 return prefix + escapeMarkup(data.text);
244 240 };formatSelection:
245 241
246 242 // custom code mirror
247 243 var codeMirrorInstance = $('#pullrequest_desc').get(0).MarkupForm.cm;
248 244
249 245 reviewersController = new ReviewersController();
250 246
251 247 var queryTargetRepo = function(self, query) {
252 248 // cache ALL results if query is empty
253 249 var cacheKey = query.term || '__';
254 250 var cachedData = self.cachedDataSource[cacheKey];
255 251
256 252 if (cachedData) {
257 253 query.callback({results: cachedData.results});
258 254 } else {
259 255 $.ajax({
260 256 url: pyroutes.url('pullrequest_repo_targets', {'repo_name': templateContext.repo_name}),
261 257 data: {query: query.term},
262 258 dataType: 'json',
263 259 type: 'GET',
264 260 success: function(data) {
265 261 self.cachedDataSource[cacheKey] = data;
266 262 query.callback({results: data.results});
267 263 },
268 264 error: function(data, textStatus, errorThrown) {
269 265 alert(
270 266 "Error while fetching entries.\nError code {0} ({1}).".format(data.status, data.statusText));
271 267 }
272 268 });
273 269 }
274 270 };
275 271
276 272 var queryTargetRefs = function(initialData, query) {
277 273 var data = {results: []};
278 274 // filter initialData
279 275 $.each(initialData, function() {
280 276 var section = this.text;
281 277 var children = [];
282 278 $.each(this.children, function() {
283 279 if (query.term.length === 0 ||
284 280 this.text.toUpperCase().indexOf(query.term.toUpperCase()) >= 0 ) {
285 281 children.push({'id': this.id, 'text': this.text})
286 282 }
287 283 });
288 284 data.results.push({'text': section, 'children': children})
289 285 });
290 286 query.callback({results: data.results});
291 287 };
292 288
293 289 var loadRepoRefDiffPreview = function() {
294 290
295 291 var url_data = {
296 292 'repo_name': targetRepo(),
297 293 'target_repo': sourceRepo(),
298 294 'source_ref': targetRef()[2],
299 295 'source_ref_type': 'rev',
300 296 'target_ref': sourceRef()[2],
301 297 'target_ref_type': 'rev',
302 298 'merge': true,
303 299 '_': Date.now() // bypass browser caching
304 300 }; // gather the source/target ref and repo here
305 301
306 302 if (sourceRef().length !== 3 || targetRef().length !== 3) {
307 303 prButtonLock(true, "${_('Please select source and target')}");
308 304 return;
309 305 }
310 306 var url = pyroutes.url('repo_compare', url_data);
311 307
312 308 // lock PR button, so we cannot send PR before it's calculated
313 309 prButtonLock(true, "${_('Loading compare ...')}", 'compare');
314 310
315 311 if (loadRepoRefDiffPreview._currentRequest) {
316 312 loadRepoRefDiffPreview._currentRequest.abort();
317 313 }
318 314
319 315 loadRepoRefDiffPreview._currentRequest = $.get(url)
320 316 .error(function(data, textStatus, errorThrown) {
321 317 if (textStatus !== 'abort') {
322 318 alert(
323 319 "Error while processing request.\nError code {0} ({1}).".format(
324 320 data.status, data.statusText));
325 321 }
326 322
327 323 })
328 324 .done(function(data) {
329 325 loadRepoRefDiffPreview._currentRequest = null;
330 326 $('#pull_request_overview').html(data);
331 327
332 328 var commitElements = $(data).find('tr[commit_id]');
333 329
334 330 var prTitleAndDesc = getTitleAndDescription(
335 331 sourceRef()[1], commitElements, 5);
336 332
337 333 var title = prTitleAndDesc[0];
338 334 var proposedDescription = prTitleAndDesc[1];
339 335
340 336 var useGeneratedTitle = (
341 337 $('#pullrequest_title').hasClass('autogenerated-title') ||
342 338 $('#pullrequest_title').val() === "");
343 339
344 340 if (title && useGeneratedTitle) {
345 341 // use generated title if we haven't specified our own
346 342 $('#pullrequest_title').val(title);
347 343 $('#pullrequest_title').addClass('autogenerated-title');
348 344
349 345 }
350 346
351 347 var useGeneratedDescription = (
352 348 !codeMirrorInstance._userDefinedValue ||
353 349 codeMirrorInstance.getValue() === "");
354 350
355 351 if (proposedDescription && useGeneratedDescription) {
356 352 // set proposed content, if we haven't defined our own,
357 353 // or we don't have description written
358 354 codeMirrorInstance._userDefinedValue = false; // reset state
359 355 codeMirrorInstance.setValue(proposedDescription);
360 356 }
361 357
362 358 // refresh our codeMirror so events kicks in and it's change aware
363 359 codeMirrorInstance.refresh();
364 360
365 361 var msg = '';
366 362 if (commitElements.length === 1) {
367 363 msg = "${_ungettext('This pull request will consist of __COMMITS__ commit.', 'This pull request will consist of __COMMITS__ commits.', 1)}";
368 364 } else {
369 365 msg = "${_ungettext('This pull request will consist of __COMMITS__ commit.', 'This pull request will consist of __COMMITS__ commits.', 2)}";
370 366 }
371 367
372 368 msg += ' <a id="pull_request_overview_url" href="{0}" target="_blank">${_('Show detailed compare.')}</a>'.format(url);
373 369
374 370 if (commitElements.length) {
375 371 var commitsLink = '<a href="#pull_request_overview"><strong>{0}</strong></a>'.format(commitElements.length);
376 372 prButtonLock(false, msg.replace('__COMMITS__', commitsLink), 'compare');
377 373 }
378 374 else {
379 375 prButtonLock(true, "${_('There are no commits to merge.')}", 'compare');
380 376 }
381 377
382 378
383 379 });
384 380 };
385 381
386 382 var Select2Box = function(element, overrides) {
387 383 var globalDefaults = {
388 384 dropdownAutoWidth: true,
389 385 containerCssClass: "drop-menu",
390 386 dropdownCssClass: "drop-menu-dropdown"
391 387 };
392 388
393 389 var initSelect2 = function(defaultOptions) {
394 390 var options = jQuery.extend(globalDefaults, defaultOptions, overrides);
395 391 element.select2(options);
396 392 };
397 393
398 394 return {
399 395 initRef: function() {
400 396 var defaultOptions = {
401 397 minimumResultsForSearch: 5,
402 398 formatSelection: formatRefSelection
403 399 };
404 400
405 401 initSelect2(defaultOptions);
406 402 },
407 403
408 404 initRepo: function(defaultValue, readOnly) {
409 405 var defaultOptions = {
410 406 initSelection : function (element, callback) {
411 407 var data = {id: defaultValue, text: defaultValue};
412 408 callback(data);
413 409 }
414 410 };
415 411
416 412 initSelect2(defaultOptions);
417 413
418 414 element.select2('val', defaultSourceRepo);
419 415 if (readOnly === true) {
420 416 element.select2('readonly', true);
421 417 }
422 418 }
423 419 };
424 420 };
425 421
426 422 var initTargetRefs = function(refsData, selectedRef) {
427 423
428 424 Select2Box($targetRef, {
429 425 placeholder: "${_('Select commit reference')}",
430 426 query: function(query) {
431 427 queryTargetRefs(refsData, query);
432 428 },
433 429 initSelection : initRefSelection(selectedRef)
434 430 }).initRef();
435 431
436 432 if (!(selectedRef === undefined)) {
437 433 $targetRef.select2('val', selectedRef);
438 434 }
439 435 };
440 436
441 437 var targetRepoChanged = function(repoData) {
442 438 // generate new DESC of target repo displayed next to select
443 439 var prLink = pyroutes.url('pullrequest_new', {'repo_name': repoData['name']});
444 440 $('#target_repo_desc').html(
445 441 "<strong>${_('Target repository')}</strong>: {0}. <a href=\"{1}\">Switch base, and use as source.</a>".format(repoData['description'], prLink)
446 442 );
447 443
448 444 // generate dynamic select2 for refs.
449 445 initTargetRefs(repoData['refs']['select2_refs'],
450 446 repoData['refs']['selected_ref']);
451 447
452 448 };
453 449
454 450 var sourceRefSelect2 = Select2Box($sourceRef, {
455 451 placeholder: "${_('Select commit reference')}",
456 452 query: function(query) {
457 453 var initialData = defaultSourceRepoData['refs']['select2_refs'];
458 454 queryTargetRefs(initialData, query)
459 455 },
460 456 initSelection: initRefSelection()
461 457 }
462 458 );
463 459
464 460 var sourceRepoSelect2 = Select2Box($sourceRepo, {
465 461 query: function(query) {}
466 462 });
467 463
468 464 var targetRepoSelect2 = Select2Box($targetRepo, {
469 465 cachedDataSource: {},
470 466 query: $.debounce(250, function(query) {
471 467 queryTargetRepo(this, query);
472 468 }),
473 469 formatResult: formatRepoResult
474 470 });
475 471
476 472 sourceRefSelect2.initRef();
477 473
478 474 sourceRepoSelect2.initRepo(defaultSourceRepo, true);
479 475
480 476 targetRepoSelect2.initRepo(defaultTargetRepo, false);
481 477
482 478 $sourceRef.on('change', function(e){
483 479 loadRepoRefDiffPreview();
484 480 reviewersController.loadDefaultReviewers(
485 481 sourceRepo(), sourceRef(), targetRepo(), targetRef());
486 482 });
487 483
488 484 $targetRef.on('change', function(e){
489 485 loadRepoRefDiffPreview();
490 486 reviewersController.loadDefaultReviewers(
491 487 sourceRepo(), sourceRef(), targetRepo(), targetRef());
492 488 });
493 489
494 490 $targetRepo.on('change', function(e){
495 491 var repoName = $(this).val();
496 492 calculateContainerWidth();
497 493 $targetRef.select2('destroy');
498 494 $('#target_ref_loading').show();
499 495
500 496 $.ajax({
501 497 url: pyroutes.url('pullrequest_repo_refs',
502 498 {'repo_name': templateContext.repo_name, 'target_repo_name':repoName}),
503 499 data: {},
504 500 dataType: 'json',
505 501 type: 'GET',
506 502 success: function(data) {
507 503 $('#target_ref_loading').hide();
508 504 targetRepoChanged(data);
509 505 loadRepoRefDiffPreview();
510 506 },
511 507 error: function(data, textStatus, errorThrown) {
512 508 alert("Error while fetching entries.\nError code {0} ({1}).".format(data.status, data.statusText));
513 509 }
514 510 })
515 511
516 512 });
517 513
518 514 $pullRequestForm.on('submit', function(e){
519 515 // Flush changes into textarea
520 516 codeMirrorInstance.save();
521 517 prButtonLock(true, null, 'all');
522 518 });
523 519
524 520 prButtonLock(true, "${_('Please select source and target')}", 'all');
525 521
526 522 // auto-load on init, the target refs select2
527 523 calculateContainerWidth();
528 524 targetRepoChanged(defaultTargetRepoData);
529 525
530 526 $('#pullrequest_title').on('keyup', function(e){
531 527 $(this).removeClass('autogenerated-title');
532 528 });
533 529
534 530 % if c.default_source_ref:
535 531 // in case we have a pre-selected value, use it now
536 532 $sourceRef.select2('val', '${c.default_source_ref}');
537 533 // diff preview load
538 534 loadRepoRefDiffPreview();
539 535 // default reviewers
540 536 reviewersController.loadDefaultReviewers(
541 537 sourceRepo(), sourceRef(), targetRepo(), targetRef());
542 538 % endif
543 539
544 540 ReviewerAutoComplete('#user');
545 541 });
546 542 </script>
547 543
548 544 </%def>
@@ -1,146 +1,144 b''
1 1 <%inherit file="/base/base.mako"/>
2 2
3 3 <%def name="title()">
4 4 ${_('%s Pull Requests') % c.repo_name}
5 5 %if c.rhodecode_name:
6 6 &middot; ${h.branding(c.rhodecode_name)}
7 7 %endif
8 8 </%def>
9 9
10 10 <%def name="breadcrumbs_links()">
11 11
12 12 </%def>
13 13
14 14 <%def name="menu_bar_nav()">
15 15 ${self.menu_items(active='repositories')}
16 16 </%def>
17 17
18 18
19 19 <%def name="menu_bar_subnav()">
20 20 ${self.repo_menu(active='showpullrequest')}
21 21 </%def>
22 22
23 23
24 24 <%def name="main()">
25 25 <div class="box">
26 26 <div class="title">
27 ${self.repo_page_title(c.rhodecode_db_repo)}
28
29 27 <ul class="links">
30 28 <li>
31 29 %if c.rhodecode_user.username != h.DEFAULT_USER:
32 30 <span>
33 31 <a id="open_new_pull_request" class="btn btn-small btn-success" href="${h.route_path('pullrequest_new',repo_name=c.repo_name)}">
34 32 ${_('Open new Pull Request')}
35 33 </a>
36 34 </span>
37 35 %endif
38 36 </li>
39 37 </ul>
40 38
41 39 ${self.breadcrumbs()}
42 40 </div>
43 41
44 42 <div class="sidebar-col-wrapper">
45 43 ##main
46 44 <div class="sidebar">
47 45 <ul class="nav nav-pills nav-stacked">
48 46 <li class="${'active' if c.active=='open' else ''}"><a href="${h.route_path('pullrequest_show_all',repo_name=c.repo_name, _query={'source':0})}">${_('Opened')}</a></li>
49 47 <li class="${'active' if c.active=='my' else ''}"><a href="${h.route_path('pullrequest_show_all',repo_name=c.repo_name, _query={'source':0,'my':1})}">${_('Opened by me')}</a></li>
50 48 <li class="${'active' if c.active=='awaiting' else ''}"><a href="${h.route_path('pullrequest_show_all',repo_name=c.repo_name, _query={'source':0,'awaiting_review':1})}">${_('Awaiting review')}</a></li>
51 49 <li class="${'active' if c.active=='awaiting_my' else ''}"><a href="${h.route_path('pullrequest_show_all',repo_name=c.repo_name, _query={'source':0,'awaiting_my_review':1})}">${_('Awaiting my review')}</a></li>
52 50 <li class="${'active' if c.active=='closed' else ''}"><a href="${h.route_path('pullrequest_show_all',repo_name=c.repo_name, _query={'source':0,'closed':1})}">${_('Closed')}</a></li>
53 51 <li class="${'active' if c.active=='source' else ''}"><a href="${h.route_path('pullrequest_show_all',repo_name=c.repo_name, _query={'source':1})}">${_('From this repo')}</a></li>
54 52 </ul>
55 53 </div>
56 54
57 55 <div class="main-content-full-width">
58 56 <div class="panel panel-default">
59 57 <div class="panel-heading">
60 58 <h3 class="panel-title">
61 59 %if c.source:
62 60 ${_('Pull Requests from %(repo_name)s repository') % {'repo_name': c.repo_name}}
63 61 %elif c.closed:
64 62 ${_('Closed Pull Requests to repository %(repo_name)s') % {'repo_name': c.repo_name}}
65 63 %elif c.my:
66 64 ${_('Pull Requests to %(repo_name)s repository opened by me') % {'repo_name': c.repo_name}}
67 65 %elif c.awaiting_review:
68 66 ${_('Pull Requests to %(repo_name)s repository awaiting review') % {'repo_name': c.repo_name}}
69 67 %elif c.awaiting_my_review:
70 68 ${_('Pull Requests to %(repo_name)s repository awaiting my review') % {'repo_name': c.repo_name}}
71 69 %else:
72 70 ${_('Pull Requests to %(repo_name)s repository') % {'repo_name': c.repo_name}}
73 71 %endif
74 72 </h3>
75 73 </div>
76 74 <div class="panel-body panel-body-min-height">
77 75 <table id="pull_request_list_table" class="display"></table>
78 76 </div>
79 77 </div>
80 78 </div>
81 79 </div>
82 80 </div>
83 81
84 82 <script type="text/javascript">
85 83 $(document).ready(function() {
86 84
87 85 var $pullRequestListTable = $('#pull_request_list_table');
88 86
89 87 // object list
90 88 $pullRequestListTable.DataTable({
91 89 processing: true,
92 90 serverSide: true,
93 91 ajax: {
94 92 "url": "${h.route_path('pullrequest_show_all_data', repo_name=c.repo_name)}",
95 93 "data": function (d) {
96 94 d.source = "${c.source}";
97 95 d.closed = "${c.closed}";
98 96 d.my = "${c.my}";
99 97 d.awaiting_review = "${c.awaiting_review}";
100 98 d.awaiting_my_review = "${c.awaiting_my_review}";
101 99 }
102 100 },
103 101 dom: 'rtp',
104 102 pageLength: ${c.visual.dashboard_items},
105 103 order: [[ 1, "desc" ]],
106 104 columns: [
107 105 { data: {"_": "status",
108 106 "sort": "status"}, title: "", className: "td-status", orderable: false},
109 107 { data: {"_": "name",
110 108 "sort": "name_raw"}, title: "${_('Name')}", className: "td-componentname", "type": "num" },
111 109 { data: {"_": "author",
112 110 "sort": "author_raw"}, title: "${_('Author')}", className: "td-user", orderable: false },
113 111 { data: {"_": "title",
114 112 "sort": "title"}, title: "${_('Title')}", className: "td-description" },
115 113 { data: {"_": "comments",
116 114 "sort": "comments_raw"}, title: "", className: "td-comments", orderable: false},
117 115 { data: {"_": "updated_on",
118 116 "sort": "updated_on_raw"}, title: "${_('Last Update')}", className: "td-time" }
119 117 ],
120 118 language: {
121 119 paginate: DEFAULT_GRID_PAGINATION,
122 120 sProcessing: _gettext('loading...'),
123 121 emptyTable: _gettext("No pull requests available yet.")
124 122 },
125 123 "drawCallback": function( settings, json ) {
126 124 timeagoActivate();
127 125 },
128 126 "createdRow": function ( row, data, index ) {
129 127 if (data['closed']) {
130 128 $(row).addClass('closed');
131 129 }
132 130 }
133 131 });
134 132
135 133 $pullRequestListTable.on('xhr.dt', function(e, settings, json, xhr){
136 134 $pullRequestListTable.css('opacity', 1);
137 135 });
138 136
139 137 $pullRequestListTable.on('preXhr.dt', function(e, settings, data){
140 138 $pullRequestListTable.css('opacity', 0.3);
141 139 });
142 140
143 141 });
144 142
145 143 </script>
146 144 </%def>
@@ -1,222 +1,222 b''
1 1 ## -*- coding: utf-8 -*-
2 2 <%inherit file="/base/base.mako"/>
3 3
4 4 <%def name="title()">
5 5 %if c.repo_name:
6 6 ${_('Search inside repository {repo_name}').format(repo_name=c.repo_name)}
7 7 %elif c.repo_group_name:
8 8 ${_('Search inside repository group {repo_group_name}').format(repo_group_name=c.repo_group_name)}
9 9 %else:
10 10 ${_('Search inside all accessible repositories')}
11 11 %endif
12 12 %if c.rhodecode_name:
13 13 &middot; ${h.branding(c.rhodecode_name)}
14 14 %endif
15 15 </%def>
16 16
17 17 <%def name="breadcrumbs_links()">
18 18 %if c.repo_name:
19 19 ${_('Search inside repository {repo_name}').format(repo_name=c.repo_name)}
20 20 %elif c.repo_group_name:
21 21 ${_('Search inside repository group {repo_group_name}').format(repo_group_name=c.repo_group_name)}
22 22 %else:
23 23 ${_('Search inside all accessible repositories')}
24 24 %endif
25 25
26 26 </%def>
27 27
28 28 <%def name="menu_bar_nav()">
29 29 %if c.repo_name:
30 30 ${self.menu_items(active='search')}
31 31 %elif c.repo_group_name:
32 32 ${self.menu_items(active='search')}
33 33 %else:
34 34 ${self.menu_items(active='search')}
35 35 %endif
36 36 </%def>
37 37
38 38 <%def name="menu_bar_subnav()">
39 39 %if c.repo_name:
40 40 ${self.repo_menu(active='search')}
41 41 %elif c.repo_group_name:
42 42 ${self.repo_group_menu(active='search')}
43 43 %endif
44 44 </%def>
45 45
46 46 <%def name="repo_icon(db_repo)">
47 47 %if h.is_hg(db_repo):
48 48 <i class="icon-hg"></i>
49 49 %endif
50 50 %if h.is_git(db_repo):
51 51 <i class="icon-git"></i>
52 52 %endif
53 53 %if h.is_svn(db_repo):
54 54 <i class="icon-svn"></i>
55 55 %endif
56 56 </%def>
57 57
58 58 <%def name="repo_group_icon()">
59 59 <i class="icon-folder-close"></i>
60 60 </%def>
61 61
62 62 <%def name="main()">
63 63 <div class="box">
64 64 %if c.repo_name:
65 65 <!-- box / title -->
66 <div class="title">
66 <!--div class="title">
67 67 ${self.repo_page_title(c.rhodecode_db_repo)}
68 </div>
68 </div-->
69 69 ${h.form(h.route_path('search_repo',repo_name=c.repo_name),method='get')}
70 70 %elif c.repo_group_name:
71 71 <!-- box / title -->
72 <div class="title">
72 <!--div class="title">
73 73 ${self.repo_group_page_title(c.repo_group)}
74 </div>
74 </div-->
75 75 ${h.form(h.route_path('search_repo_group',repo_group_name=c.repo_group_name),method='get')}
76 76 %else:
77 77 <!-- box / title -->
78 78 <div class="title">
79 79 ${self.breadcrumbs()}
80 80 <ul class="links">&nbsp;</ul>
81 81 </div>
82 82 <!-- end box / title -->
83 83 ${h.form(h.route_path('search'), method='get')}
84 84 %endif
85 85 <div class="form search-form">
86 86 <div class="fields">
87 87
88 88 ${h.text('q', c.cur_query, placeholder="Enter query...")}
89 89
90 90 ${h.select('type',c.search_type,[('content',_('Files')), ('path',_('File path')),('commit',_('Commits'))],id='id_search_type')}
91 91 ${h.hidden('max_lines', '10')}
92 92
93 93 <input type="submit" value="${_('Search')}" class="btn"/>
94 94 <br/>
95 95
96 96 <div class="search-tags">
97 97 <span class="tag tag8">
98 98 %if c.repo_name:
99 99 <a href="${h.route_path('search', _query={'q': c.cur_query, 'type': request.GET.get('type', 'content')})}">${_('Global Search')}</a>
100 100 %elif c.repo_group_name:
101 101 <a href="${h.route_path('search', _query={'q': c.cur_query, 'type': request.GET.get('type', 'content')})}">${_('Global Search')}</a>
102 102 % else:
103 103 ${_('Global Search')}
104 104 %endif
105 105 </span>
106 106
107 107 %if c.repo_name:
108 108 Β»
109 109 <span class="tag tag8">
110 110 ${repo_icon(c.rhodecode_db_repo)}
111 111 ${c.repo_name}
112 112 </span>
113 113
114 114 %elif c.repo_group_name:
115 115 Β»
116 116 <span class="tag tag8">
117 117 ${repo_group_icon()}
118 118 ${c.repo_group_name}
119 119 </span>
120 120 %endif
121 121
122 122
123 123 % for search_tag in c.search_tags:
124 124 <br/><span class="tag disabled" style="margin-top: 3px">${search_tag}</span>
125 125 % endfor
126 126
127 127 </div>
128 128
129 129 <div class="search-feedback-items">
130 130 % for error in c.errors:
131 131 <span class="error-message">
132 132 % for k,v in error.asdict().items():
133 133 ${k} - ${v}
134 134 % endfor
135 135 </span>
136 136 % endfor
137 137 <div class="field">
138 138 <p class="filterexample" style="position: inherit" onclick="$('#search-help').toggle()">${_('Query Langague examples')}</p>
139 139 <pre id="search-help" style="display: none">\
140 140
141 141 % if c.searcher.name == 'whoosh':
142 142 Example filter terms for `Whoosh` search:
143 143 query lang: <a href="${c.searcher.query_lang_doc}">Whoosh Query Language</a>
144 144 Whoosh has limited query capabilities. For advanced search use ElasticSearch 6 from RhodeCode EE edition.
145 145
146 146 Generate wildcards using '*' character:
147 147 "repo_name:vcs*" - search everything starting with 'vcs'
148 148 "repo_name:*vcs*" - search for repository containing 'vcs'
149 149
150 150 Optional AND / OR operators in queries
151 151 "repo_name:vcs OR repo_name:test"
152 152 "owner:test AND repo_name:test*" AND extension:py
153 153
154 154 Move advanced search is available via ElasticSearch6 backend in EE edition.
155 155 % elif c.searcher.name == 'elasticsearch' and c.searcher.es_version == '2':
156 156 Example filter terms for `ElasticSearch-${c.searcher.es_version}`search:
157 157 ElasticSearch-2 has limited query capabilities. For advanced search use ElasticSearch 6 from RhodeCode EE edition.
158 158
159 159 search type: content (File Content)
160 160 indexed fields: content
161 161
162 162 # search for `fix` string in all files
163 163 fix
164 164
165 165 search type: commit (Commit message)
166 166 indexed fields: message
167 167
168 168 search type: path (File name)
169 169 indexed fields: path
170 170
171 171 % else:
172 172 Example filter terms for `ElasticSearch-${c.searcher.es_version}`search:
173 173 query lang: <a href="${c.searcher.query_lang_doc}">ES 6 Query Language</a>
174 174 The reserved characters needed espace by `\`: + - = && || > < ! ( ) { } [ ] ^ " ~ * ? : \ /
175 175 % for handler in c.searcher.get_handlers().values():
176 176
177 177 search type: ${handler.search_type_label}
178 178 *indexed fields*: ${', '.join( [('\n ' if x[0]%4==0 else '')+x[1] for x in enumerate(handler.es_6_field_names)])}
179 179 % for entry in handler.es_6_example_queries:
180 180 ${entry.rstrip()}
181 181 % endfor
182 182 % endfor
183 183
184 184 % endif
185 185 </pre>
186 186 </div>
187 187
188 188 <div class="field">${c.runtime}</div>
189 189 </div>
190 190 </div>
191 191 </div>
192 192
193 193 ${h.end_form()}
194 194 <div class="search">
195 195 % if c.search_type == 'content':
196 196 <%include file='search_content.mako'/>
197 197 % elif c.search_type == 'path':
198 198 <%include file='search_path.mako'/>
199 199 % elif c.search_type == 'commit':
200 200 <%include file='search_commit.mako'/>
201 201 % elif c.search_type == 'repository':
202 202 <%include file='search_repository.mako'/>
203 203 % endif
204 204 </div>
205 205 </div>
206 206 <script>
207 207 $(document).ready(function(){
208 208 $("#id_search_type").select2({
209 209 'containerCssClass': "drop-menu",
210 210 'dropdownCssClass': "drop-menu-dropdown",
211 211 'dropdownAutoWidth': true,
212 212 'minimumResultsForSearch': -1
213 213 });
214 214
215 215 $('#q').autoGrowInput({maxWidth: 920});
216 216
217 217 setTimeout(function() {
218 218 $('#q').keyup()
219 219 }, 1);
220 220 })
221 221 </script>
222 222 </%def>
@@ -1,128 +1,127 b''
1 1 <%inherit file="/summary/summary_base.mako"/>
2 2
3 3 <%namespace name="components" file="/summary/components.mako"/>
4 4
5 5
6 6 <%def name="menu_bar_subnav()">
7 7 ${self.repo_menu(active='summary')}
8 8 </%def>
9 9
10 10 <%def name="main()">
11 11
12 12 <div class="title">
13 ${self.repo_page_title(c.rhodecode_db_repo)}
14 13 ## Context Action
15 14 <div>
16 15 <ul class="links icon-only-links block-right">
17 16 <li>
18 17 %if c.rhodecode_user.username != h.DEFAULT_USER:
19 18 <a href="${h.route_path('atom_feed_home', repo_name=c.rhodecode_db_repo.repo_name, _query=dict(auth_token=c.rhodecode_user.feed_token))}" title="${_('RSS Feed')}" class="btn btn-sm"><i class="icon-rss-sign"></i>RSS</a>
20 19 %else:
21 20 <a href="${h.route_path('atom_feed_home', repo_name=c.rhodecode_db_repo.repo_name)}" title="${_('RSS Feed')}" class="btn btn-sm"><i class="icon-rss-sign"></i>RSS</a>
22 21 %endif
23 22 </li>
24 23 </ul>
25 24 </div>
26 25 </div>
27 26
28 27 <div id="repo-summary" class="summary">
29 28 ${components.summary_detail(breadcrumbs_links=self.breadcrumbs_links(), show_downloads=True)}
30 29 ${components.summary_stats(gravatar_function=self.gravatar_with_user)}
31 30 </div><!--end repo-summary-->
32 31
33 32
34 33 <div class="box" >
35 34 %if not c.repo_commits:
36 35 <div class="title">
37 36 <h3>${_('Quick start')}</h3>
38 37 </div>
39 38 %endif
40 39 <div class="table">
41 40 <div id="shortlog_data">
42 41 <%include file='summary_commits.mako'/>
43 42 </div>
44 43 </div>
45 44 </div>
46 45
47 46 %if c.readme_data:
48 47 <div id="readme" class="anchor">
49 48 <div class="box" >
50 49 <div class="title" title="${h.tooltip(_('Readme file from commit %s:%s') % (c.rhodecode_db_repo.landing_rev[0], c.rhodecode_db_repo.landing_rev[1]))}">
51 50 <h3 class="breadcrumbs">
52 51 <a href="${h.route_path('repo_files',repo_name=c.repo_name,commit_id=c.rhodecode_db_repo.landing_rev[1],f_path=c.readme_file)}">${c.readme_file}</a>
53 52 </h3>
54 53 </div>
55 54 <div class="readme codeblock">
56 55 <div class="readme_box">
57 56 ${c.readme_data|n}
58 57 </div>
59 58 </div>
60 59 </div>
61 60 </div>
62 61 %endif
63 62
64 63 <script type="text/javascript">
65 64 $(document).ready(function(){
66 65
67 66 var showCloneField = function(clone_url_format){
68 67 $.each(['http', 'http_id', 'ssh'], function (idx, val) {
69 68 if(val === clone_url_format){
70 69 $('#clone_option_' + val).show();
71 70 $('#clone_option').val(val)
72 71 } else {
73 72 $('#clone_option_' + val).hide();
74 73 }
75 74 });
76 75 };
77 76 // default taken from session
78 77 showCloneField(templateContext.session_attrs.clone_url_format);
79 78
80 79 $('#clone_option').on('change', function(e) {
81 80 var selected = $(this).val();
82 81
83 82 storeUserSessionAttr('rc_user_session_attr.clone_url_format', selected);
84 83 showCloneField(selected)
85 84 });
86 85
87 86 var initialCommitData = {
88 87 id: null,
89 88 text: 'tip',
90 89 type: 'tag',
91 90 raw_id: null,
92 91 files_url: null
93 92 };
94 93
95 94 select2RefSwitcher('#download_options', initialCommitData);
96 95
97 96 // on change of download options
98 97 $('#download_options').on('change', function(e) {
99 98 // format of Object {text: "v0.0.3", type: "tag", id: "rev"}
100 99 var ext = '.zip';
101 100 var selected_cs = e.added;
102 101 var fname = e.added.raw_id + ext;
103 102 var href = pyroutes.url('repo_archivefile', {'repo_name': templateContext.repo_name, 'fname':fname});
104 103 // set new label
105 104 $('#archive_link').html('<i class="icon-archive"></i> {0}{1}'.format(escapeHtml(e.added.text), ext));
106 105
107 106 // set new url to button,
108 107 $('#archive_link').attr('href', href)
109 108 });
110 109
111 110
112 111 // calculate size of repository
113 112 calculateSize = function () {
114 113
115 114 var callback = function (data) {
116 115 % if c.show_stats:
117 116 showRepoStats('lang_stats', data);
118 117 % endif
119 118 };
120 119
121 120 showRepoSize('repo_size_container', templateContext.repo_name, templateContext.repo_landing_commit, callback);
122 121
123 122 }
124 123
125 124 })
126 125 </script>
127 126
128 127 </%def>
General Comments 0
You need to be logged in to leave comments. Login now