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