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