##// END OF EJS Templates
ui: new commits page....
marcink -
r3882:74da9073 default
parent child Browse files
Show More
@@ -28,7 +28,7 b''
28 "moment": "^2.18.1",
28 "moment": "^2.18.1",
29 "mousetrap": "^1.6.1",
29 "mousetrap": "^1.6.1",
30 "qrious": "^4.0.2",
30 "qrious": "^4.0.2",
31 "sticky-sidebar": "3.3.1",
31 "sticky-sidebar": "3.3.4",
32 "waypoints": "4.0.1",
32 "waypoints": "4.0.1",
33 "webpack": "4.23.1",
33 "webpack": "4.23.1",
34 "webpack-cli": "3.1.2",
34 "webpack-cli": "3.1.2",
@@ -128,6 +128,7 b' class RepoCommitsView(RepoAppView):'
128 c.statuses = []
128 c.statuses = []
129 c.comments = []
129 c.comments = []
130 c.unresolved_comments = []
130 c.unresolved_comments = []
131 c.resolved_comments = []
131 if len(c.commit_ranges) == 1:
132 if len(c.commit_ranges) == 1:
132 commit = c.commit_ranges[0]
133 commit = c.commit_ranges[0]
133 c.comments = CommentsModel().get_comments(
134 c.comments = CommentsModel().get_comments(
@@ -148,6 +149,8 b' class RepoCommitsView(RepoAppView):'
148
149
149 c.unresolved_comments = CommentsModel()\
150 c.unresolved_comments = CommentsModel()\
150 .get_commit_unresolved_todos(commit.raw_id)
151 .get_commit_unresolved_todos(commit.raw_id)
152 c.resolved_comments = CommentsModel()\
153 .get_commit_resolved_todos(commit.raw_id)
151
154
152 diff = None
155 diff = None
153 # Iterate over ranges (default commit view is always one commit)
156 # Iterate over ranges (default commit view is always one commit)
@@ -187,6 +187,23 b' class CommentsModel(BaseModel):'
187
187
188 return todos
188 return todos
189
189
190 def get_commit_resolved_todos(self, commit_id, show_outdated=True):
191
192 todos = Session().query(ChangesetComment) \
193 .filter(ChangesetComment.revision == commit_id) \
194 .filter(ChangesetComment.resolved_by != None) \
195 .filter(ChangesetComment.comment_type
196 == ChangesetComment.COMMENT_TYPE_TODO)
197
198 if not show_outdated:
199 todos = todos.filter(
200 coalesce(ChangesetComment.display_state, '') !=
201 ChangesetComment.COMMENT_OUTDATED)
202
203 todos = todos.all()
204
205 return todos
206
190 def _log_audit_action(self, action, action_data, auth_user, comment):
207 def _log_audit_action(self, action, action_data, auth_user, comment):
191 audit_logger.store(
208 audit_logger.store(
192 action=action,
209 action=action,
@@ -71,6 +71,12 b' input[type="button"] {'
71 margin: 0 0 0 0;
71 margin: 0 0 0 0;
72 }
72 }
73
73
74 &.btn-active {
75 color: @rcdarkblue;
76 background-color: @white;
77 .border ( @border-thickness, @rcdarkblue );
78 }
79
74 }
80 }
75
81
76
82
@@ -97,6 +103,11 b' input[type="button"] {'
97 .border ( @border-thickness-buttons, @grey5 );
103 .border ( @border-thickness-buttons, @grey5 );
98 background-color: transparent;
104 background-color: transparent;
99 }
105 }
106 &.btn-active {
107 color: @rcdarkblue;
108 background-color: @white;
109 .border ( @border-thickness, @rcdarkblue );
110 }
100 }
111 }
101
112
102 .btn-primary,
113 .btn-primary,
@@ -214,8 +225,28 b' input[type="button"] {'
214 display: inline-block;
225 display: inline-block;
215 .btn {
226 .btn {
216 float: left;
227 float: left;
217 margin: 0 0 0 -1px;
228 margin: 0 0 0 0;
229 // first item
230 &:first-of-type:not(:last-of-type) {
231 border-radius: @border-radius 0 0 @border-radius;
232
218 }
233 }
234 // middle elements
235 &:not(:first-of-type):not(:last-of-type) {
236 border-radius: 0;
237 border-left-width: 0;
238 border-right-width: 0;
239 }
240 // last item
241 &:last-of-type:not(:first-of-type) {
242 border-radius: 0 @border-radius @border-radius 0;
243 }
244
245 &:only-child {
246 border-radius: @border-radius;
247 }
248 }
249
219 }
250 }
220
251
221 .btn-link {
252 .btn-link {
@@ -682,13 +682,14 b' input.filediff-collapse-state {'
682 display: none
682 display: none
683 }
683 }
684 .filediff-collapse-indicator {
684 .filediff-collapse-indicator {
685 width: 0;
685 float: left;
686 height: 0;
686 cursor: pointer;
687 border-style: solid;
687 margin: 1px -5px;
688 border-width: 4.5px 0 4.5px 9.3px;
689 border-color: transparent transparent transparent #aaa;
690 margin: 6px 0px;
691 }
688 }
689 .filediff-collapse-indicator:before {
690 content: '\f105';
691 }
692
692 .filediff-menu {
693 .filediff-menu {
693 display: none;
694 display: none;
694 }
695 }
@@ -696,18 +697,20 b' input.filediff-collapse-state {'
696 }
697 }
697
698
698 &+ .filediff { /* file diff is expanded */
699 &+ .filediff { /* file diff is expanded */
700
699 .filediff-collapse-indicator {
701 .filediff-collapse-indicator {
700 width: 0;
702 float: left;
701 height: 0;
703 cursor: pointer;
702 border-style: solid;
704 margin: 1px -5px;
703 border-width: 9.3px 4.5px 0 4.5px;
705 }
704 border-color: #aaa transparent transparent transparent;
706 .filediff-collapse-indicator:before {
705 margin: 6px 0px;
707 content: '\f107';
708 }
706
709
707 }
708 .filediff-menu {
710 .filediff-menu {
709 display: block;
711 display: block;
710 }
712 }
713
711 margin: 10px 0;
714 margin: 10px 0;
712 &:nth-child(2) {
715 &:nth-child(2) {
713 margin: 0;
716 margin: 0;
@@ -735,13 +738,14 b' input.filediff-collapse-state {'
735
738
736 #diff-file-sticky{
739 #diff-file-sticky{
737 will-change: min-height;
740 will-change: min-height;
741 height: 80px;
738 }
742 }
739
743
740 .sidebar__inner{
744 .sidebar__inner{
741 transform: translate(0, 0); /* For browsers don't support translate3d. */
745 transform: translate(0, 0); /* For browsers don't support translate3d. */
742 transform: translate3d(0, 0, 0);
746 transform: translate3d(0, 0, 0);
743 will-change: position, transform;
747 will-change: position, transform;
744 height: 70px;
748 height: 65px;
745 z-index: 30;
749 z-index: 30;
746 background-color: #fff;
750 background-color: #fff;
747 padding: 5px 0px;
751 padding: 5px 0px;
@@ -775,10 +779,17 b' input.filediff-collapse-state {'
775 }
779 }
776
780
777 .diffset-menu {
781 .diffset-menu {
778 margin-bottom: 20px;
782
779 }
783 }
784
785 #todo-box {
786 clear:both;
787 display: none;
788 text-align: right
789 }
790
780 .diffset {
791 .diffset {
781 margin: 20px auto;
792 margin: 0px auto;
782 .diffset-heading {
793 .diffset-heading {
783 border: 1px solid @grey5;
794 border: 1px solid @grey5;
784 margin-bottom: -1px;
795 margin-bottom: -1px;
@@ -826,6 +837,8 b' input.filediff-collapse-state {'
826 margin-right: 3px;
837 margin-right: 3px;
827 font-size: 12px;
838 font-size: 12px;
828 font-weight: normal;
839 font-weight: normal;
840 min-width: 30px;
841 text-align: center;
829
842
830 &:first-child {
843 &:first-child {
831 border-radius: @border-radius 0 0 @border-radius;
844 border-radius: @border-radius 0 0 @border-radius;
@@ -877,18 +890,10 b' input.filediff-collapse-state {'
877 }
890 }
878 }
891 }
879
892
880 .filediff-collapse-indicator {
881 border-style: solid;
882 float: left;
883 margin: 4px 0px 0 0;
884 cursor: pointer;
885 }
886
887 .filediff-heading {
893 .filediff-heading {
888 background: @grey7;
889 cursor: pointer;
894 cursor: pointer;
890 display: block;
895 display: block;
891 padding: 5px 10px;
896 padding: 10px 10px;
892 }
897 }
893 .filediff-heading:after {
898 .filediff-heading:after {
894 content: "";
899 content: "";
@@ -900,9 +905,9 b' input.filediff-collapse-state {'
900 }
905 }
901
906
902 .filediff-menu {
907 .filediff-menu {
903 float: right;
904 text-align: right;
908 text-align: right;
905 padding: 5px 5px 5px 0px;
909 padding: 5px 5px 5px 0px;
910 background: @grey7;
906
911
907 &> a,
912 &> a,
908 &> span {
913 &> span {
@@ -958,8 +963,16 b' input.filediff-collapse-state {'
958 }
963 }
959
964
960
965
966 .op-added {
967 color: @alert1;
968 }
969
970 .op-deleted {
971 color: @alert2;
972 }
961
973
962 .filediff, .filelist {
974 .filediff, .filelist {
975
963 .pill {
976 .pill {
964 &[op="name"] {
977 &[op="name"] {
965 background: none;
978 background: none;
@@ -10,6 +10,14 b''
10 width: 100%;
10 width: 100%;
11 }
11 }
12
12
13 .comments-heading {
14 margin-bottom: -1px;
15 background: @grey6;
16 display: block;
17 padding: 10px 0px;
18 font-size: 18px
19 }
20
13 tr.inline-comments div {
21 tr.inline-comments div {
14 max-width: 100%;
22 max-width: 100%;
15
23
@@ -1107,6 +1107,52 b' label {'
1107 }
1107 }
1108 }
1108 }
1109
1109
1110 .review-status {
1111 &.under_review {
1112 color: @alert3;
1113 }
1114 &.approved {
1115 color: @alert1;
1116 }
1117 &.rejected,
1118 &.forced_closed{
1119 color: @alert2;
1120 }
1121 &.not_reviewed {
1122 color: @grey5;
1123 }
1124 }
1125
1126 .review-status-under_review {
1127 color: @alert3;
1128 }
1129 .status-tag-under_review {
1130 border-color: @alert3;
1131 }
1132
1133 .review-status-approved {
1134 color: @alert1;
1135 }
1136 .status-tag-approved {
1137 border-color: @alert1;
1138 }
1139
1140 .review-status-rejected,
1141 .review-status-forced_closed {
1142 color: @alert2;
1143 }
1144 .status-tag-rejected,
1145 .status-tag-forced_closed {
1146 border-color: @alert2;
1147 }
1148
1149 .review-status-not_reviewed {
1150 color: @grey5;
1151 }
1152 .status-tag-not_reviewed {
1153 border-color: @grey5;
1154 }
1155
1110 .flag_status_comment_box {
1156 .flag_status_comment_box {
1111 margin: 5px 6px 0px 2px;
1157 margin: 5px 6px 0px 2px;
1112 }
1158 }
@@ -1,12 +1,12 b''
1 @font-face {
1 @font-face {
2 font-family: 'rcicons';
2 font-family: 'rcicons';
3
3
4 src: url('../fonts/RCIcons/rcicons.eot?92789106');
4 src: url('../fonts/RCIcons/rcicons.eot?44705679');
5 src: url('../fonts/RCIcons/rcicons.eot?92789106#iefix') format('embedded-opentype'),
5 src: url('../fonts/RCIcons/rcicons.eot?44705679#iefix') format('embedded-opentype'),
6 url('../fonts/RCIcons/rcicons.woff2?92789106') format('woff2'),
6 url('../fonts/RCIcons/rcicons.woff2?44705679') format('woff2'),
7 url('../fonts/RCIcons/rcicons.woff?92789106') format('woff'),
7 url('../fonts/RCIcons/rcicons.woff?44705679') format('woff'),
8 url('../fonts/RCIcons/rcicons.ttf?92789106') format('truetype'),
8 url('../fonts/RCIcons/rcicons.ttf?44705679') format('truetype'),
9 url('../fonts/RCIcons/rcicons.svg?92789106#rcicons') format('svg');
9 url('../fonts/RCIcons/rcicons.svg?44705679#rcicons') format('svg');
10
10
11 font-weight: normal;
11 font-weight: normal;
12 font-style: normal;
12 font-style: normal;
@@ -163,8 +163,6 b''
163 .icon-down:before { content: '\e80b'; } /* '' */
163 .icon-down:before { content: '\e80b'; } /* '' */
164 .icon-folder:before { content: '\e80c'; } /* '' */
164 .icon-folder:before { content: '\e80c'; } /* '' */
165 .icon-folder-open:before { content: '\e80d'; } /* '' */
165 .icon-folder-open:before { content: '\e80d'; } /* '' */
166 .icon-folder-empty:before { content: '\f114'; } /* '' */
167 .icon-folder-open-empty:before { content: '\f115'; } /* '' */
168 .icon-trash-empty:before { content: '\e80e'; } /* '' */
166 .icon-trash-empty:before { content: '\e80e'; } /* '' */
169 .icon-group:before { content: '\e80f'; } /* '' */
167 .icon-group:before { content: '\e80f'; } /* '' */
170 .icon-remove:before { content: '\e810'; } /* '' */
168 .icon-remove:before { content: '\e810'; } /* '' */
@@ -187,6 +185,7 b''
187 .icon-info-circled:before { content: '\e821'; } /* '' */
185 .icon-info-circled:before { content: '\e821'; } /* '' */
188 .icon-upload:before { content: '\e822'; } /* '' */
186 .icon-upload:before { content: '\e822'; } /* '' */
189 .icon-home:before { content: '\e823'; } /* '' */
187 .icon-home:before { content: '\e823'; } /* '' */
188 .icon-flag-filled:before { content: '\e824'; } /* '' */
190 .icon-git:before { content: '\e82a'; } /* '' */
189 .icon-git:before { content: '\e82a'; } /* '' */
191 .icon-hg:before { content: '\e82d'; } /* '' */
190 .icon-hg:before { content: '\e82d'; } /* '' */
192 .icon-svn:before { content: '\e82e'; } /* '' */
191 .icon-svn:before { content: '\e82e'; } /* '' */
@@ -195,11 +194,24 b''
195 .icon-rhodecode:before { content: '\e831'; } /* '' */
194 .icon-rhodecode:before { content: '\e831'; } /* '' */
196 .icon-up:before { content: '\e832'; } /* '' */
195 .icon-up:before { content: '\e832'; } /* '' */
197 .icon-merge:before { content: '\e833'; } /* '' */
196 .icon-merge:before { content: '\e833'; } /* '' */
197 .icon-spin-alt:before { content: '\e834'; } /* '' */
198 .icon-spin:before { content: '\e838'; } /* '' */
198 .icon-docs:before { content: '\f0c5'; } /* '' */
199 .icon-docs:before { content: '\f0c5'; } /* '' */
199 .icon-menu:before { content: '\f0c9'; } /* '' */
200 .icon-menu:before { content: '\f0c9'; } /* '' */
201 .icon-sort:before { content: '\f0dc'; } /* '' */
200 .icon-paste:before { content: '\f0ea'; } /* '' */
202 .icon-paste:before { content: '\f0ea'; } /* '' */
201 .icon-doc-text:before { content: '\f0f6'; } /* '' */
203 .icon-doc-text:before { content: '\f0f6'; } /* '' */
202 .icon-plus-squared:before { content: '\f0fe'; } /* '' */
204 .icon-plus-squared:before { content: '\f0fe'; } /* '' */
205 .icon-angle-left:before { content: '\f104'; } /* '' */
206 .icon-angle-right:before { content: '\f105'; } /* '' */
207 .icon-angle-up:before { content: '\f106'; } /* '' */
208 .icon-angle-down:before { content: '\f107'; } /* '' */
209 .icon-circle-empty:before { content: '\f10c'; } /* '' */
210 .icon-circle:before { content: '\f111'; } /* '' */
211 .icon-folder-empty:before { content: '\f114'; } /* '' */
212 .icon-folder-open-empty:before { content: '\f115'; } /* '' */
213 .icon-code:before { content: '\f121'; } /* '' */
214 .icon-info:before { content: '\f129'; } /* '' */
203 .icon-minus-squared:before { content: '\f146'; } /* '' */
215 .icon-minus-squared:before { content: '\f146'; } /* '' */
204 .icon-minus-squared-alt:before { content: '\f147'; } /* '' */
216 .icon-minus-squared-alt:before { content: '\f147'; } /* '' */
205 .icon-doc-inv:before { content: '\f15b'; } /* '' */
217 .icon-doc-inv:before { content: '\f15b'; } /* '' */
@@ -207,10 +219,9 b''
207 .icon-plus-squared-alt:before { content: '\f196'; } /* '' */
219 .icon-plus-squared-alt:before { content: '\f196'; } /* '' */
208 .icon-file-code:before { content: '\f1c9'; } /* '' */
220 .icon-file-code:before { content: '\f1c9'; } /* '' */
209 .icon-history:before { content: '\f1da'; } /* '' */
221 .icon-history:before { content: '\f1da'; } /* '' */
222 .icon-circle-thin:before { content: '\f1db'; } /* '' */
210 .icon-sliders:before { content: '\f1de'; } /* '' */
223 .icon-sliders:before { content: '\f1de'; } /* '' */
211 .icon-trash:before { content: '\f1f8'; } /* '' */
224 .icon-trash:before { content: '\f1f8'; } /* '' */
212 .icon-spin-alt:before { content: '\e834'; } /* '' */
213 .icon-spin:before { content: '\e838'; } /* '' */
214
225
215
226
216 // MERGED ICONS BASED ON CURRENT ONES
227 // MERGED ICONS BASED ON CURRENT ONES
@@ -233,10 +244,12 b''
233 .icon-false:before { &:extend(.icon-delete:before); }
244 .icon-false:before { &:extend(.icon-delete:before); }
234 .icon-expand-linked:before { &:extend(.icon-down:before); }
245 .icon-expand-linked:before { &:extend(.icon-down:before); }
235 .icon-pr-merge-fail:before { &:extend(.icon-delete:before); }
246 .icon-pr-merge-fail:before { &:extend(.icon-delete:before); }
247 .icon-wide-mode:before { &:extend(.icon-sort:before); }
248 .icon-flag-filled-red:before { &:extend(.icon-flag-filled:before); }
236
249
237 // TRANSFORM
250 // TRANSFORM
238
239 .icon-merge:before {transform: rotate(180deg);}
251 .icon-merge:before {transform: rotate(180deg);}
252 .icon-wide-mode:before {transform: rotate(90deg);}
240
253
241 // -- END ICON CLASSES -- //
254 // -- END ICON CLASSES -- //
242
255
@@ -254,6 +267,7 b''
254 .icon-false { color: @grey5 }
267 .icon-false { color: @grey5 }
255 .icon-expand-linked { cursor: pointer; color: @grey3; font-size: 14px }
268 .icon-expand-linked { cursor: pointer; color: @grey3; font-size: 14px }
256 .icon-more-linked { cursor: pointer; color: @grey3 }
269 .icon-more-linked { cursor: pointer; color: @grey3 }
270 .icon-flag-filled-red { color: @color5 !important; }
257
271
258 .repo-switcher-dropdown .select2-result-label {
272 .repo-switcher-dropdown .select2-result-label {
259 .icon-git:before {
273 .icon-git:before {
@@ -152,6 +152,8 b' select.select2{height:28px;visibility:hi'
152 .drop-menu-no-width {
152 .drop-menu-no-width {
153 .drop-menu-base;
153 .drop-menu-base;
154 width: auto;
154 width: auto;
155 min-width: 0;
156 margin: 0;
155 }
157 }
156
158
157 .field-sm .drop-menu {
159 .field-sm .drop-menu {
@@ -153,6 +153,7 b''
153 text-align: center;
153 text-align: center;
154 color: #949494;
154 color: #949494;
155 font-size: 11px;
155 font-size: 11px;
156 line-height: 1.3em;
156
157
157 &:hover {
158 &:hover {
158 background: #f1f1f1;
159 background: #f1f1f1;
@@ -199,6 +200,10 b''
199 .fieldset {
200 .fieldset {
200 margin-bottom: 0;
201 margin-bottom: 0;
201 }
202 }
203
204 .tags-main {
205 margin-bottom: 5px;
206 }
202 }
207 }
203
208
204 .fieldset {
209 .fieldset {
@@ -564,6 +564,72 b''
564 "src": "fontawesome"
564 "src": "fontawesome"
565 },
565 },
566 {
566 {
567 "uid": "7034e4d22866af82bef811f52fb1ba46",
568 "css": "code",
569 "code": 61729,
570 "src": "fontawesome"
571 },
572 {
573 "uid": "f3f90c8c89795da30f7444634476ea4f",
574 "css": "angle-left",
575 "code": 61700,
576 "src": "fontawesome"
577 },
578 {
579 "uid": "7bf14281af5633a597f85b061ef1cfb9",
580 "css": "angle-right",
581 "code": 61701,
582 "src": "fontawesome"
583 },
584 {
585 "uid": "5de9370846a26947e03f63142a3f1c07",
586 "css": "angle-up",
587 "code": 61702,
588 "src": "fontawesome"
589 },
590 {
591 "uid": "e4dde1992f787163e2e2b534b8c8067d",
592 "css": "angle-down",
593 "code": 61703,
594 "src": "fontawesome"
595 },
596 {
597 "uid": "4i0s2bklai5fywieqm4dqqngfz9ptfab",
598 "css": "flag-filled",
599 "code": 59428,
600 "src": "typicons"
601 },
602 {
603 "uid": "3d4ea8a78dc34efe891f3a0f3d961274",
604 "css": "info",
605 "code": 61737,
606 "src": "fontawesome"
607 },
608 {
609 "uid": "56a21935a5d4d79b2e91ec00f760b369",
610 "css": "sort",
611 "code": 61660,
612 "src": "fontawesome"
613 },
614 {
615 "uid": "130380e481a7defc690dfb24123a1f0c",
616 "css": "circle",
617 "code": 61713,
618 "src": "fontawesome"
619 },
620 {
621 "uid": "422e07e5afb80258a9c4ed1706498f8a",
622 "css": "circle-empty",
623 "code": 61708,
624 "src": "fontawesome"
625 },
626 {
627 "uid": "5774d0a0e50f6eefc8be01bd761e5dd3",
628 "css": "circle-thin",
629 "code": 61915,
630 "src": "fontawesome"
631 },
632 {
567 "uid": "c43db6645e7515889fc2193294f50767",
633 "uid": "c43db6645e7515889fc2193294f50767",
568 "css": "plus",
634 "css": "plus",
569 "code": 59411,
635 "code": 59411,
1 NO CONTENT: modified file, binary diff hidden
NO CONTENT: modified file, binary diff hidden
@@ -78,6 +78,8 b''
78
78
79 <glyph glyph-name="home" unicode="&#xe823;" d="M888 336q16-16 11-27t-27-11l-84 0 0-310q0-14-1-21t-8-13-23-6l-204 0 0 310-204 0 0-310-194 0q-28 0-35 10t-7 30l0 310-84 0q-22 0-27 11t11 27l400 402q16 16 38 16t38-16z" horiz-adv-x="900" />
79 <glyph glyph-name="home" unicode="&#xe823;" d="M888 336q16-16 11-27t-27-11l-84 0 0-310q0-14-1-21t-8-13-23-6l-204 0 0 310-204 0 0-310-194 0q-28 0-35 10t-7 30l0 310-84 0q-22 0-27 11t11 27l400 402q16 16 38 16t38-16z" horiz-adv-x="900" />
80
80
81 <glyph glyph-name="flag-filled" unicode="&#xe824;" d="M640 693q25 25 57 11t32-47l0-418q0-21-15-36-80-80-193-80t-193 80q-47 46-110 50t-114-36l0-238q0-21-15-37t-36-15-37 15-16 37l0 678q0 21 15 36 80 80 193 80t193-80q50-50 120-50t119 50z" horiz-adv-x="729" />
82
81 <glyph glyph-name="git" unicode="&#xe82a;" d="M929 844h-858c-36 0-65-30-65-65v-857c0-36 30-65 65-65h857c36 0 65 30 65 65v857c1 35-29 65-64 65z m-729-549c4-11 9-20 14-27 6-8 14-14 22-18 9-4 19-6 29-6 9 0 16 1 24 2 7 2 14 4 20 7l6 51h-27c-4 0-8 1-10 4-2 1-3 5-3 7l5 39h105l-16-131c-8-7-16-12-25-15-9-4-18-8-28-10-10-3-18-5-30-7-10-1-21-2-33-2-20 0-38 4-54 11-16 8-30 18-41 30-12 13-20 28-27 45-6 18-10 36-10 56 0 18 3 34 7 50 3 17 10 30 17 44 8 14 16 25 26 36 10 12 22 20 34 28 13 7 26 14 41 17 15 4 30 7 47 7 13 0 25-2 36-4 11-3 21-6 29-10 8-4 16-9 22-14 6-5 13-11 18-16l-20-31c-4-5-9-8-14-9-5-1-10 0-16 4-5 3-10 6-14 8-5 3-9 5-14 7-5 1-10 2-15 3-5 2-11 2-17 2-14 0-27-3-38-9-11-6-21-14-29-25-8-10-15-24-18-38-5-15-7-31-7-48-1-14 2-27 4-38z m336-102h-71l39 315h71l-39-315z m343 258h-80l-33-258h-70l32 258h-80l7 57h231l-7-57z" horiz-adv-x="1000" />
83 <glyph glyph-name="git" unicode="&#xe82a;" d="M929 844h-858c-36 0-65-30-65-65v-857c0-36 30-65 65-65h857c36 0 65 30 65 65v857c1 35-29 65-64 65z m-729-549c4-11 9-20 14-27 6-8 14-14 22-18 9-4 19-6 29-6 9 0 16 1 24 2 7 2 14 4 20 7l6 51h-27c-4 0-8 1-10 4-2 1-3 5-3 7l5 39h105l-16-131c-8-7-16-12-25-15-9-4-18-8-28-10-10-3-18-5-30-7-10-1-21-2-33-2-20 0-38 4-54 11-16 8-30 18-41 30-12 13-20 28-27 45-6 18-10 36-10 56 0 18 3 34 7 50 3 17 10 30 17 44 8 14 16 25 26 36 10 12 22 20 34 28 13 7 26 14 41 17 15 4 30 7 47 7 13 0 25-2 36-4 11-3 21-6 29-10 8-4 16-9 22-14 6-5 13-11 18-16l-20-31c-4-5-9-8-14-9-5-1-10 0-16 4-5 3-10 6-14 8-5 3-9 5-14 7-5 1-10 2-15 3-5 2-11 2-17 2-14 0-27-3-38-9-11-6-21-14-29-25-8-10-15-24-18-38-5-15-7-31-7-48-1-14 2-27 4-38z m336-102h-71l39 315h71l-39-315z m343 258h-80l-33-258h-70l32 258h-80l7 57h231l-7-57z" horiz-adv-x="1000" />
82
84
83 <glyph glyph-name="hg" unicode="&#xe82d;" d="M927 841h-853c-36 0-65-29-65-65v-853c0-36 29-65 65-65h853c36 0 65 29 65 65v853c0 36-29 65-65 65z m-483-648h-70l16 133h-113l-17-133h-70l39 313h70l-16-132h113l16 132h71l-39-313z m177 101c3-11 8-20 14-27 7-8 14-14 23-18 8-4 18-6 28-6 9 0 16 1 23 3 7 1 14 3 20 6l6 51h-27c-4 0-7 1-9 3-3 3-3 6-3 9l5 39h104l-16-131c-8-6-16-11-25-15-9-5-18-8-27-11-9-2-19-4-30-6-10-1-21-2-33-2-19 0-37 4-53 11-16 7-30 17-41 29-11 13-20 28-26 45-7 17-10 35-10 55 0 17 2 34 6 50 4 15 10 30 17 43 7 14 16 26 26 36 10 11 22 20 34 28 13 7 27 13 41 17 14 4 30 7 46 7 13 0 25-2 36-4 11-3 20-6 29-10 8-4 16-9 23-14 7-5 13-11 18-17l-23-28c-4-5-8-8-13-9-5-1-11 0-16 3-5 4-10 7-14 9-5 3-9 5-14 6-4 2-9 3-14 4-5 1-11 1-17 1-14 0-27-3-38-8-11-6-21-14-29-25-8-10-15-23-19-38-5-15-7-31-7-49 0-13 2-26 5-37z" horiz-adv-x="1000" />
85 <glyph glyph-name="hg" unicode="&#xe82d;" d="M927 841h-853c-36 0-65-29-65-65v-853c0-36 29-65 65-65h853c36 0 65 29 65 65v853c0 36-29 65-65 65z m-483-648h-70l16 133h-113l-17-133h-70l39 313h70l-16-132h113l16 132h71l-39-313z m177 101c3-11 8-20 14-27 7-8 14-14 23-18 8-4 18-6 28-6 9 0 16 1 23 3 7 1 14 3 20 6l6 51h-27c-4 0-7 1-9 3-3 3-3 6-3 9l5 39h104l-16-131c-8-6-16-11-25-15-9-5-18-8-27-11-9-2-19-4-30-6-10-1-21-2-33-2-19 0-37 4-53 11-16 7-30 17-41 29-11 13-20 28-26 45-7 17-10 35-10 55 0 17 2 34 6 50 4 15 10 30 17 43 7 14 16 26 26 36 10 11 22 20 34 28 13 7 27 13 41 17 14 4 30 7 46 7 13 0 25-2 36-4 11-3 20-6 29-10 8-4 16-9 23-14 7-5 13-11 18-17l-23-28c-4-5-8-8-13-9-5-1-11 0-16 3-5 4-10 7-14 9-5 3-9 5-14 6-4 2-9 3-14 4-5 1-11 1-17 1-14 0-27-3-38-8-11-6-21-14-29-25-8-10-15-23-19-38-5-15-7-31-7-49 0-13 2-26 5-37z" horiz-adv-x="1000" />
@@ -102,16 +104,34 b''
102
104
103 <glyph glyph-name="menu" unicode="&#xf0c9;" d="M857 100v-71q0-15-10-25t-26-11h-785q-15 0-25 11t-11 25v71q0 15 11 25t25 11h785q15 0 26-11t10-25z m0 286v-72q0-14-10-25t-26-10h-785q-15 0-25 10t-11 25v72q0 14 11 25t25 10h785q15 0 26-10t10-25z m0 285v-71q0-14-10-25t-26-11h-785q-15 0-25 11t-11 25v71q0 15 11 26t25 10h785q15 0 26-10t10-26z" horiz-adv-x="857.1" />
105 <glyph glyph-name="menu" unicode="&#xf0c9;" d="M857 100v-71q0-15-10-25t-26-11h-785q-15 0-25 11t-11 25v71q0 15 11 25t25 11h785q15 0 26-11t10-25z m0 286v-72q0-14-10-25t-26-10h-785q-15 0-25 10t-11 25v72q0 14 11 25t25 10h785q15 0 26-10t10-25z m0 285v-71q0-14-10-25t-26-11h-785q-15 0-25 11t-11 25v71q0 15 11 26t25 10h785q15 0 26-10t10-26z" horiz-adv-x="857.1" />
104
106
107 <glyph glyph-name="sort" unicode="&#xf0dc;" d="M571 243q0-15-10-25l-250-250q-11-11-25-11t-25 11l-250 250q-11 10-11 25t11 25 25 11h500q14 0 25-11t10-25z m0 214q0-14-10-25t-25-11h-500q-15 0-25 11t-11 25 11 25l250 250q10 11 25 11t25-11l250-250q10-10 10-25z" horiz-adv-x="571.4" />
108
105 <glyph glyph-name="paste" unicode="&#xf0ea;" d="M429-79h500v358h-233q-22 0-37 15t-16 38v232h-214v-643z m142 804v36q0 7-5 12t-12 6h-393q-7 0-13-6t-5-12v-36q0-7 5-13t13-5h393q7 0 12 5t5 13z m143-375h167l-167 167v-167z m286-71v-375q0-23-16-38t-38-16h-535q-23 0-38 16t-16 38v89h-303q-23 0-38 16t-16 37v750q0 23 16 38t38 16h607q22 0 38-16t15-38v-183q12-7 20-15l228-228q16-15 27-42t11-49z" horiz-adv-x="1000" />
109 <glyph glyph-name="paste" unicode="&#xf0ea;" d="M429-79h500v358h-233q-22 0-37 15t-16 38v232h-214v-643z m142 804v36q0 7-5 12t-12 6h-393q-7 0-13-6t-5-12v-36q0-7 5-13t13-5h393q7 0 12 5t5 13z m143-375h167l-167 167v-167z m286-71v-375q0-23-16-38t-38-16h-535q-23 0-38 16t-16 38v89h-303q-23 0-38 16t-16 37v750q0 23 16 38t38 16h607q22 0 38-16t15-38v-183q12-7 20-15l228-228q16-15 27-42t11-49z" horiz-adv-x="1000" />
106
110
107 <glyph glyph-name="doc-text" unicode="&#xf0f6;" d="M819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 17-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 16t-16 37v233h-429v-858h715z m-572 483q0 7 5 12t13 5h393q8 0 13-5t5-12v-36q0-8-5-13t-13-5h-393q-8 0-13 5t-5 13v36z m411-125q8 0 13-5t5-13v-36q0-8-5-13t-13-5h-393q-8 0-13 5t-5 13v36q0 8 5 13t13 5h393z m0-143q8 0 13-5t5-13v-36q0-8-5-13t-13-5h-393q-8 0-13 5t-5 13v36q0 8 5 13t13 5h393z" horiz-adv-x="857.1" />
111 <glyph glyph-name="doc-text" unicode="&#xf0f6;" d="M819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 17-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 16t-16 37v233h-429v-858h715z m-572 483q0 7 5 12t13 5h393q8 0 13-5t5-12v-36q0-8-5-13t-13-5h-393q-8 0-13 5t-5 13v36z m411-125q8 0 13-5t5-13v-36q0-8-5-13t-13-5h-393q-8 0-13 5t-5 13v36q0 8 5 13t13 5h393z m0-143q8 0 13-5t5-13v-36q0-8-5-13t-13-5h-393q-8 0-13 5t-5 13v36q0 8 5 13t13 5h393z" horiz-adv-x="857.1" />
108
112
109 <glyph glyph-name="plus-squared" unicode="&#xf0fe;" d="M714 314v72q0 14-10 25t-25 10h-179v179q0 15-11 25t-25 11h-71q-15 0-25-11t-11-25v-179h-178q-15 0-25-10t-11-25v-72q0-14 11-25t25-10h178v-179q0-14 11-25t25-11h71q15 0 25 11t11 25v179h179q14 0 25 10t10 25z m143 304v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
113 <glyph glyph-name="plus-squared" unicode="&#xf0fe;" d="M714 314v72q0 14-10 25t-25 10h-179v179q0 15-11 25t-25 11h-71q-15 0-25-11t-11-25v-179h-178q-15 0-25-10t-11-25v-72q0-14 11-25t25-10h178v-179q0-14 11-25t25-11h71q15 0 25 11t11 25v179h179q14 0 25 10t10 25z m143 304v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
110
114
115 <glyph glyph-name="angle-left" unicode="&#xf104;" d="M350 546q0-7-6-12l-219-220 219-219q6-6 6-13t-6-13l-28-28q-5-5-12-5t-13 5l-260 261q-6 5-6 12t6 13l260 260q5 6 13 6t12-6l28-28q6-5 6-13z" horiz-adv-x="357.1" />
116
117 <glyph glyph-name="angle-right" unicode="&#xf105;" d="M332 314q0-7-5-12l-261-261q-5-5-12-5t-13 5l-28 28q-6 6-6 13t6 13l219 219-219 220q-6 5-6 12t6 13l28 28q5 6 13 6t12-6l261-260q5-5 5-13z" horiz-adv-x="357.1" />
118
119 <glyph glyph-name="angle-up" unicode="&#xf106;" d="M600 189q0-7-6-12l-28-28q-5-6-12-6t-13 6l-220 219-219-219q-5-6-13-6t-12 6l-28 28q-6 5-6 12t6 13l260 260q5 6 12 6t13-6l260-260q6-5 6-13z" horiz-adv-x="642.9" />
120
121 <glyph glyph-name="angle-down" unicode="&#xf107;" d="M600 439q0-7-6-12l-260-261q-5-5-13-5t-12 5l-260 261q-6 5-6 12t6 13l28 28q5 6 12 6t13-6l219-219 220 219q5 6 13 6t12-6l28-28q6-5 6-13z" horiz-adv-x="642.9" />
122
123 <glyph glyph-name="circle-empty" unicode="&#xf10c;" d="M429 654q-83 0-153-41t-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152-41 152-110 111-152 41z m428-304q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
124
125 <glyph glyph-name="circle" unicode="&#xf111;" d="M857 350q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
126
111 <glyph glyph-name="folder-empty" unicode="&#xf114;" d="M857 118v393q0 22-15 38t-38 15h-393q-23 0-38 16t-16 38v36q0 22-15 38t-38 15h-179q-22 0-38-15t-16-38v-536q0-22 16-38t38-16h679q22 0 38 16t15 38z m72 393v-393q0-51-37-88t-88-37h-679q-51 0-88 37t-37 88v536q0 51 37 88t88 37h179q51 0 88-37t37-88v-18h375q51 0 88-37t37-88z" horiz-adv-x="928.6" />
127 <glyph glyph-name="folder-empty" unicode="&#xf114;" d="M857 118v393q0 22-15 38t-38 15h-393q-23 0-38 16t-16 38v36q0 22-15 38t-38 15h-179q-22 0-38-15t-16-38v-536q0-22 16-38t38-16h679q22 0 38 16t15 38z m72 393v-393q0-51-37-88t-88-37h-679q-51 0-88 37t-37 88v536q0 51 37 88t88 37h179q51 0 88-37t37-88v-18h375q51 0 88-37t37-88z" horiz-adv-x="928.6" />
112
128
113 <glyph glyph-name="folder-open-empty" unicode="&#xf115;" d="M994 331q0 19-30 19h-607q-22 0-48-12t-39-29l-164-203q-11-13-11-22 0-20 30-20h607q23 0 48 13t40 29l164 203q10 12 10 22z m-637 90h429v90q0 22-16 38t-38 15h-321q-23 0-38 16t-16 38v36q0 22-15 38t-38 15h-179q-22 0-38-15t-16-38v-476l143 175q25 30 65 49t78 19z m708-90q0-35-25-67l-165-203q-24-30-65-49t-78-19h-607q-51 0-88 37t-37 88v536q0 51 37 88t88 37h179q51 0 88-37t37-88v-18h303q52 0 88-37t37-88v-90h107q30 0 56-13t37-40q8-17 8-37z" horiz-adv-x="1071.4" />
129 <glyph glyph-name="folder-open-empty" unicode="&#xf115;" d="M994 331q0 19-30 19h-607q-22 0-48-12t-39-29l-164-203q-11-13-11-22 0-20 30-20h607q23 0 48 13t40 29l164 203q10 12 10 22z m-637 90h429v90q0 22-16 38t-38 15h-321q-23 0-38 16t-16 38v36q0 22-15 38t-38 15h-179q-22 0-38-15t-16-38v-476l143 175q25 30 65 49t78 19z m708-90q0-35-25-67l-165-203q-24-30-65-49t-78-19h-607q-51 0-88 37t-37 88v536q0 51 37 88t88 37h179q51 0 88-37t37-88v-18h303q52 0 88-37t37-88v-90h107q30 0 56-13t37-40q8-17 8-37z" horiz-adv-x="1071.4" />
114
130
131 <glyph glyph-name="code" unicode="&#xf121;" d="M344 69l-28-28q-5-5-12-5t-13 5l-260 261q-6 5-6 12t6 13l260 260q5 6 13 6t12-6l28-28q6-5 6-13t-6-12l-219-220 219-219q6-6 6-13t-6-13z m330 596l-208-721q-2-7-9-11t-13-1l-34 9q-8 3-11 9t-2 14l209 720q2 8 8 11t13 2l35-10q7-2 11-9t1-13z m367-363l-260-261q-6-5-13-5t-13 5l-28 28q-5 6-5 13t5 13l219 219-219 220q-5 5-5 12t5 13l28 28q6 6 13 6t13-6l260-260q5-5 5-13t-5-12z" horiz-adv-x="1071.4" />
132
133 <glyph glyph-name="info" unicode="&#xf129;" d="M357 100v-71q0-15-10-25t-26-11h-285q-15 0-25 11t-11 25v71q0 15 11 25t25 11h35v214h-35q-15 0-25 11t-11 25v71q0 15 11 25t25 11h214q15 0 25-11t11-25v-321h35q15 0 26-11t10-25z m-71 643v-107q0-15-11-25t-25-11h-143q-14 0-25 11t-11 25v107q0 14 11 25t25 11h143q15 0 25-11t11-25z" horiz-adv-x="357.1" />
134
115 <glyph glyph-name="minus-squared" unicode="&#xf146;" d="M714 314v72q0 14-10 25t-25 10h-500q-15 0-25-10t-11-25v-72q0-14 11-25t25-10h500q14 0 25 10t10 25z m143 304v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
135 <glyph glyph-name="minus-squared" unicode="&#xf146;" d="M714 314v72q0 14-10 25t-25 10h-500q-15 0-25-10t-11-25v-72q0-14 11-25t25-10h500q14 0 25 10t10 25z m143 304v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
116
136
117 <glyph glyph-name="minus-squared-alt" unicode="&#xf147;" d="M643 404v-36q0-8-5-13t-13-5h-464q-8 0-13 5t-5 13v36q0 7 5 12t13 5h464q8 0 13-5t5-12z m71-250v464q0 37-26 63t-63 26h-464q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63z m72 464v-464q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114v464q0 66 47 113t114 48h464q66 0 114-48t47-113z" horiz-adv-x="785.7" />
137 <glyph glyph-name="minus-squared-alt" unicode="&#xf147;" d="M643 404v-36q0-8-5-13t-13-5h-464q-8 0-13 5t-5 13v36q0 7 5 12t13 5h464q8 0 13-5t5-12z m71-250v464q0 37-26 63t-63 26h-464q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63z m72 464v-464q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114v464q0 66 47 113t114 48h464q66 0 114-48t47-113z" horiz-adv-x="785.7" />
@@ -126,6 +146,8 b''
126
146
127 <glyph glyph-name="history" unicode="&#xf1da;" d="M857 350q0-87-34-166t-91-137-137-92-166-34q-96 0-183 41t-147 114q-4 6-4 13t5 11l76 77q6 5 14 5 9-1 13-7 41-53 100-82t126-29q58 0 110 23t92 61 61 91 22 111-22 111-61 91-92 61-110 23q-55 0-105-20t-90-57l77-77q17-16 8-38-10-23-33-23h-250q-15 0-25 11t-11 25v250q0 24 22 33 22 10 39-8l72-72q60 57 137 88t159 31q87 0 166-34t137-92 91-137 34-166z m-357 161v-250q0-8-5-13t-13-5h-178q-8 0-13 5t-5 13v35q0 8 5 13t13 5h125v197q0 8 5 13t12 5h36q8 0 13-5t5-13z" horiz-adv-x="857.1" />
147 <glyph glyph-name="history" unicode="&#xf1da;" d="M857 350q0-87-34-166t-91-137-137-92-166-34q-96 0-183 41t-147 114q-4 6-4 13t5 11l76 77q6 5 14 5 9-1 13-7 41-53 100-82t126-29q58 0 110 23t92 61 61 91 22 111-22 111-61 91-92 61-110 23q-55 0-105-20t-90-57l77-77q17-16 8-38-10-23-33-23h-250q-15 0-25 11t-11 25v250q0 24 22 33 22 10 39-8l72-72q60 57 137 88t159 31q87 0 166-34t137-92 91-137 34-166z m-357 161v-250q0-8-5-13t-13-5h-178q-8 0-13 5t-5 13v35q0 8 5 13t13 5h125v197q0 8 5 13t12 5h36q8 0 13-5t5-13z" horiz-adv-x="857.1" />
128
148
149 <glyph glyph-name="circle-thin" unicode="&#xf1db;" d="M429 707q-73 0-139-28t-114-76-76-114-29-139 29-139 76-113 114-77 139-28 138 28 114 77 76 113 29 139-29 139-76 114-114 76-138 28z m428-357q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
150
129 <glyph glyph-name="sliders" unicode="&#xf1de;" d="M196 64v-71h-196v71h196z m197 72q14 0 25-11t11-25v-143q0-14-11-25t-25-11h-143q-14 0-25 11t-11 25v143q0 15 11 25t25 11h143z m89 214v-71h-482v71h482z m-357 286v-72h-125v72h125z m732-572v-71h-411v71h411z m-536 643q15 0 26-10t10-26v-142q0-15-10-25t-26-11h-142q-15 0-25 11t-11 25v142q0 15 11 26t25 10h142z m358-286q14 0 25-10t10-25v-143q0-15-10-25t-25-11h-143q-15 0-25 11t-11 25v143q0 14 11 25t25 10h143z m178-71v-71h-125v71h125z m0 286v-72h-482v72h482z" horiz-adv-x="857.1" />
151 <glyph glyph-name="sliders" unicode="&#xf1de;" d="M196 64v-71h-196v71h196z m197 72q14 0 25-11t11-25v-143q0-14-11-25t-25-11h-143q-14 0-25 11t-11 25v143q0 15 11 25t25 11h143z m89 214v-71h-482v71h482z m-357 286v-72h-125v72h125z m732-572v-71h-411v71h411z m-536 643q15 0 26-10t10-26v-142q0-15-10-25t-26-11h-142q-15 0-25 11t-11 25v142q0 15 11 26t25 10h142z m358-286q14 0 25-10t10-25v-143q0-15-10-25t-25-11h-143q-15 0-25 11t-11 25v143q0 14 11 25t25 10h143z m178-71v-71h-125v71h125z m0 286v-72h-482v72h482z" horiz-adv-x="857.1" />
130
152
131 <glyph glyph-name="trash" unicode="&#xf1f8;" d="M286 82v393q0 8-5 13t-13 5h-36q-8 0-13-5t-5-13v-393q0-8 5-13t13-5h36q8 0 13 5t5 13z m143 0v393q0 8-5 13t-13 5h-36q-8 0-13-5t-5-13v-393q0-8 5-13t13-5h36q8 0 13 5t5 13z m142 0v393q0 8-5 13t-12 5h-36q-8 0-13-5t-5-13v-393q0-8 5-13t13-5h36q7 0 12 5t5 13z m-303 554h250l-27 65q-4 5-9 6h-177q-6-1-10-6z m518-18v-36q0-8-5-13t-13-5h-54v-529q0-46-26-80t-63-34h-464q-37 0-63 33t-27 79v531h-53q-8 0-13 5t-5 13v36q0 8 5 13t13 5h172l39 93q9 21 31 35t44 15h178q23 0 44-15t30-35l39-93h173q8 0 13-5t5-13z" horiz-adv-x="785.7" />
153 <glyph glyph-name="trash" unicode="&#xf1f8;" d="M286 82v393q0 8-5 13t-13 5h-36q-8 0-13-5t-5-13v-393q0-8 5-13t13-5h36q8 0 13 5t5 13z m143 0v393q0 8-5 13t-13 5h-36q-8 0-13-5t-5-13v-393q0-8 5-13t13-5h36q8 0 13 5t5 13z m142 0v393q0 8-5 13t-12 5h-36q-8 0-13-5t-5-13v-393q0-8 5-13t13-5h36q7 0 12 5t5 13z m-303 554h250l-27 65q-4 5-9 6h-177q-6-1-10-6z m518-18v-36q0-8-5-13t-13-5h-54v-529q0-46-26-80t-63-34h-464q-37 0-63 33t-27 79v531h-53q-8 0-13 5t-5 13v36q0 8 5 13t13 5h172l39 93q9 21 31 35t44 15h178q23 0 44-15t30-35l39-93h173q8 0 13-5t5-13z" horiz-adv-x="785.7" />
1 NO CONTENT: modified file, binary diff hidden
NO CONTENT: modified file, binary diff hidden
1 NO CONTENT: modified file, binary diff hidden
NO CONTENT: modified file, binary diff hidden
1 NO CONTENT: modified file, binary diff hidden
NO CONTENT: modified file, binary diff hidden
@@ -1,10 +1,12 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2
2
3 <%inherit file="/base/base.mako"/>
3 <%inherit file="/base/base.mako"/>
4 <%namespace name="base" file="/base/base.mako"/>
4 <%namespace name="diff_block" file="/changeset/diff_block.mako"/>
5 <%namespace name="diff_block" file="/changeset/diff_block.mako"/>
6 <%namespace name="file_base" file="/files/base.mako"/>
5
7
6 <%def name="title()">
8 <%def name="title()">
7 ${_('%s Commit') % c.repo_name} - ${h.show_id(c.commit)}
9 ${_('{} Commit').format(c.repo_name)} - ${h.show_id(c.commit)}
8 %if c.rhodecode_name:
10 %if c.rhodecode_name:
9 &middot; ${h.branding(c.rhodecode_name)}
11 &middot; ${h.branding(c.rhodecode_name)}
10 %endif
12 %endif
@@ -19,120 +21,111 b''
19 </%def>
21 </%def>
20
22
21 <%def name="main()">
23 <%def name="main()">
22 <script>
24 <script type="text/javascript">
23 // TODO: marcink switch this to pyroutes
25 // TODO: marcink switch this to pyroutes
24 AJAX_COMMENT_DELETE_URL = "${h.route_path('repo_commit_comment_delete',repo_name=c.repo_name,commit_id=c.commit.raw_id,comment_id='__COMMENT_ID__')}";
26 AJAX_COMMENT_DELETE_URL = "${h.route_path('repo_commit_comment_delete',repo_name=c.repo_name,commit_id=c.commit.raw_id,comment_id='__COMMENT_ID__')}";
25 templateContext.commit_data.commit_id = "${c.commit.raw_id}";
27 templateContext.commit_data.commit_id = "${c.commit.raw_id}";
26 </script>
28 </script>
29
27 <div class="box">
30 <div class="box">
28
31
29 <div id="changeset_compare_view_content" class="summary changeset">
32 <div class="summary">
30 <div class="summary-detail">
33
31 <div class="fieldset">
34 <div class="fieldset">
32 <div class="left-label-summary">
35 <div class="left-content">
33 <p>${_('Commit')}</p>
36
34 <div class="right-label-summary">
37 <div class="left-content-avatar">
35 <code>
38 ${base.gravatar(c.commit.author_email, 30)}
36 ${h.show_id(c.commit)}
39 </div>
37 </code>
40
41 <div class="left-content-message">
42 <div class="fieldset collapsable-content no-hide" data-toggle="summary-details">
43 <div class="commit truncate-wrap">${h.urlify_commit_message(h.chop_at_smart(c.commit.message, '\n', suffix_if_chopped='...'), c.repo_name)}</div>
44 </div>
45
46 <div class="fieldset collapsable-content" data-toggle="summary-details" style="display: none">
47 <div class="commit">${h.urlify_commit_message(c.commit.message,c.repo_name)}</div>
48 </div>
49
50 <div class="fieldset" data-toggle="summary-details">
51 <div class="">
52 <table>
53 <tr class="file_author tooltip" title="${h.tooltip(h.author_string(c.commit.author_email))}">
54
55 <td>
56 <span class="user commit-author">${h.link_to_user(c.commit.author)}</span>
57 <span class="commit-date">- ${h.age_component(c.commit.date)}</span>
58 </td>
59
60 <td>
61 ## second cell for consistency with files
62 </td>
63 </tr>
64 </table>
65 </div>
66 </div>
67
68 </div>
69 </div>
70
71 <div class="right-content">
72
73 <div data-toggle="summary-details">
74 <div class="tags tags-main">
75 <code><a href="${h.route_path('repo_commit',repo_name=c.repo_name,commit_id=c.commit.raw_id)}">${h.show_id(c.commit)}</a></code>
38 <i class="tooltip icon-clipboard clipboard-action" data-clipboard-text="${c.commit.raw_id}" title="${_('Copy the full commit id')}"></i>
76 <i class="tooltip icon-clipboard clipboard-action" data-clipboard-text="${c.commit.raw_id}" title="${_('Copy the full commit id')}"></i>
39 % if hasattr(c.commit, 'phase'):
77 ${file_base.refs(c.commit)}
40 <span class="tag phase-${c.commit.phase} tooltip" title="${_('Commit phase')}">${c.commit.phase}</span>
78
79 ## phase
80 % if hasattr(c.commit, 'phase') and getattr(c.commit, 'phase') != 'public':
81 <span class="tag phase-${c.commit.phase} tooltip" title="${_('Commit phase')}">
82 <i class="icon-info"></i>${c.commit.phase}
83 </span>
41 % endif
84 % endif
42
85
43 ## obsolete commits
86 ## obsolete commits
44 % if hasattr(c.commit, 'obsolete'):
87 % if getattr(c.commit, 'obsolete', False):
45 % if c.commit.obsolete:
88 <span class="tag obsolete-${c.commit.obsolete} tooltip" title="${_('Evolve State')}">
46 <span class="tag obsolete-${c.commit.obsolete} tooltip" title="${_('Evolve State')}">${_('obsolete')}</span>
89 ${_('obsolete')}
47 % endif
90 </span>
48 % endif
91 % endif
49
92
50 ## hidden commits
93 ## hidden commits
51 % if hasattr(c.commit, 'hidden'):
94 % if getattr(c.commit, 'hidden', False):
52 % if c.commit.hidden:
95 <span class="tag hidden-${c.commit.hidden} tooltip" title="${_('Evolve State')}">
53 <span class="tag hidden-${c.commit.hidden} tooltip" title="${_('Evolve State')}">${_('hidden')}</span>
96 ${_('hidden')}
97 </span>
54 % endif
98 % endif
99 </div>
100
101 %if c.statuses:
102 <div class="tag status-tag-${c.statuses[0]} pull-right">
103 <i class="icon-circle review-status-${c.statuses[0]}"></i>
104 <div class="pull-right">${h.commit_status_lbl(c.statuses[0])}</div>
105 </div>
55 % endif
106 %endif
56
107
108 </div>
57
109
58 <div class="pull-right">
110 </div>
59 <span id="parent_link">
111 </div>
112
113 <div class="fieldset collapsable-content" data-toggle="summary-details" style="display: none;">
114 <div class="left-label-summary">
115 <p>${_('Commit navigation')}:</p>
116 <div class="right-label-summary">
117 <span id="parent_link" class="tag tagtag">
60 <a href="#parentCommit" title="${_('Parent Commit')}"><i class="icon-left icon-no-margin"></i>${_('parent')}</a>
118 <a href="#parentCommit" title="${_('Parent Commit')}"><i class="icon-left icon-no-margin"></i>${_('parent')}</a>
61 </span>
119 </span>
62 |
120
63 <span id="child_link">
121 <span id="child_link" class="tag tagtag">
64 <a href="#childCommit" title="${_('Child Commit')}">${_('child')}<i class="icon-right icon-no-margin"></i></a>
122 <a href="#childCommit" title="${_('Child Commit')}">${_('child')}<i class="icon-right icon-no-margin"></i></a>
65 </span>
123 </span>
66 </div>
124 </div>
67
68 </div>
69 </div>
125 </div>
70 </div>
126 </div>
71
127
72
128 <div class="fieldset collapsable-content" data-toggle="summary-details" style="display: none;">
73
74 <div class="fieldset">
75 <div class="left-label-summary">
76 <p>${_('Description')}:</p>
77 <div class="right-label-summary">
78 <div id="trimmed_message_box" class="commit">${h.urlify_commit_message(c.commit.message,c.repo_name)}</div>
79 <div id="message_expand" style="display:none;">
80 ${_('Expand')}
81 </div>
82 </div>
83 </div>
84 </div>
85
86 %if c.statuses:
87 <div class="fieldset">
88 <div class="left-label-summary">
89 <p>${_('Commit status')}:</p>
90 <div class="right-label-summary">
91 <div class="changeset-status-ico">
92 <div class="${'flag_status %s' % c.statuses[0]} pull-left"></div>
93 </div>
94 <div title="${_('Commit status')}" class="changeset-status-lbl">[${h.commit_status_lbl(c.statuses[0])}]</div>
95 </div>
96 </div>
97 </div>
98 %endif
99
100 <div class="fieldset">
101 <div class="left-label-summary">
102 <p>${_('References')}:</p>
103 <div class="right-label-summary">
104 <div class="tags">
105 %if c.commit.merge:
106 <span class="mergetag tag">
107 <i class="icon-merge"></i>${_('merge')}
108 </span>
109 %endif
110
111 %if h.is_hg(c.rhodecode_repo):
112 %for book in c.commit.bookmarks:
113 <span class="booktag tag" title="${h.tooltip(_('Bookmark %s') % book)}">
114 <a href="${h.route_path('repo_files:default_path',repo_name=c.repo_name,commit_id=c.commit.raw_id,_query=dict(at=book))}"><i class="icon-bookmark"></i>${h.shorter(book)}</a>
115 </span>
116 %endfor
117 %endif
118
119 %for tag in c.commit.tags:
120 <span class="tagtag tag" title="${h.tooltip(_('Tag %s') % tag)}">
121 <a href="${h.route_path('repo_files:default_path',repo_name=c.repo_name,commit_id=c.commit.raw_id,_query=dict(at=tag))}"><i class="icon-tag"></i>${tag}</a>
122 </span>
123 %endfor
124
125 %if c.commit.branch:
126 <span class="branchtag tag" title="${h.tooltip(_('Branch %s') % c.commit.branch)}">
127 <a href="${h.route_path('repo_files:default_path',repo_name=c.repo_name,commit_id=c.commit.raw_id,_query=dict(at=c.commit.branch))}"><i class="icon-code-fork"></i>${h.shorter(c.commit.branch)}</a>
128 </span>
129 %endif
130 </div>
131 </div>
132 </div>
133 </div>
134
135 <div class="fieldset">
136 <div class="left-label-summary">
129 <div class="left-label-summary">
137 <p>${_('Diff options')}:</p>
130 <p>${_('Diff options')}:</p>
138 <div class="right-label-summary">
131 <div class="right-label-summary">
@@ -153,58 +146,14 b''
153 </div>
146 </div>
154 </div>
147 </div>
155
148
156 <div class="fieldset">
149 <div class="clear-fix"></div>
157 <div class="left-label-summary">
150
158 <p>${_('Comments')}:</p>
151 <div class="btn-collapse" data-toggle="summary-details">
159 <div class="right-label-summary">
152 ${_('Show More')}
160 <div class="comments-number">
161 %if c.comments:
162 <a href="#comments">${_ungettext("%d Commit comment", "%d Commit comments", len(c.comments)) % len(c.comments)}</a>,
163 %else:
164 ${_ungettext("%d Commit comment", "%d Commit comments", len(c.comments)) % len(c.comments)}
165 %endif
166 %if c.inline_cnt:
167 <a href="#" onclick="return Rhodecode.comments.nextComment();" id="inline-comments-counter">${_ungettext("%d Inline Comment", "%d Inline Comments", c.inline_cnt) % c.inline_cnt}</a>
168 %else:
169 ${_ungettext("%d Inline Comment", "%d Inline Comments", c.inline_cnt) % c.inline_cnt}
170 %endif
171 </div>
172 </div>
173 </div>
174 </div>
153 </div>
175
154
176 <div class="fieldset">
177 <div class="left-label-summary">
178 <p>${_('Unresolved TODOs')}:</p>
179 <div class="right-label-summary">
180 <div class="comments-number">
181 % if c.unresolved_comments:
182 % for co in c.unresolved_comments:
183 <a class="permalink" href="#comment-${co.comment_id}" onclick="Rhodecode.comments.scrollToComment($('#comment-${co.comment_id}'))"> #${co.comment_id}</a>${'' if loop.last else ','}
184 % endfor
185 % else:
186 ${_('There are no unresolved TODOs')}
187 % endif
188 </div>
189 </div>
190 </div>
191 </div>
155 </div>
192
156
193 <div class="fieldset">
194 <div class="left-label-summary">
195 <p>${_('Author')}</p>
196
197 <div class="right-label-summary">
198 ${self.gravatar_with_user(c.commit.author)}
199 <div class="user-inline-data">- ${h.age_component(c.commit.date)}</div>
200 </div>
201 </div>
202
203 <div class="clear-fix"></div>
204
205 </div> <!-- end summary-detail -->
206 </div> <!-- end summary -->
207 </div>
208 <div class="cs_files">
157 <div class="cs_files">
209 <%namespace name="cbdiffs" file="/codeblocks/diffs.mako"/>
158 <%namespace name="cbdiffs" file="/codeblocks/diffs.mako"/>
210 ${cbdiffs.render_diffset_menu(c.changes[c.commit.raw_id])}
159 ${cbdiffs.render_diffset_menu(c.changes[c.commit.raw_id])}
@@ -212,6 +161,11 b''
212 c.changes[c.commit.raw_id], commit=c.commit, use_comments=True,inline_comments=c.inline_comments )}
161 c.changes[c.commit.raw_id], commit=c.commit, use_comments=True,inline_comments=c.inline_comments )}
213 </div>
162 </div>
214
163
164 <div class="comments-heading">
165 <i class="icon-comment"></i>
166 ${_('Comments')} ${len(c.comments)}
167 </div>
168
215 ## template for inline comment form
169 ## template for inline comment form
216 <%namespace name="comment" file="/changeset/changeset_file_comment.mako"/>
170 <%namespace name="comment" file="/changeset/changeset_file_comment.mako"/>
217
171
@@ -350,6 +304,7 b''
350
304
351 // inject comments into their proper positions
305 // inject comments into their proper positions
352 var file_comments = $('.inline-comment-placeholder');
306 var file_comments = $('.inline-comment-placeholder');
307
353 })
308 })
354 </script>
309 </script>
355
310
@@ -23,6 +23,7 b''
23 </%def>
23 </%def>
24
24
25 <%def name="main()">
25 <%def name="main()">
26
26 <div class="box">
27 <div class="box">
27 <div class="summary changeset">
28 <div class="summary changeset">
28 <div class="summary-detail">
29 <div class="summary-detail">
@@ -60,8 +61,7 b''
60 <div class="right-label-summary">
61 <div class="right-label-summary">
61 <div class="code-header" >
62 <div class="code-header" >
62 <div class="compare_header">
63 <div class="compare_header">
63 <div class="btn btn-primary">
64 <a class="btn btn-primary" href="${h.route_path('repo_compare',
64 <a href="${h.route_path('repo_compare',
65 repo_name=c.repo_name,
65 repo_name=c.repo_name,
66 source_ref_type='rev',
66 source_ref_type='rev',
67 source_ref=getattr(c.commit_ranges[0].parents[0] if c.commit_ranges[0].parents else h.EmptyCommit(), 'raw_id'),
67 source_ref=getattr(c.commit_ranges[0].parents[0] if c.commit_ranges[0].parents else h.EmptyCommit(), 'raw_id'),
@@ -75,7 +75,6 b''
75 </div>
75 </div>
76 </div>
76 </div>
77 </div>
77 </div>
78 </div>
79
78
80 <div class="clear-fix"></div>
79 <div class="clear-fix"></div>
81 </div> <!-- end summary-detail -->
80 </div> <!-- end summary-detail -->
@@ -104,8 +103,9 b''
104 <%namespace name="cbdiffs" file="/codeblocks/diffs.mako"/>
103 <%namespace name="cbdiffs" file="/codeblocks/diffs.mako"/>
105 <%namespace name="comment" file="/changeset/changeset_file_comment.mako"/>
104 <%namespace name="comment" file="/changeset/changeset_file_comment.mako"/>
106 <%namespace name="diff_block" file="/changeset/diff_block.mako"/>
105 <%namespace name="diff_block" file="/changeset/diff_block.mako"/>
107 ${cbdiffs.render_diffset_menu()}
106
108 %for commit in c.commit_ranges:
107 %for commit in c.commit_ranges:
108 ${cbdiffs.render_diffset_menu(c.changes[commit.raw_id])}
109 ${cbdiffs.render_diffset(
109 ${cbdiffs.render_diffset(
110 diffset=c.changes[commit.raw_id],
110 diffset=c.changes[commit.raw_id],
111 collapse_when_files_over=5,
111 collapse_when_files_over=5,
@@ -50,6 +50,12 b" return '%s_%s_%i' % (h.md5_safe(commit+f"
50 inline_comments=None,
50 inline_comments=None,
51
51
52 )">
52 )">
53
54 <%
55 diffset_container_id = h.md5(diffset.target_ref)
56 collapse_all = len(diffset.files) > collapse_when_files_over
57 %>
58
53 %if use_comments:
59 %if use_comments:
54 <div id="cb-comments-inline-container-template" class="js-template">
60 <div id="cb-comments-inline-container-template" class="js-template">
55 ${inline_comments_container([], inline_comments)}
61 ${inline_comments_container([], inline_comments)}
@@ -79,9 +85,6 b" return '%s_%s_%i' % (h.md5_safe(commit+f"
79 </div>
85 </div>
80
86
81 %endif
87 %endif
82 <%
83 collapse_all = len(diffset.files) > collapse_when_files_over
84 %>
85
88
86 %if c.user_session_attrs["diffmode"] == 'sideside':
89 %if c.user_session_attrs["diffmode"] == 'sideside':
87 <style>
90 <style>
@@ -107,37 +110,88 b' collapse_all = len(diffset.files) > coll'
107 %endif
110 %endif
108
111
109 <div class="diffset ${disable_new_comments and 'diffset-comments-disabled'}">
112 <div class="diffset ${disable_new_comments and 'diffset-comments-disabled'}">
110 <div class="diffset-heading ${diffset.limited_diff and 'diffset-heading-warning' or ''}">
113
111 %if commit:
114 <div style="height: 20px; line-height: 20px">
115 ## expand/collapse action
116 <div class="pull-left">
117 <a class="${'collapsed' if collapse_all else ''}" href="#expand-files" onclick="toggleExpand(this, '${diffset_container_id}'); return false">
118 % if collapse_all:
119 <i class="icon-plus-squared-alt icon-no-margin"></i>${_('Expand all files')}
120 % else:
121 <i class="icon-minus-squared-alt icon-no-margin"></i>${_('Collapse all files')}
122 % endif
123 </a>
124
125 </div>
126
127 ## todos
128 <div class="pull-right">
129 <div class="comments-number" style="padding-left: 10px">
130 % if hasattr(c, 'unresolved_comments') and hasattr(c, 'resolved_comments'):
131 <i class="icon-flag-filled" style="color: #949494">TODOs:</i>
132 % if c.unresolved_comments:
133 <a href="#show-todos" onclick="$('#todo-box').toggle(); return false">
134 ${_('{} unresolved').format(len(c.unresolved_comments))}
135 </a>
136 % else:
137 ${_('0 unresolved')}
138 % endif
139
140 ${_('{} Resolved').format(len(c.unresolved_comments))}
141 % endif
142 </div>
143 </div>
144
145 ## comments
112 <div class="pull-right">
146 <div class="pull-right">
113 <a class="btn tooltip" title="${h.tooltip(_('Browse Files at revision {}').format(commit.raw_id))}" href="${h.route_path('repo_files',repo_name=diffset.repo_name, commit_id=commit.raw_id, f_path='')}">
147 <div class="comments-number" style="padding-left: 10px">
114 ${_('Browse Files')}
148 % if hasattr(c, 'comments') and hasattr(c, 'inline_cnt'):
149 <i class="icon-comment" style="color: #949494">COMMENTS:</i>
150 % if c.comments:
151 <a href="#comments">${_ungettext("{} General", "{} General", len(c.comments)).format(len(c.comments))}</a>,
152 % else:
153 ${_('0 General')}
154 % endif
155
156 % if c.inline_cnt:
157 <a href="#" onclick="return Rhodecode.comments.nextComment();"
158 id="inline-comments-counter">${_ungettext("{} Inline", "{} Inline", c.inline_cnt).format(c.inline_cnt)}
115 </a>
159 </a>
160 % else:
161 ${_('0 Inline')}
162 % endif
163 % endif
164 </div>
165 </div>
166
167 </div>
168
169 % if diffset.limited_diff:
170 <div class="diffset-heading ${(diffset.limited_diff and 'diffset-heading-warning' or '')}">
171 <h2 class="clearinner">
172 ${_('The requested changes are too big and content was truncated.')}
173 <a href="${h.current_route_path(request, fulldiff=1)}" onclick="return confirm('${_("Showing a big diff might take some time and resources, continue?")}')">${_('Show full diff')}</a>
174 </h2>
175 </div>
176 ## commit range header for each individual diff
177 % elif commit and hasattr(c, 'commit_ranges') and len(c.commit_ranges) > 1:
178 <div class="diffset-heading ${(diffset.limited_diff and 'diffset-heading-warning' or '')}">
179 <div class="clearinner">
180 <a class="tooltip revision" title="${h.tooltip(commit.message)}" href="${h.route_path('repo_commit',repo_name=diffset.repo_name,commit_id=commit.raw_id)}">${('r%s:%s' % (commit.idx,h.short_id(commit.raw_id)))}</a>
181 </div>
116 </div>
182 </div>
117 %endif
183 % endif
118 <h2 class="clearinner">
184
119 ## invidual commit
185 <div id="todo-box">
120 % if commit:
186 % if hasattr(c, 'unresolved_comments') and c.unresolved_comments:
121 <a class="tooltip revision" title="${h.tooltip(commit.message)}" href="${h.route_path('repo_commit',repo_name=diffset.repo_name,commit_id=commit.raw_id)}">${('r%s:%s' % (commit.idx,h.short_id(commit.raw_id)))}</a> -
187 % for co in c.unresolved_comments:
122 ${h.age_component(commit.date)}
188 <a class="permalink" href="#comment-${co.comment_id}"
123 % if diffset.limited_diff:
189 onclick="Rhodecode.comments.scrollToComment($('#comment-${co.comment_id}'))">
124 - ${_('The requested changes are too big and content was truncated.')}
190 <i class="icon-flag-filled-red"></i>
125 ${_ungettext('%(num)s file changed.', '%(num)s files changed.', diffset.changed_files) % {'num': diffset.changed_files}}
191 ${co.comment_id}</a>${('' if loop.last else ',')}
126 <a href="${h.current_route_path(request, fulldiff=1)}" onclick="return confirm('${_("Showing a big diff might take some time and resources, continue?")}')">${_('Show full diff')}</a>
192 % endfor
127 % elif hasattr(c, 'commit_ranges') and len(c.commit_ranges) > 1:
128 ## compare diff, has no file-selector and we want to show stats anyway
129 ${_ungettext('{num} file changed: {linesadd} inserted, ''{linesdel} deleted',
130 '{num} files changed: {linesadd} inserted, {linesdel} deleted', diffset.changed_files) \
131 .format(num=diffset.changed_files, linesadd=diffset.lines_added, linesdel=diffset.lines_deleted)}
132 % endif
193 % endif
133 % else:
134 ## pull requests/compare
135 ${_('File Changes')}
136 % endif
137
138 </h2>
139 </div>
194 </div>
140
141 %if diffset.has_hidden_changes:
195 %if diffset.has_hidden_changes:
142 <p class="empty_data">${_('Some changes may be hidden')}</p>
196 <p class="empty_data">${_('Some changes may be hidden')}</p>
143 %elif not diffset.files:
197 %elif not diffset.files:
@@ -157,14 +211,14 b' collapse_all = len(diffset.files) > coll'
157 ## anchor with support of sticky header
211 ## anchor with support of sticky header
158 <div class="anchor" id="a_${h.FID(filediff.raw_id, filediff.patch['filename'])}"></div>
212 <div class="anchor" id="a_${h.FID(filediff.raw_id, filediff.patch['filename'])}"></div>
159
213
160 <input ${(collapse_all and 'checked' or '')} class="filediff-collapse-state" id="filediff-collapse-${id(filediff)}" type="checkbox" onchange="updateSticky();">
214 <input ${(collapse_all and 'checked' or '')} class="filediff-collapse-state collapse-${diffset_container_id}" id="filediff-collapse-${id(filediff)}" type="checkbox" onchange="updateSticky();">
161 <div
215 <div
162 class="filediff"
216 class="filediff"
163 data-f-path="${filediff.patch['filename']}"
217 data-f-path="${filediff.patch['filename']}"
164 data-anchor-id="${h.FID(filediff.raw_id, filediff.patch['filename'])}"
218 data-anchor-id="${h.FID(filediff.raw_id, filediff.patch['filename'])}"
165 >
219 >
166 <label for="filediff-collapse-${id(filediff)}" class="filediff-heading">
220 <label for="filediff-collapse-${id(filediff)}" class="filediff-heading">
167 <div class="filediff-collapse-indicator"></div>
221 <div class="filediff-collapse-indicator icon-"></div>
168 ${diff_ops(filediff)}
222 ${diff_ops(filediff)}
169 </label>
223 </label>
170
224
@@ -292,25 +346,26 b' collapse_all = len(diffset.files) > coll'
292 display_state = ''
346 display_state = ''
293 %>
347 %>
294 <div class="filediffs filediff-outdated" style="${display_state}">
348 <div class="filediffs filediff-outdated" style="${display_state}">
295 <input ${(collapse_all and 'checked' or '')} class="filediff-collapse-state" id="filediff-collapse-${id(filename)}" type="checkbox" onchange="updateSticky();">
349 <input ${(collapse_all and 'checked' or '')} class="filediff-collapse-state collapse-${diffset_container_id}" id="filediff-collapse-${id(filename)}" type="checkbox" onchange="updateSticky();">
296 <div class="filediff" data-f-path="${filename}" id="a_${h.FID(filediff.raw_id, filename)}">
350 <div class="filediff" data-f-path="${filename}" id="a_${h.FID(filediff.raw_id, filename)}">
297 <label for="filediff-collapse-${id(filename)}" class="filediff-heading">
351 <label for="filediff-collapse-${id(filename)}" class="filediff-heading">
298 <div class="filediff-collapse-indicator"></div>
352 <div class="filediff-collapse-indicator"></div>
353
299 <span class="pill">
354 <span class="pill">
300 ## file was deleted
355 ## file was deleted
301 <strong>${filename}</strong>
356 ${filename}
302 </span>
357 </span>
303 <span class="pill-group" style="float: left">
358 <span class="pill-group pull-left" >
304 ## file op, doesn't need translation
359 ## file op, doesn't need translation
305 <span class="pill" op="removed">removed in this version</span>
360 <span class="pill" op="removed">removed in this version</span>
306 </span>
361 </span>
307 <a class="pill filediff-anchor" href="#a_${h.FID(filediff.raw_id, filename)}"></a>
362 <a class="pill filediff-anchor" href="#a_${h.FID(filediff.raw_id, filename)}"></a>
308 <span class="pill-group" style="float: right">
363 <span class="pill-group pull-right">
309 <span class="pill" op="deleted">-${comments_dict['stats']}</span>
364 <span class="pill" op="deleted">-${comments_dict['stats']}</span>
310 </span>
365 </span>
311 </label>
366 </label>
312
367
313 <table class="cb cb-diff-${c.user_session_attrs["diffmode"]} code-highlight ${over_lines_changed_limit and 'cb-collapsed' or ''}">
368 <table class="cb cb-diff-${c.user_session_attrs["diffmode"]} code-highlight ${(over_lines_changed_limit and 'cb-collapsed' or '')}">
314 <tr>
369 <tr>
315 % if c.user_session_attrs["diffmode"] == 'unified':
370 % if c.user_session_attrs["diffmode"] == 'unified':
316 <td></td>
371 <td></td>
@@ -358,29 +413,30 b' from rhodecode.lib.diffs import NEW_FILE'
358 MOD_FILENODE, RENAMED_FILENODE, CHMOD_FILENODE, BIN_FILENODE, COPIED_FILENODE
413 MOD_FILENODE, RENAMED_FILENODE, CHMOD_FILENODE, BIN_FILENODE, COPIED_FILENODE
359 %>
414 %>
360 <span class="pill">
415 <span class="pill">
416 <i class="icon-file-text"></i>
361 %if filediff.source_file_path and filediff.target_file_path:
417 %if filediff.source_file_path and filediff.target_file_path:
362 %if filediff.source_file_path != filediff.target_file_path:
418 %if filediff.source_file_path != filediff.target_file_path:
363 ## file was renamed, or copied
419 ## file was renamed, or copied
364 %if RENAMED_FILENODE in filediff.patch['stats']['ops']:
420 %if RENAMED_FILENODE in filediff.patch['stats']['ops']:
365 <strong>${filediff.target_file_path}</strong><del>${filediff.source_file_path}</del>
421 ${filediff.target_file_path}<del>${filediff.source_file_path}</del>
366 <% final_path = filediff.target_file_path %>
422 <% final_path = filediff.target_file_path %>
367 %elif COPIED_FILENODE in filediff.patch['stats']['ops']:
423 %elif COPIED_FILENODE in filediff.patch['stats']['ops']:
368 <strong>${filediff.target_file_path}</strong>${filediff.source_file_path}
424 ${filediff.target_file_path}${filediff.source_file_path}
369 <% final_path = filediff.target_file_path %>
425 <% final_path = filediff.target_file_path %>
370 %endif
426 %endif
371 %else:
427 %else:
372 ## file was modified
428 ## file was modified
373 <strong>${filediff.source_file_path}</strong>
429 ${filediff.source_file_path}
374 <% final_path = filediff.source_file_path %>
430 <% final_path = filediff.source_file_path %>
375 %endif
431 %endif
376 %else:
432 %else:
377 %if filediff.source_file_path:
433 %if filediff.source_file_path:
378 ## file was deleted
434 ## file was deleted
379 <strong>${filediff.source_file_path}</strong>
435 ${filediff.source_file_path}
380 <% final_path = filediff.source_file_path %>
436 <% final_path = filediff.source_file_path %>
381 %else:
437 %else:
382 ## file was added
438 ## file was added
383 <strong>${filediff.target_file_path}</strong>
439 ${filediff.target_file_path}
384 <% final_path = filediff.target_file_path %>
440 <% final_path = filediff.target_file_path %>
385 %endif
441 %endif
386 %endif
442 %endif
@@ -389,7 +445,7 b' from rhodecode.lib.diffs import NEW_FILE'
389 ## anchor link
445 ## anchor link
390 <a class="pill filediff-anchor" href="#a_${h.FID(filediff.raw_id, filediff.patch['filename'])}"></a>
446 <a class="pill filediff-anchor" href="#a_${h.FID(filediff.raw_id, filediff.patch['filename'])}"></a>
391
447
392 <span class="pill-group" style="float: right">
448 <span class="pill-group pull-right">
393
449
394 ## ops pills
450 ## ops pills
395 %if filediff.limited_diff:
451 %if filediff.limited_diff:
@@ -501,13 +557,11 b' from rhodecode.lib.diffs import NEW_FILE'
501 ${commentblock.comment_block(comment, inline=True)}
557 ${commentblock.comment_block(comment, inline=True)}
502 %endfor
558 %endfor
503 % if comments and comments[-1].outdated:
559 % if comments and comments[-1].outdated:
504 <span class="btn btn-secondary cb-comment-add-button comment-outdated}"
560 <span class="btn btn-secondary cb-comment-add-button comment-outdated}" style="display: none;}">
505 style="display: none;}">
506 ${_('Add another comment')}
561 ${_('Add another comment')}
507 </span>
562 </span>
508 % else:
563 % else:
509 <span onclick="return Rhodecode.comments.createComment(this)"
564 <span onclick="return Rhodecode.comments.createComment(this)" class="btn btn-secondary cb-comment-add-button">
510 class="btn btn-secondary cb-comment-add-button">
511 ${_('Add another comment')}
565 ${_('Add another comment')}
512 </span>
566 </span>
513 % endif
567 % endif
@@ -717,7 +771,8 b' def get_comments_for(diff_type, comments'
717 </button>
771 </button>
718 </%def>
772 </%def>
719
773
720 <%def name="render_diffset_menu(diffset=None, range_diff_on=None)">
774 <%def name="render_diffset_menu(diffset, range_diff_on=None)">
775 <% diffset_container_id = h.md5(diffset.target_ref) %>
721
776
722 <div id="diff-file-sticky" class="diffset-menu clearinner">
777 <div id="diff-file-sticky" class="diffset-menu clearinner">
723 ## auto adjustable
778 ## auto adjustable
@@ -725,22 +780,22 b' def get_comments_for(diff_type, comments'
725 <div class="sidebar__bar">
780 <div class="sidebar__bar">
726 <div class="pull-right">
781 <div class="pull-right">
727 <div class="btn-group">
782 <div class="btn-group">
728
783 <a class="btn tooltip toggle-wide-diff" href="#toggle-wide-diff" onclick="toggleWideDiff(this); return false" title="${h.tooltip(_('Toggle wide diff'))}">
729 ## DIFF OPTIONS via Select2
784 <i class="icon-wide-mode"></i>
730 <div class="pull-left">
785 </a>
731 ${h.hidden('diff_menu')}
732 </div>
786 </div>
787 <div class="btn-group">
733
788
734 <a
789 <a
735 class="btn ${(c.user_session_attrs["diffmode"] == 'sideside' and 'btn-primary')} tooltip"
790 class="btn ${(c.user_session_attrs["diffmode"] == 'sideside' and 'btn-active')} tooltip"
736 title="${h.tooltip(_('View side by side'))}"
791 title="${h.tooltip(_('View diff as side by side'))}"
737 href="${h.current_route_path(request, diffmode='sideside')}">
792 href="${h.current_route_path(request, diffmode='sideside')}">
738 <span>${_('Side by Side')}</span>
793 <span>${_('Side by Side')}</span>
739 </a>
794 </a>
740
795
741 <a
796 <a
742 class="btn ${(c.user_session_attrs["diffmode"] == 'unified' and 'btn-primary')} tooltip"
797 class="btn ${(c.user_session_attrs["diffmode"] == 'unified' and 'btn-active')} tooltip"
743 title="${h.tooltip(_('View unified'))}" href="${h.current_route_path(request, diffmode='unified')}">
798 title="${h.tooltip(_('View diff as unified'))}" href="${h.current_route_path(request, diffmode='unified')}">
744 <span>${_('Unified')}</span>
799 <span>${_('Unified')}</span>
745 </a>
800 </a>
746
801
@@ -760,20 +815,20 b' def get_comments_for(diff_type, comments'
760 </a>
815 </a>
761 % endif
816 % endif
762 </div>
817 </div>
818 <div class="btn-group">
819
820 <div class="pull-left">
821 ${h.hidden('diff_menu_{}'.format(diffset_container_id))}
822 </div>
823
824 </div>
763 </div>
825 </div>
764 <div class="pull-left">
826 <div class="pull-left">
765 <div class="btn-group">
827 <div class="btn-group">
766 <div class="pull-left">
828 <div class="pull-left">
767 ${h.hidden('file_filter')}
829 ${h.hidden('file_filter_{}'.format(diffset_container_id))}
768 </div>
830 </div>
769 <a
831
770 class="btn"
771 href="#"
772 onclick="$('input[class=filediff-collapse-state]').prop('checked', false); updateSticky(); return false">${_('Expand All Files')}</a>
773 <a
774 class="btn"
775 href="#"
776 onclick="$('input[class=filediff-collapse-state]').prop('checked', true); updateSticky(); return false">${_('Collapse All Files')}</a>
777 </div>
832 </div>
778 </div>
833 </div>
779 </div>
834 </div>
@@ -788,19 +843,19 b' def get_comments_for(diff_type, comments'
788 </div>
843 </div>
789
844
790 % if diffset:
845 % if diffset:
791
792 %if diffset.limited_diff:
846 %if diffset.limited_diff:
793 <% file_placeholder = _ungettext('%(num)s file changed', '%(num)s files changed', diffset.changed_files) % {'num': diffset.changed_files} %>
847 <% file_placeholder = _ungettext('%(num)s file changed', '%(num)s files changed', diffset.changed_files) % {'num': diffset.changed_files} %>
794 %else:
848 %else:
795 <% file_placeholder = _ungettext('%(num)s file changed: %(linesadd)s inserted, ''%(linesdel)s deleted', '%(num)s files changed: %(linesadd)s inserted, %(linesdel)s deleted', diffset.changed_files) % {'num': diffset.changed_files, 'linesadd': diffset.lines_added, 'linesdel': diffset.lines_deleted}%>
849 <% file_placeholder = h.literal(_ungettext('%(num)s file changed: <span class="op-added">%(linesadd)s inserted</span>, <span class="op-deleted">%(linesdel)s deleted</span>', '%(num)s files changed: <span class="op-added">%(linesadd)s inserted</span>, <span class="op-deleted">%(linesdel)s deleted</span>',
850 diffset.changed_files) % {'num': diffset.changed_files, 'linesadd': diffset.lines_added, 'linesdel': diffset.lines_deleted}) %>
851
796 %endif
852 %endif
797 ## case on range-diff placeholder needs to be updated
853 ## case on range-diff placeholder needs to be updated
798 % if range_diff_on is True:
854 % if range_diff_on is True:
799 <% file_placeholder = _('Disabled on range diff') %>
855 <% file_placeholder = _('Disabled on range diff') %>
800 % endif
856 % endif
801
857
802 <script>
858 <script type="text/javascript">
803
804 var feedFilesOptions = function (query, initialData) {
859 var feedFilesOptions = function (query, initialData) {
805 var data = {results: []};
860 var data = {results: []};
806 var isQuery = typeof query.term !== 'undefined';
861 var isQuery = typeof query.term !== 'undefined';
@@ -826,14 +881,13 b' def get_comments_for(diff_type, comments'
826 query.callback(data);
881 query.callback(data);
827 };
882 };
828
883
829 var formatFileResult = function(result, container, query, escapeMarkup) {
884 var selectionFormatter = function(data, escapeMarkup) {
830 return function(data, escapeMarkup) {
831 var container = '<div class="filelist" style="padding-right:100px">{0}</div>';
885 var container = '<div class="filelist" style="padding-right:100px">{0}</div>';
832 var tmpl = '<span style="margin-right:-50px"><strong>{0}</strong></span>'.format(escapeMarkup(data['text']));
886 var tmpl = '<div><strong>{0}</strong></div>'.format(escapeMarkup(data['text']));
833 var pill = '<span class="pill-group" style="float: right;margin-right: -100px">' +
887 var pill = '<div class="pill-group" style="position: absolute; top:7px; right: 0">' +
834 '<span class="pill" op="added">{0}</span>' +
888 '<span class="pill" op="added">{0}</span>' +
835 '<span class="pill" op="deleted">{1}</span>' +
889 '<span class="pill" op="deleted">{1}</span>' +
836 '</span>'
890 '</div>'
837 ;
891 ;
838 var added = data['ops']['added'];
892 var added = data['ops']['added'];
839 if (added === 0) {
893 if (added === 0) {
@@ -847,11 +901,20 b' def get_comments_for(diff_type, comments'
847
901
848 tmpl += pill.format(added, deleted);
902 tmpl += pill.format(added, deleted);
849 return container.format(tmpl);
903 return container.format(tmpl);
850
904 };
851 }(result, escapeMarkup);
905 var formatFileResult = function(result, container, query, escapeMarkup) {
906 return selectionFormatter(result, escapeMarkup);
852 };
907 };
853
908
854 var preloadFileFilterData = {
909 var formatSelection = function (data, container) {
910 return '${file_placeholder}'
911 };
912
913 if (window.preloadFileFilterData === undefined) {
914 window.preloadFileFilterData = {}
915 }
916
917 preloadFileFilterData["${diffset_container_id}"] = {
855 results: [
918 results: [
856 % for filediff in diffset.files:
919 % for filediff in diffset.files:
857 {id:"a_${h.FID(filediff.raw_id, filediff.patch['filename'])}",
920 {id:"a_${h.FID(filediff.raw_id, filediff.patch['filename'])}",
@@ -861,35 +924,48 b' def get_comments_for(diff_type, comments'
861 ]
924 ]
862 };
925 };
863
926
864 $(document).ready(function () {
927 var diffFileFilterId = "#file_filter_" + "${diffset_container_id}";
865
928 var diffFileFilter = $(diffFileFilterId).select2({
866 var fileFilter = $("#file_filter").select2({
867 'dropdownAutoWidth': true,
929 'dropdownAutoWidth': true,
868 'width': 'auto',
930 'width': 'auto',
869 'placeholder': "${file_placeholder}",
931
870 containerCssClass: "drop-menu",
932 containerCssClass: "drop-menu",
871 dropdownCssClass: "drop-menu-dropdown",
933 dropdownCssClass: "drop-menu-dropdown",
872 data: preloadFileFilterData,
934 data: preloadFileFilterData["${diffset_container_id}"],
873 query: function(query) {
935 query: function(query) {
874 feedFilesOptions(query, preloadFileFilterData);
936 feedFilesOptions(query, preloadFileFilterData["${diffset_container_id}"]);
875 },
937 },
876 formatResult: formatFileResult
938 initSelection: function(element, callback) {
939 callback({'init': true});
940 },
941 formatResult: formatFileResult,
942 formatSelection: formatSelection
877 });
943 });
878
944
879 % if range_diff_on is True:
945 % if range_diff_on is True:
880 fileFilter.select2("enable", false);
946 diffFileFilter.select2("enable", false);
881 % endif
947 % endif
882
948
883 $("#file_filter").on('click', function (e) {
949 $(diffFileFilterId).on('select2-selecting', function (e) {
950 var idSelector = e.choice.id;
951
952 // expand the container if we quick-select the field
953 $('#'+idSelector).next().prop('checked', false);
954 // hide the mast as we later do preventDefault()
955 $("#select2-drop-mask").click();
956
957 window.location.hash = '#'+idSelector;
958 updateSticky();
959
884 e.preventDefault();
960 e.preventDefault();
885 var selected = $('#file_filter').select2('data');
886 var idSelector = "#"+selected.id;
887 window.location.hash = idSelector;
888 // expand the container if we quick-select the field
889 $(idSelector).next().prop('checked', false);
890 updateSticky()
891 });
961 });
892
962
963 </script>
964 % endif
965
966 <script type="text/javascript">
967 $(document).ready(function () {
968
893 var contextPrefix = _gettext('Context file: ');
969 var contextPrefix = _gettext('Context file: ');
894 ## sticky sidebar
970 ## sticky sidebar
895 var sidebarElement = document.getElementById('diff-file-sticky');
971 var sidebarElement = document.getElementById('diff-file-sticky');
@@ -900,7 +976,7 b' def get_comments_for(diff_type, comments'
900 });
976 });
901 sidebarElement.addEventListener('affixed.static.stickySidebar', function () {
977 sidebarElement.addEventListener('affixed.static.stickySidebar', function () {
902 // reset our file so it's not holding new value
978 // reset our file so it's not holding new value
903 $('.fpath-placeholder-text').html(contextPrefix)
979 $('.fpath-placeholder-text').html(contextPrefix + ' - ')
904 });
980 });
905
981
906 updateSticky = function () {
982 updateSticky = function () {
@@ -908,16 +984,10 b' def get_comments_for(diff_type, comments'
908 Waypoint.refreshAll();
984 Waypoint.refreshAll();
909 };
985 };
910
986
911 var animateText = $.debounce(100, function(fPath, anchorId) {
987 var animateText = function (fPath, anchorId) {
912 fPath = Select2.util.escapeMarkup(fPath);
988 fPath = Select2.util.escapeMarkup(fPath);
913
914 // animate setting the text
915 var callback = function () {
916 $('.fpath-placeholder-text').animate({'opacity': 1.00}, 200)
917 $('.fpath-placeholder-text').html(contextPrefix + '<a href="#a_' + anchorId + '">' + fPath + '</a>')
989 $('.fpath-placeholder-text').html(contextPrefix + '<a href="#a_' + anchorId + '">' + fPath + '</a>')
918 };
990 };
919 $('.fpath-placeholder-text').animate({'opacity': 0.15}, 200, callback);
920 });
921
991
922 ## dynamic file waypoints
992 ## dynamic file waypoints
923 var setFPathInfo = function(fPath, anchorId){
993 var setFPathInfo = function(fPath, anchorId){
@@ -925,6 +995,7 b' def get_comments_for(diff_type, comments'
925 };
995 };
926
996
927 var codeBlock = $('.filediff');
997 var codeBlock = $('.filediff');
998
928 // forward waypoint
999 // forward waypoint
929 codeBlock.waypoint(
1000 codeBlock.waypoint(
930 function(direction) {
1001 function(direction) {
@@ -932,7 +1003,9 b' def get_comments_for(diff_type, comments'
932 setFPathInfo($(this.element).data('fPath'), $(this.element).data('anchorId'))
1003 setFPathInfo($(this.element).data('fPath'), $(this.element).data('anchorId'))
933 }
1004 }
934 }, {
1005 }, {
935 offset: 70,
1006 offset: function () {
1007 return 70;
1008 },
936 context: '.fpath-placeholder'
1009 context: '.fpath-placeholder'
937 }
1010 }
938 );
1011 );
@@ -945,26 +1018,26 b' def get_comments_for(diff_type, comments'
945 }
1018 }
946 }, {
1019 }, {
947 offset: function () {
1020 offset: function () {
948 return -this.element.clientHeight + 90
1021 return -this.element.clientHeight + 90;
949 },
1022 },
950 context: '.fpath-placeholder'
1023 context: '.fpath-placeholder'
951 }
1024 }
952 );
1025 );
953
1026
954 var preloadDiffMenuData = {
1027 toggleWideDiff = function (el) {
955 results: [
956 ## Wide diff mode
957 {
958 id: 1,
959 text: _gettext('Toggle Wide Mode diff'),
960 action: function () {
961 updateSticky();
1028 updateSticky();
962 var wide = Rhodecode.comments.toggleWideMode(this);
1029 var wide = Rhodecode.comments.toggleWideMode(this);
963 storeUserSessionAttr('rc_user_session_attr.wide_diff_mode', wide);
1030 storeUserSessionAttr('rc_user_session_attr.wide_diff_mode', wide);
1031 if (wide === true) {
1032 $(el).addClass('btn-active');
1033 } else {
1034 $(el).removeClass('btn-active');
1035 }
964 return null;
1036 return null;
965 },
1037 };
966 url: null,
1038
967 },
1039 var preloadDiffMenuData = {
1040 results: [
968
1041
969 ## Whitespace change
1042 ## Whitespace change
970 % if request.GET.get('ignorews', '') == '1':
1043 % if request.GET.get('ignorews', '') == '1':
@@ -1006,26 +1079,43 b' def get_comments_for(diff_type, comments'
1006 // get stored diff mode and pre-enable it
1079 // get stored diff mode and pre-enable it
1007 if (templateContext.session_attrs.wide_diff_mode === "true") {
1080 if (templateContext.session_attrs.wide_diff_mode === "true") {
1008 Rhodecode.comments.toggleWideMode(null);
1081 Rhodecode.comments.toggleWideMode(null);
1082 $('.toggle-wide-diff').addClass('btn-active');
1009 }
1083 }
1010
1084
1011 $("#diff_menu").select2({
1085 var diffMenuId = "#diff_menu_" + "${diffset_container_id}";
1086 $(diffMenuId).select2({
1012 minimumResultsForSearch: -1,
1087 minimumResultsForSearch: -1,
1013 containerCssClass: "drop-menu",
1088 containerCssClass: "drop-menu-no-width",
1014 dropdownCssClass: "drop-menu-dropdown",
1089 dropdownCssClass: "drop-menu-dropdown",
1015 dropdownAutoWidth: true,
1090 dropdownAutoWidth: true,
1016 data: preloadDiffMenuData,
1091 data: preloadDiffMenuData,
1017 placeholder: "${_('Diff Options')}",
1092 placeholder: "${_('...')}",
1018 });
1093 });
1019 $("#diff_menu").on('select2-selecting', function (e) {
1094 $(diffMenuId).on('select2-selecting', function (e) {
1020 e.choice.action();
1095 e.choice.action();
1021 if (e.choice.url !== null) {
1096 if (e.choice.url !== null) {
1022 window.location = e.choice.url
1097 window.location = e.choice.url
1023 }
1098 }
1024 });
1099 });
1025
1100 toggleExpand = function (el, diffsetEl) {
1101 var el = $(el);
1102 if (el.hasClass('collapsed')) {
1103 $('.filediff-collapse-state.collapse-{0}'.format(diffsetEl)).prop('checked', false);
1104 el.removeClass('collapsed');
1105 el.html(
1106 '<i class="icon-minus-squared-alt icon-no-margin"></i>' +
1107 _gettext('Collapse all files'));
1108 }
1109 else {
1110 $('.filediff-collapse-state.collapse-{0}'.format(diffsetEl)).prop('checked', true);
1111 el.addClass('collapsed');
1112 el.html(
1113 '<i class="icon-plus-squared-alt icon-no-margin"></i>' +
1114 _gettext('Expand all files'));
1115 }
1116 updateSticky()
1117 }
1026 });
1118 });
1027
1028 </script>
1119 </script>
1029 % endif
1030
1120
1031 </%def>
1121 </%def>
@@ -39,7 +39,7 b''
39 </script>
39 </script>
40
40
41 <div>
41 <div>
42 <div id="files_data">
42 <div>
43 <%include file='files_pjax.mako'/>
43 <%include file='files_pjax.mako'/>
44 </div>
44 </div>
45 </div>
45 </div>
@@ -49,7 +49,7 b''
49 </div>
49 </div>
50
50
51 <div class="table">
51 <div class="table">
52 <div id="files_data">
52 <div>
53
53
54 <div id="codeblock" class="codeblock">
54 <div id="codeblock" class="codeblock">
55 <div class="editor-items">
55 <div class="editor-items">
@@ -50,7 +50,7 b''
50 </div>
50 </div>
51
51
52 <div class="table">
52 <div class="table">
53 <div id="files_data">
53 <div>
54
54
55 <div id="codeblock" class="codeblock">
55 <div id="codeblock" class="codeblock">
56 <div class="editor-items">
56 <div class="editor-items">
@@ -31,7 +31,6 b''
31 <p>${_('File last commit')}</p>
31 <p>${_('File last commit')}</p>
32 <div class="right-label-summary">
32 <div class="right-label-summary">
33 <code><a href="${h.route_path('repo_commit',repo_name=c.repo_name,commit_id=c.file_last_commit.raw_id)}">${h.show_id(c.file_last_commit)}</a></code>
33 <code><a href="${h.route_path('repo_commit',repo_name=c.repo_name,commit_id=c.file_last_commit.raw_id)}">${h.show_id(c.file_last_commit)}</a></code>
34
35 ${file_base.refs(c.file_last_commit)}
34 ${file_base.refs(c.file_last_commit)}
36 </div>
35 </div>
37 </div>
36 </div>
@@ -40,8 +39,11 b''
40
39
41 <div class="right-content">
40 <div class="right-content">
42 <div data-toggle="summary-details">
41 <div data-toggle="summary-details">
43 <div class="tags commit-info tags-main">
42 <div class="tags tags-main">
44 <code><a href="${h.route_path('repo_commit',repo_name=c.repo_name,commit_id=c.commit.raw_id)}">${h.show_id(c.commit)}</a></code>
43 <code>
44 <a href="${h.route_path('repo_commit',repo_name=c.repo_name,commit_id=c.commit.raw_id)}">${h.show_id(c.commit)}</a>
45 </code>
46 <i class="tooltip icon-clipboard clipboard-action" data-clipboard-text="${c.commit.raw_id}" title="${_('Copy the full commit id')}"></i>
45 ${file_base.refs(c.commit)}
47 ${file_base.refs(c.commit)}
46 </div>
48 </div>
47 </div>
49 </div>
@@ -25,11 +25,12 b''
25 </div>
25 </div>
26
26
27 <div class="right-content">
27 <div class="right-content">
28 <div class="tags commit-info">
28 <div class="tags">
29 <code>
29 <code>
30 <a href="${h.route_path('repo_commit',repo_name=c.repo_name,commit_id=c.commit.raw_id)}">${h.show_id(c.commit)}</a>
30 <a href="${h.route_path('repo_commit',repo_name=c.repo_name,commit_id=c.commit.raw_id)}">${h.show_id(c.commit)}</a>
31 </code>
31 </code>
32
32
33 <i class="tooltip icon-clipboard clipboard-action" data-clipboard-text="${c.commit.raw_id}" title="${_('Copy the full commit id')}"></i>
33 ${file_base.refs(c.commit)}
34 ${file_base.refs(c.commit)}
34 </div>
35 </div>
35 </div>
36 </div>
@@ -77,7 +77,7 b''
77 </div>
77 </div>
78
78
79 <div class="upload-form table">
79 <div class="upload-form table">
80 <div id="files_data">
80 <div>
81
81
82 <div class="dropzone-wrapper" id="file-uploader">
82 <div class="dropzone-wrapper" id="file-uploader">
83 <div class="dropzone-pure">
83 <div class="dropzone-pure">
General Comments 0
You need to be logged in to leave comments. Login now