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