Customify – A Theme Customizer Booster - Version 2.7.3

Version Description

  • Fixes for some edge situations when fonts would not apply on the frontend, after some time. Mainly related to cache issues.
  • Fix for missing font fields CSS properties.
  • Fix compatibility with the The Events Calendar plugin.
Download this release

Release Info

Developer pixelgrade
Plugin Icon Customify – A Theme Customizer Booster
Version 2.7.3
Comparing to
See all releases

Code changes from version 2.7.2 to 2.7.3

Files changed (76) hide show
  1. customify.php +2 -2
  2. includes/class-customify-customizer.php +1 -1
  3. includes/class-customify-fonts-global.php +15 -5
  4. includes/class-pixcustomify.php +7 -11
  5. includes/integrations.php +1 -0
  6. includes/integrations/the-events-calendar.php +27 -0
  7. js/vendor/select2-4.0.13/.editorconfig +6 -0
  8. js/vendor/select2-4.0.13/CHANGELOG.md +427 -0
  9. js/vendor/select2-4.0.13/LICENSE.md +21 -0
  10. js/vendor/select2-4.0.13/README.md +157 -0
  11. js/vendor/select2-4.0.13/dist/css/select2.css +481 -0
  12. js/vendor/select2-4.0.13/dist/css/select2.min.css +1 -0
  13. js/vendor/select2-4.0.13/dist/js/i18n/af.js +3 -0
  14. js/vendor/select2-4.0.13/dist/js/i18n/ar.js +3 -0
  15. js/vendor/select2-4.0.13/dist/js/i18n/az.js +3 -0
  16. js/vendor/select2-4.0.13/dist/js/i18n/bg.js +3 -0
  17. js/vendor/select2-4.0.13/dist/js/i18n/bn.js +3 -0
  18. js/vendor/select2-4.0.13/dist/js/i18n/bs.js +3 -0
  19. js/vendor/select2-4.0.13/dist/js/i18n/ca.js +3 -0
  20. js/vendor/select2-4.0.13/dist/js/i18n/cs.js +3 -0
  21. js/vendor/select2-4.0.13/dist/js/i18n/da.js +3 -0
  22. js/vendor/select2-4.0.13/dist/js/i18n/de.js +3 -0
  23. js/vendor/select2-4.0.13/dist/js/i18n/dsb.js +3 -0
  24. js/vendor/select2-4.0.13/dist/js/i18n/el.js +3 -0
  25. js/vendor/select2-4.0.13/dist/js/i18n/en.js +3 -0
  26. js/vendor/select2-4.0.13/dist/js/i18n/es.js +3 -0
  27. js/vendor/select2-4.0.13/dist/js/i18n/et.js +3 -0
  28. js/vendor/select2-4.0.13/dist/js/i18n/eu.js +3 -0
  29. js/vendor/select2-4.0.13/dist/js/i18n/fa.js +3 -0
  30. js/vendor/select2-4.0.13/dist/js/i18n/fi.js +3 -0
  31. js/vendor/select2-4.0.13/dist/js/i18n/fr.js +3 -0
  32. js/vendor/select2-4.0.13/dist/js/i18n/gl.js +3 -0
  33. js/vendor/select2-4.0.13/dist/js/i18n/he.js +3 -0
  34. js/vendor/select2-4.0.13/dist/js/i18n/hi.js +3 -0
  35. js/vendor/select2-4.0.13/dist/js/i18n/hr.js +3 -0
  36. js/vendor/select2-4.0.13/dist/js/i18n/hsb.js +3 -0
  37. js/vendor/select2-4.0.13/dist/js/i18n/hu.js +3 -0
  38. js/vendor/select2-4.0.13/dist/js/i18n/hy.js +3 -0
  39. js/vendor/select2-4.0.13/dist/js/i18n/id.js +3 -0
  40. js/vendor/select2-4.0.13/dist/js/i18n/is.js +3 -0
  41. js/vendor/select2-4.0.13/dist/js/i18n/it.js +3 -0
  42. js/vendor/select2-4.0.13/dist/js/i18n/ja.js +3 -0
  43. js/vendor/select2-4.0.13/dist/js/i18n/ka.js +3 -0
  44. js/vendor/select2-4.0.13/dist/js/i18n/km.js +3 -0
  45. js/vendor/select2-4.0.13/dist/js/i18n/ko.js +3 -0
  46. js/vendor/select2-4.0.13/dist/js/i18n/lt.js +3 -0
  47. js/vendor/select2-4.0.13/dist/js/i18n/lv.js +3 -0
  48. js/vendor/select2-4.0.13/dist/js/i18n/mk.js +3 -0
  49. js/vendor/select2-4.0.13/dist/js/i18n/ms.js +3 -0
  50. js/vendor/select2-4.0.13/dist/js/i18n/nb.js +3 -0
  51. js/vendor/select2-4.0.13/dist/js/i18n/ne.js +3 -0
  52. js/vendor/select2-4.0.13/dist/js/i18n/nl.js +3 -0
  53. js/vendor/select2-4.0.13/dist/js/i18n/pl.js +3 -0
  54. js/vendor/select2-4.0.13/dist/js/i18n/ps.js +3 -0
  55. js/vendor/select2-4.0.13/dist/js/i18n/pt-BR.js +3 -0
  56. js/vendor/select2-4.0.13/dist/js/i18n/pt.js +3 -0
  57. js/vendor/select2-4.0.13/dist/js/i18n/ro.js +3 -0
  58. js/vendor/select2-4.0.13/dist/js/i18n/ru.js +3 -0
  59. js/vendor/select2-4.0.13/dist/js/i18n/sk.js +3 -0
  60. js/vendor/select2-4.0.13/dist/js/i18n/sl.js +3 -0
  61. js/vendor/select2-4.0.13/dist/js/i18n/sq.js +3 -0
  62. js/vendor/select2-4.0.13/dist/js/i18n/sr-Cyrl.js +3 -0
  63. js/vendor/select2-4.0.13/dist/js/i18n/sr.js +3 -0
  64. js/vendor/select2-4.0.13/dist/js/i18n/sv.js +3 -0
  65. js/vendor/select2-4.0.13/dist/js/i18n/th.js +3 -0
  66. js/vendor/select2-4.0.13/dist/js/i18n/tk.js +3 -0
  67. js/vendor/select2-4.0.13/dist/js/i18n/tr.js +3 -0
  68. js/vendor/select2-4.0.13/dist/js/i18n/uk.js +3 -0
  69. js/vendor/select2-4.0.13/dist/js/i18n/vi.js +3 -0
  70. js/vendor/select2-4.0.13/dist/js/i18n/zh-CN.js +3 -0
  71. js/vendor/select2-4.0.13/dist/js/i18n/zh-TW.js +3 -0
  72. js/vendor/select2-4.0.13/dist/js/select2.full.js +6820 -0
  73. js/vendor/select2-4.0.13/dist/js/select2.full.min.js +2 -0
  74. js/vendor/{select2.js → select2-4.0.13/dist/js/select2.js} +0 -0
  75. js/vendor/{select2.min.js → select2-4.0.13/dist/js/select2.min.js} +0 -0
  76. readme.txt +6 -1
customify.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: Customify
4
  * Plugin URI: https://wordpress.org/plugins/customify/
5
  * Description: A Theme Customizer Booster to easily and consistently customize Fonts, Colors, and other options for your site.
6
- * Version: 2.7.2
7
  * Author: Pixelgrade
8
  * Author URI: https://pixelgrade.com
9
  * Author Email: contact@pixelgrade.com
@@ -33,7 +33,7 @@ require_once 'includes/extras.php';
33
  function PixCustomifyPlugin() {
34
  require_once plugin_dir_path( __FILE__ ) . 'includes/class-pixcustomify.php';
35
 
36
- return PixCustomifyPlugin::instance( __FILE__, '2.7.2' );
37
  }
38
 
39
  // Now get the party started.
3
  * Plugin Name: Customify
4
  * Plugin URI: https://wordpress.org/plugins/customify/
5
  * Description: A Theme Customizer Booster to easily and consistently customize Fonts, Colors, and other options for your site.
6
+ * Version: 2.7.3
7
  * Author: Pixelgrade
8
  * Author URI: https://pixelgrade.com
9
  * Author Email: contact@pixelgrade.com
33
  function PixCustomifyPlugin() {
34
  require_once plugin_dir_path( __FILE__ ) . 'includes/class-pixcustomify.php';
35
 
36
+ return PixCustomifyPlugin::instance( __FILE__, '2.7.3' );
37
  }
38
 
39
  // Now get the party started.
includes/class-customify-customizer.php CHANGED
@@ -169,7 +169,7 @@ if ( ! class_exists( 'PixCustomify_Customizer' ) ) :
169
  $suffix = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
170
 
171
  wp_register_script( PixCustomifyPlugin()->get_slug() . '-select2',
172
- plugins_url( 'js/vendor/select2' . $suffix . '.js', PixCustomifyPlugin()->get_file() ),
173
  array( 'jquery' ), PixCustomifyPlugin()->get_version() );
174
  wp_register_script( 'jquery-react',
175
  plugins_url( 'js/vendor/jquery-react' . $suffix . '.js', PixCustomifyPlugin()->get_file() ),
169
  $suffix = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
170
 
171
  wp_register_script( PixCustomifyPlugin()->get_slug() . '-select2',
172
+ plugins_url( 'js/vendor/select2-4.0.13/dist/js/select2.full' . $suffix . '.js', PixCustomifyPlugin()->get_file() ),
173
  array( 'jquery' ), PixCustomifyPlugin()->get_version() );
174
  wp_register_script( 'jquery-react',
175
  plugins_url( 'js/vendor/jquery-react' . $suffix . '.js', PixCustomifyPlugin()->get_file() ),
includes/class-customify-fonts-global.php CHANGED
@@ -791,6 +791,16 @@ class Customify_Fonts_Global {
791
  return $output;
792
  }
793
 
 
 
 
 
 
 
 
 
 
 
794
  protected function getCSSValue( $value, $font ) {
795
  $cssValue = [];
796
 
@@ -801,8 +811,8 @@ class Customify_Fonts_Global {
801
  // If this is a custom font (like from our plugin Fonto) with individual styles & weights - i.e. the font-family says it all
802
  // We need to "force" the font-weight and font-style
803
  if ( ! empty( $value['type'] ) && 'custom_individual' == $value['type'] ) {
804
- $cssValue['font_weight'] = '400 !important';
805
- $cssValue['font_style'] = 'normal !important';
806
  }
807
 
808
  // Handle the case where we have the font_family in the font_variant (usually this means a custom font from our Fonto plugin)
@@ -825,15 +835,15 @@ class Customify_Fonts_Global {
825
 
826
  if ( strpos( $font_variant, 'italic' ) !== false ) {
827
  $font_variant = str_replace( 'italic', '', $font_variant );
828
- $cssValue['font_style'] = 'italic';
829
  } elseif ( strpos( $font_variant, 'oblique' ) !== false ) {
830
  $font_variant = str_replace( 'oblique', '', $font_variant );
831
- $cssValue['font_style'] = 'oblique';
832
  }
833
 
834
  // If we have a remainder like '400', use it as font weight.
835
  if ( ! empty( $font_variant ) ) {
836
- $cssValue['font_weight'] = $font_variant;
837
  }
838
  }
839
 
791
  return $output;
792
  }
793
 
794
+ /**
795
+ * Return a list with all the properties values corresponding to a given font value.
796
+ *
797
+ * The list has the keys as CSS properties (using dashes, not underscores; the received value uses underscores, not dashes).
798
+ *
799
+ * @param $value
800
+ * @param $font
801
+ *
802
+ * @return array
803
+ */
804
  protected function getCSSValue( $value, $font ) {
805
  $cssValue = [];
806
 
811
  // If this is a custom font (like from our plugin Fonto) with individual styles & weights - i.e. the font-family says it all
812
  // We need to "force" the font-weight and font-style
813
  if ( ! empty( $value['type'] ) && 'custom_individual' == $value['type'] ) {
814
+ $cssValue['font-weight'] = '400 !important';
815
+ $cssValue['font-style'] = 'normal !important';
816
  }
817
 
818
  // Handle the case where we have the font_family in the font_variant (usually this means a custom font from our Fonto plugin)
835
 
836
  if ( strpos( $font_variant, 'italic' ) !== false ) {
837
  $font_variant = str_replace( 'italic', '', $font_variant );
838
+ $cssValue['font-style'] = 'italic';
839
  } elseif ( strpos( $font_variant, 'oblique' ) !== false ) {
840
  $font_variant = str_replace( 'oblique', '', $font_variant );
841
+ $cssValue['font-style'] = 'oblique';
842
  }
843
 
844
  // If we have a remainder like '400', use it as font weight.
845
  if ( ! empty( $font_variant ) ) {
846
+ $cssValue['font-weight'] = $font_variant;
847
  }
848
  }
849
 
includes/class-pixcustomify.php CHANGED
@@ -124,11 +124,6 @@ class PixCustomifyPlugin {
124
  * Initialize plugin
125
  */
126
  private function init() {
127
- // We don't want to put extra load on the heartbeat AJAX request.
128
- if ( wp_doing_ajax() && isset( $_REQUEST['action'] ) && 'heartbeat' === $_REQUEST['action'] ) {
129
- return;
130
- }
131
-
132
  // Handle the install and uninstall logic
133
  register_activation_hook( $this->get_file(), array( 'PixCustomifyPlugin', 'install' ) );
134
 
@@ -196,6 +191,7 @@ class PixCustomifyPlugin {
196
  add_action( 'upgrader_process_complete', array( $this, 'invalidate_all_caches' ), 1 );
197
 
198
  // Whenever we update data from the Customizer, we will invalidate the options details (that include the value).
 
199
  add_filter( 'customize_changeset_save_data', array( $this, 'filter_invalidate_options_details_cache' ), 50, 1 );
200
  }
201
 
@@ -288,9 +284,9 @@ class PixCustomifyPlugin {
288
  $data = $this->get_customizer_config( 'opt-name' );
289
 
290
  if ( true !== $skip_cache ) {
291
- // Cache the data in an option for 6 hours, but only if we are not supposed to skip the cache entirely.
292
  update_option( $this->get_customizer_opt_name_cache_key(), $data, true );
293
- update_option( $this->get_customizer_opt_name_cache_key() . '_timestamp', time() + 6 * HOUR_IN_SECONDS, true );
294
  }
295
  }
296
 
@@ -421,10 +417,10 @@ class PixCustomifyPlugin {
421
  }
422
 
423
  if ( true !== $skip_cache ) {
424
- // Cache the data for 6 hours, but only if we are not supposed to skip the cache entirely.
425
  update_option( $this->get_options_minimal_details_cache_key(), $options_minimal_details, true );
426
  update_option( $this->get_options_extra_details_cache_key(), $options_extra_details, false ); // we will not autoload extra details for performance reasons.
427
- update_option( $this->get_options_details_cache_timestamp_key(), time() + 6 * HOUR_IN_SECONDS, true );
428
  }
429
 
430
  $data = $this->options_minimal_details = $options_minimal_details;
@@ -561,9 +557,9 @@ class PixCustomifyPlugin {
561
  $data = apply_filters( 'customify_final_config', $data );
562
 
563
  if ( true !== $skip_cache ) {
564
- // Cache the data in an option for 6 hours, but only if we are not supposed to skip the cache entirely.
565
  update_option( $this->get_customizer_config_cache_key(), $data, false );
566
- update_option( $this->get_customizer_config_cache_key() . '_timestamp', time() + 6 * HOUR_IN_SECONDS, true );
567
  }
568
  }
569
 
124
  * Initialize plugin
125
  */
126
  private function init() {
 
 
 
 
 
127
  // Handle the install and uninstall logic
128
  register_activation_hook( $this->get_file(), array( 'PixCustomifyPlugin', 'install' ) );
129
 
191
  add_action( 'upgrader_process_complete', array( $this, 'invalidate_all_caches' ), 1 );
192
 
193
  // Whenever we update data from the Customizer, we will invalidate the options details (that include the value).
194
+ // Customize save (publish) used the same changeset save logic, so this filter is fired then also.
195
  add_filter( 'customize_changeset_save_data', array( $this, 'filter_invalidate_options_details_cache' ), 50, 1 );
196
  }
197
 
284
  $data = $this->get_customizer_config( 'opt-name' );
285
 
286
  if ( true !== $skip_cache ) {
287
+ // Cache the data in an option for 24 hours, but only if we are not supposed to skip the cache entirely.
288
  update_option( $this->get_customizer_opt_name_cache_key(), $data, true );
289
+ update_option( $this->get_customizer_opt_name_cache_key() . '_timestamp', time() + 24 * HOUR_IN_SECONDS, true );
290
  }
291
  }
292
 
417
  }
418
 
419
  if ( true !== $skip_cache ) {
420
+ // Cache the data for 24 hours, but only if we are not supposed to skip the cache entirely.
421
  update_option( $this->get_options_minimal_details_cache_key(), $options_minimal_details, true );
422
  update_option( $this->get_options_extra_details_cache_key(), $options_extra_details, false ); // we will not autoload extra details for performance reasons.
423
+ update_option( $this->get_options_details_cache_timestamp_key(), time() + 24 * HOUR_IN_SECONDS, true );
424
  }
425
 
426
  $data = $this->options_minimal_details = $options_minimal_details;
557
  $data = apply_filters( 'customify_final_config', $data );
558
 
559
  if ( true !== $skip_cache ) {
560
+ // Cache the data in an option for 24 hours, but only if we are not supposed to skip the cache entirely.
561
  update_option( $this->get_customizer_config_cache_key(), $data, false );
562
+ update_option( $this->get_customizer_config_cache_key() . '_timestamp', time() + 24 * HOUR_IN_SECONDS, true );
563
  }
564
  }
565
 
includes/integrations.php CHANGED
@@ -18,3 +18,4 @@ require_once 'integrations/w3-total-cache.php';
18
  require_once 'integrations/wp-fastest-cache.php';
19
  require_once 'integrations/wp-optimize.php';
20
  require_once 'integrations/wp-rocket.php';
 
18
  require_once 'integrations/wp-fastest-cache.php';
19
  require_once 'integrations/wp-optimize.php';
20
  require_once 'integrations/wp-rocket.php';
21
+ require_once 'integrations/the-events-calendar.php';
includes/integrations/the-events-calendar.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * This is logic for integrating with the The Events Calendar plugin (including the PRO version).
4
+ *
5
+ * @link https://wordpress.org/plugins/the-events-calendar/
6
+ *
7
+ * @see https://pixelgrade.com
8
+ * @author Pixelgrade
9
+ * @since 2.7.3
10
+ */
11
+
12
+ if ( ! defined( 'ABSPATH' ) ) {
13
+ exit; // Exit if accessed directly
14
+ }
15
+
16
+ // These mess up our Select2.
17
+ add_action( 'admin_enqueue_scripts', function () {
18
+ if ( ! is_customize_preview() ) {
19
+ return;
20
+ }
21
+
22
+ wp_deregister_script( 'tribe-select2' );
23
+ wp_register_script( 'tribe-select2', '' );
24
+
25
+ wp_deregister_style( 'tribe-select2-css' );
26
+ wp_register_style( 'tribe-select2-css', '' );
27
+ }, 99 );
js/vendor/select2-4.0.13/.editorconfig ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ [*]
2
+ indent_style = space
3
+ end_of_line = lf
4
+
5
+ [*.js]
6
+ indent_size = 2
js/vendor/select2-4.0.13/CHANGELOG.md ADDED
@@ -0,0 +1,427 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Change Log
2
+
3
+ ## 4.0.13
4
+
5
+ ### New features / improvements
6
+
7
+ * Trigger `input` event before `change` events (#4649)
8
+ * Feed back the keypress code that was responsible for the 'close' event (#5513)
9
+ * Only trigger `selection:update` once on DOM change events (#5734)
10
+
11
+ ### Bug fixes
12
+
13
+ * Prevent opening of disabled elements (#5751)
14
+
15
+ ### Documentation
16
+
17
+ * Fix "edit this page" links in docs (#5689)
18
+
19
+ ### Miscellaneous
20
+
21
+ * Registered Select2 on Open Collective (#5700, #5721, #5741)
22
+
23
+ ## 4.0.12
24
+
25
+ ### Bug fixes
26
+
27
+ * Fixes incorrect offset when using the Shadow DOM and styling the `<html>` element (#5682)
28
+
29
+ ### Miscellaneous
30
+
31
+ * Replace cdnjs with jsDelivr in the documentation (#5687)
32
+ * Fix incorrect provider for the automated NPM deployment (#5686)
33
+
34
+ ## 4.0.11
35
+
36
+ ### Bug fixes
37
+
38
+ * Fixes jQuery migrate error when getting offset when dropdownParent not in document (#5584)
39
+
40
+ ### Miscellaneous
41
+
42
+ * Enable GitHub actions for CI (#5591)
43
+ * Documentation has been moved into and is deployed from the code repository (#5638)
44
+ * Remove Travis CI integration (#5665)
45
+
46
+ ## 4.0.10
47
+
48
+ ### New features / improvements
49
+
50
+ * Support passing in a selector for `dropdownParent` option (#5622)
51
+
52
+ ### Bug fixes
53
+
54
+ * Fix bug where dropdowns pointing upwards were incorrectly positioned (#5621)
55
+
56
+ ## 4.0.9
57
+
58
+ ### New features / improvements
59
+
60
+ * Mirror disabled state through aria-disabled on selection (#5579)
61
+ * Select2 now clears the internal ID when it is destroyed (#5587)
62
+ * Set the main ARIA 1.1 roles and properties for comboboxes (#5582)
63
+ * The `language` option now has a clearly defined fallback chain (#5602)
64
+
65
+ ### Bug fixes
66
+
67
+ * Do not propagate click when search box is not empty (#5580)
68
+ * Fix `maximumSelectionLength` being ignored by `closeOnSelect` (#5581)
69
+ * Fix generated options not receiving result IDs (#5586)
70
+ * Remove selection title attribute if text is empty (#5589)
71
+ * Reposition dropdown whenever items are selected (#5590)
72
+ * Fix dropdown positioning when displayed above with messages (#5592)
73
+ * Fix search box expanding width of container (#5595)
74
+ * `allowClear` no longer shifts selections to a new line (#5603)
75
+
76
+ ### Translations
77
+
78
+ * Fix error in German translations (#5604)
79
+
80
+ ### Miscellaneous
81
+
82
+ * Updated development grunt version so it no longer shows as vulnerable (#5597)
83
+ * Remove unused variables (#5554)
84
+
85
+ ## 4.0.8
86
+
87
+ ### New features / improvements
88
+
89
+ * Test against and fix compatibility with jQuery 3.4.1 (#5531)
90
+ * Results respect disabled state of `<option>` (#5560)
91
+ * Add `computedstyle` option for calculating the width (#5559)
92
+
93
+ ### Bug fixes
94
+
95
+ * Fix tag creation being broken in 4.0.7 (#5558)
96
+ * Fix infinite scroll when the scrollbar is not visible (#5575)
97
+ * Revert change to focusing behaviour in 4.0.6 (#5576)
98
+
99
+ ### Translations
100
+
101
+ * Fix wording in French translations (#5521)
102
+
103
+ ### Miscellaneous
104
+
105
+ * Update grunt-contrib-qunit to latest version (#5530)
106
+ * Removed unused `.select2-selection__placeholder` CSS definitions for multiple selects (#5508)
107
+ * Remove deprecated jQuery shorthand (#5564)
108
+
109
+ ## 4.0.7
110
+
111
+ ### New features/improvements
112
+ - Do not close on select if Ctrl or Meta (Cmd) keys being held (#5222)
113
+
114
+ ### Bug fixes
115
+ - Fixed issue where single select boxes would automatically reopen when they were closed (#5490, #5492)
116
+
117
+ ### Miscellaneous
118
+ - Move almost and jquery-mousewheel to devDependencies (#5489)
119
+
120
+ ## 4.0.6
121
+
122
+ ### New features/improvements
123
+ - Add style property to package.json (#5019)
124
+ - Implement `clear` and `clearing` events (#5058)
125
+ - Add `scrollAfterSelect` option (#5150)
126
+ - Add missing diacritics (#4118, #4337, #5464)
127
+
128
+ ### Bug fixes
129
+ - Fix up arrow error when there are no options in dropdown (#5127)
130
+ - Add `;` before beginning of factory wrapper (#5089)
131
+ - Fix IE11 issue with select losing focus after selecting an item (#4860)
132
+ - Clear tooltip from `select2-selection__rendered` when selection is cleared (#4640, #4746)
133
+ - Fix keyboard not closing when closing dropdown on iOS 10 (#4680)
134
+ - User-defined types not normalized properly when passed in as data (#4632)
135
+ - Perform deep merge for `Defaults.set()` (#4364)
136
+ - Fix "the results could not be loaded" displaying during AJAX request (#4356)
137
+ - Cache objects in `Utils.__cache` instead of using `$.data` (#4346, #5486)
138
+ - Removing the double event binding registration of `selection:update` (#4306)
139
+
140
+ #### Accessibility
141
+ - Improve `.select2-hidden-accessible` (#4908)
142
+ - Add role and aria-readonly attributes to single selection dropdown value (#4881)
143
+
144
+ ### Translations
145
+ - Add Turkmen translations (`tk`) (#5125)
146
+ - Fix error in French translations (#5122)
147
+ - Add Albanian translation (`sq`) (#5199)
148
+ - Add Georgian translation (`ka`) (#5179)
149
+ - Add Nepali translation (`ne`) (#5295)
150
+ - Add Bangla translation (`bn`) (#5248)
151
+ - Add `removeAllItems` translation for clear "x" title (#5291)
152
+ - Fix wording in Vietnamese translations (#5387)
153
+ - Fix error in Russian translation (#5401)
154
+
155
+ ### Miscellaneous
156
+ - Remove duplicate CSS selector in classic theme (#5115)
157
+
158
+ ## 4.0.5
159
+
160
+ ### Bug fixes
161
+ - Replace `autocapitalize=off` with `autocapitalize=none` (#4994)
162
+
163
+ ### Translations
164
+ - Vietnamese: remove an unnecessary quote mark (#5059)
165
+ - Czech: Add missing commas and periods (#5052)
166
+ - Spanish: Update the 'errorLoading' message (#5032)
167
+ - Fix typo in Romanian (#5005)
168
+ - Improve French translation (#4988)
169
+ - Add Pashto translation (`ps`) (#4960)
170
+ - Add translations for lower and upper Sorbian (`dsb` and `hsb`) (#4949)
171
+ - Updates to Slovak (#4915)
172
+ - Fixed Norwegian `inputTooShort` message (#4817, 4896)
173
+ - Add Afrikaans translation (`af`) (#4850)
174
+ - Add Bosnian translation (`bs`) (#4504)
175
+
176
+ ## 4.0.4
177
+
178
+ ### New features / Improvements
179
+ - Make tag matching case insensitive [https://github.com/select2/select2/commit/cb9a90457867ffb14c7b1550bb67e872e0a5c2dd, https://github.com/select2/select2/commit/1167bace78cd3b1a918c1b04f3bac54674eab62b]
180
+ - Support selecting options with blank or `0` option values [https://github.com/select2/select2/commit/16b4840c0e2df0461998e3b464ee0a546173950d, https://github.com/select2/select2/commit/0358ee528765157234643d289bce6b8ca5889c72]
181
+
182
+ ### Bug fixes
183
+ - Fix issue with entire form losing focus when tabbing away from a Select2 control (#4419)
184
+ - Fix UMD support for CommonJS [https://github.com/select2/select2/commit/45a877345482956021161203ac789c25f40a7d5e]
185
+
186
+ ### Documentation
187
+ - Github Pages documentation has been deprecated, replaced with https://github.com/select2/docs
188
+ - Add django-autocomplete-light to integrations [https://github.com/select2/select2/pull/4597]
189
+ - Correct typo in options page [https://github.com/select2/select2/pull/4389]
190
+ - Correct misspelling in AJAX query parameters example [https://github.com/select2/select2/pull/4435]
191
+ - "highlight" should be "focus" in focus example [https://github.com/select2/select2/pull/4441]
192
+ - Correct misspelling in `<select>` serialization example [https://github.com/select2/select2/pull/4538]
193
+ - Correct typos in documentation [https://github.com/select2/select2/pull/4663]
194
+
195
+ ### Translations
196
+ - Add `errorLoading` Hungarian translation [https://github.com/select2/select2/commit/7d1d13352321e21670ff1c6cba7413aa264fd57a]
197
+ - Add `errorLoading` German translation [https://github.com/select2/select2/commit/4df965219ea4c39147fde9335bc260840465933a]
198
+ - Add Slovene language [https://github.com/select2/select2/commit/8e6422c570a87da8d89c45daf0d253695a943c84]
199
+ - Add `errorLoading` Galician translation [https://github.com/select2/select2/commit/8fcc6202c37f4e06d951342bf142a3b906b6b8e3]
200
+ - Add `errorLoading` Thai translation [https://github.com/select2/select2/commit/625fc78ee616baedf64aa37357403b4b72c7363c]
201
+ - Add `searching` and `errorLoading` Finnish translations [https://github.com/select2/select2/pull/4730]
202
+ - Add `errorLoading` Turkish translation [https://github.com/select2/select2/commit/fd4a0825315c7055347726d5818c999279f96ff8, https://github.com/select2/select2/commit/751b36767f9f28b9de9428d5e8035c9a404915d9]
203
+ - Add Armenian language [https://github.com/select2/select2/commit/f6fa52dcc02341df1523f50348f2effc54ee2911]
204
+
205
+ ## 4.0.3
206
+
207
+ This is the third bugfix release of Select2 4.0.0. It builds upon the [second bugfix release](https://github.com/select2/select2/releases/tag/4.0.2) and fixes many common issues.
208
+
209
+ ### New features / Improvements
210
+ - The old `dropdownAutoWidth` option now properly works [https://github.com/select2/select2/commit/fe26b083eb830836061de1458e483782cefef424]
211
+ - A `focus` event on the original `<select>` is now handled [https://github.com/select2/select2/commit/31e7a1d4c52ed7477769fcad5d15166ae3c9b4d0]
212
+ - Adding and removing options now refreshes the selection automatically [https://github.com/select2/select2/commit/ea79a197e0ffe55aa600eed6d18cbd1c804c3176]
213
+
214
+ ### Bug fixes
215
+ - `select2('option')` no longer mutate the arguments when working on multiple elements [https://github.com/select2/select2/commit/c2c1aeef31c95c6df5545c900a4e1782d712497c]
216
+ - Better detect aborted requests [https://github.com/select2/select2/commit/cfb66f5e4f71a56c46a6890c5dde4b7f24f11fa8]
217
+ - New options are now properly created during tokenization [https://github.com/select2/select2/commit/3b8cd2e36990e695e4cb4b966c8658e7ca1574dc]
218
+ - Fix positioning bug with non-static parents for the dropdown [https://github.com/select2/select2/pull/4267]
219
+ - Infinite scrolling no longer resets the keyboard focus [https://github.com/select2/select2/commit/e897d008a672da262ba84cee2a144578696ada29, https://github.com/select2/select2/commit/9f581285d88128b29a01fc1e5fd2d445d610b553]
220
+ - `selectOnClose` now works properly with `closeOnSelect` [https://github.com/select2/select2/commit/481c43883e23874e9c35879d173eb8cc5b994b12]
221
+ - Apply `ajax.delay` to empty search terms as well [https://github.com/select2/select2/commit/4b9e02f02211248be25ac4c16d4635cf38237bb9]
222
+
223
+ ### Documentation
224
+ - Added example for attaching event listeners [https://github.com/select2/select2/commit/84d6b5d840f7f4e6b7a2fb3f08424bf5495c876d]
225
+ - Correct link to the [Select2 Bootstrap Theme](https://github.com/select2/select2-bootstrap-theme) [https://github.com/select2/select2/pull/4318]
226
+ - Added example for using a `<label>` [https://github.com/select2/select2/commit/3bc7f4ac78b58eff8cd17b3273596638c3c9c5c1]
227
+ - Add documentation for `ajax.url` [https://github.com/select2/select2/commit/5a831afb9a7d46e8f20aec21164cfbfd182024de]
228
+ - Added favicon [https://github.com/select2/select2/pull/4379]
229
+
230
+ ### Translations
231
+ - Add Khmer translation [https://github.com/select2/select2/pull/4246]
232
+ - Added Norwegian bokmaal for `errorLoading` [https://github.com/select2/select2/pull/4259]
233
+ - Fixed pluralization in Lithuanian translation [https://github.com/select2/select2/commit/5b5eddd183c87bf43165b3a98e03eabe10e9fa58]
234
+ - Add French translation for `errorLoading` [https://github.com/select2/select2/commit/b1ea28bb7d8c02b3b352f558031ccfc8041122eb]
235
+ - Add Greek translation [https://github.com/select2/select2/pull/4139]
236
+
237
+ ## 4.0.2
238
+
239
+ This is the second bugfix release of Select2 4.0.0. It builds upon the [first release candidate of Select2 4.0.2](https://github.com/select2/select2/releases/tag/4.0.2-rc.1) with some minor improvements.
240
+
241
+ ### New features / Improvements
242
+
243
+ - Added `insertTag` option to control the placement of the `tags` option [https://github.com/select2/select2/pull/4008]
244
+ - Added handler for AJAX errors [https://github.com/select2/select2/issues/3501]
245
+ - Added insertTag to control the tag position [https://github.com/select2/select2/pull/4008]
246
+
247
+ ### Bug fixes
248
+
249
+ - Fixed positioning issues with static dropdown parents [https://github.com/select2/select2/issues/3970]
250
+ - Fixed existing selections not always being respected with array data [https://github.com/select2/select2/issues/3990]
251
+ - Sanitize automatically generated ids so CSS identifiers can be used [https://github.com/select2/select2/issues/3618]
252
+ - Recursively apply defaults so AJAX defaults can be set [https://github.com/select2/select2/commit/983cd8e765c5345bfe7d3bdcc3b0c882a35461ca]
253
+ - No need to recalculate the top of the dropdown twice [https://github.com/select2/select2/pull/4155]
254
+
255
+ ### Documentation
256
+
257
+ - Updated Bootstrap and Font Awesome dependencies [https://github.com/select2/select2/commit/a5e539b509778eabeb8ce79e191b3ee1e81f6deb, https://github.com/select2/select2/commit/81a4a68b113e0d3e0fb1d0f8b1c33ae1b48ba04f, https://github.com/select2/select2/commit/6369f5f173fb81ec692213782945cc737e248da5]
258
+ - Use Jekyll's highlighting instead of prettify [https://github.com/select2/select2/commit/54441e6a22be3969dd934ccb769f5d7dde684bfb, https://github.com/select2/select2/commit/74387b98632c75b06d15d83ad5359b9daf0f5dcb, https://github.com/select2/select2/commit/a126b53b4c90fac33b5d855894647cd8bcac3558, https://github.com/select2/select2/commit/75163d67cb80e4279965a97e9eeda5b171806085]
259
+ - Corrected responsive width example to properly show it working [https://github.com/select2/select2/commit/63d531a9c0ab51f05327492a56f3245777762b45]
260
+ - Replaced protocol-relative URLs with HTTPS protocol [https://github.com/select2/select2/pull/4127]
261
+ - Code snippets for mapping `id` and `text` [https://github.com/select2/select2/issues/4086]
262
+ - Document how to trigger `change` just for Select2 [https://github.com/select2/select2/issues/3620]
263
+ - Added notes about DOM events [https://github.com/select2/select2/commit/37dbe059fce4578b46b7561e6243b7fdc63ac002]
264
+
265
+ ### Translations
266
+ - Correct Romanian translation [https://github.com/select2/select2/commit/72d905f9e026d49e7c600f37a1ce742c404654d7]
267
+
268
+ ## 4.0.1
269
+
270
+ This is the first bugfix release of Select2 4.0.0. It builds upon the [first release candidate of Select2 4.0.1](https://github.com/select2/select2/releases/tag/4.0.1-rc.1) with some minor improvements.
271
+
272
+ ### New features / improvements
273
+ - The option container is now passed in as the second argument when templating selections using `templateResult` [https://github.com/select2/select2/commit/dc516e7073605723be59bc727b96a3b3dea1ae5a]
274
+ - The option container is now passed in as the second argument when templating selections using `templateSelection` [https://github.com/select2/select2/pull/3324]
275
+ - You can immediately start typing to search when tabbing into a multiple select [https://github.com/select2/select2/commit/02cca7baa7b78e73cdcf393172ee3a54be387167, https://github.com/select2/select2/commit/79cdcc0956e242c1ce642bbaa93e538c54f4be0]
276
+ - All parameters passed in for AJAX requests are now set as query string parameters by default [https://github.com/select2/select2/issues/3548]
277
+
278
+ ### Bug fixes
279
+ - The search box will now be properly sized after removing a selection [https://github.com/select2/select2/commit/5f80c5d9f81f3c5398c3e6e3e84fd6c67c8873f1]
280
+ - Dropdown results will now be spoken by screen readers [https://github.com/select2/select2/commit/9fae3d74e373fc646da4e39a0c2ab11efa808c3f]
281
+ - Options are now properly cloned when initializing multiple instances at once [https://github.com/select2/select2/commit/3c8366e8769233a6b20ade934fe629279e7be6ff]
282
+ - `selectOnClose` and now be used with `closeOnSelect` without getting a stack overflow [https://github.com/select2/select2/commit/393ca4cf7f7f7097d3a994bda3dbf195e945eba1]
283
+ - Fixed positioning with non-static parents [https://github.com/select2/select2/commit/c9216b4b966653dd63a67e815b47899ef5325298]
284
+ - Fixed bug where multiple selects with placeholders were buggy in IE [https://github.com/select2/select2/issues/3300]
285
+ - Fixed bug where AJAX selects could not be initialized with array data [https://github.com/select2/select2/pull/3375]
286
+ - `:all:` is now correctly removed when used in `containerCss` and `dropdownCss` options [https://github.com/select2/select2/pull/3464]
287
+ - Fixed bug where the multiple select search box would appear on the left in RTL mode [https://github.com/select2/select2/pull/3502]
288
+ - Change ALT + UP to close the dropdown instead of opening it [https://github.com/select2/select2/commit/d2346cc33186c2a00fa2dad29e8e559c42bfea00]
289
+ - Fix focus issue with the multiple select search box when the `change` event was triggered [https://github.com/select2/select2/commit/698fe7b9e187e182f679aa679eb8b0ecb64a846b, https://github.com/select2/select2/commit/88503d2c67dc7f4fb9395a17f17edfe4948cf738, https://github.com/select2/select2/commit/dd2990adead92593a2dffff6ae004ea8b647d130]
290
+ - Fix bug in `ArrayAdapter` where the existing `<option>` data would be used instead of the array data [https://github.com/select2/select2/pull/3565]
291
+ - Remove random call to `$dropdownContainer.width()` in the `AttachBody` decorator [https://github.com/select2/select2/pull/3654]
292
+ - Fix memory leak in `AttachBody` decorator [https://github.com/select2/select2/commit/671f5a2ce21005090e0b69059799cd3dd1fbbf84]
293
+ - Selections can no longer be removed when Select2 is in a disabled state [https://github.com/select2/select2/commit/68d068f1d2c7722d011d285a291d1f974bf09772, https://github.com/select2/select2/commit/7d8f86cbf85ebd2179195ff6a2a7a1c5dcb9da58]
294
+ - Remove redundant `open` event trigger [https://github.com/select2/select2/pull/3507]
295
+ - Correct references to `this` in `ajax.data` and `ajax.url` callback functions [https://github.com/select2/select2/issues/3361]
296
+ - Apply select2('option') calls on all elements [https://github.com/select2/select2/pull/3495]
297
+
298
+ ### Design
299
+
300
+ - Fixed original `<select>` not always being hidden correctly in some cases [https://github.com/select2/select2/pull/3301]
301
+ - Fix potential issue with Bootstrap's gradients in Internet Explorer [https://github.com/select2/select2/pull/3307]
302
+ - Improve compatibility with Zurb Foundation [https://github.com/select2/select2/pull/3290]
303
+ - Remove padding on mobile safari search field in multiple selects [https://github.com/select2/select2/pull/3605]
304
+ - Fix the clear button appearing beneath long text [https://github.com/select2/select2/issues/3306]
305
+ - Migrate the CSS classes for the "Loading more results" message to BEM [https://github.com/select2/select2/issues/3889]
306
+ - Fix inline search not displaying properly in Safari [https://github.com/select2/select2/issues/3459]
307
+
308
+ ### Documentation
309
+
310
+ - New documentation theme designed by @fk [https://github.com/select2/select2/pull/3376, https://github.com/select2/select2/pull/3467, https://github.com/select2/select2/pull/3488]
311
+ - Update ajax example to reflect pagination [https://github.com/select2/select2/pull/3357]
312
+ - Fix incorrect option name in `maxiumSelectionLength` example [https://github.com/select2/select2/pull/3454]
313
+ - Fix typos in the disabled mode/results examples [https://github.com/select2/select2/pull/3665]
314
+ - Fix `Option` parameters in the 4.0 announcement [https://github.com/select2/select2/pull/3547]
315
+ - Fix invalid JSON in the tags example within the 4.0 announcement [https://github.com/select2/select2/pull/3637]
316
+
317
+ ### Translations
318
+ - Added Cyrillic variant of the Serbian language [https://github.com/select2/select2/pull/3943]
319
+ - Corrected Thai "no results found" translation [https://github.com/select2/select2/pull/3782]
320
+ - Swapped the `inputTooLong` and `inputTooShort` messages in the Galician translation [https://github.com/select2/select2/pull/3291]
321
+ - Fix improper grammar in Dutch translation [https://github.com/select2/select2/pull/3692]
322
+ - Add Japanese translation [https://github.com/select2/select2/pull/3477]
323
+ - Polish translation: Fixed typo in maximum selected message [https://github.com/select2/select2/pull/3587]
324
+ - Add Malay translation [https://github.com/select2/select2/pull/3635]
325
+ - Add `errorLoading` for Indonesian translation [https://github.com/select2/select2/pull/3635]
326
+ - Correct grammar issues in Hebrew translation [https://github.com/select2/select2/pull/3911]
327
+ - Add `errorLoading` for Danish translation [https://github.com/select2/select2/pull/3870]
328
+ - Add Arabic translation [https://github.com/select2/select2/pull/3859]
329
+
330
+ ## 4.0.0
331
+
332
+
333
+ This builds upon [the second release candidate](https://github.com/select2/select2/tree/4.0.0-rc.2), **so review all previous release notes** before upgrading from previous versions of Select2.
334
+
335
+ ### Supported environments
336
+ - jQuery 1.7.2+
337
+ - Modern browsers (Chrome, Firefox, Safari)
338
+ - Internet Explorer 8+
339
+
340
+ ### New features
341
+ - Fully compatible with AMD and UMD based loaders.
342
+ - Advanced plugin system that [uses custom adapters](https://select2.org/advanced/adapters-and-decorators).
343
+ - Full support for `jQuery.noConflict`.
344
+ - A `<select>` is the recommended element and [can be used for all options](https://select2.org/upgrading/migrating-from-35#no-more-hidden-input-tags). There is limited backwards-compatible support for the `<input>` element in [full builds](https://select2.org/getting-started/builds-and-modules).
345
+ - [Declarative configuration through `data-*` attributes](https://select2.org/configuration/data-attributes)
346
+ - Easy to configure theme system and new default theme
347
+ - You can use more specific locales (like `en-US`) and Select2 will be able to determine what translation files to load.
348
+
349
+ ### Breaking changes
350
+ - Select2 now uses the MIT license
351
+ - [The full build](https://select2.org/getting-started/builds-and-modules) of Select2 no longer includes jQuery - You must include jQuery separately on your page.
352
+ - Select2 will prevent the inner scrolling of modals (and other scrollable containers) when it is open to prevent the UI from breaking. [Read more at the commit.](https://github.com/select2/select2/commit/003d6053a9fff587c688008397e7d5824463fe99)
353
+ - jQuery is no longer listed as a dependency in the `bower.json`/`component.json` files.
354
+ - [`<select>` has replaced `<input type="hidden" />`](https://select2.org/upgrading/migrating-from-35#no-more-hidden-input-tags) for **all options** (_including remote data_)
355
+ - The [`matcher` has been revamped](https://select2.org/upgrading/migrating-from-35#advanced-matching-of-searches) to include full context, a compatibility module (`select2/compat/matcher`) has been created
356
+ - The [display always reflects the order](https://select2.org/upgrading/migrating-from-35#display-reflects-the-actual-order-of-the-values) data is sent to the server
357
+ - The click mask is no longer the default (again). You can get back the old functionality by wrapping your `selectionAdapter` with the `ClickMask` (`select2/selection/clickMask`) decorator.
358
+ - Select2 no longer stops the propagation of events happening within the dropdown and selection. You can use the `StopPropagation` modules available in the [full builds](https://select2.org/getting-started/builds-and-modules) to prevent this. [https://github.com/select2/select2/commit/8f8140e3b00c5d5bb232455137c4c633d7da4275]
359
+ - The enter key no longer toggles the state of multiple select items in the results, but instead will only select them. Use CTRL + Space instead to toggle the state. [https://github.com/select2/select2/commit/017c20109471fa5b835603faf5dc37f7c2c2ea45]
360
+ - Warnings will now be triggered in the developer console if Select2 detects an unsupported configuration.
361
+
362
+ #### Options
363
+
364
+ - The default value of the `width` option has been changed from `style` to `resolve`.
365
+ - The `copy` value for the `width` option has been renamed to `style`.
366
+
367
+ ##### Renamed
368
+ - `formatSelection` -> `templateSelection`
369
+ - `formatResult` -> `templateResult`
370
+ - `sortResults` -> `sorter`
371
+ - `createSearchChoice` -> `createTag`
372
+ - `selectOnBlur` -> `selectOnClose`
373
+ - `ajax.jsonpCallback` -> `ajax.jsonp`
374
+ - `ajax.results` -> `ajax.processResults`
375
+ - `tags: [array,of,data]` -> `data: [array,of,data], tags: true`
376
+ - `placeholderOption` has been replaced by `placeholder.id` (`placeholder` -> `placeholder.text`)
377
+
378
+ ##### [Internationalization](https://select2.org/i18n)
379
+ - `formatNoMatches` -> `language.noMatches`
380
+ - `formatSearching` -> `language.searching`
381
+ - `formatInputTooShort` -> `language.inputTooShort`
382
+ - `formatInputTooLong` -> `language.inputTooLong`
383
+ - `formatAjaxError` -> `language.errorLoading`
384
+ - `formatLoading` -> `language.loadingMore`
385
+ - `formatSelectionTooBig` -> `language.maximumSelected`
386
+
387
+ ##### Deprecated/Removed
388
+ - `initSelection` - This is [no longer needed](https://select2.org/upgrading/migrating-from-35#removed-the-requirement-of-initselection) with `<select>` tags. Limited backwards compatibility in the [full build](https://select2.org/getting-started/builds-and-modules).
389
+ - `id` - Data objects should now always have `id` and `text` attributes that are strings, use [`$.map`](https://api.jquery.com/jquery.map/) when migrating
390
+ - `query` - Use a [custom data adapter](https://select2.org/upgrading/migrating-from-35#custom-data-adapters-instead-of-query) instead. Limited backwards compatibility in the [full build](https://select2.org/getting-started/builds-and-modules).
391
+ - `ajax.params` - All parameters passed to `ajax` will be passed to the AJAX data transport function
392
+
393
+ #### Methods
394
+
395
+ ##### Renamed
396
+ - `.select2("val", [value])` -> `.val([value])`
397
+ - `.select2("enable", !disabled)` -> `.prop("disabled", disabled)`
398
+
399
+ ##### Removed
400
+ - `.select2("onSortStart")` and `.select2("onSortEnd")` - A custom [selection adapter](https://select2.org/advanced/default-adapters/selection) should be created instead
401
+ - `.select2("data", data)` - Create the `<option>` tags for the objects that you would like to set, and set the `.val` to select them
402
+ - `.select2("readonly")` - There is [no way to make a `<select>` element read-only](http://stackoverflow.com/q/368813/359284), disable it instead
403
+
404
+ #### Events
405
+
406
+ ##### New
407
+ - `select2:closing` is triggered before the dropdown is closed
408
+ - `select2:select` is triggered when an option is selected
409
+
410
+ ##### Renamed
411
+ - `select2-close` is now `select2:close`
412
+ - `select2-open` is now `select2:open`
413
+ - `select2-opening` is now `select2:opening`
414
+ - `select2-selecting` is now `select2:selecting`
415
+ - `select2-removed` is now `select2:unselect`
416
+ - `select2-removing` is now `select2:unselecting`
417
+
418
+ ##### Removed
419
+ - `select2-clearing` has been removed in favor of `select2:unselecting`
420
+ - `select2-highlight`
421
+ - `select2-loaded`
422
+ - `select2-focus` - Use the native `focus` event instead
423
+ - `select2-blur` - Use the native `blur` event instead
424
+ - All extra properties from the `change` event were removed
425
+ - `val` can be retrieved with `$element.val()` instead
426
+ - `added` can be retrieved by listening to `select2:select`
427
+ - `removed` can be retrieved by listening to `select2:unselect`
js/vendor/select2-4.0.13/LICENSE.md ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2012-2017 Kevin Brown, Igor Vaynberg, and Select2 contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
js/vendor/select2-4.0.13/README.md ADDED
@@ -0,0 +1,157 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Select2
2
+ =======
3
+ ![Build Status][github-actions-image]
4
+ [![Financial Contributors on Open Collective](https://opencollective.com/select2/all/badge.svg?label=financial+contributors)](https://opencollective.com/select2) [![cdnjs](https://img.shields.io/cdnjs/v/select2.svg)][cdnjs]
5
+ [![jsdelivr](https://data.jsdelivr.com/v1/package/npm/select2/badge)][jsdelivr]
6
+
7
+ Select2 is a jQuery-based replacement for select boxes. It supports searching,
8
+ remote data sets, and pagination of results.
9
+
10
+ To get started, checkout examples and documentation at
11
+ https://select2.org/
12
+
13
+ Use cases
14
+ ---------
15
+ * Enhancing native selects with search.
16
+ * Enhancing native selects with a better multi-select interface.
17
+ * Loading data from JavaScript: easily load items via AJAX and have them
18
+ searchable.
19
+ * Nesting optgroups: native selects only support one level of nesting. Select2
20
+ does not have this restriction.
21
+ * Tagging: ability to add new items on the fly.
22
+ * Working with large, remote datasets: ability to partially load a dataset based
23
+ on the search term.
24
+ * Paging of large datasets: easy support for loading more pages when the results
25
+ are scrolled to the end.
26
+ * Templating: support for custom rendering of results and selections.
27
+
28
+ Browser compatibility
29
+ ---------------------
30
+ * IE 8+
31
+ * Chrome 8+
32
+ * Firefox 10+
33
+ * Safari 3+
34
+ * Opera 10.6+
35
+
36
+ Usage
37
+ -----
38
+ You can source Select2 directly from a CDN like [jsDelivr][jsdelivr] or
39
+ [cdnjs][cdnjs], [download it from this GitHub repo][releases], or use one of
40
+ the integrations below.
41
+
42
+ Integrations
43
+ ------------
44
+ Third party developers have created plugins for platforms which allow Select2 to be integrated more natively and quickly. For many platforms, additional plugins are not required because Select2 acts as a standard `<select>` box.
45
+
46
+ Plugins
47
+
48
+ * [Django]
49
+ - [django-autocomplete-light]
50
+ - [django-easy-select2]
51
+ - [django-select2]
52
+ * [Drupal] - [drupal-select2]
53
+ * [Meteor] - [meteor-select2]
54
+ * [Ruby on Rails][ruby-on-rails] - [select2-rails]
55
+ * [Wicket] - [wicketstuff-select2]
56
+ * [Yii 2][yii2] - [yii2-widget-select2]
57
+ * [Angularjs][angularjs] - [mdr-angular-select2]
58
+
59
+ Themes
60
+
61
+ - [Bootstrap 3][bootstrap3] - [select2-bootstrap-theme]
62
+ - [Bootstrap 4][bootstrap4] - [select2-bootstrap4-theme]
63
+ - [Flat UI][flat-ui] - [select2-flat-theme]
64
+ - [Metro UI][metro-ui] - [select2-metro]
65
+
66
+ Missing an integration? Modify this `README` and make a pull request back here to Select2 on GitHub.
67
+
68
+ Internationalization (i18n)
69
+ ---------------------------
70
+ Select2 supports multiple languages by simply including the right language JS
71
+ file (`dist/js/i18n/it.js`, `dist/js/i18n/nl.js`, etc.) after
72
+ `dist/js/select2.js`.
73
+
74
+ Missing a language? Just copy `src/js/select2/i18n/en.js`, translate it, and
75
+ make a pull request back to Select2 here on GitHub.
76
+
77
+ Documentation
78
+ -------------
79
+ The documentation for Select2 is available
80
+ [online at the documentation website][documentation] and is located within the
81
+ [`docs` directory of this repository][documentation-directory].
82
+
83
+ Community
84
+ ---------
85
+ You can find out about the different ways to get in touch with the Select2
86
+ community at the [Select2 community page][community].
87
+
88
+ Copyright and license
89
+ ---------------------
90
+ The license is available within the repository in the [LICENSE][license] file.
91
+
92
+ [cdnjs]: http://www.cdnjs.com/libraries/select2
93
+ [community]: https://select2.org/getting-help
94
+ [documentation]: https://select2.org
95
+ [documentation-directory]: https://github.com/select2/select2/tree/develop/docs
96
+ [freenode]: https://freenode.net/
97
+ [github-actions-image]: https://github.com/select2/select2/workflows/CI/badge.svg
98
+ [jsdelivr]: https://www.jsdelivr.com/package/npm/select2
99
+ [license]: LICENSE.md
100
+ [releases]: https://github.com/select2/select2/releases
101
+
102
+ [angularjs]: https://angularjs.org/
103
+ [bootstrap3]: https://getbootstrap.com/
104
+ [bootstrap4]: https://getbootstrap.com/
105
+ [django]: https://www.djangoproject.com/
106
+ [django-autocomplete-light]: https://github.com/yourlabs/django-autocomplete-light
107
+ [django-easy-select2]: https://github.com/asyncee/django-easy-select2
108
+ [django-select2]: https://github.com/applegrew/django-select2
109
+ [drupal]: https://www.drupal.org/
110
+ [drupal-select2]: https://www.drupal.org/project/select2
111
+ [flat-ui]: http://designmodo.github.io/Flat-UI/
112
+ [mdr-angular-select2]: https://github.com/modulr/mdr-angular-select2
113
+ [meteor]: https://www.meteor.com/
114
+ [meteor-select2]: https://github.com/nate-strauser/meteor-select2
115
+ [metro-ui]: http://metroui.org.ua/
116
+ [select2-metro]: http://metroui.org.ua/select2.html
117
+ [ruby-on-rails]: http://rubyonrails.org/
118
+ [select2-bootstrap-theme]: https://github.com/select2/select2-bootstrap-theme
119
+ [select2-bootstrap4-theme]: https://github.com/ttskch/select2-bootstrap4-theme
120
+ [select2-flat-theme]: https://github.com/techhysahil/select2-Flat_Theme
121
+ [select2-rails]: https://github.com/argerim/select2-rails
122
+ [vue.js]: http://vuejs.org/
123
+ [select2-vue]: http://vuejs.org/examples/select2.html
124
+ [wicket]: https://wicket.apache.org/
125
+ [wicketstuff-select2]: https://github.com/wicketstuff/core/tree/master/select2-parent
126
+ [yii2]: http://www.yiiframework.com/
127
+ [yii2-widget-select2]: https://github.com/kartik-v/yii2-widget-select2
128
+
129
+ ## Contributors
130
+
131
+ ### Code Contributors
132
+
133
+ This project exists thanks to all the people who contribute. [[Contribute](.github/CONTRIBUTING.md)].
134
+ <a href="https://github.com/select2/select2/graphs/contributors"><img src="https://opencollective.com/select2/contributors.svg?width=890&button=false" /></a>
135
+
136
+ ### Financial Contributors
137
+
138
+ Become a financial contributor and help us sustain our community. [[Contribute](https://opencollective.com/select2/contribute)]
139
+
140
+ #### Individuals
141
+
142
+ <a href="https://opencollective.com/select2"><img src="https://opencollective.com/select2/individuals.svg?width=890"></a>
143
+
144
+ #### Organizations
145
+
146
+ Support this project with your organization. Your logo will show up here with a link to your website. [[Contribute](https://opencollective.com/select2/contribute)]
147
+
148
+ <a href="https://opencollective.com/select2/organization/0/website"><img src="https://opencollective.com/select2/organization/0/avatar.svg"></a>
149
+ <a href="https://opencollective.com/select2/organization/1/website"><img src="https://opencollective.com/select2/organization/1/avatar.svg"></a>
150
+ <a href="https://opencollective.com/select2/organization/2/website"><img src="https://opencollective.com/select2/organization/2/avatar.svg"></a>
151
+ <a href="https://opencollective.com/select2/organization/3/website"><img src="https://opencollective.com/select2/organization/3/avatar.svg"></a>
152
+ <a href="https://opencollective.com/select2/organization/4/website"><img src="https://opencollective.com/select2/organization/4/avatar.svg"></a>
153
+ <a href="https://opencollective.com/select2/organization/5/website"><img src="https://opencollective.com/select2/organization/5/avatar.svg"></a>
154
+ <a href="https://opencollective.com/select2/organization/6/website"><img src="https://opencollective.com/select2/organization/6/avatar.svg"></a>
155
+ <a href="https://opencollective.com/select2/organization/7/website"><img src="https://opencollective.com/select2/organization/7/avatar.svg"></a>
156
+ <a href="https://opencollective.com/select2/organization/8/website"><img src="https://opencollective.com/select2/organization/8/avatar.svg"></a>
157
+ <a href="https://opencollective.com/select2/organization/9/website"><img src="https://opencollective.com/select2/organization/9/avatar.svg"></a>
js/vendor/select2-4.0.13/dist/css/select2.css ADDED
@@ -0,0 +1,481 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .select2-container {
2
+ box-sizing: border-box;
3
+ display: inline-block;
4
+ margin: 0;
5
+ position: relative;
6
+ vertical-align: middle; }
7
+ .select2-container .select2-selection--single {
8
+ box-sizing: border-box;
9
+ cursor: pointer;
10
+ display: block;
11
+ height: 28px;
12
+ user-select: none;
13
+ -webkit-user-select: none; }
14
+ .select2-container .select2-selection--single .select2-selection__rendered {
15
+ display: block;
16
+ padding-left: 8px;
17
+ padding-right: 20px;
18
+ overflow: hidden;
19
+ text-overflow: ellipsis;
20
+ white-space: nowrap; }
21
+ .select2-container .select2-selection--single .select2-selection__clear {
22
+ position: relative; }
23
+ .select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered {
24
+ padding-right: 8px;
25
+ padding-left: 20px; }
26
+ .select2-container .select2-selection--multiple {
27
+ box-sizing: border-box;
28
+ cursor: pointer;
29
+ display: block;
30
+ min-height: 32px;
31
+ user-select: none;
32
+ -webkit-user-select: none; }
33
+ .select2-container .select2-selection--multiple .select2-selection__rendered {
34
+ display: inline-block;
35
+ overflow: hidden;
36
+ padding-left: 8px;
37
+ text-overflow: ellipsis;
38
+ white-space: nowrap; }
39
+ .select2-container .select2-search--inline {
40
+ float: left; }
41
+ .select2-container .select2-search--inline .select2-search__field {
42
+ box-sizing: border-box;
43
+ border: none;
44
+ font-size: 100%;
45
+ margin-top: 5px;
46
+ padding: 0; }
47
+ .select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button {
48
+ -webkit-appearance: none; }
49
+
50
+ .select2-dropdown {
51
+ background-color: white;
52
+ border: 1px solid #aaa;
53
+ border-radius: 4px;
54
+ box-sizing: border-box;
55
+ display: block;
56
+ position: absolute;
57
+ left: -100000px;
58
+ width: 100%;
59
+ z-index: 1051; }
60
+
61
+ .select2-results {
62
+ display: block; }
63
+
64
+ .select2-results__options {
65
+ list-style: none;
66
+ margin: 0;
67
+ padding: 0; }
68
+
69
+ .select2-results__option {
70
+ padding: 6px;
71
+ user-select: none;
72
+ -webkit-user-select: none; }
73
+ .select2-results__option[aria-selected] {
74
+ cursor: pointer; }
75
+
76
+ .select2-container--open .select2-dropdown {
77
+ left: 0; }
78
+
79
+ .select2-container--open .select2-dropdown--above {
80
+ border-bottom: none;
81
+ border-bottom-left-radius: 0;
82
+ border-bottom-right-radius: 0; }
83
+
84
+ .select2-container--open .select2-dropdown--below {
85
+ border-top: none;
86
+ border-top-left-radius: 0;
87
+ border-top-right-radius: 0; }
88
+
89
+ .select2-search--dropdown {
90
+ display: block;
91
+ padding: 4px; }
92
+ .select2-search--dropdown .select2-search__field {
93
+ padding: 4px;
94
+ width: 100%;
95
+ box-sizing: border-box; }
96
+ .select2-search--dropdown .select2-search__field::-webkit-search-cancel-button {
97
+ -webkit-appearance: none; }
98
+ .select2-search--dropdown.select2-search--hide {
99
+ display: none; }
100
+
101
+ .select2-close-mask {
102
+ border: 0;
103
+ margin: 0;
104
+ padding: 0;
105
+ display: block;
106
+ position: fixed;
107
+ left: 0;
108
+ top: 0;
109
+ min-height: 100%;
110
+ min-width: 100%;
111
+ height: auto;
112
+ width: auto;
113
+ opacity: 0;
114
+ z-index: 99;
115
+ background-color: #fff;
116
+ filter: alpha(opacity=0); }
117
+
118
+ .select2-hidden-accessible {
119
+ border: 0 !important;
120
+ clip: rect(0 0 0 0) !important;
121
+ -webkit-clip-path: inset(50%) !important;
122
+ clip-path: inset(50%) !important;
123
+ height: 1px !important;
124
+ overflow: hidden !important;
125
+ padding: 0 !important;
126
+ position: absolute !important;
127
+ width: 1px !important;
128
+ white-space: nowrap !important; }
129
+
130
+ .select2-container--default .select2-selection--single {
131
+ background-color: #fff;
132
+ border: 1px solid #aaa;
133
+ border-radius: 4px; }
134
+ .select2-container--default .select2-selection--single .select2-selection__rendered {
135
+ color: #444;
136
+ line-height: 28px; }
137
+ .select2-container--default .select2-selection--single .select2-selection__clear {
138
+ cursor: pointer;
139
+ float: right;
140
+ font-weight: bold; }
141
+ .select2-container--default .select2-selection--single .select2-selection__placeholder {
142
+ color: #999; }
143
+ .select2-container--default .select2-selection--single .select2-selection__arrow {
144
+ height: 26px;
145
+ position: absolute;
146
+ top: 1px;
147
+ right: 1px;
148
+ width: 20px; }
149
+ .select2-container--default .select2-selection--single .select2-selection__arrow b {
150
+ border-color: #888 transparent transparent transparent;
151
+ border-style: solid;
152
+ border-width: 5px 4px 0 4px;
153
+ height: 0;
154
+ left: 50%;
155
+ margin-left: -4px;
156
+ margin-top: -2px;
157
+ position: absolute;
158
+ top: 50%;
159
+ width: 0; }
160
+
161
+ .select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear {
162
+ float: left; }
163
+
164
+ .select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow {
165
+ left: 1px;
166
+ right: auto; }
167
+
168
+ .select2-container--default.select2-container--disabled .select2-selection--single {
169
+ background-color: #eee;
170
+ cursor: default; }
171
+ .select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear {
172
+ display: none; }
173
+
174
+ .select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b {
175
+ border-color: transparent transparent #888 transparent;
176
+ border-width: 0 4px 5px 4px; }
177
+
178
+ .select2-container--default .select2-selection--multiple {
179
+ background-color: white;
180
+ border: 1px solid #aaa;
181
+ border-radius: 4px;
182
+ cursor: text; }
183
+ .select2-container--default .select2-selection--multiple .select2-selection__rendered {
184
+ box-sizing: border-box;
185
+ list-style: none;
186
+ margin: 0;
187
+ padding: 0 5px;
188
+ width: 100%; }
189
+ .select2-container--default .select2-selection--multiple .select2-selection__rendered li {
190
+ list-style: none; }
191
+ .select2-container--default .select2-selection--multiple .select2-selection__clear {
192
+ cursor: pointer;
193
+ float: right;
194
+ font-weight: bold;
195
+ margin-top: 5px;
196
+ margin-right: 10px;
197
+ padding: 1px; }
198
+ .select2-container--default .select2-selection--multiple .select2-selection__choice {
199
+ background-color: #e4e4e4;
200
+ border: 1px solid #aaa;
201
+ border-radius: 4px;
202
+ cursor: default;
203
+ float: left;
204
+ margin-right: 5px;
205
+ margin-top: 5px;
206
+ padding: 0 5px; }
207
+ .select2-container--default .select2-selection--multiple .select2-selection__choice__remove {
208
+ color: #999;
209
+ cursor: pointer;
210
+ display: inline-block;
211
+ font-weight: bold;
212
+ margin-right: 2px; }
213
+ .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover {
214
+ color: #333; }
215
+
216
+ .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline {
217
+ float: right; }
218
+
219
+ .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice {
220
+ margin-left: 5px;
221
+ margin-right: auto; }
222
+
223
+ .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove {
224
+ margin-left: 2px;
225
+ margin-right: auto; }
226
+
227
+ .select2-container--default.select2-container--focus .select2-selection--multiple {
228
+ border: solid black 1px;
229
+ outline: 0; }
230
+
231
+ .select2-container--default.select2-container--disabled .select2-selection--multiple {
232
+ background-color: #eee;
233
+ cursor: default; }
234
+
235
+ .select2-container--default.select2-container--disabled .select2-selection__choice__remove {
236
+ display: none; }
237
+
238
+ .select2-container--default.select2-container--open.select2-container--above .select2-selection--single, .select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple {
239
+ border-top-left-radius: 0;
240
+ border-top-right-radius: 0; }
241
+
242
+ .select2-container--default.select2-container--open.select2-container--below .select2-selection--single, .select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple {
243
+ border-bottom-left-radius: 0;
244
+ border-bottom-right-radius: 0; }
245
+
246
+ .select2-container--default .select2-search--dropdown .select2-search__field {
247
+ border: 1px solid #aaa; }
248
+
249
+ .select2-container--default .select2-search--inline .select2-search__field {
250
+ background: transparent;
251
+ border: none;
252
+ outline: 0;
253
+ box-shadow: none;
254
+ -webkit-appearance: textfield; }
255
+
256
+ .select2-container--default .select2-results > .select2-results__options {
257
+ max-height: 200px;
258
+ overflow-y: auto; }
259
+
260
+ .select2-container--default .select2-results__option[role=group] {
261
+ padding: 0; }
262
+
263
+ .select2-container--default .select2-results__option[aria-disabled=true] {
264
+ color: #999; }
265
+
266
+ .select2-container--default .select2-results__option[aria-selected=true] {
267
+ background-color: #ddd; }
268
+
269
+ .select2-container--default .select2-results__option .select2-results__option {
270
+ padding-left: 1em; }
271
+ .select2-container--default .select2-results__option .select2-results__option .select2-results__group {
272
+ padding-left: 0; }
273
+ .select2-container--default .select2-results__option .select2-results__option .select2-results__option {
274
+ margin-left: -1em;
275
+ padding-left: 2em; }
276
+ .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
277
+ margin-left: -2em;
278
+ padding-left: 3em; }
279
+ .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
280
+ margin-left: -3em;
281
+ padding-left: 4em; }
282
+ .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
283
+ margin-left: -4em;
284
+ padding-left: 5em; }
285
+ .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
286
+ margin-left: -5em;
287
+ padding-left: 6em; }
288
+
289
+ .select2-container--default .select2-results__option--highlighted[aria-selected] {
290
+ background-color: #5897fb;
291
+ color: white; }
292
+
293
+ .select2-container--default .select2-results__group {
294
+ cursor: default;
295
+ display: block;
296
+ padding: 6px; }
297
+
298
+ .select2-container--classic .select2-selection--single {
299
+ background-color: #f7f7f7;
300
+ border: 1px solid #aaa;
301
+ border-radius: 4px;
302
+ outline: 0;
303
+ background-image: -webkit-linear-gradient(top, white 50%, #eeeeee 100%);
304
+ background-image: -o-linear-gradient(top, white 50%, #eeeeee 100%);
305
+ background-image: linear-gradient(to bottom, white 50%, #eeeeee 100%);
306
+ background-repeat: repeat-x;
307
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); }
308
+ .select2-container--classic .select2-selection--single:focus {
309
+ border: 1px solid #5897fb; }
310
+ .select2-container--classic .select2-selection--single .select2-selection__rendered {
311
+ color: #444;
312
+ line-height: 28px; }
313
+ .select2-container--classic .select2-selection--single .select2-selection__clear {
314
+ cursor: pointer;
315
+ float: right;
316
+ font-weight: bold;
317
+ margin-right: 10px; }
318
+ .select2-container--classic .select2-selection--single .select2-selection__placeholder {
319
+ color: #999; }
320
+ .select2-container--classic .select2-selection--single .select2-selection__arrow {
321
+ background-color: #ddd;
322
+ border: none;
323
+ border-left: 1px solid #aaa;
324
+ border-top-right-radius: 4px;
325
+ border-bottom-right-radius: 4px;
326
+ height: 26px;
327
+ position: absolute;
328
+ top: 1px;
329
+ right: 1px;
330
+ width: 20px;
331
+ background-image: -webkit-linear-gradient(top, #eeeeee 50%, #cccccc 100%);
332
+ background-image: -o-linear-gradient(top, #eeeeee 50%, #cccccc 100%);
333
+ background-image: linear-gradient(to bottom, #eeeeee 50%, #cccccc 100%);
334
+ background-repeat: repeat-x;
335
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0); }
336
+ .select2-container--classic .select2-selection--single .select2-selection__arrow b {
337
+ border-color: #888 transparent transparent transparent;
338
+ border-style: solid;
339
+ border-width: 5px 4px 0 4px;
340
+ height: 0;
341
+ left: 50%;
342
+ margin-left: -4px;
343
+ margin-top: -2px;
344
+ position: absolute;
345
+ top: 50%;
346
+ width: 0; }
347
+
348
+ .select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear {
349
+ float: left; }
350
+
351
+ .select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow {
352
+ border: none;
353
+ border-right: 1px solid #aaa;
354
+ border-radius: 0;
355
+ border-top-left-radius: 4px;
356
+ border-bottom-left-radius: 4px;
357
+ left: 1px;
358
+ right: auto; }
359
+
360
+ .select2-container--classic.select2-container--open .select2-selection--single {
361
+ border: 1px solid #5897fb; }
362
+ .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow {
363
+ background: transparent;
364
+ border: none; }
365
+ .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b {
366
+ border-color: transparent transparent #888 transparent;
367
+ border-width: 0 4px 5px 4px; }
368
+
369
+ .select2-container--classic.select2-container--open.select2-container--above .select2-selection--single {
370
+ border-top: none;
371
+ border-top-left-radius: 0;
372
+ border-top-right-radius: 0;
373
+ background-image: -webkit-linear-gradient(top, white 0%, #eeeeee 50%);
374
+ background-image: -o-linear-gradient(top, white 0%, #eeeeee 50%);
375
+ background-image: linear-gradient(to bottom, white 0%, #eeeeee 50%);
376
+ background-repeat: repeat-x;
377
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); }
378
+
379
+ .select2-container--classic.select2-container--open.select2-container--below .select2-selection--single {
380
+ border-bottom: none;
381
+ border-bottom-left-radius: 0;
382
+ border-bottom-right-radius: 0;
383
+ background-image: -webkit-linear-gradient(top, #eeeeee 50%, white 100%);
384
+ background-image: -o-linear-gradient(top, #eeeeee 50%, white 100%);
385
+ background-image: linear-gradient(to bottom, #eeeeee 50%, white 100%);
386
+ background-repeat: repeat-x;
387
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0); }
388
+
389
+ .select2-container--classic .select2-selection--multiple {
390
+ background-color: white;
391
+ border: 1px solid #aaa;
392
+ border-radius: 4px;
393
+ cursor: text;
394
+ outline: 0; }
395
+ .select2-container--classic .select2-selection--multiple:focus {
396
+ border: 1px solid #5897fb; }
397
+ .select2-container--classic .select2-selection--multiple .select2-selection__rendered {
398
+ list-style: none;
399
+ margin: 0;
400
+ padding: 0 5px; }
401
+ .select2-container--classic .select2-selection--multiple .select2-selection__clear {
402
+ display: none; }
403
+ .select2-container--classic .select2-selection--multiple .select2-selection__choice {
404
+ background-color: #e4e4e4;
405
+ border: 1px solid #aaa;
406
+ border-radius: 4px;
407
+ cursor: default;
408
+ float: left;
409
+ margin-right: 5px;
410
+ margin-top: 5px;
411
+ padding: 0 5px; }
412
+ .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove {
413
+ color: #888;
414
+ cursor: pointer;
415
+ display: inline-block;
416
+ font-weight: bold;
417
+ margin-right: 2px; }
418
+ .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover {
419
+ color: #555; }
420
+
421
+ .select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice {
422
+ float: right;
423
+ margin-left: 5px;
424
+ margin-right: auto; }
425
+
426
+ .select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove {
427
+ margin-left: 2px;
428
+ margin-right: auto; }
429
+
430
+ .select2-container--classic.select2-container--open .select2-selection--multiple {
431
+ border: 1px solid #5897fb; }
432
+
433
+ .select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple {
434
+ border-top: none;
435
+ border-top-left-radius: 0;
436
+ border-top-right-radius: 0; }
437
+
438
+ .select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple {
439
+ border-bottom: none;
440
+ border-bottom-left-radius: 0;
441
+ border-bottom-right-radius: 0; }
442
+
443
+ .select2-container--classic .select2-search--dropdown .select2-search__field {
444
+ border: 1px solid #aaa;
445
+ outline: 0; }
446
+
447
+ .select2-container--classic .select2-search--inline .select2-search__field {
448
+ outline: 0;
449
+ box-shadow: none; }
450
+
451
+ .select2-container--classic .select2-dropdown {
452
+ background-color: white;
453
+ border: 1px solid transparent; }
454
+
455
+ .select2-container--classic .select2-dropdown--above {
456
+ border-bottom: none; }
457
+
458
+ .select2-container--classic .select2-dropdown--below {
459
+ border-top: none; }
460
+
461
+ .select2-container--classic .select2-results > .select2-results__options {
462
+ max-height: 200px;
463
+ overflow-y: auto; }
464
+
465
+ .select2-container--classic .select2-results__option[role=group] {
466
+ padding: 0; }
467
+
468
+ .select2-container--classic .select2-results__option[aria-disabled=true] {
469
+ color: grey; }
470
+
471
+ .select2-container--classic .select2-results__option--highlighted[aria-selected] {
472
+ background-color: #3875d7;
473
+ color: white; }
474
+
475
+ .select2-container--classic .select2-results__group {
476
+ cursor: default;
477
+ display: block;
478
+ padding: 6px; }
479
+
480
+ .select2-container--classic.select2-container--open .select2-dropdown {
481
+ border-color: #5897fb; }
js/vendor/select2-4.0.13/dist/css/select2.min.css ADDED
@@ -0,0 +1 @@
 
1
+ .select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:white;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;-webkit-clip-path:inset(50%) !important;clip-path:inset(50%) !important;height:1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important;white-space:nowrap !important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px;padding:1px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid black 1px;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:white}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, #fff 50%, #eee 100%);background-image:-o-linear-gradient(top, #fff 50%, #eee 100%);background-image:linear-gradient(to bottom, #fff 50%, #eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eee 50%, #ccc 100%);background-image:-o-linear-gradient(top, #eee 50%, #ccc 100%);background-image:linear-gradient(to bottom, #eee 50%, #ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, #fff 0%, #eee 50%);background-image:-o-linear-gradient(top, #fff 0%, #eee 50%);background-image:linear-gradient(to bottom, #fff 0%, #eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eee 50%, #fff 100%);background-image:-o-linear-gradient(top, #eee 50%, #fff 100%);background-image:linear-gradient(to bottom, #eee 50%, #fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{float:right;margin-left:5px;margin-right:auto}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb}
js/vendor/select2-4.0.13/dist/js/i18n/af.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/af",[],function(){return{errorLoading:function(){return"Die resultate kon nie gelaai word nie."},inputTooLong:function(e){var n=e.input.length-e.maximum,r="Verwyders asseblief "+n+" character";return 1!=n&&(r+="s"),r},inputTooShort:function(e){return"Voer asseblief "+(e.minimum-e.input.length)+" of meer karakters"},loadingMore:function(){return"Meer resultate word gelaai…"},maximumSelected:function(e){var n="Kies asseblief net "+e.maximum+" item";return 1!=e.maximum&&(n+="s"),n},noResults:function(){return"Geen resultate gevind"},searching:function(){return"Besig…"},removeAllItems:function(){return"Verwyder alle items"}}}),e.define,e.require}();
js/vendor/select2-4.0.13/dist/js/i18n/ar.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ar",[],function(){return{errorLoading:function(){return"لا يمكن تحميل النتائج"},inputTooLong:function(n){return"الرجاء حذف "+(n.input.length-n.maximum)+" عناصر"},inputTooShort:function(n){return"الرجاء إضافة "+(n.minimum-n.input.length)+" عناصر"},loadingMore:function(){return"جاري تحميل نتائج إضافية..."},maximumSelected:function(n){return"تستطيع إختيار "+n.maximum+" بنود فقط"},noResults:function(){return"لم يتم العثور على أي نتائج"},searching:function(){return"جاري البحث…"},removeAllItems:function(){return"قم بإزالة كل العناصر"}}}),n.define,n.require}();
js/vendor/select2-4.0.13/dist/js/i18n/az.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/az",[],function(){return{inputTooLong:function(n){return n.input.length-n.maximum+" simvol silin"},inputTooShort:function(n){return n.minimum-n.input.length+" simvol daxil edin"},loadingMore:function(){return"Daha çox nəticə yüklənir…"},maximumSelected:function(n){return"Sadəcə "+n.maximum+" element seçə bilərsiniz"},noResults:function(){return"Nəticə tapılmadı"},searching:function(){return"Axtarılır…"},removeAllItems:function(){return"Bütün elementləri sil"}}}),n.define,n.require}();
js/vendor/select2-4.0.13/dist/js/i18n/bg.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/bg",[],function(){return{inputTooLong:function(n){var e=n.input.length-n.maximum,u="Моля въведете с "+e+" по-малко символ";return e>1&&(u+="a"),u},inputTooShort:function(n){var e=n.minimum-n.input.length,u="Моля въведете още "+e+" символ";return e>1&&(u+="a"),u},loadingMore:function(){return"Зареждат се още…"},maximumSelected:function(n){var e="Можете да направите до "+n.maximum+" ";return n.maximum>1?e+="избора":e+="избор",e},noResults:function(){return"Няма намерени съвпадения"},searching:function(){return"Търсене…"},removeAllItems:function(){return"Премахнете всички елементи"}}}),n.define,n.require}();
js/vendor/select2-4.0.13/dist/js/i18n/bn.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/bn",[],function(){return{errorLoading:function(){return"ফলাফলগুলি লোড করা যায়নি।"},inputTooLong:function(n){var e=n.input.length-n.maximum,u="অনুগ্রহ করে "+e+" টি অক্ষর মুছে দিন।";return 1!=e&&(u="অনুগ্রহ করে "+e+" টি অক্ষর মুছে দিন।"),u},inputTooShort:function(n){return n.minimum-n.input.length+" টি অক্ষর অথবা অধিক অক্ষর লিখুন।"},loadingMore:function(){return"আরো ফলাফল লোড হচ্ছে ..."},maximumSelected:function(n){var e=n.maximum+" টি আইটেম নির্বাচন করতে পারবেন।";return 1!=n.maximum&&(e=n.maximum+" টি আইটেম নির্বাচন করতে পারবেন।"),e},noResults:function(){return"কোন ফলাফল পাওয়া যায়নি।"},searching:function(){return"অনুসন্ধান করা হচ্ছে ..."}}}),n.define,n.require}();
js/vendor/select2-4.0.13/dist/js/i18n/bs.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/bs",[],function(){function e(e,n,r,t){return e%10==1&&e%100!=11?n:e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?r:t}return{errorLoading:function(){return"Preuzimanje nije uspijelo."},inputTooLong:function(n){var r=n.input.length-n.maximum,t="Obrišite "+r+" simbol";return t+=e(r,"","a","a")},inputTooShort:function(n){var r=n.minimum-n.input.length,t="Ukucajte bar još "+r+" simbol";return t+=e(r,"","a","a")},loadingMore:function(){return"Preuzimanje još rezultata…"},maximumSelected:function(n){var r="Možete izabrati samo "+n.maximum+" stavk";return r+=e(n.maximum,"u","e","i")},noResults:function(){return"Ništa nije pronađeno"},searching:function(){return"Pretraga…"},removeAllItems:function(){return"Uklonite sve stavke"}}}),e.define,e.require}();
js/vendor/select2-4.0.13/dist/js/i18n/ca.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/ca",[],function(){return{errorLoading:function(){return"La càrrega ha fallat"},inputTooLong:function(e){var n=e.input.length-e.maximum,r="Si us plau, elimina "+n+" car";return r+=1==n?"àcter":"àcters"},inputTooShort:function(e){var n=e.minimum-e.input.length,r="Si us plau, introdueix "+n+" car";return r+=1==n?"àcter":"àcters"},loadingMore:function(){return"Carregant més resultats…"},maximumSelected:function(e){var n="Només es pot seleccionar "+e.maximum+" element";return 1!=e.maximum&&(n+="s"),n},noResults:function(){return"No s'han trobat resultats"},searching:function(){return"Cercant…"},removeAllItems:function(){return"Treu tots els elements"}}}),e.define,e.require}();
js/vendor/select2-4.0.13/dist/js/i18n/cs.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/cs",[],function(){function e(e,n){switch(e){case 2:return n?"dva":"dvě";case 3:return"tři";case 4:return"čtyři"}return""}return{errorLoading:function(){return"Výsledky nemohly být načteny."},inputTooLong:function(n){var t=n.input.length-n.maximum;return 1==t?"Prosím, zadejte o jeden znak méně.":t<=4?"Prosím, zadejte o "+e(t,!0)+" znaky méně.":"Prosím, zadejte o "+t+" znaků méně."},inputTooShort:function(n){var t=n.minimum-n.input.length;return 1==t?"Prosím, zadejte ještě jeden znak.":t<=4?"Prosím, zadejte ještě další "+e(t,!0)+" znaky.":"Prosím, zadejte ještě dalších "+t+" znaků."},loadingMore:function(){return"Načítají se další výsledky…"},maximumSelected:function(n){var t=n.maximum;return 1==t?"Můžete zvolit jen jednu položku.":t<=4?"Můžete zvolit maximálně "+e(t,!1)+" položky.":"Můžete zvolit maximálně "+t+" položek."},noResults:function(){return"Nenalezeny žádné položky."},searching:function(){return"Vyhledávání…"},removeAllItems:function(){return"Odstraňte všechny položky"}}}),e.define,e.require}();
js/vendor/select2-4.0.13/dist/js/i18n/da.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/da",[],function(){return{errorLoading:function(){return"Resultaterne kunne ikke indlæses."},inputTooLong:function(e){return"Angiv venligst "+(e.input.length-e.maximum)+" tegn mindre"},inputTooShort:function(e){return"Angiv venligst "+(e.minimum-e.input.length)+" tegn mere"},loadingMore:function(){return"Indlæser flere resultater…"},maximumSelected:function(e){var n="Du kan kun vælge "+e.maximum+" emne";return 1!=e.maximum&&(n+="r"),n},noResults:function(){return"Ingen resultater fundet"},searching:function(){return"Søger…"},removeAllItems:function(){return"Fjern alle elementer"}}}),e.define,e.require}();
js/vendor/select2-4.0.13/dist/js/i18n/de.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/de",[],function(){return{errorLoading:function(){return"Die Ergebnisse konnten nicht geladen werden."},inputTooLong:function(e){return"Bitte "+(e.input.length-e.maximum)+" Zeichen weniger eingeben"},inputTooShort:function(e){return"Bitte "+(e.minimum-e.input.length)+" Zeichen mehr eingeben"},loadingMore:function(){return"Lade mehr Ergebnisse…"},maximumSelected:function(e){var n="Sie können nur "+e.maximum+" Element";return 1!=e.maximum&&(n+="e"),n+=" auswählen"},noResults:function(){return"Keine Übereinstimmungen gefunden"},searching:function(){return"Suche…"},removeAllItems:function(){return"Entferne alle Elemente"}}}),e.define,e.require}();
js/vendor/select2-4.0.13/dist/js/i18n/dsb.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/dsb",[],function(){var n=["znamuško","znamušce","znamuška","znamuškow"],e=["zapisk","zapiska","zapiski","zapiskow"],u=function(n,e){return 1===n?e[0]:2===n?e[1]:n>2&&n<=4?e[2]:n>=5?e[3]:void 0};return{errorLoading:function(){return"Wuslědki njejsu se dali zacytaś."},inputTooLong:function(e){var a=e.input.length-e.maximum;return"Pšosym lašuj "+a+" "+u(a,n)},inputTooShort:function(e){var a=e.minimum-e.input.length;return"Pšosym zapódaj nanejmjenjej "+a+" "+u(a,n)},loadingMore:function(){return"Dalšne wuslědki se zacytaju…"},maximumSelected:function(n){return"Móžoš jano "+n.maximum+" "+u(n.maximum,e)+"wubraś."},noResults:function(){return"Žedne wuslědki namakane"},searching:function(){return"Pyta se…"},removeAllItems:function(){return"Remove all items"}}}),n.define,n.require}();
js/vendor/select2-4.0.13/dist/js/i18n/el.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/el",[],function(){return{errorLoading:function(){return"Τα αποτελέσματα δεν μπόρεσαν να φορτώσουν."},inputTooLong:function(n){var e=n.input.length-n.maximum,u="Παρακαλώ διαγράψτε "+e+" χαρακτήρ";return 1==e&&(u+="α"),1!=e&&(u+="ες"),u},inputTooShort:function(n){return"Παρακαλώ συμπληρώστε "+(n.minimum-n.input.length)+" ή περισσότερους χαρακτήρες"},loadingMore:function(){return"Φόρτωση περισσότερων αποτελεσμάτων…"},maximumSelected:function(n){var e="Μπορείτε να επιλέξετε μόνο "+n.maximum+" επιλογ";return 1==n.maximum&&(e+="ή"),1!=n.maximum&&(e+="ές"),e},noResults:function(){return"Δεν βρέθηκαν αποτελέσματα"},searching:function(){return"Αναζήτηση…"},removeAllItems:function(){return"Καταργήστε όλα τα στοιχεία"}}}),n.define,n.require}();
js/vendor/select2-4.0.13/dist/js/i18n/en.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/en",[],function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(e){var n=e.input.length-e.maximum,r="Please delete "+n+" character";return 1!=n&&(r+="s"),r},inputTooShort:function(e){return"Please enter "+(e.minimum-e.input.length)+" or more characters"},loadingMore:function(){return"Loading more results…"},maximumSelected:function(e){var n="You can only select "+e.maximum+" item";return 1!=e.maximum&&(n+="s"),n},noResults:function(){return"No results found"},searching:function(){return"Searching…"},removeAllItems:function(){return"Remove all items"}}}),e.define,e.require}();
js/vendor/select2-4.0.13/dist/js/i18n/es.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/es",[],function(){return{errorLoading:function(){return"No se pudieron cargar los resultados"},inputTooLong:function(e){var n=e.input.length-e.maximum,r="Por favor, elimine "+n+" car";return r+=1==n?"ácter":"acteres"},inputTooShort:function(e){var n=e.minimum-e.input.length,r="Por favor, introduzca "+n+" car";return r+=1==n?"ácter":"acteres"},loadingMore:function(){return"Cargando más resultados…"},maximumSelected:function(e){var n="Sólo puede seleccionar "+e.maximum+" elemento";return 1!=e.maximum&&(n+="s"),n},noResults:function(){return"No se encontraron resultados"},searching:function(){return"Buscando…"},removeAllItems:function(){return"Eliminar todos los elementos"}}}),e.define,e.require}();
js/vendor/select2-4.0.13/dist/js/i18n/et.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/et",[],function(){return{inputTooLong:function(e){var n=e.input.length-e.maximum,t="Sisesta "+n+" täht";return 1!=n&&(t+="e"),t+=" vähem"},inputTooShort:function(e){var n=e.minimum-e.input.length,t="Sisesta "+n+" täht";return 1!=n&&(t+="e"),t+=" rohkem"},loadingMore:function(){return"Laen tulemusi…"},maximumSelected:function(e){var n="Saad vaid "+e.maximum+" tulemus";return 1==e.maximum?n+="e":n+="t",n+=" valida"},noResults:function(){return"Tulemused puuduvad"},searching:function(){return"Otsin…"},removeAllItems:function(){return"Eemalda kõik esemed"}}}),e.define,e.require}();
js/vendor/select2-4.0.13/dist/js/i18n/eu.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/eu",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Idatzi ";return n+=1==t?"karaktere bat":t+" karaktere",n+=" gutxiago"},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Idatzi ";return n+=1==t?"karaktere bat":t+" karaktere",n+=" gehiago"},loadingMore:function(){return"Emaitza gehiago kargatzen…"},maximumSelected:function(e){return 1===e.maximum?"Elementu bakarra hauta dezakezu":e.maximum+" elementu hauta ditzakezu soilik"},noResults:function(){return"Ez da bat datorrenik aurkitu"},searching:function(){return"Bilatzen…"},removeAllItems:function(){return"Kendu elementu guztiak"}}}),e.define,e.require}();
js/vendor/select2-4.0.13/dist/js/i18n/fa.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/fa",[],function(){return{errorLoading:function(){return"امکان بارگذاری نتایج وجود ندارد."},inputTooLong:function(n){return"لطفاً "+(n.input.length-n.maximum)+" کاراکتر را حذف نمایید"},inputTooShort:function(n){return"لطفاً تعداد "+(n.minimum-n.input.length)+" کاراکتر یا بیشتر وارد نمایید"},loadingMore:function(){return"در حال بارگذاری نتایج بیشتر..."},maximumSelected:function(n){return"شما تنها می‌توانید "+n.maximum+" آیتم را انتخاب نمایید"},noResults:function(){return"هیچ نتیجه‌ای یافت نشد"},searching:function(){return"در حال جستجو..."},removeAllItems:function(){return"همه موارد را حذف کنید"}}}),n.define,n.require}();
js/vendor/select2-4.0.13/dist/js/i18n/fi.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/fi",[],function(){return{errorLoading:function(){return"Tuloksia ei saatu ladattua."},inputTooLong:function(n){return"Ole hyvä ja anna "+(n.input.length-n.maximum)+" merkkiä vähemmän"},inputTooShort:function(n){return"Ole hyvä ja anna "+(n.minimum-n.input.length)+" merkkiä lisää"},loadingMore:function(){return"Ladataan lisää tuloksia…"},maximumSelected:function(n){return"Voit valita ainoastaan "+n.maximum+" kpl"},noResults:function(){return"Ei tuloksia"},searching:function(){return"Haetaan…"},removeAllItems:function(){return"Poista kaikki kohteet"}}}),n.define,n.require}();
js/vendor/select2-4.0.13/dist/js/i18n/fr.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/fr",[],function(){return{errorLoading:function(){return"Les résultats ne peuvent pas être chargés."},inputTooLong:function(e){var n=e.input.length-e.maximum;return"Supprimez "+n+" caractère"+(n>1?"s":"")},inputTooShort:function(e){var n=e.minimum-e.input.length;return"Saisissez au moins "+n+" caractère"+(n>1?"s":"")},loadingMore:function(){return"Chargement de résultats supplémentaires…"},maximumSelected:function(e){return"Vous pouvez seulement sélectionner "+e.maximum+" élément"+(e.maximum>1?"s":"")},noResults:function(){return"Aucun résultat trouvé"},searching:function(){return"Recherche en cours…"},removeAllItems:function(){return"Supprimer tous les éléments"}}}),e.define,e.require}();
js/vendor/select2-4.0.13/dist/js/i18n/gl.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/gl",[],function(){return{errorLoading:function(){return"Non foi posíbel cargar os resultados."},inputTooLong:function(e){var n=e.input.length-e.maximum;return 1===n?"Elimine un carácter":"Elimine "+n+" caracteres"},inputTooShort:function(e){var n=e.minimum-e.input.length;return 1===n?"Engada un carácter":"Engada "+n+" caracteres"},loadingMore:function(){return"Cargando máis resultados…"},maximumSelected:function(e){return 1===e.maximum?"Só pode seleccionar un elemento":"Só pode seleccionar "+e.maximum+" elementos"},noResults:function(){return"Non se atoparon resultados"},searching:function(){return"Buscando…"},removeAllItems:function(){return"Elimina todos os elementos"}}}),e.define,e.require}();
js/vendor/select2-4.0.13/dist/js/i18n/he.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/he",[],function(){return{errorLoading:function(){return"שגיאה בטעינת התוצאות"},inputTooLong:function(n){var e=n.input.length-n.maximum,r="נא למחוק ";return r+=1===e?"תו אחד":e+" תווים"},inputTooShort:function(n){var e=n.minimum-n.input.length,r="נא להכניס ";return r+=1===e?"תו אחד":e+" תווים",r+=" או יותר"},loadingMore:function(){return"טוען תוצאות נוספות…"},maximumSelected:function(n){var e="באפשרותך לבחור עד ";return 1===n.maximum?e+="פריט אחד":e+=n.maximum+" פריטים",e},noResults:function(){return"לא נמצאו תוצאות"},searching:function(){return"מחפש…"},removeAllItems:function(){return"הסר את כל הפריטים"}}}),n.define,n.require}();
js/vendor/select2-4.0.13/dist/js/i18n/hi.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/hi",[],function(){return{errorLoading:function(){return"परिणामों को लोड नहीं किया जा सका।"},inputTooLong:function(n){var e=n.input.length-n.maximum,r=e+" अक्षर को हटा दें";return e>1&&(r=e+" अक्षरों को हटा दें "),r},inputTooShort:function(n){return"कृपया "+(n.minimum-n.input.length)+" या अधिक अक्षर दर्ज करें"},loadingMore:function(){return"अधिक परिणाम लोड हो रहे है..."},maximumSelected:function(n){return"आप केवल "+n.maximum+" आइटम का चयन कर सकते हैं"},noResults:function(){return"कोई परिणाम नहीं मिला"},searching:function(){return"खोज रहा है..."},removeAllItems:function(){return"सभी वस्तुओं को हटा दें"}}}),n.define,n.require}();
js/vendor/select2-4.0.13/dist/js/i18n/hr.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/hr",[],function(){function n(n){var e=" "+n+" znak";return n%10<5&&n%10>0&&(n%100<5||n%100>19)?n%10>1&&(e+="a"):e+="ova",e}return{errorLoading:function(){return"Preuzimanje nije uspjelo."},inputTooLong:function(e){return"Unesite "+n(e.input.length-e.maximum)},inputTooShort:function(e){return"Unesite još "+n(e.minimum-e.input.length)},loadingMore:function(){return"Učitavanje rezultata…"},maximumSelected:function(n){return"Maksimalan broj odabranih stavki je "+n.maximum},noResults:function(){return"Nema rezultata"},searching:function(){return"Pretraga…"},removeAllItems:function(){return"Ukloni sve stavke"}}}),n.define,n.require}();
js/vendor/select2-4.0.13/dist/js/i18n/hsb.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/hsb",[],function(){var n=["znamješko","znamješce","znamješka","znamješkow"],e=["zapisk","zapiskaj","zapiski","zapiskow"],u=function(n,e){return 1===n?e[0]:2===n?e[1]:n>2&&n<=4?e[2]:n>=5?e[3]:void 0};return{errorLoading:function(){return"Wuslědki njedachu so začitać."},inputTooLong:function(e){var a=e.input.length-e.maximum;return"Prošu zhašej "+a+" "+u(a,n)},inputTooShort:function(e){var a=e.minimum-e.input.length;return"Prošu zapodaj znajmjeńša "+a+" "+u(a,n)},loadingMore:function(){return"Dalše wuslědki so začitaja…"},maximumSelected:function(n){return"Móžeš jenož "+n.maximum+" "+u(n.maximum,e)+"wubrać"},noResults:function(){return"Žane wuslědki namakane"},searching:function(){return"Pyta so…"},removeAllItems:function(){return"Remove all items"}}}),n.define,n.require}();
js/vendor/select2-4.0.13/dist/js/i18n/hu.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/hu",[],function(){return{errorLoading:function(){return"Az eredmények betöltése nem sikerült."},inputTooLong:function(e){return"Túl hosszú. "+(e.input.length-e.maximum)+" karakterrel több, mint kellene."},inputTooShort:function(e){return"Túl rövid. Még "+(e.minimum-e.input.length)+" karakter hiányzik."},loadingMore:function(){return"Töltés…"},maximumSelected:function(e){return"Csak "+e.maximum+" elemet lehet kiválasztani."},noResults:function(){return"Nincs találat."},searching:function(){return"Keresés…"},removeAllItems:function(){return"Távolítson el minden elemet"}}}),e.define,e.require}();
js/vendor/select2-4.0.13/dist/js/i18n/hy.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/hy",[],function(){return{errorLoading:function(){return"Արդյունքները հնարավոր չէ բեռնել։"},inputTooLong:function(n){return"Խնդրում ենք հեռացնել "+(n.input.length-n.maximum)+" նշան"},inputTooShort:function(n){return"Խնդրում ենք մուտքագրել "+(n.minimum-n.input.length)+" կամ ավել նշաններ"},loadingMore:function(){return"Բեռնվում են նոր արդյունքներ․․․"},maximumSelected:function(n){return"Դուք կարող եք ընտրել առավելագույնը "+n.maximum+" կետ"},noResults:function(){return"Արդյունքներ չեն գտնվել"},searching:function(){return"Որոնում․․․"},removeAllItems:function(){return"Հեռացնել բոլոր տարրերը"}}}),n.define,n.require}();
js/vendor/select2-4.0.13/dist/js/i18n/id.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/id",[],function(){return{errorLoading:function(){return"Data tidak boleh diambil."},inputTooLong:function(n){return"Hapuskan "+(n.input.length-n.maximum)+" huruf"},inputTooShort:function(n){return"Masukkan "+(n.minimum-n.input.length)+" huruf lagi"},loadingMore:function(){return"Mengambil data…"},maximumSelected:function(n){return"Anda hanya dapat memilih "+n.maximum+" pilihan"},noResults:function(){return"Tidak ada data yang sesuai"},searching:function(){return"Mencari…"},removeAllItems:function(){return"Hapus semua item"}}}),n.define,n.require}();
js/vendor/select2-4.0.13/dist/js/i18n/is.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/is",[],function(){return{inputTooLong:function(n){var t=n.input.length-n.maximum,e="Vinsamlegast styttið texta um "+t+" staf";return t<=1?e:e+"i"},inputTooShort:function(n){var t=n.minimum-n.input.length,e="Vinsamlegast skrifið "+t+" staf";return t>1&&(e+="i"),e+=" í viðbót"},loadingMore:function(){return"Sæki fleiri niðurstöður…"},maximumSelected:function(n){return"Þú getur aðeins valið "+n.maximum+" atriði"},noResults:function(){return"Ekkert fannst"},searching:function(){return"Leita…"},removeAllItems:function(){return"Fjarlægðu öll atriði"}}}),n.define,n.require}();
js/vendor/select2-4.0.13/dist/js/i18n/it.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/it",[],function(){return{errorLoading:function(){return"I risultati non possono essere caricati."},inputTooLong:function(e){var n=e.input.length-e.maximum,t="Per favore cancella "+n+" caratter";return t+=1!==n?"i":"e"},inputTooShort:function(e){return"Per favore inserisci "+(e.minimum-e.input.length)+" o più caratteri"},loadingMore:function(){return"Caricando più risultati…"},maximumSelected:function(e){var n="Puoi selezionare solo "+e.maximum+" element";return 1!==e.maximum?n+="i":n+="o",n},noResults:function(){return"Nessun risultato trovato"},searching:function(){return"Sto cercando…"},removeAllItems:function(){return"Rimuovi tutti gli oggetti"}}}),e.define,e.require}();
js/vendor/select2-4.0.13/dist/js/i18n/ja.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ja",[],function(){return{errorLoading:function(){return"結果が読み込まれませんでした"},inputTooLong:function(n){return n.input.length-n.maximum+" 文字を削除してください"},inputTooShort:function(n){return"少なくとも "+(n.minimum-n.input.length)+" 文字を入力してください"},loadingMore:function(){return"読み込み中…"},maximumSelected:function(n){return n.maximum+" 件しか選択できません"},noResults:function(){return"対象が見つかりません"},searching:function(){return"検索しています…"},removeAllItems:function(){return"すべてのアイテムを削除"}}}),n.define,n.require}();
js/vendor/select2-4.0.13/dist/js/i18n/ka.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ka",[],function(){return{errorLoading:function(){return"მონაცემების ჩატვირთვა შეუძლებელია."},inputTooLong:function(n){return"გთხოვთ აკრიფეთ "+(n.input.length-n.maximum)+" სიმბოლოთი ნაკლები"},inputTooShort:function(n){return"გთხოვთ აკრიფეთ "+(n.minimum-n.input.length)+" სიმბოლო ან მეტი"},loadingMore:function(){return"მონაცემების ჩატვირთვა…"},maximumSelected:function(n){return"თქვენ შეგიძლიათ აირჩიოთ არაუმეტეს "+n.maximum+" ელემენტი"},noResults:function(){return"რეზულტატი არ მოიძებნა"},searching:function(){return"ძიება…"},removeAllItems:function(){return"ამოიღე ყველა ელემენტი"}}}),n.define,n.require}();
js/vendor/select2-4.0.13/dist/js/i18n/km.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/km",[],function(){return{errorLoading:function(){return"មិនអាចទាញយកទិន្នន័យ"},inputTooLong:function(n){return"សូមលុបចេញ "+(n.input.length-n.maximum)+" អក្សរ"},inputTooShort:function(n){return"សូមបញ្ចូល"+(n.minimum-n.input.length)+" អក្សរ រឺ ច្រើនជាងនេះ"},loadingMore:function(){return"កំពុងទាញយកទិន្នន័យបន្ថែម..."},maximumSelected:function(n){return"អ្នកអាចជ្រើសរើសបានតែ "+n.maximum+" ជម្រើសប៉ុណ្ណោះ"},noResults:function(){return"មិនមានលទ្ធផល"},searching:function(){return"កំពុងស្វែងរក..."},removeAllItems:function(){return"លុបធាតុទាំងអស់"}}}),n.define,n.require}();
js/vendor/select2-4.0.13/dist/js/i18n/ko.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ko",[],function(){return{errorLoading:function(){return"결과를 불러올 수 없습니다."},inputTooLong:function(n){return"너무 깁니다. "+(n.input.length-n.maximum)+" 글자 지워주세요."},inputTooShort:function(n){return"너무 짧습니다. "+(n.minimum-n.input.length)+" 글자 더 입력해주세요."},loadingMore:function(){return"불러오는 중…"},maximumSelected:function(n){return"최대 "+n.maximum+"개까지만 선택 가능합니다."},noResults:function(){return"결과가 없습니다."},searching:function(){return"검색 중…"},removeAllItems:function(){return"모든 항목 삭제"}}}),n.define,n.require}();
js/vendor/select2-4.0.13/dist/js/i18n/lt.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/lt",[],function(){function n(n,e,i,t){return n%10==1&&(n%100<11||n%100>19)?e:n%10>=2&&n%10<=9&&(n%100<11||n%100>19)?i:t}return{inputTooLong:function(e){var i=e.input.length-e.maximum,t="Pašalinkite "+i+" simbol";return t+=n(i,"į","ius","ių")},inputTooShort:function(e){var i=e.minimum-e.input.length,t="Įrašykite dar "+i+" simbol";return t+=n(i,"į","ius","ių")},loadingMore:function(){return"Kraunama daugiau rezultatų…"},maximumSelected:function(e){var i="Jūs galite pasirinkti tik "+e.maximum+" element";return i+=n(e.maximum,"ą","us","ų")},noResults:function(){return"Atitikmenų nerasta"},searching:function(){return"Ieškoma…"},removeAllItems:function(){return"Pašalinti visus elementus"}}}),n.define,n.require}();
js/vendor/select2-4.0.13/dist/js/i18n/lv.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/lv",[],function(){function e(e,n,u,i){return 11===e?n:e%10==1?u:i}return{inputTooLong:function(n){var u=n.input.length-n.maximum,i="Lūdzu ievadiet par "+u;return(i+=" simbol"+e(u,"iem","u","iem"))+" mazāk"},inputTooShort:function(n){var u=n.minimum-n.input.length,i="Lūdzu ievadiet vēl "+u;return i+=" simbol"+e(u,"us","u","us")},loadingMore:function(){return"Datu ielāde…"},maximumSelected:function(n){var u="Jūs varat izvēlēties ne vairāk kā "+n.maximum;return u+=" element"+e(n.maximum,"us","u","us")},noResults:function(){return"Sakritību nav"},searching:function(){return"Meklēšana…"},removeAllItems:function(){return"Noņemt visus vienumus"}}}),e.define,e.require}();
js/vendor/select2-4.0.13/dist/js/i18n/mk.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/mk",[],function(){return{inputTooLong:function(n){var e=(n.input.length,n.maximum,"Ве молиме внесете "+n.maximum+" помалку карактер");return 1!==n.maximum&&(e+="и"),e},inputTooShort:function(n){var e=(n.minimum,n.input.length,"Ве молиме внесете уште "+n.maximum+" карактер");return 1!==n.maximum&&(e+="и"),e},loadingMore:function(){return"Вчитување резултати…"},maximumSelected:function(n){var e="Можете да изберете само "+n.maximum+" ставк";return 1===n.maximum?e+="а":e+="и",e},noResults:function(){return"Нема пронајдено совпаѓања"},searching:function(){return"Пребарување…"},removeAllItems:function(){return"Отстрани ги сите предмети"}}}),n.define,n.require}();
js/vendor/select2-4.0.13/dist/js/i18n/ms.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ms",[],function(){return{errorLoading:function(){return"Keputusan tidak berjaya dimuatkan."},inputTooLong:function(n){return"Sila hapuskan "+(n.input.length-n.maximum)+" aksara"},inputTooShort:function(n){return"Sila masukkan "+(n.minimum-n.input.length)+" atau lebih aksara"},loadingMore:function(){return"Sedang memuatkan keputusan…"},maximumSelected:function(n){return"Anda hanya boleh memilih "+n.maximum+" pilihan"},noResults:function(){return"Tiada padanan yang ditemui"},searching:function(){return"Mencari…"},removeAllItems:function(){return"Keluarkan semua item"}}}),n.define,n.require}();
js/vendor/select2-4.0.13/dist/js/i18n/nb.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/nb",[],function(){return{errorLoading:function(){return"Kunne ikke hente resultater."},inputTooLong:function(e){return"Vennligst fjern "+(e.input.length-e.maximum)+" tegn"},inputTooShort:function(e){return"Vennligst skriv inn "+(e.minimum-e.input.length)+" tegn til"},loadingMore:function(){return"Laster flere resultater…"},maximumSelected:function(e){return"Du kan velge maks "+e.maximum+" elementer"},noResults:function(){return"Ingen treff"},searching:function(){return"Søker…"},removeAllItems:function(){return"Fjern alle elementer"}}}),e.define,e.require}();
js/vendor/select2-4.0.13/dist/js/i18n/ne.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ne",[],function(){return{errorLoading:function(){return"नतिजाहरु देखाउन सकिएन।"},inputTooLong:function(n){var e=n.input.length-n.maximum,u="कृपया "+e+" अक्षर मेटाउनुहोस्।";return 1!=e&&(u+="कृपया "+e+" अक्षरहरु मेटाउनुहोस्।"),u},inputTooShort:function(n){return"कृपया बाँकी रहेका "+(n.minimum-n.input.length)+" वा अरु धेरै अक्षरहरु भर्नुहोस्।"},loadingMore:function(){return"अरु नतिजाहरु भरिँदैछन् …"},maximumSelected:function(n){var e="तँपाई "+n.maximum+" वस्तु मात्र छान्न पाउँनुहुन्छ।";return 1!=n.maximum&&(e="तँपाई "+n.maximum+" वस्तुहरु मात्र छान्न पाउँनुहुन्छ।"),e},noResults:function(){return"कुनै पनि नतिजा भेटिएन।"},searching:function(){return"खोजि हुँदैछ…"}}}),n.define,n.require}();
js/vendor/select2-4.0.13/dist/js/i18n/nl.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/nl",[],function(){return{errorLoading:function(){return"De resultaten konden niet worden geladen."},inputTooLong:function(e){return"Gelieve "+(e.input.length-e.maximum)+" karakters te verwijderen"},inputTooShort:function(e){return"Gelieve "+(e.minimum-e.input.length)+" of meer karakters in te voeren"},loadingMore:function(){return"Meer resultaten laden…"},maximumSelected:function(e){var n=1==e.maximum?"kan":"kunnen",r="Er "+n+" maar "+e.maximum+" item";return 1!=e.maximum&&(r+="s"),r+=" worden geselecteerd"},noResults:function(){return"Geen resultaten gevonden…"},searching:function(){return"Zoeken…"},removeAllItems:function(){return"Verwijder alle items"}}}),e.define,e.require}();
js/vendor/select2-4.0.13/dist/js/i18n/pl.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/pl",[],function(){var n=["znak","znaki","znaków"],e=["element","elementy","elementów"],r=function(n,e){return 1===n?e[0]:n>1&&n<=4?e[1]:n>=5?e[2]:void 0};return{errorLoading:function(){return"Nie można załadować wyników."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Usuń "+t+" "+r(t,n)},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Podaj przynajmniej "+t+" "+r(t,n)},loadingMore:function(){return"Trwa ładowanie…"},maximumSelected:function(n){return"Możesz zaznaczyć tylko "+n.maximum+" "+r(n.maximum,e)},noResults:function(){return"Brak wyników"},searching:function(){return"Trwa wyszukiwanie…"},removeAllItems:function(){return"Usuń wszystkie przedmioty"}}}),n.define,n.require}();
js/vendor/select2-4.0.13/dist/js/i18n/ps.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ps",[],function(){return{errorLoading:function(){return"پايلي نه سي ترلاسه کېدای"},inputTooLong:function(n){var e=n.input.length-n.maximum,r="د مهربانۍ لمخي "+e+" توری ړنګ کړئ";return 1!=e&&(r=r.replace("توری","توري")),r},inputTooShort:function(n){return"لږ تر لږه "+(n.minimum-n.input.length)+" يا ډېر توري وليکئ"},loadingMore:function(){return"نوري پايلي ترلاسه کيږي..."},maximumSelected:function(n){var e="تاسو يوازي "+n.maximum+" قلم په نښه کولای سی";return 1!=n.maximum&&(e=e.replace("قلم","قلمونه")),e},noResults:function(){return"پايلي و نه موندل سوې"},searching:function(){return"لټول کيږي..."},removeAllItems:function(){return"ټول توکي لرې کړئ"}}}),n.define,n.require}();
js/vendor/select2-4.0.13/dist/js/i18n/pt-BR.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/pt-BR",[],function(){return{errorLoading:function(){return"Os resultados não puderam ser carregados."},inputTooLong:function(e){var n=e.input.length-e.maximum,r="Apague "+n+" caracter";return 1!=n&&(r+="es"),r},inputTooShort:function(e){return"Digite "+(e.minimum-e.input.length)+" ou mais caracteres"},loadingMore:function(){return"Carregando mais resultados…"},maximumSelected:function(e){var n="Você só pode selecionar "+e.maximum+" ite";return 1==e.maximum?n+="m":n+="ns",n},noResults:function(){return"Nenhum resultado encontrado"},searching:function(){return"Buscando…"},removeAllItems:function(){return"Remover todos os itens"}}}),e.define,e.require}();
js/vendor/select2-4.0.13/dist/js/i18n/pt.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/pt",[],function(){return{errorLoading:function(){return"Os resultados não puderam ser carregados."},inputTooLong:function(e){var r=e.input.length-e.maximum,n="Por favor apague "+r+" ";return n+=1!=r?"caracteres":"caractere"},inputTooShort:function(e){return"Introduza "+(e.minimum-e.input.length)+" ou mais caracteres"},loadingMore:function(){return"A carregar mais resultados…"},maximumSelected:function(e){var r="Apenas pode seleccionar "+e.maximum+" ";return r+=1!=e.maximum?"itens":"item"},noResults:function(){return"Sem resultados"},searching:function(){return"A procurar…"},removeAllItems:function(){return"Remover todos os itens"}}}),e.define,e.require}();
js/vendor/select2-4.0.13/dist/js/i18n/ro.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/ro",[],function(){return{errorLoading:function(){return"Rezultatele nu au putut fi incărcate."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vă rugăm să ștergeți"+t+" caracter";return 1!==t&&(n+="e"),n},inputTooShort:function(e){return"Vă rugăm să introduceți "+(e.minimum-e.input.length)+" sau mai multe caractere"},loadingMore:function(){return"Se încarcă mai multe rezultate…"},maximumSelected:function(e){var t="Aveți voie să selectați cel mult "+e.maximum;return t+=" element",1!==e.maximum&&(t+="e"),t},noResults:function(){return"Nu au fost găsite rezultate"},searching:function(){return"Căutare…"},removeAllItems:function(){return"Eliminați toate elementele"}}}),e.define,e.require}();
js/vendor/select2-4.0.13/dist/js/i18n/ru.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ru",[],function(){function n(n,e,r,u){return n%10<5&&n%10>0&&n%100<5||n%100>20?n%10>1?r:e:u}return{errorLoading:function(){return"Невозможно загрузить результаты"},inputTooLong:function(e){var r=e.input.length-e.maximum,u="Пожалуйста, введите на "+r+" символ";return u+=n(r,"","a","ов"),u+=" меньше"},inputTooShort:function(e){var r=e.minimum-e.input.length,u="Пожалуйста, введите ещё хотя бы "+r+" символ";return u+=n(r,"","a","ов")},loadingMore:function(){return"Загрузка данных…"},maximumSelected:function(e){var r="Вы можете выбрать не более "+e.maximum+" элемент";return r+=n(e.maximum,"","a","ов")},noResults:function(){return"Совпадений не найдено"},searching:function(){return"Поиск…"},removeAllItems:function(){return"Удалить все элементы"}}}),n.define,n.require}();
js/vendor/select2-4.0.13/dist/js/i18n/sk.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/sk",[],function(){var e={2:function(e){return e?"dva":"dve"},3:function(){return"tri"},4:function(){return"štyri"}};return{errorLoading:function(){return"Výsledky sa nepodarilo načítať."},inputTooLong:function(n){var t=n.input.length-n.maximum;return 1==t?"Prosím, zadajte o jeden znak menej":t>=2&&t<=4?"Prosím, zadajte o "+e[t](!0)+" znaky menej":"Prosím, zadajte o "+t+" znakov menej"},inputTooShort:function(n){var t=n.minimum-n.input.length;return 1==t?"Prosím, zadajte ešte jeden znak":t<=4?"Prosím, zadajte ešte ďalšie "+e[t](!0)+" znaky":"Prosím, zadajte ešte ďalších "+t+" znakov"},loadingMore:function(){return"Načítanie ďalších výsledkov…"},maximumSelected:function(n){return 1==n.maximum?"Môžete zvoliť len jednu položku":n.maximum>=2&&n.maximum<=4?"Môžete zvoliť najviac "+e[n.maximum](!1)+" položky":"Môžete zvoliť najviac "+n.maximum+" položiek"},noResults:function(){return"Nenašli sa žiadne položky"},searching:function(){return"Vyhľadávanie…"},removeAllItems:function(){return"Odstráňte všetky položky"}}}),e.define,e.require}();
js/vendor/select2-4.0.13/dist/js/i18n/sl.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/sl",[],function(){return{errorLoading:function(){return"Zadetkov iskanja ni bilo mogoče naložiti."},inputTooLong:function(e){var n=e.input.length-e.maximum,t="Prosim zbrišite "+n+" znak";return 2==n?t+="a":1!=n&&(t+="e"),t},inputTooShort:function(e){var n=e.minimum-e.input.length,t="Prosim vpišite še "+n+" znak";return 2==n?t+="a":1!=n&&(t+="e"),t},loadingMore:function(){return"Nalagam več zadetkov…"},maximumSelected:function(e){var n="Označite lahko največ "+e.maximum+" predmet";return 2==e.maximum?n+="a":1!=e.maximum&&(n+="e"),n},noResults:function(){return"Ni zadetkov."},searching:function(){return"Iščem…"},removeAllItems:function(){return"Odstranite vse elemente"}}}),e.define,e.require}();
js/vendor/select2-4.0.13/dist/js/i18n/sq.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/sq",[],function(){return{errorLoading:function(){return"Rezultatet nuk mund të ngarkoheshin."},inputTooLong:function(e){var n=e.input.length-e.maximum,t="Të lutem fshi "+n+" karakter";return 1!=n&&(t+="e"),t},inputTooShort:function(e){return"Të lutem shkruaj "+(e.minimum-e.input.length)+" ose më shumë karaktere"},loadingMore:function(){return"Duke ngarkuar më shumë rezultate…"},maximumSelected:function(e){var n="Mund të zgjedhësh vetëm "+e.maximum+" element";return 1!=e.maximum&&(n+="e"),n},noResults:function(){return"Nuk u gjet asnjë rezultat"},searching:function(){return"Duke kërkuar…"},removeAllItems:function(){return"Hiq të gjitha sendet"}}}),e.define,e.require}();
js/vendor/select2-4.0.13/dist/js/i18n/sr-Cyrl.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/sr-Cyrl",[],function(){function n(n,e,r,u){return n%10==1&&n%100!=11?e:n%10>=2&&n%10<=4&&(n%100<12||n%100>14)?r:u}return{errorLoading:function(){return"Преузимање није успело."},inputTooLong:function(e){var r=e.input.length-e.maximum,u="Обришите "+r+" симбол";return u+=n(r,"","а","а")},inputTooShort:function(e){var r=e.minimum-e.input.length,u="Укуцајте бар још "+r+" симбол";return u+=n(r,"","а","а")},loadingMore:function(){return"Преузимање још резултата…"},maximumSelected:function(e){var r="Можете изабрати само "+e.maximum+" ставк";return r+=n(e.maximum,"у","е","и")},noResults:function(){return"Ништа није пронађено"},searching:function(){return"Претрага…"},removeAllItems:function(){return"Уклоните све ставке"}}}),n.define,n.require}();
js/vendor/select2-4.0.13/dist/js/i18n/sr.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/sr",[],function(){function n(n,e,r,t){return n%10==1&&n%100!=11?e:n%10>=2&&n%10<=4&&(n%100<12||n%100>14)?r:t}return{errorLoading:function(){return"Preuzimanje nije uspelo."},inputTooLong:function(e){var r=e.input.length-e.maximum,t="Obrišite "+r+" simbol";return t+=n(r,"","a","a")},inputTooShort:function(e){var r=e.minimum-e.input.length,t="Ukucajte bar još "+r+" simbol";return t+=n(r,"","a","a")},loadingMore:function(){return"Preuzimanje još rezultata…"},maximumSelected:function(e){var r="Možete izabrati samo "+e.maximum+" stavk";return r+=n(e.maximum,"u","e","i")},noResults:function(){return"Ništa nije pronađeno"},searching:function(){return"Pretraga…"},removeAllItems:function(){return"Уклоните све ставке"}}}),n.define,n.require}();
js/vendor/select2-4.0.13/dist/js/i18n/sv.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/sv",[],function(){return{errorLoading:function(){return"Resultat kunde inte laddas."},inputTooLong:function(n){return"Vänligen sudda ut "+(n.input.length-n.maximum)+" tecken"},inputTooShort:function(n){return"Vänligen skriv in "+(n.minimum-n.input.length)+" eller fler tecken"},loadingMore:function(){return"Laddar fler resultat…"},maximumSelected:function(n){return"Du kan max välja "+n.maximum+" element"},noResults:function(){return"Inga träffar"},searching:function(){return"Söker…"},removeAllItems:function(){return"Ta bort alla objekt"}}}),n.define,n.require}();
js/vendor/select2-4.0.13/dist/js/i18n/th.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/th",[],function(){return{errorLoading:function(){return"ไม่สามารถค้นข้อมูลได้"},inputTooLong:function(n){return"โปรดลบออก "+(n.input.length-n.maximum)+" ตัวอักษร"},inputTooShort:function(n){return"โปรดพิมพ์เพิ่มอีก "+(n.minimum-n.input.length)+" ตัวอักษร"},loadingMore:function(){return"กำลังค้นข้อมูลเพิ่ม…"},maximumSelected:function(n){return"คุณสามารถเลือกได้ไม่เกิน "+n.maximum+" รายการ"},noResults:function(){return"ไม่พบข้อมูล"},searching:function(){return"กำลังค้นข้อมูล…"},removeAllItems:function(){return"ลบรายการทั้งหมด"}}}),n.define,n.require}();
js/vendor/select2-4.0.13/dist/js/i18n/tk.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/tk",[],function(){return{errorLoading:function(){return"Netije ýüklenmedi."},inputTooLong:function(e){return e.input.length-e.maximum+" harp bozuň."},inputTooShort:function(e){return"Ýene-de iň az "+(e.minimum-e.input.length)+" harp ýazyň."},loadingMore:function(){return"Köpräk netije görkezilýär…"},maximumSelected:function(e){return"Diňe "+e.maximum+" sanysyny saýlaň."},noResults:function(){return"Netije tapylmady."},searching:function(){return"Gözlenýär…"},removeAllItems:function(){return"Remove all items"}}}),e.define,e.require}();
js/vendor/select2-4.0.13/dist/js/i18n/tr.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/tr",[],function(){return{errorLoading:function(){return"Sonuç yüklenemedi"},inputTooLong:function(n){return n.input.length-n.maximum+" karakter daha girmelisiniz"},inputTooShort:function(n){return"En az "+(n.minimum-n.input.length)+" karakter daha girmelisiniz"},loadingMore:function(){return"Daha fazla…"},maximumSelected:function(n){return"Sadece "+n.maximum+" seçim yapabilirsiniz"},noResults:function(){return"Sonuç bulunamadı"},searching:function(){return"Aranıyor…"},removeAllItems:function(){return"Tüm öğeleri kaldır"}}}),n.define,n.require}();
js/vendor/select2-4.0.13/dist/js/i18n/uk.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/uk",[],function(){function n(n,e,u,r){return n%100>10&&n%100<15?r:n%10==1?e:n%10>1&&n%10<5?u:r}return{errorLoading:function(){return"Неможливо завантажити результати"},inputTooLong:function(e){return"Будь ласка, видаліть "+(e.input.length-e.maximum)+" "+n(e.maximum,"літеру","літери","літер")},inputTooShort:function(n){return"Будь ласка, введіть "+(n.minimum-n.input.length)+" або більше літер"},loadingMore:function(){return"Завантаження інших результатів…"},maximumSelected:function(e){return"Ви можете вибрати лише "+e.maximum+" "+n(e.maximum,"пункт","пункти","пунктів")},noResults:function(){return"Нічого не знайдено"},searching:function(){return"Пошук…"},removeAllItems:function(){return"Видалити всі елементи"}}}),n.define,n.require}();
js/vendor/select2-4.0.13/dist/js/i18n/vi.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/vi",[],function(){return{inputTooLong:function(n){return"Vui lòng xóa bớt "+(n.input.length-n.maximum)+" ký tự"},inputTooShort:function(n){return"Vui lòng nhập thêm từ "+(n.minimum-n.input.length)+" ký tự trở lên"},loadingMore:function(){return"Đang lấy thêm kết quả…"},maximumSelected:function(n){return"Chỉ có thể chọn được "+n.maximum+" lựa chọn"},noResults:function(){return"Không tìm thấy kết quả"},searching:function(){return"Đang tìm…"},removeAllItems:function(){return"Xóa tất cả các mục"}}}),n.define,n.require}();
js/vendor/select2-4.0.13/dist/js/i18n/zh-CN.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/zh-CN",[],function(){return{errorLoading:function(){return"无法载入结果。"},inputTooLong:function(n){return"请删除"+(n.input.length-n.maximum)+"个字符"},inputTooShort:function(n){return"请再输入至少"+(n.minimum-n.input.length)+"个字符"},loadingMore:function(){return"载入更多结果…"},maximumSelected:function(n){return"最多只能选择"+n.maximum+"个项目"},noResults:function(){return"未找到结果"},searching:function(){return"搜索中…"},removeAllItems:function(){return"删除所有项目"}}}),n.define,n.require}();
js/vendor/select2-4.0.13/dist/js/i18n/zh-TW.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+
3
+ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/zh-TW",[],function(){return{inputTooLong:function(n){return"請刪掉"+(n.input.length-n.maximum)+"個字元"},inputTooShort:function(n){return"請再輸入"+(n.minimum-n.input.length)+"個字元"},loadingMore:function(){return"載入中…"},maximumSelected:function(n){return"你只能選擇最多"+n.maximum+"項"},noResults:function(){return"沒有找到相符的項目"},searching:function(){return"搜尋中…"},removeAllItems:function(){return"刪除所有項目"}}}),n.define,n.require}();
js/vendor/select2-4.0.13/dist/js/select2.full.js ADDED
@@ -0,0 +1,6820 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * Select2 4.0.13
3
+ * https://select2.github.io
4
+ *
5
+ * Released under the MIT license
6
+ * https://github.com/select2/select2/blob/master/LICENSE.md
7
+ */
8
+ ;(function (factory) {
9
+ if (typeof define === 'function' && define.amd) {
10
+ // AMD. Register as an anonymous module.
11
+ define(['jquery'], factory);
12
+ } else if (typeof module === 'object' && module.exports) {
13
+ // Node/CommonJS
14
+ module.exports = function (root, jQuery) {
15
+ if (jQuery === undefined) {
16
+ // require('jQuery') returns a factory that requires window to
17
+ // build a jQuery instance, we normalize how we use modules
18
+ // that require this pattern but the window provided is a noop
19
+ // if it's defined (how jquery works)
20
+ if (typeof window !== 'undefined') {
21
+ jQuery = require('jquery');
22
+ }
23
+ else {
24
+ jQuery = require('jquery')(root);
25
+ }
26
+ }
27
+ factory(jQuery);
28
+ return jQuery;
29
+ };
30
+ } else {
31
+ // Browser globals
32
+ factory(jQuery);
33
+ }
34
+ } (function (jQuery) {
35
+ // This is needed so we can catch the AMD loader configuration and use it
36
+ // The inner file should be wrapped (by `banner.start.js`) in a function that
37
+ // returns the AMD loader references.
38
+ var S2 =(function () {
39
+ // Restore the Select2 AMD loader so it can be used
40
+ // Needed mostly in the language files, where the loader is not inserted
41
+ if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd) {
42
+ var S2 = jQuery.fn.select2.amd;
43
+ }
44
+ var S2;(function () { if (!S2 || !S2.requirejs) {
45
+ if (!S2) { S2 = {}; } else { require = S2; }
46
+ /**
47
+ * @license almond 0.3.3 Copyright jQuery Foundation and other contributors.
48
+ * Released under MIT license, http://github.com/requirejs/almond/LICENSE
49
+ */
50
+ //Going sloppy to avoid 'use strict' string cost, but strict practices should
51
+ //be followed.
52
+ /*global setTimeout: false */
53
+
54
+ var requirejs, require, define;
55
+ (function (undef) {
56
+ var main, req, makeMap, handlers,
57
+ defined = {},
58
+ waiting = {},
59
+ config = {},
60
+ defining = {},
61
+ hasOwn = Object.prototype.hasOwnProperty,
62
+ aps = [].slice,
63
+ jsSuffixRegExp = /\.js$/;
64
+
65
+ function hasProp(obj, prop) {
66
+ return hasOwn.call(obj, prop);
67
+ }
68
+
69
+ /**
70
+ * Given a relative module name, like ./something, normalize it to
71
+ * a real name that can be mapped to a path.
72
+ * @param {String} name the relative name
73
+ * @param {String} baseName a real name that the name arg is relative
74
+ * to.
75
+ * @returns {String} normalized name
76
+ */
77
+ function normalize(name, baseName) {
78
+ var nameParts, nameSegment, mapValue, foundMap, lastIndex,
79
+ foundI, foundStarMap, starI, i, j, part, normalizedBaseParts,
80
+ baseParts = baseName && baseName.split("/"),
81
+ map = config.map,
82
+ starMap = (map && map['*']) || {};
83
+
84
+ //Adjust any relative paths.
85
+ if (name) {
86
+ name = name.split('/');
87
+ lastIndex = name.length - 1;
88
+
89
+ // If wanting node ID compatibility, strip .js from end
90
+ // of IDs. Have to do this here, and not in nameToUrl
91
+ // because node allows either .js or non .js to map
92
+ // to same file.
93
+ if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {
94
+ name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');
95
+ }
96
+
97
+ // Starts with a '.' so need the baseName
98
+ if (name[0].charAt(0) === '.' && baseParts) {
99
+ //Convert baseName to array, and lop off the last part,
100
+ //so that . matches that 'directory' and not name of the baseName's
101
+ //module. For instance, baseName of 'one/two/three', maps to
102
+ //'one/two/three.js', but we want the directory, 'one/two' for
103
+ //this normalization.
104
+ normalizedBaseParts = baseParts.slice(0, baseParts.length - 1);
105
+ name = normalizedBaseParts.concat(name);
106
+ }
107
+
108
+ //start trimDots
109
+ for (i = 0; i < name.length; i++) {
110
+ part = name[i];
111
+ if (part === '.') {
112
+ name.splice(i, 1);
113
+ i -= 1;
114
+ } else if (part === '..') {
115
+ // If at the start, or previous value is still ..,
116
+ // keep them so that when converted to a path it may
117
+ // still work when converted to a path, even though
118
+ // as an ID it is less than ideal. In larger point
119
+ // releases, may be better to just kick out an error.
120
+ if (i === 0 || (i === 1 && name[2] === '..') || name[i - 1] === '..') {
121
+ continue;
122
+ } else if (i > 0) {
123
+ name.splice(i - 1, 2);
124
+ i -= 2;
125
+ }
126
+ }
127
+ }
128
+ //end trimDots
129
+
130
+ name = name.join('/');
131
+ }
132
+
133
+ //Apply map config if available.
134
+ if ((baseParts || starMap) && map) {
135
+ nameParts = name.split('/');
136
+
137
+ for (i = nameParts.length; i > 0; i -= 1) {
138
+ nameSegment = nameParts.slice(0, i).join("/");
139
+
140
+ if (baseParts) {
141
+ //Find the longest baseName segment match in the config.
142
+ //So, do joins on the biggest to smallest lengths of baseParts.
143
+ for (j = baseParts.length; j > 0; j -= 1) {
144
+ mapValue = map[baseParts.slice(0, j).join('/')];
145
+
146
+ //baseName segment has config, find if it has one for
147
+ //this name.
148
+ if (mapValue) {
149
+ mapValue = mapValue[nameSegment];
150
+ if (mapValue) {
151
+ //Match, update name to the new value.
152
+ foundMap = mapValue;
153
+ foundI = i;
154
+ break;
155
+ }
156
+ }
157
+ }
158
+ }
159
+
160
+ if (foundMap) {
161
+ break;
162
+ }
163
+
164
+ //Check for a star map match, but just hold on to it,
165
+ //if there is a shorter segment match later in a matching
166
+ //config, then favor over this star map.
167
+ if (!foundStarMap && starMap && starMap[nameSegment]) {
168
+ foundStarMap = starMap[nameSegment];
169
+ starI = i;
170
+ }
171
+ }
172
+
173
+ if (!foundMap && foundStarMap) {
174
+ foundMap = foundStarMap;
175
+ foundI = starI;
176
+ }
177
+
178
+ if (foundMap) {
179
+ nameParts.splice(0, foundI, foundMap);
180
+ name = nameParts.join('/');
181
+ }
182
+ }
183
+
184
+ return name;
185
+ }
186
+
187
+ function makeRequire(relName, forceSync) {
188
+ return function () {
189
+ //A version of a require function that passes a moduleName
190
+ //value for items that may need to
191
+ //look up paths relative to the moduleName
192
+ var args = aps.call(arguments, 0);
193
+
194
+ //If first arg is not require('string'), and there is only
195
+ //one arg, it is the array form without a callback. Insert
196
+ //a null so that the following concat is correct.
197
+ if (typeof args[0] !== 'string' && args.length === 1) {
198
+ args.push(null);
199
+ }
200
+ return req.apply(undef, args.concat([relName, forceSync]));
201
+ };
202
+ }
203
+
204
+ function makeNormalize(relName) {
205
+ return function (name) {
206
+ return normalize(name, relName);
207
+ };
208
+ }
209
+
210
+ function makeLoad(depName) {
211
+ return function (value) {
212
+ defined[depName] = value;
213
+ };
214
+ }
215
+
216
+ function callDep(name) {
217
+ if (hasProp(waiting, name)) {
218
+ var args = waiting[name];
219
+ delete waiting[name];
220
+ defining[name] = true;
221
+ main.apply(undef, args);
222
+ }
223
+
224
+ if (!hasProp(defined, name) && !hasProp(defining, name)) {
225
+ throw new Error('No ' + name);
226
+ }
227
+ return defined[name];
228
+ }
229
+
230
+ //Turns a plugin!resource to [plugin, resource]
231
+ //with the plugin being undefined if the name
232
+ //did not have a plugin prefix.
233
+ function splitPrefix(name) {
234
+ var prefix,
235
+ index = name ? name.indexOf('!') : -1;
236
+ if (index > -1) {
237
+ prefix = name.substring(0, index);
238
+ name = name.substring(index + 1, name.length);
239
+ }
240
+ return [prefix, name];
241
+ }
242
+
243
+ //Creates a parts array for a relName where first part is plugin ID,
244
+ //second part is resource ID. Assumes relName has already been normalized.
245
+ function makeRelParts(relName) {
246
+ return relName ? splitPrefix(relName) : [];
247
+ }
248
+
249
+ /**
250
+ * Makes a name map, normalizing the name, and using a plugin
251
+ * for normalization if necessary. Grabs a ref to plugin
252
+ * too, as an optimization.
253
+ */
254
+ makeMap = function (name, relParts) {
255
+ var plugin,
256
+ parts = splitPrefix(name),
257
+ prefix = parts[0],
258
+ relResourceName = relParts[1];
259
+
260
+ name = parts[1];
261
+
262
+ if (prefix) {
263
+ prefix = normalize(prefix, relResourceName);
264
+ plugin = callDep(prefix);
265
+ }
266
+
267
+ //Normalize according
268
+ if (prefix) {
269
+ if (plugin && plugin.normalize) {
270
+ name = plugin.normalize(name, makeNormalize(relResourceName));
271
+ } else {
272
+ name = normalize(name, relResourceName);
273
+ }
274
+ } else {
275
+ name = normalize(name, relResourceName);
276
+ parts = splitPrefix(name);
277
+ prefix = parts[0];
278
+ name = parts[1];
279
+ if (prefix) {
280
+ plugin = callDep(prefix);
281
+ }
282
+ }
283
+
284
+ //Using ridiculous property names for space reasons
285
+ return {
286
+ f: prefix ? prefix + '!' + name : name, //fullName
287
+ n: name,
288
+ pr: prefix,
289
+ p: plugin
290
+ };
291
+ };
292
+
293
+ function makeConfig(name) {
294
+ return function () {
295
+ return (config && config.config && config.config[name]) || {};
296
+ };
297
+ }
298
+
299
+ handlers = {
300
+ require: function (name) {
301
+ return makeRequire(name);
302
+ },
303
+ exports: function (name) {
304
+ var e = defined[name];
305
+ if (typeof e !== 'undefined') {
306
+ return e;
307
+ } else {
308
+ return (defined[name] = {});
309
+ }
310
+ },
311
+ module: function (name) {
312
+ return {
313
+ id: name,
314
+ uri: '',
315
+ exports: defined[name],
316
+ config: makeConfig(name)
317
+ };
318
+ }
319
+ };
320
+
321
+ main = function (name, deps, callback, relName) {
322
+ var cjsModule, depName, ret, map, i, relParts,
323
+ args = [],
324
+ callbackType = typeof callback,
325
+ usingExports;
326
+
327
+ //Use name if no relName
328
+ relName = relName || name;
329
+ relParts = makeRelParts(relName);
330
+
331
+ //Call the callback to define the module, if necessary.
332
+ if (callbackType === 'undefined' || callbackType === 'function') {
333
+ //Pull out the defined dependencies and pass the ordered
334
+ //values to the callback.
335
+ //Default to [require, exports, module] if no deps
336
+ deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;
337
+ for (i = 0; i < deps.length; i += 1) {
338
+ map = makeMap(deps[i], relParts);
339
+ depName = map.f;
340
+
341
+ //Fast path CommonJS standard dependencies.
342
+ if (depName === "require") {
343
+ args[i] = handlers.require(name);
344
+ } else if (depName === "exports") {
345
+ //CommonJS module spec 1.1
346
+ args[i] = handlers.exports(name);
347
+ usingExports = true;
348
+ } else if (depName === "module") {
349
+ //CommonJS module spec 1.1
350
+ cjsModule = args[i] = handlers.module(name);
351
+ } else if (hasProp(defined, depName) ||
352
+ hasProp(waiting, depName) ||
353
+ hasProp(defining, depName)) {
354
+ args[i] = callDep(depName);
355
+ } else if (map.p) {
356
+ map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});
357
+ args[i] = defined[depName];
358
+ } else {
359
+ throw new Error(name + ' missing ' + depName);
360
+ }
361
+ }
362
+
363
+ ret = callback ? callback.apply(defined[name], args) : undefined;
364
+
365
+ if (name) {
366
+ //If setting exports via "module" is in play,
367
+ //favor that over return value and exports. After that,
368
+ //favor a non-undefined return value over exports use.
369
+ if (cjsModule && cjsModule.exports !== undef &&
370
+ cjsModule.exports !== defined[name]) {
371
+ defined[name] = cjsModule.exports;
372
+ } else if (ret !== undef || !usingExports) {
373
+ //Use the return value from the function.
374
+ defined[name] = ret;
375
+ }
376
+ }
377
+ } else if (name) {
378
+ //May just be an object definition for the module. Only
379
+ //worry about defining if have a module name.
380
+ defined[name] = callback;
381
+ }
382
+ };
383
+
384
+ requirejs = require = req = function (deps, callback, relName, forceSync, alt) {
385
+ if (typeof deps === "string") {
386
+ if (handlers[deps]) {
387
+ //callback in this case is really relName
388
+ return handlers[deps](callback);
389
+ }
390
+ //Just return the module wanted. In this scenario, the
391
+ //deps arg is the module name, and second arg (if passed)
392
+ //is just the relName.
393
+ //Normalize module name, if it contains . or ..
394
+ return callDep(makeMap(deps, makeRelParts(callback)).f);
395
+ } else if (!deps.splice) {
396
+ //deps is a config object, not an array.
397
+ config = deps;
398
+ if (config.deps) {
399
+ req(config.deps, config.callback);
400
+ }
401
+ if (!callback) {
402
+ return;
403
+ }
404
+
405
+ if (callback.splice) {
406
+ //callback is an array, which means it is a dependency list.
407
+ //Adjust args if there are dependencies
408
+ deps = callback;
409
+ callback = relName;
410
+ relName = null;
411
+ } else {
412
+ deps = undef;
413
+ }
414
+ }
415
+
416
+ //Support require(['a'])
417
+ callback = callback || function () {};
418
+
419
+ //If relName is a function, it is an errback handler,
420
+ //so remove it.
421
+ if (typeof relName === 'function') {
422
+ relName = forceSync;
423
+ forceSync = alt;
424
+ }
425
+
426
+ //Simulate async callback;
427
+ if (forceSync) {
428
+ main(undef, deps, callback, relName);
429
+ } else {
430
+ //Using a non-zero value because of concern for what old browsers
431
+ //do, and latest browsers "upgrade" to 4 if lower value is used:
432
+ //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:
433
+ //If want a value immediately, use require('id') instead -- something
434
+ //that works in almond on the global level, but not guaranteed and
435
+ //unlikely to work in other AMD implementations.
436
+ setTimeout(function () {
437
+ main(undef, deps, callback, relName);
438
+ }, 4);
439
+ }
440
+
441
+ return req;
442
+ };
443
+
444
+ /**
445
+ * Just drops the config on the floor, but returns req in case
446
+ * the config return value is used.
447
+ */
448
+ req.config = function (cfg) {
449
+ return req(cfg);
450
+ };
451
+
452
+ /**
453
+ * Expose module registry for debugging and tooling
454
+ */
455
+ requirejs._defined = defined;
456
+
457
+ define = function (name, deps, callback) {
458
+ if (typeof name !== 'string') {
459
+ throw new Error('See almond README: incorrect module build, no module name');
460
+ }
461
+
462
+ //This module may not have dependencies
463
+ if (!deps.splice) {
464
+ //deps is not an array, so probably means
465
+ //an object literal or factory function for
466
+ //the value. Adjust args.
467
+ callback = deps;
468
+ deps = [];
469
+ }
470
+
471
+ if (!hasProp(defined, name) && !hasProp(waiting, name)) {
472
+ waiting[name] = [name, deps, callback];
473
+ }
474
+ };
475
+
476
+ define.amd = {
477
+ jQuery: true
478
+ };
479
+ }());
480
+
481
+ S2.requirejs = requirejs;S2.require = require;S2.define = define;
482
+ }
483
+ }());
484
+ S2.define("almond", function(){});
485
+
486
+ /* global jQuery:false, $:false */
487
+ S2.define('jquery',[],function () {
488
+ var _$ = jQuery || $;
489
+
490
+ if (_$ == null && console && console.error) {
491
+ console.error(
492
+ 'Select2: An instance of jQuery or a jQuery-compatible library was not ' +
493
+ 'found. Make sure that you are including jQuery before Select2 on your ' +
494
+ 'web page.'
495
+ );
496
+ }
497
+
498
+ return _$;
499
+ });
500
+
501
+ S2.define('select2/utils',[
502
+ 'jquery'
503
+ ], function ($) {
504
+ var Utils = {};
505
+
506
+ Utils.Extend = function (ChildClass, SuperClass) {
507
+ var __hasProp = {}.hasOwnProperty;
508
+
509
+ function BaseConstructor () {
510
+ this.constructor = ChildClass;
511
+ }
512
+
513
+ for (var key in SuperClass) {
514
+ if (__hasProp.call(SuperClass, key)) {
515
+ ChildClass[key] = SuperClass[key];
516
+ }
517
+ }
518
+
519
+ BaseConstructor.prototype = SuperClass.prototype;
520
+ ChildClass.prototype = new BaseConstructor();
521
+ ChildClass.__super__ = SuperClass.prototype;
522
+
523
+ return ChildClass;
524
+ };
525
+
526
+ function getMethods (theClass) {
527
+ var proto = theClass.prototype;
528
+
529
+ var methods = [];
530
+
531
+ for (var methodName in proto) {
532
+ var m = proto[methodName];
533
+
534
+ if (typeof m !== 'function') {
535
+ continue;
536
+ }
537
+
538
+ if (methodName === 'constructor') {
539
+ continue;
540
+ }
541
+
542
+ methods.push(methodName);
543
+ }
544
+
545
+ return methods;
546
+ }
547
+
548
+ Utils.Decorate = function (SuperClass, DecoratorClass) {
549
+ var decoratedMethods = getMethods(DecoratorClass);
550
+ var superMethods = getMethods(SuperClass);
551
+
552
+ function DecoratedClass () {
553
+ var unshift = Array.prototype.unshift;
554
+
555
+ var argCount = DecoratorClass.prototype.constructor.length;
556
+
557
+ var calledConstructor = SuperClass.prototype.constructor;
558
+
559
+ if (argCount > 0) {
560
+ unshift.call(arguments, SuperClass.prototype.constructor);
561
+
562
+ calledConstructor = DecoratorClass.prototype.constructor;
563
+ }
564
+
565
+ calledConstructor.apply(this, arguments);
566
+ }
567
+
568
+ DecoratorClass.displayName = SuperClass.displayName;
569
+
570
+ function ctr () {
571
+ this.constructor = DecoratedClass;
572
+ }
573
+
574
+ DecoratedClass.prototype = new ctr();
575
+
576
+ for (var m = 0; m < superMethods.length; m++) {
577
+ var superMethod = superMethods[m];
578
+
579
+ DecoratedClass.prototype[superMethod] =
580
+ SuperClass.prototype[superMethod];
581
+ }
582
+
583
+ var calledMethod = function (methodName) {
584
+ // Stub out the original method if it's not decorating an actual method
585
+ var originalMethod = function () {};
586
+
587
+ if (methodName in DecoratedClass.prototype) {
588
+ originalMethod = DecoratedClass.prototype[methodName];
589
+ }
590
+
591
+ var decoratedMethod = DecoratorClass.prototype[methodName];
592
+
593
+ return function () {
594
+ var unshift = Array.prototype.unshift;
595
+
596
+ unshift.call(arguments, originalMethod);
597
+
598
+ return decoratedMethod.apply(this, arguments);
599
+ };
600
+ };
601
+
602
+ for (var d = 0; d < decoratedMethods.length; d++) {
603
+ var decoratedMethod = decoratedMethods[d];
604
+
605
+ DecoratedClass.prototype[decoratedMethod] = calledMethod(decoratedMethod);
606
+ }
607
+
608
+ return DecoratedClass;
609
+ };
610
+
611
+ var Observable = function () {
612
+ this.listeners = {};
613
+ };
614
+
615
+ Observable.prototype.on = function (event, callback) {
616
+ this.listeners = this.listeners || {};
617
+
618
+ if (event in this.listeners) {
619
+ this.listeners[event].push(callback);
620
+ } else {
621
+ this.listeners[event] = [callback];
622
+ }
623
+ };
624
+
625
+ Observable.prototype.trigger = function (event) {
626
+ var slice = Array.prototype.slice;
627
+ var params = slice.call(arguments, 1);
628
+
629
+ this.listeners = this.listeners || {};
630
+
631
+ // Params should always come in as an array
632
+ if (params == null) {
633
+ params = [];
634
+ }
635
+
636
+ // If there are no arguments to the event, use a temporary object
637
+ if (params.length === 0) {
638
+ params.push({});
639
+ }
640
+
641
+ // Set the `_type` of the first object to the event
642
+ params[0]._type = event;
643
+
644
+ if (event in this.listeners) {
645
+ this.invoke(this.listeners[event], slice.call(arguments, 1));
646
+ }
647
+
648
+ if ('*' in this.listeners) {
649
+ this.invoke(this.listeners['*'], arguments);
650
+ }
651
+ };
652
+
653
+ Observable.prototype.invoke = function (listeners, params) {
654
+ for (var i = 0, len = listeners.length; i < len; i++) {
655
+ listeners[i].apply(this, params);
656
+ }
657
+ };
658
+
659
+ Utils.Observable = Observable;
660
+
661
+ Utils.generateChars = function (length) {
662
+ var chars = '';
663
+
664
+ for (var i = 0; i < length; i++) {
665
+ var randomChar = Math.floor(Math.random() * 36);
666
+ chars += randomChar.toString(36);
667
+ }
668
+
669
+ return chars;
670
+ };
671
+
672
+ Utils.bind = function (func, context) {
673
+ return function () {
674
+ func.apply(context, arguments);
675
+ };
676
+ };
677
+
678
+ Utils._convertData = function (data) {
679
+ for (var originalKey in data) {
680
+ var keys = originalKey.split('-');
681
+
682
+ var dataLevel = data;
683
+
684
+ if (keys.length === 1) {
685
+ continue;
686
+ }
687
+
688
+ for (var k = 0; k < keys.length; k++) {
689
+ var key = keys[k];
690
+
691
+ // Lowercase the first letter
692
+ // By default, dash-separated becomes camelCase
693
+ key = key.substring(0, 1).toLowerCase() + key.substring(1);
694
+
695
+ if (!(key in dataLevel)) {
696
+ dataLevel[key] = {};
697
+ }
698
+
699
+ if (k == keys.length - 1) {
700
+ dataLevel[key] = data[originalKey];
701
+ }
702
+
703
+ dataLevel = dataLevel[key];
704
+ }
705
+
706
+ delete data[originalKey];
707
+ }
708
+
709
+ return data;
710
+ };
711
+
712
+ Utils.hasScroll = function (index, el) {
713
+ // Adapted from the function created by @ShadowScripter
714
+ // and adapted by @BillBarry on the Stack Exchange Code Review website.
715
+ // The original code can be found at
716
+ // http://codereview.stackexchange.com/q/13338
717
+ // and was designed to be used with the Sizzle selector engine.
718
+
719
+ var $el = $(el);
720
+ var overflowX = el.style.overflowX;
721
+ var overflowY = el.style.overflowY;
722
+
723
+ //Check both x and y declarations
724
+ if (overflowX === overflowY &&
725
+ (overflowY === 'hidden' || overflowY === 'visible')) {
726
+ return false;
727
+ }
728
+
729
+ if (overflowX === 'scroll' || overflowY === 'scroll') {
730
+ return true;
731
+ }
732
+
733
+ return ($el.innerHeight() < el.scrollHeight ||
734
+ $el.innerWidth() < el.scrollWidth);
735
+ };
736
+
737
+ Utils.escapeMarkup = function (markup) {
738
+ var replaceMap = {
739
+ '\\': '&#92;',
740
+ '&': '&amp;',
741
+ '<': '&lt;',
742
+ '>': '&gt;',
743
+ '"': '&quot;',
744
+ '\'': '&#39;',
745
+ '/': '&#47;'
746
+ };
747
+
748
+ // Do not try to escape the markup if it's not a string
749
+ if (typeof markup !== 'string') {
750
+ return markup;
751
+ }
752
+
753
+ return String(markup).replace(/[&<>"'\/\\]/g, function (match) {
754
+ return replaceMap[match];
755
+ });
756
+ };
757
+
758
+ // Append an array of jQuery nodes to a given element.
759
+ Utils.appendMany = function ($element, $nodes) {
760
+ // jQuery 1.7.x does not support $.fn.append() with an array
761
+ // Fall back to a jQuery object collection using $.fn.add()
762
+ if ($.fn.jquery.substr(0, 3) === '1.7') {
763
+ var $jqNodes = $();
764
+
765
+ $.map($nodes, function (node) {
766
+ $jqNodes = $jqNodes.add(node);
767
+ });
768
+
769
+ $nodes = $jqNodes;
770
+ }
771
+
772
+ $element.append($nodes);
773
+ };
774
+
775
+ // Cache objects in Utils.__cache instead of $.data (see #4346)
776
+ Utils.__cache = {};
777
+
778
+ var id = 0;
779
+ Utils.GetUniqueElementId = function (element) {
780
+ // Get a unique element Id. If element has no id,
781
+ // creates a new unique number, stores it in the id
782
+ // attribute and returns the new id.
783
+ // If an id already exists, it simply returns it.
784
+
785
+ var select2Id = element.getAttribute('data-select2-id');
786
+ if (select2Id == null) {
787
+ // If element has id, use it.
788
+ if (element.id) {
789
+ select2Id = element.id;
790
+ element.setAttribute('data-select2-id', select2Id);
791
+ } else {
792
+ element.setAttribute('data-select2-id', ++id);
793
+ select2Id = id.toString();
794
+ }
795
+ }
796
+ return select2Id;
797
+ };
798
+
799
+ Utils.StoreData = function (element, name, value) {
800
+ // Stores an item in the cache for a specified element.
801
+ // name is the cache key.
802
+ var id = Utils.GetUniqueElementId(element);
803
+ if (!Utils.__cache[id]) {
804
+ Utils.__cache[id] = {};
805
+ }
806
+
807
+ Utils.__cache[id][name] = value;
808
+ };
809
+
810
+ Utils.GetData = function (element, name) {
811
+ // Retrieves a value from the cache by its key (name)
812
+ // name is optional. If no name specified, return
813
+ // all cache items for the specified element.
814
+ // and for a specified element.
815
+ var id = Utils.GetUniqueElementId(element);
816
+ if (name) {
817
+ if (Utils.__cache[id]) {
818
+ if (Utils.__cache[id][name] != null) {
819
+ return Utils.__cache[id][name];
820
+ }
821
+ return $(element).data(name); // Fallback to HTML5 data attribs.
822
+ }
823
+ return $(element).data(name); // Fallback to HTML5 data attribs.
824
+ } else {
825
+ return Utils.__cache[id];
826
+ }
827
+ };
828
+
829
+ Utils.RemoveData = function (element) {
830
+ // Removes all cached items for a specified element.
831
+ var id = Utils.GetUniqueElementId(element);
832
+ if (Utils.__cache[id] != null) {
833
+ delete Utils.__cache[id];
834
+ }
835
+
836
+ element.removeAttribute('data-select2-id');
837
+ };
838
+
839
+ return Utils;
840
+ });
841
+
842
+ S2.define('select2/results',[
843
+ 'jquery',
844
+ './utils'
845
+ ], function ($, Utils) {
846
+ function Results ($element, options, dataAdapter) {
847
+ this.$element = $element;
848
+ this.data = dataAdapter;
849
+ this.options = options;
850
+
851
+ Results.__super__.constructor.call(this);
852
+ }
853
+
854
+ Utils.Extend(Results, Utils.Observable);
855
+
856
+ Results.prototype.render = function () {
857
+ var $results = $(
858
+ '<ul class="select2-results__options" role="listbox"></ul>'
859
+ );
860
+
861
+ if (this.options.get('multiple')) {
862
+ $results.attr('aria-multiselectable', 'true');
863
+ }
864
+
865
+ this.$results = $results;
866
+
867
+ return $results;
868
+ };
869
+
870
+ Results.prototype.clear = function () {
871
+ this.$results.empty();
872
+ };
873
+
874
+ Results.prototype.displayMessage = function (params) {
875
+ var escapeMarkup = this.options.get('escapeMarkup');
876
+
877
+ this.clear();
878
+ this.hideLoading();
879
+
880
+ var $message = $(
881
+ '<li role="alert" aria-live="assertive"' +
882
+ ' class="select2-results__option"></li>'
883
+ );
884
+
885
+ var message = this.options.get('translations').get(params.message);
886
+
887
+ $message.append(
888
+ escapeMarkup(
889
+ message(params.args)
890
+ )
891
+ );
892
+
893
+ $message[0].className += ' select2-results__message';
894
+
895
+ this.$results.append($message);
896
+ };
897
+
898
+ Results.prototype.hideMessages = function () {
899
+ this.$results.find('.select2-results__message').remove();
900
+ };
901
+
902
+ Results.prototype.append = function (data) {
903
+ this.hideLoading();
904
+
905
+ var $options = [];
906
+
907
+ if (data.results == null || data.results.length === 0) {
908
+ if (this.$results.children().length === 0) {
909
+ this.trigger('results:message', {
910
+ message: 'noResults'
911
+ });
912
+ }
913
+
914
+ return;
915
+ }
916
+
917
+ data.results = this.sort(data.results);
918
+
919
+ for (var d = 0; d < data.results.length; d++) {
920
+ var item = data.results[d];
921
+
922
+ var $option = this.option(item);
923
+
924
+ $options.push($option);
925
+ }
926
+
927
+ this.$results.append($options);
928
+ };
929
+
930
+ Results.prototype.position = function ($results, $dropdown) {
931
+ var $resultsContainer = $dropdown.find('.select2-results');
932
+ $resultsContainer.append($results);
933
+ };
934
+
935
+ Results.prototype.sort = function (data) {
936
+ var sorter = this.options.get('sorter');
937
+
938
+ return sorter(data);
939
+ };
940
+
941
+ Results.prototype.highlightFirstItem = function () {
942
+ var $options = this.$results
943
+ .find('.select2-results__option[aria-selected]');
944
+
945
+ var $selected = $options.filter('[aria-selected=true]');
946
+
947
+ // Check if there are any selected options
948
+ if ($selected.length > 0) {
949
+ // If there are selected options, highlight the first
950
+ $selected.first().trigger('mouseenter');
951
+ } else {
952
+ // If there are no selected options, highlight the first option
953
+ // in the dropdown
954
+ $options.first().trigger('mouseenter');
955
+ }
956
+
957
+ this.ensureHighlightVisible();
958
+ };
959
+
960
+ Results.prototype.setClasses = function () {
961
+ var self = this;
962
+
963
+ this.data.current(function (selected) {
964
+ var selectedIds = $.map(selected, function (s) {
965
+ return s.id.toString();
966
+ });
967
+
968
+ var $options = self.$results
969
+ .find('.select2-results__option[aria-selected]');
970
+
971
+ $options.each(function () {
972
+ var $option = $(this);
973
+
974
+ var item = Utils.GetData(this, 'data');
975
+
976
+ // id needs to be converted to a string when comparing
977
+ var id = '' + item.id;
978
+
979
+ if ((item.element != null && item.element.selected) ||
980
+ (item.element == null && $.inArray(id, selectedIds) > -1)) {
981
+ $option.attr('aria-selected', 'true');
982
+ } else {
983
+ $option.attr('aria-selected', 'false');
984
+ }
985
+ });
986
+
987
+ });
988
+ };
989
+
990
+ Results.prototype.showLoading = function (params) {
991
+ this.hideLoading();
992
+
993
+ var loadingMore = this.options.get('translations').get('searching');
994
+
995
+ var loading = {
996
+ disabled: true,
997
+ loading: true,
998
+ text: loadingMore(params)
999
+ };
1000
+ var $loading = this.option(loading);
1001
+ $loading.className += ' loading-results';
1002
+
1003
+ this.$results.prepend($loading);
1004
+ };
1005
+
1006
+ Results.prototype.hideLoading = function () {
1007
+ this.$results.find('.loading-results').remove();
1008
+ };
1009
+
1010
+ Results.prototype.option = function (data) {
1011
+ var option = document.createElement('li');
1012
+ option.className = 'select2-results__option';
1013
+
1014
+ var attrs = {
1015
+ 'role': 'option',
1016
+ 'aria-selected': 'false'
1017
+ };
1018
+
1019
+ var matches = window.Element.prototype.matches ||
1020
+ window.Element.prototype.msMatchesSelector ||
1021
+ window.Element.prototype.webkitMatchesSelector;
1022
+
1023
+ if ((data.element != null && matches.call(data.element, ':disabled')) ||
1024
+ (data.element == null && data.disabled)) {
1025
+ delete attrs['aria-selected'];
1026
+ attrs['aria-disabled'] = 'true';
1027
+ }
1028
+
1029
+ if (data.id == null) {
1030
+ delete attrs['aria-selected'];
1031
+ }
1032
+
1033
+ if (data._resultId != null) {
1034
+ option.id = data._resultId;
1035
+ }
1036
+
1037
+ if (data.title) {
1038
+ option.title = data.title;
1039
+ }
1040
+
1041
+ if (data.children) {
1042
+ attrs.role = 'group';
1043
+ attrs['aria-label'] = data.text;
1044
+ delete attrs['aria-selected'];
1045
+ }
1046
+
1047
+ for (var attr in attrs) {
1048
+ var val = attrs[attr];
1049
+
1050
+ option.setAttribute(attr, val);
1051
+ }
1052
+
1053
+ if (data.children) {
1054
+ var $option = $(option);
1055
+
1056
+ var label = document.createElement('strong');
1057
+ label.className = 'select2-results__group';
1058
+
1059
+ var $label = $(label);
1060
+ this.template(data, label);
1061
+
1062
+ var $children = [];
1063
+
1064
+ for (var c = 0; c < data.children.length; c++) {
1065
+ var child = data.children[c];
1066
+
1067
+ var $child = this.option(child);
1068
+
1069
+ $children.push($child);
1070
+ }
1071
+
1072
+ var $childrenContainer = $('<ul></ul>', {
1073
+ 'class': 'select2-results__options select2-results__options--nested'
1074
+ });
1075
+
1076
+ $childrenContainer.append($children);
1077
+
1078
+ $option.append(label);
1079
+ $option.append($childrenContainer);
1080
+ } else {
1081
+ this.template(data, option);
1082
+ }
1083
+
1084
+ Utils.StoreData(option, 'data', data);
1085
+
1086
+ return option;
1087
+ };
1088
+
1089
+ Results.prototype.bind = function (container, $container) {
1090
+ var self = this;
1091
+
1092
+ var id = container.id + '-results';
1093
+
1094
+ this.$results.attr('id', id);
1095
+
1096
+ container.on('results:all', function (params) {
1097
+ self.clear();
1098
+ self.append(params.data);
1099
+
1100
+ if (container.isOpen()) {
1101
+ self.setClasses();
1102
+ self.highlightFirstItem();
1103
+ }
1104
+ });
1105
+
1106
+ container.on('results:append', function (params) {
1107
+ self.append(params.data);
1108
+
1109
+ if (container.isOpen()) {
1110
+ self.setClasses();
1111
+ }
1112
+ });
1113
+
1114
+ container.on('query', function (params) {
1115
+ self.hideMessages();
1116
+ self.showLoading(params);
1117
+ });
1118
+
1119
+ container.on('select', function () {
1120
+ if (!container.isOpen()) {
1121
+ return;
1122
+ }
1123
+
1124
+ self.setClasses();
1125
+
1126
+ if (self.options.get('scrollAfterSelect')) {
1127
+ self.highlightFirstItem();
1128
+ }
1129
+ });
1130
+
1131
+ container.on('unselect', function () {
1132
+ if (!container.isOpen()) {
1133
+ return;
1134
+ }
1135
+
1136
+ self.setClasses();
1137
+
1138
+ if (self.options.get('scrollAfterSelect')) {
1139
+ self.highlightFirstItem();
1140
+ }
1141
+ });
1142
+
1143
+ container.on('open', function () {
1144
+ // When the dropdown is open, aria-expended="true"
1145
+ self.$results.attr('aria-expanded', 'true');
1146
+ self.$results.attr('aria-hidden', 'false');
1147
+
1148
+ self.setClasses();
1149
+ self.ensureHighlightVisible();
1150
+ });
1151
+
1152
+ container.on('close', function () {
1153
+ // When the dropdown is closed, aria-expended="false"
1154
+ self.$results.attr('aria-expanded', 'false');
1155
+ self.$results.attr('aria-hidden', 'true');
1156
+ self.$results.removeAttr('aria-activedescendant');
1157
+ });
1158
+
1159
+ container.on('results:toggle', function () {
1160
+ var $highlighted = self.getHighlightedResults();
1161
+
1162
+ if ($highlighted.length === 0) {
1163
+ return;
1164
+ }
1165
+
1166
+ $highlighted.trigger('mouseup');
1167
+ });
1168
+
1169
+ container.on('results:select', function () {
1170
+ var $highlighted = self.getHighlightedResults();
1171
+
1172
+ if ($highlighted.length === 0) {
1173
+ return;
1174
+ }
1175
+
1176
+ var data = Utils.GetData($highlighted[0], 'data');
1177
+
1178
+ if ($highlighted.attr('aria-selected') == 'true') {
1179
+ self.trigger('close', {});
1180
+ } else {
1181
+ self.trigger('select', {
1182
+ data: data
1183
+ });
1184
+ }
1185
+ });
1186
+
1187
+ container.on('results:previous', function () {
1188
+ var $highlighted = self.getHighlightedResults();
1189
+
1190
+ var $options = self.$results.find('[aria-selected]');
1191
+
1192
+ var currentIndex = $options.index($highlighted);
1193
+
1194
+ // If we are already at the top, don't move further
1195
+ // If no options, currentIndex will be -1
1196
+ if (currentIndex <= 0) {
1197
+ return;
1198
+ }
1199
+
1200
+ var nextIndex = currentIndex - 1;
1201
+
1202
+ // If none are highlighted, highlight the first
1203
+ if ($highlighted.length === 0) {
1204
+ nextIndex = 0;
1205
+ }
1206
+
1207
+ var $next = $options.eq(nextIndex);
1208
+
1209
+ $next.trigger('mouseenter');
1210
+
1211
+ var currentOffset = self.$results.offset().top;
1212
+ var nextTop = $next.offset().top;
1213
+ var nextOffset = self.$results.scrollTop() + (nextTop - currentOffset);
1214
+
1215
+ if (nextIndex === 0) {
1216
+ self.$results.scrollTop(0);
1217
+ } else if (nextTop - currentOffset < 0) {
1218
+ self.$results.scrollTop(nextOffset);
1219
+ }
1220
+ });
1221
+
1222
+ container.on('results:next', function () {
1223
+ var $highlighted = self.getHighlightedResults();
1224
+
1225
+ var $options = self.$results.find('[aria-selected]');
1226
+
1227
+ var currentIndex = $options.index($highlighted);
1228
+
1229
+ var nextIndex = currentIndex + 1;
1230
+
1231
+ // If we are at the last option, stay there
1232
+ if (nextIndex >= $options.length) {
1233
+ return;
1234
+ }
1235
+
1236
+ var $next = $options.eq(nextIndex);
1237
+
1238
+ $next.trigger('mouseenter');
1239
+
1240
+ var currentOffset = self.$results.offset().top +
1241
+ self.$results.outerHeight(false);
1242
+ var nextBottom = $next.offset().top + $next.outerHeight(false);
1243
+ var nextOffset = self.$results.scrollTop() + nextBottom - currentOffset;
1244
+
1245
+ if (nextIndex === 0) {
1246
+ self.$results.scrollTop(0);
1247
+ } else if (nextBottom > currentOffset) {
1248
+ self.$results.scrollTop(nextOffset);
1249
+ }
1250
+ });
1251
+
1252
+ container.on('results:focus', function (params) {
1253
+ params.element.addClass('select2-results__option--highlighted');
1254
+ });
1255
+
1256
+ container.on('results:message', function (params) {
1257
+ self.displayMessage(params);
1258
+ });
1259
+
1260
+ if ($.fn.mousewheel) {
1261
+ this.$results.on('mousewheel', function (e) {
1262
+ var top = self.$results.scrollTop();
1263
+
1264
+ var bottom = self.$results.get(0).scrollHeight - top + e.deltaY;
1265
+
1266
+ var isAtTop = e.deltaY > 0 && top - e.deltaY <= 0;
1267
+ var isAtBottom = e.deltaY < 0 && bottom <= self.$results.height();
1268
+
1269
+ if (isAtTop) {
1270
+ self.$results.scrollTop(0);
1271
+
1272
+ e.preventDefault();
1273
+ e.stopPropagation();
1274
+ } else if (isAtBottom) {
1275
+ self.$results.scrollTop(
1276
+ self.$results.get(0).scrollHeight - self.$results.height()
1277
+ );
1278
+
1279
+ e.preventDefault();
1280
+ e.stopPropagation();
1281
+ }
1282
+ });
1283
+ }
1284
+
1285
+ this.$results.on('mouseup', '.select2-results__option[aria-selected]',
1286
+ function (evt) {
1287
+ var $this = $(this);
1288
+
1289
+ var data = Utils.GetData(this, 'data');
1290
+
1291
+ if ($this.attr('aria-selected') === 'true') {
1292
+ if (self.options.get('multiple')) {
1293
+ self.trigger('unselect', {
1294
+ originalEvent: evt,
1295
+ data: data
1296
+ });
1297
+ } else {
1298
+ self.trigger('close', {});
1299
+ }
1300
+
1301
+ return;
1302
+ }
1303
+
1304
+ self.trigger('select', {
1305
+ originalEvent: evt,
1306
+ data: data
1307
+ });
1308
+ });
1309
+
1310
+ this.$results.on('mouseenter', '.select2-results__option[aria-selected]',
1311
+ function (evt) {
1312
+ var data = Utils.GetData(this, 'data');
1313
+
1314
+ self.getHighlightedResults()
1315
+ .removeClass('select2-results__option--highlighted');
1316
+
1317
+ self.trigger('results:focus', {
1318
+ data: data,
1319
+ element: $(this)
1320
+ });
1321
+ });
1322
+ };
1323
+
1324
+ Results.prototype.getHighlightedResults = function () {
1325
+ var $highlighted = this.$results
1326
+ .find('.select2-results__option--highlighted');
1327
+
1328
+ return $highlighted;
1329
+ };
1330
+
1331
+ Results.prototype.destroy = function () {
1332
+ this.$results.remove();
1333
+ };
1334
+
1335
+ Results.prototype.ensureHighlightVisible = function () {
1336
+ var $highlighted = this.getHighlightedResults();
1337
+
1338
+ if ($highlighted.length === 0) {
1339
+ return;
1340
+ }
1341
+
1342
+ var $options = this.$results.find('[aria-selected]');
1343
+
1344
+ var currentIndex = $options.index($highlighted);
1345
+
1346
+ var currentOffset = this.$results.offset().top;
1347
+ var nextTop = $highlighted.offset().top;
1348
+ var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);
1349
+
1350
+ var offsetDelta = nextTop - currentOffset;
1351
+ nextOffset -= $highlighted.outerHeight(false) * 2;
1352
+
1353
+ if (currentIndex <= 2) {
1354
+ this.$results.scrollTop(0);
1355
+ } else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {
1356
+ this.$results.scrollTop(nextOffset);
1357
+ }
1358
+ };
1359
+
1360
+ Results.prototype.template = function (result, container) {
1361
+ var template = this.options.get('templateResult');
1362
+ var escapeMarkup = this.options.get('escapeMarkup');
1363
+
1364
+ var content = template(result, container);
1365
+
1366
+ if (content == null) {
1367
+ container.style.display = 'none';
1368
+ } else if (typeof content === 'string') {
1369
+ container.innerHTML = escapeMarkup(content);
1370
+ } else {
1371
+ $(container).append(content);
1372
+ }
1373
+ };
1374
+
1375
+ return Results;
1376
+ });
1377
+
1378
+ S2.define('select2/keys',[
1379
+
1380
+ ], function () {
1381
+ var KEYS = {
1382
+ BACKSPACE: 8,
1383
+ TAB: 9,
1384
+ ENTER: 13,
1385
+ SHIFT: 16,
1386
+ CTRL: 17,
1387
+ ALT: 18,
1388
+ ESC: 27,
1389
+ SPACE: 32,
1390
+ PAGE_UP: 33,
1391
+ PAGE_DOWN: 34,
1392
+ END: 35,
1393
+ HOME: 36,
1394
+ LEFT: 37,
1395
+ UP: 38,
1396
+ RIGHT: 39,
1397
+ DOWN: 40,
1398
+ DELETE: 46
1399
+ };
1400
+
1401
+ return KEYS;
1402
+ });
1403
+
1404
+ S2.define('select2/selection/base',[
1405
+ 'jquery',
1406
+ '../utils',
1407
+ '../keys'
1408
+ ], function ($, Utils, KEYS) {
1409
+ function BaseSelection ($element, options) {
1410
+ this.$element = $element;
1411
+ this.options = options;
1412
+
1413
+ BaseSelection.__super__.constructor.call(this);
1414
+ }
1415
+
1416
+ Utils.Extend(BaseSelection, Utils.Observable);
1417
+
1418
+ BaseSelection.prototype.render = function () {
1419
+ var $selection = $(
1420
+ '<span class="select2-selection" role="combobox" ' +
1421
+ ' aria-haspopup="true" aria-expanded="false">' +
1422
+ '</span>'
1423
+ );
1424
+
1425
+ this._tabindex = 0;
1426
+
1427
+ if (Utils.GetData(this.$element[0], 'old-tabindex') != null) {
1428
+ this._tabindex = Utils.GetData(this.$element[0], 'old-tabindex');
1429
+ } else if (this.$element.attr('tabindex') != null) {
1430
+ this._tabindex = this.$element.attr('tabindex');
1431
+ }
1432
+
1433
+ $selection.attr('title', this.$element.attr('title'));
1434
+ $selection.attr('tabindex', this._tabindex);
1435
+ $selection.attr('aria-disabled', 'false');
1436
+
1437
+ this.$selection = $selection;
1438
+
1439
+ return $selection;
1440
+ };
1441
+
1442
+ BaseSelection.prototype.bind = function (container, $container) {
1443
+ var self = this;
1444
+
1445
+ var resultsId = container.id + '-results';
1446
+
1447
+ this.container = container;
1448
+
1449
+ this.$selection.on('focus', function (evt) {
1450
+ self.trigger('focus', evt);
1451
+ });
1452
+
1453
+ this.$selection.on('blur', function (evt) {
1454
+ self._handleBlur(evt);
1455
+ });
1456
+
1457
+ this.$selection.on('keydown', function (evt) {
1458
+ self.trigger('keypress', evt);
1459
+
1460
+ if (evt.which === KEYS.SPACE) {
1461
+ evt.preventDefault();
1462
+ }
1463
+ });
1464
+
1465
+ container.on('results:focus', function (params) {
1466
+ self.$selection.attr('aria-activedescendant', params.data._resultId);
1467
+ });
1468
+
1469
+ container.on('selection:update', function (params) {
1470
+ self.update(params.data);
1471
+ });
1472
+
1473
+ container.on('open', function () {
1474
+ // When the dropdown is open, aria-expanded="true"
1475
+ self.$selection.attr('aria-expanded', 'true');
1476
+ self.$selection.attr('aria-owns', resultsId);
1477
+
1478
+ self._attachCloseHandler(container);
1479
+ });
1480
+
1481
+ container.on('close', function () {
1482
+ // When the dropdown is closed, aria-expanded="false"
1483
+ self.$selection.attr('aria-expanded', 'false');
1484
+ self.$selection.removeAttr('aria-activedescendant');
1485
+ self.$selection.removeAttr('aria-owns');
1486
+
1487
+ self.$selection.trigger('focus');
1488
+
1489
+ self._detachCloseHandler(container);
1490
+ });
1491
+
1492
+ container.on('enable', function () {
1493
+ self.$selection.attr('tabindex', self._tabindex);
1494
+ self.$selection.attr('aria-disabled', 'false');
1495
+ });
1496
+
1497
+ container.on('disable', function () {
1498
+ self.$selection.attr('tabindex', '-1');
1499
+ self.$selection.attr('aria-disabled', 'true');
1500
+ });
1501
+ };
1502
+
1503
+ BaseSelection.prototype._handleBlur = function (evt) {
1504
+ var self = this;
1505
+
1506
+ // This needs to be delayed as the active element is the body when the tab
1507
+ // key is pressed, possibly along with others.
1508
+ window.setTimeout(function () {
1509
+ // Don't trigger `blur` if the focus is still in the selection
1510
+ if (
1511
+ (document.activeElement == self.$selection[0]) ||
1512
+ ($.contains(self.$selection[0], document.activeElement))
1513
+ ) {
1514
+ return;
1515
+ }
1516
+
1517
+ self.trigger('blur', evt);
1518
+ }, 1);
1519
+ };
1520
+
1521
+ BaseSelection.prototype._attachCloseHandler = function (container) {
1522
+
1523
+ $(document.body).on('mousedown.select2.' + container.id, function (e) {
1524
+ var $target = $(e.target);
1525
+
1526
+ var $select = $target.closest('.select2');
1527
+
1528
+ var $all = $('.select2.select2-container--open');
1529
+
1530
+ $all.each(function () {
1531
+ if (this == $select[0]) {
1532
+ return;
1533
+ }
1534
+
1535
+ var $element = Utils.GetData(this, 'element');
1536
+
1537
+ $element.select2('close');
1538
+ });
1539
+ });
1540
+ };
1541
+
1542
+ BaseSelection.prototype._detachCloseHandler = function (container) {
1543
+ $(document.body).off('mousedown.select2.' + container.id);
1544
+ };
1545
+
1546
+ BaseSelection.prototype.position = function ($selection, $container) {
1547
+ var $selectionContainer = $container.find('.selection');
1548
+ $selectionContainer.append($selection);
1549
+ };
1550
+
1551
+ BaseSelection.prototype.destroy = function () {
1552
+ this._detachCloseHandler(this.container);
1553
+ };
1554
+
1555
+ BaseSelection.prototype.update = function (data) {
1556
+ throw new Error('The `update` method must be defined in child classes.');
1557
+ };
1558
+
1559
+ /**
1560
+ * Helper method to abstract the "enabled" (not "disabled") state of this
1561
+ * object.
1562
+ *
1563
+ * @return {true} if the instance is not disabled.
1564
+ * @return {false} if the instance is disabled.
1565
+ */
1566
+ BaseSelection.prototype.isEnabled = function () {
1567
+ return !this.isDisabled();
1568
+ };
1569
+
1570
+ /**
1571
+ * Helper method to abstract the "disabled" state of this object.
1572
+ *
1573
+ * @return {true} if the disabled option is true.
1574
+ * @return {false} if the disabled option is false.
1575
+ */
1576
+ BaseSelection.prototype.isDisabled = function () {
1577
+ return this.options.get('disabled');
1578
+ };
1579
+
1580
+ return BaseSelection;
1581
+ });
1582
+
1583
+ S2.define('select2/selection/single',[
1584
+ 'jquery',
1585
+ './base',
1586
+ '../utils',
1587
+ '../keys'
1588
+ ], function ($, BaseSelection, Utils, KEYS) {
1589
+ function SingleSelection () {
1590
+ SingleSelection.__super__.constructor.apply(this, arguments);
1591
+ }
1592
+
1593
+ Utils.Extend(SingleSelection, BaseSelection);
1594
+
1595
+ SingleSelection.prototype.render = function () {
1596
+ var $selection = SingleSelection.__super__.render.call(this);
1597
+
1598
+ $selection.addClass('select2-selection--single');
1599
+
1600
+ $selection.html(
1601
+ '<span class="select2-selection__rendered"></span>' +
1602
+ '<span class="select2-selection__arrow" role="presentation">' +
1603
+ '<b role="presentation"></b>' +
1604
+ '</span>'
1605
+ );
1606
+
1607
+ return $selection;
1608
+ };
1609
+
1610
+ SingleSelection.prototype.bind = function (container, $container) {
1611
+ var self = this;
1612
+
1613
+ SingleSelection.__super__.bind.apply(this, arguments);
1614
+
1615
+ var id = container.id + '-container';
1616
+
1617
+ this.$selection.find('.select2-selection__rendered')
1618
+ .attr('id', id)
1619
+ .attr('role', 'textbox')
1620
+ .attr('aria-readonly', 'true');
1621
+ this.$selection.attr('aria-labelledby', id);
1622
+
1623
+ this.$selection.on('mousedown', function (evt) {
1624
+ // Only respond to left clicks
1625
+ if (evt.which !== 1) {
1626
+ return;
1627
+ }
1628
+
1629
+ self.trigger('toggle', {
1630
+ originalEvent: evt
1631
+ });
1632
+ });
1633
+
1634
+ this.$selection.on('focus', function (evt) {
1635
+ // User focuses on the container
1636
+ });
1637
+
1638
+ this.$selection.on('blur', function (evt) {
1639
+ // User exits the container
1640
+ });
1641
+
1642
+ container.on('focus', function (evt) {
1643
+ if (!container.isOpen()) {
1644
+ self.$selection.trigger('focus');
1645
+ }
1646
+ });
1647
+ };
1648
+
1649
+ SingleSelection.prototype.clear = function () {
1650
+ var $rendered = this.$selection.find('.select2-selection__rendered');
1651
+ $rendered.empty();
1652
+ $rendered.removeAttr('title'); // clear tooltip on empty
1653
+ };
1654
+
1655
+ SingleSelection.prototype.display = function (data, container) {
1656
+ var template = this.options.get('templateSelection');
1657
+ var escapeMarkup = this.options.get('escapeMarkup');
1658
+
1659
+ return escapeMarkup(template(data, container));
1660
+ };
1661
+
1662
+ SingleSelection.prototype.selectionContainer = function () {
1663
+ return $('<span></span>');
1664
+ };
1665
+
1666
+ SingleSelection.prototype.update = function (data) {
1667
+ if (data.length === 0) {
1668
+ this.clear();
1669
+ return;
1670
+ }
1671
+
1672
+ var selection = data[0];
1673
+
1674
+ var $rendered = this.$selection.find('.select2-selection__rendered');
1675
+ var formatted = this.display(selection, $rendered);
1676
+
1677
+ $rendered.empty().append(formatted);
1678
+
1679
+ var title = selection.title || selection.text;
1680
+
1681
+ if (title) {
1682
+ $rendered.attr('title', title);
1683
+ } else {
1684
+ $rendered.removeAttr('title');
1685
+ }
1686
+ };
1687
+
1688
+ return SingleSelection;
1689
+ });
1690
+
1691
+ S2.define('select2/selection/multiple',[
1692
+ 'jquery',
1693
+ './base',
1694
+ '../utils'
1695
+ ], function ($, BaseSelection, Utils) {
1696
+ function MultipleSelection ($element, options) {
1697
+ MultipleSelection.__super__.constructor.apply(this, arguments);
1698
+ }
1699
+
1700
+ Utils.Extend(MultipleSelection, BaseSelection);
1701
+
1702
+ MultipleSelection.prototype.render = function () {
1703
+ var $selection = MultipleSelection.__super__.render.call(this);
1704
+
1705
+ $selection.addClass('select2-selection--multiple');
1706
+
1707
+ $selection.html(
1708
+ '<ul class="select2-selection__rendered"></ul>'
1709
+ );
1710
+
1711
+ return $selection;
1712
+ };
1713
+
1714
+ MultipleSelection.prototype.bind = function (container, $container) {
1715
+ var self = this;
1716
+
1717
+ MultipleSelection.__super__.bind.apply(this, arguments);
1718
+
1719
+ this.$selection.on('click', function (evt) {
1720
+ self.trigger('toggle', {
1721
+ originalEvent: evt
1722
+ });
1723
+ });
1724
+
1725
+ this.$selection.on(
1726
+ 'click',
1727
+ '.select2-selection__choice__remove',
1728
+ function (evt) {
1729
+ // Ignore the event if it is disabled
1730
+ if (self.isDisabled()) {
1731
+ return;
1732
+ }
1733
+
1734
+ var $remove = $(this);
1735
+ var $selection = $remove.parent();
1736
+
1737
+ var data = Utils.GetData($selection[0], 'data');
1738
+
1739
+ self.trigger('unselect', {
1740
+ originalEvent: evt,
1741
+ data: data
1742
+ });
1743
+ }
1744
+ );
1745
+ };
1746
+
1747
+ MultipleSelection.prototype.clear = function () {
1748
+ var $rendered = this.$selection.find('.select2-selection__rendered');
1749
+ $rendered.empty();
1750
+ $rendered.removeAttr('title');
1751
+ };
1752
+
1753
+ MultipleSelection.prototype.display = function (data, container) {
1754
+ var template = this.options.get('templateSelection');
1755
+ var escapeMarkup = this.options.get('escapeMarkup');
1756
+
1757
+ return escapeMarkup(template(data, container));
1758
+ };
1759
+
1760
+ MultipleSelection.prototype.selectionContainer = function () {
1761
+ var $container = $(
1762
+ '<li class="select2-selection__choice">' +
1763
+ '<span class="select2-selection__choice__remove" role="presentation">' +
1764
+ '&times;' +
1765
+ '</span>' +
1766
+ '</li>'
1767
+ );
1768
+
1769
+ return $container;
1770
+ };
1771
+
1772
+ MultipleSelection.prototype.update = function (data) {
1773
+ this.clear();
1774
+
1775
+ if (data.length === 0) {
1776
+ return;
1777
+ }
1778
+
1779
+ var $selections = [];
1780
+
1781
+ for (var d = 0; d < data.length; d++) {
1782
+ var selection = data[d];
1783
+
1784
+ var $selection = this.selectionContainer();
1785
+ var formatted = this.display(selection, $selection);
1786
+
1787
+ $selection.append(formatted);
1788
+
1789
+ var title = selection.title || selection.text;
1790
+
1791
+ if (title) {
1792
+ $selection.attr('title', title);
1793
+ }
1794
+
1795
+ Utils.StoreData($selection[0], 'data', selection);
1796
+
1797
+ $selections.push($selection);
1798
+ }
1799
+
1800
+ var $rendered = this.$selection.find('.select2-selection__rendered');
1801
+
1802
+ Utils.appendMany($rendered, $selections);
1803
+ };
1804
+
1805
+ return MultipleSelection;
1806
+ });
1807
+
1808
+ S2.define('select2/selection/placeholder',[
1809
+ '../utils'
1810
+ ], function (Utils) {
1811
+ function Placeholder (decorated, $element, options) {
1812
+ this.placeholder = this.normalizePlaceholder(options.get('placeholder'));
1813
+
1814
+ decorated.call(this, $element, options);
1815
+ }
1816
+
1817
+ Placeholder.prototype.normalizePlaceholder = function (_, placeholder) {
1818
+ if (typeof placeholder === 'string') {
1819
+ placeholder = {
1820
+ id: '',
1821
+ text: placeholder
1822
+ };
1823
+ }
1824
+
1825
+ return placeholder;
1826
+ };
1827
+
1828
+ Placeholder.prototype.createPlaceholder = function (decorated, placeholder) {
1829
+ var $placeholder = this.selectionContainer();
1830
+
1831
+ $placeholder.html(this.display(placeholder));
1832
+ $placeholder.addClass('select2-selection__placeholder')
1833
+ .removeClass('select2-selection__choice');
1834
+
1835
+ return $placeholder;
1836
+ };
1837
+
1838
+ Placeholder.prototype.update = function (decorated, data) {
1839
+ var singlePlaceholder = (
1840
+ data.length == 1 && data[0].id != this.placeholder.id
1841
+ );
1842
+ var multipleSelections = data.length > 1;
1843
+
1844
+ if (multipleSelections || singlePlaceholder) {
1845
+ return decorated.call(this, data);
1846
+ }
1847
+
1848
+ this.clear();
1849
+
1850
+ var $placeholder = this.createPlaceholder(this.placeholder);
1851
+
1852
+ this.$selection.find('.select2-selection__rendered').append($placeholder);
1853
+ };
1854
+
1855
+ return Placeholder;
1856
+ });
1857
+
1858
+ S2.define('select2/selection/allowClear',[
1859
+ 'jquery',
1860
+ '../keys',
1861
+ '../utils'
1862
+ ], function ($, KEYS, Utils) {
1863
+ function AllowClear () { }
1864
+
1865
+ AllowClear.prototype.bind = function (decorated, container, $container) {
1866
+ var self = this;
1867
+
1868
+ decorated.call(this, container, $container);
1869
+
1870
+ if (this.placeholder == null) {
1871
+ if (this.options.get('debug') && window.console && console.error) {
1872
+ console.error(
1873
+ 'Select2: The `allowClear` option should be used in combination ' +
1874
+ 'with the `placeholder` option.'
1875
+ );
1876
+ }
1877
+ }
1878
+
1879
+ this.$selection.on('mousedown', '.select2-selection__clear',
1880
+ function (evt) {
1881
+ self._handleClear(evt);
1882
+ });
1883
+
1884
+ container.on('keypress', function (evt) {
1885
+ self._handleKeyboardClear(evt, container);
1886
+ });
1887
+ };
1888
+
1889
+ AllowClear.prototype._handleClear = function (_, evt) {
1890
+ // Ignore the event if it is disabled
1891
+ if (this.isDisabled()) {
1892
+ return;
1893
+ }
1894
+
1895
+ var $clear = this.$selection.find('.select2-selection__clear');
1896
+
1897
+ // Ignore the event if nothing has been selected
1898
+ if ($clear.length === 0) {
1899
+ return;
1900
+ }
1901
+
1902
+ evt.stopPropagation();
1903
+
1904
+ var data = Utils.GetData($clear[0], 'data');
1905
+
1906
+ var previousVal = this.$element.val();
1907
+ this.$element.val(this.placeholder.id);
1908
+
1909
+ var unselectData = {
1910
+ data: data
1911
+ };
1912
+ this.trigger('clear', unselectData);
1913
+ if (unselectData.prevented) {
1914
+ this.$element.val(previousVal);
1915
+ return;
1916
+ }
1917
+
1918
+ for (var d = 0; d < data.length; d++) {
1919
+ unselectData = {
1920
+ data: data[d]
1921
+ };
1922
+
1923
+ // Trigger the `unselect` event, so people can prevent it from being
1924
+ // cleared.
1925
+ this.trigger('unselect', unselectData);
1926
+
1927
+ // If the event was prevented, don't clear it out.
1928
+ if (unselectData.prevented) {
1929
+ this.$element.val(previousVal);
1930
+ return;
1931
+ }
1932
+ }
1933
+
1934
+ this.$element.trigger('input').trigger('change');
1935
+
1936
+ this.trigger('toggle', {});
1937
+ };
1938
+
1939
+ AllowClear.prototype._handleKeyboardClear = function (_, evt, container) {
1940
+ if (container.isOpen()) {
1941
+ return;
1942
+ }
1943
+
1944
+ if (evt.which == KEYS.DELETE || evt.which == KEYS.BACKSPACE) {
1945
+ this._handleClear(evt);
1946
+ }
1947
+ };
1948
+
1949
+ AllowClear.prototype.update = function (decorated, data) {
1950
+ decorated.call(this, data);
1951
+
1952
+ if (this.$selection.find('.select2-selection__placeholder').length > 0 ||
1953
+ data.length === 0) {
1954
+ return;
1955
+ }
1956
+
1957
+ var removeAll = this.options.get('translations').get('removeAllItems');
1958
+
1959
+ var $remove = $(
1960
+ '<span class="select2-selection__clear" title="' + removeAll() +'">' +
1961
+ '&times;' +
1962
+ '</span>'
1963
+ );
1964
+ Utils.StoreData($remove[0], 'data', data);
1965
+
1966
+ this.$selection.find('.select2-selection__rendered').prepend($remove);
1967
+ };
1968
+
1969
+ return AllowClear;
1970
+ });
1971
+
1972
+ S2.define('select2/selection/search',[
1973
+ 'jquery',
1974
+ '../utils',
1975
+ '../keys'
1976
+ ], function ($, Utils, KEYS) {
1977
+ function Search (decorated, $element, options) {
1978
+ decorated.call(this, $element, options);
1979
+ }
1980
+
1981
+ Search.prototype.render = function (decorated) {
1982
+ var $search = $(
1983
+ '<li class="select2-search select2-search--inline">' +
1984
+ '<input class="select2-search__field" type="search" tabindex="-1"' +
1985
+ ' autocomplete="off" autocorrect="off" autocapitalize="none"' +
1986
+ ' spellcheck="false" role="searchbox" aria-autocomplete="list" />' +
1987
+ '</li>'
1988
+ );
1989
+
1990
+ this.$searchContainer = $search;
1991
+ this.$search = $search.find('input');
1992
+
1993
+ var $rendered = decorated.call(this);
1994
+
1995
+ this._transferTabIndex();
1996
+
1997
+ return $rendered;
1998
+ };
1999
+
2000
+ Search.prototype.bind = function (decorated, container, $container) {
2001
+ var self = this;
2002
+
2003
+ var resultsId = container.id + '-results';
2004
+
2005
+ decorated.call(this, container, $container);
2006
+
2007
+ container.on('open', function () {
2008
+ self.$search.attr('aria-controls', resultsId);
2009
+ self.$search.trigger('focus');
2010
+ });
2011
+
2012
+ container.on('close', function () {
2013
+ self.$search.val('');
2014
+ self.$search.removeAttr('aria-controls');
2015
+ self.$search.removeAttr('aria-activedescendant');
2016
+ self.$search.trigger('focus');
2017
+ });
2018
+
2019
+ container.on('enable', function () {
2020
+ self.$search.prop('disabled', false);
2021
+
2022
+ self._transferTabIndex();
2023
+ });
2024
+
2025
+ container.on('disable', function () {
2026
+ self.$search.prop('disabled', true);
2027
+ });
2028
+
2029
+ container.on('focus', function (evt) {
2030
+ self.$search.trigger('focus');
2031
+ });
2032
+
2033
+ container.on('results:focus', function (params) {
2034
+ if (params.data._resultId) {
2035
+ self.$search.attr('aria-activedescendant', params.data._resultId);
2036
+ } else {
2037
+ self.$search.removeAttr('aria-activedescendant');
2038
+ }
2039
+ });
2040
+
2041
+ this.$selection.on('focusin', '.select2-search--inline', function (evt) {
2042
+ self.trigger('focus', evt);
2043
+ });
2044
+
2045
+ this.$selection.on('focusout', '.select2-search--inline', function (evt) {
2046
+ self._handleBlur(evt);
2047
+ });
2048
+
2049
+ this.$selection.on('keydown', '.select2-search--inline', function (evt) {
2050
+ evt.stopPropagation();
2051
+
2052
+ self.trigger('keypress', evt);
2053
+
2054
+ self._keyUpPrevented = evt.isDefaultPrevented();
2055
+
2056
+ var key = evt.which;
2057
+
2058
+ if (key === KEYS.BACKSPACE && self.$search.val() === '') {
2059
+ var $previousChoice = self.$searchContainer
2060
+ .prev('.select2-selection__choice');
2061
+
2062
+ if ($previousChoice.length > 0) {
2063
+ var item = Utils.GetData($previousChoice[0], 'data');
2064
+
2065
+ self.searchRemoveChoice(item);
2066
+
2067
+ evt.preventDefault();
2068
+ }
2069
+ }
2070
+ });
2071
+
2072
+ this.$selection.on('click', '.select2-search--inline', function (evt) {
2073
+ if (self.$search.val()) {
2074
+ evt.stopPropagation();
2075
+ }
2076
+ });
2077
+
2078
+ // Try to detect the IE version should the `documentMode` property that
2079
+ // is stored on the document. This is only implemented in IE and is
2080
+ // slightly cleaner than doing a user agent check.
2081
+ // This property is not available in Edge, but Edge also doesn't have
2082
+ // this bug.
2083
+ var msie = document.documentMode;
2084
+ var disableInputEvents = msie && msie <= 11;
2085
+
2086
+ // Workaround for browsers which do not support the `input` event
2087
+ // This will prevent double-triggering of events for browsers which support
2088
+ // both the `keyup` and `input` events.
2089
+ this.$selection.on(
2090
+ 'input.searchcheck',
2091
+ '.select2-search--inline',
2092
+ function (evt) {
2093
+ // IE will trigger the `input` event when a placeholder is used on a
2094
+ // search box. To get around this issue, we are forced to ignore all
2095
+ // `input` events in IE and keep using `keyup`.
2096
+ if (disableInputEvents) {
2097
+ self.$selection.off('input.search input.searchcheck');
2098
+ return;
2099
+ }
2100
+
2101
+ // Unbind the duplicated `keyup` event
2102
+ self.$selection.off('keyup.search');
2103
+ }
2104
+ );
2105
+
2106
+ this.$selection.on(
2107
+ 'keyup.search input.search',
2108
+ '.select2-search--inline',
2109
+ function (evt) {
2110
+ // IE will trigger the `input` event when a placeholder is used on a
2111
+ // search box. To get around this issue, we are forced to ignore all
2112
+ // `input` events in IE and keep using `keyup`.
2113
+ if (disableInputEvents && evt.type === 'input') {
2114
+ self.$selection.off('input.search input.searchcheck');
2115
+ return;
2116
+ }
2117
+
2118
+ var key = evt.which;
2119
+
2120
+ // We can freely ignore events from modifier keys
2121
+ if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) {
2122
+ return;
2123
+ }
2124
+
2125
+ // Tabbing will be handled during the `keydown` phase
2126
+ if (key == KEYS.TAB) {
2127
+ return;
2128
+ }
2129
+
2130
+ self.handleSearch(evt);
2131
+ }
2132
+ );
2133
+ };
2134
+
2135
+ /**
2136
+ * This method will transfer the tabindex attribute from the rendered
2137
+ * selection to the search box. This allows for the search box to be used as
2138
+ * the primary focus instead of the selection container.
2139
+ *
2140
+ * @private
2141
+ */
2142
+ Search.prototype._transferTabIndex = function (decorated) {
2143
+ this.$search.attr('tabindex', this.$selection.attr('tabindex'));
2144
+ this.$selection.attr('tabindex', '-1');
2145
+ };
2146
+
2147
+ Search.prototype.createPlaceholder = function (decorated, placeholder) {
2148
+ this.$search.attr('placeholder', placeholder.text);
2149
+ };
2150
+
2151
+ Search.prototype.update = function (decorated, data) {
2152
+ var searchHadFocus = this.$search[0] == document.activeElement;
2153
+
2154
+ this.$search.attr('placeholder', '');
2155
+
2156
+ decorated.call(this, data);
2157
+
2158
+ this.$selection.find('.select2-selection__rendered')
2159
+ .append(this.$searchContainer);
2160
+
2161
+ this.resizeSearch();
2162
+ if (searchHadFocus) {
2163
+ this.$search.trigger('focus');
2164
+ }
2165
+ };
2166
+
2167
+ Search.prototype.handleSearch = function () {
2168
+ this.resizeSearch();
2169
+
2170
+ if (!this._keyUpPrevented) {
2171
+ var input = this.$search.val();
2172
+
2173
+ this.trigger('query', {
2174
+ term: input
2175
+ });
2176
+ }
2177
+
2178
+ this._keyUpPrevented = false;
2179
+ };
2180
+
2181
+ Search.prototype.searchRemoveChoice = function (decorated, item) {
2182
+ this.trigger('unselect', {
2183
+ data: item
2184
+ });
2185
+
2186
+ this.$search.val(item.text);
2187
+ this.handleSearch();
2188
+ };
2189
+
2190
+ Search.prototype.resizeSearch = function () {
2191
+ this.$search.css('width', '25px');
2192
+
2193
+ var width = '';
2194
+
2195
+ if (this.$search.attr('placeholder') !== '') {
2196
+ width = this.$selection.find('.select2-selection__rendered').width();
2197
+ } else {
2198
+ var minimumWidth = this.$search.val().length + 1;
2199
+
2200
+ width = (minimumWidth * 0.75) + 'em';
2201
+ }
2202
+
2203
+ this.$search.css('width', width);
2204
+ };
2205
+
2206
+ return Search;
2207
+ });
2208
+
2209
+ S2.define('select2/selection/eventRelay',[
2210
+ 'jquery'
2211
+ ], function ($) {
2212
+ function EventRelay () { }
2213
+
2214
+ EventRelay.prototype.bind = function (decorated, container, $container) {
2215
+ var self = this;
2216
+ var relayEvents = [
2217
+ 'open', 'opening',
2218
+ 'close', 'closing',
2219
+ 'select', 'selecting',
2220
+ 'unselect', 'unselecting',
2221
+ 'clear', 'clearing'
2222
+ ];
2223
+
2224
+ var preventableEvents = [
2225
+ 'opening', 'closing', 'selecting', 'unselecting', 'clearing'
2226
+ ];
2227
+
2228
+ decorated.call(this, container, $container);
2229
+
2230
+ container.on('*', function (name, params) {
2231
+ // Ignore events that should not be relayed
2232
+ if ($.inArray(name, relayEvents) === -1) {
2233
+ return;
2234
+ }
2235
+
2236
+ // The parameters should always be an object
2237
+ params = params || {};
2238
+
2239
+ // Generate the jQuery event for the Select2 event
2240
+ var evt = $.Event('select2:' + name, {
2241
+ params: params
2242
+ });
2243
+
2244
+ self.$element.trigger(evt);
2245
+
2246
+ // Only handle preventable events if it was one
2247
+ if ($.inArray(name, preventableEvents) === -1) {
2248
+ return;
2249
+ }
2250
+
2251
+ params.prevented = evt.isDefaultPrevented();
2252
+ });
2253
+ };
2254
+
2255
+ return EventRelay;
2256
+ });
2257
+
2258
+ S2.define('select2/translation',[
2259
+ 'jquery',
2260
+ 'require'
2261
+ ], function ($, require) {
2262
+ function Translation (dict) {
2263
+ this.dict = dict || {};
2264
+ }
2265
+
2266
+ Translation.prototype.all = function () {
2267
+ return this.dict;
2268
+ };
2269
+
2270
+ Translation.prototype.get = function (key) {
2271
+ return this.dict[key];
2272
+ };
2273
+
2274
+ Translation.prototype.extend = function (translation) {
2275
+ this.dict = $.extend({}, translation.all(), this.dict);
2276
+ };
2277
+
2278
+ // Static functions
2279
+
2280
+ Translation._cache = {};
2281
+
2282
+ Translation.loadPath = function (path) {
2283
+ if (!(path in Translation._cache)) {
2284
+ var translations = require(path);
2285
+
2286
+ Translation._cache[path] = translations;
2287
+ }
2288
+
2289
+ return new Translation(Translation._cache[path]);
2290
+ };
2291
+
2292
+ return Translation;
2293
+ });
2294
+
2295
+ S2.define('select2/diacritics',[
2296
+
2297
+ ], function () {
2298
+ var diacritics = {
2299
+ '\u24B6': 'A',
2300
+ '\uFF21': 'A',
2301
+ '\u00C0': 'A',
2302
+ '\u00C1': 'A',
2303
+ '\u00C2': 'A',
2304
+ '\u1EA6': 'A',
2305
+ '\u1EA4': 'A',
2306
+ '\u1EAA': 'A',
2307
+ '\u1EA8': 'A',
2308
+ '\u00C3': 'A',
2309
+ '\u0100': 'A',
2310
+ '\u0102': 'A',
2311
+ '\u1EB0': 'A',
2312
+ '\u1EAE': 'A',
2313
+ '\u1EB4': 'A',
2314
+ '\u1EB2': 'A',
2315
+ '\u0226': 'A',
2316
+ '\u01E0': 'A',
2317
+ '\u00C4': 'A',
2318
+ '\u01DE': 'A',
2319
+ '\u1EA2': 'A',
2320
+ '\u00C5': 'A',
2321
+ '\u01FA': 'A',
2322
+ '\u01CD': 'A',
2323
+ '\u0200': 'A',
2324
+ '\u0202': 'A',
2325
+ '\u1EA0': 'A',
2326
+ '\u1EAC': 'A',
2327
+ '\u1EB6': 'A',
2328
+ '\u1E00': 'A',
2329
+ '\u0104': 'A',
2330
+ '\u023A': 'A',
2331
+ '\u2C6F': 'A',
2332
+ '\uA732': 'AA',
2333
+ '\u00C6': 'AE',
2334
+ '\u01FC': 'AE',
2335
+ '\u01E2': 'AE',
2336
+ '\uA734': 'AO',
2337
+ '\uA736': 'AU',
2338
+ '\uA738': 'AV',
2339
+ '\uA73A': 'AV',
2340
+ '\uA73C': 'AY',
2341
+ '\u24B7': 'B',
2342
+ '\uFF22': 'B',
2343
+ '\u1E02': 'B',
2344
+ '\u1E04': 'B',
2345
+ '\u1E06': 'B',
2346
+ '\u0243': 'B',
2347
+ '\u0182': 'B',
2348
+ '\u0181': 'B',
2349
+ '\u24B8': 'C',
2350
+ '\uFF23': 'C',
2351
+ '\u0106': 'C',
2352
+ '\u0108': 'C',
2353
+ '\u010A': 'C',
2354
+ '\u010C': 'C',
2355
+ '\u00C7': 'C',
2356
+ '\u1E08': 'C',
2357
+ '\u0187': 'C',
2358
+ '\u023B': 'C',
2359
+ '\uA73E': 'C',
2360
+ '\u24B9': 'D',
2361
+ '\uFF24': 'D',
2362
+ '\u1E0A': 'D',
2363
+ '\u010E': 'D',
2364
+ '\u1E0C': 'D',
2365
+ '\u1E10': 'D',
2366
+ '\u1E12': 'D',
2367
+ '\u1E0E': 'D',
2368
+ '\u0110': 'D',
2369
+ '\u018B': 'D',
2370
+ '\u018A': 'D',
2371
+ '\u0189': 'D',
2372
+ '\uA779': 'D',
2373
+ '\u01F1': 'DZ',
2374
+ '\u01C4': 'DZ',
2375
+ '\u01F2': 'Dz',
2376
+ '\u01C5': 'Dz',
2377
+ '\u24BA': 'E',
2378
+ '\uFF25': 'E',
2379
+ '\u00C8': 'E',
2380
+ '\u00C9': 'E',
2381
+ '\u00CA': 'E',
2382
+ '\u1EC0': 'E',
2383
+ '\u1EBE': 'E',
2384
+ '\u1EC4': 'E',
2385
+ '\u1EC2': 'E',
2386
+ '\u1EBC': 'E',
2387
+ '\u0112': 'E',
2388
+ '\u1E14': 'E',
2389
+ '\u1E16': 'E',
2390
+ '\u0114': 'E',
2391
+ '\u0116': 'E',
2392
+ '\u00CB': 'E',
2393
+ '\u1EBA': 'E',
2394
+ '\u011A': 'E',
2395
+ '\u0204': 'E',
2396
+ '\u0206': 'E',
2397
+ '\u1EB8': 'E',
2398
+ '\u1EC6': 'E',
2399
+ '\u0228': 'E',
2400
+ '\u1E1C': 'E',
2401
+ '\u0118': 'E',
2402
+ '\u1E18': 'E',
2403
+ '\u1E1A': 'E',
2404
+ '\u0190': 'E',
2405
+ '\u018E': 'E',
2406
+ '\u24BB': 'F',
2407
+ '\uFF26': 'F',
2408
+ '\u1E1E': 'F',
2409
+ '\u0191': 'F',
2410
+ '\uA77B': 'F',
2411
+ '\u24BC': 'G',
2412
+ '\uFF27': 'G',
2413
+ '\u01F4': 'G',
2414
+ '\u011C': 'G',
2415
+ '\u1E20': 'G',
2416
+ '\u011E': 'G',
2417
+ '\u0120': 'G',
2418
+ '\u01E6': 'G',
2419
+ '\u0122': 'G',
2420
+ '\u01E4': 'G',
2421
+ '\u0193': 'G',
2422
+ '\uA7A0': 'G',
2423
+ '\uA77D': 'G',
2424
+ '\uA77E': 'G',
2425
+ '\u24BD': 'H',
2426
+ '\uFF28': 'H',
2427
+ '\u0124': 'H',
2428
+ '\u1E22': 'H',
2429
+ '\u1E26': 'H',
2430
+ '\u021E': 'H',
2431
+ '\u1E24': 'H',
2432
+ '\u1E28': 'H',
2433
+ '\u1E2A': 'H',
2434
+ '\u0126': 'H',
2435
+ '\u2C67': 'H',
2436
+ '\u2C75': 'H',
2437
+ '\uA78D': 'H',
2438
+ '\u24BE': 'I',
2439
+ '\uFF29': 'I',
2440
+ '\u00CC': 'I',
2441
+ '\u00CD': 'I',
2442
+ '\u00CE': 'I',
2443
+ '\u0128': 'I',
2444
+ '\u012A': 'I',
2445
+ '\u012C': 'I',
2446
+ '\u0130': 'I',
2447
+ '\u00CF': 'I',
2448
+ '\u1E2E': 'I',
2449
+ '\u1EC8': 'I',
2450
+ '\u01CF': 'I',
2451
+ '\u0208': 'I',
2452
+ '\u020A': 'I',
2453
+ '\u1ECA': 'I',
2454
+ '\u012E': 'I',
2455
+ '\u1E2C': 'I',
2456
+ '\u0197': 'I',
2457
+ '\u24BF': 'J',
2458
+ '\uFF2A': 'J',
2459
+ '\u0134': 'J',
2460
+ '\u0248': 'J',
2461
+ '\u24C0': 'K',
2462
+ '\uFF2B': 'K',
2463
+ '\u1E30': 'K',
2464
+ '\u01E8': 'K',
2465
+ '\u1E32': 'K',
2466
+ '\u0136': 'K',
2467
+ '\u1E34': 'K',
2468
+ '\u0198': 'K',
2469
+ '\u2C69': 'K',
2470
+ '\uA740': 'K',
2471
+ '\uA742': 'K',
2472
+ '\uA744': 'K',
2473
+ '\uA7A2': 'K',
2474
+ '\u24C1': 'L',
2475
+ '\uFF2C': 'L',
2476
+ '\u013F': 'L',
2477
+ '\u0139': 'L',
2478
+ '\u013D': 'L',
2479
+ '\u1E36': 'L',
2480
+ '\u1E38': 'L',
2481
+ '\u013B': 'L',
2482
+ '\u1E3C': 'L',
2483
+ '\u1E3A': 'L',
2484
+ '\u0141': 'L',
2485
+ '\u023D': 'L',
2486
+ '\u2C62': 'L',
2487
+ '\u2C60': 'L',
2488
+ '\uA748': 'L',
2489
+ '\uA746': 'L',
2490
+ '\uA780': 'L',
2491
+ '\u01C7': 'LJ',
2492
+ '\u01C8': 'Lj',
2493
+ '\u24C2': 'M',
2494
+ '\uFF2D': 'M',
2495
+ '\u1E3E': 'M',
2496
+ '\u1E40': 'M',
2497
+ '\u1E42': 'M',
2498
+ '\u2C6E': 'M',
2499
+ '\u019C': 'M',
2500
+ '\u24C3': 'N',
2501
+ '\uFF2E': 'N',
2502
+ '\u01F8': 'N',
2503
+ '\u0143': 'N',
2504
+ '\u00D1': 'N',
2505
+ '\u1E44': 'N',
2506
+ '\u0147': 'N',
2507
+ '\u1E46': 'N',
2508
+ '\u0145': 'N',
2509
+ '\u1E4A': 'N',
2510
+ '\u1E48': 'N',
2511
+ '\u0220': 'N',
2512
+ '\u019D': 'N',
2513
+ '\uA790': 'N',
2514
+ '\uA7A4': 'N',
2515
+ '\u01CA': 'NJ',
2516
+ '\u01CB': 'Nj',
2517
+ '\u24C4': 'O',
2518
+ '\uFF2F': 'O',
2519
+ '\u00D2': 'O',
2520
+ '\u00D3': 'O',
2521
+ '\u00D4': 'O',
2522
+ '\u1ED2': 'O',
2523
+ '\u1ED0': 'O',
2524
+ '\u1ED6': 'O',
2525
+ '\u1ED4': 'O',
2526
+ '\u00D5': 'O',
2527
+ '\u1E4C': 'O',
2528
+ '\u022C': 'O',
2529
+ '\u1E4E': 'O',
2530
+ '\u014C': 'O',
2531
+ '\u1E50': 'O',
2532
+ '\u1E52': 'O',
2533
+ '\u014E': 'O',
2534
+ '\u022E': 'O',
2535
+ '\u0230': 'O',
2536
+ '\u00D6': 'O',
2537
+ '\u022A': 'O',
2538
+ '\u1ECE': 'O',
2539
+ '\u0150': 'O',
2540
+ '\u01D1': 'O',
2541
+ '\u020C': 'O',
2542
+ '\u020E': 'O',
2543
+ '\u01A0': 'O',
2544
+ '\u1EDC': 'O',
2545
+ '\u1EDA': 'O',
2546
+ '\u1EE0': 'O',
2547
+ '\u1EDE': 'O',
2548
+ '\u1EE2': 'O',
2549
+ '\u1ECC': 'O',
2550
+ '\u1ED8': 'O',
2551
+ '\u01EA': 'O',
2552
+ '\u01EC': 'O',
2553
+ '\u00D8': 'O',
2554
+ '\u01FE': 'O',
2555
+ '\u0186': 'O',
2556
+ '\u019F': 'O',
2557
+ '\uA74A': 'O',
2558
+ '\uA74C': 'O',
2559
+ '\u0152': 'OE',
2560
+ '\u01A2': 'OI',
2561
+ '\uA74E': 'OO',
2562
+ '\u0222': 'OU',
2563
+ '\u24C5': 'P',
2564
+ '\uFF30': 'P',
2565
+ '\u1E54': 'P',
2566
+ '\u1E56': 'P',
2567
+ '\u01A4': 'P',
2568
+ '\u2C63': 'P',
2569
+ '\uA750': 'P',
2570
+ '\uA752': 'P',
2571
+ '\uA754': 'P',
2572
+ '\u24C6': 'Q',
2573
+ '\uFF31': 'Q',
2574
+ '\uA756': 'Q',
2575
+ '\uA758': 'Q',
2576
+ '\u024A': 'Q',
2577
+ '\u24C7': 'R',
2578
+ '\uFF32': 'R',
2579
+ '\u0154': 'R',
2580
+ '\u1E58': 'R',
2581
+ '\u0158': 'R',
2582
+ '\u0210': 'R',
2583
+ '\u0212': 'R',
2584
+ '\u1E5A': 'R',
2585
+ '\u1E5C': 'R',
2586
+ '\u0156': 'R',
2587
+ '\u1E5E': 'R',
2588
+ '\u024C': 'R',
2589
+ '\u2C64': 'R',
2590
+ '\uA75A': 'R',
2591
+ '\uA7A6': 'R',
2592
+ '\uA782': 'R',
2593
+ '\u24C8': 'S',
2594
+ '\uFF33': 'S',
2595
+ '\u1E9E': 'S',
2596
+ '\u015A': 'S',
2597
+ '\u1E64': 'S',
2598
+ '\u015C': 'S',
2599
+ '\u1E60': 'S',
2600
+ '\u0160': 'S',
2601
+ '\u1E66': 'S',
2602
+ '\u1E62': 'S',
2603
+ '\u1E68': 'S',
2604
+ '\u0218': 'S',
2605
+ '\u015E': 'S',
2606
+ '\u2C7E': 'S',
2607
+ '\uA7A8': 'S',
2608
+ '\uA784': 'S',
2609
+ '\u24C9': 'T',
2610
+ '\uFF34': 'T',
2611
+ '\u1E6A': 'T',
2612
+ '\u0164': 'T',
2613
+ '\u1E6C': 'T',
2614
+ '\u021A': 'T',
2615
+ '\u0162': 'T',
2616
+ '\u1E70': 'T',
2617
+ '\u1E6E': 'T',
2618
+ '\u0166': 'T',
2619
+ '\u01AC': 'T',
2620
+ '\u01AE': 'T',
2621
+ '\u023E': 'T',
2622
+ '\uA786': 'T',
2623
+ '\uA728': 'TZ',
2624
+ '\u24CA': 'U',
2625
+ '\uFF35': 'U',
2626
+ '\u00D9': 'U',
2627
+ '\u00DA': 'U',
2628
+ '\u00DB': 'U',
2629
+ '\u0168': 'U',
2630
+ '\u1E78': 'U',
2631
+ '\u016A': 'U',
2632
+ '\u1E7A': 'U',
2633
+ '\u016C': 'U',
2634
+ '\u00DC': 'U',
2635
+ '\u01DB': 'U',
2636
+ '\u01D7': 'U',
2637
+ '\u01D5': 'U',
2638
+ '\u01D9': 'U',
2639
+ '\u1EE6': 'U',
2640
+ '\u016E': 'U',
2641
+ '\u0170': 'U',
2642
+ '\u01D3': 'U',
2643
+ '\u0214': 'U',
2644
+ '\u0216': 'U',
2645
+ '\u01AF': 'U',
2646
+ '\u1EEA': 'U',
2647
+ '\u1EE8': 'U',
2648
+ '\u1EEE': 'U',
2649
+ '\u1EEC': 'U',
2650
+ '\u1EF0': 'U',
2651
+ '\u1EE4': 'U',
2652
+ '\u1E72': 'U',
2653
+ '\u0172': 'U',
2654
+ '\u1E76': 'U',
2655
+ '\u1E74': 'U',
2656
+ '\u0244': 'U',
2657
+ '\u24CB': 'V',
2658
+ '\uFF36': 'V',
2659
+ '\u1E7C': 'V',
2660
+ '\u1E7E': 'V',
2661
+ '\u01B2': 'V',
2662
+ '\uA75E': 'V',
2663
+ '\u0245': 'V',
2664
+ '\uA760': 'VY',
2665
+ '\u24CC': 'W',
2666
+ '\uFF37': 'W',
2667
+ '\u1E80': 'W',
2668
+ '\u1E82': 'W',
2669
+ '\u0174': 'W',
2670
+ '\u1E86': 'W',
2671
+ '\u1E84': 'W',
2672
+ '\u1E88': 'W',
2673
+ '\u2C72': 'W',
2674
+ '\u24CD': 'X',
2675
+ '\uFF38': 'X',
2676
+ '\u1E8A': 'X',
2677
+ '\u1E8C': 'X',
2678
+ '\u24CE': 'Y',
2679
+ '\uFF39': 'Y',
2680
+ '\u1EF2': 'Y',
2681
+ '\u00DD': 'Y',
2682
+ '\u0176': 'Y',
2683
+ '\u1EF8': 'Y',
2684
+ '\u0232': 'Y',
2685
+ '\u1E8E': 'Y',
2686
+ '\u0178': 'Y',
2687
+ '\u1EF6': 'Y',
2688
+ '\u1EF4': 'Y',
2689
+ '\u01B3': 'Y',
2690
+ '\u024E': 'Y',
2691
+ '\u1EFE': 'Y',
2692
+ '\u24CF': 'Z',
2693
+ '\uFF3A': 'Z',
2694
+ '\u0179': 'Z',
2695
+ '\u1E90': 'Z',
2696
+ '\u017B': 'Z',
2697
+ '\u017D': 'Z',
2698
+ '\u1E92': 'Z',
2699
+ '\u1E94': 'Z',
2700
+ '\u01B5': 'Z',
2701
+ '\u0224': 'Z',
2702
+ '\u2C7F': 'Z',
2703
+ '\u2C6B': 'Z',
2704
+ '\uA762': 'Z',
2705
+ '\u24D0': 'a',
2706
+ '\uFF41': 'a',
2707
+ '\u1E9A': 'a',
2708
+ '\u00E0': 'a',
2709
+ '\u00E1': 'a',
2710
+ '\u00E2': 'a',
2711
+ '\u1EA7': 'a',
2712
+ '\u1EA5': 'a',
2713
+ '\u1EAB': 'a',
2714
+ '\u1EA9': 'a',
2715
+ '\u00E3': 'a',
2716
+ '\u0101': 'a',
2717
+ '\u0103': 'a',
2718
+ '\u1EB1': 'a',
2719
+ '\u1EAF': 'a',
2720
+ '\u1EB5': 'a',
2721
+ '\u1EB3': 'a',
2722
+ '\u0227': 'a',
2723
+ '\u01E1': 'a',
2724
+ '\u00E4': 'a',
2725
+ '\u01DF': 'a',
2726
+ '\u1EA3': 'a',
2727
+ '\u00E5': 'a',
2728
+ '\u01FB': 'a',
2729
+ '\u01CE': 'a',
2730
+ '\u0201': 'a',
2731
+ '\u0203': 'a',
2732
+ '\u1EA1': 'a',
2733
+ '\u1EAD': 'a',
2734
+ '\u1EB7': 'a',
2735
+ '\u1E01': 'a',
2736
+ '\u0105': 'a',
2737
+ '\u2C65': 'a',
2738
+ '\u0250': 'a',
2739
+ '\uA733': 'aa',
2740
+ '\u00E6': 'ae',
2741
+ '\u01FD': 'ae',
2742
+ '\u01E3': 'ae',
2743
+ '\uA735': 'ao',
2744
+ '\uA737': 'au',
2745
+ '\uA739': 'av',
2746
+ '\uA73B': 'av',
2747
+ '\uA73D': 'ay',
2748
+ '\u24D1': 'b',
2749
+ '\uFF42': 'b',
2750
+ '\u1E03': 'b',
2751
+ '\u1E05': 'b',
2752
+ '\u1E07': 'b',
2753
+ '\u0180': 'b',
2754
+ '\u0183': 'b',
2755
+ '\u0253': 'b',
2756
+ '\u24D2': 'c',
2757
+ '\uFF43': 'c',
2758
+ '\u0107': 'c',
2759
+ '\u0109': 'c',
2760
+ '\u010B': 'c',
2761
+ '\u010D': 'c',
2762
+ '\u00E7': 'c',
2763
+ '\u1E09': 'c',
2764
+ '\u0188': 'c',
2765
+ '\u023C': 'c',
2766
+ '\uA73F': 'c',
2767
+ '\u2184': 'c',
2768
+ '\u24D3': 'd',
2769
+ '\uFF44': 'd',
2770
+ '\u1E0B': 'd',
2771
+ '\u010F': 'd',
2772
+ '\u1E0D': 'd',
2773
+ '\u1E11': 'd',
2774
+ '\u1E13': 'd',
2775
+ '\u1E0F': 'd',
2776
+ '\u0111': 'd',
2777
+ '\u018C': 'd',
2778
+ '\u0256': 'd',
2779
+ '\u0257': 'd',
2780
+ '\uA77A': 'd',
2781
+ '\u01F3': 'dz',
2782
+ '\u01C6': 'dz',
2783
+ '\u24D4': 'e',
2784
+ '\uFF45': 'e',
2785
+ '\u00E8': 'e',
2786
+ '\u00E9': 'e',
2787
+ '\u00EA': 'e',
2788
+ '\u1EC1': 'e',
2789
+ '\u1EBF': 'e',
2790
+ '\u1EC5': 'e',
2791
+ '\u1EC3': 'e',
2792
+ '\u1EBD': 'e',
2793
+ '\u0113': 'e',
2794
+ '\u1E15': 'e',
2795
+ '\u1E17': 'e',
2796
+ '\u0115': 'e',
2797
+ '\u0117': 'e',
2798
+ '\u00EB': 'e',
2799
+ '\u1EBB': 'e',
2800
+ '\u011B': 'e',
2801
+ '\u0205': 'e',
2802
+ '\u0207': 'e',
2803
+ '\u1EB9': 'e',
2804
+ '\u1EC7': 'e',
2805
+ '\u0229': 'e',
2806
+ '\u1E1D': 'e',
2807
+ '\u0119': 'e',
2808
+ '\u1E19': 'e',
2809
+ '\u1E1B': 'e',
2810
+ '\u0247': 'e',
2811
+ '\u025B': 'e',
2812
+ '\u01DD': 'e',
2813
+ '\u24D5': 'f',
2814
+ '\uFF46': 'f',
2815
+ '\u1E1F': 'f',
2816
+ '\u0192': 'f',
2817
+ '\uA77C': 'f',
2818
+ '\u24D6': 'g',
2819
+ '\uFF47': 'g',
2820
+ '\u01F5': 'g',
2821
+ '\u011D': 'g',
2822
+ '\u1E21': 'g',
2823
+ '\u011F': 'g',
2824
+ '\u0121': 'g',
2825
+ '\u01E7': 'g',
2826
+ '\u0123': 'g',
2827
+ '\u01E5': 'g',
2828
+ '\u0260': 'g',
2829
+ '\uA7A1': 'g',
2830
+ '\u1D79': 'g',
2831
+ '\uA77F': 'g',
2832
+ '\u24D7': 'h',
2833
+ '\uFF48': 'h',
2834
+ '\u0125': 'h',
2835
+ '\u1E23': 'h',
2836
+ '\u1E27': 'h',
2837
+ '\u021F': 'h',
2838
+ '\u1E25': 'h',
2839
+ '\u1E29': 'h',
2840
+ '\u1E2B': 'h',
2841
+ '\u1E96': 'h',
2842
+ '\u0127': 'h',
2843
+ '\u2C68': 'h',
2844
+ '\u2C76': 'h',
2845
+ '\u0265': 'h',
2846
+ '\u0195': 'hv',
2847
+ '\u24D8': 'i',
2848
+ '\uFF49': 'i',
2849
+ '\u00EC': 'i',
2850
+ '\u00ED': 'i',
2851
+ '\u00EE': 'i',
2852
+ '\u0129': 'i',
2853
+ '\u012B': 'i',
2854
+ '\u012D': 'i',
2855
+ '\u00EF': 'i',
2856
+ '\u1E2F': 'i',
2857
+ '\u1EC9': 'i',
2858
+ '\u01D0': 'i',
2859
+ '\u0209': 'i',
2860
+ '\u020B': 'i',
2861
+ '\u1ECB': 'i',
2862
+ '\u012F': 'i',
2863
+ '\u1E2D': 'i',
2864
+ '\u0268': 'i',
2865
+ '\u0131': 'i',
2866
+ '\u24D9': 'j',
2867
+ '\uFF4A': 'j',
2868
+ '\u0135': 'j',
2869
+ '\u01F0': 'j',
2870
+ '\u0249': 'j',
2871
+ '\u24DA': 'k',
2872
+ '\uFF4B': 'k',
2873
+ '\u1E31': 'k',
2874
+ '\u01E9': 'k',
2875
+ '\u1E33': 'k',
2876
+ '\u0137': 'k',
2877
+ '\u1E35': 'k',
2878
+ '\u0199': 'k',
2879
+ '\u2C6A': 'k',
2880
+ '\uA741': 'k',
2881
+ '\uA743': 'k',
2882
+ '\uA745': 'k',
2883
+ '\uA7A3': 'k',
2884
+ '\u24DB': 'l',
2885
+ '\uFF4C': 'l',
2886
+ '\u0140': 'l',
2887
+ '\u013A': 'l',
2888
+ '\u013E': 'l',
2889
+ '\u1E37': 'l',
2890
+ '\u1E39': 'l',
2891
+ '\u013C': 'l',
2892
+ '\u1E3D': 'l',
2893
+ '\u1E3B': 'l',
2894
+ '\u017F': 'l',
2895
+ '\u0142': 'l',
2896
+ '\u019A': 'l',
2897
+ '\u026B': 'l',
2898
+ '\u2C61': 'l',
2899
+ '\uA749': 'l',
2900
+ '\uA781': 'l',
2901
+ '\uA747': 'l',
2902
+ '\u01C9': 'lj',
2903
+ '\u24DC': 'm',
2904
+ '\uFF4D': 'm',
2905
+ '\u1E3F': 'm',
2906
+ '\u1E41': 'm',
2907
+ '\u1E43': 'm',
2908
+ '\u0271': 'm',
2909
+ '\u026F': 'm',
2910
+ '\u24DD': 'n',
2911
+ '\uFF4E': 'n',
2912
+ '\u01F9': 'n',
2913
+ '\u0144': 'n',
2914
+ '\u00F1': 'n',
2915
+ '\u1E45': 'n',
2916
+ '\u0148': 'n',
2917
+ '\u1E47': 'n',
2918
+ '\u0146': 'n',
2919
+ '\u1E4B': 'n',
2920
+ '\u1E49': 'n',
2921
+ '\u019E': 'n',
2922
+ '\u0272': 'n',
2923
+ '\u0149': 'n',
2924
+ '\uA791': 'n',
2925
+ '\uA7A5': 'n',
2926
+ '\u01CC': 'nj',
2927
+ '\u24DE': 'o',
2928
+ '\uFF4F': 'o',
2929
+ '\u00F2': 'o',
2930
+ '\u00F3': 'o',
2931
+ '\u00F4': 'o',
2932
+ '\u1ED3': 'o',
2933
+ '\u1ED1': 'o',
2934
+ '\u1ED7': 'o',
2935
+ '\u1ED5': 'o',
2936
+ '\u00F5': 'o',
2937
+ '\u1E4D': 'o',
2938
+ '\u022D': 'o',
2939
+ '\u1E4F': 'o',
2940
+ '\u014D': 'o',
2941
+ '\u1E51': 'o',
2942
+ '\u1E53': 'o',
2943
+ '\u014F': 'o',
2944
+ '\u022F': 'o',
2945
+ '\u0231': 'o',
2946
+ '\u00F6': 'o',
2947
+ '\u022B': 'o',
2948
+ '\u1ECF': 'o',
2949
+ '\u0151': 'o',
2950
+ '\u01D2': 'o',
2951
+ '\u020D': 'o',
2952
+ '\u020F': 'o',
2953
+ '\u01A1': 'o',
2954
+ '\u1EDD': 'o',
2955
+ '\u1EDB': 'o',
2956
+ '\u1EE1': 'o',
2957
+ '\u1EDF': 'o',
2958
+ '\u1EE3': 'o',
2959
+ '\u1ECD': 'o',
2960
+ '\u1ED9': 'o',
2961
+ '\u01EB': 'o',
2962
+ '\u01ED': 'o',
2963
+ '\u00F8': 'o',
2964
+ '\u01FF': 'o',
2965
+ '\u0254': 'o',
2966
+ '\uA74B': 'o',
2967
+ '\uA74D': 'o',
2968
+ '\u0275': 'o',
2969
+ '\u0153': 'oe',
2970
+ '\u01A3': 'oi',
2971
+ '\u0223': 'ou',
2972
+ '\uA74F': 'oo',
2973
+ '\u24DF': 'p',
2974
+ '\uFF50': 'p',
2975
+ '\u1E55': 'p',
2976
+ '\u1E57': 'p',
2977
+ '\u01A5': 'p',
2978
+ '\u1D7D': 'p',
2979
+ '\uA751': 'p',
2980
+ '\uA753': 'p',
2981
+ '\uA755': 'p',
2982
+ '\u24E0': 'q',
2983
+ '\uFF51': 'q',
2984
+ '\u024B': 'q',
2985
+ '\uA757': 'q',
2986
+ '\uA759': 'q',
2987
+ '\u24E1': 'r',
2988
+ '\uFF52': 'r',
2989
+ '\u0155': 'r',
2990
+ '\u1E59': 'r',
2991
+ '\u0159': 'r',
2992
+ '\u0211': 'r',
2993
+ '\u0213': 'r',
2994
+ '\u1E5B': 'r',
2995
+ '\u1E5D': 'r',
2996
+ '\u0157': 'r',
2997
+ '\u1E5F': 'r',
2998
+ '\u024D': 'r',
2999
+ '\u027D': 'r',
3000
+ '\uA75B': 'r',
3001
+ '\uA7A7': 'r',
3002
+ '\uA783': 'r',
3003
+ '\u24E2': 's',
3004
+ '\uFF53': 's',
3005
+ '\u00DF': 's',
3006
+ '\u015B': 's',
3007
+ '\u1E65': 's',
3008
+ '\u015D': 's',
3009
+ '\u1E61': 's',
3010
+ '\u0161': 's',
3011
+ '\u1E67': 's',
3012
+ '\u1E63': 's',
3013
+ '\u1E69': 's',
3014
+ '\u0219': 's',
3015
+ '\u015F': 's',
3016
+ '\u023F': 's',
3017
+ '\uA7A9': 's',
3018
+ '\uA785': 's',
3019
+ '\u1E9B': 's',
3020
+ '\u24E3': 't',
3021
+ '\uFF54': 't',
3022
+ '\u1E6B': 't',
3023
+ '\u1E97': 't',
3024
+ '\u0165': 't',
3025
+ '\u1E6D': 't',
3026
+ '\u021B': 't',
3027
+ '\u0163': 't',
3028
+ '\u1E71': 't',
3029
+ '\u1E6F': 't',
3030
+ '\u0167': 't',
3031
+ '\u01AD': 't',
3032
+ '\u0288': 't',
3033
+ '\u2C66': 't',
3034
+ '\uA787': 't',
3035
+ '\uA729': 'tz',
3036
+ '\u24E4': 'u',
3037
+ '\uFF55': 'u',
3038
+ '\u00F9': 'u',
3039
+ '\u00FA': 'u',
3040
+ '\u00FB': 'u',
3041
+ '\u0169': 'u',
3042
+ '\u1E79': 'u',
3043
+ '\u016B': 'u',
3044
+ '\u1E7B': 'u',
3045
+ '\u016D': 'u',
3046
+ '\u00FC': 'u',
3047
+ '\u01DC': 'u',
3048
+ '\u01D8': 'u',
3049
+ '\u01D6': 'u',
3050
+ '\u01DA': 'u',
3051
+ '\u1EE7': 'u',
3052
+ '\u016F': 'u',
3053
+ '\u0171': 'u',
3054
+ '\u01D4': 'u',
3055
+ '\u0215': 'u',
3056
+ '\u0217': 'u',
3057
+ '\u01B0': 'u',
3058
+ '\u1EEB': 'u',
3059
+ '\u1EE9': 'u',
3060
+ '\u1EEF': 'u',
3061
+ '\u1EED': 'u',
3062
+ '\u1EF1': 'u',
3063
+ '\u1EE5': 'u',
3064
+ '\u1E73': 'u',
3065
+ '\u0173': 'u',
3066
+ '\u1E77': 'u',
3067
+ '\u1E75': 'u',
3068
+ '\u0289': 'u',
3069
+ '\u24E5': 'v',
3070
+ '\uFF56': 'v',
3071
+ '\u1E7D': 'v',
3072
+ '\u1E7F': 'v',
3073
+ '\u028B': 'v',
3074
+ '\uA75F': 'v',
3075
+ '\u028C': 'v',
3076
+ '\uA761': 'vy',
3077
+ '\u24E6': 'w',
3078
+ '\uFF57': 'w',
3079
+ '\u1E81': 'w',
3080
+ '\u1E83': 'w',
3081
+ '\u0175': 'w',
3082
+ '\u1E87': 'w',
3083
+ '\u1E85': 'w',
3084
+ '\u1E98': 'w',
3085
+ '\u1E89': 'w',
3086
+ '\u2C73': 'w',
3087
+ '\u24E7': 'x',
3088
+ '\uFF58': 'x',
3089
+ '\u1E8B': 'x',
3090
+ '\u1E8D': 'x',
3091
+ '\u24E8': 'y',
3092
+ '\uFF59': 'y',
3093
+ '\u1EF3': 'y',
3094
+ '\u00FD': 'y',
3095
+ '\u0177': 'y',
3096
+ '\u1EF9': 'y',
3097
+ '\u0233': 'y',
3098
+ '\u1E8F': 'y',
3099
+ '\u00FF': 'y',
3100
+ '\u1EF7': 'y',
3101
+ '\u1E99': 'y',
3102
+ '\u1EF5': 'y',
3103
+ '\u01B4': 'y',
3104
+ '\u024F': 'y',
3105
+ '\u1EFF': 'y',
3106
+ '\u24E9': 'z',
3107
+ '\uFF5A': 'z',
3108
+ '\u017A': 'z',
3109
+ '\u1E91': 'z',
3110
+ '\u017C': 'z',
3111
+ '\u017E': 'z',
3112
+ '\u1E93': 'z',
3113
+ '\u1E95': 'z',
3114
+ '\u01B6': 'z',
3115
+ '\u0225': 'z',
3116
+ '\u0240': 'z',
3117
+ '\u2C6C': 'z',
3118
+ '\uA763': 'z',
3119
+ '\u0386': '\u0391',
3120
+ '\u0388': '\u0395',
3121
+ '\u0389': '\u0397',
3122
+ '\u038A': '\u0399',
3123
+ '\u03AA': '\u0399',
3124
+ '\u038C': '\u039F',
3125
+ '\u038E': '\u03A5',
3126
+ '\u03AB': '\u03A5',
3127
+ '\u038F': '\u03A9',
3128
+ '\u03AC': '\u03B1',
3129
+ '\u03AD': '\u03B5',
3130
+ '\u03AE': '\u03B7',
3131
+ '\u03AF': '\u03B9',
3132
+ '\u03CA': '\u03B9',
3133
+ '\u0390': '\u03B9',
3134
+ '\u03CC': '\u03BF',
3135
+ '\u03CD': '\u03C5',
3136
+ '\u03CB': '\u03C5',
3137
+ '\u03B0': '\u03C5',
3138
+ '\u03CE': '\u03C9',
3139
+ '\u03C2': '\u03C3',
3140
+ '\u2019': '\''
3141
+ };
3142
+
3143
+ return diacritics;
3144
+ });
3145
+
3146
+ S2.define('select2/data/base',[
3147
+ '../utils'
3148
+ ], function (Utils) {
3149
+ function BaseAdapter ($element, options) {
3150
+ BaseAdapter.__super__.constructor.call(this);
3151
+ }
3152
+
3153
+ Utils.Extend(BaseAdapter, Utils.Observable);
3154
+
3155
+ BaseAdapter.prototype.current = function (callback) {
3156
+ throw new Error('The `current` method must be defined in child classes.');
3157
+ };
3158
+
3159
+ BaseAdapter.prototype.query = function (params, callback) {
3160
+ throw new Error('The `query` method must be defined in child classes.');
3161
+ };
3162
+
3163
+ BaseAdapter.prototype.bind = function (container, $container) {
3164
+ // Can be implemented in subclasses
3165
+ };
3166
+
3167
+ BaseAdapter.prototype.destroy = function () {
3168
+ // Can be implemented in subclasses
3169
+ };
3170
+
3171
+ BaseAdapter.prototype.generateResultId = function (container, data) {
3172
+ var id = container.id + '-result-';
3173
+
3174
+ id += Utils.generateChars(4);
3175
+
3176
+ if (data.id != null) {
3177
+ id += '-' + data.id.toString();
3178
+ } else {
3179
+ id += '-' + Utils.generateChars(4);
3180
+ }
3181
+ return id;
3182
+ };
3183
+
3184
+ return BaseAdapter;
3185
+ });
3186
+
3187
+ S2.define('select2/data/select',[
3188
+ './base',
3189
+ '../utils',
3190
+ 'jquery'
3191
+ ], function (BaseAdapter, Utils, $) {
3192
+ function SelectAdapter ($element, options) {
3193
+ this.$element = $element;
3194
+ this.options = options;
3195
+
3196
+ SelectAdapter.__super__.constructor.call(this);
3197
+ }
3198
+
3199
+ Utils.Extend(SelectAdapter, BaseAdapter);
3200
+
3201
+ SelectAdapter.prototype.current = function (callback) {
3202
+ var data = [];
3203
+ var self = this;
3204
+
3205
+ this.$element.find(':selected').each(function () {
3206
+ var $option = $(this);
3207
+
3208
+ var option = self.item($option);
3209
+
3210
+ data.push(option);
3211
+ });
3212
+
3213
+ callback(data);
3214
+ };
3215
+
3216
+ SelectAdapter.prototype.select = function (data) {
3217
+ var self = this;
3218
+
3219
+ data.selected = true;
3220
+
3221
+ // If data.element is a DOM node, use it instead
3222
+ if ($(data.element).is('option')) {
3223
+ data.element.selected = true;
3224
+
3225
+ this.$element.trigger('input').trigger('change');
3226
+
3227
+ return;
3228
+ }
3229
+
3230
+ if (this.$element.prop('multiple')) {
3231
+ this.current(function (currentData) {
3232
+ var val = [];
3233
+
3234
+ data = [data];
3235
+ data.push.apply(data, currentData);
3236
+
3237
+ for (var d = 0; d < data.length; d++) {
3238
+ var id = data[d].id;
3239
+
3240
+ if ($.inArray(id, val) === -1) {
3241
+ val.push(id);
3242
+ }
3243
+ }
3244
+
3245
+ self.$element.val(val);
3246
+ self.$element.trigger('input').trigger('change');
3247
+ });
3248
+ } else {
3249
+ var val = data.id;
3250
+
3251
+ this.$element.val(val);
3252
+ this.$element.trigger('input').trigger('change');
3253
+ }
3254
+ };
3255
+
3256
+ SelectAdapter.prototype.unselect = function (data) {
3257
+ var self = this;
3258
+
3259
+ if (!this.$element.prop('multiple')) {
3260
+ return;
3261
+ }
3262
+
3263
+ data.selected = false;
3264
+
3265
+ if ($(data.element).is('option')) {
3266
+ data.element.selected = false;
3267
+
3268
+ this.$element.trigger('input').trigger('change');
3269
+
3270
+ return;
3271
+ }
3272
+
3273
+ this.current(function (currentData) {
3274
+ var val = [];
3275
+
3276
+ for (var d = 0; d < currentData.length; d++) {
3277
+ var id = currentData[d].id;
3278
+
3279
+ if (id !== data.id && $.inArray(id, val) === -1) {
3280
+ val.push(id);
3281
+ }
3282
+ }
3283
+
3284
+ self.$element.val(val);
3285
+
3286
+ self.$element.trigger('input').trigger('change');
3287
+ });
3288
+ };
3289
+
3290
+ SelectAdapter.prototype.bind = function (container, $container) {
3291
+ var self = this;
3292
+
3293
+ this.container = container;
3294
+
3295
+ container.on('select', function (params) {
3296
+ self.select(params.data);
3297
+ });
3298
+
3299
+ container.on('unselect', function (params) {
3300
+ self.unselect(params.data);
3301
+ });
3302
+ };
3303
+
3304
+ SelectAdapter.prototype.destroy = function () {
3305
+ // Remove anything added to child elements
3306
+ this.$element.find('*').each(function () {
3307
+ // Remove any custom data set by Select2
3308
+ Utils.RemoveData(this);
3309
+ });
3310
+ };
3311
+
3312
+ SelectAdapter.prototype.query = function (params, callback) {
3313
+ var data = [];
3314
+ var self = this;
3315
+
3316
+ var $options = this.$element.children();
3317
+
3318
+ $options.each(function () {
3319
+ var $option = $(this);
3320
+
3321
+ if (!$option.is('option') && !$option.is('optgroup')) {
3322
+ return;
3323
+ }
3324
+
3325
+ var option = self.item($option);
3326
+
3327
+ var matches = self.matches(params, option);
3328
+
3329
+ if (matches !== null) {
3330
+ data.push(matches);
3331
+ }
3332
+ });
3333
+
3334
+ callback({
3335
+ results: data
3336
+ });
3337
+ };
3338
+
3339
+ SelectAdapter.prototype.addOptions = function ($options) {
3340
+ Utils.appendMany(this.$element, $options);
3341
+ };
3342
+
3343
+ SelectAdapter.prototype.option = function (data) {
3344
+ var option;
3345
+
3346
+ if (data.children) {
3347
+ option = document.createElement('optgroup');
3348
+ option.label = data.text;
3349
+ } else {
3350
+ option = document.createElement('option');
3351
+
3352
+ if (option.textContent !== undefined) {
3353
+ option.textContent = data.text;
3354
+ } else {
3355
+ option.innerText = data.text;
3356
+ }
3357
+ }
3358
+
3359
+ if (data.id !== undefined) {
3360
+ option.value = data.id;
3361
+ }
3362
+
3363
+ if (data.disabled) {
3364
+ option.disabled = true;
3365
+ }
3366
+
3367
+ if (data.selected) {
3368
+ option.selected = true;
3369
+ }
3370
+
3371
+ if (data.title) {
3372
+ option.title = data.title;
3373
+ }
3374
+
3375
+ var $option = $(option);
3376
+
3377
+ var normalizedData = this._normalizeItem(data);
3378
+ normalizedData.element = option;
3379
+
3380
+ // Override the option's data with the combined data
3381
+ Utils.StoreData(option, 'data', normalizedData);
3382
+
3383
+ return $option;
3384
+ };
3385
+
3386
+ SelectAdapter.prototype.item = function ($option) {
3387
+ var data = {};
3388
+
3389
+ data = Utils.GetData($option[0], 'data');
3390
+
3391
+ if (data != null) {
3392
+ return data;
3393
+ }
3394
+
3395
+ if ($option.is('option')) {
3396
+ data = {
3397
+ id: $option.val(),
3398
+ text: $option.text(),
3399
+ disabled: $option.prop('disabled'),
3400
+ selected: $option.prop('selected'),
3401
+ title: $option.prop('title')
3402
+ };
3403
+ } else if ($option.is('optgroup')) {
3404
+ data = {
3405
+ text: $option.prop('label'),
3406
+ children: [],
3407
+ title: $option.prop('title')
3408
+ };
3409
+
3410
+ var $children = $option.children('option');
3411
+ var children = [];
3412
+
3413
+ for (var c = 0; c < $children.length; c++) {
3414
+ var $child = $($children[c]);
3415
+
3416
+ var child = this.item($child);
3417
+
3418
+ children.push(child);
3419
+ }
3420
+
3421
+ data.children = children;
3422
+ }
3423
+
3424
+ data = this._normalizeItem(data);
3425
+ data.element = $option[0];
3426
+
3427
+ Utils.StoreData($option[0], 'data', data);
3428
+
3429
+ return data;
3430
+ };
3431
+
3432
+ SelectAdapter.prototype._normalizeItem = function (item) {
3433
+ if (item !== Object(item)) {
3434
+ item = {
3435
+ id: item,
3436
+ text: item
3437
+ };
3438
+ }
3439
+
3440
+ item = $.extend({}, {
3441
+ text: ''
3442
+ }, item);
3443
+
3444
+ var defaults = {
3445
+ selected: false,
3446
+ disabled: false
3447
+ };
3448
+
3449
+ if (item.id != null) {
3450
+ item.id = item.id.toString();
3451
+ }
3452
+
3453
+ if (item.text != null) {
3454
+ item.text = item.text.toString();
3455
+ }
3456
+
3457
+ if (item._resultId == null && item.id && this.container != null) {
3458
+ item._resultId = this.generateResultId(this.container, item);
3459
+ }
3460
+
3461
+ return $.extend({}, defaults, item);
3462
+ };
3463
+
3464
+ SelectAdapter.prototype.matches = function (params, data) {
3465
+ var matcher = this.options.get('matcher');
3466
+
3467
+ return matcher(params, data);
3468
+ };
3469
+
3470
+ return SelectAdapter;
3471
+ });
3472
+
3473
+ S2.define('select2/data/array',[
3474
+ './select',
3475
+ '../utils',
3476
+ 'jquery'
3477
+ ], function (SelectAdapter, Utils, $) {
3478
+ function ArrayAdapter ($element, options) {
3479
+ this._dataToConvert = options.get('data') || [];
3480
+
3481
+ ArrayAdapter.__super__.constructor.call(this, $element, options);
3482
+ }
3483
+
3484
+ Utils.Extend(ArrayAdapter, SelectAdapter);
3485
+
3486
+ ArrayAdapter.prototype.bind = function (container, $container) {
3487
+ ArrayAdapter.__super__.bind.call(this, container, $container);
3488
+
3489
+ this.addOptions(this.convertToOptions(this._dataToConvert));
3490
+ };
3491
+
3492
+ ArrayAdapter.prototype.select = function (data) {
3493
+ var $option = this.$element.find('option').filter(function (i, elm) {
3494
+ return elm.value == data.id.toString();
3495
+ });
3496
+
3497
+ if ($option.length === 0) {
3498
+ $option = this.option(data);
3499
+
3500
+ this.addOptions($option);
3501
+ }
3502
+
3503
+ ArrayAdapter.__super__.select.call(this, data);
3504
+ };
3505
+
3506
+ ArrayAdapter.prototype.convertToOptions = function (data) {
3507
+ var self = this;
3508
+
3509
+ var $existing = this.$element.find('option');
3510
+ var existingIds = $existing.map(function () {
3511
+ return self.item($(this)).id;
3512
+ }).get();
3513
+
3514
+ var $options = [];
3515
+
3516
+ // Filter out all items except for the one passed in the argument
3517
+ function onlyItem (item) {
3518
+ return function () {
3519
+ return $(this).val() == item.id;
3520
+ };
3521
+ }
3522
+
3523
+ for (var d = 0; d < data.length; d++) {
3524
+ var item = this._normalizeItem(data[d]);
3525
+
3526
+ // Skip items which were pre-loaded, only merge the data
3527
+ if ($.inArray(item.id, existingIds) >= 0) {
3528
+ var $existingOption = $existing.filter(onlyItem(item));
3529
+
3530
+ var existingData = this.item($existingOption);
3531
+ var newData = $.extend(true, {}, item, existingData);
3532
+
3533
+ var $newOption = this.option(newData);
3534
+
3535
+ $existingOption.replaceWith($newOption);
3536
+
3537
+ continue;
3538
+ }
3539
+
3540
+ var $option = this.option(item);
3541
+
3542
+ if (item.children) {
3543
+ var $children = this.convertToOptions(item.children);
3544
+
3545
+ Utils.appendMany($option, $children);
3546
+ }
3547
+
3548
+ $options.push($option);
3549
+ }
3550
+
3551
+ return $options;
3552
+ };
3553
+
3554
+ return ArrayAdapter;
3555
+ });
3556
+
3557
+ S2.define('select2/data/ajax',[
3558
+ './array',
3559
+ '../utils',
3560
+ 'jquery'
3561
+ ], function (ArrayAdapter, Utils, $) {
3562
+ function AjaxAdapter ($element, options) {
3563
+ this.ajaxOptions = this._applyDefaults(options.get('ajax'));
3564
+
3565
+ if (this.ajaxOptions.processResults != null) {
3566
+ this.processResults = this.ajaxOptions.processResults;
3567
+ }
3568
+
3569
+ AjaxAdapter.__super__.constructor.call(this, $element, options);
3570
+ }
3571
+
3572
+ Utils.Extend(AjaxAdapter, ArrayAdapter);
3573
+
3574
+ AjaxAdapter.prototype._applyDefaults = function (options) {
3575
+ var defaults = {
3576
+ data: function (params) {
3577
+ return $.extend({}, params, {
3578
+ q: params.term
3579
+ });
3580
+ },
3581
+ transport: function (params, success, failure) {
3582
+ var $request = $.ajax(params);
3583
+
3584
+ $request.then(success);
3585
+ $request.fail(failure);
3586
+
3587
+ return $request;
3588
+ }
3589
+ };
3590
+
3591
+ return $.extend({}, defaults, options, true);
3592
+ };
3593
+
3594
+ AjaxAdapter.prototype.processResults = function (results) {
3595
+ return results;
3596
+ };
3597
+
3598
+ AjaxAdapter.prototype.query = function (params, callback) {
3599
+ var matches = [];
3600
+ var self = this;
3601
+
3602
+ if (this._request != null) {
3603
+ // JSONP requests cannot always be aborted
3604
+ if ($.isFunction(this._request.abort)) {
3605
+ this._request.abort();
3606
+ }
3607
+
3608
+ this._request = null;
3609
+ }
3610
+
3611
+ var options = $.extend({
3612
+ type: 'GET'
3613
+ }, this.ajaxOptions);
3614
+
3615
+ if (typeof options.url === 'function') {
3616
+ options.url = options.url.call(this.$element, params);
3617
+ }
3618
+
3619
+ if (typeof options.data === 'function') {
3620
+ options.data = options.data.call(this.$element, params);
3621
+ }
3622
+
3623
+ function request () {
3624
+ var $request = options.transport(options, function (data) {
3625
+ var results = self.processResults(data, params);
3626
+
3627
+ if (self.options.get('debug') && window.console && console.error) {
3628
+ // Check to make sure that the response included a `results` key.
3629
+ if (!results || !results.results || !$.isArray(results.results)) {
3630
+ console.error(
3631
+ 'Select2: The AJAX results did not return an array in the ' +
3632
+ '`results` key of the response.'
3633
+ );
3634
+ }
3635
+ }
3636
+
3637
+ callback(results);
3638
+ }, function () {
3639
+ // Attempt to detect if a request was aborted
3640
+ // Only works if the transport exposes a status property
3641
+ if ('status' in $request &&
3642
+ ($request.status === 0 || $request.status === '0')) {
3643
+ return;
3644
+ }
3645
+
3646
+ self.trigger('results:message', {
3647
+ message: 'errorLoading'
3648
+ });
3649
+ });
3650
+
3651
+ self._request = $request;
3652
+ }
3653
+
3654
+ if (this.ajaxOptions.delay && params.term != null) {
3655
+ if (this._queryTimeout) {
3656
+ window.clearTimeout(this._queryTimeout);
3657
+ }
3658
+
3659
+ this._queryTimeout = window.setTimeout(request, this.ajaxOptions.delay);
3660
+ } else {
3661
+ request();
3662
+ }
3663
+ };
3664
+
3665
+ return AjaxAdapter;
3666
+ });
3667
+
3668
+ S2.define('select2/data/tags',[
3669
+ 'jquery'
3670
+ ], function ($) {
3671
+ function Tags (decorated, $element, options) {
3672
+ var tags = options.get('tags');
3673
+
3674
+ var createTag = options.get('createTag');
3675
+
3676
+ if (createTag !== undefined) {
3677
+ this.createTag = createTag;
3678
+ }
3679
+
3680
+ var insertTag = options.get('insertTag');
3681
+
3682
+ if (insertTag !== undefined) {
3683
+ this.insertTag = insertTag;
3684
+ }
3685
+
3686
+ decorated.call(this, $element, options);
3687
+
3688
+ if ($.isArray(tags)) {
3689
+ for (var t = 0; t < tags.length; t++) {
3690
+ var tag = tags[t];
3691
+ var item = this._normalizeItem(tag);
3692
+
3693
+ var $option = this.option(item);
3694
+
3695
+ this.$element.append($option);
3696
+ }
3697
+ }
3698
+ }
3699
+
3700
+ Tags.prototype.query = function (decorated, params, callback) {
3701
+ var self = this;
3702
+
3703
+ this._removeOldTags();
3704
+
3705
+ if (params.term == null || params.page != null) {
3706
+ decorated.call(this, params, callback);
3707
+ return;
3708
+ }
3709
+
3710
+ function wrapper (obj, child) {
3711
+ var data = obj.results;
3712
+
3713
+ for (var i = 0; i < data.length; i++) {
3714
+ var option = data[i];
3715
+
3716
+ var checkChildren = (
3717
+ option.children != null &&
3718
+ !wrapper({
3719
+ results: option.children
3720
+ }, true)
3721
+ );
3722
+
3723
+ var optionText = (option.text || '').toUpperCase();
3724
+ var paramsTerm = (params.term || '').toUpperCase();
3725
+
3726
+ var checkText = optionText === paramsTerm;
3727
+
3728
+ if (checkText || checkChildren) {
3729
+ if (child) {
3730
+ return false;
3731
+ }
3732
+
3733
+ obj.data = data;
3734
+ callback(obj);
3735
+
3736
+ return;
3737
+ }
3738
+ }
3739
+
3740
+ if (child) {
3741
+ return true;
3742
+ }
3743
+
3744
+ var tag = self.createTag(params);
3745
+
3746
+ if (tag != null) {
3747
+ var $option = self.option(tag);
3748
+ $option.attr('data-select2-tag', true);
3749
+
3750
+ self.addOptions([$option]);
3751
+
3752
+ self.insertTag(data, tag);
3753
+ }
3754
+
3755
+ obj.results = data;
3756
+
3757
+ callback(obj);
3758
+ }
3759
+
3760
+ decorated.call(this, params, wrapper);
3761
+ };
3762
+
3763
+ Tags.prototype.createTag = function (decorated, params) {
3764
+ var term = $.trim(params.term);
3765
+
3766
+ if (term === '') {
3767
+ return null;
3768
+ }
3769
+
3770
+ return {
3771
+ id: term,
3772
+ text: term
3773
+ };
3774
+ };
3775
+
3776
+ Tags.prototype.insertTag = function (_, data, tag) {
3777
+ data.unshift(tag);
3778
+ };
3779
+
3780
+ Tags.prototype._removeOldTags = function (_) {
3781
+ var $options = this.$element.find('option[data-select2-tag]');
3782
+
3783
+ $options.each(function () {
3784
+ if (this.selected) {
3785
+ return;
3786
+ }
3787
+
3788
+ $(this).remove();
3789
+ });
3790
+ };
3791
+
3792
+ return Tags;
3793
+ });
3794
+
3795
+ S2.define('select2/data/tokenizer',[
3796
+ 'jquery'
3797
+ ], function ($) {
3798
+ function Tokenizer (decorated, $element, options) {
3799
+ var tokenizer = options.get('tokenizer');
3800
+
3801
+ if (tokenizer !== undefined) {
3802
+ this.tokenizer = tokenizer;
3803
+ }
3804
+
3805
+ decorated.call(this, $element, options);
3806
+ }
3807
+
3808
+ Tokenizer.prototype.bind = function (decorated, container, $container) {
3809
+ decorated.call(this, container, $container);
3810
+
3811
+ this.$search = container.dropdown.$search || container.selection.$search ||
3812
+ $container.find('.select2-search__field');
3813
+ };
3814
+
3815
+ Tokenizer.prototype.query = function (decorated, params, callback) {
3816
+ var self = this;
3817
+
3818
+ function createAndSelect (data) {
3819
+ // Normalize the data object so we can use it for checks
3820
+ var item = self._normalizeItem(data);
3821
+
3822
+ // Check if the data object already exists as a tag
3823
+ // Select it if it doesn't
3824
+ var $existingOptions = self.$element.find('option').filter(function () {
3825
+ return $(this).val() === item.id;
3826
+ });
3827
+
3828
+ // If an existing option wasn't found for it, create the option
3829
+ if (!$existingOptions.length) {
3830
+ var $option = self.option(item);
3831
+ $option.attr('data-select2-tag', true);
3832
+
3833
+ self._removeOldTags();
3834
+ self.addOptions([$option]);
3835
+ }
3836
+
3837
+ // Select the item, now that we know there is an option for it
3838
+ select(item);
3839
+ }
3840
+
3841
+ function select (data) {
3842
+ self.trigger('select', {
3843
+ data: data
3844
+ });
3845
+ }
3846
+
3847
+ params.term = params.term || '';
3848
+
3849
+ var tokenData = this.tokenizer(params, this.options, createAndSelect);
3850
+
3851
+ if (tokenData.term !== params.term) {
3852
+ // Replace the search term if we have the search box
3853
+ if (this.$search.length) {
3854
+ this.$search.val(tokenData.term);
3855
+ this.$search.trigger('focus');
3856
+ }
3857
+
3858
+ params.term = tokenData.term;
3859
+ }
3860
+
3861
+ decorated.call(this, params, callback);
3862
+ };
3863
+
3864
+ Tokenizer.prototype.tokenizer = function (_, params, options, callback) {
3865
+ var separators = options.get('tokenSeparators') || [];
3866
+ var term = params.term;
3867
+ var i = 0;
3868
+
3869
+ var createTag = this.createTag || function (params) {
3870
+ return {
3871
+ id: params.term,
3872
+ text: params.term
3873
+ };
3874
+ };
3875
+
3876
+ while (i < term.length) {
3877
+ var termChar = term[i];
3878
+
3879
+ if ($.inArray(termChar, separators) === -1) {
3880
+ i++;
3881
+
3882
+ continue;
3883
+ }
3884
+
3885
+ var part = term.substr(0, i);
3886
+ var partParams = $.extend({}, params, {
3887
+ term: part
3888
+ });
3889
+
3890
+ var data = createTag(partParams);
3891
+
3892
+ if (data == null) {
3893
+ i++;
3894
+ continue;
3895
+ }
3896
+
3897
+ callback(data);
3898
+
3899
+ // Reset the term to not include the tokenized portion
3900
+ term = term.substr(i + 1) || '';
3901
+ i = 0;
3902
+ }
3903
+
3904
+ return {
3905
+ term: term
3906
+ };
3907
+ };
3908
+
3909
+ return Tokenizer;
3910
+ });
3911
+
3912
+ S2.define('select2/data/minimumInputLength',[
3913
+
3914
+ ], function () {
3915
+ function MinimumInputLength (decorated, $e, options) {
3916
+ this.minimumInputLength = options.get('minimumInputLength');
3917
+
3918
+ decorated.call(this, $e, options);
3919
+ }
3920
+
3921
+ MinimumInputLength.prototype.query = function (decorated, params, callback) {
3922
+ params.term = params.term || '';
3923
+
3924
+ if (params.term.length < this.minimumInputLength) {
3925
+ this.trigger('results:message', {
3926
+ message: 'inputTooShort',
3927
+ args: {
3928
+ minimum: this.minimumInputLength,
3929
+ input: params.term,
3930
+ params: params
3931
+ }
3932
+ });
3933
+
3934
+ return;
3935
+ }
3936
+
3937
+ decorated.call(this, params, callback);
3938
+ };
3939
+
3940
+ return MinimumInputLength;
3941
+ });
3942
+
3943
+ S2.define('select2/data/maximumInputLength',[
3944
+
3945
+ ], function () {
3946
+ function MaximumInputLength (decorated, $e, options) {
3947
+ this.maximumInputLength = options.get('maximumInputLength');
3948
+
3949
+ decorated.call(this, $e, options);
3950
+ }
3951
+
3952
+ MaximumInputLength.prototype.query = function (decorated, params, callback) {
3953
+ params.term = params.term || '';
3954
+
3955
+ if (this.maximumInputLength > 0 &&
3956
+ params.term.length > this.maximumInputLength) {
3957
+ this.trigger('results:message', {
3958
+ message: 'inputTooLong',
3959
+ args: {
3960
+ maximum: this.maximumInputLength,
3961
+ input: params.term,
3962
+ params: params
3963
+ }
3964
+ });
3965
+
3966
+ return;
3967
+ }
3968
+
3969
+ decorated.call(this, params, callback);
3970
+ };
3971
+
3972
+ return MaximumInputLength;
3973
+ });
3974
+
3975
+ S2.define('select2/data/maximumSelectionLength',[
3976
+
3977
+ ], function (){
3978
+ function MaximumSelectionLength (decorated, $e, options) {
3979
+ this.maximumSelectionLength = options.get('maximumSelectionLength');
3980
+
3981
+ decorated.call(this, $e, options);
3982
+ }
3983
+
3984
+ MaximumSelectionLength.prototype.bind =
3985
+ function (decorated, container, $container) {
3986
+ var self = this;
3987
+
3988
+ decorated.call(this, container, $container);
3989
+
3990
+ container.on('select', function () {
3991
+ self._checkIfMaximumSelected();
3992
+ });
3993
+ };
3994
+
3995
+ MaximumSelectionLength.prototype.query =
3996
+ function (decorated, params, callback) {
3997
+ var self = this;
3998
+
3999
+ this._checkIfMaximumSelected(function () {
4000
+ decorated.call(self, params, callback);
4001
+ });
4002
+ };
4003
+
4004
+ MaximumSelectionLength.prototype._checkIfMaximumSelected =
4005
+ function (_, successCallback) {
4006
+ var self = this;
4007
+
4008
+ this.current(function (currentData) {
4009
+ var count = currentData != null ? currentData.length : 0;
4010
+ if (self.maximumSelectionLength > 0 &&
4011
+ count >= self.maximumSelectionLength) {
4012
+ self.trigger('results:message', {
4013
+ message: 'maximumSelected',
4014
+ args: {
4015
+ maximum: self.maximumSelectionLength
4016
+ }
4017
+ });
4018
+ return;
4019
+ }
4020
+
4021
+ if (successCallback) {
4022
+ successCallback();
4023
+ }
4024
+ });
4025
+ };
4026
+
4027
+ return MaximumSelectionLength;
4028
+ });
4029
+
4030
+ S2.define('select2/dropdown',[
4031
+ 'jquery',
4032
+ './utils'
4033
+ ], function ($, Utils) {
4034
+ function Dropdown ($element, options) {
4035
+ this.$element = $element;
4036
+ this.options = options;
4037
+
4038
+ Dropdown.__super__.constructor.call(this);
4039
+ }
4040
+
4041
+ Utils.Extend(Dropdown, Utils.Observable);
4042
+
4043
+ Dropdown.prototype.render = function () {
4044
+ var $dropdown = $(
4045
+ '<span class="select2-dropdown">' +
4046
+ '<span class="select2-results"></span>' +
4047
+ '</span>'
4048
+ );
4049
+
4050
+ $dropdown.attr('dir', this.options.get('dir'));
4051
+
4052
+ this.$dropdown = $dropdown;
4053
+
4054
+ return $dropdown;
4055
+ };
4056
+
4057
+ Dropdown.prototype.bind = function () {
4058
+ // Should be implemented in subclasses
4059
+ };
4060
+
4061
+ Dropdown.prototype.position = function ($dropdown, $container) {
4062
+ // Should be implemented in subclasses
4063
+ };
4064
+
4065
+ Dropdown.prototype.destroy = function () {
4066
+ // Remove the dropdown from the DOM
4067
+ this.$dropdown.remove();
4068
+ };
4069
+
4070
+ return Dropdown;
4071
+ });
4072
+
4073
+ S2.define('select2/dropdown/search',[
4074
+ 'jquery',
4075
+ '../utils'
4076
+ ], function ($, Utils) {
4077
+ function Search () { }
4078
+
4079
+ Search.prototype.render = function (decorated) {
4080
+ var $rendered = decorated.call(this);
4081
+
4082
+ var $search = $(
4083
+ '<span class="select2-search select2-search--dropdown">' +
4084
+ '<input class="select2-search__field" type="search" tabindex="-1"' +
4085
+ ' autocomplete="off" autocorrect="off" autocapitalize="none"' +
4086
+ ' spellcheck="false" role="searchbox" aria-autocomplete="list" />' +
4087
+ '</span>'
4088
+ );
4089
+
4090
+ this.$searchContainer = $search;
4091
+ this.$search = $search.find('input');
4092
+
4093
+ $rendered.prepend($search);
4094
+
4095
+ return $rendered;
4096
+ };
4097
+
4098
+ Search.prototype.bind = function (decorated, container, $container) {
4099
+ var self = this;
4100
+
4101
+ var resultsId = container.id + '-results';
4102
+
4103
+ decorated.call(this, container, $container);
4104
+
4105
+ this.$search.on('keydown', function (evt) {
4106
+ self.trigger('keypress', evt);
4107
+
4108
+ self._keyUpPrevented = evt.isDefaultPrevented();
4109
+ });
4110
+
4111
+ // Workaround for browsers which do not support the `input` event
4112
+ // This will prevent double-triggering of events for browsers which support
4113
+ // both the `keyup` and `input` events.
4114
+ this.$search.on('input', function (evt) {
4115
+ // Unbind the duplicated `keyup` event
4116
+ $(this).off('keyup');
4117
+ });
4118
+
4119
+ this.$search.on('keyup input', function (evt) {
4120
+ self.handleSearch(evt);
4121
+ });
4122
+
4123
+ container.on('open', function () {
4124
+ self.$search.attr('tabindex', 0);
4125
+ self.$search.attr('aria-controls', resultsId);
4126
+
4127
+ self.$search.trigger('focus');
4128
+
4129
+ window.setTimeout(function () {
4130
+ self.$search.trigger('focus');
4131
+ }, 0);
4132
+ });
4133
+
4134
+ container.on('close', function () {
4135
+ self.$search.attr('tabindex', -1);
4136
+ self.$search.removeAttr('aria-controls');
4137
+ self.$search.removeAttr('aria-activedescendant');
4138
+
4139
+ self.$search.val('');
4140
+ self.$search.trigger('blur');
4141
+ });
4142
+
4143
+ container.on('focus', function () {
4144
+ if (!container.isOpen()) {
4145
+ self.$search.trigger('focus');
4146
+ }
4147
+ });
4148
+
4149
+ container.on('results:all', function (params) {
4150
+ if (params.query.term == null || params.query.term === '') {
4151
+ var showSearch = self.showSearch(params);
4152
+
4153
+ if (showSearch) {
4154
+ self.$searchContainer.removeClass('select2-search--hide');
4155
+ } else {
4156
+ self.$searchContainer.addClass('select2-search--hide');
4157
+ }
4158
+ }
4159
+ });
4160
+
4161
+ container.on('results:focus', function (params) {
4162
+ if (params.data._resultId) {
4163
+ self.$search.attr('aria-activedescendant', params.data._resultId);
4164
+ } else {
4165
+ self.$search.removeAttr('aria-activedescendant');
4166
+ }
4167
+ });
4168
+ };
4169
+
4170
+ Search.prototype.handleSearch = function (evt) {
4171
+ if (!this._keyUpPrevented) {
4172
+ var input = this.$search.val();
4173
+
4174
+ this.trigger('query', {
4175
+ term: input
4176
+ });
4177
+ }
4178
+
4179
+ this._keyUpPrevented = false;
4180
+ };
4181
+
4182
+ Search.prototype.showSearch = function (_, params) {
4183
+ return true;
4184
+ };
4185
+
4186
+ return Search;
4187
+ });
4188
+
4189
+ S2.define('select2/dropdown/hidePlaceholder',[
4190
+
4191
+ ], function () {
4192
+ function HidePlaceholder (decorated, $element, options, dataAdapter) {
4193
+ this.placeholder = this.normalizePlaceholder(options.get('placeholder'));
4194
+
4195
+ decorated.call(this, $element, options, dataAdapter);
4196
+ }
4197
+
4198
+ HidePlaceholder.prototype.append = function (decorated, data) {
4199
+ data.results = this.removePlaceholder(data.results);
4200
+
4201
+ decorated.call(this, data);
4202
+ };
4203
+
4204
+ HidePlaceholder.prototype.normalizePlaceholder = function (_, placeholder) {
4205
+ if (typeof placeholder === 'string') {
4206
+ placeholder = {
4207
+ id: '',
4208
+ text: placeholder
4209
+ };
4210
+ }
4211
+
4212
+ return placeholder;
4213
+ };
4214
+
4215
+ HidePlaceholder.prototype.removePlaceholder = function (_, data) {
4216
+ var modifiedData = data.slice(0);
4217
+
4218
+ for (var d = data.length - 1; d >= 0; d--) {
4219
+ var item = data[d];
4220
+
4221
+ if (this.placeholder.id === item.id) {
4222
+ modifiedData.splice(d, 1);
4223
+ }
4224
+ }
4225
+
4226
+ return modifiedData;
4227
+ };
4228
+
4229
+ return HidePlaceholder;
4230
+ });
4231
+
4232
+ S2.define('select2/dropdown/infiniteScroll',[
4233
+ 'jquery'
4234
+ ], function ($) {
4235
+ function InfiniteScroll (decorated, $element, options, dataAdapter) {
4236
+ this.lastParams = {};
4237
+
4238
+ decorated.call(this, $element, options, dataAdapter);
4239
+
4240
+ this.$loadingMore = this.createLoadingMore();
4241
+ this.loading = false;
4242
+ }
4243
+
4244
+ InfiniteScroll.prototype.append = function (decorated, data) {
4245
+ this.$loadingMore.remove();
4246
+ this.loading = false;
4247
+
4248
+ decorated.call(this, data);
4249
+
4250
+ if (this.showLoadingMore(data)) {
4251
+ this.$results.append(this.$loadingMore);
4252
+ this.loadMoreIfNeeded();
4253
+ }
4254
+ };
4255
+
4256
+ InfiniteScroll.prototype.bind = function (decorated, container, $container) {
4257
+ var self = this;
4258
+
4259
+ decorated.call(this, container, $container);
4260
+
4261
+ container.on('query', function (params) {
4262
+ self.lastParams = params;
4263
+ self.loading = true;
4264
+ });
4265
+
4266
+ container.on('query:append', function (params) {
4267
+ self.lastParams = params;
4268
+ self.loading = true;
4269
+ });
4270
+
4271
+ this.$results.on('scroll', this.loadMoreIfNeeded.bind(this));
4272
+ };
4273
+
4274
+ InfiniteScroll.prototype.loadMoreIfNeeded = function () {
4275
+ var isLoadMoreVisible = $.contains(
4276
+ document.documentElement,
4277
+ this.$loadingMore[0]
4278
+ );
4279
+
4280
+ if (this.loading || !isLoadMoreVisible) {
4281
+ return;
4282
+ }
4283
+
4284
+ var currentOffset = this.$results.offset().top +
4285
+ this.$results.outerHeight(false);
4286
+ var loadingMoreOffset = this.$loadingMore.offset().top +
4287
+ this.$loadingMore.outerHeight(false);
4288
+
4289
+ if (currentOffset + 50 >= loadingMoreOffset) {
4290
+ this.loadMore();
4291
+ }
4292
+ };
4293
+
4294
+ InfiniteScroll.prototype.loadMore = function () {
4295
+ this.loading = true;
4296
+
4297
+ var params = $.extend({}, {page: 1}, this.lastParams);
4298
+
4299
+ params.page++;
4300
+
4301
+ this.trigger('query:append', params);
4302
+ };
4303
+
4304
+ InfiniteScroll.prototype.showLoadingMore = function (_, data) {
4305
+ return data.pagination && data.pagination.more;
4306
+ };
4307
+
4308
+ InfiniteScroll.prototype.createLoadingMore = function () {
4309
+ var $option = $(
4310
+ '<li ' +
4311
+ 'class="select2-results__option select2-results__option--load-more"' +
4312
+ 'role="option" aria-disabled="true"></li>'
4313
+ );
4314
+
4315
+ var message = this.options.get('translations').get('loadingMore');
4316
+
4317
+ $option.html(message(this.lastParams));
4318
+
4319
+ return $option;
4320
+ };
4321
+
4322
+ return InfiniteScroll;
4323
+ });
4324
+
4325
+ S2.define('select2/dropdown/attachBody',[
4326
+ 'jquery',
4327
+ '../utils'
4328
+ ], function ($, Utils) {
4329
+ function AttachBody (decorated, $element, options) {
4330
+ this.$dropdownParent = $(options.get('dropdownParent') || document.body);
4331
+
4332
+ decorated.call(this, $element, options);
4333
+ }
4334
+
4335
+ AttachBody.prototype.bind = function (decorated, container, $container) {
4336
+ var self = this;
4337
+
4338
+ decorated.call(this, container, $container);
4339
+
4340
+ container.on('open', function () {
4341
+ self._showDropdown();
4342
+ self._attachPositioningHandler(container);
4343
+
4344
+ // Must bind after the results handlers to ensure correct sizing
4345
+ self._bindContainerResultHandlers(container);
4346
+ });
4347
+
4348
+ container.on('close', function () {
4349
+ self._hideDropdown();
4350
+ self._detachPositioningHandler(container);
4351
+ });
4352
+
4353
+ this.$dropdownContainer.on('mousedown', function (evt) {
4354
+ evt.stopPropagation();
4355
+ });
4356
+ };
4357
+
4358
+ AttachBody.prototype.destroy = function (decorated) {
4359
+ decorated.call(this);
4360
+
4361
+ this.$dropdownContainer.remove();
4362
+ };
4363
+
4364
+ AttachBody.prototype.position = function (decorated, $dropdown, $container) {
4365
+ // Clone all of the container classes
4366
+ $dropdown.attr('class', $container.attr('class'));
4367
+
4368
+ $dropdown.removeClass('select2');
4369
+ $dropdown.addClass('select2-container--open');
4370
+
4371
+ $dropdown.css({
4372
+ position: 'absolute',
4373
+ top: -999999
4374
+ });
4375
+
4376
+ this.$container = $container;
4377
+ };
4378
+
4379
+ AttachBody.prototype.render = function (decorated) {
4380
+ var $container = $('<span></span>');
4381
+
4382
+ var $dropdown = decorated.call(this);
4383
+ $container.append($dropdown);
4384
+
4385
+ this.$dropdownContainer = $container;
4386
+
4387
+ return $container;
4388
+ };
4389
+
4390
+ AttachBody.prototype._hideDropdown = function (decorated) {
4391
+ this.$dropdownContainer.detach();
4392
+ };
4393
+
4394
+ AttachBody.prototype._bindContainerResultHandlers =
4395
+ function (decorated, container) {
4396
+
4397
+ // These should only be bound once
4398
+ if (this._containerResultsHandlersBound) {
4399
+ return;
4400
+ }
4401
+
4402
+ var self = this;
4403
+
4404
+ container.on('results:all', function () {
4405
+ self._positionDropdown();
4406
+ self._resizeDropdown();
4407
+ });
4408
+
4409
+ container.on('results:append', function () {
4410
+ self._positionDropdown();
4411
+ self._resizeDropdown();
4412
+ });
4413
+
4414
+ container.on('results:message', function () {
4415
+ self._positionDropdown();
4416
+ self._resizeDropdown();
4417
+ });
4418
+
4419
+ container.on('select', function () {
4420
+ self._positionDropdown();
4421
+ self._resizeDropdown();
4422
+ });
4423
+
4424
+ container.on('unselect', function () {
4425
+ self._positionDropdown();
4426
+ self._resizeDropdown();
4427
+ });
4428
+
4429
+ this._containerResultsHandlersBound = true;
4430
+ };
4431
+
4432
+ AttachBody.prototype._attachPositioningHandler =
4433
+ function (decorated, container) {
4434
+ var self = this;
4435
+
4436
+ var scrollEvent = 'scroll.select2.' + container.id;
4437
+ var resizeEvent = 'resize.select2.' + container.id;
4438
+ var orientationEvent = 'orientationchange.select2.' + container.id;
4439
+
4440
+ var $watchers = this.$container.parents().filter(Utils.hasScroll);
4441
+ $watchers.each(function () {
4442
+ Utils.StoreData(this, 'select2-scroll-position', {
4443
+ x: $(this).scrollLeft(),
4444
+ y: $(this).scrollTop()
4445
+ });
4446
+ });
4447
+
4448
+ $watchers.on(scrollEvent, function (ev) {
4449
+ var position = Utils.GetData(this, 'select2-scroll-position');
4450
+ $(this).scrollTop(position.y);
4451
+ });
4452
+
4453
+ $(window).on(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent,
4454
+ function (e) {
4455
+ self._positionDropdown();
4456
+ self._resizeDropdown();
4457
+ });
4458
+ };
4459
+
4460
+ AttachBody.prototype._detachPositioningHandler =
4461
+ function (decorated, container) {
4462
+ var scrollEvent = 'scroll.select2.' + container.id;
4463
+ var resizeEvent = 'resize.select2.' + container.id;
4464
+ var orientationEvent = 'orientationchange.select2.' + container.id;
4465
+
4466
+ var $watchers = this.$container.parents().filter(Utils.hasScroll);
4467
+ $watchers.off(scrollEvent);
4468
+
4469
+ $(window).off(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent);
4470
+ };
4471
+
4472
+ AttachBody.prototype._positionDropdown = function () {
4473
+ var $window = $(window);
4474
+
4475
+ var isCurrentlyAbove = this.$dropdown.hasClass('select2-dropdown--above');
4476
+ var isCurrentlyBelow = this.$dropdown.hasClass('select2-dropdown--below');
4477
+
4478
+ var newDirection = null;
4479
+
4480
+ var offset = this.$container.offset();
4481
+
4482
+ offset.bottom = offset.top + this.$container.outerHeight(false);
4483
+
4484
+ var container = {
4485
+ height: this.$container.outerHeight(false)
4486
+ };
4487
+
4488
+ container.top = offset.top;
4489
+ container.bottom = offset.top + container.height;
4490
+
4491
+ var dropdown = {
4492
+ height: this.$dropdown.outerHeight(false)
4493
+ };
4494
+
4495
+ var viewport = {
4496
+ top: $window.scrollTop(),
4497
+ bottom: $window.scrollTop() + $window.height()
4498
+ };
4499
+
4500
+ var enoughRoomAbove = viewport.top < (offset.top - dropdown.height);
4501
+ var enoughRoomBelow = viewport.bottom > (offset.bottom + dropdown.height);
4502
+
4503
+ var css = {
4504
+ left: offset.left,
4505
+ top: container.bottom
4506
+ };
4507
+
4508
+ // Determine what the parent element is to use for calculating the offset
4509
+ var $offsetParent = this.$dropdownParent;
4510
+
4511
+ // For statically positioned elements, we need to get the element
4512
+ // that is determining the offset
4513
+ if ($offsetParent.css('position') === 'static') {
4514
+ $offsetParent = $offsetParent.offsetParent();
4515
+ }
4516
+
4517
+ var parentOffset = {
4518
+ top: 0,
4519
+ left: 0
4520
+ };
4521
+
4522
+ if (
4523
+ $.contains(document.body, $offsetParent[0]) ||
4524
+ $offsetParent[0].isConnected
4525
+ ) {
4526
+ parentOffset = $offsetParent.offset();
4527
+ }
4528
+
4529
+ css.top -= parentOffset.top;
4530
+ css.left -= parentOffset.left;
4531
+
4532
+ if (!isCurrentlyAbove && !isCurrentlyBelow) {
4533
+ newDirection = 'below';
4534
+ }
4535
+
4536
+ if (!enoughRoomBelow && enoughRoomAbove && !isCurrentlyAbove) {
4537
+ newDirection = 'above';
4538
+ } else if (!enoughRoomAbove && enoughRoomBelow && isCurrentlyAbove) {
4539
+ newDirection = 'below';
4540
+ }
4541
+
4542
+ if (newDirection == 'above' ||
4543
+ (isCurrentlyAbove && newDirection !== 'below')) {
4544
+ css.top = container.top - parentOffset.top - dropdown.height;
4545
+ }
4546
+
4547
+ if (newDirection != null) {
4548
+ this.$dropdown
4549
+ .removeClass('select2-dropdown--below select2-dropdown--above')
4550
+ .addClass('select2-dropdown--' + newDirection);
4551
+ this.$container
4552
+ .removeClass('select2-container--below select2-container--above')
4553
+ .addClass('select2-container--' + newDirection);
4554
+ }
4555
+
4556
+ this.$dropdownContainer.css(css);
4557
+ };
4558
+
4559
+ AttachBody.prototype._resizeDropdown = function () {
4560
+ var css = {
4561
+ width: this.$container.outerWidth(false) + 'px'
4562
+ };
4563
+
4564
+ if (this.options.get('dropdownAutoWidth')) {
4565
+ css.minWidth = css.width;
4566
+ css.position = 'relative';
4567
+ css.width = 'auto';
4568
+ }
4569
+
4570
+ this.$dropdown.css(css);
4571
+ };
4572
+
4573
+ AttachBody.prototype._showDropdown = function (decorated) {
4574
+ this.$dropdownContainer.appendTo(this.$dropdownParent);
4575
+
4576
+ this._positionDropdown();
4577
+ this._resizeDropdown();
4578
+ };
4579
+
4580
+ return AttachBody;
4581
+ });
4582
+
4583
+ S2.define('select2/dropdown/minimumResultsForSearch',[
4584
+
4585
+ ], function () {
4586
+ function countResults (data) {
4587
+ var count = 0;
4588
+
4589
+ for (var d = 0; d < data.length; d++) {
4590
+ var item = data[d];
4591
+
4592
+ if (item.children) {
4593
+ count += countResults(item.children);
4594
+ } else {
4595
+ count++;
4596
+ }
4597
+ }
4598
+
4599
+ return count;
4600
+ }
4601
+
4602
+ function MinimumResultsForSearch (decorated, $element, options, dataAdapter) {
4603
+ this.minimumResultsForSearch = options.get('minimumResultsForSearch');
4604
+
4605
+ if (this.minimumResultsForSearch < 0) {
4606
+ this.minimumResultsForSearch = Infinity;
4607
+ }
4608
+
4609
+ decorated.call(this, $element, options, dataAdapter);
4610
+ }
4611
+
4612
+ MinimumResultsForSearch.prototype.showSearch = function (decorated, params) {
4613
+ if (countResults(params.data.results) < this.minimumResultsForSearch) {
4614
+ return false;
4615
+ }
4616
+
4617
+ return decorated.call(this, params);
4618
+ };
4619
+
4620
+ return MinimumResultsForSearch;
4621
+ });
4622
+
4623
+ S2.define('select2/dropdown/selectOnClose',[
4624
+ '../utils'
4625
+ ], function (Utils) {
4626
+ function SelectOnClose () { }
4627
+
4628
+ SelectOnClose.prototype.bind = function (decorated, container, $container) {
4629
+ var self = this;
4630
+
4631
+ decorated.call(this, container, $container);
4632
+
4633
+ container.on('close', function (params) {
4634
+ self._handleSelectOnClose(params);
4635
+ });
4636
+ };
4637
+
4638
+ SelectOnClose.prototype._handleSelectOnClose = function (_, params) {
4639
+ if (params && params.originalSelect2Event != null) {
4640
+ var event = params.originalSelect2Event;
4641
+
4642
+ // Don't select an item if the close event was triggered from a select or
4643
+ // unselect event
4644
+ if (event._type === 'select' || event._type === 'unselect') {
4645
+ return;
4646
+ }
4647
+ }
4648
+
4649
+ var $highlightedResults = this.getHighlightedResults();
4650
+
4651
+ // Only select highlighted results
4652
+ if ($highlightedResults.length < 1) {
4653
+ return;
4654
+ }
4655
+
4656
+ var data = Utils.GetData($highlightedResults[0], 'data');
4657
+
4658
+ // Don't re-select already selected resulte
4659
+ if (
4660
+ (data.element != null && data.element.selected) ||
4661
+ (data.element == null && data.selected)
4662
+ ) {
4663
+ return;
4664
+ }
4665
+
4666
+ this.trigger('select', {
4667
+ data: data
4668
+ });
4669
+ };
4670
+
4671
+ return SelectOnClose;
4672
+ });
4673
+
4674
+ S2.define('select2/dropdown/closeOnSelect',[
4675
+
4676
+ ], function () {
4677
+ function CloseOnSelect () { }
4678
+
4679
+ CloseOnSelect.prototype.bind = function (decorated, container, $container) {
4680
+ var self = this;
4681
+
4682
+ decorated.call(this, container, $container);
4683
+
4684
+ container.on('select', function (evt) {
4685
+ self._selectTriggered(evt);
4686
+ });
4687
+
4688
+ container.on('unselect', function (evt) {
4689
+ self._selectTriggered(evt);
4690
+ });
4691
+ };
4692
+
4693
+ CloseOnSelect.prototype._selectTriggered = function (_, evt) {
4694
+ var originalEvent = evt.originalEvent;
4695
+
4696
+ // Don't close if the control key is being held
4697
+ if (originalEvent && (originalEvent.ctrlKey || originalEvent.metaKey)) {
4698
+ return;
4699
+ }
4700
+
4701
+ this.trigger('close', {
4702
+ originalEvent: originalEvent,
4703
+ originalSelect2Event: evt
4704
+ });
4705
+ };
4706
+
4707
+ return CloseOnSelect;
4708
+ });
4709
+
4710
+ S2.define('select2/i18n/en',[],function () {
4711
+ // English
4712
+ return {
4713
+ errorLoading: function () {
4714
+ return 'The results could not be loaded.';
4715
+ },
4716
+ inputTooLong: function (args) {
4717
+ var overChars = args.input.length - args.maximum;
4718
+
4719
+ var message = 'Please delete ' + overChars + ' character';
4720
+
4721
+ if (overChars != 1) {
4722
+ message += 's';
4723
+ }
4724
+
4725
+ return message;
4726
+ },
4727
+ inputTooShort: function (args) {
4728
+ var remainingChars = args.minimum - args.input.length;
4729
+
4730
+ var message = 'Please enter ' + remainingChars + ' or more characters';
4731
+
4732
+ return message;
4733
+ },
4734
+ loadingMore: function () {
4735
+ return 'Loading more results…';
4736
+ },
4737
+ maximumSelected: function (args) {
4738
+ var message = 'You can only select ' + args.maximum + ' item';
4739
+
4740
+ if (args.maximum != 1) {
4741
+ message += 's';
4742
+ }
4743
+
4744
+ return message;
4745
+ },
4746
+ noResults: function () {
4747
+ return 'No results found';
4748
+ },
4749
+ searching: function () {
4750
+ return 'Searching…';
4751
+ },
4752
+ removeAllItems: function () {
4753
+ return 'Remove all items';
4754
+ }
4755
+ };
4756
+ });
4757
+
4758
+ S2.define('select2/defaults',[
4759
+ 'jquery',
4760
+ 'require',
4761
+
4762
+ './results',
4763
+
4764
+ './selection/single',
4765
+ './selection/multiple',
4766
+ './selection/placeholder',
4767
+ './selection/allowClear',
4768
+ './selection/search',
4769
+ './selection/eventRelay',
4770
+
4771
+ './utils',
4772
+ './translation',
4773
+ './diacritics',
4774
+
4775
+ './data/select',
4776
+ './data/array',
4777
+ './data/ajax',
4778
+ './data/tags',
4779
+ './data/tokenizer',
4780
+ './data/minimumInputLength',
4781
+ './data/maximumInputLength',
4782
+ './data/maximumSelectionLength',
4783
+
4784
+ './dropdown',
4785
+ './dropdown/search',
4786
+ './dropdown/hidePlaceholder',
4787
+ './dropdown/infiniteScroll',
4788
+ './dropdown/attachBody',
4789
+ './dropdown/minimumResultsForSearch',
4790
+ './dropdown/selectOnClose',
4791
+ './dropdown/closeOnSelect',
4792
+
4793
+ './i18n/en'
4794
+ ], function ($, require,
4795
+
4796
+ ResultsList,
4797
+
4798
+ SingleSelection, MultipleSelection, Placeholder, AllowClear,
4799
+ SelectionSearch, EventRelay,
4800
+
4801
+ Utils, Translation, DIACRITICS,
4802
+
4803
+ SelectData, ArrayData, AjaxData, Tags, Tokenizer,
4804
+ MinimumInputLength, MaximumInputLength, MaximumSelectionLength,
4805
+
4806
+ Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll,
4807
+ AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect,
4808
+
4809
+ EnglishTranslation) {
4810
+ function Defaults () {
4811
+ this.reset();
4812
+ }
4813
+
4814
+ Defaults.prototype.apply = function (options) {
4815
+ options = $.extend(true, {}, this.defaults, options);
4816
+
4817
+ if (options.dataAdapter == null) {
4818
+ if (options.ajax != null) {
4819
+ options.dataAdapter = AjaxData;
4820
+ } else if (options.data != null) {
4821
+ options.dataAdapter = ArrayData;
4822
+ } else {
4823
+ options.dataAdapter = SelectData;
4824
+ }
4825
+
4826
+ if (options.minimumInputLength > 0) {
4827
+ options.dataAdapter = Utils.Decorate(
4828
+ options.dataAdapter,
4829
+ MinimumInputLength
4830
+ );
4831
+ }
4832
+
4833
+ if (options.maximumInputLength > 0) {
4834
+ options.dataAdapter = Utils.Decorate(
4835
+ options.dataAdapter,
4836
+ MaximumInputLength
4837
+ );
4838
+ }
4839
+
4840
+ if (options.maximumSelectionLength > 0) {
4841
+ options.dataAdapter = Utils.Decorate(
4842
+ options.dataAdapter,
4843
+ MaximumSelectionLength
4844
+ );
4845
+ }
4846
+
4847
+ if (options.tags) {
4848
+ options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags);
4849
+ }
4850
+
4851
+ if (options.tokenSeparators != null || options.tokenizer != null) {
4852
+ options.dataAdapter = Utils.Decorate(
4853
+ options.dataAdapter,
4854
+ Tokenizer
4855
+ );
4856
+ }
4857
+
4858
+ if (options.query != null) {
4859
+ var Query = require(options.amdBase + 'compat/query');
4860
+
4861
+ options.dataAdapter = Utils.Decorate(
4862
+ options.dataAdapter,
4863
+ Query
4864
+ );
4865
+ }
4866
+
4867
+ if (options.initSelection != null) {
4868
+ var InitSelection = require(options.amdBase + 'compat/initSelection');
4869
+
4870
+ options.dataAdapter = Utils.Decorate(
4871
+ options.dataAdapter,
4872
+ InitSelection
4873
+ );
4874
+ }
4875
+ }
4876
+
4877
+ if (options.resultsAdapter == null) {
4878
+ options.resultsAdapter = ResultsList;
4879
+
4880
+ if (options.ajax != null) {
4881
+ options.resultsAdapter = Utils.Decorate(
4882
+ options.resultsAdapter,
4883
+ InfiniteScroll
4884
+ );
4885
+ }
4886
+
4887
+ if (options.placeholder != null) {
4888
+ options.resultsAdapter = Utils.Decorate(
4889
+ options.resultsAdapter,
4890
+ HidePlaceholder
4891
+ );
4892
+ }
4893
+
4894
+ if (options.selectOnClose) {
4895
+ options.resultsAdapter = Utils.Decorate(
4896
+ options.resultsAdapter,
4897
+ SelectOnClose
4898
+ );
4899
+ }
4900
+ }
4901
+
4902
+ if (options.dropdownAdapter == null) {
4903
+ if (options.multiple) {
4904
+ options.dropdownAdapter = Dropdown;
4905
+ } else {
4906
+ var SearchableDropdown = Utils.Decorate(Dropdown, DropdownSearch);
4907
+
4908
+ options.dropdownAdapter = SearchableDropdown;
4909
+ }
4910
+
4911
+ if (options.minimumResultsForSearch !== 0) {
4912
+ options.dropdownAdapter = Utils.Decorate(
4913
+ options.dropdownAdapter,
4914
+ MinimumResultsForSearch
4915
+ );
4916
+ }
4917
+
4918
+ if (options.closeOnSelect) {
4919
+ options.dropdownAdapter = Utils.Decorate(
4920
+ options.dropdownAdapter,
4921
+ CloseOnSelect
4922
+ );
4923
+ }
4924
+
4925
+ if (
4926
+ options.dropdownCssClass != null ||
4927
+ options.dropdownCss != null ||
4928
+ options.adaptDropdownCssClass != null
4929
+ ) {
4930
+ var DropdownCSS = require(options.amdBase + 'compat/dropdownCss');
4931
+
4932
+ options.dropdownAdapter = Utils.Decorate(
4933
+ options.dropdownAdapter,
4934
+ DropdownCSS
4935
+ );
4936
+ }
4937
+
4938
+ options.dropdownAdapter = Utils.Decorate(
4939
+ options.dropdownAdapter,
4940
+ AttachBody
4941
+ );
4942
+ }
4943
+
4944
+ if (options.selectionAdapter == null) {
4945
+ if (options.multiple) {
4946
+ options.selectionAdapter = MultipleSelection;
4947
+ } else {
4948
+ options.selectionAdapter = SingleSelection;
4949
+ }
4950
+
4951
+ // Add the placeholder mixin if a placeholder was specified
4952
+ if (options.placeholder != null) {
4953
+ options.selectionAdapter = Utils.Decorate(
4954
+ options.selectionAdapter,
4955
+ Placeholder
4956
+ );
4957
+ }
4958
+
4959
+ if (options.allowClear) {
4960
+ options.selectionAdapter = Utils.Decorate(
4961
+ options.selectionAdapter,
4962
+ AllowClear
4963
+ );
4964
+ }
4965
+
4966
+ if (options.multiple) {
4967
+ options.selectionAdapter = Utils.Decorate(
4968
+ options.selectionAdapter,
4969
+ SelectionSearch
4970
+ );
4971
+ }
4972
+
4973
+ if (
4974
+ options.containerCssClass != null ||
4975
+ options.containerCss != null ||
4976
+ options.adaptContainerCssClass != null
4977
+ ) {
4978
+ var ContainerCSS = require(options.amdBase + 'compat/containerCss');
4979
+
4980
+ options.selectionAdapter = Utils.Decorate(
4981
+ options.selectionAdapter,
4982
+ ContainerCSS
4983
+ );
4984
+ }
4985
+
4986
+ options.selectionAdapter = Utils.Decorate(
4987
+ options.selectionAdapter,
4988
+ EventRelay
4989
+ );
4990
+ }
4991
+
4992
+ // If the defaults were not previously applied from an element, it is
4993
+ // possible for the language option to have not been resolved
4994
+ options.language = this._resolveLanguage(options.language);
4995
+
4996
+ // Always fall back to English since it will always be complete
4997
+ options.language.push('en');
4998
+
4999
+ var uniqueLanguages = [];
5000
+
5001
+ for (var l = 0; l < options.language.length; l++) {
5002
+ var language = options.language[l];
5003
+
5004
+ if (uniqueLanguages.indexOf(language) === -1) {
5005
+ uniqueLanguages.push(language);
5006
+ }
5007
+ }
5008
+
5009
+ options.language = uniqueLanguages;
5010
+
5011
+ options.translations = this._processTranslations(
5012
+ options.language,
5013
+ options.debug
5014
+ );
5015
+
5016
+ return options;
5017
+ };
5018
+
5019
+ Defaults.prototype.reset = function () {
5020
+ function stripDiacritics (text) {
5021
+ // Used 'uni range + named function' from http://jsperf.com/diacritics/18
5022
+ function match(a) {
5023
+ return DIACRITICS[a] || a;
5024
+ }
5025
+
5026
+ return text.replace(/[^\u0000-\u007E]/g, match);
5027
+ }
5028
+
5029
+ function matcher (params, data) {
5030
+ // Always return the object if there is nothing to compare
5031
+ if ($.trim(params.term) === '') {
5032
+ return data;
5033
+ }
5034
+
5035
+ // Do a recursive check for options with children
5036
+ if (data.children && data.children.length > 0) {
5037
+ // Clone the data object if there are children
5038
+ // This is required as we modify the object to remove any non-matches
5039
+ var match = $.extend(true, {}, data);
5040
+
5041
+ // Check each child of the option
5042
+ for (var c = data.children.length - 1; c >= 0; c--) {
5043
+ var child = data.children[c];
5044
+
5045
+ var matches = matcher(params, child);
5046
+
5047
+ // If there wasn't a match, remove the object in the array
5048
+ if (matches == null) {
5049
+ match.children.splice(c, 1);
5050
+ }
5051
+ }
5052
+
5053
+ // If any children matched, return the new object
5054
+ if (match.children.length > 0) {
5055
+ return match;
5056
+ }
5057
+
5058
+ // If there were no matching children, check just the plain object
5059
+ return matcher(params, match);
5060
+ }
5061
+
5062
+ var original = stripDiacritics(data.text).toUpperCase();
5063
+ var term = stripDiacritics(params.term).toUpperCase();
5064
+
5065
+ // Check if the text contains the term
5066
+ if (original.indexOf(term) > -1) {
5067
+ return data;
5068
+ }
5069
+
5070
+ // If it doesn't contain the term, don't return anything
5071
+ return null;
5072
+ }
5073
+
5074
+ this.defaults = {
5075
+ amdBase: './',
5076
+ amdLanguageBase: './i18n/',
5077
+ closeOnSelect: true,
5078
+ debug: false,
5079
+ dropdownAutoWidth: false,
5080
+ escapeMarkup: Utils.escapeMarkup,
5081
+ language: {},
5082
+ matcher: matcher,
5083
+ minimumInputLength: 0,
5084
+ maximumInputLength: 0,
5085
+ maximumSelectionLength: 0,
5086
+ minimumResultsForSearch: 0,
5087
+ selectOnClose: false,
5088
+ scrollAfterSelect: false,
5089
+ sorter: function (data) {
5090
+ return data;
5091
+ },
5092
+ templateResult: function (result) {
5093
+ return result.text;
5094
+ },
5095
+ templateSelection: function (selection) {
5096
+ return selection.text;
5097
+ },
5098
+ theme: 'default',
5099
+ width: 'resolve'
5100
+ };
5101
+ };
5102
+
5103
+ Defaults.prototype.applyFromElement = function (options, $element) {
5104
+ var optionLanguage = options.language;
5105
+ var defaultLanguage = this.defaults.language;
5106
+ var elementLanguage = $element.prop('lang');
5107
+ var parentLanguage = $element.closest('[lang]').prop('lang');
5108
+
5109
+ var languages = Array.prototype.concat.call(
5110
+ this._resolveLanguage(elementLanguage),
5111
+ this._resolveLanguage(optionLanguage),
5112
+ this._resolveLanguage(defaultLanguage),
5113
+ this._resolveLanguage(parentLanguage)
5114
+ );
5115
+
5116
+ options.language = languages;
5117
+
5118
+ return options;
5119
+ };
5120
+
5121
+ Defaults.prototype._resolveLanguage = function (language) {
5122
+ if (!language) {
5123
+ return [];
5124
+ }
5125
+
5126
+ if ($.isEmptyObject(language)) {
5127
+ return [];
5128
+ }
5129
+
5130
+ if ($.isPlainObject(language)) {
5131
+ return [language];
5132
+ }
5133
+
5134
+ var languages;
5135
+
5136
+ if (!$.isArray(language)) {
5137
+ languages = [language];
5138
+ } else {
5139
+ languages = language;
5140
+ }
5141
+
5142
+ var resolvedLanguages = [];
5143
+
5144
+ for (var l = 0; l < languages.length; l++) {
5145
+ resolvedLanguages.push(languages[l]);
5146
+
5147
+ if (typeof languages[l] === 'string' && languages[l].indexOf('-') > 0) {
5148
+ // Extract the region information if it is included
5149
+ var languageParts = languages[l].split('-');
5150
+ var baseLanguage = languageParts[0];
5151
+
5152
+ resolvedLanguages.push(baseLanguage);
5153
+ }
5154
+ }
5155
+
5156
+ return resolvedLanguages;
5157
+ };
5158
+
5159
+ Defaults.prototype._processTranslations = function (languages, debug) {
5160
+ var translations = new Translation();
5161
+
5162
+ for (var l = 0; l < languages.length; l++) {
5163
+ var languageData = new Translation();
5164
+
5165
+ var language = languages[l];
5166
+
5167
+ if (typeof language === 'string') {
5168
+ try {
5169
+ // Try to load it with the original name
5170
+ languageData = Translation.loadPath(language);
5171
+ } catch (e) {
5172
+ try {
5173
+ // If we couldn't load it, check if it wasn't the full path
5174
+ language = this.defaults.amdLanguageBase + language;
5175
+ languageData = Translation.loadPath(language);
5176
+ } catch (ex) {
5177
+ // The translation could not be loaded at all. Sometimes this is
5178
+ // because of a configuration problem, other times this can be
5179
+ // because of how Select2 helps load all possible translation files
5180
+ if (debug && window.console && console.warn) {
5181
+ console.warn(
5182
+ 'Select2: The language file for "' + language + '" could ' +
5183
+ 'not be automatically loaded. A fallback will be used instead.'
5184
+ );
5185
+ }
5186
+ }
5187
+ }
5188
+ } else if ($.isPlainObject(language)) {
5189
+ languageData = new Translation(language);
5190
+ } else {
5191
+ languageData = language;
5192
+ }
5193
+
5194
+ translations.extend(languageData);
5195
+ }
5196
+
5197
+ return translations;
5198
+ };
5199
+
5200
+ Defaults.prototype.set = function (key, value) {
5201
+ var camelKey = $.camelCase(key);
5202
+
5203
+ var data = {};
5204
+ data[camelKey] = value;
5205
+
5206
+ var convertedData = Utils._convertData(data);
5207
+
5208
+ $.extend(true, this.defaults, convertedData);
5209
+ };
5210
+
5211
+ var defaults = new Defaults();
5212
+
5213
+ return defaults;
5214
+ });
5215
+
5216
+ S2.define('select2/options',[
5217
+ 'require',
5218
+ 'jquery',
5219
+ './defaults',
5220
+ './utils'
5221
+ ], function (require, $, Defaults, Utils) {
5222
+ function Options (options, $element) {
5223
+ this.options = options;
5224
+
5225
+ if ($element != null) {
5226
+ this.fromElement($element);
5227
+ }
5228
+
5229
+ if ($element != null) {
5230
+ this.options = Defaults.applyFromElement(this.options, $element);
5231
+ }
5232
+
5233
+ this.options = Defaults.apply(this.options);
5234
+
5235
+ if ($element && $element.is('input')) {
5236
+ var InputCompat = require(this.get('amdBase') + 'compat/inputData');
5237
+
5238
+ this.options.dataAdapter = Utils.Decorate(
5239
+ this.options.dataAdapter,
5240
+ InputCompat
5241
+ );
5242
+ }
5243
+ }
5244
+
5245
+ Options.prototype.fromElement = function ($e) {
5246
+ var excludedData = ['select2'];
5247
+
5248
+ if (this.options.multiple == null) {
5249
+ this.options.multiple = $e.prop('multiple');
5250
+ }
5251
+
5252
+ if (this.options.disabled == null) {
5253
+ this.options.disabled = $e.prop('disabled');
5254
+ }
5255
+
5256
+ if (this.options.dir == null) {
5257
+ if ($e.prop('dir')) {
5258
+ this.options.dir = $e.prop('dir');
5259
+ } else if ($e.closest('[dir]').prop('dir')) {
5260
+ this.options.dir = $e.closest('[dir]').prop('dir');
5261
+ } else {
5262
+ this.options.dir = 'ltr';
5263
+ }
5264
+ }
5265
+
5266
+ $e.prop('disabled', this.options.disabled);
5267
+ $e.prop('multiple', this.options.multiple);
5268
+
5269
+ if (Utils.GetData($e[0], 'select2Tags')) {
5270
+ if (this.options.debug && window.console && console.warn) {
5271
+ console.warn(
5272
+ 'Select2: The `data-select2-tags` attribute has been changed to ' +
5273
+ 'use the `data-data` and `data-tags="true"` attributes and will be ' +
5274
+ 'removed in future versions of Select2.'
5275
+ );
5276
+ }
5277
+
5278
+ Utils.StoreData($e[0], 'data', Utils.GetData($e[0], 'select2Tags'));
5279
+ Utils.StoreData($e[0], 'tags', true);
5280
+ }
5281
+
5282
+ if (Utils.GetData($e[0], 'ajaxUrl')) {
5283
+ if (this.options.debug && window.console && console.warn) {
5284
+ console.warn(
5285
+ 'Select2: The `data-ajax-url` attribute has been changed to ' +
5286
+ '`data-ajax--url` and support for the old attribute will be removed' +
5287
+ ' in future versions of Select2.'
5288
+ );
5289
+ }
5290
+
5291
+ $e.attr('ajax--url', Utils.GetData($e[0], 'ajaxUrl'));
5292
+ Utils.StoreData($e[0], 'ajax-Url', Utils.GetData($e[0], 'ajaxUrl'));
5293
+ }
5294
+
5295
+ var dataset = {};
5296
+
5297
+ function upperCaseLetter(_, letter) {
5298
+ return letter.toUpperCase();
5299
+ }
5300
+
5301
+ // Pre-load all of the attributes which are prefixed with `data-`
5302
+ for (var attr = 0; attr < $e[0].attributes.length; attr++) {
5303
+ var attributeName = $e[0].attributes[attr].name;
5304
+ var prefix = 'data-';
5305
+
5306
+ if (attributeName.substr(0, prefix.length) == prefix) {
5307
+ // Get the contents of the attribute after `data-`
5308
+ var dataName = attributeName.substring(prefix.length);
5309
+
5310
+ // Get the data contents from the consistent source
5311
+ // This is more than likely the jQuery data helper
5312
+ var dataValue = Utils.GetData($e[0], dataName);
5313
+
5314
+ // camelCase the attribute name to match the spec
5315
+ var camelDataName = dataName.replace(/-([a-z])/g, upperCaseLetter);
5316
+
5317
+ // Store the data attribute contents into the dataset since
5318
+ dataset[camelDataName] = dataValue;
5319
+ }
5320
+ }
5321
+
5322
+ // Prefer the element's `dataset` attribute if it exists
5323
+ // jQuery 1.x does not correctly handle data attributes with multiple dashes
5324
+ if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) {
5325
+ dataset = $.extend(true, {}, $e[0].dataset, dataset);
5326
+ }
5327
+
5328
+ // Prefer our internal data cache if it exists
5329
+ var data = $.extend(true, {}, Utils.GetData($e[0]), dataset);
5330
+
5331
+ data = Utils._convertData(data);
5332
+
5333
+ for (var key in data) {
5334
+ if ($.inArray(key, excludedData) > -1) {
5335
+ continue;
5336
+ }
5337
+
5338
+ if ($.isPlainObject(this.options[key])) {
5339
+ $.extend(this.options[key], data[key]);
5340
+ } else {
5341
+ this.options[key] = data[key];
5342
+ }
5343
+ }
5344
+
5345
+ return this;
5346
+ };
5347
+
5348
+ Options.prototype.get = function (key) {
5349
+ return this.options[key];
5350
+ };
5351
+
5352
+ Options.prototype.set = function (key, val) {
5353
+ this.options[key] = val;
5354
+ };
5355
+
5356
+ return Options;
5357
+ });
5358
+
5359
+ S2.define('select2/core',[
5360
+ 'jquery',
5361
+ './options',
5362
+ './utils',
5363
+ './keys'
5364
+ ], function ($, Options, Utils, KEYS) {
5365
+ var Select2 = function ($element, options) {
5366
+ if (Utils.GetData($element[0], 'select2') != null) {
5367
+ Utils.GetData($element[0], 'select2').destroy();
5368
+ }
5369
+
5370
+ this.$element = $element;
5371
+
5372
+ this.id = this._generateId($element);
5373
+
5374
+ options = options || {};
5375
+
5376
+ this.options = new Options(options, $element);
5377
+
5378
+ Select2.__super__.constructor.call(this);
5379
+
5380
+ // Set up the tabindex
5381
+
5382
+ var tabindex = $element.attr('tabindex') || 0;
5383
+ Utils.StoreData($element[0], 'old-tabindex', tabindex);
5384
+ $element.attr('tabindex', '-1');
5385
+
5386
+ // Set up containers and adapters
5387
+
5388
+ var DataAdapter = this.options.get('dataAdapter');
5389
+ this.dataAdapter = new DataAdapter($element, this.options);
5390
+
5391
+ var $container = this.render();
5392
+
5393
+ this._placeContainer($container);
5394
+
5395
+ var SelectionAdapter = this.options.get('selectionAdapter');
5396
+ this.selection = new SelectionAdapter($element, this.options);
5397
+ this.$selection = this.selection.render();
5398
+
5399
+ this.selection.position(this.$selection, $container);
5400
+
5401
+ var DropdownAdapter = this.options.get('dropdownAdapter');
5402
+ this.dropdown = new DropdownAdapter($element, this.options);
5403
+ this.$dropdown = this.dropdown.render();
5404
+
5405
+ this.dropdown.position(this.$dropdown, $container);
5406
+
5407
+ var ResultsAdapter = this.options.get('resultsAdapter');
5408
+ this.results = new ResultsAdapter($element, this.options, this.dataAdapter);
5409
+ this.$results = this.results.render();
5410
+
5411
+ this.results.position(this.$results, this.$dropdown);
5412
+
5413
+ // Bind events
5414
+
5415
+ var self = this;
5416
+
5417
+ // Bind the container to all of the adapters
5418
+ this._bindAdapters();
5419
+
5420
+ // Register any DOM event handlers
5421
+ this._registerDomEvents();
5422
+
5423
+ // Register any internal event handlers
5424
+ this._registerDataEvents();
5425
+ this._registerSelectionEvents();
5426
+ this._registerDropdownEvents();
5427
+ this._registerResultsEvents();
5428
+ this._registerEvents();
5429
+
5430
+ // Set the initial state
5431
+ this.dataAdapter.current(function (initialData) {
5432
+ self.trigger('selection:update', {
5433
+ data: initialData
5434
+ });
5435
+ });
5436
+
5437
+ // Hide the original select
5438
+ $element.addClass('select2-hidden-accessible');
5439
+ $element.attr('aria-hidden', 'true');
5440
+
5441
+ // Synchronize any monitored attributes
5442
+ this._syncAttributes();
5443
+
5444
+ Utils.StoreData($element[0], 'select2', this);
5445
+
5446
+ // Ensure backwards compatibility with $element.data('select2').
5447
+ $element.data('select2', this);
5448
+ };
5449
+
5450
+ Utils.Extend(Select2, Utils.Observable);
5451
+
5452
+ Select2.prototype._generateId = function ($element) {
5453
+ var id = '';
5454
+
5455
+ if ($element.attr('id') != null) {
5456
+ id = $element.attr('id');
5457
+ } else if ($element.attr('name') != null) {
5458
+ id = $element.attr('name') + '-' + Utils.generateChars(2);
5459
+ } else {
5460
+ id = Utils.generateChars(4);
5461
+ }
5462
+
5463
+ id = id.replace(/(:|\.|\[|\]|,)/g, '');
5464
+ id = 'select2-' + id;
5465
+
5466
+ return id;
5467
+ };
5468
+
5469
+ Select2.prototype._placeContainer = function ($container) {
5470
+ $container.insertAfter(this.$element);
5471
+
5472
+ var width = this._resolveWidth(this.$element, this.options.get('width'));
5473
+
5474
+ if (width != null) {
5475
+ $container.css('width', width);
5476
+ }
5477
+ };
5478
+
5479
+ Select2.prototype._resolveWidth = function ($element, method) {
5480
+ var WIDTH = /^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;
5481
+
5482
+ if (method == 'resolve') {
5483
+ var styleWidth = this._resolveWidth($element, 'style');
5484
+
5485
+ if (styleWidth != null) {
5486
+ return styleWidth;
5487
+ }
5488
+
5489
+ return this._resolveWidth($element, 'element');
5490
+ }
5491
+
5492
+ if (method == 'element') {
5493
+ var elementWidth = $element.outerWidth(false);
5494
+
5495
+ if (elementWidth <= 0) {
5496
+ return 'auto';
5497
+ }
5498
+
5499
+ return elementWidth + 'px';
5500
+ }
5501
+
5502
+ if (method == 'style') {
5503
+ var style = $element.attr('style');
5504
+
5505
+ if (typeof(style) !== 'string') {
5506
+ return null;
5507
+ }
5508
+
5509
+ var attrs = style.split(';');
5510
+
5511
+ for (var i = 0, l = attrs.length; i < l; i = i + 1) {
5512
+ var attr = attrs[i].replace(/\s/g, '');
5513
+ var matches = attr.match(WIDTH);
5514
+
5515
+ if (matches !== null && matches.length >= 1) {
5516
+ return matches[1];
5517
+ }
5518
+ }
5519
+
5520
+ return null;
5521
+ }
5522
+
5523
+ if (method == 'computedstyle') {
5524
+ var computedStyle = window.getComputedStyle($element[0]);
5525
+
5526
+ return computedStyle.width;
5527
+ }
5528
+
5529
+ return method;
5530
+ };
5531
+
5532
+ Select2.prototype._bindAdapters = function () {
5533
+ this.dataAdapter.bind(this, this.$container);
5534
+ this.selection.bind(this, this.$container);
5535
+
5536
+ this.dropdown.bind(this, this.$container);
5537
+ this.results.bind(this, this.$container);
5538
+ };
5539
+
5540
+ Select2.prototype._registerDomEvents = function () {
5541
+ var self = this;
5542
+
5543
+ this.$element.on('change.select2', function () {
5544
+ self.dataAdapter.current(function (data) {
5545
+ self.trigger('selection:update', {
5546
+ data: data
5547
+ });
5548
+ });
5549
+ });
5550
+
5551
+ this.$element.on('focus.select2', function (evt) {
5552
+ self.trigger('focus', evt);
5553
+ });
5554
+
5555
+ this._syncA = Utils.bind(this._syncAttributes, this);
5556
+ this._syncS = Utils.bind(this._syncSubtree, this);
5557
+
5558
+ if (this.$element[0].attachEvent) {
5559
+ this.$element[0].attachEvent('onpropertychange', this._syncA);
5560
+ }
5561
+
5562
+ var observer = window.MutationObserver ||
5563
+ window.WebKitMutationObserver ||
5564
+ window.MozMutationObserver
5565
+ ;
5566
+
5567
+ if (observer != null) {
5568
+ this._observer = new observer(function (mutations) {
5569
+ self._syncA();
5570
+ self._syncS(null, mutations);
5571
+ });
5572
+ this._observer.observe(this.$element[0], {
5573
+ attributes: true,
5574
+ childList: true,
5575
+ subtree: false
5576
+ });
5577
+ } else if (this.$element[0].addEventListener) {
5578
+ this.$element[0].addEventListener(
5579
+ 'DOMAttrModified',
5580
+ self._syncA,
5581
+ false
5582
+ );
5583
+ this.$element[0].addEventListener(
5584
+ 'DOMNodeInserted',
5585
+ self._syncS,
5586
+ false
5587
+ );
5588
+ this.$element[0].addEventListener(
5589
+ 'DOMNodeRemoved',
5590
+ self._syncS,
5591
+ false
5592
+ );
5593
+ }
5594
+ };
5595
+
5596
+ Select2.prototype._registerDataEvents = function () {
5597
+ var self = this;
5598
+
5599
+ this.dataAdapter.on('*', function (name, params) {
5600
+ self.trigger(name, params);
5601
+ });
5602
+ };
5603
+
5604
+ Select2.prototype._registerSelectionEvents = function () {
5605
+ var self = this;
5606
+ var nonRelayEvents = ['toggle', 'focus'];
5607
+
5608
+ this.selection.on('toggle', function () {
5609
+ self.toggleDropdown();
5610
+ });
5611
+
5612
+ this.selection.on('focus', function (params) {
5613
+ self.focus(params);
5614
+ });
5615
+
5616
+ this.selection.on('*', function (name, params) {
5617
+ if ($.inArray(name, nonRelayEvents) !== -1) {
5618
+ return;
5619
+ }
5620
+
5621
+ self.trigger(name, params);
5622
+ });
5623
+ };
5624
+
5625
+ Select2.prototype._registerDropdownEvents = function () {
5626
+ var self = this;
5627
+
5628
+ this.dropdown.on('*', function (name, params) {
5629
+ self.trigger(name, params);
5630
+ });
5631
+ };
5632
+
5633
+ Select2.prototype._registerResultsEvents = function () {
5634
+ var self = this;
5635
+
5636
+ this.results.on('*', function (name, params) {
5637
+ self.trigger(name, params);
5638
+ });
5639
+ };
5640
+
5641
+ Select2.prototype._registerEvents = function () {
5642
+ var self = this;
5643
+
5644
+ this.on('open', function () {
5645
+ self.$container.addClass('select2-container--open');
5646
+ });
5647
+
5648
+ this.on('close', function () {
5649
+ self.$container.removeClass('select2-container--open');
5650
+ });
5651
+
5652
+ this.on('enable', function () {
5653
+ self.$container.removeClass('select2-container--disabled');
5654
+ });
5655
+
5656
+ this.on('disable', function () {
5657
+ self.$container.addClass('select2-container--disabled');
5658
+ });
5659
+
5660
+ this.on('blur', function () {
5661
+ self.$container.removeClass('select2-container--focus');
5662
+ });
5663
+
5664
+ this.on('query', function (params) {
5665
+ if (!self.isOpen()) {
5666
+ self.trigger('open', {});
5667
+ }
5668
+
5669
+ this.dataAdapter.query(params, function (data) {
5670
+ self.trigger('results:all', {
5671
+ data: data,
5672
+ query: params
5673
+ });
5674
+ });
5675
+ });
5676
+
5677
+ this.on('query:append', function (params) {
5678
+ this.dataAdapter.query(params, function (data) {
5679
+ self.trigger('results:append', {
5680
+ data: data,
5681
+ query: params
5682
+ });
5683
+ });
5684
+ });
5685
+
5686
+ this.on('keypress', function (evt) {
5687
+ var key = evt.which;
5688
+
5689
+ if (self.isOpen()) {
5690
+ if (key === KEYS.ESC || key === KEYS.TAB ||
5691
+ (key === KEYS.UP && evt.altKey)) {
5692
+ self.close(evt);
5693
+
5694
+ evt.preventDefault();
5695
+ } else if (key === KEYS.ENTER) {
5696
+ self.trigger('results:select', {});
5697
+
5698
+ evt.preventDefault();
5699
+ } else if ((key === KEYS.SPACE && evt.ctrlKey)) {
5700
+ self.trigger('results:toggle', {});
5701
+
5702
+ evt.preventDefault();
5703
+ } else if (key === KEYS.UP) {
5704
+ self.trigger('results:previous', {});
5705
+
5706
+ evt.preventDefault();
5707
+ } else if (key === KEYS.DOWN) {
5708
+ self.trigger('results:next', {});
5709
+
5710
+ evt.preventDefault();
5711
+ }
5712
+ } else {
5713
+ if (key === KEYS.ENTER || key === KEYS.SPACE ||
5714
+ (key === KEYS.DOWN && evt.altKey)) {
5715
+ self.open();
5716
+
5717
+ evt.preventDefault();
5718
+ }
5719
+ }
5720
+ });
5721
+ };
5722
+
5723
+ Select2.prototype._syncAttributes = function () {
5724
+ this.options.set('disabled', this.$element.prop('disabled'));
5725
+
5726
+ if (this.isDisabled()) {
5727
+ if (this.isOpen()) {
5728
+ this.close();
5729
+ }
5730
+
5731
+ this.trigger('disable', {});
5732
+ } else {
5733
+ this.trigger('enable', {});
5734
+ }
5735
+ };
5736
+
5737
+ Select2.prototype._isChangeMutation = function (evt, mutations) {
5738
+ var changed = false;
5739
+ var self = this;
5740
+
5741
+ // Ignore any mutation events raised for elements that aren't options or
5742
+ // optgroups. This handles the case when the select element is destroyed
5743
+ if (
5744
+ evt && evt.target && (
5745
+ evt.target.nodeName !== 'OPTION' && evt.target.nodeName !== 'OPTGROUP'
5746
+ )
5747
+ ) {
5748
+ return;
5749
+ }
5750
+
5751
+ if (!mutations) {
5752
+ // If mutation events aren't supported, then we can only assume that the
5753
+ // change affected the selections
5754
+ changed = true;
5755
+ } else if (mutations.addedNodes && mutations.addedNodes.length > 0) {
5756
+ for (var n = 0; n < mutations.addedNodes.length; n++) {
5757
+ var node = mutations.addedNodes[n];
5758
+
5759
+ if (node.selected) {
5760
+ changed = true;
5761
+ }
5762
+ }
5763
+ } else if (mutations.removedNodes && mutations.removedNodes.length > 0) {
5764
+ changed = true;
5765
+ } else if ($.isArray(mutations)) {
5766
+ $.each(mutations, function(evt, mutation) {
5767
+ if (self._isChangeMutation(evt, mutation)) {
5768
+ // We've found a change mutation.
5769
+ // Let's escape from the loop and continue
5770
+ changed = true;
5771
+ return false;
5772
+ }
5773
+ });
5774
+ }
5775
+ return changed;
5776
+ };
5777
+
5778
+ Select2.prototype._syncSubtree = function (evt, mutations) {
5779
+ var changed = this._isChangeMutation(evt, mutations);
5780
+ var self = this;
5781
+
5782
+ // Only re-pull the data if we think there is a change
5783
+ if (changed) {
5784
+ this.dataAdapter.current(function (currentData) {
5785
+ self.trigger('selection:update', {
5786
+ data: currentData
5787
+ });
5788
+ });
5789
+ }
5790
+ };
5791
+
5792
+ /**
5793
+ * Override the trigger method to automatically trigger pre-events when
5794
+ * there are events that can be prevented.
5795
+ */
5796
+ Select2.prototype.trigger = function (name, args) {
5797
+ var actualTrigger = Select2.__super__.trigger;
5798
+ var preTriggerMap = {
5799
+ 'open': 'opening',
5800
+ 'close': 'closing',
5801
+ 'select': 'selecting',
5802
+ 'unselect': 'unselecting',
5803
+ 'clear': 'clearing'
5804
+ };
5805
+
5806
+ if (args === undefined) {
5807
+ args = {};
5808
+ }
5809
+
5810
+ if (name in preTriggerMap) {
5811
+ var preTriggerName = preTriggerMap[name];
5812
+ var preTriggerArgs = {
5813
+ prevented: false,
5814
+ name: name,
5815
+ args: args
5816
+ };
5817
+
5818
+ actualTrigger.call(this, preTriggerName, preTriggerArgs);
5819
+
5820
+ if (preTriggerArgs.prevented) {
5821
+ args.prevented = true;
5822
+
5823
+ return;
5824
+ }
5825
+ }
5826
+
5827
+ actualTrigger.call(this, name, args);
5828
+ };
5829
+
5830
+ Select2.prototype.toggleDropdown = function () {
5831
+ if (this.isDisabled()) {
5832
+ return;
5833
+ }
5834
+
5835
+ if (this.isOpen()) {
5836
+ this.close();
5837
+ } else {
5838
+ this.open();
5839
+ }
5840
+ };
5841
+
5842
+ Select2.prototype.open = function () {
5843
+ if (this.isOpen()) {
5844
+ return;
5845
+ }
5846
+
5847
+ if (this.isDisabled()) {
5848
+ return;
5849
+ }
5850
+
5851
+ this.trigger('query', {});
5852
+ };
5853
+
5854
+ Select2.prototype.close = function (evt) {
5855
+ if (!this.isOpen()) {
5856
+ return;
5857
+ }
5858
+
5859
+ this.trigger('close', { originalEvent : evt });
5860
+ };
5861
+
5862
+ /**
5863
+ * Helper method to abstract the "enabled" (not "disabled") state of this
5864
+ * object.
5865
+ *
5866
+ * @return {true} if the instance is not disabled.
5867
+ * @return {false} if the instance is disabled.
5868
+ */
5869
+ Select2.prototype.isEnabled = function () {
5870
+ return !this.isDisabled();
5871
+ };
5872
+
5873
+ /**
5874
+ * Helper method to abstract the "disabled" state of this object.
5875
+ *
5876
+ * @return {true} if the disabled option is true.
5877
+ * @return {false} if the disabled option is false.
5878
+ */
5879
+ Select2.prototype.isDisabled = function () {
5880
+ return this.options.get('disabled');
5881
+ };
5882
+
5883
+ Select2.prototype.isOpen = function () {
5884
+ return this.$container.hasClass('select2-container--open');
5885
+ };
5886
+
5887
+ Select2.prototype.hasFocus = function () {
5888
+ return this.$container.hasClass('select2-container--focus');
5889
+ };
5890
+
5891
+ Select2.prototype.focus = function (data) {
5892
+ // No need to re-trigger focus events if we are already focused
5893
+ if (this.hasFocus()) {
5894
+ return;
5895
+ }
5896
+
5897
+ this.$container.addClass('select2-container--focus');
5898
+ this.trigger('focus', {});
5899
+ };
5900
+
5901
+ Select2.prototype.enable = function (args) {
5902
+ if (this.options.get('debug') && window.console && console.warn) {
5903
+ console.warn(
5904
+ 'Select2: The `select2("enable")` method has been deprecated and will' +
5905
+ ' be removed in later Select2 versions. Use $element.prop("disabled")' +
5906
+ ' instead.'
5907
+ );
5908
+ }
5909
+
5910
+ if (args == null || args.length === 0) {
5911
+ args = [true];
5912
+ }
5913
+
5914
+ var disabled = !args[0];
5915
+
5916
+ this.$element.prop('disabled', disabled);
5917
+ };
5918
+
5919
+ Select2.prototype.data = function () {
5920
+ if (this.options.get('debug') &&
5921
+ arguments.length > 0 && window.console && console.warn) {
5922
+ console.warn(
5923
+ 'Select2: Data can no longer be set using `select2("data")`. You ' +
5924
+ 'should consider setting the value instead using `$element.val()`.'
5925
+ );
5926
+ }
5927
+
5928
+ var data = [];
5929
+
5930
+ this.dataAdapter.current(function (currentData) {
5931
+ data = currentData;
5932
+ });
5933
+
5934
+ return data;
5935
+ };
5936
+
5937
+ Select2.prototype.val = function (args) {
5938
+ if (this.options.get('debug') && window.console && console.warn) {
5939
+ console.warn(
5940
+ 'Select2: The `select2("val")` method has been deprecated and will be' +
5941
+ ' removed in later Select2 versions. Use $element.val() instead.'
5942
+ );
5943
+ }
5944
+
5945
+ if (args == null || args.length === 0) {
5946
+ return this.$element.val();
5947
+ }
5948
+
5949
+ var newVal = args[0];
5950
+
5951
+ if ($.isArray(newVal)) {
5952
+ newVal = $.map(newVal, function (obj) {
5953
+ return obj.toString();
5954
+ });
5955
+ }
5956
+
5957
+ this.$element.val(newVal).trigger('input').trigger('change');
5958
+ };
5959
+
5960
+ Select2.prototype.destroy = function () {
5961
+ this.$container.remove();
5962
+
5963
+ if (this.$element[0].detachEvent) {
5964
+ this.$element[0].detachEvent('onpropertychange', this._syncA);
5965
+ }
5966
+
5967
+ if (this._observer != null) {
5968
+ this._observer.disconnect();
5969
+ this._observer = null;
5970
+ } else if (this.$element[0].removeEventListener) {
5971
+ this.$element[0]
5972
+ .removeEventListener('DOMAttrModified', this._syncA, false);
5973
+ this.$element[0]
5974
+ .removeEventListener('DOMNodeInserted', this._syncS, false);
5975
+ this.$element[0]
5976
+ .removeEventListener('DOMNodeRemoved', this._syncS, false);
5977
+ }
5978
+
5979
+ this._syncA = null;
5980
+ this._syncS = null;
5981
+
5982
+ this.$element.off('.select2');
5983
+ this.$element.attr('tabindex',
5984
+ Utils.GetData(this.$element[0], 'old-tabindex'));
5985
+
5986
+ this.$element.removeClass('select2-hidden-accessible');
5987
+ this.$element.attr('aria-hidden', 'false');
5988
+ Utils.RemoveData(this.$element[0]);
5989
+ this.$element.removeData('select2');
5990
+
5991
+ this.dataAdapter.destroy();
5992
+ this.selection.destroy();
5993
+ this.dropdown.destroy();
5994
+ this.results.destroy();
5995
+
5996
+ this.dataAdapter = null;
5997
+ this.selection = null;
5998
+ this.dropdown = null;
5999
+ this.results = null;
6000
+ };
6001
+
6002
+ Select2.prototype.render = function () {
6003
+ var $container = $(
6004
+ '<span class="select2 select2-container">' +
6005
+ '<span class="selection"></span>' +
6006
+ '<span class="dropdown-wrapper" aria-hidden="true"></span>' +
6007
+ '</span>'
6008
+ );
6009
+
6010
+ $container.attr('dir', this.options.get('dir'));
6011
+
6012
+ this.$container = $container;
6013
+
6014
+ this.$container.addClass('select2-container--' + this.options.get('theme'));
6015
+
6016
+ Utils.StoreData($container[0], 'element', this.$element);
6017
+
6018
+ return $container;
6019
+ };
6020
+
6021
+ return Select2;
6022
+ });
6023
+
6024
+ S2.define('select2/compat/utils',[
6025
+ 'jquery'
6026
+ ], function ($) {
6027
+ function syncCssClasses ($dest, $src, adapter) {
6028
+ var classes, replacements = [], adapted;
6029
+
6030
+ classes = $.trim($dest.attr('class'));
6031
+
6032
+ if (classes) {
6033
+ classes = '' + classes; // for IE which returns object
6034
+
6035
+ $(classes.split(/\s+/)).each(function () {
6036
+ // Save all Select2 classes
6037
+ if (this.indexOf('select2-') === 0) {
6038
+ replacements.push(this);
6039
+ }
6040
+ });
6041
+ }
6042
+
6043
+ classes = $.trim($src.attr('class'));
6044
+
6045
+ if (classes) {
6046
+ classes = '' + classes; // for IE which returns object
6047
+
6048
+ $(classes.split(/\s+/)).each(function () {
6049
+ // Only adapt non-Select2 classes
6050
+ if (this.indexOf('select2-') !== 0) {
6051
+ adapted = adapter(this);
6052
+
6053
+ if (adapted != null) {
6054
+ replacements.push(adapted);
6055
+ }
6056
+ }
6057
+ });
6058
+ }
6059
+
6060
+ $dest.attr('class', replacements.join(' '));
6061
+ }
6062
+
6063
+ return {
6064
+ syncCssClasses: syncCssClasses
6065
+ };
6066
+ });
6067
+
6068
+ S2.define('select2/compat/containerCss',[
6069
+ 'jquery',
6070
+ './utils'
6071
+ ], function ($, CompatUtils) {
6072
+ // No-op CSS adapter that discards all classes by default
6073
+ function _containerAdapter (clazz) {
6074
+ return null;
6075
+ }
6076
+
6077
+ function ContainerCSS () { }
6078
+
6079
+ ContainerCSS.prototype.render = function (decorated) {
6080
+ var $container = decorated.call(this);
6081
+
6082
+ var containerCssClass = this.options.get('containerCssClass') || '';
6083
+
6084
+ if ($.isFunction(containerCssClass)) {
6085
+ containerCssClass = containerCssClass(this.$element);
6086
+ }
6087
+
6088
+ var containerCssAdapter = this.options.get('adaptContainerCssClass');
6089
+ containerCssAdapter = containerCssAdapter || _containerAdapter;
6090
+
6091
+ if (containerCssClass.indexOf(':all:') !== -1) {
6092
+ containerCssClass = containerCssClass.replace(':all:', '');
6093
+
6094
+ var _cssAdapter = containerCssAdapter;
6095
+
6096
+ containerCssAdapter = function (clazz) {
6097
+ var adapted = _cssAdapter(clazz);
6098
+
6099
+ if (adapted != null) {
6100
+ // Append the old one along with the adapted one
6101
+ return adapted + ' ' + clazz;
6102
+ }
6103
+
6104
+ return clazz;
6105
+ };
6106
+ }
6107
+
6108
+ var containerCss = this.options.get('containerCss') || {};
6109
+
6110
+ if ($.isFunction(containerCss)) {
6111
+ containerCss = containerCss(this.$element);
6112
+ }
6113
+
6114
+ CompatUtils.syncCssClasses($container, this.$element, containerCssAdapter);
6115
+
6116
+ $container.css(containerCss);
6117
+ $container.addClass(containerCssClass);
6118
+
6119
+ return $container;
6120
+ };
6121
+
6122
+ return ContainerCSS;
6123
+ });
6124
+
6125
+ S2.define('select2/compat/dropdownCss',[
6126
+ 'jquery',
6127
+ './utils'
6128
+ ], function ($, CompatUtils) {
6129
+ // No-op CSS adapter that discards all classes by default
6130
+ function _dropdownAdapter (clazz) {
6131
+ return null;
6132
+ }
6133
+
6134
+ function DropdownCSS () { }
6135
+
6136
+ DropdownCSS.prototype.render = function (decorated) {
6137
+ var $dropdown = decorated.call(this);
6138
+
6139
+ var dropdownCssClass = this.options.get('dropdownCssClass') || '';
6140
+
6141
+ if ($.isFunction(dropdownCssClass)) {
6142
+ dropdownCssClass = dropdownCssClass(this.$element);
6143
+ }
6144
+
6145
+ var dropdownCssAdapter = this.options.get('adaptDropdownCssClass');
6146
+ dropdownCssAdapter = dropdownCssAdapter || _dropdownAdapter;
6147
+
6148
+ if (dropdownCssClass.indexOf(':all:') !== -1) {
6149
+ dropdownCssClass = dropdownCssClass.replace(':all:', '');
6150
+
6151
+ var _cssAdapter = dropdownCssAdapter;
6152
+
6153
+ dropdownCssAdapter = function (clazz) {
6154
+ var adapted = _cssAdapter(clazz);
6155
+
6156
+ if (adapted != null) {
6157
+ // Append the old one along with the adapted one
6158
+ return adapted + ' ' + clazz;
6159
+ }
6160
+
6161
+ return clazz;
6162
+ };
6163
+ }
6164
+
6165
+ var dropdownCss = this.options.get('dropdownCss') || {};
6166
+
6167
+ if ($.isFunction(dropdownCss)) {
6168
+ dropdownCss = dropdownCss(this.$element);
6169
+ }
6170
+
6171
+ CompatUtils.syncCssClasses($dropdown, this.$element, dropdownCssAdapter);
6172
+
6173
+ $dropdown.css(dropdownCss);
6174
+ $dropdown.addClass(dropdownCssClass);
6175
+
6176
+ return $dropdown;
6177
+ };
6178
+
6179
+ return DropdownCSS;
6180
+ });
6181
+
6182
+ S2.define('select2/compat/initSelection',[
6183
+ 'jquery'
6184
+ ], function ($) {
6185
+ function InitSelection (decorated, $element, options) {
6186
+ if (options.get('debug') && window.console && console.warn) {
6187
+ console.warn(
6188
+ 'Select2: The `initSelection` option has been deprecated in favor' +
6189
+ ' of a custom data adapter that overrides the `current` method. ' +
6190
+ 'This method is now called multiple times instead of a single ' +
6191
+ 'time when the instance is initialized. Support will be removed ' +
6192
+ 'for the `initSelection` option in future versions of Select2'
6193
+ );
6194
+ }
6195
+
6196
+ this.initSelection = options.get('initSelection');
6197
+ this._isInitialized = false;
6198
+
6199
+ decorated.call(this, $element, options);
6200
+ }
6201
+
6202
+ InitSelection.prototype.current = function (decorated, callback) {
6203
+ var self = this;
6204
+
6205
+ if (this._isInitialized) {
6206
+ decorated.call(this, callback);
6207
+
6208
+ return;
6209
+ }
6210
+
6211
+ this.initSelection.call(null, this.$element, function (data) {
6212
+ self._isInitialized = true;
6213
+
6214
+ if (!$.isArray(data)) {
6215
+ data = [data];
6216
+ }
6217
+
6218
+ callback(data);
6219
+ });
6220
+ };
6221
+
6222
+ return InitSelection;
6223
+ });
6224
+
6225
+ S2.define('select2/compat/inputData',[
6226
+ 'jquery',
6227
+ '../utils'
6228
+ ], function ($, Utils) {
6229
+ function InputData (decorated, $element, options) {
6230
+ this._currentData = [];
6231
+ this._valueSeparator = options.get('valueSeparator') || ',';
6232
+
6233
+ if ($element.prop('type') === 'hidden') {
6234
+ if (options.get('debug') && console && console.warn) {
6235
+ console.warn(
6236
+ 'Select2: Using a hidden input with Select2 is no longer ' +
6237
+ 'supported and may stop working in the future. It is recommended ' +
6238
+ 'to use a `<select>` element instead.'
6239
+ );
6240
+ }
6241
+ }
6242
+
6243
+ decorated.call(this, $element, options);
6244
+ }
6245
+
6246
+ InputData.prototype.current = function (_, callback) {
6247
+ function getSelected (data, selectedIds) {
6248
+ var selected = [];
6249
+
6250
+ if (data.selected || $.inArray(data.id, selectedIds) !== -1) {
6251
+ data.selected = true;
6252
+ selected.push(data);
6253
+ } else {
6254
+ data.selected = false;
6255
+ }
6256
+
6257
+ if (data.children) {
6258
+ selected.push.apply(selected, getSelected(data.children, selectedIds));
6259
+ }
6260
+
6261
+ return selected;
6262
+ }
6263
+
6264
+ var selected = [];
6265
+
6266
+ for (var d = 0; d < this._currentData.length; d++) {
6267
+ var data = this._currentData[d];
6268
+
6269
+ selected.push.apply(
6270
+ selected,
6271
+ getSelected(
6272
+ data,
6273
+ this.$element.val().split(
6274
+ this._valueSeparator
6275
+ )
6276
+ )
6277
+ );
6278
+ }
6279
+
6280
+ callback(selected);
6281
+ };
6282
+
6283
+ InputData.prototype.select = function (_, data) {
6284
+ if (!this.options.get('multiple')) {
6285
+ this.current(function (allData) {
6286
+ $.map(allData, function (data) {
6287
+ data.selected = false;
6288
+ });
6289
+ });
6290
+
6291
+ this.$element.val(data.id);
6292
+ this.$element.trigger('input').trigger('change');
6293
+ } else {
6294
+ var value = this.$element.val();
6295
+ value += this._valueSeparator + data.id;
6296
+
6297
+ this.$element.val(value);
6298
+ this.$element.trigger('input').trigger('change');
6299
+ }
6300
+ };
6301
+
6302
+ InputData.prototype.unselect = function (_, data) {
6303
+ var self = this;
6304
+
6305
+ data.selected = false;
6306
+
6307
+ this.current(function (allData) {
6308
+ var values = [];
6309
+
6310
+ for (var d = 0; d < allData.length; d++) {
6311
+ var item = allData[d];
6312
+
6313
+ if (data.id == item.id) {
6314
+ continue;
6315
+ }
6316
+
6317
+ values.push(item.id);
6318
+ }
6319
+
6320
+ self.$element.val(values.join(self._valueSeparator));
6321
+ self.$element.trigger('input').trigger('change');
6322
+ });
6323
+ };
6324
+
6325
+ InputData.prototype.query = function (_, params, callback) {
6326
+ var results = [];
6327
+
6328
+ for (var d = 0; d < this._currentData.length; d++) {
6329
+ var data = this._currentData[d];
6330
+
6331
+ var matches = this.matches(params, data);
6332
+
6333
+ if (matches !== null) {
6334
+ results.push(matches);
6335
+ }
6336
+ }
6337
+
6338
+ callback({
6339
+ results: results
6340
+ });
6341
+ };
6342
+
6343
+ InputData.prototype.addOptions = function (_, $options) {
6344
+ var options = $.map($options, function ($option) {
6345
+ return Utils.GetData($option[0], 'data');
6346
+ });
6347
+
6348
+ this._currentData.push.apply(this._currentData, options);
6349
+ };
6350
+
6351
+ return InputData;
6352
+ });
6353
+
6354
+ S2.define('select2/compat/matcher',[
6355
+ 'jquery'
6356
+ ], function ($) {
6357
+ function oldMatcher (matcher) {
6358
+ function wrappedMatcher (params, data) {
6359
+ var match = $.extend(true, {}, data);
6360
+
6361
+ if (params.term == null || $.trim(params.term) === '') {
6362
+ return match;
6363
+ }
6364
+
6365
+ if (data.children) {
6366
+ for (var c = data.children.length - 1; c >= 0; c--) {
6367
+ var child = data.children[c];
6368
+
6369
+ // Check if the child object matches
6370
+ // The old matcher returned a boolean true or false
6371
+ var doesMatch = matcher(params.term, child.text, child);
6372
+
6373
+ // If the child didn't match, pop it off
6374
+ if (!doesMatch) {
6375
+ match.children.splice(c, 1);
6376
+ }
6377
+ }
6378
+
6379
+ if (match.children.length > 0) {
6380
+ return match;
6381
+ }
6382
+ }
6383
+
6384
+ if (matcher(params.term, data.text, data)) {
6385
+ return match;
6386
+ }
6387
+
6388
+ return null;
6389
+ }
6390
+
6391
+ return wrappedMatcher;
6392
+ }
6393
+
6394
+ return oldMatcher;
6395
+ });
6396
+
6397
+ S2.define('select2/compat/query',[
6398
+
6399
+ ], function () {
6400
+ function Query (decorated, $element, options) {
6401
+ if (options.get('debug') && window.console && console.warn) {
6402
+ console.warn(
6403
+ 'Select2: The `query` option has been deprecated in favor of a ' +
6404
+ 'custom data adapter that overrides the `query` method. Support ' +
6405
+ 'will be removed for the `query` option in future versions of ' +
6406
+ 'Select2.'
6407
+ );
6408
+ }
6409
+
6410
+ decorated.call(this, $element, options);
6411
+ }
6412
+
6413
+ Query.prototype.query = function (_, params, callback) {
6414
+ params.callback = callback;
6415
+
6416
+ var query = this.options.get('query');
6417
+
6418
+ query.call(null, params);
6419
+ };
6420
+
6421
+ return Query;
6422
+ });
6423
+
6424
+ S2.define('select2/dropdown/attachContainer',[
6425
+
6426
+ ], function () {
6427
+ function AttachContainer (decorated, $element, options) {
6428
+ decorated.call(this, $element, options);
6429
+ }
6430
+
6431
+ AttachContainer.prototype.position =
6432
+ function (decorated, $dropdown, $container) {
6433
+ var $dropdownContainer = $container.find('.dropdown-wrapper');
6434
+ $dropdownContainer.append($dropdown);
6435
+
6436
+ $dropdown.addClass('select2-dropdown--below');
6437
+ $container.addClass('select2-container--below');
6438
+ };
6439
+
6440
+ return AttachContainer;
6441
+ });
6442
+
6443
+ S2.define('select2/dropdown/stopPropagation',[
6444
+
6445
+ ], function () {
6446
+ function StopPropagation () { }
6447
+
6448
+ StopPropagation.prototype.bind = function (decorated, container, $container) {
6449
+ decorated.call(this, container, $container);
6450
+
6451
+ var stoppedEvents = [
6452
+ 'blur',
6453
+ 'change',
6454
+ 'click',
6455
+ 'dblclick',
6456
+ 'focus',
6457
+ 'focusin',
6458
+ 'focusout',
6459
+ 'input',
6460
+ 'keydown',
6461
+ 'keyup',
6462
+ 'keypress',
6463
+ 'mousedown',
6464
+ 'mouseenter',
6465
+ 'mouseleave',
6466
+ 'mousemove',
6467
+ 'mouseover',
6468
+ 'mouseup',
6469
+ 'search',
6470
+ 'touchend',
6471
+ 'touchstart'
6472
+ ];
6473
+
6474
+ this.$dropdown.on(stoppedEvents.join(' '), function (evt) {
6475
+ evt.stopPropagation();
6476
+ });
6477
+ };
6478
+
6479
+ return StopPropagation;
6480
+ });
6481
+
6482
+ S2.define('select2/selection/stopPropagation',[
6483
+
6484
+ ], function () {
6485
+ function StopPropagation () { }
6486
+
6487
+ StopPropagation.prototype.bind = function (decorated, container, $container) {
6488
+ decorated.call(this, container, $container);
6489
+
6490
+ var stoppedEvents = [
6491
+ 'blur',
6492
+ 'change',
6493
+ 'click',
6494
+ 'dblclick',
6495
+ 'focus',
6496
+ 'focusin',
6497
+ 'focusout',
6498
+ 'input',
6499
+ 'keydown',
6500
+ 'keyup',
6501
+ 'keypress',
6502
+ 'mousedown',
6503
+ 'mouseenter',
6504
+ 'mouseleave',
6505
+ 'mousemove',
6506
+ 'mouseover',
6507
+ 'mouseup',
6508
+ 'search',
6509
+ 'touchend',
6510
+ 'touchstart'
6511
+ ];
6512
+
6513
+ this.$selection.on(stoppedEvents.join(' '), function (evt) {
6514
+ evt.stopPropagation();
6515
+ });
6516
+ };
6517
+
6518
+ return StopPropagation;
6519
+ });
6520
+
6521
+ /*!
6522
+ * jQuery Mousewheel 3.1.13
6523
+ *
6524
+ * Copyright jQuery Foundation and other contributors
6525
+ * Released under the MIT license
6526
+ * http://jquery.org/license
6527
+ */
6528
+
6529
+ (function (factory) {
6530
+ if ( typeof S2.define === 'function' && S2.define.amd ) {
6531
+ // AMD. Register as an anonymous module.
6532
+ S2.define('jquery-mousewheel',['jquery'], factory);
6533
+ } else if (typeof exports === 'object') {
6534
+ // Node/CommonJS style for Browserify
6535
+ module.exports = factory;
6536
+ } else {
6537
+ // Browser globals
6538
+ factory(jQuery);
6539
+ }
6540
+ }(function ($) {
6541
+
6542
+ var toFix = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'],
6543
+ toBind = ( 'onwheel' in document || document.documentMode >= 9 ) ?
6544
+ ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'],
6545
+ slice = Array.prototype.slice,
6546
+ nullLowestDeltaTimeout, lowestDelta;
6547
+
6548
+ if ( $.event.fixHooks ) {
6549
+ for ( var i = toFix.length; i; ) {
6550
+ $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks;
6551
+ }
6552
+ }
6553
+
6554
+ var special = $.event.special.mousewheel = {
6555
+ version: '3.1.12',
6556
+
6557
+ setup: function() {
6558
+ if ( this.addEventListener ) {
6559
+ for ( var i = toBind.length; i; ) {
6560
+ this.addEventListener( toBind[--i], handler, false );
6561
+ }
6562
+ } else {
6563
+ this.onmousewheel = handler;
6564
+ }
6565
+ // Store the line height and page height for this particular element
6566
+ $.data(this, 'mousewheel-line-height', special.getLineHeight(this));
6567
+ $.data(this, 'mousewheel-page-height', special.getPageHeight(this));
6568
+ },
6569
+
6570
+ teardown: function() {
6571
+ if ( this.removeEventListener ) {
6572
+ for ( var i = toBind.length; i; ) {
6573
+ this.removeEventListener( toBind[--i], handler, false );
6574
+ }
6575
+ } else {
6576
+ this.onmousewheel = null;
6577
+ }
6578
+ // Clean up the data we added to the element
6579
+ $.removeData(this, 'mousewheel-line-height');
6580
+ $.removeData(this, 'mousewheel-page-height');
6581
+ },
6582
+
6583
+ getLineHeight: function(elem) {
6584
+ var $elem = $(elem),
6585
+ $parent = $elem['offsetParent' in $.fn ? 'offsetParent' : 'parent']();
6586
+ if (!$parent.length) {
6587
+ $parent = $('body');
6588
+ }
6589
+ return parseInt($parent.css('fontSize'), 10) || parseInt($elem.css('fontSize'), 10) || 16;
6590
+ },
6591
+
6592
+ getPageHeight: function(elem) {
6593
+ return $(elem).height();
6594
+ },
6595
+
6596
+ settings: {
6597
+ adjustOldDeltas: true, // see shouldAdjustOldDeltas() below
6598
+ normalizeOffset: true // calls getBoundingClientRect for each event
6599
+ }
6600
+ };
6601
+
6602
+ $.fn.extend({
6603
+ mousewheel: function(fn) {
6604
+ return fn ? this.bind('mousewheel', fn) : this.trigger('mousewheel');
6605
+ },
6606
+
6607
+ unmousewheel: function(fn) {
6608
+ return this.unbind('mousewheel', fn);
6609
+ }
6610
+ });
6611
+
6612
+
6613
+ function handler(event) {
6614
+ var orgEvent = event || window.event,
6615
+ args = slice.call(arguments, 1),
6616
+ delta = 0,
6617
+ deltaX = 0,
6618
+ deltaY = 0,
6619
+ absDelta = 0,
6620
+ offsetX = 0,
6621
+ offsetY = 0;
6622
+ event = $.event.fix(orgEvent);
6623
+ event.type = 'mousewheel';
6624
+
6625
+ // Old school scrollwheel delta
6626
+ if ( 'detail' in orgEvent ) { deltaY = orgEvent.detail * -1; }
6627
+ if ( 'wheelDelta' in orgEvent ) { deltaY = orgEvent.wheelDelta; }
6628
+ if ( 'wheelDeltaY' in orgEvent ) { deltaY = orgEvent.wheelDeltaY; }
6629
+ if ( 'wheelDeltaX' in orgEvent ) { deltaX = orgEvent.wheelDeltaX * -1; }
6630
+
6631
+ // Firefox < 17 horizontal scrolling related to DOMMouseScroll event
6632
+ if ( 'axis' in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {
6633
+ deltaX = deltaY * -1;
6634
+ deltaY = 0;
6635
+ }
6636
+
6637
+ // Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy
6638
+ delta = deltaY === 0 ? deltaX : deltaY;
6639
+
6640
+ // New school wheel delta (wheel event)
6641
+ if ( 'deltaY' in orgEvent ) {
6642
+ deltaY = orgEvent.deltaY * -1;
6643
+ delta = deltaY;
6644
+ }
6645
+ if ( 'deltaX' in orgEvent ) {
6646
+ deltaX = orgEvent.deltaX;
6647
+ if ( deltaY === 0 ) { delta = deltaX * -1; }
6648
+ }
6649
+
6650
+ // No change actually happened, no reason to go any further
6651
+ if ( deltaY === 0 && deltaX === 0 ) { return; }
6652
+
6653
+ // Need to convert lines and pages to pixels if we aren't already in pixels
6654
+ // There are three delta modes:
6655
+ // * deltaMode 0 is by pixels, nothing to do
6656
+ // * deltaMode 1 is by lines
6657
+ // * deltaMode 2 is by pages
6658
+ if ( orgEvent.deltaMode === 1 ) {
6659
+ var lineHeight = $.data(this, 'mousewheel-line-height');
6660
+ delta *= lineHeight;
6661
+ deltaY *= lineHeight;
6662
+ deltaX *= lineHeight;
6663
+ } else if ( orgEvent.deltaMode === 2 ) {
6664
+ var pageHeight = $.data(this, 'mousewheel-page-height');
6665
+ delta *= pageHeight;
6666
+ deltaY *= pageHeight;
6667
+ deltaX *= pageHeight;
6668
+ }
6669
+
6670
+ // Store lowest absolute delta to normalize the delta values
6671
+ absDelta = Math.max( Math.abs(deltaY), Math.abs(deltaX) );
6672
+
6673
+ if ( !lowestDelta || absDelta < lowestDelta ) {
6674
+ lowestDelta = absDelta;
6675
+
6676
+ // Adjust older deltas if necessary
6677
+ if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {
6678
+ lowestDelta /= 40;
6679
+ }
6680
+ }
6681
+
6682
+ // Adjust older deltas if necessary
6683
+ if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {
6684
+ // Divide all the things by 40!
6685
+ delta /= 40;
6686
+ deltaX /= 40;
6687
+ deltaY /= 40;
6688
+ }
6689
+
6690
+ // Get a whole, normalized value for the deltas
6691
+ delta = Math[ delta >= 1 ? 'floor' : 'ceil' ](delta / lowestDelta);
6692
+ deltaX = Math[ deltaX >= 1 ? 'floor' : 'ceil' ](deltaX / lowestDelta);
6693
+ deltaY = Math[ deltaY >= 1 ? 'floor' : 'ceil' ](deltaY / lowestDelta);
6694
+
6695
+ // Normalise offsetX and offsetY properties
6696
+ if ( special.settings.normalizeOffset && this.getBoundingClientRect ) {
6697
+ var boundingRect = this.getBoundingClientRect();
6698
+ offsetX = event.clientX - boundingRect.left;
6699
+ offsetY = event.clientY - boundingRect.top;
6700
+ }
6701
+
6702
+ // Add information to the event object
6703
+ event.deltaX = deltaX;
6704
+ event.deltaY = deltaY;
6705
+ event.deltaFactor = lowestDelta;
6706
+ event.offsetX = offsetX;
6707
+ event.offsetY = offsetY;
6708
+ // Go ahead and set deltaMode to 0 since we converted to pixels
6709
+ // Although this is a little odd since we overwrite the deltaX/Y
6710
+ // properties with normalized deltas.
6711
+ event.deltaMode = 0;
6712
+
6713
+ // Add event and delta to the front of the arguments
6714
+ args.unshift(event, delta, deltaX, deltaY);
6715
+
6716
+ // Clearout lowestDelta after sometime to better
6717
+ // handle multiple device types that give different
6718
+ // a different lowestDelta
6719
+ // Ex: trackpad = 3 and mouse wheel = 120
6720
+ if (nullLowestDeltaTimeout) { clearTimeout(nullLowestDeltaTimeout); }
6721
+ nullLowestDeltaTimeout = setTimeout(nullLowestDelta, 200);
6722
+
6723
+ return ($.event.dispatch || $.event.handle).apply(this, args);
6724
+ }
6725
+
6726
+ function nullLowestDelta() {
6727
+ lowestDelta = null;
6728
+ }
6729
+
6730
+ function shouldAdjustOldDeltas(orgEvent, absDelta) {
6731
+ // If this is an older event and the delta is divisable by 120,
6732
+ // then we are assuming that the browser is treating this as an
6733
+ // older mouse wheel event and that we should divide the deltas
6734
+ // by 40 to try and get a more usable deltaFactor.
6735
+ // Side note, this actually impacts the reported scroll distance
6736
+ // in older browsers and can cause scrolling to be slower than native.
6737
+ // Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false.
6738
+ return special.settings.adjustOldDeltas && orgEvent.type === 'mousewheel' && absDelta % 120 === 0;
6739
+ }
6740
+
6741
+ }));
6742
+
6743
+ S2.define('jquery.select2',[
6744
+ 'jquery',
6745
+ 'jquery-mousewheel',
6746
+
6747
+ './select2/core',
6748
+ './select2/defaults',
6749
+ './select2/utils'
6750
+ ], function ($, _, Select2, Defaults, Utils) {
6751
+ if ($.fn.select2 == null) {
6752
+ // All methods that should return the element
6753
+ var thisMethods = ['open', 'close', 'destroy'];
6754
+
6755
+ $.fn.select2 = function (options) {
6756
+ options = options || {};
6757
+
6758
+ if (typeof options === 'object') {
6759
+ this.each(function () {
6760
+ var instanceOptions = $.extend(true, {}, options);
6761
+
6762
+ var instance = new Select2($(this), instanceOptions);
6763
+ });
6764
+
6765
+ return this;
6766
+ } else if (typeof options === 'string') {
6767
+ var ret;
6768
+ var args = Array.prototype.slice.call(arguments, 1);
6769
+
6770
+ this.each(function () {
6771
+ var instance = Utils.GetData(this, 'select2');
6772
+
6773
+ if (instance == null && window.console && console.error) {
6774
+ console.error(
6775
+ 'The select2(\'' + options + '\') method was called on an ' +
6776
+ 'element that is not using Select2.'
6777
+ );
6778
+ }
6779
+
6780
+ ret = instance[options].apply(instance, args);
6781
+ });
6782
+
6783
+ // Check if we should be returning `this`
6784
+ if ($.inArray(options, thisMethods) > -1) {
6785
+ return this;
6786
+ }
6787
+
6788
+ return ret;
6789
+ } else {
6790
+ throw new Error('Invalid arguments for Select2: ' + options);
6791
+ }
6792
+ };
6793
+ }
6794
+
6795
+ if ($.fn.select2.defaults == null) {
6796
+ $.fn.select2.defaults = Defaults;
6797
+ }
6798
+
6799
+ return Select2;
6800
+ });
6801
+
6802
+ // Return the AMD loader configuration so it can be used outside of this file
6803
+ return {
6804
+ define: S2.define,
6805
+ require: S2.require
6806
+ };
6807
+ }());
6808
+
6809
+ // Autoload the jQuery bindings
6810
+ // We know that all of the modules exist above this, so we're safe
6811
+ var select2 = S2.require('jquery.select2');
6812
+
6813
+ // Hold the AMD module references on the jQuery function that was just loaded
6814
+ // This allows Select2 to use the internal loader outside of this file, such
6815
+ // as in the language files.
6816
+ jQuery.fn.select2.amd = S2;
6817
+
6818
+ // Return the Select2 instance for anyone who is importing it.
6819
+ return select2;
6820
+ }));
js/vendor/select2-4.0.13/dist/js/select2.full.min.js ADDED
@@ -0,0 +1,2 @@
 
 
1
+ /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
2
+ !function(n){"function"==typeof define&&define.amd?define(["jquery"],n):"object"==typeof module&&module.exports?module.exports=function(e,t){return void 0===t&&(t="undefined"!=typeof window?require("jquery"):require("jquery")(e)),n(t),t}:n(jQuery)}(function(d){var e=function(){if(d&&d.fn&&d.fn.select2&&d.fn.select2.amd)var e=d.fn.select2.amd;var t,n,i,h,o,s,f,g,m,v,y,_,r,a,w,l;function b(e,t){return r.call(e,t)}function c(e,t){var n,i,r,o,s,a,l,c,u,d,p,h=t&&t.split("/"),f=y.map,g=f&&f["*"]||{};if(e){for(s=(e=e.split("/")).length-1,y.nodeIdCompat&&w.test(e[s])&&(e[s]=e[s].replace(w,"")),"."===e[0].charAt(0)&&h&&(e=h.slice(0,h.length-1).concat(e)),u=0;u<e.length;u++)if("."===(p=e[u]))e.splice(u,1),u-=1;else if(".."===p){if(0===u||1===u&&".."===e[2]||".."===e[u-1])continue;0<u&&(e.splice(u-1,2),u-=2)}e=e.join("/")}if((h||g)&&f){for(u=(n=e.split("/")).length;0<u;u-=1){if(i=n.slice(0,u).join("/"),h)for(d=h.length;0<d;d-=1)if(r=(r=f[h.slice(0,d).join("/")])&&r[i]){o=r,a=u;break}if(o)break;!l&&g&&g[i]&&(l=g[i],c=u)}!o&&l&&(o=l,a=c),o&&(n.splice(0,a,o),e=n.join("/"))}return e}function A(t,n){return function(){var e=a.call(arguments,0);return"string"!=typeof e[0]&&1===e.length&&e.push(null),s.apply(h,e.concat([t,n]))}}function x(t){return function(e){m[t]=e}}function D(e){if(b(v,e)){var t=v[e];delete v[e],_[e]=!0,o.apply(h,t)}if(!b(m,e)&&!b(_,e))throw new Error("No "+e);return m[e]}function u(e){var t,n=e?e.indexOf("!"):-1;return-1<n&&(t=e.substring(0,n),e=e.substring(n+1,e.length)),[t,e]}function S(e){return e?u(e):[]}return e&&e.requirejs||(e?n=e:e={},m={},v={},y={},_={},r=Object.prototype.hasOwnProperty,a=[].slice,w=/\.js$/,f=function(e,t){var n,i=u(e),r=i[0],o=t[1];return e=i[1],r&&(n=D(r=c(r,o))),r?e=n&&n.normalize?n.normalize(e,function(t){return function(e){return c(e,t)}}(o)):c(e,o):(r=(i=u(e=c(e,o)))[0],e=i[1],r&&(n=D(r))),{f:r?r+"!"+e:e,n:e,pr:r,p:n}},g={require:function(e){return A(e)},exports:function(e){var t=m[e];return void 0!==t?t:m[e]={}},module:function(e){return{id:e,uri:"",exports:m[e],config:function(e){return function(){return y&&y.config&&y.config[e]||{}}}(e)}}},o=function(e,t,n,i){var r,o,s,a,l,c,u,d=[],p=typeof n;if(c=S(i=i||e),"undefined"==p||"function"==p){for(t=!t.length&&n.length?["require","exports","module"]:t,l=0;l<t.length;l+=1)if("require"===(o=(a=f(t[l],c)).f))d[l]=g.require(e);else if("exports"===o)d[l]=g.exports(e),u=!0;else if("module"===o)r=d[l]=g.module(e);else if(b(m,o)||b(v,o)||b(_,o))d[l]=D(o);else{if(!a.p)throw new Error(e+" missing "+o);a.p.load(a.n,A(i,!0),x(o),{}),d[l]=m[o]}s=n?n.apply(m[e],d):void 0,e&&(r&&r.exports!==h&&r.exports!==m[e]?m[e]=r.exports:s===h&&u||(m[e]=s))}else e&&(m[e]=n)},t=n=s=function(e,t,n,i,r){if("string"==typeof e)return g[e]?g[e](t):D(f(e,S(t)).f);if(!e.splice){if((y=e).deps&&s(y.deps,y.callback),!t)return;t.splice?(e=t,t=n,n=null):e=h}return t=t||function(){},"function"==typeof n&&(n=i,i=r),i?o(h,e,t,n):setTimeout(function(){o(h,e,t,n)},4),s},s.config=function(e){return s(e)},t._defined=m,(i=function(e,t,n){if("string"!=typeof e)throw new Error("See almond README: incorrect module build, no module name");t.splice||(n=t,t=[]),b(m,e)||b(v,e)||(v[e]=[e,t,n])}).amd={jQuery:!0},e.requirejs=t,e.require=n,e.define=i),e.define("almond",function(){}),e.define("jquery",[],function(){var e=d||$;return null==e&&console&&console.error&&console.error("Select2: An instance of jQuery or a jQuery-compatible library was not found. Make sure that you are including jQuery before Select2 on your web page."),e}),e.define("select2/utils",["jquery"],function(o){var r={};function u(e){var t=e.prototype,n=[];for(var i in t){"function"==typeof t[i]&&"constructor"!==i&&n.push(i)}return n}r.Extend=function(e,t){var n={}.hasOwnProperty;function i(){this.constructor=e}for(var r in t)n.call(t,r)&&(e[r]=t[r]);return i.prototype=t.prototype,e.prototype=new i,e.__super__=t.prototype,e},r.Decorate=function(i,r){var e=u(r),t=u(i);function o(){var e=Array.prototype.unshift,t=r.prototype.constructor.length,n=i.prototype.constructor;0<t&&(e.call(arguments,i.prototype.constructor),n=r.prototype.constructor),n.apply(this,arguments)}r.displayName=i.displayName,o.prototype=new function(){this.constructor=o};for(var n=0;n<t.length;n++){var s=t[n];o.prototype[s]=i.prototype[s]}function a(e){var t=function(){};e in o.prototype&&(t=o.prototype[e]);var n=r.prototype[e];return function(){return Array.prototype.unshift.call(arguments,t),n.apply(this,arguments)}}for(var l=0;l<e.length;l++){var c=e[l];o.prototype[c]=a(c)}return o};function e(){this.listeners={}}e.prototype.on=function(e,t){this.listeners=this.listeners||{},e in this.listeners?this.listeners[e].push(t):this.listeners[e]=[t]},e.prototype.trigger=function(e){var t=Array.prototype.slice,n=t.call(arguments,1);this.listeners=this.listeners||{},null==n&&(n=[]),0===n.length&&n.push({}),(n[0]._type=e)in this.listeners&&this.invoke(this.listeners[e],t.call(arguments,1)),"*"in this.listeners&&this.invoke(this.listeners["*"],arguments)},e.prototype.invoke=function(e,t){for(var n=0,i=e.length;n<i;n++)e[n].apply(this,t)},r.Observable=e,r.generateChars=function(e){for(var t="",n=0;n<e;n++){t+=Math.floor(36*Math.random()).toString(36)}return t},r.bind=function(e,t){return function(){e.apply(t,arguments)}},r._convertData=function(e){for(var t in e){var n=t.split("-"),i=e;if(1!==n.length){for(var r=0;r<n.length;r++){var o=n[r];(o=o.substring(0,1).toLowerCase()+o.substring(1))in i||(i[o]={}),r==n.length-1&&(i[o]=e[t]),i=i[o]}delete e[t]}}return e},r.hasScroll=function(e,t){var n=o(t),i=t.style.overflowX,r=t.style.overflowY;return(i!==r||"hidden"!==r&&"visible"!==r)&&("scroll"===i||"scroll"===r||(n.innerHeight()<t.scrollHeight||n.innerWidth()<t.scrollWidth))},r.escapeMarkup=function(e){var t={"\\":"&#92;","&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#47;"};return"string"!=typeof e?e:String(e).replace(/[&<>"'\/\\]/g,function(e){return t[e]})},r.appendMany=function(e,t){if("1.7"===o.fn.jquery.substr(0,3)){var n=o();o.map(t,function(e){n=n.add(e)}),t=n}e.append(t)},r.__cache={};var n=0;return r.GetUniqueElementId=function(e){var t=e.getAttribute("data-select2-id");return null==t&&(e.id?(t=e.id,e.setAttribute("data-select2-id",t)):(e.setAttribute("data-select2-id",++n),t=n.toString())),t},r.StoreData=function(e,t,n){var i=r.GetUniqueElementId(e);r.__cache[i]||(r.__cache[i]={}),r.__cache[i][t]=n},r.GetData=function(e,t){var n=r.GetUniqueElementId(e);return t?r.__cache[n]&&null!=r.__cache[n][t]?r.__cache[n][t]:o(e).data(t):r.__cache[n]},r.RemoveData=function(e){var t=r.GetUniqueElementId(e);null!=r.__cache[t]&&delete r.__cache[t],e.removeAttribute("data-select2-id")},r}),e.define("select2/results",["jquery","./utils"],function(h,f){function i(e,t,n){this.$element=e,this.data=n,this.options=t,i.__super__.constructor.call(this)}return f.Extend(i,f.Observable),i.prototype.render=function(){var e=h('<ul class="select2-results__options" role="listbox"></ul>');return this.options.get("multiple")&&e.attr("aria-multiselectable","true"),this.$results=e},i.prototype.clear=function(){this.$results.empty()},i.prototype.displayMessage=function(e){var t=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var n=h('<li role="alert" aria-live="assertive" class="select2-results__option"></li>'),i=this.options.get("translations").get(e.message);n.append(t(i(e.args))),n[0].className+=" select2-results__message",this.$results.append(n)},i.prototype.hideMessages=function(){this.$results.find(".select2-results__message").remove()},i.prototype.append=function(e){this.hideLoading();var t=[];if(null!=e.results&&0!==e.results.length){e.results=this.sort(e.results);for(var n=0;n<e.results.length;n++){var i=e.results[n],r=this.option(i);t.push(r)}this.$results.append(t)}else 0===this.$results.children().length&&this.trigger("results:message",{message:"noResults"})},i.prototype.position=function(e,t){t.find(".select2-results").append(e)},i.prototype.sort=function(e){return this.options.get("sorter")(e)},i.prototype.highlightFirstItem=function(){var e=this.$results.find(".select2-results__option[aria-selected]"),t=e.filter("[aria-selected=true]");0<t.length?t.first().trigger("mouseenter"):e.first().trigger("mouseenter"),this.ensureHighlightVisible()},i.prototype.setClasses=function(){var t=this;this.data.current(function(e){var i=h.map(e,function(e){return e.id.toString()});t.$results.find(".select2-results__option[aria-selected]").each(function(){var e=h(this),t=f.GetData(this,"data"),n=""+t.id;null!=t.element&&t.element.selected||null==t.element&&-1<h.inArray(n,i)?e.attr("aria-selected","true"):e.attr("aria-selected","false")})})},i.prototype.showLoading=function(e){this.hideLoading();var t={disabled:!0,loading:!0,text:this.options.get("translations").get("searching")(e)},n=this.option(t);n.className+=" loading-results",this.$results.prepend(n)},i.prototype.hideLoading=function(){this.$results.find(".loading-results").remove()},i.prototype.option=function(e){var t=document.createElement("li");t.className="select2-results__option";var n={role:"option","aria-selected":"false"},i=window.Element.prototype.matches||window.Element.prototype.msMatchesSelector||window.Element.prototype.webkitMatchesSelector;for(var r in(null!=e.element&&i.call(e.element,":disabled")||null==e.element&&e.disabled)&&(delete n["aria-selected"],n["aria-disabled"]="true"),null==e.id&&delete n["aria-selected"],null!=e._resultId&&(t.id=e._resultId),e.title&&(t.title=e.title),e.children&&(n.role="group",n["aria-label"]=e.text,delete n["aria-selected"]),n){var o=n[r];t.setAttribute(r,o)}if(e.children){var s=h(t),a=document.createElement("strong");a.className="select2-results__group";h(a);this.template(e,a);for(var l=[],c=0;c<e.children.length;c++){var u=e.children[c],d=this.option(u);l.push(d)}var p=h("<ul></ul>",{class:"select2-results__options select2-results__options--nested"});p.append(l),s.append(a),s.append(p)}else this.template(e,t);return f.StoreData(t,"data",e),t},i.prototype.bind=function(t,e){var l=this,n=t.id+"-results";this.$results.attr("id",n),t.on("results:all",function(e){l.clear(),l.append(e.data),t.isOpen()&&(l.setClasses(),l.highlightFirstItem())}),t.on("results:append",function(e){l.append(e.data),t.isOpen()&&l.setClasses()}),t.on("query",function(e){l.hideMessages(),l.showLoading(e)}),t.on("select",function(){t.isOpen()&&(l.setClasses(),l.options.get("scrollAfterSelect")&&l.highlightFirstItem())}),t.on("unselect",function(){t.isOpen()&&(l.setClasses(),l.options.get("scrollAfterSelect")&&l.highlightFirstItem())}),t.on("open",function(){l.$results.attr("aria-expanded","true"),l.$results.attr("aria-hidden","false"),l.setClasses(),l.ensureHighlightVisible()}),t.on("close",function(){l.$results.attr("aria-expanded","false"),l.$results.attr("aria-hidden","true"),l.$results.removeAttr("aria-activedescendant")}),t.on("results:toggle",function(){var e=l.getHighlightedResults();0!==e.length&&e.trigger("mouseup")}),t.on("results:select",function(){var e=l.getHighlightedResults();if(0!==e.length){var t=f.GetData(e[0],"data");"true"==e.attr("aria-selected")?l.trigger("close",{}):l.trigger("select",{data:t})}}),t.on("results:previous",function(){var e=l.getHighlightedResults(),t=l.$results.find("[aria-selected]"),n=t.index(e);if(!(n<=0)){var i=n-1;0===e.length&&(i=0);var r=t.eq(i);r.trigger("mouseenter");var o=l.$results.offset().top,s=r.offset().top,a=l.$results.scrollTop()+(s-o);0===i?l.$results.scrollTop(0):s-o<0&&l.$results.scrollTop(a)}}),t.on("results:next",function(){var e=l.getHighlightedResults(),t=l.$results.find("[aria-selected]"),n=t.index(e)+1;if(!(n>=t.length)){var i=t.eq(n);i.trigger("mouseenter");var r=l.$results.offset().top+l.$results.outerHeight(!1),o=i.offset().top+i.outerHeight(!1),s=l.$results.scrollTop()+o-r;0===n?l.$results.scrollTop(0):r<o&&l.$results.scrollTop(s)}}),t.on("results:focus",function(e){e.element.addClass("select2-results__option--highlighted")}),t.on("results:message",function(e){l.displayMessage(e)}),h.fn.mousewheel&&this.$results.on("mousewheel",function(e){var t=l.$results.scrollTop(),n=l.$results.get(0).scrollHeight-t+e.deltaY,i=0<e.deltaY&&t-e.deltaY<=0,r=e.deltaY<0&&n<=l.$results.height();i?(l.$results.scrollTop(0),e.preventDefault(),e.stopPropagation()):r&&(l.$results.scrollTop(l.$results.get(0).scrollHeight-l.$results.height()),e.preventDefault(),e.stopPropagation())}),this.$results.on("mouseup",".select2-results__option[aria-selected]",function(e){var t=h(this),n=f.GetData(this,"data");"true"!==t.attr("aria-selected")?l.trigger("select",{originalEvent:e,data:n}):l.options.get("multiple")?l.trigger("unselect",{originalEvent:e,data:n}):l.trigger("close",{})}),this.$results.on("mouseenter",".select2-results__option[aria-selected]",function(e){var t=f.GetData(this,"data");l.getHighlightedResults().removeClass("select2-results__option--highlighted"),l.trigger("results:focus",{data:t,element:h(this)})})},i.prototype.getHighlightedResults=function(){return this.$results.find(".select2-results__option--highlighted")},i.prototype.destroy=function(){this.$results.remove()},i.prototype.ensureHighlightVisible=function(){var e=this.getHighlightedResults();if(0!==e.length){var t=this.$results.find("[aria-selected]").index(e),n=this.$results.offset().top,i=e.offset().top,r=this.$results.scrollTop()+(i-n),o=i-n;r-=2*e.outerHeight(!1),t<=2?this.$results.scrollTop(0):(o>this.$results.outerHeight()||o<0)&&this.$results.scrollTop(r)}},i.prototype.template=function(e,t){var n=this.options.get("templateResult"),i=this.options.get("escapeMarkup"),r=n(e,t);null==r?t.style.display="none":"string"==typeof r?t.innerHTML=i(r):h(t).append(r)},i}),e.define("select2/keys",[],function(){return{BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46}}),e.define("select2/selection/base",["jquery","../utils","../keys"],function(n,i,r){function o(e,t){this.$element=e,this.options=t,o.__super__.constructor.call(this)}return i.Extend(o,i.Observable),o.prototype.render=function(){var e=n('<span class="select2-selection" role="combobox" aria-haspopup="true" aria-expanded="false"></span>');return this._tabindex=0,null!=i.GetData(this.$element[0],"old-tabindex")?this._tabindex=i.GetData(this.$element[0],"old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),e.attr("title",this.$element.attr("title")),e.attr("tabindex",this._tabindex),e.attr("aria-disabled","false"),this.$selection=e},o.prototype.bind=function(e,t){var n=this,i=e.id+"-results";this.container=e,this.$selection.on("focus",function(e){n.trigger("focus",e)}),this.$selection.on("blur",function(e){n._handleBlur(e)}),this.$selection.on("keydown",function(e){n.trigger("keypress",e),e.which===r.SPACE&&e.preventDefault()}),e.on("results:focus",function(e){n.$selection.attr("aria-activedescendant",e.data._resultId)}),e.on("selection:update",function(e){n.update(e.data)}),e.on("open",function(){n.$selection.attr("aria-expanded","true"),n.$selection.attr("aria-owns",i),n._attachCloseHandler(e)}),e.on("close",function(){n.$selection.attr("aria-expanded","false"),n.$selection.removeAttr("aria-activedescendant"),n.$selection.removeAttr("aria-owns"),n.$selection.trigger("focus"),n._detachCloseHandler(e)}),e.on("enable",function(){n.$selection.attr("tabindex",n._tabindex),n.$selection.attr("aria-disabled","false")}),e.on("disable",function(){n.$selection.attr("tabindex","-1"),n.$selection.attr("aria-disabled","true")})},o.prototype._handleBlur=function(e){var t=this;window.setTimeout(function(){document.activeElement==t.$selection[0]||n.contains(t.$selection[0],document.activeElement)||t.trigger("blur",e)},1)},o.prototype._attachCloseHandler=function(e){n(document.body).on("mousedown.select2."+e.id,function(e){var t=n(e.target).closest(".select2");n(".select2.select2-container--open").each(function(){this!=t[0]&&i.GetData(this,"element").select2("close")})})},o.prototype._detachCloseHandler=function(e){n(document.body).off("mousedown.select2."+e.id)},o.prototype.position=function(e,t){t.find(".selection").append(e)},o.prototype.destroy=function(){this._detachCloseHandler(this.container)},o.prototype.update=function(e){throw new Error("The `update` method must be defined in child classes.")},o.prototype.isEnabled=function(){return!this.isDisabled()},o.prototype.isDisabled=function(){return this.options.get("disabled")},o}),e.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(e,t,n,i){function r(){r.__super__.constructor.apply(this,arguments)}return n.Extend(r,t),r.prototype.render=function(){var e=r.__super__.render.call(this);return e.addClass("select2-selection--single"),e.html('<span class="select2-selection__rendered"></span><span class="select2-selection__arrow" role="presentation"><b role="presentation"></b></span>'),e},r.prototype.bind=function(t,e){var n=this;r.__super__.bind.apply(this,arguments);var i=t.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",i).attr("role","textbox").attr("aria-readonly","true"),this.$selection.attr("aria-labelledby",i),this.$selection.on("mousedown",function(e){1===e.which&&n.trigger("toggle",{originalEvent:e})}),this.$selection.on("focus",function(e){}),this.$selection.on("blur",function(e){}),t.on("focus",function(e){t.isOpen()||n.$selection.trigger("focus")})},r.prototype.clear=function(){var e=this.$selection.find(".select2-selection__rendered");e.empty(),e.removeAttr("title")},r.prototype.display=function(e,t){var n=this.options.get("templateSelection");return this.options.get("escapeMarkup")(n(e,t))},r.prototype.selectionContainer=function(){return e("<span></span>")},r.prototype.update=function(e){if(0!==e.length){var t=e[0],n=this.$selection.find(".select2-selection__rendered"),i=this.display(t,n);n.empty().append(i);var r=t.title||t.text;r?n.attr("title",r):n.removeAttr("title")}else this.clear()},r}),e.define("select2/selection/multiple",["jquery","./base","../utils"],function(r,e,l){function n(e,t){n.__super__.constructor.apply(this,arguments)}return l.Extend(n,e),n.prototype.render=function(){var e=n.__super__.render.call(this);return e.addClass("select2-selection--multiple"),e.html('<ul class="select2-selection__rendered"></ul>'),e},n.prototype.bind=function(e,t){var i=this;n.__super__.bind.apply(this,arguments),this.$selection.on("click",function(e){i.trigger("toggle",{originalEvent:e})}),this.$selection.on("click",".select2-selection__choice__remove",function(e){if(!i.isDisabled()){var t=r(this).parent(),n=l.GetData(t[0],"data");i.trigger("unselect",{originalEvent:e,data:n})}})},n.prototype.clear=function(){var e=this.$selection.find(".select2-selection__rendered");e.empty(),e.removeAttr("title")},n.prototype.display=function(e,t){var n=this.options.get("templateSelection");return this.options.get("escapeMarkup")(n(e,t))},n.prototype.selectionContainer=function(){return r('<li class="select2-selection__choice"><span class="select2-selection__choice__remove" role="presentation">&times;</span></li>')},n.prototype.update=function(e){if(this.clear(),0!==e.length){for(var t=[],n=0;n<e.length;n++){var i=e[n],r=this.selectionContainer(),o=this.display(i,r);r.append(o);var s=i.title||i.text;s&&r.attr("title",s),l.StoreData(r[0],"data",i),t.push(r)}var a=this.$selection.find(".select2-selection__rendered");l.appendMany(a,t)}},n}),e.define("select2/selection/placeholder",["../utils"],function(e){function t(e,t,n){this.placeholder=this.normalizePlaceholder(n.get("placeholder")),e.call(this,t,n)}return t.prototype.normalizePlaceholder=function(e,t){return"string"==typeof t&&(t={id:"",text:t}),t},t.prototype.createPlaceholder=function(e,t){var n=this.selectionContainer();return n.html(this.display(t)),n.addClass("select2-selection__placeholder").removeClass("select2-selection__choice"),n},t.prototype.update=function(e,t){var n=1==t.length&&t[0].id!=this.placeholder.id;if(1<t.length||n)return e.call(this,t);this.clear();var i=this.createPlaceholder(this.placeholder);this.$selection.find(".select2-selection__rendered").append(i)},t}),e.define("select2/selection/allowClear",["jquery","../keys","../utils"],function(r,i,a){function e(){}return e.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),null==this.placeholder&&this.options.get("debug")&&window.console&&console.error&&console.error("Select2: The `allowClear` option should be used in combination with the `placeholder` option."),this.$selection.on("mousedown",".select2-selection__clear",function(e){i._handleClear(e)}),t.on("keypress",function(e){i._handleKeyboardClear(e,t)})},e.prototype._handleClear=function(e,t){if(!this.isDisabled()){var n=this.$selection.find(".select2-selection__clear");if(0!==n.length){t.stopPropagation();var i=a.GetData(n[0],"data"),r=this.$element.val();this.$element.val(this.placeholder.id);var o={data:i};if(this.trigger("clear",o),o.prevented)this.$element.val(r);else{for(var s=0;s<i.length;s++)if(o={data:i[s]},this.trigger("unselect",o),o.prevented)return void this.$element.val(r);this.$element.trigger("input").trigger("change"),this.trigger("toggle",{})}}}},e.prototype._handleKeyboardClear=function(e,t,n){n.isOpen()||t.which!=i.DELETE&&t.which!=i.BACKSPACE||this._handleClear(t)},e.prototype.update=function(e,t){if(e.call(this,t),!(0<this.$selection.find(".select2-selection__placeholder").length||0===t.length)){var n=this.options.get("translations").get("removeAllItems"),i=r('<span class="select2-selection__clear" title="'+n()+'">&times;</span>');a.StoreData(i[0],"data",t),this.$selection.find(".select2-selection__rendered").prepend(i)}},e}),e.define("select2/selection/search",["jquery","../utils","../keys"],function(i,a,l){function e(e,t,n){e.call(this,t,n)}return e.prototype.render=function(e){var t=i('<li class="select2-search select2-search--inline"><input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="none" spellcheck="false" role="searchbox" aria-autocomplete="list" /></li>');this.$searchContainer=t,this.$search=t.find("input");var n=e.call(this);return this._transferTabIndex(),n},e.prototype.bind=function(e,t,n){var i=this,r=t.id+"-results";e.call(this,t,n),t.on("open",function(){i.$search.attr("aria-controls",r),i.$search.trigger("focus")}),t.on("close",function(){i.$search.val(""),i.$search.removeAttr("aria-controls"),i.$search.removeAttr("aria-activedescendant"),i.$search.trigger("focus")}),t.on("enable",function(){i.$search.prop("disabled",!1),i._transferTabIndex()}),t.on("disable",function(){i.$search.prop("disabled",!0)}),t.on("focus",function(e){i.$search.trigger("focus")}),t.on("results:focus",function(e){e.data._resultId?i.$search.attr("aria-activedescendant",e.data._resultId):i.$search.removeAttr("aria-activedescendant")}),this.$selection.on("focusin",".select2-search--inline",function(e){i.trigger("focus",e)}),this.$selection.on("focusout",".select2-search--inline",function(e){i._handleBlur(e)}),this.$selection.on("keydown",".select2-search--inline",function(e){if(e.stopPropagation(),i.trigger("keypress",e),i._keyUpPrevented=e.isDefaultPrevented(),e.which===l.BACKSPACE&&""===i.$search.val()){var t=i.$searchContainer.prev(".select2-selection__choice");if(0<t.length){var n=a.GetData(t[0],"data");i.searchRemoveChoice(n),e.preventDefault()}}}),this.$selection.on("click",".select2-search--inline",function(e){i.$search.val()&&e.stopPropagation()});var o=document.documentMode,s=o&&o<=11;this.$selection.on("input.searchcheck",".select2-search--inline",function(e){s?i.$selection.off("input.search input.searchcheck"):i.$selection.off("keyup.search")}),this.$selection.on("keyup.search input.search",".select2-search--inline",function(e){if(s&&"input"===e.type)i.$selection.off("input.search input.searchcheck");else{var t=e.which;t!=l.SHIFT&&t!=l.CTRL&&t!=l.ALT&&t!=l.TAB&&i.handleSearch(e)}})},e.prototype._transferTabIndex=function(e){this.$search.attr("tabindex",this.$selection.attr("tabindex")),this.$selection.attr("tabindex","-1")},e.prototype.createPlaceholder=function(e,t){this.$search.attr("placeholder",t.text)},e.prototype.update=function(e,t){var n=this.$search[0]==document.activeElement;this.$search.attr("placeholder",""),e.call(this,t),this.$selection.find(".select2-selection__rendered").append(this.$searchContainer),this.resizeSearch(),n&&this.$search.trigger("focus")},e.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var e=this.$search.val();this.trigger("query",{term:e})}this._keyUpPrevented=!1},e.prototype.searchRemoveChoice=function(e,t){this.trigger("unselect",{data:t}),this.$search.val(t.text),this.handleSearch()},e.prototype.resizeSearch=function(){this.$search.css("width","25px");var e="";""!==this.$search.attr("placeholder")?e=this.$selection.find(".select2-selection__rendered").width():e=.75*(this.$search.val().length+1)+"em";this.$search.css("width",e)},e}),e.define("select2/selection/eventRelay",["jquery"],function(s){function e(){}return e.prototype.bind=function(e,t,n){var i=this,r=["open","opening","close","closing","select","selecting","unselect","unselecting","clear","clearing"],o=["opening","closing","selecting","unselecting","clearing"];e.call(this,t,n),t.on("*",function(e,t){if(-1!==s.inArray(e,r)){t=t||{};var n=s.Event("select2:"+e,{params:t});i.$element.trigger(n),-1!==s.inArray(e,o)&&(t.prevented=n.isDefaultPrevented())}})},e}),e.define("select2/translation",["jquery","require"],function(t,n){function i(e){this.dict=e||{}}return i.prototype.all=function(){return this.dict},i.prototype.get=function(e){return this.dict[e]},i.prototype.extend=function(e){this.dict=t.extend({},e.all(),this.dict)},i._cache={},i.loadPath=function(e){if(!(e in i._cache)){var t=n(e);i._cache[e]=t}return new i(i._cache[e])},i}),e.define("select2/diacritics",[],function(){return{"Ⓐ":"A","A":"A","À":"A","Á":"A","Â":"A","Ầ":"A","Ấ":"A","Ẫ":"A","Ẩ":"A","Ã":"A","Ā":"A","Ă":"A","Ằ":"A","Ắ":"A","Ẵ":"A","Ẳ":"A","Ȧ":"A","Ǡ":"A","Ä":"A","Ǟ":"A","Ả":"A","Å":"A","Ǻ":"A","Ǎ":"A","Ȁ":"A","Ȃ":"A","Ạ":"A","Ậ":"A","Ặ":"A","Ḁ":"A","Ą":"A","Ⱥ":"A","Ɐ":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ⓑ":"B","B":"B","Ḃ":"B","Ḅ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ɓ":"B","Ⓒ":"C","C":"C","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","Ç":"C","Ḉ":"C","Ƈ":"C","Ȼ":"C","Ꜿ":"C","Ⓓ":"D","D":"D","Ḋ":"D","Ď":"D","Ḍ":"D","Ḑ":"D","Ḓ":"D","Ḏ":"D","Đ":"D","Ƌ":"D","Ɗ":"D","Ɖ":"D","Ꝺ":"D","DZ":"DZ","DŽ":"DZ","Dz":"Dz","Dž":"Dz","Ⓔ":"E","E":"E","È":"E","É":"E","Ê":"E","Ề":"E","Ế":"E","Ễ":"E","Ể":"E","Ẽ":"E","Ē":"E","Ḕ":"E","Ḗ":"E","Ĕ":"E","Ė":"E","Ë":"E","Ẻ":"E","Ě":"E","Ȅ":"E","Ȇ":"E","Ẹ":"E","Ệ":"E","Ȩ":"E","Ḝ":"E","Ę":"E","Ḙ":"E","Ḛ":"E","Ɛ":"E","Ǝ":"E","Ⓕ":"F","F":"F","Ḟ":"F","Ƒ":"F","Ꝼ":"F","Ⓖ":"G","G":"G","Ǵ":"G","Ĝ":"G","Ḡ":"G","Ğ":"G","Ġ":"G","Ǧ":"G","Ģ":"G","Ǥ":"G","Ɠ":"G","Ꞡ":"G","Ᵹ":"G","Ꝿ":"G","Ⓗ":"H","H":"H","Ĥ":"H","Ḣ":"H","Ḧ":"H","Ȟ":"H","Ḥ":"H","Ḩ":"H","Ḫ":"H","Ħ":"H","Ⱨ":"H","Ⱶ":"H","Ɥ":"H","Ⓘ":"I","I":"I","Ì":"I","Í":"I","Î":"I","Ĩ":"I","Ī":"I","Ĭ":"I","İ":"I","Ï":"I","Ḯ":"I","Ỉ":"I","Ǐ":"I","Ȉ":"I","Ȋ":"I","Ị":"I","Į":"I","Ḭ":"I","Ɨ":"I","Ⓙ":"J","J":"J","Ĵ":"J","Ɉ":"J","Ⓚ":"K","K":"K","Ḱ":"K","Ǩ":"K","Ḳ":"K","Ķ":"K","Ḵ":"K","Ƙ":"K","Ⱪ":"K","Ꝁ":"K","Ꝃ":"K","Ꝅ":"K","Ꞣ":"K","Ⓛ":"L","L":"L","Ŀ":"L","Ĺ":"L","Ľ":"L","Ḷ":"L","Ḹ":"L","Ļ":"L","Ḽ":"L","Ḻ":"L","Ł":"L","Ƚ":"L","Ɫ":"L","Ⱡ":"L","Ꝉ":"L","Ꝇ":"L","Ꞁ":"L","LJ":"LJ","Lj":"Lj","Ⓜ":"M","M":"M","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ɯ":"M","Ⓝ":"N","N":"N","Ǹ":"N","Ń":"N","Ñ":"N","Ṅ":"N","Ň":"N","Ṇ":"N","Ņ":"N","Ṋ":"N","Ṉ":"N","Ƞ":"N","Ɲ":"N","Ꞑ":"N","Ꞥ":"N","NJ":"NJ","Nj":"Nj","Ⓞ":"O","O":"O","Ò":"O","Ó":"O","Ô":"O","Ồ":"O","Ố":"O","Ỗ":"O","Ổ":"O","Õ":"O","Ṍ":"O","Ȭ":"O","Ṏ":"O","Ō":"O","Ṑ":"O","Ṓ":"O","Ŏ":"O","Ȯ":"O","Ȱ":"O","Ö":"O","Ȫ":"O","Ỏ":"O","Ő":"O","Ǒ":"O","Ȍ":"O","Ȏ":"O","Ơ":"O","Ờ":"O","Ớ":"O","Ỡ":"O","Ở":"O","Ợ":"O","Ọ":"O","Ộ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Ɔ":"O","Ɵ":"O","Ꝋ":"O","Ꝍ":"O","Œ":"OE","Ƣ":"OI","Ꝏ":"OO","Ȣ":"OU","Ⓟ":"P","P":"P","Ṕ":"P","Ṗ":"P","Ƥ":"P","Ᵽ":"P","Ꝑ":"P","Ꝓ":"P","Ꝕ":"P","Ⓠ":"Q","Q":"Q","Ꝗ":"Q","Ꝙ":"Q","Ɋ":"Q","Ⓡ":"R","R":"R","Ŕ":"R","Ṙ":"R","Ř":"R","Ȑ":"R","Ȓ":"R","Ṛ":"R","Ṝ":"R","Ŗ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꝛ":"R","Ꞧ":"R","Ꞃ":"R","Ⓢ":"S","S":"S","ẞ":"S","Ś":"S","Ṥ":"S","Ŝ":"S","Ṡ":"S","Š":"S","Ṧ":"S","Ṣ":"S","Ṩ":"S","Ș":"S","Ş":"S","Ȿ":"S","Ꞩ":"S","Ꞅ":"S","Ⓣ":"T","T":"T","Ṫ":"T","Ť":"T","Ṭ":"T","Ț":"T","Ţ":"T","Ṱ":"T","Ṯ":"T","Ŧ":"T","Ƭ":"T","Ʈ":"T","Ⱦ":"T","Ꞇ":"T","Ꜩ":"TZ","Ⓤ":"U","U":"U","Ù":"U","Ú":"U","Û":"U","Ũ":"U","Ṹ":"U","Ū":"U","Ṻ":"U","Ŭ":"U","Ü":"U","Ǜ":"U","Ǘ":"U","Ǖ":"U","Ǚ":"U","Ủ":"U","Ů":"U","Ű":"U","Ǔ":"U","Ȕ":"U","Ȗ":"U","Ư":"U","Ừ":"U","Ứ":"U","Ữ":"U","Ử":"U","Ự":"U","Ụ":"U","Ṳ":"U","Ų":"U","Ṷ":"U","Ṵ":"U","Ʉ":"U","Ⓥ":"V","V":"V","Ṽ":"V","Ṿ":"V","Ʋ":"V","Ꝟ":"V","Ʌ":"V","Ꝡ":"VY","Ⓦ":"W","W":"W","Ẁ":"W","Ẃ":"W","Ŵ":"W","Ẇ":"W","Ẅ":"W","Ẉ":"W","Ⱳ":"W","Ⓧ":"X","X":"X","Ẋ":"X","Ẍ":"X","Ⓨ":"Y","Y":"Y","Ỳ":"Y","Ý":"Y","Ŷ":"Y","Ỹ":"Y","Ȳ":"Y","Ẏ":"Y","Ÿ":"Y","Ỷ":"Y","Ỵ":"Y","Ƴ":"Y","Ɏ":"Y","Ỿ":"Y","Ⓩ":"Z","Z":"Z","Ź":"Z","Ẑ":"Z","Ż":"Z","Ž":"Z","Ẓ":"Z","Ẕ":"Z","Ƶ":"Z","Ȥ":"Z","Ɀ":"Z","Ⱬ":"Z","Ꝣ":"Z","ⓐ":"a","a":"a","ẚ":"a","à":"a","á":"a","â":"a","ầ":"a","ấ":"a","ẫ":"a","ẩ":"a","ã":"a","ā":"a","ă":"a","ằ":"a","ắ":"a","ẵ":"a","ẳ":"a","ȧ":"a","ǡ":"a","ä":"a","ǟ":"a","ả":"a","å":"a","ǻ":"a","ǎ":"a","ȁ":"a","ȃ":"a","ạ":"a","ậ":"a","ặ":"a","ḁ":"a","ą":"a","ⱥ":"a","ɐ":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ⓑ":"b","b":"b","ḃ":"b","ḅ":"b","ḇ":"b","ƀ":"b","ƃ":"b","ɓ":"b","ⓒ":"c","c":"c","ć":"c","ĉ":"c","ċ":"c","č":"c","ç":"c","ḉ":"c","ƈ":"c","ȼ":"c","ꜿ":"c","ↄ":"c","ⓓ":"d","d":"d","ḋ":"d","ď":"d","ḍ":"d","ḑ":"d","ḓ":"d","ḏ":"d","đ":"d","ƌ":"d","ɖ":"d","ɗ":"d","ꝺ":"d","dz":"dz","dž":"dz","ⓔ":"e","e":"e","è":"e","é":"e","ê":"e","ề":"e","ế":"e","ễ":"e","ể":"e","ẽ":"e","ē":"e","ḕ":"e","ḗ":"e","ĕ":"e","ė":"e","ë":"e","ẻ":"e","ě":"e","ȅ":"e","ȇ":"e","ẹ":"e","ệ":"e","ȩ":"e","ḝ":"e","ę":"e","ḙ":"e","ḛ":"e","ɇ":"e","ɛ":"e","ǝ":"e","ⓕ":"f","f":"f","ḟ":"f","ƒ":"f","ꝼ":"f","ⓖ":"g","g":"g","ǵ":"g","ĝ":"g","ḡ":"g","ğ":"g","ġ":"g","ǧ":"g","ģ":"g","ǥ":"g","ɠ":"g","ꞡ":"g","ᵹ":"g","ꝿ":"g","ⓗ":"h","h":"h","ĥ":"h","ḣ":"h","ḧ":"h","ȟ":"h","ḥ":"h","ḩ":"h","ḫ":"h","ẖ":"h","ħ":"h","ⱨ":"h","ⱶ":"h","ɥ":"h","ƕ":"hv","ⓘ":"i","i":"i","ì":"i","í":"i","î":"i","ĩ":"i","ī":"i","ĭ":"i","ï":"i","ḯ":"i","ỉ":"i","ǐ":"i","ȉ":"i","ȋ":"i","ị":"i","į":"i","ḭ":"i","ɨ":"i","ı":"i","ⓙ":"j","j":"j","ĵ":"j","ǰ":"j","ɉ":"j","ⓚ":"k","k":"k","ḱ":"k","ǩ":"k","ḳ":"k","ķ":"k","ḵ":"k","ƙ":"k","ⱪ":"k","ꝁ":"k","ꝃ":"k","ꝅ":"k","ꞣ":"k","ⓛ":"l","l":"l","ŀ":"l","ĺ":"l","ľ":"l","ḷ":"l","ḹ":"l","ļ":"l","ḽ":"l","ḻ":"l","ſ":"l","ł":"l","ƚ":"l","ɫ":"l","ⱡ":"l","ꝉ":"l","ꞁ":"l","ꝇ":"l","lj":"lj","ⓜ":"m","m":"m","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ɯ":"m","ⓝ":"n","n":"n","ǹ":"n","ń":"n","ñ":"n","ṅ":"n","ň":"n","ṇ":"n","ņ":"n","ṋ":"n","ṉ":"n","ƞ":"n","ɲ":"n","ʼn":"n","ꞑ":"n","ꞥ":"n","nj":"nj","ⓞ":"o","o":"o","ò":"o","ó":"o","ô":"o","ồ":"o","ố":"o","ỗ":"o","ổ":"o","õ":"o","ṍ":"o","ȭ":"o","ṏ":"o","ō":"o","ṑ":"o","ṓ":"o","ŏ":"o","ȯ":"o","ȱ":"o","ö":"o","ȫ":"o","ỏ":"o","ő":"o","ǒ":"o","ȍ":"o","ȏ":"o","ơ":"o","ờ":"o","ớ":"o","ỡ":"o","ở":"o","ợ":"o","ọ":"o","ộ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","ɔ":"o","ꝋ":"o","ꝍ":"o","ɵ":"o","œ":"oe","ƣ":"oi","ȣ":"ou","ꝏ":"oo","ⓟ":"p","p":"p","ṕ":"p","ṗ":"p","ƥ":"p","ᵽ":"p","ꝑ":"p","ꝓ":"p","ꝕ":"p","ⓠ":"q","q":"q","ɋ":"q","ꝗ":"q","ꝙ":"q","ⓡ":"r","r":"r","ŕ":"r","ṙ":"r","ř":"r","ȑ":"r","ȓ":"r","ṛ":"r","ṝ":"r","ŗ":"r","ṟ":"r","ɍ":"r","ɽ":"r","ꝛ":"r","ꞧ":"r","ꞃ":"r","ⓢ":"s","s":"s","ß":"s","ś":"s","ṥ":"s","ŝ":"s","ṡ":"s","š":"s","ṧ":"s","ṣ":"s","ṩ":"s","ș":"s","ş":"s","ȿ":"s","ꞩ":"s","ꞅ":"s","ẛ":"s","ⓣ":"t","t":"t","ṫ":"t","ẗ":"t","ť":"t","ṭ":"t","ț":"t","ţ":"t","ṱ":"t","ṯ":"t","ŧ":"t","ƭ":"t","ʈ":"t","ⱦ":"t","ꞇ":"t","ꜩ":"tz","ⓤ":"u","u":"u","ù":"u","ú":"u","û":"u","ũ":"u","ṹ":"u","ū":"u","ṻ":"u","ŭ":"u","ü":"u","ǜ":"u","ǘ":"u","ǖ":"u","ǚ":"u","ủ":"u","ů":"u","ű":"u","ǔ":"u","ȕ":"u","ȗ":"u","ư":"u","ừ":"u","ứ":"u","ữ":"u","ử":"u","ự":"u","ụ":"u","ṳ":"u","ų":"u","ṷ":"u","ṵ":"u","ʉ":"u","ⓥ":"v","v":"v","ṽ":"v","ṿ":"v","ʋ":"v","ꝟ":"v","ʌ":"v","ꝡ":"vy","ⓦ":"w","w":"w","ẁ":"w","ẃ":"w","ŵ":"w","ẇ":"w","ẅ":"w","ẘ":"w","ẉ":"w","ⱳ":"w","ⓧ":"x","x":"x","ẋ":"x","ẍ":"x","ⓨ":"y","y":"y","ỳ":"y","ý":"y","ŷ":"y","ỹ":"y","ȳ":"y","ẏ":"y","ÿ":"y","ỷ":"y","ẙ":"y","ỵ":"y","ƴ":"y","ɏ":"y","ỿ":"y","ⓩ":"z","z":"z","ź":"z","ẑ":"z","ż":"z","ž":"z","ẓ":"z","ẕ":"z","ƶ":"z","ȥ":"z","ɀ":"z","ⱬ":"z","ꝣ":"z","Ά":"Α","Έ":"Ε","Ή":"Η","Ί":"Ι","Ϊ":"Ι","Ό":"Ο","Ύ":"Υ","Ϋ":"Υ","Ώ":"Ω","ά":"α","έ":"ε","ή":"η","ί":"ι","ϊ":"ι","ΐ":"ι","ό":"ο","ύ":"υ","ϋ":"υ","ΰ":"υ","ώ":"ω","ς":"σ","’":"'"}}),e.define("select2/data/base",["../utils"],function(i){function n(e,t){n.__super__.constructor.call(this)}return i.Extend(n,i.Observable),n.prototype.current=function(e){throw new Error("The `current` method must be defined in child classes.")},n.prototype.query=function(e,t){throw new Error("The `query` method must be defined in child classes.")},n.prototype.bind=function(e,t){},n.prototype.destroy=function(){},n.prototype.generateResultId=function(e,t){var n=e.id+"-result-";return n+=i.generateChars(4),null!=t.id?n+="-"+t.id.toString():n+="-"+i.generateChars(4),n},n}),e.define("select2/data/select",["./base","../utils","jquery"],function(e,a,l){function n(e,t){this.$element=e,this.options=t,n.__super__.constructor.call(this)}return a.Extend(n,e),n.prototype.current=function(e){var n=[],i=this;this.$element.find(":selected").each(function(){var e=l(this),t=i.item(e);n.push(t)}),e(n)},n.prototype.select=function(r){var o=this;if(r.selected=!0,l(r.element).is("option"))return r.element.selected=!0,void this.$element.trigger("input").trigger("change");if(this.$element.prop("multiple"))this.current(function(e){var t=[];(r=[r]).push.apply(r,e);for(var n=0;n<r.length;n++){var i=r[n].id;-1===l.inArray(i,t)&&t.push(i)}o.$element.val(t),o.$element.trigger("input").trigger("change")});else{var e=r.id;this.$element.val(e),this.$element.trigger("input").trigger("change")}},n.prototype.unselect=function(r){var o=this;if(this.$element.prop("multiple")){if(r.selected=!1,l(r.element).is("option"))return r.element.selected=!1,void this.$element.trigger("input").trigger("change");this.current(function(e){for(var t=[],n=0;n<e.length;n++){var i=e[n].id;i!==r.id&&-1===l.inArray(i,t)&&t.push(i)}o.$element.val(t),o.$element.trigger("input").trigger("change")})}},n.prototype.bind=function(e,t){var n=this;(this.container=e).on("select",function(e){n.select(e.data)}),e.on("unselect",function(e){n.unselect(e.data)})},n.prototype.destroy=function(){this.$element.find("*").each(function(){a.RemoveData(this)})},n.prototype.query=function(i,e){var r=[],o=this;this.$element.children().each(function(){var e=l(this);if(e.is("option")||e.is("optgroup")){var t=o.item(e),n=o.matches(i,t);null!==n&&r.push(n)}}),e({results:r})},n.prototype.addOptions=function(e){a.appendMany(this.$element,e)},n.prototype.option=function(e){var t;e.children?(t=document.createElement("optgroup")).label=e.text:void 0!==(t=document.createElement("option")).textContent?t.textContent=e.text:t.innerText=e.text,void 0!==e.id&&(t.value=e.id),e.disabled&&(t.disabled=!0),e.selected&&(t.selected=!0),e.title&&(t.title=e.title);var n=l(t),i=this._normalizeItem(e);return i.element=t,a.StoreData(t,"data",i),n},n.prototype.item=function(e){var t={};if(null!=(t=a.GetData(e[0],"data")))return t;if(e.is("option"))t={id:e.val(),text:e.text(),disabled:e.prop("disabled"),selected:e.prop("selected"),title:e.prop("title")};else if(e.is("optgroup")){t={text:e.prop("label"),children:[],title:e.prop("title")};for(var n=e.children("option"),i=[],r=0;r<n.length;r++){var o=l(n[r]),s=this.item(o);i.push(s)}t.children=i}return(t=this._normalizeItem(t)).element=e[0],a.StoreData(e[0],"data",t),t},n.prototype._normalizeItem=function(e){e!==Object(e)&&(e={id:e,text:e});return null!=(e=l.extend({},{text:""},e)).id&&(e.id=e.id.toString()),null!=e.text&&(e.text=e.text.toString()),null==e._resultId&&e.id&&null!=this.container&&(e._resultId=this.generateResultId(this.container,e)),l.extend({},{selected:!1,disabled:!1},e)},n.prototype.matches=function(e,t){return this.options.get("matcher")(e,t)},n}),e.define("select2/data/array",["./select","../utils","jquery"],function(e,f,g){function i(e,t){this._dataToConvert=t.get("data")||[],i.__super__.constructor.call(this,e,t)}return f.Extend(i,e),i.prototype.bind=function(e,t){i.__super__.bind.call(this,e,t),this.addOptions(this.convertToOptions(this._dataToConvert))},i.prototype.select=function(n){var e=this.$element.find("option").filter(function(e,t){return t.value==n.id.toString()});0===e.length&&(e=this.option(n),this.addOptions(e)),i.__super__.select.call(this,n)},i.prototype.convertToOptions=function(e){var t=this,n=this.$element.find("option"),i=n.map(function(){return t.item(g(this)).id}).get(),r=[];function o(e){return function(){return g(this).val()==e.id}}for(var s=0;s<e.length;s++){var a=this._normalizeItem(e[s]);if(0<=g.inArray(a.id,i)){var l=n.filter(o(a)),c=this.item(l),u=g.extend(!0,{},a,c),d=this.option(u);l.replaceWith(d)}else{var p=this.option(a);if(a.children){var h=this.convertToOptions(a.children);f.appendMany(p,h)}r.push(p)}}return r},i}),e.define("select2/data/ajax",["./array","../utils","jquery"],function(e,t,o){function n(e,t){this.ajaxOptions=this._applyDefaults(t.get("ajax")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),n.__super__.constructor.call(this,e,t)}return t.Extend(n,e),n.prototype._applyDefaults=function(e){var t={data:function(e){return o.extend({},e,{q:e.term})},transport:function(e,t,n){var i=o.ajax(e);return i.then(t),i.fail(n),i}};return o.extend({},t,e,!0)},n.prototype.processResults=function(e){return e},n.prototype.query=function(n,i){var r=this;null!=this._request&&(o.isFunction(this._request.abort)&&this._request.abort(),this._request=null);var t=o.extend({type:"GET"},this.ajaxOptions);function e(){var e=t.transport(t,function(e){var t=r.processResults(e,n);r.options.get("debug")&&window.console&&console.error&&(t&&t.results&&o.isArray(t.results)||console.error("Select2: The AJAX results did not return an array in the `results` key of the response.")),i(t)},function(){"status"in e&&(0===e.status||"0"===e.status)||r.trigger("results:message",{message:"errorLoading"})});r._request=e}"function"==typeof t.url&&(t.url=t.url.call(this.$element,n)),"function"==typeof t.data&&(t.data=t.data.call(this.$element,n)),this.ajaxOptions.delay&&null!=n.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(e,this.ajaxOptions.delay)):e()},n}),e.define("select2/data/tags",["jquery"],function(u){function e(e,t,n){var i=n.get("tags"),r=n.get("createTag");void 0!==r&&(this.createTag=r);var o=n.get("insertTag");if(void 0!==o&&(this.insertTag=o),e.call(this,t,n),u.isArray(i))for(var s=0;s<i.length;s++){var a=i[s],l=this._normalizeItem(a),c=this.option(l);this.$element.append(c)}}return e.prototype.query=function(e,c,u){var d=this;this._removeOldTags(),null!=c.term&&null==c.page?e.call(this,c,function e(t,n){for(var i=t.results,r=0;r<i.length;r++){var o=i[r],s=null!=o.children&&!e({results:o.children},!0);if((o.text||"").toUpperCase()===(c.term||"").toUpperCase()||s)return!n&&(t.data=i,void u(t))}if(n)return!0;var a=d.createTag(c);if(null!=a){var l=d.option(a);l.attr("data-select2-tag",!0),d.addOptions([l]),d.insertTag(i,a)}t.results=i,u(t)}):e.call(this,c,u)},e.prototype.createTag=function(e,t){var n=u.trim(t.term);return""===n?null:{id:n,text:n}},e.prototype.insertTag=function(e,t,n){t.unshift(n)},e.prototype._removeOldTags=function(e){this.$element.find("option[data-select2-tag]").each(function(){this.selected||u(this).remove()})},e}),e.define("select2/data/tokenizer",["jquery"],function(d){function e(e,t,n){var i=n.get("tokenizer");void 0!==i&&(this.tokenizer=i),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){e.call(this,t,n),this.$search=t.dropdown.$search||t.selection.$search||n.find(".select2-search__field")},e.prototype.query=function(e,t,n){var i=this;t.term=t.term||"";var r=this.tokenizer(t,this.options,function(e){var t=i._normalizeItem(e);if(!i.$element.find("option").filter(function(){return d(this).val()===t.id}).length){var n=i.option(t);n.attr("data-select2-tag",!0),i._removeOldTags(),i.addOptions([n])}!function(e){i.trigger("select",{data:e})}(t)});r.term!==t.term&&(this.$search.length&&(this.$search.val(r.term),this.$search.trigger("focus")),t.term=r.term),e.call(this,t,n)},e.prototype.tokenizer=function(e,t,n,i){for(var r=n.get("tokenSeparators")||[],o=t.term,s=0,a=this.createTag||function(e){return{id:e.term,text:e.term}};s<o.length;){var l=o[s];if(-1!==d.inArray(l,r)){var c=o.substr(0,s),u=a(d.extend({},t,{term:c}));null!=u?(i(u),o=o.substr(s+1)||"",s=0):s++}else s++}return{term:o}},e}),e.define("select2/data/minimumInputLength",[],function(){function e(e,t,n){this.minimumInputLength=n.get("minimumInputLength"),e.call(this,t,n)}return e.prototype.query=function(e,t,n){t.term=t.term||"",t.term.length<this.minimumInputLength?this.trigger("results:message",{message:"inputTooShort",args:{minimum:this.minimumInputLength,input:t.term,params:t}}):e.call(this,t,n)},e}),e.define("select2/data/maximumInputLength",[],function(){function e(e,t,n){this.maximumInputLength=n.get("maximumInputLength"),e.call(this,t,n)}return e.prototype.query=function(e,t,n){t.term=t.term||"",0<this.maximumInputLength&&t.term.length>this.maximumInputLength?this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:t.term,params:t}}):e.call(this,t,n)},e}),e.define("select2/data/maximumSelectionLength",[],function(){function e(e,t,n){this.maximumSelectionLength=n.get("maximumSelectionLength"),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),t.on("select",function(){i._checkIfMaximumSelected()})},e.prototype.query=function(e,t,n){var i=this;this._checkIfMaximumSelected(function(){e.call(i,t,n)})},e.prototype._checkIfMaximumSelected=function(e,n){var i=this;this.current(function(e){var t=null!=e?e.length:0;0<i.maximumSelectionLength&&t>=i.maximumSelectionLength?i.trigger("results:message",{message:"maximumSelected",args:{maximum:i.maximumSelectionLength}}):n&&n()})},e}),e.define("select2/dropdown",["jquery","./utils"],function(t,e){function n(e,t){this.$element=e,this.options=t,n.__super__.constructor.call(this)}return e.Extend(n,e.Observable),n.prototype.render=function(){var e=t('<span class="select2-dropdown"><span class="select2-results"></span></span>');return e.attr("dir",this.options.get("dir")),this.$dropdown=e},n.prototype.bind=function(){},n.prototype.position=function(e,t){},n.prototype.destroy=function(){this.$dropdown.remove()},n}),e.define("select2/dropdown/search",["jquery","../utils"],function(o,e){function t(){}return t.prototype.render=function(e){var t=e.call(this),n=o('<span class="select2-search select2-search--dropdown"><input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="none" spellcheck="false" role="searchbox" aria-autocomplete="list" /></span>');return this.$searchContainer=n,this.$search=n.find("input"),t.prepend(n),t},t.prototype.bind=function(e,t,n){var i=this,r=t.id+"-results";e.call(this,t,n),this.$search.on("keydown",function(e){i.trigger("keypress",e),i._keyUpPrevented=e.isDefaultPrevented()}),this.$search.on("input",function(e){o(this).off("keyup")}),this.$search.on("keyup input",function(e){i.handleSearch(e)}),t.on("open",function(){i.$search.attr("tabindex",0),i.$search.attr("aria-controls",r),i.$search.trigger("focus"),window.setTimeout(function(){i.$search.trigger("focus")},0)}),t.on("close",function(){i.$search.attr("tabindex",-1),i.$search.removeAttr("aria-controls"),i.$search.removeAttr("aria-activedescendant"),i.$search.val(""),i.$search.trigger("blur")}),t.on("focus",function(){t.isOpen()||i.$search.trigger("focus")}),t.on("results:all",function(e){null!=e.query.term&&""!==e.query.term||(i.showSearch(e)?i.$searchContainer.removeClass("select2-search--hide"):i.$searchContainer.addClass("select2-search--hide"))}),t.on("results:focus",function(e){e.data._resultId?i.$search.attr("aria-activedescendant",e.data._resultId):i.$search.removeAttr("aria-activedescendant")})},t.prototype.handleSearch=function(e){if(!this._keyUpPrevented){var t=this.$search.val();this.trigger("query",{term:t})}this._keyUpPrevented=!1},t.prototype.showSearch=function(e,t){return!0},t}),e.define("select2/dropdown/hidePlaceholder",[],function(){function e(e,t,n,i){this.placeholder=this.normalizePlaceholder(n.get("placeholder")),e.call(this,t,n,i)}return e.prototype.append=function(e,t){t.results=this.removePlaceholder(t.results),e.call(this,t)},e.prototype.normalizePlaceholder=function(e,t){return"string"==typeof t&&(t={id:"",text:t}),t},e.prototype.removePlaceholder=function(e,t){for(var n=t.slice(0),i=t.length-1;0<=i;i--){var r=t[i];this.placeholder.id===r.id&&n.splice(i,1)}return n},e}),e.define("select2/dropdown/infiniteScroll",["jquery"],function(n){function e(e,t,n,i){this.lastParams={},e.call(this,t,n,i),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return e.prototype.append=function(e,t){this.$loadingMore.remove(),this.loading=!1,e.call(this,t),this.showLoadingMore(t)&&(this.$results.append(this.$loadingMore),this.loadMoreIfNeeded())},e.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),t.on("query",function(e){i.lastParams=e,i.loading=!0}),t.on("query:append",function(e){i.lastParams=e,i.loading=!0}),this.$results.on("scroll",this.loadMoreIfNeeded.bind(this))},e.prototype.loadMoreIfNeeded=function(){var e=n.contains(document.documentElement,this.$loadingMore[0]);if(!this.loading&&e){var t=this.$results.offset().top+this.$results.outerHeight(!1);this.$loadingMore.offset().top+this.$loadingMore.outerHeight(!1)<=t+50&&this.loadMore()}},e.prototype.loadMore=function(){this.loading=!0;var e=n.extend({},{page:1},this.lastParams);e.page++,this.trigger("query:append",e)},e.prototype.showLoadingMore=function(e,t){return t.pagination&&t.pagination.more},e.prototype.createLoadingMore=function(){var e=n('<li class="select2-results__option select2-results__option--load-more"role="option" aria-disabled="true"></li>'),t=this.options.get("translations").get("loadingMore");return e.html(t(this.lastParams)),e},e}),e.define("select2/dropdown/attachBody",["jquery","../utils"],function(f,a){function e(e,t,n){this.$dropdownParent=f(n.get("dropdownParent")||document.body),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),t.on("open",function(){i._showDropdown(),i._attachPositioningHandler(t),i._bindContainerResultHandlers(t)}),t.on("close",function(){i._hideDropdown(),i._detachPositioningHandler(t)}),this.$dropdownContainer.on("mousedown",function(e){e.stopPropagation()})},e.prototype.destroy=function(e){e.call(this),this.$dropdownContainer.remove()},e.prototype.position=function(e,t,n){t.attr("class",n.attr("class")),t.removeClass("select2"),t.addClass("select2-container--open"),t.css({position:"absolute",top:-999999}),this.$container=n},e.prototype.render=function(e){var t=f("<span></span>"),n=e.call(this);return t.append(n),this.$dropdownContainer=t},e.prototype._hideDropdown=function(e){this.$dropdownContainer.detach()},e.prototype._bindContainerResultHandlers=function(e,t){if(!this._containerResultsHandlersBound){var n=this;t.on("results:all",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("results:append",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("results:message",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("select",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("unselect",function(){n._positionDropdown(),n._resizeDropdown()}),this._containerResultsHandlersBound=!0}},e.prototype._attachPositioningHandler=function(e,t){var n=this,i="scroll.select2."+t.id,r="resize.select2."+t.id,o="orientationchange.select2."+t.id,s=this.$container.parents().filter(a.hasScroll);s.each(function(){a.StoreData(this,"select2-scroll-position",{x:f(this).scrollLeft(),y:f(this).scrollTop()})}),s.on(i,function(e){var t=a.GetData(this,"select2-scroll-position");f(this).scrollTop(t.y)}),f(window).on(i+" "+r+" "+o,function(e){n._positionDropdown(),n._resizeDropdown()})},e.prototype._detachPositioningHandler=function(e,t){var n="scroll.select2."+t.id,i="resize.select2."+t.id,r="orientationchange.select2."+t.id;this.$container.parents().filter(a.hasScroll).off(n),f(window).off(n+" "+i+" "+r)},e.prototype._positionDropdown=function(){var e=f(window),t=this.$dropdown.hasClass("select2-dropdown--above"),n=this.$dropdown.hasClass("select2-dropdown--below"),i=null,r=this.$container.offset();r.bottom=r.top+this.$container.outerHeight(!1);var o={height:this.$container.outerHeight(!1)};o.top=r.top,o.bottom=r.top+o.height;var s=this.$dropdown.outerHeight(!1),a=e.scrollTop(),l=e.scrollTop()+e.height(),c=a<r.top-s,u=l>r.bottom+s,d={left:r.left,top:o.bottom},p=this.$dropdownParent;"static"===p.css("position")&&(p=p.offsetParent());var h={top:0,left:0};(f.contains(document.body,p[0])||p[0].isConnected)&&(h=p.offset()),d.top-=h.top,d.left-=h.left,t||n||(i="below"),u||!c||t?!c&&u&&t&&(i="below"):i="above",("above"==i||t&&"below"!==i)&&(d.top=o.top-h.top-s),null!=i&&(this.$dropdown.removeClass("select2-dropdown--below select2-dropdown--above").addClass("select2-dropdown--"+i),this.$container.removeClass("select2-container--below select2-container--above").addClass("select2-container--"+i)),this.$dropdownContainer.css(d)},e.prototype._resizeDropdown=function(){var e={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(e.minWidth=e.width,e.position="relative",e.width="auto"),this.$dropdown.css(e)},e.prototype._showDropdown=function(e){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},e}),e.define("select2/dropdown/minimumResultsForSearch",[],function(){function e(e,t,n,i){this.minimumResultsForSearch=n.get("minimumResultsForSearch"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=1/0),e.call(this,t,n,i)}return e.prototype.showSearch=function(e,t){return!(function e(t){for(var n=0,i=0;i<t.length;i++){var r=t[i];r.children?n+=e(r.children):n++}return n}(t.data.results)<this.minimumResultsForSearch)&&e.call(this,t)},e}),e.define("select2/dropdown/selectOnClose",["../utils"],function(o){function e(){}return e.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),t.on("close",function(e){i._handleSelectOnClose(e)})},e.prototype._handleSelectOnClose=function(e,t){if(t&&null!=t.originalSelect2Event){var n=t.originalSelect2Event;if("select"===n._type||"unselect"===n._type)return}var i=this.getHighlightedResults();if(!(i.length<1)){var r=o.GetData(i[0],"data");null!=r.element&&r.element.selected||null==r.element&&r.selected||this.trigger("select",{data:r})}},e}),e.define("select2/dropdown/closeOnSelect",[],function(){function e(){}return e.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),t.on("select",function(e){i._selectTriggered(e)}),t.on("unselect",function(e){i._selectTriggered(e)})},e.prototype._selectTriggered=function(e,t){var n=t.originalEvent;n&&(n.ctrlKey||n.metaKey)||this.trigger("close",{originalEvent:n,originalSelect2Event:t})},e}),e.define("select2/i18n/en",[],function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Please delete "+t+" character";return 1!=t&&(n+="s"),n},inputTooShort:function(e){return"Please enter "+(e.minimum-e.input.length)+" or more characters"},loadingMore:function(){return"Loading more results…"},maximumSelected:function(e){var t="You can only select "+e.maximum+" item";return 1!=e.maximum&&(t+="s"),t},noResults:function(){return"No results found"},searching:function(){return"Searching…"},removeAllItems:function(){return"Remove all items"}}}),e.define("select2/defaults",["jquery","require","./results","./selection/single","./selection/multiple","./selection/placeholder","./selection/allowClear","./selection/search","./selection/eventRelay","./utils","./translation","./diacritics","./data/select","./data/array","./data/ajax","./data/tags","./data/tokenizer","./data/minimumInputLength","./data/maximumInputLength","./data/maximumSelectionLength","./dropdown","./dropdown/search","./dropdown/hidePlaceholder","./dropdown/infiniteScroll","./dropdown/attachBody","./dropdown/minimumResultsForSearch","./dropdown/selectOnClose","./dropdown/closeOnSelect","./i18n/en"],function(c,u,d,p,h,f,g,m,v,y,s,t,_,w,$,b,A,x,D,S,C,E,O,T,q,j,L,I,e){function n(){this.reset()}return n.prototype.apply=function(e){if(null==(e=c.extend(!0,{},this.defaults,e)).dataAdapter){if(null!=e.ajax?e.dataAdapter=$:null!=e.data?e.dataAdapter=w:e.dataAdapter=_,0<e.minimumInputLength&&(e.dataAdapter=y.Decorate(e.dataAdapter,x)),0<e.maximumInputLength&&(e.dataAdapter=y.Decorate(e.dataAdapter,D)),0<e.maximumSelectionLength&&(e.dataAdapter=y.Decorate(e.dataAdapter,S)),e.tags&&(e.dataAdapter=y.Decorate(e.dataAdapter,b)),null==e.tokenSeparators&&null==e.tokenizer||(e.dataAdapter=y.Decorate(e.dataAdapter,A)),null!=e.query){var t=u(e.amdBase+"compat/query");e.dataAdapter=y.Decorate(e.dataAdapter,t)}if(null!=e.initSelection){var n=u(e.amdBase+"compat/initSelection");e.dataAdapter=y.Decorate(e.dataAdapter,n)}}if(null==e.resultsAdapter&&(e.resultsAdapter=d,null!=e.ajax&&(e.resultsAdapter=y.Decorate(e.resultsAdapter,T)),null!=e.placeholder&&(e.resultsAdapter=y.Decorate(e.resultsAdapter,O)),e.selectOnClose&&(e.resultsAdapter=y.Decorate(e.resultsAdapter,L))),null==e.dropdownAdapter){if(e.multiple)e.dropdownAdapter=C;else{var i=y.Decorate(C,E);e.dropdownAdapter=i}if(0!==e.minimumResultsForSearch&&(e.dropdownAdapter=y.Decorate(e.dropdownAdapter,j)),e.closeOnSelect&&(e.dropdownAdapter=y.Decorate(e.dropdownAdapter,I)),null!=e.dropdownCssClass||null!=e.dropdownCss||null!=e.adaptDropdownCssClass){var r=u(e.amdBase+"compat/dropdownCss");e.dropdownAdapter=y.Decorate(e.dropdownAdapter,r)}e.dropdownAdapter=y.Decorate(e.dropdownAdapter,q)}if(null==e.selectionAdapter){if(e.multiple?e.selectionAdapter=h:e.selectionAdapter=p,null!=e.placeholder&&(e.selectionAdapter=y.Decorate(e.selectionAdapter,f)),e.allowClear&&(e.selectionAdapter=y.Decorate(e.selectionAdapter,g)),e.multiple&&(e.selectionAdapter=y.Decorate(e.selectionAdapter,m)),null!=e.containerCssClass||null!=e.containerCss||null!=e.adaptContainerCssClass){var o=u(e.amdBase+"compat/containerCss");e.selectionAdapter=y.Decorate(e.selectionAdapter,o)}e.selectionAdapter=y.Decorate(e.selectionAdapter,v)}e.language=this._resolveLanguage(e.language),e.language.push("en");for(var s=[],a=0;a<e.language.length;a++){var l=e.language[a];-1===s.indexOf(l)&&s.push(l)}return e.language=s,e.translations=this._processTranslations(e.language,e.debug),e},n.prototype.reset=function(){function a(e){return e.replace(/[^\u0000-\u007E]/g,function(e){return t[e]||e})}this.defaults={amdBase:"./",amdLanguageBase:"./i18n/",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:y.escapeMarkup,language:{},matcher:function e(t,n){if(""===c.trim(t.term))return n;if(n.children&&0<n.children.length){for(var i=c.extend(!0,{},n),r=n.children.length-1;0<=r;r--)null==e(t,n.children[r])&&i.children.splice(r,1);return 0<i.children.length?i:e(t,i)}var o=a(n.text).toUpperCase(),s=a(t.term).toUpperCase();return-1<o.indexOf(s)?n:null},minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,scrollAfterSelect:!1,sorter:function(e){return e},templateResult:function(e){return e.text},templateSelection:function(e){return e.text},theme:"default",width:"resolve"}},n.prototype.applyFromElement=function(e,t){var n=e.language,i=this.defaults.language,r=t.prop("lang"),o=t.closest("[lang]").prop("lang"),s=Array.prototype.concat.call(this._resolveLanguage(r),this._resolveLanguage(n),this._resolveLanguage(i),this._resolveLanguage(o));return e.language=s,e},n.prototype._resolveLanguage=function(e){if(!e)return[];if(c.isEmptyObject(e))return[];if(c.isPlainObject(e))return[e];var t;t=c.isArray(e)?e:[e];for(var n=[],i=0;i<t.length;i++)if(n.push(t[i]),"string"==typeof t[i]&&0<t[i].indexOf("-")){var r=t[i].split("-")[0];n.push(r)}return n},n.prototype._processTranslations=function(e,t){for(var n=new s,i=0;i<e.length;i++){var r=new s,o=e[i];if("string"==typeof o)try{r=s.loadPath(o)}catch(e){try{o=this.defaults.amdLanguageBase+o,r=s.loadPath(o)}catch(e){t&&window.console&&console.warn&&console.warn('Select2: The language file for "'+o+'" could not be automatically loaded. A fallback will be used instead.')}}else r=c.isPlainObject(o)?new s(o):o;n.extend(r)}return n},n.prototype.set=function(e,t){var n={};n[c.camelCase(e)]=t;var i=y._convertData(n);c.extend(!0,this.defaults,i)},new n}),e.define("select2/options",["require","jquery","./defaults","./utils"],function(i,d,r,p){function e(e,t){if(this.options=e,null!=t&&this.fromElement(t),null!=t&&(this.options=r.applyFromElement(this.options,t)),this.options=r.apply(this.options),t&&t.is("input")){var n=i(this.get("amdBase")+"compat/inputData");this.options.dataAdapter=p.Decorate(this.options.dataAdapter,n)}}return e.prototype.fromElement=function(e){var t=["select2"];null==this.options.multiple&&(this.options.multiple=e.prop("multiple")),null==this.options.disabled&&(this.options.disabled=e.prop("disabled")),null==this.options.dir&&(e.prop("dir")?this.options.dir=e.prop("dir"):e.closest("[dir]").prop("dir")?this.options.dir=e.closest("[dir]").prop("dir"):this.options.dir="ltr"),e.prop("disabled",this.options.disabled),e.prop("multiple",this.options.multiple),p.GetData(e[0],"select2Tags")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags="true"` attributes and will be removed in future versions of Select2.'),p.StoreData(e[0],"data",p.GetData(e[0],"select2Tags")),p.StoreData(e[0],"tags",!0)),p.GetData(e[0],"ajaxUrl")&&(this.options.debug&&window.console&&console.warn&&console.warn("Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2."),e.attr("ajax--url",p.GetData(e[0],"ajaxUrl")),p.StoreData(e[0],"ajax-Url",p.GetData(e[0],"ajaxUrl")));var n={};function i(e,t){return t.toUpperCase()}for(var r=0;r<e[0].attributes.length;r++){var o=e[0].attributes[r].name,s="data-";if(o.substr(0,s.length)==s){var a=o.substring(s.length),l=p.GetData(e[0],a);n[a.replace(/-([a-z])/g,i)]=l}}d.fn.jquery&&"1."==d.fn.jquery.substr(0,2)&&e[0].dataset&&(n=d.extend(!0,{},e[0].dataset,n));var c=d.extend(!0,{},p.GetData(e[0]),n);for(var u in c=p._convertData(c))-1<d.inArray(u,t)||(d.isPlainObject(this.options[u])?d.extend(this.options[u],c[u]):this.options[u]=c[u]);return this},e.prototype.get=function(e){return this.options[e]},e.prototype.set=function(e,t){this.options[e]=t},e}),e.define("select2/core",["jquery","./options","./utils","./keys"],function(o,c,u,i){var d=function(e,t){null!=u.GetData(e[0],"select2")&&u.GetData(e[0],"select2").destroy(),this.$element=e,this.id=this._generateId(e),t=t||{},this.options=new c(t,e),d.__super__.constructor.call(this);var n=e.attr("tabindex")||0;u.StoreData(e[0],"old-tabindex",n),e.attr("tabindex","-1");var i=this.options.get("dataAdapter");this.dataAdapter=new i(e,this.options);var r=this.render();this._placeContainer(r);var o=this.options.get("selectionAdapter");this.selection=new o(e,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,r);var s=this.options.get("dropdownAdapter");this.dropdown=new s(e,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,r);var a=this.options.get("resultsAdapter");this.results=new a(e,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var l=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(e){l.trigger("selection:update",{data:e})}),e.addClass("select2-hidden-accessible"),e.attr("aria-hidden","true"),this._syncAttributes(),u.StoreData(e[0],"select2",this),e.data("select2",this)};return u.Extend(d,u.Observable),d.prototype._generateId=function(e){return"select2-"+(null!=e.attr("id")?e.attr("id"):null!=e.attr("name")?e.attr("name")+"-"+u.generateChars(2):u.generateChars(4)).replace(/(:|\.|\[|\]|,)/g,"")},d.prototype._placeContainer=function(e){e.insertAfter(this.$element);var t=this._resolveWidth(this.$element,this.options.get("width"));null!=t&&e.css("width",t)},d.prototype._resolveWidth=function(e,t){var n=/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if("resolve"==t){var i=this._resolveWidth(e,"style");return null!=i?i:this._resolveWidth(e,"element")}if("element"==t){var r=e.outerWidth(!1);return r<=0?"auto":r+"px"}if("style"!=t)return"computedstyle"!=t?t:window.getComputedStyle(e[0]).width;var o=e.attr("style");if("string"!=typeof o)return null;for(var s=o.split(";"),a=0,l=s.length;a<l;a+=1){var c=s[a].replace(/\s/g,"").match(n);if(null!==c&&1<=c.length)return c[1]}return null},d.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},d.prototype._registerDomEvents=function(){var t=this;this.$element.on("change.select2",function(){t.dataAdapter.current(function(e){t.trigger("selection:update",{data:e})})}),this.$element.on("focus.select2",function(e){t.trigger("focus",e)}),this._syncA=u.bind(this._syncAttributes,this),this._syncS=u.bind(this._syncSubtree,this),this.$element[0].attachEvent&&this.$element[0].attachEvent("onpropertychange",this._syncA);var e=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;null!=e?(this._observer=new e(function(e){t._syncA(),t._syncS(null,e)}),this._observer.observe(this.$element[0],{attributes:!0,childList:!0,subtree:!1})):this.$element[0].addEventListener&&(this.$element[0].addEventListener("DOMAttrModified",t._syncA,!1),this.$element[0].addEventListener("DOMNodeInserted",t._syncS,!1),this.$element[0].addEventListener("DOMNodeRemoved",t._syncS,!1))},d.prototype._registerDataEvents=function(){var n=this;this.dataAdapter.on("*",function(e,t){n.trigger(e,t)})},d.prototype._registerSelectionEvents=function(){var n=this,i=["toggle","focus"];this.selection.on("toggle",function(){n.toggleDropdown()}),this.selection.on("focus",function(e){n.focus(e)}),this.selection.on("*",function(e,t){-1===o.inArray(e,i)&&n.trigger(e,t)})},d.prototype._registerDropdownEvents=function(){var n=this;this.dropdown.on("*",function(e,t){n.trigger(e,t)})},d.prototype._registerResultsEvents=function(){var n=this;this.results.on("*",function(e,t){n.trigger(e,t)})},d.prototype._registerEvents=function(){var n=this;this.on("open",function(){n.$container.addClass("select2-container--open")}),this.on("close",function(){n.$container.removeClass("select2-container--open")}),this.on("enable",function(){n.$container.removeClass("select2-container--disabled")}),this.on("disable",function(){n.$container.addClass("select2-container--disabled")}),this.on("blur",function(){n.$container.removeClass("select2-container--focus")}),this.on("query",function(t){n.isOpen()||n.trigger("open",{}),this.dataAdapter.query(t,function(e){n.trigger("results:all",{data:e,query:t})})}),this.on("query:append",function(t){this.dataAdapter.query(t,function(e){n.trigger("results:append",{data:e,query:t})})}),this.on("keypress",function(e){var t=e.which;n.isOpen()?t===i.ESC||t===i.TAB||t===i.UP&&e.altKey?(n.close(e),e.preventDefault()):t===i.ENTER?(n.trigger("results:select",{}),e.preventDefault()):t===i.SPACE&&e.ctrlKey?(n.trigger("results:toggle",{}),e.preventDefault()):t===i.UP?(n.trigger("results:previous",{}),e.preventDefault()):t===i.DOWN&&(n.trigger("results:next",{}),e.preventDefault()):(t===i.ENTER||t===i.SPACE||t===i.DOWN&&e.altKey)&&(n.open(),e.preventDefault())})},d.prototype._syncAttributes=function(){this.options.set("disabled",this.$element.prop("disabled")),this.isDisabled()?(this.isOpen()&&this.close(),this.trigger("disable",{})):this.trigger("enable",{})},d.prototype._isChangeMutation=function(e,t){var n=!1,i=this;if(!e||!e.target||"OPTION"===e.target.nodeName||"OPTGROUP"===e.target.nodeName){if(t)if(t.addedNodes&&0<t.addedNodes.length)for(var r=0;r<t.addedNodes.length;r++){t.addedNodes[r].selected&&(n=!0)}else t.removedNodes&&0<t.removedNodes.length?n=!0:o.isArray(t)&&o.each(t,function(e,t){if(i._isChangeMutation(e,t))return!(n=!0)});else n=!0;return n}},d.prototype._syncSubtree=function(e,t){var n=this._isChangeMutation(e,t),i=this;n&&this.dataAdapter.current(function(e){i.trigger("selection:update",{data:e})})},d.prototype.trigger=function(e,t){var n=d.__super__.trigger,i={open:"opening",close:"closing",select:"selecting",unselect:"unselecting",clear:"clearing"};if(void 0===t&&(t={}),e in i){var r=i[e],o={prevented:!1,name:e,args:t};if(n.call(this,r,o),o.prevented)return void(t.prevented=!0)}n.call(this,e,t)},d.prototype.toggleDropdown=function(){this.isDisabled()||(this.isOpen()?this.close():this.open())},d.prototype.open=function(){this.isOpen()||this.isDisabled()||this.trigger("query",{})},d.prototype.close=function(e){this.isOpen()&&this.trigger("close",{originalEvent:e})},d.prototype.isEnabled=function(){return!this.isDisabled()},d.prototype.isDisabled=function(){return this.options.get("disabled")},d.prototype.isOpen=function(){return this.$container.hasClass("select2-container--open")},d.prototype.hasFocus=function(){return this.$container.hasClass("select2-container--focus")},d.prototype.focus=function(e){this.hasFocus()||(this.$container.addClass("select2-container--focus"),this.trigger("focus",{}))},d.prototype.enable=function(e){this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("enable")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop("disabled") instead.'),null!=e&&0!==e.length||(e=[!0]);var t=!e[0];this.$element.prop("disabled",t)},d.prototype.data=function(){this.options.get("debug")&&0<arguments.length&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2("data")`. You should consider setting the value instead using `$element.val()`.');var t=[];return this.dataAdapter.current(function(e){t=e}),t},d.prototype.val=function(e){if(this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("val")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),null==e||0===e.length)return this.$element.val();var t=e[0];o.isArray(t)&&(t=o.map(t,function(e){return e.toString()})),this.$element.val(t).trigger("input").trigger("change")},d.prototype.destroy=function(){this.$container.remove(),this.$element[0].detachEvent&&this.$element[0].detachEvent("onpropertychange",this._syncA),null!=this._observer?(this._observer.disconnect(),this._observer=null):this.$element[0].removeEventListener&&(this.$element[0].removeEventListener("DOMAttrModified",this._syncA,!1),this.$element[0].removeEventListener("DOMNodeInserted",this._syncS,!1),this.$element[0].removeEventListener("DOMNodeRemoved",this._syncS,!1)),this._syncA=null,this._syncS=null,this.$element.off(".select2"),this.$element.attr("tabindex",u.GetData(this.$element[0],"old-tabindex")),this.$element.removeClass("select2-hidden-accessible"),this.$element.attr("aria-hidden","false"),u.RemoveData(this.$element[0]),this.$element.removeData("select2"),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null},d.prototype.render=function(){var e=o('<span class="select2 select2-container"><span class="selection"></span><span class="dropdown-wrapper" aria-hidden="true"></span></span>');return e.attr("dir",this.options.get("dir")),this.$container=e,this.$container.addClass("select2-container--"+this.options.get("theme")),u.StoreData(e[0],"element",this.$element),e},d}),e.define("select2/compat/utils",["jquery"],function(s){return{syncCssClasses:function(e,t,n){var i,r,o=[];(i=s.trim(e.attr("class")))&&s((i=""+i).split(/\s+/)).each(function(){0===this.indexOf("select2-")&&o.push(this)}),(i=s.trim(t.attr("class")))&&s((i=""+i).split(/\s+/)).each(function(){0!==this.indexOf("select2-")&&null!=(r=n(this))&&o.push(r)}),e.attr("class",o.join(" "))}}}),e.define("select2/compat/containerCss",["jquery","./utils"],function(s,a){function l(e){return null}function e(){}return e.prototype.render=function(e){var t=e.call(this),n=this.options.get("containerCssClass")||"";s.isFunction(n)&&(n=n(this.$element));var i=this.options.get("adaptContainerCssClass");if(i=i||l,-1!==n.indexOf(":all:")){n=n.replace(":all:","");var r=i;i=function(e){var t=r(e);return null!=t?t+" "+e:e}}var o=this.options.get("containerCss")||{};return s.isFunction(o)&&(o=o(this.$element)),a.syncCssClasses(t,this.$element,i),t.css(o),t.addClass(n),t},e}),e.define("select2/compat/dropdownCss",["jquery","./utils"],function(s,a){function l(e){return null}function e(){}return e.prototype.render=function(e){var t=e.call(this),n=this.options.get("dropdownCssClass")||"";s.isFunction(n)&&(n=n(this.$element));var i=this.options.get("adaptDropdownCssClass");if(i=i||l,-1!==n.indexOf(":all:")){n=n.replace(":all:","");var r=i;i=function(e){var t=r(e);return null!=t?t+" "+e:e}}var o=this.options.get("dropdownCss")||{};return s.isFunction(o)&&(o=o(this.$element)),a.syncCssClasses(t,this.$element,i),t.css(o),t.addClass(n),t},e}),e.define("select2/compat/initSelection",["jquery"],function(i){function e(e,t,n){n.get("debug")&&window.console&&console.warn&&console.warn("Select2: The `initSelection` option has been deprecated in favor of a custom data adapter that overrides the `current` method. This method is now called multiple times instead of a single time when the instance is initialized. Support will be removed for the `initSelection` option in future versions of Select2"),this.initSelection=n.get("initSelection"),this._isInitialized=!1,e.call(this,t,n)}return e.prototype.current=function(e,t){var n=this;this._isInitialized?e.call(this,t):this.initSelection.call(null,this.$element,function(e){n._isInitialized=!0,i.isArray(e)||(e=[e]),t(e)})},e}),e.define("select2/compat/inputData",["jquery","../utils"],function(s,i){function e(e,t,n){this._currentData=[],this._valueSeparator=n.get("valueSeparator")||",","hidden"===t.prop("type")&&n.get("debug")&&console&&console.warn&&console.warn("Select2: Using a hidden input with Select2 is no longer supported and may stop working in the future. It is recommended to use a `<select>` element instead."),e.call(this,t,n)}return e.prototype.current=function(e,t){function i(e,t){var n=[];return e.selected||-1!==s.inArray(e.id,t)?(e.selected=!0,n.push(e)):e.selected=!1,e.children&&n.push.apply(n,i(e.children,t)),n}for(var n=[],r=0;r<this._currentData.length;r++){var o=this._currentData[r];n.push.apply(n,i(o,this.$element.val().split(this._valueSeparator)))}t(n)},e.prototype.select=function(e,t){if(this.options.get("multiple")){var n=this.$element.val();n+=this._valueSeparator+t.id,this.$element.val(n),this.$element.trigger("input").trigger("change")}else this.current(function(e){s.map(e,function(e){e.selected=!1})}),this.$element.val(t.id),this.$element.trigger("input").trigger("change")},e.prototype.unselect=function(e,r){var o=this;r.selected=!1,this.current(function(e){for(var t=[],n=0;n<e.length;n++){var i=e[n];r.id!=i.id&&t.push(i.id)}o.$element.val(t.join(o._valueSeparator)),o.$element.trigger("input").trigger("change")})},e.prototype.query=function(e,t,n){for(var i=[],r=0;r<this._currentData.length;r++){var o=this._currentData[r],s=this.matches(t,o);null!==s&&i.push(s)}n({results:i})},e.prototype.addOptions=function(e,t){var n=s.map(t,function(e){return i.GetData(e[0],"data")});this._currentData.push.apply(this._currentData,n)},e}),e.define("select2/compat/matcher",["jquery"],function(s){return function(o){return function(e,t){var n=s.extend(!0,{},t);if(null==e.term||""===s.trim(e.term))return n;if(t.children){for(var i=t.children.length-1;0<=i;i--){var r=t.children[i];o(e.term,r.text,r)||n.children.splice(i,1)}if(0<n.children.length)return n}return o(e.term,t.text,t)?n:null}}}),e.define("select2/compat/query",[],function(){function e(e,t,n){n.get("debug")&&window.console&&console.warn&&console.warn("Select2: The `query` option has been deprecated in favor of a custom data adapter that overrides the `query` method. Support will be removed for the `query` option in future versions of Select2."),e.call(this,t,n)}return e.prototype.query=function(e,t,n){t.callback=n,this.options.get("query").call(null,t)},e}),e.define("select2/dropdown/attachContainer",[],function(){function e(e,t,n){e.call(this,t,n)}return e.prototype.position=function(e,t,n){n.find(".dropdown-wrapper").append(t),t.addClass("select2-dropdown--below"),n.addClass("select2-container--below")},e}),e.define("select2/dropdown/stopPropagation",[],function(){function e(){}return e.prototype.bind=function(e,t,n){e.call(this,t,n);this.$dropdown.on(["blur","change","click","dblclick","focus","focusin","focusout","input","keydown","keyup","keypress","mousedown","mouseenter","mouseleave","mousemove","mouseover","mouseup","search","touchend","touchstart"].join(" "),function(e){e.stopPropagation()})},e}),e.define("select2/selection/stopPropagation",[],function(){function e(){}return e.prototype.bind=function(e,t,n){e.call(this,t,n);this.$selection.on(["blur","change","click","dblclick","focus","focusin","focusout","input","keydown","keyup","keypress","mousedown","mouseenter","mouseleave","mousemove","mouseover","mouseup","search","touchend","touchstart"].join(" "),function(e){e.stopPropagation()})},e}),l=function(p){var h,f,e=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],t="onwheel"in document||9<=document.documentMode?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],g=Array.prototype.slice;if(p.event.fixHooks)for(var n=e.length;n;)p.event.fixHooks[e[--n]]=p.event.mouseHooks;var m=p.event.special.mousewheel={version:"3.1.12",setup:function(){if(this.addEventListener)for(var e=t.length;e;)this.addEventListener(t[--e],i,!1);else this.onmousewheel=i;p.data(this,"mousewheel-line-height",m.getLineHeight(this)),p.data(this,"mousewheel-page-height",m.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var e=t.length;e;)this.removeEventListener(t[--e],i,!1);else this.onmousewheel=null;p.removeData(this,"mousewheel-line-height"),p.removeData(this,"mousewheel-page-height")},getLineHeight:function(e){var t=p(e),n=t["offsetParent"in p.fn?"offsetParent":"parent"]();return n.length||(n=p("body")),parseInt(n.css("fontSize"),10)||parseInt(t.css("fontSize"),10)||16},getPageHeight:function(e){return p(e).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};function i(e){var t,n=e||window.event,i=g.call(arguments,1),r=0,o=0,s=0,a=0,l=0;if((e=p.event.fix(n)).type="mousewheel","detail"in n&&(s=-1*n.detail),"wheelDelta"in n&&(s=n.wheelDelta),"wheelDeltaY"in n&&(s=n.wheelDeltaY),"wheelDeltaX"in n&&(o=-1*n.wheelDeltaX),"axis"in n&&n.axis===n.HORIZONTAL_AXIS&&(o=-1*s,s=0),r=0===s?o:s,"deltaY"in n&&(r=s=-1*n.deltaY),"deltaX"in n&&(o=n.deltaX,0===s&&(r=-1*o)),0!==s||0!==o){if(1===n.deltaMode){var c=p.data(this,"mousewheel-line-height");r*=c,s*=c,o*=c}else if(2===n.deltaMode){var u=p.data(this,"mousewheel-page-height");r*=u,s*=u,o*=u}if(t=Math.max(Math.abs(s),Math.abs(o)),(!f||t<f)&&y(n,f=t)&&(f/=40),y(n,t)&&(r/=40,o/=40,s/=40),r=Math[1<=r?"floor":"ceil"](r/f),o=Math[1<=o?"floor":"ceil"](o/f),s=Math[1<=s?"floor":"ceil"](s/f),m.settings.normalizeOffset&&this.getBoundingClientRect){var d=this.getBoundingClientRect();a=e.clientX-d.left,l=e.clientY-d.top}return e.deltaX=o,e.deltaY=s,e.deltaFactor=f,e.offsetX=a,e.offsetY=l,e.deltaMode=0,i.unshift(e,r,o,s),h&&clearTimeout(h),h=setTimeout(v,200),(p.event.dispatch||p.event.handle).apply(this,i)}}function v(){f=null}function y(e,t){return m.settings.adjustOldDeltas&&"mousewheel"===e.type&&t%120==0}p.fn.extend({mousewheel:function(e){return e?this.bind("mousewheel",e):this.trigger("mousewheel")},unmousewheel:function(e){return this.unbind("mousewheel",e)}})},"function"==typeof e.define&&e.define.amd?e.define("jquery-mousewheel",["jquery"],l):"object"==typeof exports?module.exports=l:l(d),e.define("jquery.select2",["jquery","jquery-mousewheel","./select2/core","./select2/defaults","./select2/utils"],function(r,e,o,t,s){if(null==r.fn.select2){var a=["open","close","destroy"];r.fn.select2=function(t){if("object"==typeof(t=t||{}))return this.each(function(){var e=r.extend(!0,{},t);new o(r(this),e)}),this;if("string"!=typeof t)throw new Error("Invalid arguments for Select2: "+t);var n,i=Array.prototype.slice.call(arguments,1);return this.each(function(){var e=s.GetData(this,"select2");null==e&&window.console&&console.error&&console.error("The select2('"+t+"') method was called on an element that is not using Select2."),n=e[t].apply(e,i)}),-1<r.inArray(t,a)?this:n}}return null==r.fn.select2.defaults&&(r.fn.select2.defaults=t),o}),{define:e.define,require:e.require}}(),t=e.require("jquery.select2");return d.fn.select2.amd=e,t});
js/vendor/{select2.js → select2-4.0.13/dist/js/select2.js} RENAMED
File without changes
js/vendor/{select2.min.js → select2-4.0.13/dist/js/select2.min.js} RENAMED
File without changes
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: pixelgrade, vlad.olaru, babbardel, razvanonofrei, gorby31
3
  Tags: customizer, css, editor, gutenberg, live, preview, customizer
4
  Requires at least: 4.9.9
5
  Tested up to: 5.4.1
6
- Stable tag: 2.7.2
7
  Requires PHP: 5.4.0
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
@@ -28,6 +28,11 @@ This plugin is **primarily intended** to be used together with [Pixelgrade theme
28
 
29
  == Changelog ==
30
 
 
 
 
 
 
31
  = 2.7.2 =
32
  * Better handle legacy font values upon upgrade.
33
 
3
  Tags: customizer, css, editor, gutenberg, live, preview, customizer
4
  Requires at least: 4.9.9
5
  Tested up to: 5.4.1
6
+ Stable tag: 2.7.3
7
  Requires PHP: 5.4.0
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
28
 
29
  == Changelog ==
30
 
31
+ = 2.7.3 =
32
+ * Fixes for some edge situations when fonts would not apply on the frontend, after some time. Mainly related to cache issues.
33
+ * Fix for missing font fields CSS properties.
34
+ * Fix compatibility with the The Events Calendar plugin.
35
+
36
  = 2.7.2 =
37
  * Better handle legacy font values upon upgrade.
38