redmine_extensions 0.1.14 → 0.1.15

Sign up to get free protection for your applications and to get access to all the features.
Files changed (118) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/redmine_extensions/redmine_extensions.js.orig +648 -0
  3. data/app/views/easy_entity_assignments/_query_index.html.erb.orig +16 -0
  4. data/config/locales/cs.yml +4 -1
  5. data/config/locales/en.yml +1 -0
  6. data/lib/generators/redmine_extensions/entity/templates/context_menu.html.erb.erb +14 -1
  7. data/lib/generators/redmine_extensions/entity/templates/controller.rb.erb +40 -6
  8. data/lib/generators/redmine_extensions/entity/templates/edit.js.erb.erb +5 -5
  9. data/lib/generators/redmine_extensions/entity/templates/index.js.erb.erb +3 -3
  10. data/lib/generators/redmine_extensions/entity/templates/new.js.erb.erb +5 -5
  11. data/lib/generators/redmine_extensions/entity/templates/show.js.erb.erb +3 -3
  12. data/lib/redmine_extensions/easy_query_helpers/outputs.rb +18 -2
  13. data/lib/redmine_extensions/query_output.rb +30 -11
  14. data/lib/redmine_extensions/redmine_patches/controllers/issues_controller_patch.rb +9 -0
  15. data/lib/redmine_extensions/version.rb +1 -1
  16. data/lib/redmine_extensions/version.rb.orig +7 -0
  17. data/spec/redmine/app/controllers/custom_field_enumerations_controller.rb +75 -0
  18. data/spec/redmine/app/controllers/imports_controller.rb +121 -0
  19. data/spec/redmine/app/helpers/imports_helper.rb +47 -0
  20. data/spec/redmine/app/models/custom_field_enumeration.rb +90 -0
  21. data/spec/redmine/app/models/import.rb +249 -0
  22. data/spec/redmine/app/models/import_item.rb +22 -0
  23. data/spec/redmine/app/models/issue_import.rb +186 -0
  24. data/spec/redmine/app/views/attachments/image.html.erb +3 -0
  25. data/spec/redmine/app/views/attachments/other.html.erb +3 -0
  26. data/spec/redmine/app/views/common/_image.html.erb +1 -0
  27. data/spec/redmine/app/views/common/_other.html.erb +1 -0
  28. data/spec/redmine/app/views/custom_field_enumerations/create.js.erb +2 -0
  29. data/spec/redmine/app/views/custom_field_enumerations/destroy.html.erb +14 -0
  30. data/spec/redmine/app/views/custom_field_enumerations/index.html.erb +47 -0
  31. data/spec/redmine/app/views/custom_fields/formats/_enumeration.erb +12 -0
  32. data/spec/redmine/app/views/imports/_fields_mapping.html.erb +90 -0
  33. data/spec/redmine/app/views/imports/mapping.html.erb +52 -0
  34. data/spec/redmine/app/views/imports/mapping.js.erb +1 -0
  35. data/spec/redmine/app/views/imports/new.html.erb +15 -0
  36. data/spec/redmine/app/views/imports/run.html.erb +20 -0
  37. data/spec/redmine/app/views/imports/run.js.erb +11 -0
  38. data/spec/redmine/app/views/imports/settings.html.erb +30 -0
  39. data/spec/redmine/app/views/imports/show.html.erb +38 -0
  40. data/spec/redmine/app/views/layouts/_file.html.erb +15 -0
  41. data/spec/redmine/app/views/mailer/security_notification.html.erb +13 -0
  42. data/spec/redmine/app/views/mailer/security_notification.text.erb +8 -0
  43. data/spec/redmine/app/views/mailer/settings_updated.html.erb +14 -0
  44. data/spec/redmine/app/views/mailer/settings_updated.text.erb +12 -0
  45. data/spec/redmine/app/views/queries/_query_form.html.erb +62 -0
  46. data/spec/redmine/app/views/repositories/_changeset.html.erb +40 -0
  47. data/spec/redmine/app/views/search/index.api.rsb +12 -0
  48. data/spec/redmine/app/views/settings/_api.html.erb +10 -0
  49. data/spec/redmine/app/views/settings/_attachments.html.erb +21 -0
  50. data/spec/redmine/app/views/wiki/_new_modal.html.erb +21 -0
  51. data/spec/redmine/app/views/wiki/new.html.erb +17 -0
  52. data/spec/redmine/app/views/wiki/new.js.erb +2 -0
  53. data/spec/redmine/appveyor.yml +36 -0
  54. data/spec/redmine/db/migrate/20150725112753_insert_allowed_statuses_for_new_issues.rb +23 -0
  55. data/spec/redmine/db/migrate/20150730122707_create_imports.rb +13 -0
  56. data/spec/redmine/db/migrate/20150730122735_create_import_items.rb +10 -0
  57. data/spec/redmine/db/migrate/20150921204850_change_time_entries_comments_limit_to_1024.rb +9 -0
  58. data/spec/redmine/db/migrate/20150921210243_change_wiki_contents_comments_limit_to_1024.rb +11 -0
  59. data/spec/redmine/db/migrate/20151020182334_change_attachments_filesize_limit_to_8.rb +9 -0
  60. data/spec/redmine/db/migrate/20151020182731_fix_comma_in_user_format_setting_value.rb +13 -0
  61. data/spec/redmine/db/migrate/20151021184614_change_issue_categories_name_limit_to_60.rb +9 -0
  62. data/spec/redmine/db/migrate/20151021185456_change_auth_sources_filter_to_text.rb +9 -0
  63. data/spec/redmine/db/migrate/20151021190616_change_user_preferences_hide_mail_default_to_true.rb +9 -0
  64. data/spec/redmine/db/migrate/20151024082034_add_tokens_updated_on.rb +10 -0
  65. data/spec/redmine/db/migrate/20151025072118_create_custom_field_enumerations.rb +10 -0
  66. data/spec/redmine/db/migrate/20151031095005_add_projects_default_version_id.rb +12 -0
  67. data/spec/redmine/db/migrate/20160404080304_force_password_reset_during_setup.rb +9 -0
  68. data/spec/redmine/db/migrate/20160416072926_remove_position_defaults.rb +13 -0
  69. data/spec/redmine/db/migrate/20160529063352_add_roles_settings.rb +5 -0
  70. data/spec/redmine/lib/redmine/acts/positioned.rb +118 -0
  71. data/spec/redmine/lib/redmine/helpers/url.rb +35 -0
  72. data/spec/redmine/lib/redmine/hook/listener.rb +32 -0
  73. data/spec/redmine/lib/redmine/hook/view_listener.rb +78 -0
  74. data/spec/redmine/log/test.log +2 -0
  75. data/spec/redmine/plugins/dummy_plugin/Gemfile +1 -0
  76. data/spec/redmine/plugins/dummy_plugin/app/controllers/dummy_autocompletes_controller.rb +4 -0
  77. data/spec/redmine/plugins/dummy_plugin/app/views/dummy_autocompletes/index.html.erb +3 -0
  78. data/spec/redmine/plugins/dummy_plugin/config/locales/en.yml +2 -0
  79. data/spec/redmine/plugins/dummy_plugin/config/routes.rb +1 -0
  80. data/spec/redmine/plugins/dummy_plugin/init.rb +34 -0
  81. data/spec/redmine/plugins/dummy_plugin/lib/dummy_plugin/easy_patch/redmine/controllers/issues_controller_patch.example +30 -0
  82. data/spec/redmine/plugins/dummy_plugin/lib/dummy_plugin/easy_patch/redmine/helpers/issues_helper_patch.example +30 -0
  83. data/spec/redmine/plugins/dummy_plugin/lib/dummy_plugin/easy_patch/redmine/models/issue_patch.example +30 -0
  84. data/spec/redmine/plugins/dummy_plugin/lib/dummy_plugin/hooks.rb +5 -0
  85. data/spec/redmine/plugins/dummy_plugin/lib/dummy_plugin/internals.rb +4 -0
  86. data/spec/redmine/public/images/jstoolbar/bt_precode.png +0 -0
  87. data/spec/redmine/public/images/reorder.png +0 -0
  88. data/spec/redmine/public/javascripts/jquery-1.11.1-ui-1.11.0-ujs-3.1.4.js +21 -0
  89. data/spec/redmine/public/javascripts/redmine_extensions/application.js +13 -0
  90. data/spec/redmine/public/javascripts/redmine_extensions/easy_togglers.js +58 -0
  91. data/spec/redmine/public/javascripts/redmine_extensions/jquery.entityarray.js +130 -0
  92. data/spec/redmine/public/javascripts/redmine_extensions/redmine_extensions.js +642 -0
  93. data/spec/redmine/public/javascripts/responsive.js +83 -0
  94. data/spec/redmine/public/stylesheets/responsive.css +799 -0
  95. data/spec/redmine/test/fixtures/files/import_dates.csv +4 -0
  96. data/spec/redmine/test/fixtures/files/import_iso8859-1.csv +3 -0
  97. data/spec/redmine/test/fixtures/files/import_issues.csv +4 -0
  98. data/spec/redmine/test/fixtures/ldap/slapd.centos6.conf +24 -0
  99. data/spec/redmine/test/fixtures/ldap/slapd.ubuntu.12.04.conf +23 -0
  100. data/spec/redmine/test/fixtures/mail_handler/issue_update_with_cc.eml +19 -0
  101. data/spec/redmine/test/fixtures/mail_handler/ticket_on_project_given_by_to_header.eml +60 -0
  102. data/spec/redmine/test/fixtures/mail_handler/ticket_with_text_attachment_iso-8859-2.eml +31 -0
  103. data/spec/redmine/test/functional/custom_field_enumerations_controller_test.rb +115 -0
  104. data/spec/redmine/test/functional/imports_controller_test.rb +205 -0
  105. data/spec/redmine/test/functional/sessions_controller_test.rb +138 -0
  106. data/spec/redmine/test/integration/api_test/search_test.rb +92 -0
  107. data/spec/redmine/test/integration/routing/imports_test.rb +36 -0
  108. data/spec/redmine/test/integration/sessions_test.rb +97 -0
  109. data/spec/redmine/test/ui/custom_fields_test_ui.rb +38 -0
  110. data/spec/redmine/test/unit/attachment_transaction_test.rb +76 -0
  111. data/spec/redmine/test/unit/helpers/journals_helper_test.rb +48 -0
  112. data/spec/redmine/test/unit/helpers/wiki_helper_test.rb +45 -0
  113. data/spec/redmine/test/unit/issue_import_test.rb +178 -0
  114. data/spec/redmine/test/unit/lib/redmine/acts/positioned_with_scope_test.rb +53 -0
  115. data/spec/redmine/test/unit/lib/redmine/acts/positioned_without_scope_test.rb +55 -0
  116. data/spec/redmine/test/unit/lib/redmine/field_format/enumeration_format_test.rb +91 -0
  117. data/spec/support/easy_queries_helpers.rb +0 -0
  118. metadata +216 -10
@@ -0,0 +1,83 @@
1
+ // generic layout specific responsive stuff goes here
2
+
3
+ function openFlyout() {
4
+ $('html').addClass('flyout-is-active');
5
+ $('#wrapper2').on('click', function(e){
6
+ e.preventDefault();
7
+ e.stopPropagation();
8
+ closeFlyout();
9
+ });
10
+ }
11
+
12
+ function closeFlyout() {
13
+ $('html').removeClass('flyout-is-active');
14
+ $('#wrapper2').off('click');
15
+ }
16
+
17
+
18
+ function isMobile() {
19
+ return $('.js-flyout-menu-toggle-button').is(":visible");
20
+ }
21
+
22
+ function setupFlyout() {
23
+ var mobileInit = false,
24
+ desktopInit = false;
25
+
26
+ /* click handler for mobile menu toggle */
27
+ $('.js-flyout-menu-toggle-button').on('click', function(e) {
28
+ e.preventDefault();
29
+ e.stopPropagation();
30
+ if($('html').hasClass('flyout-is-active')) {
31
+ closeFlyout();
32
+ } else {
33
+ openFlyout();
34
+ }
35
+ });
36
+
37
+ /* bind resize handler */
38
+ $(window).resize(function() {
39
+ initMenu();
40
+ })
41
+
42
+ /* menu init function for dom detaching and appending on mobile / desktop view */
43
+ function initMenu() {
44
+
45
+ var _initMobileMenu = function() {
46
+ /* only init mobile menu, if it hasn't been done yet */
47
+ if(!mobileInit) {
48
+
49
+ $('#main-menu > ul').detach().appendTo('.js-project-menu');
50
+ $('#top-menu > ul').detach().appendTo('.js-general-menu');
51
+ $('#sidebar > *').detach().appendTo('.js-sidebar');
52
+ $('#account > ul').detach().appendTo('.js-profile-menu');
53
+
54
+ mobileInit = true;
55
+ desktopInit = false;
56
+ }
57
+ }
58
+
59
+ var _initDesktopMenu = function() {
60
+ if(!desktopInit) {
61
+
62
+ $('.js-project-menu > ul').detach().appendTo('#main-menu');
63
+ $('.js-general-menu > ul').detach().appendTo('#top-menu');
64
+ $('.js-sidebar > *').detach().appendTo('#sidebar');
65
+ $('.js-profile-menu > ul').detach().appendTo('#account');
66
+
67
+ desktopInit = true;
68
+ mobileInit = false;
69
+ }
70
+ }
71
+
72
+ if(isMobile()) {
73
+ _initMobileMenu();
74
+ } else {
75
+ _initDesktopMenu();
76
+ }
77
+ }
78
+
79
+ // init menu on page load
80
+ initMenu();
81
+ }
82
+
83
+ $(document).ready(setupFlyout);
@@ -0,0 +1,799 @@
1
+ /*----------------------------------------*\
2
+ RESPONSIVE CSS
3
+ \*----------------------------------------*/
4
+
5
+ /*
6
+ CONTENTS
7
+
8
+ A) BASIC MOBILE RESETS
9
+ B) HEADER & TOP MENUS
10
+ C) MAIN CONTENT & SIDEBAR
11
+ D) TOGGLE BUTTON & FLYOUT MENU
12
+ E) UX ELEMENTS
13
+ F) PAGE SPECIFIC STYLES
14
+ G) FORMS
15
+ */
16
+
17
+ /* Hide new elements (toggle button and flyout menu) above 900px */
18
+ .mobile-toggle-button,
19
+ .flyout-menu {
20
+ display: none;
21
+ }
22
+
23
+ /*
24
+ redmine's body is set to min-width: 900px
25
+ add first breakpoint here and start adding responsiveness
26
+ */
27
+
28
+ @media screen and (max-width: 899px)
29
+ {
30
+ /*----------------------------------------*\
31
+ A) BASIC MOBILE RESETS
32
+ \*----------------------------------------*/
33
+
34
+ /*
35
+ apply natural border box, see: http://www.paulirish.com/2012/box-sizing-border-box-ftw/
36
+ this helps us to better deal with percentages and padding / margin
37
+ */
38
+ *,
39
+ *:before,
40
+ *:after {
41
+ -webkit-box-sizing: border-box;
42
+ -moz-box-sizing: border-box;
43
+ box-sizing: border-box;
44
+ }
45
+
46
+ body,
47
+ html {
48
+ height: 100%;
49
+ margin: 0;
50
+ padding: 0;
51
+ }
52
+
53
+ html {
54
+ overflow-y: auto; /* avoid 2nd scrollbar on desktop */
55
+ -webkit-text-size-adjust: 100%; /* prevent font scaling in landscape mode on webkit */
56
+ }
57
+
58
+ body {
59
+ min-width: 0; /* reset the min-width of 900px */
60
+ -webkit-overflow-scrolling: touch;
61
+ }
62
+
63
+ body,
64
+ input,
65
+ select,
66
+ textarea,
67
+ button {
68
+ font-size: 14px; /* Set font-size for standard elements to 14px */
69
+ }
70
+
71
+ select {
72
+ max-width: 100%; /* prevent long names within select menues from breaking content */
73
+ }
74
+
75
+ #wrapper {
76
+ position: relative;
77
+ overflow-x: hidden; /* hide horizontal overflow */
78
+ max-width: 100%;
79
+ }
80
+
81
+ #wrapper,
82
+ #wrapper2 {
83
+ margin: 0;
84
+ }
85
+
86
+ /*----------------------------------------*\
87
+ B) HEADER & TOP MENUS
88
+ \*----------------------------------------*/
89
+
90
+ #header {
91
+ width: 100%;
92
+ height: 64px; /* the height of our header on mobile */
93
+ min-height: 0;
94
+ margin: 0;
95
+ padding: 0;
96
+ border: none;
97
+ background-color: #628db6;
98
+ position: fixed;
99
+ z-index: 9999;
100
+ }
101
+
102
+ /* Hide project name on mobile (project name is still visible in select menu) */
103
+ #header h1 {
104
+ display: none !important;
105
+ }
106
+
107
+ /* reset #header a color for mobile toggle button */
108
+ #header a.mobile-toggle-button {
109
+ color: #f8f8f8;
110
+ }
111
+
112
+
113
+ /* Hide top-menu and main-menu on mobile, because it's placed in our flyout menu */
114
+ #top-menu,
115
+ #header #main-menu {
116
+ display: none;
117
+ }
118
+
119
+ /* the quick search within header holding search form and #project_quick_jump_box box*/
120
+ #header #quick-search {
121
+ float: none;
122
+ clear: none; /* there are themes which set clear property, this resets it */
123
+ max-width: 100%; /* reset max-width */
124
+ margin: 0;
125
+ background: inherit;
126
+ }
127
+
128
+ /* this represents the dropdown arrow to left of the mobile project menu */
129
+ #header .jump-box-arrow:before {
130
+ /* set a font-size in order to achive same result in different themes */
131
+ font-family: Verdana, sans-serif;
132
+ font-size: 2em;
133
+ line-height: 64px;
134
+
135
+ position: absolute;
136
+ left: 0;
137
+
138
+ width: 2em;
139
+ padding: 0 .5em;
140
+ /* achieve dropdwon arrow by scaling a caret character */
141
+ content: '^';
142
+ -webkit-transform: scale(1,-.8);
143
+ -ms-transform: scale(1,-.8);
144
+ transform: scale(1,-.8);
145
+ text-align: right;
146
+ pointer-events: none;
147
+
148
+ opacity: .6;
149
+ }
150
+
151
+ /* styles for combobox within quick-search (#project_quick_jump_box) */
152
+ #header #quick-search select {
153
+ font-size: 1.5em;
154
+ font-weight: bold;
155
+ line-height: 1.2;
156
+
157
+ position: absolute;
158
+ top: 15px;
159
+ left: 0;
160
+
161
+ float: left;
162
+
163
+ width: 100%;
164
+ max-width: 100%;
165
+ height: 2em;
166
+ height: 35px;
167
+ padding: 5px;
168
+ padding-right: 72px;
169
+ padding-left: 50px;
170
+
171
+ text-indent: .01px;
172
+
173
+ color: inherit;
174
+ border: 0;
175
+ -webkit-border-radius: 0;
176
+ border-radius: 0;
177
+ background: none;
178
+ -webkit-box-shadow: none;
179
+ box-shadow: none;
180
+ /* hide default browser arrow */
181
+ -webkit-appearance: none;
182
+ -moz-appearance: none;
183
+ }
184
+
185
+ #header #quick-search form {
186
+ display: none;
187
+ }
188
+
189
+ /*----------------------------------------*\
190
+ C) MAIN CONTENT & SIDEBAR
191
+ \*----------------------------------------*/
192
+
193
+ #main {
194
+ padding: 64px 0 0; /* padding-top equals header height */
195
+ }
196
+
197
+ #main.nosidebar #content,
198
+ div#content {
199
+ width: 100%;
200
+ min-height: 0; /* reset min-height of #content */
201
+ margin: 0;
202
+ }
203
+
204
+ /* hide sidebar and sidebar switch panel, since it's placed in mobile flyout menu */
205
+ #sidebar,
206
+ #sidebar-switch-panel {
207
+ display: none;
208
+ }
209
+
210
+ .splitcontentleft {
211
+ width: 100%;
212
+ }
213
+
214
+ .splitcontentright {
215
+ width: 100%;
216
+ }
217
+
218
+ /*----------------------------------------*\
219
+ D) TOGGLE BUTTON & FLYOUT MENU
220
+ \*----------------------------------------*/
221
+
222
+ .mobile-toggle-button {
223
+ font-size: 42px;
224
+ line-height: 64px;
225
+
226
+ position: relative;
227
+ z-index: 10;
228
+
229
+ display: block; /* remove display: none; of non-mobile version */
230
+ float: right;
231
+
232
+ width: 60px;
233
+ height: 64px;
234
+ margin-top: 0;
235
+
236
+ text-align: center;
237
+
238
+ border-left: 1px solid #ddd;
239
+ }
240
+
241
+ .mobile-toggle-button:hover,
242
+ .mobile-toggle-button:active {
243
+ text-decoration: none;
244
+ }
245
+
246
+ .mobile-toggle-button:after {
247
+ font-family: Verdana, sans-serif;
248
+ display: block;
249
+ margin-top: -3px;
250
+ content: '\2261';
251
+ }
252
+
253
+ /* search magnifier icon */
254
+ .search-magnifier {
255
+ font-family: Verdana;
256
+ color: #bbb;
257
+
258
+ cursor: pointer;
259
+ -webkit-transform: rotate(-45deg);
260
+ -moz-transform: rotate(45deg);
261
+ -o-transform: rotate(45deg);
262
+ }
263
+
264
+ .search-magnifier--flyout {
265
+ font-size: 25px;
266
+ line-height: 54px;
267
+
268
+ position: absolute;
269
+ z-index: 1;
270
+ left: 12px;
271
+ }
272
+
273
+ /* Flyout Menu */
274
+
275
+ .flyout-menu {
276
+ position: absolute;
277
+ right: -250px;
278
+
279
+ display: block; /* remove display: none; of non-mobile version */
280
+ overflow-x: hidden;
281
+
282
+ width: 250px;
283
+ height: 100%;
284
+ margin: 0; /* reset margin for themes that define it */
285
+ padding: 0; /* reset padding for themes that define it */
286
+
287
+ color: white;
288
+ background-color: #3e5b76;
289
+ }
290
+
291
+ /* avoid zoom on search input focus for ios devices */
292
+ .flyout-menu input[type='text'] {
293
+ font-size: 16px;
294
+ }
295
+
296
+ .flyout-menu h3 {
297
+ font-size: 11px;
298
+ line-height: 19px;
299
+
300
+ height: 20px;
301
+ margin: 0;
302
+ padding: 0;
303
+
304
+ letter-spacing: .1em;
305
+ text-transform: uppercase;
306
+
307
+ color: white;
308
+ border-top: 1px solid #506a83;
309
+ border-bottom: 1px solid #506a83;
310
+ background-color: #628db6;
311
+ }
312
+
313
+ .flyout-menu h4 {
314
+ color: white;
315
+ }
316
+
317
+ .flyout-menu h3,
318
+ .flyout-menu h4,
319
+ .flyout-menu > p,
320
+ .flyout-menu > a,
321
+ .flyout-menu ul li a,
322
+ .flyout-menu__search,
323
+ .flyout-menu__sidebar > div,
324
+ .flyout-menu__sidebar > p,
325
+ .flyout-menu__sidebar > a,
326
+ .flyout-menu__sidebar > form,
327
+ .flyout-menu > div,
328
+ .flyout-menu > form {
329
+ padding-left: 8px;
330
+ }
331
+
332
+ .flyout-menu .flyout-menu__avatar {
333
+ margin-top: -1px; /* move avatar up 1px */
334
+ padding-left: 0;
335
+ }
336
+
337
+ .flyout-menu__sidebar > form {
338
+ display: block;
339
+ }
340
+
341
+ .flyout-menu__sidebar > form h3 {
342
+ margin-left: -8px;
343
+ }
344
+
345
+ .flyout-menu__sidebar > form label {
346
+ display: inline-block;
347
+ margin: 8px 0;
348
+ }
349
+
350
+ .flyout-menu__sidebar > form br br {
351
+ display: none;
352
+ }
353
+
354
+ /* Targets list containing checkboxes (e.g. activities sidebar) in flyout menu */
355
+ .flyout-menu__sidebar form > ul {
356
+ margin-left: -8px;
357
+ padding-left: 0;
358
+ }
359
+
360
+ .flyout-menu__sidebar form > ul li {
361
+ line-height: 39px;
362
+ display: block;
363
+ padding-left: 8px;
364
+ border-top: 1px solid rgba(255,255,255,.1);
365
+ }
366
+
367
+ .flyout-menu__sidebar form > ul li:first-child {
368
+ border-top: none;
369
+ }
370
+
371
+ .flyout-menu__sidebar form > ul li label {
372
+ margin: 0;
373
+ }
374
+
375
+ .flyout-menu__sidebar form > ul li label a {
376
+ line-height: 1;
377
+ display: inline;
378
+ padding-left: 0;
379
+ border: none;
380
+ }
381
+
382
+ .flyout-menu ul {
383
+ margin: 0;
384
+ padding: 0;
385
+ list-style: none;
386
+ }
387
+
388
+ .flyout-menu #watchers {
389
+ display: -webkit-flex;
390
+ display: -ms-flexbox;
391
+ display: -webkit-box;
392
+ display: flex;
393
+ flex-direction: column;
394
+
395
+ -webkit-flex-direction: column;
396
+ -ms-flex-direction: column;
397
+ -webkit-box-orient: vertical;
398
+ -webkit-box-direction: normal;
399
+ }
400
+
401
+ .flyout-menu #watchers .contextual {
402
+ -webkit-box-ordinal-group: 4;
403
+ -webkit-order: 3;
404
+ -ms-flex-order: 3;
405
+ order: 3;
406
+ }
407
+
408
+ .flyout-menu #watchers h3 {
409
+ margin-left: -8px;
410
+ }
411
+
412
+ .flyout-menu #watchers ul li {
413
+ display: -webkit-flex;
414
+ display: -ms-flexbox;
415
+ display: -webkit-box;
416
+ display: flex;
417
+ flex-direction: row;
418
+
419
+ -webkit-flex-direction: row;
420
+ -ms-flex-direction: row;
421
+ -webkit-box-orient: horizontal;
422
+ -webkit-box-direction: normal;
423
+ -webkit-align-items: center;
424
+ -ms-flex-align: center;
425
+ -webkit-box-align: center;
426
+ align-items: center;
427
+ }
428
+
429
+ .flyout-menu ul li a {
430
+ line-height: 40px;
431
+ display: block;
432
+ overflow: hidden;
433
+ height: 40px;
434
+ white-space: nowrap;
435
+ text-overflow: ellipsis;
436
+ border-top: 1px solid rgba(255,255,255,.1);
437
+ }
438
+
439
+ .flyout-menu ul li:first-child a {
440
+ line-height: 39px;
441
+ height: 39px;
442
+ border-top: none;
443
+ }
444
+
445
+ .flyout-menu a {
446
+ color: white;
447
+ }
448
+
449
+ .flyout-menu ul li a:hover {
450
+ text-decoration: none;
451
+ }
452
+
453
+ .flyout-menu ul li a.new-object,
454
+ .new-object ~ .menu-children {
455
+ display: none;
456
+ }
457
+
458
+ /* Left flyout search container */
459
+ .flyout-menu__search {
460
+ line-height: 54px;
461
+ height: 64px;
462
+ padding-top: 3px;
463
+ padding-right: 8px;
464
+ }
465
+
466
+ .flyout-menu__search input[type='text'] {
467
+ line-height: 2;
468
+
469
+ width: 100%;
470
+ height: 38px;
471
+ padding-left: 27px;
472
+
473
+ vertical-align: middle;
474
+
475
+ border: none;
476
+ -webkit-border-radius: 3px;
477
+ border-radius: 3px;
478
+ background-color: #fff;
479
+ }
480
+
481
+ .flyout-menu__avatar {
482
+ display: -webkit-box;
483
+ display: -webkit-flex;
484
+ display: -ms-flexbox;
485
+ display: flex;
486
+ width: 100%;
487
+ border-top: 1px solid rgba(255,255,255,.1);
488
+ }
489
+
490
+ .flyout-menu__avatar img.gravatar {
491
+ width: 40px;
492
+ height: 40px;
493
+ padding: 0;
494
+ vertical-align: top;
495
+ border-width: 0;
496
+ }
497
+
498
+ .flyout-menu__avatar a {
499
+ line-height: 40px;
500
+ height: auto;
501
+ height: 40px;
502
+ text-decoration: none;
503
+ color: white;
504
+ }
505
+
506
+ /* avatar */
507
+ .flyout-menu__avatar a:first-child {
508
+ line-height: 0;
509
+ width: 40px;
510
+ padding: 0;
511
+ }
512
+
513
+ .flyout-menu__avatar .user {
514
+ padding-left: 15px;
515
+ padding-right: 15px;
516
+ text-overflow: ellipsis;
517
+ overflow: hidden;
518
+ white-space: nowrap;
519
+ -webkit-flex-grow: 1;
520
+ -ms-flex-grow: 1;
521
+ flex-grow: 1;
522
+ }
523
+
524
+ /* user link when no avatar is present */
525
+ .flyout-menu__avatar--no-avatar a.user {
526
+ line-height: 40px;
527
+ padding-left: 8px;
528
+ }
529
+
530
+ .flyout-is-active body {
531
+ overflow: hidden; /* for body not to have scrollbars when left flyout menu is active */
532
+ }
533
+
534
+ html.flyout-is-active {
535
+ overflow: hidden;
536
+ }
537
+
538
+ .flyout-is-active #wrapper, .flyout-is-active #header {
539
+ right: 250px; /* when left flyout is active, move body and header to the right (same amount like flyout-menu's width) */
540
+ }
541
+
542
+ .flyout-is-active #wrapper {
543
+ overflow: visible;
544
+ height: 100%;
545
+ }
546
+
547
+ .flyout-is-active .mobile-toggle-button:after {
548
+ content: '\00D7'; /* close glyph */
549
+ }
550
+
551
+ .flyout-is-active #wrapper2 {
552
+ /*
553
+ * only relevant for devices with cursor when flyout it active, in order to show,
554
+ * that whole wrapper content is clickable and closes flyout menu
555
+ */
556
+ cursor: pointer;
557
+ }
558
+
559
+ #admin-menu {
560
+ padding-left: 0;
561
+ }
562
+
563
+ #admin-menu li {
564
+ padding-bottom: 0;
565
+ }
566
+
567
+ #admin-menu a,
568
+ #admin-menu a.selected {
569
+ line-height: 40px;
570
+ padding: 0;
571
+ padding-left: 32px !important;
572
+ background-position: 8px 50%;
573
+ }
574
+
575
+ /*----------------------------------------*\
576
+ E) UX ELEMENTS
577
+ \*----------------------------------------*/
578
+
579
+ .mobile-hide {display:none;}
580
+ .mobile-show {display:initial;}
581
+
582
+ /* Contextual Buttons */
583
+
584
+ #content>.contextual {
585
+ width: 100%;
586
+ margin-bottom: .5em;
587
+ padding-left: 0; /* reset left padding in order to use whole space */
588
+ white-space: normal;
589
+ color: transparent;
590
+ }
591
+
592
+ #content>.contextual a,
593
+ p.buttons a {
594
+ font-weight: bold;
595
+
596
+ display: inline-block;
597
+
598
+ margin: 5px 0;
599
+ margin-right: 2px;
600
+ padding: 9px 9px 9px 9px;
601
+
602
+ border: 1px solid #ddd;
603
+ -webkit-border-radius: 3px;
604
+ border-radius: 3px;
605
+ background-color: transparent;
606
+ background-position-x: 4px;
607
+ }
608
+
609
+ #content>.contextual a.icon,
610
+ p.buttons a.icon {
611
+ padding-left: 25px;
612
+ }
613
+
614
+ .flyout-menu .contextual {
615
+ float: none;
616
+ }
617
+
618
+ /* loading indicator */
619
+ #ajax-indicator {
620
+ width: 60%;
621
+ left: 20%;
622
+ }
623
+
624
+ /* jquery ui dialogs */
625
+ .ui-dialog {
626
+ max-width: 98%;
627
+ margin: 1%;
628
+ }
629
+
630
+ .ui-dialog .ui-dialog-content {
631
+ padding-left: 0;
632
+ padding-right: 0;
633
+ }
634
+
635
+ #filters-table {width:100%; float:none;}
636
+ .add-filter {width:100%; float:none; text-align: left; margin-top: 8px;}
637
+
638
+ /*----------------------------------------*\
639
+ F) PAGE SPECIFIC STYLES
640
+ \*----------------------------------------*/
641
+
642
+ /* page /login */
643
+
644
+ #login-form table {
645
+ width: 100%;
646
+ }
647
+
648
+ #login-form input#username,
649
+ #login-form input#password,
650
+ #login-form input#openid_url {
651
+ width: 100%;
652
+ height: auto;
653
+ }
654
+
655
+ /* some themes add a margin to login page, remove it on mobile */
656
+ .action-login #main {
657
+ margin: 0;
658
+ }
659
+
660
+ div#activity dl, #search-results {margin-left: 0;}
661
+
662
+ .version-overview table.progress {width:75%;}
663
+ div#version-summary {float:none; width:100%; margin-left:0;}
664
+ body.controller-versions.action-show div#roadmap .related-issues {width:100%;}
665
+
666
+ /* History and Changeset */
667
+ div#issue-changesets {
668
+ float: none;
669
+ width: auto;
670
+ margin-left: 0;
671
+ padding-left: 0;
672
+ margin-bottom: 2em;
673
+ }
674
+
675
+ div#issue-changesets div.changeset {
676
+ padding-top: 1em;
677
+ }
678
+
679
+ /*----------------------------------------*\
680
+ G) FORMS
681
+ \*----------------------------------------*/
682
+
683
+ input, select, textarea {
684
+ max-width: 100%;
685
+ }
686
+
687
+ /* tabular forms resets for mobile */
688
+ .tabular p, .tabular.settings p {
689
+ padding-left: 0;
690
+ }
691
+
692
+ .tabular label, .tabular.settings label {
693
+ display: block;
694
+ width: 100%;
695
+ margin-left: 0;
696
+ text-align: left;
697
+ }
698
+
699
+ .tabular input, .tabular select, .tabular textarea {
700
+ width: 100%;
701
+ max-width: 100%;
702
+ }
703
+
704
+ .tabular input[type="checkbox"], .tabular input.date {
705
+ width: auto;
706
+ max-width: 95%;
707
+ }
708
+
709
+ /* new issue form */
710
+ #all_attributes p:first-child {
711
+ float: none !important;
712
+ }
713
+
714
+ #issue_is_private_label {
715
+ display: inline;
716
+ }
717
+
718
+ span#watchers_inputs {
719
+ width: 100%;
720
+ }
721
+
722
+ /* subtasks and related issues list on issue show */
723
+ #issue_tree .issues, #relations .issues {
724
+ border-collapse: separate;
725
+ border-spacing: 0 1em; /* vertical space between tasks */
726
+ }
727
+
728
+ #issue_tree .issue > td:not(.checkbox), #relations .issue > td:not(.checkbox) {
729
+ display: block;
730
+ float: left;
731
+ text-align: left;
732
+ padding-right: 5px;
733
+ }
734
+
735
+ #issue_tree .issue > td, #relations .issue > td, #issue_tree .issue .user {
736
+ text-overflow: ellipsis; /* if text exceeds its space, add ... */
737
+ overflow: hidden;
738
+ }
739
+
740
+ #issue_tree .issue > td.subject, #relations .issue > td.subject {
741
+ width: 100% !important; /* let subject have one full width column */
742
+ word-break: break-word; /* break word if subject is too long */
743
+ }
744
+
745
+ #issue_tree .issue > td:not(.checkbox), #relations .issue > td:not(.checkbox) {
746
+ width: 33.33%; /* three columns for all cells that are not subject */
747
+ }
748
+
749
+ #relations .issues, #relations .issue {
750
+ position: relative; /* needed for .buttons positioning */
751
+ }
752
+
753
+ /* positioniong of unline button */
754
+ #relations .issue > td.buttons {
755
+ text-align: right;
756
+ position: absolute;
757
+ right: 0;
758
+ margin: 0;
759
+ padding-right: 0;
760
+ }
761
+
762
+ #relations .issue .buttons a {
763
+ vertical-align: middle;
764
+ padding-right: 5px;
765
+ }
766
+
767
+ #relations .issue > td.subject {
768
+ padding-right: 25px; /* this is the spaces that .buttons uses next to subject */
769
+ }
770
+
771
+ /* attachment upload form */
772
+ #attachments_fields span {
773
+ position: relative;
774
+ clear: both;
775
+ margin-bottom: 1em;
776
+ white-space: normal;
777
+ }
778
+ #attachments_fields span a.remove-upload {
779
+ position: absolute;
780
+ top: 0;
781
+ right: 0;
782
+ }
783
+
784
+ #attachments_fields input.description {
785
+ margin-left: 0;
786
+ width: 100%;
787
+ }
788
+ }
789
+
790
+ @media all and (max-width: 599px) {
791
+ span.pagination {text-align:center;}
792
+ .pagination ul.pages li {display:none;}
793
+ .pagination ul.pages li.current,
794
+ .pagination ul.pages li.previous,
795
+ .pagination ul.pages li.next {display:inline-block; width:32%; overflow:hidden;}
796
+
797
+ #login-form {width:100%; margin-top:2em;}
798
+ }
799
+