reports_kits 0.7.5 → 0.7.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (132) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +6 -0
  3. data/.rubocop.yml +85 -0
  4. data/.travis.yml +21 -0
  5. data/Appraisals +27 -0
  6. data/Gemfile +3 -0
  7. data/MIT-LICENSE +20 -0
  8. data/README.md +35 -0
  9. data/Rakefile +2 -0
  10. data/app/assets/javascripts/reports_kits/application.js +14 -0
  11. data/app/assets/javascripts/reports_kits/lib/_init.js +9 -0
  12. data/app/assets/javascripts/reports_kits/lib/chart.js +73 -0
  13. data/app/assets/javascripts/reports_kits/lib/report.js +135 -0
  14. data/app/assets/javascripts/reports_kits/lib/table.js +87 -0
  15. data/app/assets/javascripts/reports_kits/vendor/chart.js +12269 -0
  16. data/app/assets/javascripts/reports_kits/vendor/daterangepicker.js +1627 -0
  17. data/app/assets/javascripts/reports_kits/vendor/jquery.tablesorter.min.js +4 -0
  18. data/app/assets/javascripts/reports_kits/vendor/moment.js +4040 -0
  19. data/app/assets/javascripts/reports_kits/vendor/select2.full.js +6436 -0
  20. data/app/assets/stylesheets/reports_kits/application.css.scss +3 -0
  21. data/app/assets/stylesheets/reports_kits/reports.css.sass +33 -0
  22. data/app/assets/stylesheets/reports_kits/select2_overrides.css.sass +7 -0
  23. data/app/assets/stylesheets/reports_kits/vendor/daterangepicker.css +269 -0
  24. data/app/assets/stylesheets/reports_kits/vendor/select2-bootstrap.css +721 -0
  25. data/app/assets/stylesheets/reports_kits/vendor/select2.css +484 -0
  26. data/config/initializers/mime_types.rb +1 -0
  27. data/config/routes.rb +10 -0
  28. data/docs/images/demo.gif +0 -0
  29. data/docs/images/users_by_created_at.png +0 -0
  30. data/gemfiles/mysql.gemfile +7 -0
  31. data/gemfiles/mysql.gemfile.lock +167 -0
  32. data/gemfiles/postgresql.gemfile +7 -0
  33. data/gemfiles/postgresql.gemfile.lock +165 -0
  34. data/gemfiles/postgresql_rails_5.1.4.gemfile +8 -0
  35. data/gemfiles/postgresql_rails_5.1.4.gemfile.lock +168 -0
  36. data/gemfiles/rails_4_mysql.gemfile +8 -0
  37. data/gemfiles/rails_4_mysql.gemfile.lock +165 -0
  38. data/gemfiles/rails_4_postgresql.gemfile +8 -0
  39. data/gemfiles/rails_4_postgresql.gemfile.lock +163 -0
  40. data/gemfiles/rails_5.1.4_postgresql.gemfile +8 -0
  41. data/gemfiles/rails_5.1.4_postgresql.gemfile.lock +169 -0
  42. data/gemfiles/rails_5_mysql.gemfile +8 -0
  43. data/gemfiles/rails_5_mysql.gemfile.lock +171 -0
  44. data/gemfiles/rails_5_postgresql.gemfile +8 -0
  45. data/gemfiles/rails_5_postgresql.gemfile.lock +169 -0
  46. data/lib/reports_kits/base_controller.rb +17 -0
  47. data/lib/reports_kits/cache.rb +37 -0
  48. data/lib/reports_kits/configuration.rb +50 -0
  49. data/lib/reports_kits/engine.rb +21 -0
  50. data/lib/reports_kits/entity.rb +3 -0
  51. data/lib/reports_kits/filters_controller.rb +11 -0
  52. data/lib/reports_kits/form_builder.rb +66 -0
  53. data/lib/reports_kits/helper.rb +24 -0
  54. data/lib/reports_kits/model.rb +16 -0
  55. data/lib/reports_kits/model_configuration.rb +28 -0
  56. data/lib/reports_kits/normalized_params.rb +16 -0
  57. data/lib/reports_kits/order.rb +33 -0
  58. data/lib/reports_kits/relative_time.rb +42 -0
  59. data/lib/reports_kits/report_builder.rb +88 -0
  60. data/lib/reports_kits/reports/abstract_series.rb +9 -0
  61. data/lib/reports_kits/reports/adapters/mysql.rb +26 -0
  62. data/lib/reports_kits/reports/adapters/postgresql.rb +26 -0
  63. data/lib/reports_kits/reports/composite_series.rb +48 -0
  64. data/lib/reports_kits/reports/contextual_filter.rb +19 -0
  65. data/lib/reports_kits/reports/data/add_table_aggregations.rb +105 -0
  66. data/lib/reports_kits/reports/data/aggregate_composite.rb +97 -0
  67. data/lib/reports_kits/reports/data/aggregate_one_dimension.rb +39 -0
  68. data/lib/reports_kits/reports/data/aggregate_two_dimensions.rb +39 -0
  69. data/lib/reports_kits/reports/data/chart_data_for_data_method.rb +62 -0
  70. data/lib/reports_kits/reports/data/chart_options.rb +155 -0
  71. data/lib/reports_kits/reports/data/format_one_dimension.rb +140 -0
  72. data/lib/reports_kits/reports/data/format_table.rb +63 -0
  73. data/lib/reports_kits/reports/data/format_two_dimensions.rb +143 -0
  74. data/lib/reports_kits/reports/data/generate.rb +156 -0
  75. data/lib/reports_kits/reports/data/generate_for_properties.rb +97 -0
  76. data/lib/reports_kits/reports/data/normalize_properties.rb +62 -0
  77. data/lib/reports_kits/reports/data/populate_one_dimension.rb +54 -0
  78. data/lib/reports_kits/reports/data/populate_two_dimensions.rb +104 -0
  79. data/lib/reports_kits/reports/data/utils.rb +178 -0
  80. data/lib/reports_kits/reports/dimension.rb +27 -0
  81. data/lib/reports_kits/reports/dimension_with_series.rb +144 -0
  82. data/lib/reports_kits/reports/filter.rb +29 -0
  83. data/lib/reports_kits/reports/filter_types/base.rb +48 -0
  84. data/lib/reports_kits/reports/filter_types/boolean.rb +47 -0
  85. data/lib/reports_kits/reports/filter_types/datetime.rb +51 -0
  86. data/lib/reports_kits/reports/filter_types/number.rb +30 -0
  87. data/lib/reports_kits/reports/filter_types/records.rb +26 -0
  88. data/lib/reports_kits/reports/filter_types/string.rb +38 -0
  89. data/lib/reports_kits/reports/filter_with_series.rb +97 -0
  90. data/lib/reports_kits/reports/generate_autocomplete_method_results.rb +29 -0
  91. data/lib/reports_kits/reports/generate_autocomplete_results.rb +57 -0
  92. data/lib/reports_kits/reports/inferrable_configuration.rb +116 -0
  93. data/lib/reports_kits/reports/model_settings.rb +30 -0
  94. data/lib/reports_kits/reports/properties.rb +10 -0
  95. data/lib/reports_kits/reports/properties_to_filter.rb +40 -0
  96. data/lib/reports_kits/reports/series.rb +121 -0
  97. data/lib/reports_kits/reports_controller.rb +65 -0
  98. data/lib/reports_kits/utils.rb +11 -0
  99. data/lib/reports_kits/value.rb +3 -0
  100. data/lib/reports_kits/version.rb +3 -0
  101. data/lib/reports_kits.rb +79 -0
  102. data/reports_kits.gemspec +26 -0
  103. data/spec/factories/issue_factory.rb +4 -0
  104. data/spec/factories/issues_label_factory.rb +4 -0
  105. data/spec/factories/label_factory.rb +4 -0
  106. data/spec/factories/pro_repo_factory.rb +5 -0
  107. data/spec/factories/repo_factory.rb +5 -0
  108. data/spec/factories/tag_factory.rb +4 -0
  109. data/spec/fixtures/generate_inputs.yml +254 -0
  110. data/spec/fixtures/generate_outputs.yml +1216 -0
  111. data/spec/reports_kit/form_builder_spec.rb +26 -0
  112. data/spec/reports_kit/relative_time_spec.rb +29 -0
  113. data/spec/reports_kit/reports/data/generate/contextual_filters_spec.rb +60 -0
  114. data/spec/reports_kit/reports/data/generate_spec.rb +1371 -0
  115. data/spec/reports_kit/reports/data/normalize_properties_spec.rb +196 -0
  116. data/spec/reports_kit/reports/dimension_with_series_spec.rb +67 -0
  117. data/spec/reports_kit/reports/filter_with_series_spec.rb +39 -0
  118. data/spec/reports_kit/reports/generate_autocomplete_results_spec.rb +69 -0
  119. data/spec/spec_helper.rb +77 -0
  120. data/spec/support/config.rb +41 -0
  121. data/spec/support/example_data_methods.rb +25 -0
  122. data/spec/support/factory_girl.rb +5 -0
  123. data/spec/support/helpers.rb +25 -0
  124. data/spec/support/models/issue.rb +14 -0
  125. data/spec/support/models/issues_label.rb +4 -0
  126. data/spec/support/models/label.rb +5 -0
  127. data/spec/support/models/pro/repo.rb +5 -0
  128. data/spec/support/models/pro/special_issue.rb +4 -0
  129. data/spec/support/models/repo.rb +13 -0
  130. data/spec/support/models/tag.rb +4 -0
  131. data/spec/support/schema.rb +39 -0
  132. metadata +134 -4
@@ -0,0 +1,721 @@
1
+ /*!
2
+ * Select2 Bootstrap Theme v0.1.0-beta.10 (https://select2.github.io/select2-bootstrap-theme)
3
+ * Copyright 2015-2017 Florian Kissling and contributors (https://github.com/select2/select2-bootstrap-theme/graphs/contributors)
4
+ * Licensed under MIT (https://github.com/select2/select2-bootstrap-theme/blob/master/LICENSE)
5
+ */
6
+
7
+ .select2-container--bootstrap {
8
+ display: block;
9
+ /*------------------------------------* #COMMON STYLES
10
+ \*------------------------------------*/
11
+ /**
12
+ * Search field in the Select2 dropdown.
13
+ */
14
+ /**
15
+ * No outline for all search fields - in the dropdown
16
+ * and inline in multi Select2s.
17
+ */
18
+ /**
19
+ * Adjust Select2's choices hover and selected styles to match
20
+ * Bootstrap 3's default dropdown styles.
21
+ *
22
+ * @see http://getbootstrap.com/components/#dropdowns
23
+ */
24
+ /**
25
+ * Clear the selection.
26
+ */
27
+ /**
28
+ * Address disabled Select2 styles.
29
+ *
30
+ * @see https://select2.github.io/examples.html#disabled
31
+ * @see http://getbootstrap.com/css/#forms-control-disabled
32
+ */
33
+ /*------------------------------------* #DROPDOWN
34
+ \*------------------------------------*/
35
+ /**
36
+ * Dropdown border color and box-shadow.
37
+ */
38
+ /**
39
+ * Limit the dropdown height.
40
+ */
41
+ /*------------------------------------* #SINGLE SELECT2
42
+ \*------------------------------------*/
43
+ /*------------------------------------* #MULTIPLE SELECT2
44
+ \*------------------------------------*/
45
+ /**
46
+ * Address Bootstrap control sizing classes
47
+ *
48
+ * 1. Reset Bootstrap defaults.
49
+ * 2. Adjust the dropdown arrow button icon position.
50
+ *
51
+ * @see http://getbootstrap.com/css/#forms-control-sizes
52
+ */
53
+ /* 1 */
54
+ /*------------------------------------* #RTL SUPPORT
55
+ \*------------------------------------*/
56
+ }
57
+
58
+ .select2-container--bootstrap .select2-selection {
59
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
60
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
61
+ background-color: #fff;
62
+ border: 1px solid #ccc;
63
+ border-radius: 4px;
64
+ color: #555555;
65
+ font-size: 14px;
66
+ outline: 0;
67
+ }
68
+
69
+ .select2-container--bootstrap .select2-selection.form-control {
70
+ border-radius: 4px;
71
+ }
72
+
73
+ .select2-container--bootstrap .select2-search--dropdown .select2-search__field {
74
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
75
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
76
+ background-color: #fff;
77
+ border: 1px solid #ccc;
78
+ border-radius: 4px;
79
+ color: #555555;
80
+ font-size: 14px;
81
+ }
82
+
83
+ .select2-container--bootstrap .select2-search__field {
84
+ outline: 0;
85
+ /* Firefox 18- */
86
+ /**
87
+ * Firefox 19+
88
+ *
89
+ * @see http://stackoverflow.com/questions/24236240/color-for-styled-placeholder-text-is-muted-in-firefox
90
+ */
91
+ }
92
+
93
+ .select2-container--bootstrap .select2-search__field::-webkit-input-placeholder {
94
+ color: #999;
95
+ }
96
+
97
+ .select2-container--bootstrap .select2-search__field:-moz-placeholder {
98
+ color: #999;
99
+ }
100
+
101
+ .select2-container--bootstrap .select2-search__field::-moz-placeholder {
102
+ color: #999;
103
+ opacity: 1;
104
+ }
105
+
106
+ .select2-container--bootstrap .select2-search__field:-ms-input-placeholder {
107
+ color: #999;
108
+ }
109
+
110
+ .select2-container--bootstrap .select2-results__option {
111
+ padding: 6px 12px;
112
+ /**
113
+ * Disabled results.
114
+ *
115
+ * @see https://select2.github.io/examples.html#disabled-results
116
+ */
117
+ /**
118
+ * Hover state.
119
+ */
120
+ /**
121
+ * Selected state.
122
+ */
123
+ }
124
+
125
+ .select2-container--bootstrap .select2-results__option[role=group] {
126
+ padding: 0;
127
+ }
128
+
129
+ .select2-container--bootstrap .select2-results__option[aria-disabled=true] {
130
+ color: #777777;
131
+ cursor: not-allowed;
132
+ }
133
+
134
+ .select2-container--bootstrap .select2-results__option[aria-selected=true] {
135
+ background-color: #f5f5f5;
136
+ color: #262626;
137
+ }
138
+
139
+ .select2-container--bootstrap .select2-results__option--highlighted[aria-selected] {
140
+ background-color: #337ab7;
141
+ color: #fff;
142
+ }
143
+
144
+ .select2-container--bootstrap .select2-results__option .select2-results__option {
145
+ padding: 6px 12px;
146
+ }
147
+
148
+ .select2-container--bootstrap .select2-results__option .select2-results__option .select2-results__group {
149
+ padding-left: 0;
150
+ }
151
+
152
+ .select2-container--bootstrap .select2-results__option .select2-results__option .select2-results__option {
153
+ margin-left: -12px;
154
+ padding-left: 24px;
155
+ }
156
+
157
+ .select2-container--bootstrap .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
158
+ margin-left: -24px;
159
+ padding-left: 36px;
160
+ }
161
+
162
+ .select2-container--bootstrap .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
163
+ margin-left: -36px;
164
+ padding-left: 48px;
165
+ }
166
+
167
+ .select2-container--bootstrap .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
168
+ margin-left: -48px;
169
+ padding-left: 60px;
170
+ }
171
+
172
+ .select2-container--bootstrap .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
173
+ margin-left: -60px;
174
+ padding-left: 72px;
175
+ }
176
+
177
+ .select2-container--bootstrap .select2-results__group {
178
+ color: #777777;
179
+ display: block;
180
+ padding: 6px 12px;
181
+ font-size: 12px;
182
+ line-height: 1.42857143;
183
+ white-space: nowrap;
184
+ }
185
+
186
+ .select2-container--bootstrap.select2-container--focus .select2-selection, .select2-container--bootstrap.select2-container--open .select2-selection {
187
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);
188
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);
189
+ -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
190
+ -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
191
+ -webkit-transition: border-color ease-in-out 0.15s, -webkit-box-shadow ease-in-out 0.15s;
192
+ transition: border-color ease-in-out 0.15s, -webkit-box-shadow ease-in-out 0.15s;
193
+ transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
194
+ transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s, -webkit-box-shadow ease-in-out 0.15s;
195
+ border-color: #66afe9;
196
+ }
197
+
198
+ .select2-container--bootstrap.select2-container--open {
199
+ /**
200
+ * Make the dropdown arrow point up while the dropdown is visible.
201
+ */
202
+ /**
203
+ * Handle border radii of the container when the dropdown is showing.
204
+ */
205
+ }
206
+
207
+ .select2-container--bootstrap.select2-container--open .select2-selection .select2-selection__arrow b {
208
+ border-color: transparent transparent #999 transparent;
209
+ border-width: 0 4px 4px 4px;
210
+ }
211
+
212
+ .select2-container--bootstrap.select2-container--open.select2-container--below .select2-selection {
213
+ border-bottom-right-radius: 0;
214
+ border-bottom-left-radius: 0;
215
+ border-bottom-color: transparent;
216
+ }
217
+
218
+ .select2-container--bootstrap.select2-container--open.select2-container--above .select2-selection {
219
+ border-top-right-radius: 0;
220
+ border-top-left-radius: 0;
221
+ border-top-color: transparent;
222
+ }
223
+
224
+ .select2-container--bootstrap .select2-selection__clear {
225
+ color: #999;
226
+ cursor: pointer;
227
+ float: right;
228
+ font-weight: bold;
229
+ margin-right: 10px;
230
+ }
231
+
232
+ .select2-container--bootstrap .select2-selection__clear:hover {
233
+ color: #333;
234
+ }
235
+
236
+ .select2-container--bootstrap.select2-container--disabled .select2-selection {
237
+ border-color: #ccc;
238
+ -webkit-box-shadow: none;
239
+ box-shadow: none;
240
+ }
241
+
242
+ .select2-container--bootstrap.select2-container--disabled .select2-selection,
243
+ .select2-container--bootstrap.select2-container--disabled .select2-search__field {
244
+ cursor: not-allowed;
245
+ }
246
+
247
+ .select2-container--bootstrap.select2-container--disabled .select2-selection,
248
+ .select2-container--bootstrap.select2-container--disabled .select2-selection--multiple .select2-selection__choice {
249
+ background-color: #eeeeee;
250
+ }
251
+
252
+ .select2-container--bootstrap.select2-container--disabled .select2-selection__clear,
253
+ .select2-container--bootstrap.select2-container--disabled .select2-selection--multiple .select2-selection__choice__remove {
254
+ display: none;
255
+ }
256
+
257
+ .select2-container--bootstrap .select2-dropdown {
258
+ -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
259
+ box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
260
+ border-color: #66afe9;
261
+ overflow-x: hidden;
262
+ margin-top: -1px;
263
+ }
264
+
265
+ .select2-container--bootstrap .select2-dropdown--above {
266
+ -webkit-box-shadow: 0px -6px 12px rgba(0, 0, 0, 0.175);
267
+ box-shadow: 0px -6px 12px rgba(0, 0, 0, 0.175);
268
+ margin-top: 1px;
269
+ }
270
+
271
+ .select2-container--bootstrap .select2-results > .select2-results__options {
272
+ max-height: 200px;
273
+ overflow-y: auto;
274
+ }
275
+
276
+ .select2-container--bootstrap .select2-selection--single {
277
+ height: 34px;
278
+ line-height: 1.42857143;
279
+ padding: 6px 24px 6px 12px;
280
+ /**
281
+ * Adjust the single Select2's dropdown arrow button appearance.
282
+ */
283
+ }
284
+
285
+ .select2-container--bootstrap .select2-selection--single .select2-selection__arrow {
286
+ position: absolute;
287
+ bottom: 0;
288
+ right: 12px;
289
+ top: 0;
290
+ width: 4px;
291
+ }
292
+
293
+ .select2-container--bootstrap .select2-selection--single .select2-selection__arrow b {
294
+ border-color: #999 transparent transparent transparent;
295
+ border-style: solid;
296
+ border-width: 4px 4px 0 4px;
297
+ height: 0;
298
+ left: 0;
299
+ margin-left: -4px;
300
+ margin-top: -2px;
301
+ position: absolute;
302
+ top: 50%;
303
+ width: 0;
304
+ }
305
+
306
+ .select2-container--bootstrap .select2-selection--single .select2-selection__rendered {
307
+ color: #555555;
308
+ padding: 0;
309
+ }
310
+
311
+ .select2-container--bootstrap .select2-selection--single .select2-selection__placeholder {
312
+ color: #999;
313
+ }
314
+
315
+ .select2-container--bootstrap .select2-selection--multiple {
316
+ min-height: 34px;
317
+ padding: 0;
318
+ height: auto;
319
+ /**
320
+ * Make Multi Select2's choices match Bootstrap 3's default button styles.
321
+ */
322
+ /**
323
+ * Minus 2px borders.
324
+ */
325
+ /**
326
+ * Clear the selection.
327
+ */
328
+ }
329
+
330
+ .select2-container--bootstrap .select2-selection--multiple .select2-selection__rendered {
331
+ -webkit-box-sizing: border-box;
332
+ -moz-box-sizing: border-box;
333
+ box-sizing: border-box;
334
+ display: block;
335
+ line-height: 1.42857143;
336
+ list-style: none;
337
+ margin: 0;
338
+ overflow: hidden;
339
+ padding: 0;
340
+ width: 100%;
341
+ text-overflow: ellipsis;
342
+ white-space: nowrap;
343
+ }
344
+
345
+ .select2-container--bootstrap .select2-selection--multiple .select2-selection__placeholder {
346
+ color: #999;
347
+ float: left;
348
+ margin-top: 5px;
349
+ }
350
+
351
+ .select2-container--bootstrap .select2-selection--multiple .select2-selection__choice {
352
+ color: #555555;
353
+ background: #fff;
354
+ border: 1px solid #ccc;
355
+ border-radius: 4px;
356
+ cursor: default;
357
+ float: left;
358
+ margin: 5px 0 0 6px;
359
+ padding: 0 6px;
360
+ }
361
+
362
+ .select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field {
363
+ background: transparent;
364
+ padding: 0 12px;
365
+ height: 32px;
366
+ line-height: 1.42857143;
367
+ margin-top: 0;
368
+ min-width: 5em;
369
+ }
370
+
371
+ .select2-container--bootstrap .select2-selection--multiple .select2-selection__choice__remove {
372
+ color: #999;
373
+ cursor: pointer;
374
+ display: inline-block;
375
+ font-weight: bold;
376
+ margin-right: 3px;
377
+ }
378
+
379
+ .select2-container--bootstrap .select2-selection--multiple .select2-selection__choice__remove:hover {
380
+ color: #333;
381
+ }
382
+
383
+ .select2-container--bootstrap .select2-selection--multiple .select2-selection__clear {
384
+ margin-top: 6px;
385
+ }
386
+
387
+ .select2-container--bootstrap .select2-selection--single.input-sm,
388
+ .input-group-sm .select2-container--bootstrap .select2-selection--single,
389
+ .form-group-sm .select2-container--bootstrap .select2-selection--single {
390
+ border-radius: 3px;
391
+ font-size: 12px;
392
+ height: 30px;
393
+ line-height: 1.5;
394
+ padding: 5px 22px 5px 10px;
395
+ /* 2 */
396
+ }
397
+
398
+ .select2-container--bootstrap .select2-selection--single.input-sm .select2-selection__arrow b,
399
+ .input-group-sm .select2-container--bootstrap .select2-selection--single .select2-selection__arrow b,
400
+ .form-group-sm .select2-container--bootstrap .select2-selection--single .select2-selection__arrow b {
401
+ margin-left: -5px;
402
+ }
403
+
404
+ .select2-container--bootstrap .select2-selection--multiple.input-sm,
405
+ .input-group-sm .select2-container--bootstrap .select2-selection--multiple,
406
+ .form-group-sm .select2-container--bootstrap .select2-selection--multiple {
407
+ min-height: 30px;
408
+ border-radius: 3px;
409
+ }
410
+
411
+ .select2-container--bootstrap .select2-selection--multiple.input-sm .select2-selection__choice,
412
+ .input-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-selection__choice,
413
+ .form-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-selection__choice {
414
+ font-size: 12px;
415
+ line-height: 1.5;
416
+ margin: 4px 0 0 5px;
417
+ padding: 0 5px;
418
+ }
419
+
420
+ .select2-container--bootstrap .select2-selection--multiple.input-sm .select2-search--inline .select2-search__field,
421
+ .input-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field,
422
+ .form-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field {
423
+ padding: 0 10px;
424
+ font-size: 12px;
425
+ height: 28px;
426
+ line-height: 1.5;
427
+ }
428
+
429
+ .select2-container--bootstrap .select2-selection--multiple.input-sm .select2-selection__clear,
430
+ .input-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-selection__clear,
431
+ .form-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-selection__clear {
432
+ margin-top: 5px;
433
+ }
434
+
435
+ .select2-container--bootstrap .select2-selection--single.input-lg,
436
+ .input-group-lg .select2-container--bootstrap .select2-selection--single,
437
+ .form-group-lg .select2-container--bootstrap .select2-selection--single {
438
+ border-radius: 6px;
439
+ font-size: 18px;
440
+ height: 46px;
441
+ line-height: 1.3333333;
442
+ padding: 10px 31px 10px 16px;
443
+ /* 1 */
444
+ }
445
+
446
+ .select2-container--bootstrap .select2-selection--single.input-lg .select2-selection__arrow,
447
+ .input-group-lg .select2-container--bootstrap .select2-selection--single .select2-selection__arrow,
448
+ .form-group-lg .select2-container--bootstrap .select2-selection--single .select2-selection__arrow {
449
+ width: 5px;
450
+ }
451
+
452
+ .select2-container--bootstrap .select2-selection--single.input-lg .select2-selection__arrow b,
453
+ .input-group-lg .select2-container--bootstrap .select2-selection--single .select2-selection__arrow b,
454
+ .form-group-lg .select2-container--bootstrap .select2-selection--single .select2-selection__arrow b {
455
+ border-width: 5px 5px 0 5px;
456
+ margin-left: -5px;
457
+ margin-left: -10px;
458
+ margin-top: -2.5px;
459
+ }
460
+
461
+ .select2-container--bootstrap .select2-selection--multiple.input-lg,
462
+ .input-group-lg .select2-container--bootstrap .select2-selection--multiple,
463
+ .form-group-lg .select2-container--bootstrap .select2-selection--multiple {
464
+ min-height: 46px;
465
+ border-radius: 6px;
466
+ }
467
+
468
+ .select2-container--bootstrap .select2-selection--multiple.input-lg .select2-selection__choice,
469
+ .input-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-selection__choice,
470
+ .form-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-selection__choice {
471
+ font-size: 18px;
472
+ line-height: 1.3333333;
473
+ border-radius: 4px;
474
+ margin: 9px 0 0 8px;
475
+ padding: 0 10px;
476
+ }
477
+
478
+ .select2-container--bootstrap .select2-selection--multiple.input-lg .select2-search--inline .select2-search__field,
479
+ .input-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field,
480
+ .form-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field {
481
+ padding: 0 16px;
482
+ font-size: 18px;
483
+ height: 44px;
484
+ line-height: 1.3333333;
485
+ }
486
+
487
+ .select2-container--bootstrap .select2-selection--multiple.input-lg .select2-selection__clear,
488
+ .input-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-selection__clear,
489
+ .form-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-selection__clear {
490
+ margin-top: 10px;
491
+ }
492
+
493
+ .select2-container--bootstrap .select2-selection.input-lg.select2-container--open .select2-selection--single {
494
+ /**
495
+ * Make the dropdown arrow point up while the dropdown is visible.
496
+ */
497
+ }
498
+
499
+ .select2-container--bootstrap .select2-selection.input-lg.select2-container--open .select2-selection--single .select2-selection__arrow b {
500
+ border-color: transparent transparent #999 transparent;
501
+ border-width: 0 5px 5px 5px;
502
+ }
503
+
504
+ .input-group-lg .select2-container--bootstrap .select2-selection.select2-container--open .select2-selection--single {
505
+ /**
506
+ * Make the dropdown arrow point up while the dropdown is visible.
507
+ */
508
+ }
509
+
510
+ .input-group-lg .select2-container--bootstrap .select2-selection.select2-container--open .select2-selection--single .select2-selection__arrow b {
511
+ border-color: transparent transparent #999 transparent;
512
+ border-width: 0 5px 5px 5px;
513
+ }
514
+
515
+ .select2-container--bootstrap[dir="rtl"] {
516
+ /**
517
+ * Single Select2
518
+ *
519
+ * 1. Makes sure that .select2-selection__placeholder is positioned
520
+ * correctly.
521
+ */
522
+ /**
523
+ * Multiple Select2
524
+ */
525
+ }
526
+
527
+ .select2-container--bootstrap[dir="rtl"] .select2-selection--single {
528
+ padding-left: 24px;
529
+ padding-right: 12px;
530
+ }
531
+
532
+ .select2-container--bootstrap[dir="rtl"] .select2-selection--single .select2-selection__rendered {
533
+ padding-right: 0;
534
+ padding-left: 0;
535
+ text-align: right;
536
+ /* 1 */
537
+ }
538
+
539
+ .select2-container--bootstrap[dir="rtl"] .select2-selection--single .select2-selection__clear {
540
+ float: left;
541
+ }
542
+
543
+ .select2-container--bootstrap[dir="rtl"] .select2-selection--single .select2-selection__arrow {
544
+ left: 12px;
545
+ right: auto;
546
+ }
547
+
548
+ .select2-container--bootstrap[dir="rtl"] .select2-selection--single .select2-selection__arrow b {
549
+ margin-left: 0;
550
+ }
551
+
552
+ .select2-container--bootstrap[dir="rtl"] .select2-selection--multiple .select2-selection__choice,
553
+ .select2-container--bootstrap[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder,
554
+ .select2-container--bootstrap[dir="rtl"] .select2-selection--multiple .select2-search--inline {
555
+ float: right;
556
+ }
557
+
558
+ .select2-container--bootstrap[dir="rtl"] .select2-selection--multiple .select2-selection__choice {
559
+ margin-left: 0;
560
+ margin-right: 6px;
561
+ }
562
+
563
+ .select2-container--bootstrap[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove {
564
+ margin-left: 2px;
565
+ margin-right: auto;
566
+ }
567
+
568
+ /*------------------------------------* #ADDITIONAL GOODIES
569
+ \*------------------------------------*/
570
+ /**
571
+ * Address Bootstrap's validation states
572
+ *
573
+ * If a Select2 widget parent has one of Bootstrap's validation state modifier
574
+ * classes, adjust Select2's border colors and focus states accordingly.
575
+ * You may apply said classes to the Select2 dropdown (body > .select2-container)
576
+ * via JavaScript match Bootstraps' to make its styles match.
577
+ *
578
+ * @see http://getbootstrap.com/css/#forms-control-validation
579
+ */
580
+ .has-warning .select2-dropdown,
581
+ .has-warning .select2-selection {
582
+ border-color: #8a6d3b;
583
+ }
584
+
585
+ .has-warning .select2-container--focus .select2-selection,
586
+ .has-warning .select2-container--open .select2-selection {
587
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
588
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
589
+ border-color: #66512c;
590
+ }
591
+
592
+ .has-warning.select2-drop-active {
593
+ border-color: #66512c;
594
+ }
595
+
596
+ .has-warning.select2-drop-active.select2-drop.select2-drop-above {
597
+ border-top-color: #66512c;
598
+ }
599
+
600
+ .has-error .select2-dropdown,
601
+ .has-error .select2-selection {
602
+ border-color: #a94442;
603
+ }
604
+
605
+ .has-error .select2-container--focus .select2-selection,
606
+ .has-error .select2-container--open .select2-selection {
607
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
608
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
609
+ border-color: #843534;
610
+ }
611
+
612
+ .has-error.select2-drop-active {
613
+ border-color: #843534;
614
+ }
615
+
616
+ .has-error.select2-drop-active.select2-drop.select2-drop-above {
617
+ border-top-color: #843534;
618
+ }
619
+
620
+ .has-success .select2-dropdown,
621
+ .has-success .select2-selection {
622
+ border-color: #3c763d;
623
+ }
624
+
625
+ .has-success .select2-container--focus .select2-selection,
626
+ .has-success .select2-container--open .select2-selection {
627
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
628
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
629
+ border-color: #2b542c;
630
+ }
631
+
632
+ .has-success.select2-drop-active {
633
+ border-color: #2b542c;
634
+ }
635
+
636
+ .has-success.select2-drop-active.select2-drop.select2-drop-above {
637
+ border-top-color: #2b542c;
638
+ }
639
+
640
+ /**
641
+ * Select2 widgets in Bootstrap Input Groups
642
+ *
643
+ * @see http://getbootstrap.com/components/#input-groups
644
+ * @see https://github.com/twbs/bootstrap/blob/master/less/input-groups.less
645
+ */
646
+ /**
647
+ * Reset rounded corners
648
+ */
649
+ .input-group > .select2-hidden-accessible:first-child + .select2-container--bootstrap > .selection > .select2-selection,
650
+ .input-group > .select2-hidden-accessible:first-child + .select2-container--bootstrap > .selection > .select2-selection.form-control {
651
+ border-bottom-right-radius: 0;
652
+ border-top-right-radius: 0;
653
+ }
654
+
655
+ .input-group > .select2-hidden-accessible:not(:first-child) + .select2-container--bootstrap:not(:last-child) > .selection > .select2-selection,
656
+ .input-group > .select2-hidden-accessible:not(:first-child) + .select2-container--bootstrap:not(:last-child) > .selection > .select2-selection.form-control {
657
+ border-radius: 0;
658
+ }
659
+
660
+ .input-group > .select2-hidden-accessible:not(:first-child):not(:last-child) + .select2-container--bootstrap:last-child > .selection > .select2-selection,
661
+ .input-group > .select2-hidden-accessible:not(:first-child):not(:last-child) + .select2-container--bootstrap:last-child > .selection > .select2-selection.form-control {
662
+ border-bottom-left-radius: 0;
663
+ border-top-left-radius: 0;
664
+ }
665
+
666
+ .input-group > .select2-container--bootstrap {
667
+ display: table;
668
+ table-layout: fixed;
669
+ position: relative;
670
+ z-index: 2;
671
+ width: 100%;
672
+ margin-bottom: 0;
673
+ /**
674
+ * Adjust z-index like Bootstrap does to show the focus-box-shadow
675
+ * above appended buttons in .input-group and .form-group.
676
+ */
677
+ /**
678
+ * Adjust alignment of Bootstrap buttons in Bootstrap Input Groups to address
679
+ * Multi Select2's height which - depending on how many elements have been selected -
680
+ * may grow taller than its initial size.
681
+ *
682
+ * @see http://getbootstrap.com/components/#input-groups
683
+ */
684
+ }
685
+
686
+ .input-group > .select2-container--bootstrap > .selection > .select2-selection.form-control {
687
+ float: none;
688
+ }
689
+
690
+ .input-group > .select2-container--bootstrap.select2-container--open, .input-group > .select2-container--bootstrap.select2-container--focus {
691
+ z-index: 3;
692
+ }
693
+
694
+ .input-group > .select2-container--bootstrap,
695
+ .input-group > .select2-container--bootstrap .input-group-btn,
696
+ .input-group > .select2-container--bootstrap .input-group-btn .btn {
697
+ vertical-align: top;
698
+ }
699
+
700
+ /**
701
+ * Temporary fix for https://github.com/select2/select2-bootstrap-theme/issues/9
702
+ *
703
+ * Provides `!important` for certain properties of the class applied to the
704
+ * original `<select>` element to hide it.
705
+ *
706
+ * @see https://github.com/select2/select2/pull/3301
707
+ * @see https://github.com/fk/select2/commit/31830c7b32cb3d8e1b12d5b434dee40a6e753ada
708
+ */
709
+ .form-control.select2-hidden-accessible {
710
+ position: absolute !important;
711
+ width: 1px !important;
712
+ }
713
+
714
+ /**
715
+ * Display override for inline forms
716
+ */
717
+ @media (min-width: 768px) {
718
+ .form-inline .select2-container--bootstrap {
719
+ display: inline-block;
720
+ }
721
+ }