MainWP Child Reports - Version 2.1

Version Description

  • 12-14-2022 =
  • Updated: PHP 8.1 compatibility improvements
  • Preventative: Multiple security enhancements
Download this release

Release Info

Developer mainwp
Plugin Icon 128x128 MainWP Child Reports
Version 2.1
Comparing to
See all releases

Code changes from version 2.0.8 to 2.1

Files changed (100) hide show
  1. classes/class-admin.php +149 -259
  2. classes/class-alert-trigger.php +0 -97
  3. classes/class-alert-type.php +0 -80
  4. classes/class-alert.php +0 -352
  5. classes/class-alerts-list.php +0 -361
  6. classes/class-alerts.php +0 -834
  7. classes/class-db.php +0 -8
  8. classes/class-filter-input.php +55 -54
  9. classes/class-install.php +1 -1
  10. classes/class-live-update.php +8 -5
  11. classes/class-network.php +1 -2
  12. classes/class-plugin.php +1 -12
  13. classes/class-settings.php +16 -25
  14. connectors/class-connector-installer.php +5 -0
  15. connectors/class-connector-mainwp-sucuri.php +1 -1
  16. connectors/class-connector-widgets.php +7 -4
  17. includes/db-updates.php +0 -419
  18. includes/functions.php +5 -19
  19. mainwp-child-reports.php +1 -1
  20. readme.txt +6 -2
  21. ui/css/admin.css +0 -169
  22. ui/css/admin.min.css +0 -1
  23. ui/css/alerts-list.css +0 -142
  24. ui/css/alerts-list.min.css +0 -1
  25. ui/css/datepicker.min.css +0 -1
  26. ui/js/admin.js +1 -1
  27. ui/js/admin.min.js +0 -1
  28. ui/js/alerts-list.js +0 -15
  29. ui/js/alerts-list.min.js +0 -1
  30. ui/js/alerts.js +0 -309
  31. ui/js/alerts.min.js +0 -1
  32. ui/js/exclude.min.js +0 -1
  33. ui/js/global.min.js +0 -1
  34. ui/js/live-updates.min.js +0 -1
  35. ui/js/settings.min.js +0 -1
  36. ui/js/wpseo-admin.min.js +0 -1
  37. ui/lib/select2/css/select2.css +481 -484
  38. ui/lib/select2/css/select2.min.css +1 -1
  39. ui/lib/select2/js/i18n/af.js +3 -0
  40. ui/lib/select2/js/i18n/ar.js +3 -3
  41. ui/lib/select2/js/i18n/az.js +3 -3
  42. ui/lib/select2/js/i18n/bg.js +3 -3
  43. ui/lib/select2/js/i18n/bn.js +3 -0
  44. ui/lib/select2/js/i18n/bs.js +3 -0
  45. ui/lib/select2/js/i18n/ca.js +3 -3
  46. ui/lib/select2/js/i18n/cs.js +3 -3
  47. ui/lib/select2/js/i18n/da.js +3 -3
  48. ui/lib/select2/js/i18n/de.js +3 -3
  49. ui/lib/select2/js/i18n/dsb.js +3 -0
  50. ui/lib/select2/js/i18n/el.js +3 -3
  51. ui/lib/select2/js/i18n/en.js +3 -3
  52. ui/lib/select2/js/i18n/es.js +3 -3
  53. ui/lib/select2/js/i18n/et.js +3 -3
  54. ui/lib/select2/js/i18n/eu.js +3 -3
  55. ui/lib/select2/js/i18n/fa.js +3 -3
  56. ui/lib/select2/js/i18n/fi.js +3 -3
  57. ui/lib/select2/js/i18n/fr.js +3 -3
  58. ui/lib/select2/js/i18n/gl.js +3 -3
  59. ui/lib/select2/js/i18n/he.js +3 -3
  60. ui/lib/select2/js/i18n/hi.js +3 -3
  61. ui/lib/select2/js/i18n/hr.js +3 -3
  62. ui/lib/select2/js/i18n/hsb.js +3 -0
  63. ui/lib/select2/js/i18n/hu.js +3 -3
  64. ui/lib/select2/js/i18n/hy.js +3 -0
  65. ui/lib/select2/js/i18n/id.js +3 -3
  66. ui/lib/select2/js/i18n/is.js +3 -3
  67. ui/lib/select2/js/i18n/it.js +3 -3
  68. ui/lib/select2/js/i18n/ja.js +3 -3
  69. ui/lib/select2/js/i18n/ka.js +3 -0
  70. ui/lib/select2/js/i18n/km.js +3 -3
  71. ui/lib/select2/js/i18n/ko.js +3 -3
  72. ui/lib/select2/js/i18n/lt.js +3 -3
  73. ui/lib/select2/js/i18n/lv.js +3 -3
  74. ui/lib/select2/js/i18n/mk.js +3 -3
  75. ui/lib/select2/js/i18n/ms.js +3 -3
  76. ui/lib/select2/js/i18n/nb.js +3 -3
  77. ui/lib/select2/js/i18n/ne.js +3 -0
  78. ui/lib/select2/js/i18n/nl.js +3 -3
  79. ui/lib/select2/js/i18n/pl.js +3 -3
  80. ui/lib/select2/js/i18n/ps.js +3 -0
  81. ui/lib/select2/js/i18n/pt-BR.js +3 -3
  82. ui/lib/select2/js/i18n/pt.js +3 -3
  83. ui/lib/select2/js/i18n/ro.js +3 -3
  84. ui/lib/select2/js/i18n/ru.js +3 -3
  85. ui/lib/select2/js/i18n/sk.js +3 -3
  86. ui/lib/select2/js/i18n/sl.js +3 -0
  87. ui/lib/select2/js/i18n/sq.js +3 -0
  88. ui/lib/select2/js/i18n/sr-Cyrl.js +3 -3
  89. ui/lib/select2/js/i18n/sr.js +3 -3
  90. ui/lib/select2/js/i18n/sv.js +3 -3
  91. ui/lib/select2/js/i18n/th.js +3 -3
  92. ui/lib/select2/js/i18n/tk.js +3 -0
  93. ui/lib/select2/js/i18n/tr.js +3 -3
  94. ui/lib/select2/js/i18n/uk.js +3 -3
  95. ui/lib/select2/js/i18n/vi.js +3 -3
  96. ui/lib/select2/js/i18n/zh-CN.js +3 -3
  97. ui/lib/select2/js/i18n/zh-TW.js +3 -3
  98. ui/lib/select2/js/select2.full.js +6820 -6436
  99. ui/lib/select2/js/select2.full.min.js +2 -3
  100. ui/lib/select2/js/select2.js +641 -5725
classes/class-admin.php CHANGED
@@ -11,6 +11,7 @@ use \WP_Roles;
11
 
12
  /**
13
  * Class Admin.
 
14
  * @package WP_MainWP_Stream
15
  */
16
  class Admin {
@@ -62,8 +63,8 @@ class Admin {
62
 
63
  /**
64
  * Admin constructor.
65
- *
66
- * Run each time the class is called.
67
  *
68
  * @param Plugin $plugin The main Plugin class.
69
  */
@@ -78,8 +79,8 @@ class Admin {
78
  }
79
 
80
  // User and role caps.
81
- //add_filter( 'user_has_cap', array( $this, 'filter_user_caps' ), 10, 4 );
82
- //add_filter( 'role_has_cap', array( $this, 'filter_role_caps' ), 10, 3 );
83
 
84
  if ( is_multisite() && is_plugin_active_for_network( $this->plugin->locations['plugin'] ) && ! is_network_admin() ) {
85
  $options = (array) get_site_option( 'wp_mainwp_stream_network', array() );
@@ -90,7 +91,7 @@ class Admin {
90
 
91
  // Register settings page.
92
  if ( ! $this->disable_access ) {
93
- //add_action( 'admin_menu', array( $this, 'register_menu' ) );
94
  }
95
 
96
  // Admin notices.
@@ -101,16 +102,17 @@ class Admin {
101
  add_filter( 'admin_body_class', array( $this, 'admin_body_class' ) );
102
 
103
  // Plugin action links.
104
- add_filter(
105
- 'plugin_action_links', array(
106
- $this,
107
- 'plugin_action_links',
108
- ), 10, 2
109
- );
110
 
111
  // Load admin scripts and styles.
112
  add_action(
113
- 'admin_enqueue_scripts', array(
 
114
  $this,
115
  'admin_enqueue_scripts',
116
  )
@@ -119,27 +121,21 @@ class Admin {
119
 
120
  // Reset Streams database.
121
  add_action(
122
- 'wp_ajax_wp_mainwp_stream_reset', array(
 
123
  $this,
124
  'wp_ajax_reset',
125
  )
126
  );
127
-
128
  // Reset Streams database.
129
  add_action(
130
- 'wp_ajax_wp_mainwp_stream_try_repair', array(
 
131
  $this,
132
  'wp_ajax_try_repair',
133
  )
134
  );
135
-
136
- // Reset Streams database.
137
- // add_action(
138
- // 'wp_ajax_wp_mainwp_stream_convert', array(
139
- // $this,
140
- // 'wp_ajax_convert',
141
- // )
142
- // );
143
 
144
  // Uninstall Streams and Deactivate plugin.
145
  $uninstall = $this->plugin->db->driver->purge_storage( $this->plugin );
@@ -147,7 +143,8 @@ class Admin {
147
  // Auto purge setup.
148
  add_action( 'wp_loaded', array( $this, 'purge_schedule_setup' ) );
149
  add_action(
150
- 'wp_mainwp_stream_auto_purge', array(
 
151
  $this,
152
  'purge_scheduled_action',
153
  )
@@ -155,21 +152,22 @@ class Admin {
155
 
156
  // Ajax users list.
157
  add_action(
158
- 'wp_ajax_wp_mainwp_stream_filters', array(
 
159
  $this,
160
  'ajax_filters',
161
  )
162
- );
163
  }
164
 
165
  /**
166
  * Load admin classes.
167
  *
168
  * @action init
169
- *
170
- * @uses \WP_MainWP_Stream\Export
171
- * @uses \WP_MainWP_Stream\Live_Update
172
- * @uses \WP_MainWP_Stream\Network
173
  */
174
  public function init() {
175
  $this->network = new Network( $this->plugin );
@@ -231,9 +229,8 @@ class Admin {
231
  /**
232
  * WordPress core white list of html tags and attributes
233
  * that WordPress allows in posts used for sanitizing post_content.
234
- *
235
- * @global object $allowedposttags
236
  *
 
237
  */
238
  global $allowedposttags;
239
 
@@ -265,9 +262,9 @@ class Admin {
265
  * @action admin_menu
266
  *
267
  * @return void
268
- * @deprecated Disabled.
269
  */
270
- public function register_menu() {
271
 
272
  /**
273
  * Filter the main admin menu title.
@@ -337,7 +334,8 @@ class Admin {
337
 
338
  // Register the list table early, so it associates the column headers with 'Screen settings'.
339
  add_action(
340
- 'load-' . $this->screen_id['main'], array(
 
341
  $this,
342
  'register_list_table',
343
  )
@@ -355,7 +353,7 @@ class Admin {
355
  * @return void
356
  */
357
  public function admin_enqueue_scripts( $hook ) {
358
-
359
  wp_register_script( 'wp-mainwp-stream-select2', $this->plugin->locations['url'] . 'ui/lib/select2/js/select2.full.min.js', array( 'jquery' ), '3.5.2', true );
360
  wp_register_style( 'wp-mainwp-stream-select2', $this->plugin->locations['url'] . 'ui/lib/select2/css/select2.min.css', array(), '3.5.2' );
361
  wp_register_script( 'wp-mainwp-stream-timeago', $this->plugin->locations['url'] . 'ui/lib/timeago/jquery.timeago.js', array(), '1.4.1', true );
@@ -369,12 +367,11 @@ class Admin {
369
  wp_register_script( 'wp-mainwp-stream-timeago-locale', $this->plugin->locations['url'] . sprintf( $file_tmpl, 'en' ), array( 'wp-mainwp-stream-timeago' ), '1' );
370
  }
371
 
372
- $min = wp_mainwp_stream_min_suffix();
373
- wp_enqueue_style( 'wp-mainwp-stream-admin', $this->plugin->locations['url'] . 'ui/css/admin.' . $min . 'css', array(), $this->plugin->get_version() );
374
 
375
  $script_screens = array( 'plugins.php' );
376
-
377
- //if ( in_array( $hook, $this->screen_id, true ) || in_array( $hook, $script_screens, true ) ) {
378
  if ( $hook == 'settings_page_mainwp-reports-page' || $hook == 'settings_page_mainwp-reports-settings' || in_array( $hook, $script_screens, true ) ) {
379
  wp_enqueue_script( 'wp-mainwp-stream-select2' );
380
  wp_enqueue_style( 'wp-mainwp-stream-select2' );
@@ -383,22 +380,31 @@ class Admin {
383
  wp_enqueue_script( 'wp-mainwp-stream-timeago-locale' );
384
 
385
  wp_enqueue_script(
386
- 'wp-mainwp-stream-admin', $this->plugin->locations['url'] . 'ui/js/admin.' . $min . 'js', array(
 
 
387
  'jquery',
388
  'wp-mainwp-stream-select2',
389
- ), $this->plugin->get_version()
 
390
  );
391
  wp_enqueue_script(
392
- 'wp-mainwp-stream-admin-exclude', $this->plugin->locations['url'] . 'ui/js/exclude.' . $min . 'js', array(
 
 
393
  'jquery',
394
  'wp-mainwp-stream-select2',
395
- ), $this->plugin->get_version()
 
396
  );
397
  wp_enqueue_script(
398
- 'wp-mainwp-stream-live-updates', $this->plugin->locations['url'] . 'ui/js/live-updates.' . $min . 'js', array(
 
 
399
  'jquery',
400
  'heartbeat',
401
- ), $this->plugin->get_version()
 
402
  );
403
 
404
  wp_localize_script(
@@ -408,7 +414,7 @@ class Admin {
408
  'i18n' => array(
409
  'confirm_purge' => esc_html__( 'Are you sure you want to delete all Reports activity records from the database? This cannot be undone.', 'mainwp-child-reports' ),
410
  'confirm_defaults' => esc_html__( 'Are you sure you want to reset all site settings to default? This cannot be undone.', 'mainwp-child-reports' ),
411
- 'confirm_uninstall' => esc_html__( 'Are you sure you want to uninstall and deactivate Stream? This will delete all Reports tables from the database and cannot be undone.', 'mainwp-child-reports' ),
412
  ),
413
  'locale' => esc_js( $locale ),
414
  'gmt_offset' => get_option( 'gmt_offset' ),
@@ -446,7 +452,7 @@ class Admin {
446
  */
447
  $bulk_actions_threshold = apply_filters( 'wp_mainwp_stream_bulk_actions_threshold', 100 );
448
 
449
- wp_enqueue_script( 'wp-mainwp-stream-global', $this->plugin->locations['url'] . 'ui/js/global.' . $min . 'js', array( 'jquery' ), $this->plugin->get_version() );
450
  wp_localize_script(
451
  'wp-mainwp-stream-global',
452
  'wp_mainwp_stream_global',
@@ -467,16 +473,19 @@ class Admin {
467
  * Check whether or not the current admin screen belongs to Stream.
468
  *
469
  * @return bool TRUE|FALSE.
470
- *
471
- * @uses \WP_MainWP_Stream\Alerts::POST_TYPE
472
  */
473
  public function is_stream_screen() {
474
- if ( is_admin() && false !== strpos( wp_mainwp_stream_filter_input( INPUT_GET, 'page' ), $this->records_page_slug ) ) {
475
- return true;
476
  }
477
 
478
- $screen = get_current_screen();
479
- if ( is_admin() && Alerts::POST_TYPE === $screen->post_type ) {
 
 
 
 
 
480
  return true;
481
  }
482
 
@@ -522,8 +531,7 @@ class Admin {
522
  * @action admin_enqueue_scripts
523
  */
524
  public function admin_menu_css() {
525
- $min = wp_mainwp_stream_min_suffix();
526
- wp_register_style( 'wp-mainwp-stream-datepicker', $this->plugin->locations['url'] . 'ui/css/datepicker.' . $min . 'css', array(), $this->plugin->get_version() );
527
  wp_register_style( 'wp-mainwp-stream-icons', $this->plugin->locations['url'] . 'ui/stream-icons/style.css', array(), $this->plugin->get_version() );
528
 
529
  // Make sure we're working off a clean version
@@ -591,137 +599,6 @@ class Admin {
591
  \wp_add_inline_style( 'wp-admin', $css );
592
  }
593
 
594
- /**
595
- * Handle the convert AJAX request to convert logs.
596
- *
597
- * @return bool
598
- */
599
- // public function wp_ajax_convert() {
600
- // check_ajax_referer( 'stream_nonce_convert', 'wp_mainwp_stream_nonce_convert' );
601
- //
602
- // if ( ! current_user_can( $this->settings_cap ) ) {
603
- // wp_die(
604
- // esc_html__( "You don't have sufficient privileges to do this action.", 'mainwp-child-reports' )
605
- // );
606
- // }
607
- //
608
- // $this->convert_old_records();
609
- //
610
- // if ( defined( 'WP_MAINWP_STREAM_TESTS' ) && WP_MAINWP_STREAM_TESTS ) {
611
- // return true;
612
- // }
613
- //
614
- // wp_redirect(
615
- // add_query_arg(
616
- // array(
617
- // 'page' => is_network_admin() ? $this->network->network_settings_page_slug : $this->settings_page_slug,
618
- // 'message' => 'data_converted',
619
- // ),
620
- // self_admin_url( $this->admin_parent_page )
621
- // )
622
- // );
623
- //
624
- // exit;
625
- // }
626
-
627
- /**
628
- * Convert old records.
629
- *
630
- * @return mixed
631
- * @throws \Exception
632
- */
633
- private function convert_old_records() {
634
-
635
- /** @global object $wpdb WordPress database object. */
636
- global $wpdb;
637
-
638
- // Get only the author_meta values that are double-serialized.
639
- $wpdb->query( "RENAME TABLE {$wpdb->base_prefix}mainwp_stream TO {$wpdb->base_prefix}mainwp_stream_tmp, {$wpdb->base_prefix}mainwp_stream_context TO {$wpdb->base_prefix}mainwp_stream_context_tmp" );
640
-
641
- // $plugin = wp_mainwp_stream_get_instance();
642
- // $plugin->install->install( $current_version );
643
-
644
- $date = new DateTime( 'now', $timezone = new DateTimeZone( 'UTC' ) );
645
- $date->modify('-3 month');
646
- //$where = " AND `created` < STR_TO_DATE(" . $wpdb->prepare('%s', $date->format( 'Y-m-d H:i:s' )) . ", '%Y-%m-%d %H:%i:%s') ";
647
- $where = "";
648
- $orderby = ' ORDER BY ID DESC ';
649
-
650
- $starting_row = 0;
651
- $rows_per_round = 2;
652
-
653
- $stream_entries = $wpdb->get_results( "SELECT * FROM {$wpdb->base_prefix}mainwp_stream_tmp WHERE 1 = 1 " . $where . $orderby . $wpdb->prepare( " LIMIT %d, %d", $starting_row, $rows_per_round ) );
654
-
655
- while ( ! empty( $stream_entries ) ) {
656
- foreach ( $stream_entries as $entry ) {
657
- $context = $wpdb->get_row(
658
- $wpdb->prepare( "SELECT * FROM {$wpdb->base_prefix}mainwp_stream_context_tmp WHERE record_id = %s LIMIT 1", $entry->ID )
659
- );
660
-
661
- $new_entry = array(
662
- 'site_id' => $entry->site_id,
663
- 'blog_id' => $entry->blog_id,
664
- 'user_id' => $entry->author,
665
- 'user_role' => $entry->author_role,
666
- 'summary' => $entry->summary,
667
- 'created' => $entry->created,
668
- 'connector' => $context->connector,
669
- 'context' => $context->context,
670
- 'action' => $context->action,
671
- 'ip' => $entry->ip,
672
- );
673
-
674
- if ( $entry->object_id && 0 !== $entry->object_id ) {
675
- $new_entry['object_id'] = $entry->object_id;
676
- }
677
-
678
- $wpdb->insert( $wpdb->base_prefix . 'mainwp_stream', $new_entry );
679
-
680
- }
681
- $starting_row += $rows_per_round;
682
- $stream_entries = $wpdb->get_results( "SELECT * FROM {$wpdb->base_prefix}mainwp_stream_tmp WHERE 1 = 1 " . $where . $orderby . $wpdb->prepare( "LIMIT %d, %d", $starting_row, $rows_per_round ) );
683
-
684
- }
685
-
686
- // $wpdb->query( "DROP TABLE {$wpdb->base_prefix}mainwp_stream_tmp, {$wpdb->base_prefix}mainwp_stream_context_tmp" );
687
- return $current_version;
688
- }
689
-
690
- /**
691
- * Handle the reset AJAX request to reset logs.
692
- *
693
- * @return bool
694
- */
695
- public function wp_ajax_try_repair() {
696
- check_ajax_referer( 'mainwp_stream_nonce_repair', 'wp_mainwp_stream_nonce_try_repair' );
697
-
698
- if ( ! current_user_can( $this->settings_cap ) ) {
699
- wp_die(
700
- esc_html__( "You don't have sufficient privileges to do this action.", 'mainwp-child-reports' )
701
- );
702
- }
703
- include_once $this->plugin->locations['inc_dir'] . 'db-updates.php';
704
-
705
- // force to repair.
706
- if ( function_exists( 'wp_mainwp_stream_update_auto_352')) {
707
-
708
- wp_mainwp_stream_update_auto_352( true, true );
709
-
710
- }
711
-
712
- wp_redirect(
713
- add_query_arg(
714
- array(
715
- 'page' => is_network_admin() ? $this->network->network_settings_page_slug : $this->settings_page_slug,
716
- 'message' => 'data_repaired',
717
- //'try_repair' => 'yes'
718
- ),
719
- self_admin_url( $this->admin_parent_page )
720
- )
721
- );
722
- exit;
723
- }
724
-
725
  /**
726
  * Handle the reset AJAX request to reset logs.
727
  *
@@ -737,8 +614,8 @@ class Admin {
737
  }
738
 
739
  $this->erase_stream_records();
740
-
741
- do_action( 'wp_mainwp_child_reposts_recreate_tables_if_not_exist' );
742
 
743
  if ( defined( 'WP_MAINWP_STREAM_TESTS' ) && WP_MAINWP_STREAM_TESTS ) {
744
  return true;
@@ -758,12 +635,12 @@ class Admin {
758
  }
759
 
760
 
761
- /**
762
- * Erase stream records.
763
- */
764
- private function erase_stream_records() {
765
 
766
- /** @global object $wpdb WordPress database object. */
767
  global $wpdb;
768
 
769
  $where = '';
@@ -781,22 +658,23 @@ class Admin {
781
  );
782
  }
783
 
784
- /**
785
- * Purge Schedule Setup.
786
- */
787
- public function purge_schedule_setup() {
788
  if ( ! wp_next_scheduled( 'wp_mainwp_stream_auto_purge' ) ) {
789
  wp_schedule_event( time(), 'twicedaily', 'wp_mainwp_stream_auto_purge' );
790
  }
791
  }
792
 
793
- /**
794
- * Purge Scheduled action.
795
- * @throws \Exception
796
- */
797
- public function purge_scheduled_action() {
 
798
 
799
- /** @global object $wpdb WordPress database object. */
800
  global $wpdb;
801
 
802
  // Don't purge when in Network Admin unless Stream is network activated.
@@ -816,17 +694,27 @@ class Admin {
816
  $options = (array) get_option( 'wp_mainwp_stream', array() );
817
  }
818
 
819
- if ( ! empty( $options['general_keep_records_indefinitely'] ) || ! isset( $options['general_records_ttl'] ) ) {
820
  return;
821
  }
822
 
823
- $days = $options['general_records_ttl'];
 
 
 
 
 
 
 
 
 
824
  $timezone = new DateTimeZone( 'UTC' );
825
  $date = new DateTime( 'now', $timezone );
826
 
827
  $date->sub( DateInterval::createFromDateString( "$days days" ) );
828
 
829
- $where = $wpdb->prepare( ' AND `stream`.`created` < %s', $date->format( 'Y-m-d H:i:s' ) );
 
830
 
831
  // Multisite but NOT network activated, only purge the current blog
832
  if ( is_multisite() && ! is_plugin_active_for_network( $this->plugin->locations['plugin'] ) ) {
@@ -843,8 +731,8 @@ class Admin {
843
  }
844
 
845
  /**
846
- * Plugin action links.
847
- *
848
  * @param array $links Action links array.
849
  * @param string $file Plugin file URL.
850
  *
@@ -853,7 +741,7 @@ class Admin {
853
  * @return array Plugin action links array.
854
  */
855
  public function plugin_action_links( $links, $file ) {
856
- if ( plugin_basename( $this->plugin->locations['dir'] . 'stream.php' ) !== $file ) {
857
  return $links;
858
  }
859
 
@@ -866,13 +754,15 @@ class Admin {
866
  $admin_page_url = add_query_arg(
867
  array(
868
  'page' => $this->network->network_settings_page_slug,
869
- ), network_admin_url( $this->admin_parent_page )
 
870
  );
871
  } else {
872
  $admin_page_url = add_query_arg(
873
  array(
874
  'page' => $this->settings_page_slug,
875
- ), admin_url( $this->admin_parent_page )
 
876
  );
877
  }
878
 
@@ -880,7 +770,7 @@ class Admin {
880
 
881
  $url = add_query_arg(
882
  array(
883
- 'action' => 'wp_mainwp_stream_uninstall',
884
  'wp_mainwp_stream_nonce' => wp_create_nonce( 'stream_nonce' ),
885
  ),
886
  admin_url( 'admin-ajax.php' )
@@ -891,12 +781,12 @@ class Admin {
891
  return $links;
892
  }
893
 
894
- /**
895
- * Render main page.
896
- *
897
- * @deprecated Disabled.
898
- */
899
- public function render_list_table() {
900
  $this->list_table->prepare_items();
901
  ?>
902
  <div class="wrap">
@@ -908,10 +798,10 @@ class Admin {
908
 
909
  /**
910
  * Render settings page.
911
- *
912
- * @deprecated Disabled.
913
  */
914
- public function render_settings_page() {
915
  $option_key = $this->plugin->settings->option_key;
916
  $form_action = apply_filters( 'wp_mainwp_stream_settings_form_action', admin_url( 'options.php' ) );
917
 
@@ -919,8 +809,7 @@ class Admin {
919
 
920
  $sections = $this->plugin->settings->get_fields();
921
  $active_tab = wp_mainwp_stream_filter_input( INPUT_GET, 'tab' );
922
- $min = wp_mainwp_stream_min_suffix();
923
- wp_enqueue_script( 'wp-mainwp-stream-settings', $this->plugin->locations['url'] . 'ui/js/settings.' . $min . 'js', array( 'jquery' ), $this->plugin->get_version(), true );
924
  ?>
925
  <div class="wrap">
926
  <h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
@@ -970,12 +859,13 @@ class Admin {
970
 
971
  /**
972
  * Instantiate the list table.
973
- *
974
- * @uses \WP_MainWP_Stream\List_Table
975
  */
976
- public function register_list_table() {
977
  $this->list_table = new List_Table(
978
- $this->plugin, array(
 
979
  'screen' => $this->screen_id['main'],
980
  )
981
  );
@@ -987,9 +877,9 @@ class Admin {
987
  * @param string $role User role.
988
  *
989
  * @return bool TRUE|FALSE
990
- * @deprecated Disabled.
991
  */
992
- private function role_can_view( $role ) {
993
  if ( in_array( $role, $this->plugin->settings->options['general_role_access'], true ) ) {
994
  return true;
995
  }
@@ -1000,20 +890,20 @@ class Admin {
1000
  /**
1001
  * Filter user caps to dynamically grant our view cap based on allowed roles.
1002
  *
1003
- * @param array $allcaps All capabilities.
1004
- * @param array $caps Capabilities.
1005
- * @param array $args Arguments.
1006
  * @param string $user User.
1007
  *
1008
  * @filter user_has_cap
1009
  *
1010
- * @return array All capabilities.
1011
- *
1012
- * @deprecated Disabled.
1013
  */
1014
- public function filter_user_caps($allcaps, $caps, $args, $user = null ) {
1015
 
1016
- /** @global object $wp_roles Core class used to implement a user roles API. */
1017
  global $wp_roles;
1018
 
1019
  $_wp_roles = isset( $wp_roles ) ? $wp_roles : new WP_Roles();
@@ -1054,14 +944,14 @@ class Admin {
1054
  *
1055
  * @filter role_has_cap
1056
  *
1057
- * @param array $allcaps All capabilities.
1058
- * @param array $cap Capabilities.
1059
  * @param string $role User role.
1060
  *
1061
  * @return array All capabilities.
1062
- * @deprecated Disabled.
1063
  */
1064
- public function filter_role_caps($allcaps, $cap, $role ) {
1065
  $stream_view_caps = array( $this->view_cap );
1066
 
1067
  if ( in_array( $cap, $stream_view_caps, true ) && $this->role_can_view( $role ) ) {
@@ -1072,8 +962,8 @@ class Admin {
1072
  }
1073
 
1074
  /**
1075
- * Ajax stream filters.
1076
- *
1077
  * @action wp_ajax_wp_mainwp_stream_filters
1078
  */
1079
  public function ajax_filters() {
@@ -1122,16 +1012,16 @@ class Admin {
1122
  die();
1123
  }
1124
 
1125
- /**
1126
- * Get users record meta.
1127
- *
1128
- * @param array $authors Authors array.
1129
- *
1130
- * @return array Return author records.
1131
- *
1132
- * @uses \WP_MainWP_Stream\Author
1133
- */
1134
- public function get_users_record_meta($authors ) {
1135
  $authors_records = array();
1136
 
1137
  foreach ( $authors as $user_id => $args ) {
@@ -1169,8 +1059,8 @@ class Admin {
1169
  /**
1170
  * Update user meta in a way that is also safe for VIP.
1171
  *
1172
- * @param int $user_id User ID.
1173
- * @param string $meta_key Meta Key.
1174
  * @param mixed $meta_value Meta value.
1175
  * @param mixed $prev_value Previouse Meta value. (optional).
1176
  *
@@ -1187,9 +1077,9 @@ class Admin {
1187
  /**
1188
  * Delete user meta in a way that is also safe for VIP.
1189
  *
1190
- * @param int $user_id User ID.
1191
- * @param string $meta_key Meta Key.
1192
- * @param mixed $meta_value Meta value (optional).
1193
  *
1194
  * @return bool TRUE|FALSE.
1195
  */
11
 
12
  /**
13
  * Class Admin.
14
+ *
15
  * @package WP_MainWP_Stream
16
  */
17
  class Admin {
63
 
64
  /**
65
  * Admin constructor.
66
+ *
67
+ * Run each time the class is called.
68
  *
69
  * @param Plugin $plugin The main Plugin class.
70
  */
79
  }
80
 
81
  // User and role caps.
82
+ // add_filter( 'user_has_cap', array( $this, 'filter_user_caps' ), 10, 4 );
83
+ // add_filter( 'role_has_cap', array( $this, 'filter_role_caps' ), 10, 3 );
84
 
85
  if ( is_multisite() && is_plugin_active_for_network( $this->plugin->locations['plugin'] ) && ! is_network_admin() ) {
86
  $options = (array) get_site_option( 'wp_mainwp_stream_network', array() );
91
 
92
  // Register settings page.
93
  if ( ! $this->disable_access ) {
94
+ // add_action( 'admin_menu', array( $this, 'register_menu' ) );
95
  }
96
 
97
  // Admin notices.
102
  add_filter( 'admin_body_class', array( $this, 'admin_body_class' ) );
103
 
104
  // Plugin action links.
105
+ // add_filter(
106
+ // 'plugin_action_links', array(
107
+ // $this,
108
+ // 'plugin_action_links',
109
+ // ), 10, 2
110
+ // );
111
 
112
  // Load admin scripts and styles.
113
  add_action(
114
+ 'admin_enqueue_scripts',
115
+ array(
116
  $this,
117
  'admin_enqueue_scripts',
118
  )
121
 
122
  // Reset Streams database.
123
  add_action(
124
+ 'wp_ajax_wp_mainwp_stream_reset',
125
+ array(
126
  $this,
127
  'wp_ajax_reset',
128
  )
129
  );
130
+
131
  // Reset Streams database.
132
  add_action(
133
+ 'wp_ajax_wp_mainwp_stream_try_repair',
134
+ array(
135
  $this,
136
  'wp_ajax_try_repair',
137
  )
138
  );
 
 
 
 
 
 
 
 
139
 
140
  // Uninstall Streams and Deactivate plugin.
141
  $uninstall = $this->plugin->db->driver->purge_storage( $this->plugin );
143
  // Auto purge setup.
144
  add_action( 'wp_loaded', array( $this, 'purge_schedule_setup' ) );
145
  add_action(
146
+ 'wp_mainwp_stream_auto_purge',
147
+ array(
148
  $this,
149
  'purge_scheduled_action',
150
  )
152
 
153
  // Ajax users list.
154
  add_action(
155
+ 'wp_ajax_wp_mainwp_stream_filters',
156
+ array(
157
  $this,
158
  'ajax_filters',
159
  )
160
+ );
161
  }
162
 
163
  /**
164
  * Load admin classes.
165
  *
166
  * @action init
167
+ *
168
+ * @uses \WP_MainWP_Stream\Export
169
+ * @uses \WP_MainWP_Stream\Live_Update
170
+ * @uses \WP_MainWP_Stream\Network
171
  */
172
  public function init() {
173
  $this->network = new Network( $this->plugin );
229
  /**
230
  * WordPress core white list of html tags and attributes
231
  * that WordPress allows in posts used for sanitizing post_content.
 
 
232
  *
233
+ * @global object $allowedposttags
234
  */
235
  global $allowedposttags;
236
 
262
  * @action admin_menu
263
  *
264
  * @return void
265
+ * @deprecated Disabled.
266
  */
267
+ public function register_menu() {
268
 
269
  /**
270
  * Filter the main admin menu title.
334
 
335
  // Register the list table early, so it associates the column headers with 'Screen settings'.
336
  add_action(
337
+ 'load-' . $this->screen_id['main'],
338
+ array(
339
  $this,
340
  'register_list_table',
341
  )
353
  * @return void
354
  */
355
  public function admin_enqueue_scripts( $hook ) {
356
+
357
  wp_register_script( 'wp-mainwp-stream-select2', $this->plugin->locations['url'] . 'ui/lib/select2/js/select2.full.min.js', array( 'jquery' ), '3.5.2', true );
358
  wp_register_style( 'wp-mainwp-stream-select2', $this->plugin->locations['url'] . 'ui/lib/select2/css/select2.min.css', array(), '3.5.2' );
359
  wp_register_script( 'wp-mainwp-stream-timeago', $this->plugin->locations['url'] . 'ui/lib/timeago/jquery.timeago.js', array(), '1.4.1', true );
367
  wp_register_script( 'wp-mainwp-stream-timeago-locale', $this->plugin->locations['url'] . sprintf( $file_tmpl, 'en' ), array( 'wp-mainwp-stream-timeago' ), '1' );
368
  }
369
 
370
+ wp_enqueue_style( 'wp-mainwp-stream-admin', $this->plugin->locations['url'] . 'ui/css/admin.css', array(), $this->plugin->get_version() );
 
371
 
372
  $script_screens = array( 'plugins.php' );
373
+
374
+ // if ( in_array( $hook, $this->screen_id, true ) || in_array( $hook, $script_screens, true ) ) {
375
  if ( $hook == 'settings_page_mainwp-reports-page' || $hook == 'settings_page_mainwp-reports-settings' || in_array( $hook, $script_screens, true ) ) {
376
  wp_enqueue_script( 'wp-mainwp-stream-select2' );
377
  wp_enqueue_style( 'wp-mainwp-stream-select2' );
380
  wp_enqueue_script( 'wp-mainwp-stream-timeago-locale' );
381
 
382
  wp_enqueue_script(
383
+ 'wp-mainwp-stream-admin',
384
+ $this->plugin->locations['url'] . 'ui/js/admin.js',
385
+ array(
386
  'jquery',
387
  'wp-mainwp-stream-select2',
388
+ ),
389
+ $this->plugin->get_version()
390
  );
391
  wp_enqueue_script(
392
+ 'wp-mainwp-stream-admin-exclude',
393
+ $this->plugin->locations['url'] . 'ui/js/exclude.js',
394
+ array(
395
  'jquery',
396
  'wp-mainwp-stream-select2',
397
+ ),
398
+ $this->plugin->get_version()
399
  );
400
  wp_enqueue_script(
401
+ 'wp-mainwp-stream-live-updates',
402
+ $this->plugin->locations['url'] . 'ui/js/live-updates.js',
403
+ array(
404
  'jquery',
405
  'heartbeat',
406
+ ),
407
+ $this->plugin->get_version()
408
  );
409
 
410
  wp_localize_script(
414
  'i18n' => array(
415
  'confirm_purge' => esc_html__( 'Are you sure you want to delete all Reports activity records from the database? This cannot be undone.', 'mainwp-child-reports' ),
416
  'confirm_defaults' => esc_html__( 'Are you sure you want to reset all site settings to default? This cannot be undone.', 'mainwp-child-reports' ),
417
+ 'confirm_uninstall' => esc_html__( 'Are you sure you want to uninstall and deactivate MainWP Child Reports? This will delete all Reports tables from the database and cannot be undone.', 'mainwp-child-reports' ),
418
  ),
419
  'locale' => esc_js( $locale ),
420
  'gmt_offset' => get_option( 'gmt_offset' ),
452
  */
453
  $bulk_actions_threshold = apply_filters( 'wp_mainwp_stream_bulk_actions_threshold', 100 );
454
 
455
+ wp_enqueue_script( 'wp-mainwp-stream-global', $this->plugin->locations['url'] . 'ui/js/global.js', array( 'jquery' ), $this->plugin->get_version() );
456
  wp_localize_script(
457
  'wp-mainwp-stream-global',
458
  'wp_mainwp_stream_global',
473
  * Check whether or not the current admin screen belongs to Stream.
474
  *
475
  * @return bool TRUE|FALSE.
 
 
476
  */
477
  public function is_stream_screen() {
478
+ if ( ! isset( $_GET['page'] ) ) {
479
+ return false;
480
  }
481
 
482
+ $page = wp_mainwp_stream_filter_input( INPUT_GET, 'page' );
483
+
484
+ if ( empty( $page ) ) {
485
+ return false;
486
+ }
487
+
488
+ if ( is_admin() && false !== strpos( $page, $this->records_page_slug ) ) {
489
  return true;
490
  }
491
 
531
  * @action admin_enqueue_scripts
532
  */
533
  public function admin_menu_css() {
534
+ wp_register_style( 'wp-mainwp-stream-datepicker', $this->plugin->locations['url'] . 'ui/css/datepicker.css', array(), $this->plugin->get_version() );
 
535
  wp_register_style( 'wp-mainwp-stream-icons', $this->plugin->locations['url'] . 'ui/stream-icons/style.css', array(), $this->plugin->get_version() );
536
 
537
  // Make sure we're working off a clean version
599
  \wp_add_inline_style( 'wp-admin', $css );
600
  }
601
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
602
  /**
603
  * Handle the reset AJAX request to reset logs.
604
  *
614
  }
615
 
616
  $this->erase_stream_records();
617
+
618
+ do_action( 'wp_mainwp_child_reposts_recreate_tables_if_not_exist' );
619
 
620
  if ( defined( 'WP_MAINWP_STREAM_TESTS' ) && WP_MAINWP_STREAM_TESTS ) {
621
  return true;
635
  }
636
 
637
 
638
+ /**
639
+ * Erase stream records.
640
+ */
641
+ private function erase_stream_records() {
642
 
643
+ /** @global object $wpdb WordPress database object. */
644
  global $wpdb;
645
 
646
  $where = '';
658
  );
659
  }
660
 
661
+ /**
662
+ * Purge Schedule Setup.
663
+ */
664
+ public function purge_schedule_setup() {
665
  if ( ! wp_next_scheduled( 'wp_mainwp_stream_auto_purge' ) ) {
666
  wp_schedule_event( time(), 'twicedaily', 'wp_mainwp_stream_auto_purge' );
667
  }
668
  }
669
 
670
+ /**
671
+ * Purge Scheduled action.
672
+ *
673
+ * @throws \Exception
674
+ */
675
+ public function purge_scheduled_action() {
676
 
677
+ /** @global object $wpdb WordPress database object. */
678
  global $wpdb;
679
 
680
  // Don't purge when in Network Admin unless Stream is network activated.
694
  $options = (array) get_option( 'wp_mainwp_stream', array() );
695
  }
696
 
697
+ if ( ! empty( $options['general_keep_records_indefinitely'] ) ) {
698
  return;
699
  }
700
 
701
+ if ( ! isset( $options['general_records_ttl'] ) ) {
702
+ $days = 100;
703
+ } else {
704
+ $days = $options['general_records_ttl'];
705
+ }
706
+
707
+ if ( empty( $days ) ) {
708
+ $days = 1;
709
+ }
710
+
711
  $timezone = new DateTimeZone( 'UTC' );
712
  $date = new DateTime( 'now', $timezone );
713
 
714
  $date->sub( DateInterval::createFromDateString( "$days days" ) );
715
 
716
+ // $where = $wpdb->prepare( ' AND `stream`.`created` < %s', $date->format( 'Y-m-d H:i:s' ) );
717
+ $where = ' AND `stream`.`created` < STR_TO_DATE(' . $wpdb->prepare( '%s', $date->format( 'Y-m-d H:i:s' ) ) . ", '%Y-%m-%d %H:%i:%s') ";
718
 
719
  // Multisite but NOT network activated, only purge the current blog
720
  if ( is_multisite() && ! is_plugin_active_for_network( $this->plugin->locations['plugin'] ) ) {
731
  }
732
 
733
  /**
734
+ * Plugin action links.
735
+ *
736
  * @param array $links Action links array.
737
  * @param string $file Plugin file URL.
738
  *
741
  * @return array Plugin action links array.
742
  */
743
  public function plugin_action_links( $links, $file ) {
744
+ if ( plugin_basename( $this->plugin->locations['dir'] . 'mainwp-child-reports.php' ) !== $file ) {
745
  return $links;
746
  }
747
 
754
  $admin_page_url = add_query_arg(
755
  array(
756
  'page' => $this->network->network_settings_page_slug,
757
+ ),
758
+ network_admin_url( $this->admin_parent_page )
759
  );
760
  } else {
761
  $admin_page_url = add_query_arg(
762
  array(
763
  'page' => $this->settings_page_slug,
764
+ ),
765
+ admin_url( $this->admin_parent_page )
766
  );
767
  }
768
 
770
 
771
  $url = add_query_arg(
772
  array(
773
+ 'action' => 'wp_mainwp_stream_uninstall',
774
  'wp_mainwp_stream_nonce' => wp_create_nonce( 'stream_nonce' ),
775
  ),
776
  admin_url( 'admin-ajax.php' )
781
  return $links;
782
  }
783
 
784
+ /**
785
+ * Render main page.
786
+ *
787
+ * @deprecated Disabled.
788
+ */
789
+ public function render_list_table() {
790
  $this->list_table->prepare_items();
791
  ?>
792
  <div class="wrap">
798
 
799
  /**
800
  * Render settings page.
801
+ *
802
+ * @deprecated Disabled.
803
  */
804
+ public function render_settings_page() {
805
  $option_key = $this->plugin->settings->option_key;
806
  $form_action = apply_filters( 'wp_mainwp_stream_settings_form_action', admin_url( 'options.php' ) );
807
 
809
 
810
  $sections = $this->plugin->settings->get_fields();
811
  $active_tab = wp_mainwp_stream_filter_input( INPUT_GET, 'tab' );
812
+ wp_enqueue_script( 'wp-mainwp-stream-settings', $this->plugin->locations['url'] . 'ui/js/settings.js', array( 'jquery' ), $this->plugin->get_version(), true );
 
813
  ?>
814
  <div class="wrap">
815
  <h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
859
 
860
  /**
861
  * Instantiate the list table.
862
+ *
863
+ * @uses \WP_MainWP_Stream\List_Table
864
  */
865
+ public function register_list_table() {
866
  $this->list_table = new List_Table(
867
+ $this->plugin,
868
+ array(
869
  'screen' => $this->screen_id['main'],
870
  )
871
  );
877
  * @param string $role User role.
878
  *
879
  * @return bool TRUE|FALSE
880
+ * @deprecated Disabled.
881
  */
882
+ private function role_can_view( $role ) {
883
  if ( in_array( $role, $this->plugin->settings->options['general_role_access'], true ) ) {
884
  return true;
885
  }
890
  /**
891
  * Filter user caps to dynamically grant our view cap based on allowed roles.
892
  *
893
+ * @param array $allcaps All capabilities.
894
+ * @param array $caps Capabilities.
895
+ * @param array $args Arguments.
896
  * @param string $user User.
897
  *
898
  * @filter user_has_cap
899
  *
900
+ * @return array All capabilities.
901
+ *
902
+ * @deprecated Disabled.
903
  */
904
+ public function filter_user_caps( $allcaps, $caps, $args, $user = null ) {
905
 
906
+ /** @global object $wp_roles Core class used to implement a user roles API. */
907
  global $wp_roles;
908
 
909
  $_wp_roles = isset( $wp_roles ) ? $wp_roles : new WP_Roles();
944
  *
945
  * @filter role_has_cap
946
  *
947
+ * @param array $allcaps All capabilities.
948
+ * @param array $cap Capabilities.
949
  * @param string $role User role.
950
  *
951
  * @return array All capabilities.
952
+ * @deprecated Disabled.
953
  */
954
+ public function filter_role_caps( $allcaps, $cap, $role ) {
955
  $stream_view_caps = array( $this->view_cap );
956
 
957
  if ( in_array( $cap, $stream_view_caps, true ) && $this->role_can_view( $role ) ) {
962
  }
963
 
964
  /**
965
+ * Ajax stream filters.
966
+ *
967
  * @action wp_ajax_wp_mainwp_stream_filters
968
  */
969
  public function ajax_filters() {
1012
  die();
1013
  }
1014
 
1015
+ /**
1016
+ * Get users record meta.
1017
+ *
1018
+ * @param array $authors Authors array.
1019
+ *
1020
+ * @return array Return author records.
1021
+ *
1022
+ * @uses \WP_MainWP_Stream\Author
1023
+ */
1024
+ public function get_users_record_meta( $authors ) {
1025
  $authors_records = array();
1026
 
1027
  foreach ( $authors as $user_id => $args ) {
1059
  /**
1060
  * Update user meta in a way that is also safe for VIP.
1061
  *
1062
+ * @param int $user_id User ID.
1063
+ * @param string $meta_key Meta Key.
1064
  * @param mixed $meta_value Meta value.
1065
  * @param mixed $prev_value Previouse Meta value. (optional).
1066
  *
1077
  /**
1078
  * Delete user meta in a way that is also safe for VIP.
1079
  *
1080
+ * @param int $user_id User ID.
1081
+ * @param string $meta_key Meta Key.
1082
+ * @param mixed $meta_value Meta value (optional).
1083
  *
1084
  * @return bool TRUE|FALSE.
1085
  */
classes/class-alert-trigger.php DELETED
@@ -1,97 +0,0 @@
1
- <?php
2
- /**
3
- * Alert Trigger abstract class.
4
- *
5
- * @package WP_MainWP_Stream
6
- */
7
-
8
- namespace WP_MainWP_Stream;
9
-
10
- /**
11
- * Class Alert_Trigger
12
- *
13
- * @package WP_MainWP_Stream
14
- */
15
- abstract class Alert_Trigger {
16
-
17
- /**
18
- * Hold the Plugin class
19
- *
20
- * @var Plugin
21
- */
22
- public $plugin;
23
-
24
- /**
25
- * Unique identifier
26
- *
27
- * @var string
28
- */
29
- public $slug;
30
-
31
- /**
32
- * Alert_Trigger constructor.
33
- *
34
- * Run each time the class is called.
35
- *
36
- * @param Plugin $plugin Plugin class.
37
- */
38
- public function __construct( $plugin ) {
39
- $this->plugin = $plugin;
40
-
41
- add_action( 'wp_mainwp_stream_alert_trigger_form_display', array( $this, 'add_fields' ), 10, 2 );
42
- add_action( 'wp_mainwp_stream_alert_trigger_form_save', array( $this, 'save_fields' ), 10, 1 );
43
- add_filter( 'wp_mainwp_stream_alert_trigger_check', array( $this, 'check_record' ), 10, 4 );
44
- }
45
-
46
- /**
47
- * Checks if a record matches the criteria from the trigger.
48
- *
49
- * @filter wp_mainwp_stream_alert_trigger_check
50
- *
51
- * @param bool $success Status of previous checks.
52
- * @param int $record_id Record ID.
53
- * @param array $recordarr Record data.
54
- * @param Alert $alert The Alert being worked on.
55
- * @return bool False on failure, otherwise should return original value of $success.
56
- */
57
- abstract public function check_record ( $success, $record_id, $recordarr, $alert );
58
-
59
- /**
60
- * Adds fields to the trigger form.
61
- *
62
- * @action wp_mainwp_stream_alert_trigger_form_display
63
- *
64
- * @param Form_Generator $form The Form Object to add to.
65
- * @param Alert $alert The Alert being worked on.
66
- * @return void
67
- */
68
- abstract public function add_fields( $form, $alert );
69
-
70
- /**
71
- * Validate and save Alert object
72
- *
73
- * @action wp_mainwp_stream_alert_trigger_form_save
74
- *
75
- * @param Alert $alert The Alert being worked on.
76
- * @return void
77
- */
78
- abstract public function save_fields( $alert );
79
-
80
- /**
81
- * Returns the trigger's value for the given alert.
82
- *
83
- * @param string $context The location this data will be displayed in.
84
- * @param Alert $alert Alert being processed.
85
- * @return string
86
- */
87
- abstract public function get_display_value( $context = 'normal', $alert );
88
-
89
- /**
90
- * Allow connectors to determine if their dependencies is satisfied or not
91
- *
92
- * @return bool
93
- */
94
- public function is_dependency_satisfied() {
95
- return true;
96
- }
97
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
classes/class-alert-type.php DELETED
@@ -1,80 +0,0 @@
1
- <?php
2
- /**
3
- * Alert Type abstract class.
4
- *
5
- * Used to register new Alert types.
6
- *
7
- * @package WP_MainWP_Stream
8
- */
9
-
10
- namespace WP_MainWP_Stream;
11
-
12
- /**
13
- * Class Alert_Type
14
- *
15
- * @package WP_MainWP_Stream
16
- */
17
- abstract class Alert_Type {
18
-
19
- /**
20
- * Hold the Plugin class
21
- *
22
- * @var Plugin
23
- */
24
- public $plugin;
25
-
26
- /**
27
- * Unique identifier.
28
- *
29
- * @var string
30
- */
31
- public $slug;
32
-
33
- /**
34
- * Alert_Type constructor.
35
- *
36
- * Run each time the class is called.
37
- *
38
- * @param Plugin $plugin Plugin object.
39
- */
40
- public function __construct( $plugin ) {
41
- $this->plugin = $plugin;
42
- }
43
-
44
- /**
45
- * Alert recipients about the new record
46
- *
47
- * @param int $record_id Record ID.
48
- * @param array $recordarr Record details.
49
- * @param array $options Alert options.
50
- */
51
- abstract public function alert( $record_id, $recordarr, $options );
52
-
53
- /**
54
- * Display settings form for configuration of individual alerts
55
- *
56
- * @param Alert $alert Alert currently being worked on.
57
- */
58
- public function display_fields( $alert ) {
59
- // Implementation optional, but recommended
60
- }
61
-
62
- /**
63
- * Process settings form for configuration of individual alerts
64
- *
65
- * @param Alert $alert Alert currently being worked on.
66
- */
67
- public function save_fields( $alert ) {
68
- // Implementation optional, but recommended
69
- }
70
-
71
- /**
72
- * Allow connectors to determine if their dependencies are satisfied or not
73
- *
74
- * @return bool
75
- */
76
- public function is_dependency_satisfied() {
77
- // Implementation optional, but recommended
78
- return true;
79
- }
80
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
classes/class-alert.php DELETED
@@ -1,352 +0,0 @@
1
- <?php
2
- /**
3
- * Single Alert handler.
4
- *
5
- * @package WP_MainWP_Stream
6
- */
7
-
8
- namespace WP_MainWP_Stream;
9
-
10
- /**
11
- * Class Alert
12
- *
13
- * @package WP_MainWP_Stream
14
- */
15
- class Alert {
16
-
17
- /**
18
- * Alert post ID
19
- *
20
- * @var int
21
- */
22
- public $ID;
23
-
24
- /**
25
- * Creation date
26
- *
27
- * @var string
28
- */
29
- public $date;
30
-
31
- /**
32
- * Status
33
- *
34
- * @var string
35
- */
36
- public $status;
37
-
38
- /**
39
- * Alert author ID
40
- *
41
- * @var int
42
- */
43
- public $author;
44
-
45
- /**
46
- * Alert type
47
- *
48
- * @var string
49
- */
50
- public $alert_type;
51
-
52
- /**
53
- * Alert meta data
54
- *
55
- * @var int
56
- */
57
- public $alert_meta;
58
-
59
- /**
60
- * Hold Plugin class
61
- *
62
- * @var Plugin
63
- */
64
- public $plugin;
65
-
66
- /**
67
- * Alert constructor.
68
- *
69
- * Run each time the class is called.
70
- *
71
- * @param object $item Alert data.
72
- * @param Plugin $plugin Plugin class.
73
- * @return void
74
- */
75
- public function __construct( $item, $plugin ) {
76
- $this->plugin = $plugin;
77
-
78
- $this->ID = isset( $item->ID ) ? $item->ID : null;
79
- $this->status = isset( $item->status ) ? $item->status : 'wp_mainwp_stream_disabled';
80
- $this->date = isset( $item->date ) ? $item->date : null;
81
- $this->author = isset( $item->author ) ? $item->author : null;
82
-
83
- $this->alert_type = isset( $item->alert_type ) ? $item->alert_type : null;
84
- $this->alert_meta = isset( $item->alert_meta ) ? $item->alert_meta : array();
85
- }
86
-
87
- /**
88
- * Save state of the Alert to database
89
- *
90
- * @return int The Post ID of the alert.
91
- *
92
- * @uses \WP_MainWP_Stream\Alerts::POST_TYPE
93
- */
94
- public function save() {
95
-
96
- $args = array(
97
- 'ID' => $this->ID,
98
- 'post_date' => $this->date,
99
- 'post_status' => $this->status,
100
- 'post_content' => '',
101
- 'post_title' => $this->get_title(),
102
- 'post_author' => $this->author,
103
- 'post_type' => Alerts::POST_TYPE,
104
- );
105
-
106
- if ( empty( $args['ID'] ) ) {
107
- unset( $args['ID'] );
108
- }
109
-
110
- $post_id = wp_insert_post( $args );
111
- if ( empty( $args['ID'] ) ) {
112
- $this->ID = $post_id;
113
- }
114
-
115
- $meta = array(
116
- 'alert_type' => $this->alert_type,
117
- 'alert_meta' => $this->alert_meta,
118
- );
119
-
120
- foreach ( $meta as $key => $value ) {
121
- $this->update_meta( $key, $value );
122
- }
123
-
124
- return $post_id;
125
- }
126
-
127
- /**
128
- * Process settings form data
129
- *
130
- * @param array $data Processed post object data.
131
- *
132
- * @return array New post object data.
133
- *
134
- * @uses \WP_MainWP_Stream\Alerts::POST_TYPE
135
- */
136
- public function process_settings_form( $data ) {
137
-
138
- $args = array(
139
- 'post_date' => $this->date,
140
- 'post_status' => $this->status,
141
- 'post_title' => $this->get_title(),
142
- 'post_author' => $this->author,
143
- 'post_type' => Alerts::POST_TYPE,
144
- );
145
-
146
- foreach ( $args as $key => $value ) {
147
- $data[ $key ] = $value;
148
- }
149
-
150
- $meta_input = array(
151
- 'alert_type' => $this->alert_type,
152
- 'alert_meta' => $this->alert_meta,
153
- );
154
-
155
- foreach ( $meta_input as $key => $value ) {
156
- $this->update_meta( $key, $value );
157
- }
158
-
159
- return $data;
160
- }
161
-
162
- /**
163
- * Query record meta
164
- *
165
- * @param string $meta_key Meta key to retrieve (optional). Otherwise will
166
- * grab all meta data for the ID.
167
- * @param bool $single Whether to only retrieve the first value (optional).
168
- *
169
- * @return mixed Single value if $single is true, array if false.
170
- */
171
- public function get_meta( $meta_key = '', $single = false ) {
172
- return get_post_meta( $this->ID, $meta_key, $single );
173
- }
174
-
175
- /**
176
- * Update record meta
177
- *
178
- * @param string $meta_key Meta key to update.
179
- * @param string $meta_value Value to update with.
180
- * @param string $prev_value Previous value to change (optional).
181
- * @return array
182
- */
183
- public function update_meta( $meta_key, $meta_value, $prev_value = '' ) {
184
- return update_post_meta( $this->ID, $meta_key, $meta_value, $prev_value );
185
- }
186
-
187
- /**
188
- * Determine the title of the alert.
189
- *
190
- * @todo enhance human readibility
191
- * @return string The title of the alert
192
- */
193
- public function get_title() {
194
-
195
- $alert_type = $this->get_alert_type_obj()->name;
196
-
197
- $output = array();
198
- foreach ( array( 'action', 'author', 'context' ) as $trigger_type ) {
199
- $output[ $trigger_type ] = $this->plugin->alerts->alert_triggers[ $trigger_type ]->get_display_value( 'list_table', $this );
200
- }
201
- $title = '';
202
- foreach ( $this->plugin->alerts->alert_triggers as $trigger_type => $trigger_obj ) {
203
- $value = $trigger_obj->get_display_value( 'list_table', $this );
204
- $title .= $value . ' > ';
205
- }
206
- $title = rtrim( $title, ' > ' );
207
- return $title;
208
- }
209
-
210
- /**
211
- * Retrive current alert type object
212
- *
213
- * @return Alert_Type
214
- */
215
- public function get_alert_type_obj() {
216
- if ( array_key_exists( $this->alert_type, $this->plugin->alerts->alert_types ) ) {
217
- $obj = $this->plugin->alerts->alert_types[ $this->alert_type ];
218
- } else {
219
- $obj = new Alert_Type_None( $this->plugin );
220
- }
221
- return $obj;
222
- }
223
-
224
- /**
225
- * Check if record matches trigger criteria.
226
- *
227
- * @param int $record_id Record ID.
228
- * @param array $recordarr Record data.
229
- * @return bool True if a positive match. False otherwise.
230
- */
231
- public function check_record( $record_id, $recordarr ) {
232
- return apply_filters( 'wp_mainwp_stream_alert_trigger_check', true, $record_id, $recordarr, $this );
233
- }
234
-
235
- /**
236
- * Trigger alert for a specific record.
237
- *
238
- * @param int $record_id Record ID.
239
- * @param int $recordarr Record Data.
240
- * @return void
241
- */
242
- public function send_alert( $record_id, $recordarr ) {
243
- $this->get_alert_type_obj()->alert( $record_id, $recordarr, $this );
244
- }
245
-
246
- /**
247
- * Record Alerts triggered by a Record.
248
- *
249
- * This should be used any time an alert is triggered.
250
- *
251
- * Stores the post ID of an Alert triggered by a record.
252
- *
253
- * As an example, this exists so that its value(s) can then be used
254
- * to fetch meta from that Alert in later operations.
255
- *
256
- * This also creates the Alert triggered meta if not found.
257
- *
258
- * @see Alert_Type_Highlight::alert() for an example.
259
- *
260
- * @param object $record The Record.
261
- * @param string $alert_slug The Alert Type slug.
262
- * @param array $alert_meta Alert meta.
263
- *
264
- * @return bool If the meta was updated successfully.
265
- *
266
- * @uses \WP_MainWP_Stream\Alerts::ALERTS_TRIGGERED_META_KEY
267
- * @uses \WP_MainWP_Stream\Record
268
- */
269
- public static function update_record_triggered_alerts( $record, $alert_slug, $alert_meta ) {
270
- if ( ! is_string( $alert_slug ) ) {
271
- return false;
272
- }
273
-
274
- if ( is_array( $record ) ) {
275
- $record = (object) $record;
276
- }
277
- if ( empty( $record->ID ) ) {
278
- return false;
279
- }
280
- $record = new Record( $record );
281
- $alerts_triggered = $record->get_meta( Alerts::ALERTS_TRIGGERED_META_KEY, true );
282
-
283
- if ( empty( $alerts_triggered ) || ! is_array( $alerts_triggered ) ) {
284
- $alerts_triggered = array(
285
- $alert_slug => $alert_meta,
286
- );
287
- } elseif ( ! array_key_exists( $alert_slug, $alerts_triggered ) || ! is_array( $alerts_triggered[ $alert_slug ] ) ) {
288
- $alerts_triggered[ $alert_slug ] = $alert_meta;
289
- }
290
- return $record->update_meta( Alerts::ALERTS_TRIGGERED_META_KEY, $alerts_triggered );
291
- }
292
-
293
- /**
294
- * Get a meta value from the Alert that a Record has triggered.
295
- *
296
- * If a Record has triggered an Alert (post), this fetches a specific
297
- * Alert meta (i.e., "post meta") value from that Alert.
298
- *
299
- * First, it gets the array of Alerts that the Record has triggered.
300
- * Then, using the requested Alert Type, it grabs the first item (post ID) in
301
- * that Type.
302
- *
303
- * Using that ID, it fetches that Alert post's meta, then
304
- * returns the value of the requested setting (ie., "post meta" field).
305
- *
306
- * @see Alert_Type_Highlight::post_class() for an example.
307
- *
308
- * @param object $record The Record object.
309
- * @param string $alert_slug The slug of the Alert Type.
310
- * @param string $setting The requested meta value of the Alert.
311
- * @param mixed $default The default value if no value is found.
312
- *
313
- * @return mixed
314
- *
315
- * @uses \WP_MainWP_Stream\Alerts::ALERTS_TRIGGERED_META_KEY
316
- * @uses \WP_MainWP_Stream\Record
317
- */
318
- public function get_single_alert_setting_from_record( $record, $alert_slug, $setting, $default = false ) {
319
- if ( ! is_object( $record ) || ! is_string( $alert_slug ) || ! is_string( $setting ) ) {
320
- return false;
321
- }
322
- $record = new Record( $record );
323
- $alerts_triggered = $record->get_meta( Alerts::ALERTS_TRIGGERED_META_KEY, true );
324
-
325
- // Ensure we have a meta array and that this record has triggered a highlight alert.
326
- if ( empty( $alerts_triggered ) || ! is_array( $alerts_triggered ) || ! array_key_exists( $alert_slug, $alerts_triggered ) ) {
327
- return false;
328
- }
329
-
330
- $values = $alerts_triggered[ $alert_slug ];
331
- if ( empty( $values ) ) {
332
- return false;
333
- }
334
-
335
- // Grab an Alert post ID.
336
- // @todo determine which Alert post takes priority.
337
- if ( is_array( $values ) ) {
338
- $post_id = $values[0];
339
- } else {
340
- $post_id = $values;
341
- }
342
-
343
- if ( ! is_numeric( $post_id ) ) {
344
- return false;
345
- }
346
-
347
- $alert = $this->plugin->alerts->get_alert( $post_id );
348
-
349
- $value = ! empty( $alert->alert_meta[ $setting ] ) ? $alert->alert_meta[ $setting ] : $default;
350
- return $value;
351
- }
352
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
classes/class-alerts-list.php DELETED
@@ -1,361 +0,0 @@
1
- <?php
2
- /**
3
- * Listing of Alerts in the WP Admin.
4
- *
5
- * @package WP_MainWP_Stream
6
- */
7
-
8
- namespace WP_MainWP_Stream;
9
-
10
- /**
11
- * Class Alerts_List
12
- *
13
- * @package WP_MainWP_Stream
14
- */
15
- class Alerts_List {
16
- /**
17
- * Hold the Plugin class
18
- *
19
- * @var Plugin
20
- */
21
- public $plugin;
22
-
23
- /**
24
- * Alerts_List constructor.
25
- *
26
- * Run each time the class is called.
27
- *
28
- * @param Plugin $plugin The main Plugin class.
29
- */
30
- public function __construct( $plugin ) {
31
- $this->plugin = $plugin;
32
-
33
- add_filter( 'bulk_actions-edit-wp_mainwp_alerts', array( $this, 'suppress_bulk_actions' ), 10, 1 );
34
- add_filter( 'disable_months_dropdown', array( $this, 'suppress_months_dropdown' ), 10, 2 );
35
- add_filter( 'post_row_actions', array( $this, 'suppress_quick_edit' ), 10, 1 );
36
-
37
- // @todo Make more specific
38
- if ( is_admin() ) {
39
- add_filter( 'request', array( $this, 'parse_request' ), 10, 2 );
40
- }
41
- add_filter( 'views_edit-wp_mainwp_alerts', array( $this, 'manage_views' ) );
42
-
43
- add_filter( 'manage_wp_mainwp_alerts_posts_columns', array( $this, 'manage_columns' ) );
44
- add_action( 'manage_wp_mainwp_alerts_posts_custom_column', array( $this, 'column_data' ), 10, 2 );
45
-
46
- add_action( 'quick_edit_custom_box', array( $this, 'display_custom_quick_edit' ), 10, 2 );
47
- add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
48
- }
49
-
50
- /**
51
- * Default to wp_mainwp_stream_enabled and wp_mainwp_stream_disabled when querying for alerts
52
- *
53
- * @filter request
54
- *
55
- * @param array $query_vars Arguments for query to populate table.
56
- *
57
- * @return array
58
- *
59
- * @uses \WP_MainWP_Stream\Alerts::POST_TYPE
60
- */
61
- public function parse_request( $query_vars ) {
62
- $screen = get_current_screen();
63
- if ( 'edit-wp_mainwp_alerts' === $screen->id && Alerts::POST_TYPE === $query_vars['post_type'] && empty( $query_vars['post_status'] ) ) {
64
- $query_vars['post_status'] = array( 'wp_mainwp_stream_enabled', 'wp_mainwp_stream_disabled' );
65
- }
66
- return $query_vars;
67
- }
68
-
69
- /**
70
- * Manage views on the alerts list view
71
- *
72
- * @filter views_edit-wp_mainwp_alerts
73
- *
74
- * @param array $views View links HTML.
75
- * @return array
76
- */
77
- public function manage_views( $views ) {
78
-
79
- if ( array_key_exists( 'trash', $views ) ) {
80
- $trash = $views['trash'];
81
- unset( $views['trash'] );
82
- $views['trash'] = $trash;
83
- }
84
-
85
- return $views;
86
- }
87
-
88
- /**
89
- * Manages columns on the alerts list view
90
- *
91
- * @filter manage_wp_mainwp_alerts_posts_columns
92
- *
93
- * @param array $columns Column id -> title array.
94
- * @return array
95
- */
96
- public function manage_columns( $columns ) {
97
- $columns = array(
98
- 'cb' => $columns['cb'],
99
- 'alert_trigger' => __( 'Trigger', 'mainwp-child-reports' ),
100
- 'alert_type' => __( 'Type', 'mainwp-child-reports' ),
101
- 'alert_status' => __( 'Status', 'mainwp-child-reports' ),
102
- );
103
- return $columns;
104
- }
105
-
106
- /**
107
- * Fills in column data for custom columns.
108
- *
109
- * @action manage_wp_mainwp_alerts_posts_custom_column
110
- *
111
- * @param string $column_name Column name to show data for.
112
- * @param int $post_id The post being processed.
113
- * @return mixed
114
- */
115
- public function column_data( $column_name, $post_id ) {
116
-
117
- $alert = $this->plugin->alerts->get_alert( $post_id );
118
- if ( ! $alert ) {
119
- return;
120
- }
121
-
122
- switch ( $column_name ) {
123
- case 'alert_trigger':
124
- $values = array();
125
- foreach ( $this->plugin->alerts->alert_triggers as $trigger_type => $trigger_obj ) {
126
- $value = $trigger_obj->get_display_value( 'list_table', $alert );
127
- $values[] = '<span class="alert_trigger_value alert_trigger_' . esc_attr( $trigger_type ) . '">' . esc_html( $value ) . '</span>';
128
- }
129
- ?>
130
- <div><?php echo wp_kses_post( join( '', $values ) ); ?></div>
131
- <div class="row-actions wp-mainwp-stream-show-mobile">
132
- <?php echo wp_kses_post( $this->custom_column_actions( $post_id ) ); ?>
133
- <button type="button" class="toggle-row"><span class="screen-reader-text"><?php echo esc_html__( 'Show more details', 'mainwp-child-reports' ); ?></span></button>
134
- </div>
135
- <?php
136
- if ( ! empty( $alert->alert_meta['trigger_connector'] ) ) {
137
- $trigger_connector = $alert->alert_meta['trigger_connector'];
138
- } else {
139
- $trigger_connector = '';
140
- }
141
- if ( ! empty( $alert->alert_meta['trigger_context'] ) ) {
142
- $trigger_context = $alert->alert_meta['trigger_context'];
143
- } else {
144
- $trigger_context = '';
145
- }
146
- if ( ! empty( $alert->alert_meta['trigger_action'] ) ) {
147
- $trigger_action = $alert->alert_meta['trigger_action'];
148
- } else {
149
- $trigger_action = '';
150
- }
151
- ?>
152
- <input type="hidden" name="wp_mainwp_stream_trigger_connector" value="<?php echo esc_attr( $trigger_connector ); ?>" />
153
- <input type="hidden" name="wp_mainwp_stream_trigger_context" value="<?php echo esc_attr( $trigger_context ); ?>" />
154
- <input type="hidden" name="wp_mainwp_stream_trigger_action" value="<?php echo esc_attr( $trigger_action ); ?>" />
155
- <?php
156
- echo wp_kses_post( $this->custom_column_actions( $post_id ) );
157
- break;
158
- case 'alert_type':
159
- $alert_type = $alert->alert_type;
160
- if ( ! empty( $this->plugin->alerts->alert_types[ $alert_type ]->name ) ) {
161
- $alert_name = $this->plugin->alerts->alert_types[ $alert_type ]->name;
162
- } else {
163
- $alert_name = 'Untitled Alert';
164
- }
165
- ?>
166
- <input type="hidden" name="wp_mainwp_stream_alert_type" value="<?php echo esc_attr( $alert->alert_type ); ?>" />
167
- <strong class="row-title"><?php echo esc_html( $alert_name ); ?></strong>
168
- <?php
169
- if ( ! empty( $alert->alert_meta['color'] ) ) {
170
- ?>
171
- <input type="hidden" name="wp_mainwp_stream_highlight_color" value="<?php echo esc_attr( $alert->alert_meta['color'] ); ?>" />
172
- <?php
173
- }
174
- if ( ! empty( $alert->alert_meta['email_recipient'] ) ) {
175
- ?>
176
- <input type="hidden" name="wp_mainwp_stream_email_recipient" value="<?php echo esc_attr( $alert->alert_meta['email_recipient'] ); ?>" />
177
- <?php
178
- }
179
- if ( ! empty( $alert->alert_meta['email_subject'] ) ) {
180
- ?>
181
- <input type="hidden" name="wp_mainwp_stream_email_subject" value="<?php echo esc_attr( $alert->alert_meta['email_subject'] ); ?>" />
182
- <?php
183
- }
184
- if ( ! empty( $alert->alert_meta['event_name'] ) ) {
185
- ?>
186
- <input type="hidden" name="wp_mainwp_stream_ifttt_event_name" value="<?php echo esc_attr( $alert->alert_meta['event_name'] ); ?>" />
187
- <?php
188
- }
189
- if ( ! empty( $alert->alert_meta['maker_key'] ) ) {
190
- ?>
191
- <input type="hidden" name="wp_mainwp_stream_ifttt_maker_key" value="<?php echo esc_attr( $alert->alert_meta['maker_key'] ); ?>" />
192
- <?php
193
- }
194
- if ( ! empty( $alert->alert_meta['slack_webhook'] ) ) {
195
- ?>
196
- <input type="hidden" name="wp_mainwp_stream_slack_webhook" value="<?php echo esc_attr( $alert->alert_meta['slack_webhook'] ); ?>" />
197
- <?php
198
- }
199
- if ( ! empty( $alert->alert_meta['slack_channel'] ) ) {
200
- ?>
201
- <input type="hidden" name="wp_mainwp_stream_slack_channel" value="<?php echo esc_attr( $alert->alert_meta['slack_channel'] ); ?>" />
202
- <?php
203
- }
204
- if ( ! empty( $alert->alert_meta['slack_username'] ) ) {
205
- ?>
206
- <input type="hidden" name="wp_mainwp_stream_slack_username" value="<?php echo esc_attr( $alert->alert_meta['slack_username'] ); ?>" />
207
- <?php
208
- }
209
- if ( ! empty( $alert->alert_meta['slack_icon'] ) ) {
210
- ?>
211
- <input type="hidden" name="wp_mainwp_stream_slack_icon" value="<?php echo esc_attr( $alert->alert_meta['slack_icon'] ); ?>" />
212
- <?php
213
- }
214
- break;
215
- case 'alert_status':
216
- $post_status_object = get_post_status_object( get_post_status( $post_id ) );
217
- if ( ! empty( $post_status_object ) ) {
218
- echo esc_html( $post_status_object->label );
219
- }
220
- ?>
221
- <input type="hidden" name="wp_mainwp_stream_alert_status" value="<?php echo esc_attr( $post_status_object->name ); ?>" />
222
- <?php
223
- break;
224
- }
225
- }
226
-
227
- /**
228
- * Remove 'edit' action from bulk actions
229
- *
230
- * @filter bulk_actions-edit-wp_mainwp_alerts
231
- *
232
- * @param array $actions List of bulk actions available.
233
- * @return array
234
- */
235
- public function suppress_bulk_actions( $actions ) {
236
- unset( $actions['edit'] );
237
- return $actions;
238
- }
239
-
240
- /**
241
- * Remove quick edit action from inline edit actions
242
- *
243
- * @filter post_row_actions
244
- *
245
- * @param array $actions List of inline edit actions available.
246
- *
247
- * @return array
248
- *
249
- * @uses \WP_MainWP_Stream\Alerts::POST_TYPE
250
- */
251
- public function suppress_quick_edit( $actions ) {
252
- if ( Alerts::POST_TYPE !== get_post_type() ) {
253
- return $actions;
254
- }
255
- unset( $actions['edit'] );
256
- unset( $actions['view'] );
257
- unset( $actions['trash'] );
258
- unset( $actions['inline hide-if-no-js'] );
259
- return $actions;
260
- }
261
-
262
- /**
263
- * Remove months dropdown from Alerts list page
264
- *
265
- * @filter disable_months_dropdown
266
- *
267
- * @param bool $status Status of months dropdown enabling.
268
- * @param string $post_type Post type status is related to.
269
- *
270
- * @return bool
271
- *
272
- * @uses \WP_MainWP_Stream\Alerts::POST_TYPE
273
- */
274
- public function suppress_months_dropdown( $status, $post_type ) {
275
- if ( Alerts::POST_TYPE === $post_type ) {
276
- $status = true;
277
- }
278
- return $status;
279
- }
280
-
281
- /**
282
- * Custom column actions for alerts main screen
283
- *
284
- * @param int $post_id The current post ID.
285
- *
286
- * @return string
287
- */
288
- public function custom_column_actions( $post_id ) {
289
- $post_status = wp_mainwp_stream_filter_input( INPUT_GET, 'post_status' );
290
- ob_start();
291
- if ( 'trash' !== $post_status ) {
292
- $bare_url = admin_url( 'post.php?post=' . $post_id . '&action=trash' );
293
- $nonce_url = wp_nonce_url( $bare_url, 'trash-post_' . $post_id );
294
- ?>
295
- <div class="row-actions">
296
- <span class="inline hide-if-no-js"><a href="#" class="editinline" aria-label="Quick edit “Hello world!” inline"><?php esc_html_e( 'Edit' ); ?></a>&nbsp;|&nbsp;</span>
297
- <span class="trash">
298
- <a href="<?php echo esc_url( $nonce_url ); ?>" class="submitdelete"><?php esc_html_e( 'Trash', 'mainwp-child-reports' ); ?></a>
299
- </span>
300
- </div>
301
- <?php
302
- }
303
- return ob_get_clean();
304
- }
305
-
306
- /**
307
- * Display a custom quick edit form.
308
- *
309
- * @uses \WP_MainWP_Stream\Alerts::POST_TYPE
310
- */
311
- public function display_custom_quick_edit() {
312
- static $fired = false;
313
- if ( false !== $fired ) {
314
- return;
315
- }
316
- $screen = get_current_screen();
317
- if ( 'edit-wp_mainwp_alerts' !== $screen->id ) {
318
- return;
319
- }
320
- wp_nonce_field( plugin_basename( __FILE__ ), Alerts::POST_TYPE . '_edit_nonce' );
321
- $box_type = array(
322
- 'triggers',
323
- 'notification',
324
- 'submit',
325
- );
326
- ?>
327
- <legend class="inline-edit-legend"><?php esc_html_e( 'Edit', 'mainwp-child-reports' ); ?></legend>
328
- <?php
329
- foreach ( $box_type as $type ) : // @todo remove inline styles.
330
- ?>
331
- <fieldset class="inline-edit-col inline-edit-<?php echo esc_attr( Alerts::POST_TYPE ); ?>">
332
- <?php
333
- $function_name = 'display_' . $type . '_box';
334
- $the_post = get_post();
335
- call_user_func( array( $this->plugin->alerts, $function_name ), $the_post );
336
- ?>
337
- </fieldset>
338
- <?php
339
- endforeach;
340
- $fired = true;
341
- }
342
-
343
- /**
344
- * Enqueue scripts for the alerts list screen.
345
- *
346
- * @param string $page The current page name.
347
- */
348
- public function enqueue_scripts( $page ) {
349
- $screen = get_current_screen();
350
- if ( 'edit-wp_mainwp_alerts' !== $screen->id ) {
351
- return;
352
- }
353
- $min = wp_mainwp_stream_min_suffix();
354
- wp_register_script( 'wp-mainwp-stream-alerts-list-js', $this->plugin->locations['url'] . 'ui/js/alerts-list.' . $min . 'js', array( 'wp-mainwp-stream-alerts', 'jquery' ) );
355
- wp_enqueue_script( 'wp-mainwp-stream-alerts-list-js' );
356
- wp_register_style( 'wp-mainwp-stream-alerts-list-css', $this->plugin->locations['url'] . 'ui/css/alerts-list.' . $min . 'css' );
357
- wp_enqueue_style( 'wp-mainwp-stream-alerts-list-css' );
358
- wp_enqueue_style( 'wp-mainwp-stream-select2' );
359
- }
360
-
361
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
classes/class-alerts.php DELETED
@@ -1,834 +0,0 @@
1
- <?php
2
- /**
3
- * MainWP Child Reports Alerts feature class.
4
- */
5
-
6
- namespace WP_MainWP_Stream;
7
-
8
- /**
9
- * Class Alerts.
10
- * @package WP_MainWP_Stream
11
- */
12
- class Alerts {
13
-
14
- /**
15
- * Alerts post type slug.
16
- */
17
- const POST_TYPE = 'wp_mainwp_alerts';
18
-
19
- /**
20
- * Triggered Alerts meta key for Records.
21
- */
22
- const ALERTS_TRIGGERED_META_KEY = 'wp_mainwp_alerts_triggered';
23
-
24
- /**
25
- * Hold Plugin class.
26
- *
27
- * @var Plugin
28
- */
29
- public $plugin;
30
-
31
- /**
32
- * Post meta prefix.
33
- *
34
- * @var string
35
- */
36
- public $meta_prefix = 'wp_mainwp_stream';
37
-
38
- /**
39
- * Alert Types.
40
- *
41
- * @var array
42
- */
43
- public $alert_types = array();
44
-
45
- /**
46
- * Alert Triggers.
47
- *
48
- * @var array
49
- */
50
- public $alert_triggers = array();
51
-
52
- /**
53
- * Alerts constructor.
54
- *
55
- * Run each time the class is called.
56
- *
57
- * @param Plugin $plugin The main Plugin class.
58
- */
59
- public function __construct( $plugin ) {
60
- $this->plugin = $plugin;
61
-
62
- // Register custom post type.
63
- add_action( 'init', array( $this, 'register_post_type' ) );
64
-
65
- // Add custom post type to menu.
66
- //add_action( 'wp_mainwp_stream_admin_menu', array( $this, 'register_menu' ) );
67
-
68
- // Add scripts to post screens.
69
- add_action( 'admin_enqueue_scripts', array(
70
- $this,
71
- 'register_scripts',
72
- ) );
73
-
74
- add_action( 'network_admin_menu', array(
75
- $this,
76
- 'change_menu_link_url',
77
- ), 99 );
78
-
79
- add_filter( 'wp_mainwp_stream_record_inserted', array(
80
- $this,
81
- 'check_records',
82
- ), 10, 2 );
83
-
84
- add_action( 'wp_ajax_load_alerts_settings', array(
85
- $this,
86
- 'load_alerts_settings',
87
- ) );
88
- add_action( 'wp_ajax_get_actions', array( $this, 'get_actions' ) );
89
- add_action( 'wp_ajax_save_new_alert', array(
90
- $this,
91
- 'save_new_alert',
92
- ) );
93
- add_action(
94
- 'wp_ajax_get_new_alert_triggers_notifications', array(
95
- $this,
96
- 'get_new_alert_triggers_notifications',
97
- )
98
- );
99
-
100
- $this->load_alert_types();
101
- $this->load_alert_triggers();
102
-
103
- add_filter( 'wp_mainwp_stream_action_links_posts', array(
104
- $this,
105
- 'change_alert_action_links',
106
- ), 11, 2 );
107
-
108
- }
109
-
110
- /**
111
- * Load alert_type classes.
112
- *
113
- * @return void
114
- */
115
- public function load_alert_types() {
116
- $alert_types = array(
117
- 'none',
118
- 'highlight',
119
- 'email',
120
- 'ifttt',
121
- 'slack',
122
- );
123
-
124
- $classes = array();
125
- foreach ( $alert_types as $alert_type ) {
126
- $file_location = $this->plugin->locations['dir'] . '/alerts/class-alert-type-' . $alert_type . '.php';
127
- if ( file_exists( $file_location ) ) {
128
- include_once $file_location;
129
- $class_name = sprintf( '\WP_MainWP_Stream\Alert_Type_%s', str_replace( '-', '_', $alert_type ) );
130
- if ( ! class_exists( $class_name ) ) {
131
- continue;
132
- }
133
- $class = new $class_name( $this->plugin );
134
- if ( ! property_exists( $class, 'slug' ) ) {
135
- continue;
136
- }
137
- $classes[ $class->slug ] = $class;
138
- }
139
- }
140
-
141
- /**
142
- * Allows for adding additional alert_types via classes that extend Notifier.
143
- *
144
- * @param array $classes An array of Notifier objects. In the format alert_type_slug => Notifier_Class()
145
- */
146
- $this->alert_types = apply_filters( 'wp_mainwp_stream_alert_types', $classes );
147
-
148
- // Ensure that all alert_types extend Notifier.
149
- foreach ( $this->alert_types as $key => $alert_type ) {
150
- if ( ! $this->is_valid_alert_type( $alert_type ) ) {
151
- unset( $this->alert_types[ $key ] );
152
- }
153
- }
154
- }
155
-
156
- /**
157
- * Load alert_type classes.
158
- *
159
- * @return void
160
- */
161
- public function load_alert_triggers() {
162
- $alert_triggers = array(
163
- 'author',
164
- 'context',
165
- 'action',
166
- );
167
-
168
- $classes = array();
169
- foreach ( $alert_triggers as $alert_trigger ) {
170
- $file_location = $this->plugin->locations['dir'] . '/alerts/class-alert-trigger-' . $alert_trigger . '.php';
171
- if ( file_exists( $file_location ) ) {
172
- include_once $file_location;
173
- $class_name = sprintf( '\WP_MainWP_Stream\Alert_Trigger_%s', str_replace( '-', '_', $alert_trigger ) );
174
- if ( ! class_exists( $class_name ) ) {
175
- continue;
176
- }
177
- $class = new $class_name( $this->plugin );
178
- if ( ! property_exists( $class, 'slug' ) ) {
179
- continue;
180
- }
181
- $classes[ $class->slug ] = $class;
182
- }
183
- }
184
-
185
- /**
186
- * Allows for adding additional alert_triggers via classes that extend Notifier.
187
- *
188
- * @param array $classes An array of Notifier objects. In the format alert_trigger_slug => Notifier_Class()
189
- */
190
- $this->alert_triggers = apply_filters( 'wp_mainwp_stream_alert_triggers', $classes );
191
-
192
- // Ensure that all alert_triggers extend Notifier.
193
- foreach ( $this->alert_triggers as $key => $alert_trigger ) {
194
- if ( ! $this->is_valid_alert_trigger( $alert_trigger ) ) {
195
- unset( $this->alert_triggers[ $key ] );
196
- }
197
- }
198
- }
199
-
200
- /**
201
- * Checks whether a Alert Type class is valid.
202
- *
203
- * @param Alert_Type $alert_type The class to check.
204
- *
205
- * @return bool
206
- *
207
- * @uses \WP_MainWP_Stream\Alert_Type
208
- */
209
- public function is_valid_alert_type( $alert_type ) {
210
- if ( ! is_a( $alert_type, 'WP_MainWP_Stream\Alert_Type' ) ) {
211
- return false;
212
- }
213
-
214
- if ( ! method_exists( $alert_type, 'is_dependency_satisfied' ) || ! $alert_type->is_dependency_satisfied() ) {
215
- return false;
216
- }
217
-
218
- return true;
219
- }
220
-
221
- /**
222
- * Checks whether a Alert Trigger class is valid.
223
- *
224
- * @param Alert_Trigger $alert_trigger The class to check.
225
- *
226
- * @return bool
227
- *
228
- * @uses \WP_MainWP_Stream\Alert_Trigger
229
- */
230
- public function is_valid_alert_trigger( $alert_trigger ) {
231
- if ( ! is_a( $alert_trigger, 'WP_MainWP_Stream\Alert_Trigger' ) ) {
232
- return false;
233
- }
234
-
235
- if ( ! method_exists( $alert_trigger, 'is_dependency_satisfied' ) || ! $alert_trigger->is_dependency_satisfied() ) {
236
- return false;
237
- }
238
-
239
- return true;
240
- }
241
-
242
- /**
243
- * Checks record being processed against active alerts.
244
- *
245
- * @filter wp_mainwp_stream_record_inserted
246
- *
247
- * @param int $record_id The record being processed.
248
- * @param array $recordarr Record data.
249
- *
250
- * @return array
251
- */
252
- public function check_records( $record_id, $recordarr ) {
253
- $args = array(
254
- 'post_type' => self::POST_TYPE,
255
- 'post_status' => 'wp_mainwp_stream_enabled',
256
- );
257
-
258
- $alerts = new \WP_Query( $args );
259
- foreach ( $alerts->posts as $alert ) {
260
- $alert = $this->get_alert( $alert->ID );
261
-
262
- $status = $alert->check_record( $record_id, $recordarr );
263
- if ( $status ) {
264
- $alert->send_alert( $record_id, $recordarr ); // @todo send_alert expects int, not array.
265
- }
266
- }
267
-
268
- return $recordarr;
269
-
270
- }
271
-
272
- /**
273
- * Register scripts for page load.
274
- *
275
- * @action admin_enqueue_scripts
276
- *
277
- * @return void
278
- */
279
- public function register_scripts() {
280
- $screen = get_current_screen();
281
- if ( 'edit-wp_mainwp_alerts' === $screen->id ) {
282
-
283
- $min = wp_mainwp_stream_min_suffix();
284
- wp_register_script( 'wp-mainwp-stream-alerts', $this->plugin->locations['url'] . 'ui/js/alerts.' . $min . 'js', array(
285
- 'wp-mainwp-stream-select2',
286
- 'jquery',
287
- 'inline-edit-post',
288
- ) );
289
-
290
- wp_localize_script(
291
- 'wp-mainwp-stream-alerts', 'streamAlerts',
292
- array(
293
- 'any' => __( 'Any', 'mainwp-child-reports' ),
294
- 'anyContext' => __( 'Any Context', 'mainwp-child-reports' ),
295
- )
296
- );
297
- wp_enqueue_script( 'wp-mainwp-stream-alerts' );
298
- wp_enqueue_style( 'wp-mainwp-stream-select2' );
299
- }
300
- }
301
-
302
- /**
303
- * Register custom post type.
304
- *
305
- * @action init
306
- *
307
- * @return void
308
- */
309
- public function register_post_type() {
310
- $labels = array(
311
- 'name' => _x( 'Alerts', 'post type general name', 'mainwp-child-reports' ),
312
- 'singular_name' => _x( 'Alert', 'post type singular name', 'mainwp-child-reports' ),
313
- 'menu_name' => _x( 'Alerts', 'admin menu', 'mainwp-child-reports' ),
314
- 'name_admin_bar' => _x( 'Alert', 'add new on admin bar', 'mainwp-child-reports' ),
315
- 'add_new' => _x( 'Add New', 'book', 'mainwp-child-reports' ),
316
- 'add_new_item' => __( 'Add New Alert', 'mainwp-child-reports' ),
317
- 'new_item' => __( 'New Alert', 'mainwp-child-reports' ),
318
- 'edit_item' => __( 'Edit Alert', 'mainwp-child-reports' ),
319
- 'view_item' => __( 'View Alert', 'mainwp-child-reports' ),
320
- 'all_items' => __( 'Alerts', 'mainwp-child-reports' ),
321
- 'search_items' => __( 'Search Alerts', 'mainwp-child-reports' ),
322
- 'parent_item_colon' => __( 'Parent Alerts:', 'mainwp-child-reports' ),
323
- 'not_found' => __( 'No alerts found.', 'mainwp-child-reports' ),
324
- 'not_found_in_trash' => __( 'No alerts found in Trash.', 'mainwp-child-reports' ),
325
- );
326
-
327
- $args = array(
328
- 'labels' => $labels,
329
- 'description' => __( 'Alerts for Stream.', 'mainwp-child-reports' ),
330
- 'public' => false,
331
- 'publicly_queryable' => false,
332
- 'exclude_from_search' => true,
333
- 'show_ui' => true,
334
- 'show_in_menu' => false, // @see modify_admin_menu
335
- 'supports' => false,
336
- 'capabilities' => array(
337
- 'publish_posts' => 'manage_options',
338
- 'edit_others_posts' => 'manage_options',
339
- 'delete_posts' => 'manage_options',
340
- 'delete_others_posts' => 'manage_options',
341
- 'read_private_posts' => 'manage_options',
342
- 'edit_post' => 'manage_options',
343
- 'delete_post' => 'manage_options',
344
- 'read_post' => 'manage_options',
345
- ),
346
- );
347
-
348
- register_post_type( self::POST_TYPE, $args );
349
-
350
- $args = array(
351
- 'label' => _x( 'Enabled', 'alert', 'mainwp-child-reports' ),
352
- 'public' => false,
353
- 'show_in_admin_all_list' => true,
354
- 'show_in_admin_status_list' => true,
355
- // translators: Placeholder refers to a number of items (e.g. "42")
356
- 'label_count' => _n_noop( 'Enabled <span class="count">(%s)</span>', 'Enabled <span class="count">(%s)</span>', 'mainwp-child-reports' ),
357
- );
358
-
359
- register_post_status( 'wp_mainwp_stream_enabled', $args );
360
-
361
- $args = array(
362
- 'label' => _x( 'Disabled', 'alert', 'mainwp-child-reports' ),
363
- 'public' => false,
364
- 'internal' => false,
365
- 'show_in_admin_all_list' => true,
366
- 'show_in_admin_status_list' => true,
367
- // translators: Placeholder refers to a number of items (e.g. "42")
368
- 'label_count' => _n_noop( 'Disabled <span class="count">(%s)</span>', 'Disabled <span class="count">(%s)</span>', 'mainwp-child-reports' ),
369
- );
370
-
371
- register_post_status( 'wp_mainwp_stream_disabled', $args );
372
- }
373
-
374
- /**
375
- * Return alert object of the given ID.
376
- *
377
- * @param string $post_id Post ID for the alert.
378
- *
379
- * @return Alert
380
- *
381
- * @uses \WP_MainWP_Stream\Alert
382
- */
383
- public function get_alert( $post_id = '' ) {
384
- if ( ! $post_id ) {
385
- $obj = new Alert( null, $this->plugin );
386
-
387
- return $obj;
388
- }
389
-
390
- $post = get_post( $post_id );
391
-
392
- $alert_type = get_post_meta( $post_id, 'alert_type', true );
393
- $alert_meta = get_post_meta( $post_id, 'alert_meta', true );
394
-
395
- $obj = (object) array(
396
- 'ID' => $post->ID,
397
- 'status' => $post->post_status,
398
- 'date' => $post->post_date,
399
- 'author' => $post->post_author,
400
- 'alert_type' => $alert_type,
401
- 'alert_meta' => $alert_meta,
402
- );
403
-
404
- return new Alert( $obj, $this->plugin );
405
-
406
- }
407
-
408
- /**
409
- * Add custom post type to menu.
410
- *
411
- * @action admin_menu
412
- *
413
- * @return void
414
- *
415
- * @deprecated DISABLED
416
- */
417
- public function register_menu() {
418
- add_submenu_page(
419
- $this->plugin->admin->records_page_slug,
420
- __( 'Alerts', 'mainwp-child-reports' ),
421
- __( 'Alerts', 'mainwp-child-reports' ),
422
- 'manage_options',
423
- 'edit.php?post_type=wp_mainwp_alerts'
424
- );
425
- }
426
-
427
- /**
428
- * Modify the Stream > Alerts Network Admin Menu link.
429
- *
430
- * In self::register_menu(), the Alerts submenu item
431
- * is essentially set to go to the Site's admin area.
432
- *
433
- * However, on the Network admin, we need to redirect
434
- * it to the first site in the network, as this is
435
- * where the true Network Alerts settings page is located.
436
- *
437
- * @action network_admin_menu
438
- * @return bool
439
- */
440
- public function change_menu_link_url() {
441
-
442
- /** @global object $submenu WordPress submenu array. */
443
- global $submenu;
444
-
445
- $parent = 'wp_mainwp_stream';
446
- $page = 'edit.php?post_type=wp_mainwp_alerts';
447
-
448
- // If we're not on the Stream menu item, return.
449
- if ( ! isset( $submenu[ $parent ] ) ) {
450
- return false;
451
- }
452
-
453
- // Get the first existing Site in the Network.
454
- $sites = wp_mainwp_stream_get_sites(
455
- array(
456
- 'limit' => 5, // Limit the size of the query.
457
- )
458
- );
459
-
460
- $site_id = '1';
461
-
462
- // Function wp_get_sites() can return an empty array if the network is too large.
463
- if ( ! empty( $sites ) && ! empty( $sites[0]->blog_id ) ) {
464
- $site_id = $sites[0]->blog_id;
465
- }
466
-
467
- $new_url = get_admin_url( $site_id, $page );
468
-
469
- foreach ( $submenu[ $parent ] as $key => $value ) {
470
- // Set correct URL for the menu item.
471
- if ( $page === $value[2] ) {
472
- // This hack is not kosher, see the docblock for an explanation.
473
- $submenu[ $parent ][ $key ][2] = $new_url; // override okay
474
- break;
475
- }
476
- }
477
-
478
- return true;
479
- }
480
-
481
- /**
482
- * Display Alert Type Meta Box.
483
- *
484
- * @param \WP_Post|array $post Post object for current alert.
485
- *
486
- * @return void
487
- *
488
- * @uses \WP_MainWP_Stream\Form_Generator
489
- */
490
- public function display_notification_box( $post = array() ) {
491
- $alert_type = 'none';
492
- if ( is_object( $post ) ) {
493
- $alert = $this->get_alert( $post->ID );
494
- $alert_type = $alert->alert_type;
495
- }
496
- $form = new Form_Generator();
497
-
498
- $field_html = $form->render_field(
499
- 'select', array(
500
- 'id' => 'wp_mainwp_stream_alert_type',
501
- 'name' => 'wp_mainwp_stream_alert_type',
502
- 'value' => $alert_type,
503
- 'options' => $this->get_notification_values(),
504
- 'placeholder' => __( 'No Alert', 'mainwp-child-reports' ),
505
- 'title' => 'Alert Type:',
506
- )
507
- );
508
-
509
- echo '<label>' . esc_html__( 'Alert me by', 'mainwp-child-reports' ) . '</label>';
510
- echo $field_html; // Xss ok.
511
-
512
- echo '<div id="wp_mainwp_stream_alert_type_form">';
513
- if ( is_object( $alert ) ) {
514
- $alert->get_alert_type_obj()->display_fields( $alert );
515
- } else {
516
- $this->plugin->alerts->alert_types['none']->display_fields( array() );
517
- }
518
-
519
- echo '</div>';
520
- }
521
-
522
- /**
523
- * Returns settings form HTML for AJAX use.
524
- *
525
- * @action wp_ajax_load_alerts_settings
526
- *
527
- * @return void
528
- */
529
- public function load_alerts_settings() {
530
- $alert = array();
531
- $post_id = wp_mainwp_stream_filter_input( INPUT_POST, 'post_id' );
532
- if ( ! empty( $post_id ) ) {
533
- $alert = $this->get_alert( $post_id );
534
- if ( ! $alert ) {
535
- wp_send_json_error(
536
- array(
537
- 'message' => 'Could not find alert.',
538
- )
539
- );
540
- }
541
- }
542
-
543
- $alert_type = wp_mainwp_stream_filter_input( INPUT_POST, 'alert_type' );
544
- if ( empty( $alert_type ) ) {
545
- $alert_type = 'none';
546
- }
547
- if ( ! array_key_exists( $alert_type, $this->alert_types ) ) {
548
- wp_send_json_error(
549
- array(
550
- 'message' => 'Could not find alert type.',
551
- )
552
- );
553
- }
554
-
555
- ob_start();
556
- $this->alert_types[ $alert_type ]->display_fields( $alert );
557
- $output = ob_get_contents();
558
- ob_end_clean();
559
-
560
- $data = array(
561
- 'html' => $output,
562
- );
563
- wp_send_json_success( $data );
564
- }
565
-
566
- /**
567
- * Display Trigger Meta Box.
568
- *
569
- * @param \WP_Post|array $post Post object for current alert.
570
- *
571
- * @return void
572
- *
573
- * @uses \WP_MainWP_Stream\Form_Generator
574
- */
575
- public function display_triggers_box( $post = array() ) {
576
- if ( is_object( $post ) ) {
577
- $alert = $this->get_alert( $post->ID );
578
- } else {
579
- $alert = array();
580
- }
581
- $form = new Form_Generator();
582
- do_action( 'wp_mainwp_stream_alert_trigger_form_display', $form, $alert );
583
- // @TODO use human readable text.
584
- echo '<label>' . esc_html__( 'Alert me when', 'mainwp-child-reports' ) . '</label>';
585
- echo $form->render_fields(); // Xss ok.
586
- wp_nonce_field( 'save_alert', 'wp_mainwp_alerts_nonce' );
587
- }
588
-
589
- /**
590
- * Display Submit Box.
591
- *
592
- * @param \WP_Post $post Post object for current alert.
593
- *
594
- * @return void
595
- */
596
- public function display_submit_box( $post ) {
597
- if ( empty( $post ) ) {
598
- return;
599
- }
600
-
601
- $post_status = $post->post_status;
602
- if ( 'auto-draft' === $post_status ) {
603
- $post_status = 'wp_mainwp_stream_enabled';
604
- }
605
- ?>
606
- <div class="submitbox" id="submitpost">
607
- <div id="minor-publishing">
608
- <div id="misc-publishing-actions">
609
- <div class="misc-pub-section misc-pub-post-status">
610
- <label for="wp_mainwp_stream_alert_status"><?php esc_html_e( 'Status', 'mainwp-child-reports' ); ?></label>
611
- <select name='wp_mainwp_stream_alert_status' id='wp_mainwp_stream_alert_status'>
612
- <option<?php selected( $post_status, 'wp_mainwp_stream_enabled' ); ?>
613
- value='wp_mainwp_stream_enabled'><?php esc_html_e( 'Enabled', 'mainwp-child-reports' ); ?></option>
614
- <option<?php selected( $post_status, 'wp_mainwp_stream_disabled' ); ?>
615
- value='wp_mainwp_stream_disabled'><?php esc_html_e( 'Disabled', 'mainwp-child-reports' ); ?></option>
616
- </select>
617
- </div>
618
- </div>
619
- <div class="clear"></div>
620
- </div>
621
-
622
- <div id="major-publishing-actions">
623
- <div id="delete-action">
624
- <?php
625
- if ( current_user_can( 'delete_post', $post->ID ) ) {
626
- if ( ! EMPTY_TRASH_DAYS ) {
627
- $delete_text = __( 'Delete Permanently', 'mainwp-child-reports' );
628
- } else {
629
- $delete_text = __( 'Move to Trash', 'mainwp-child-reports' );
630
- }
631
- ?>
632
- <a class="submitdelete deletion" href="<?php echo get_delete_post_link( $post->ID ); ?>">
633
- <?php esc_html( $delete_text ); ?>
634
- </a>
635
- <?php
636
- }
637
- ?>
638
- </div>
639
- <div id="publishing-action">
640
- <span class="spinner"></span>
641
- <?php submit_button( __( 'Save' ), 'primary button-large', 'publish', false ); ?>
642
- </div>
643
- <div class="clear"></div>
644
- </div>
645
- </div>
646
- <?php
647
- }
648
-
649
- /**
650
- * Display Status Box.
651
- *
652
- * @return void
653
- */
654
- public function display_status_box() {
655
- ?>
656
- <div id="minor-publishing">
657
- <div id="misc-publishing-actions">
658
- <div class="misc-pub-section misc-pub-post-status">
659
- <label for="wp_mainwp_stream_alert_status">
660
- <span class="title"><?php esc_html_e( 'Status:', 'mainwp-child-reports' ); ?></span>
661
- <span class="input-text-wrap">
662
- <select name='wp_mainwp_stream_alert_status' id='wp_mainwp_stream_alert_status'>
663
- <option selected value='wp_mainwp_stream_enabled'><?php esc_html_e( 'Enabled', 'mainwp-child-reports' ); ?></option>
664
- <option value='wp_mainwp_stream_disabled'><?php esc_html_e( 'Disabled', 'mainwp-child-reports' ); ?></option>
665
- </select>
666
- </span>
667
- </label>
668
- </div>
669
- </div>
670
- <div class="clear"></div>
671
- </div>
672
- <?php
673
- }
674
-
675
- /**
676
- * Return all notification values.
677
- *
678
- * @return array
679
- */
680
- public function get_notification_values() {
681
- $result = array();
682
- $names = wp_list_pluck( $this->alert_types, 'name', 'slug' );
683
- foreach ( $names as $slug => $name ) {
684
- $result[ $slug ] = $name;
685
- }
686
-
687
- return $result;
688
- }
689
-
690
- /**
691
- * Update actions dropdown options based on the connector selected.
692
- */
693
- public function get_actions() {
694
- $connector_name = wp_mainwp_stream_filter_input( INPUT_POST, 'connector' );
695
- $stream_connectors = wp_mainwp_stream_get_instance()->connectors;
696
- if ( ! empty( $connector_name ) ) {
697
- if ( isset( $stream_connectors->connectors[ $connector_name ] ) ) {
698
- $connector = $stream_connectors->connectors[ $connector_name ];
699
- if ( method_exists( $connector, 'get_action_labels' ) ) {
700
- $actions = $connector->get_action_labels();
701
- }
702
- }
703
- } else {
704
- $actions = $stream_connectors->term_labels['stream_action'];
705
- }
706
- ksort( $actions );
707
- wp_send_json_success( $actions );
708
- }
709
-
710
- /**
711
- * Save a new alert.
712
- *
713
- * @uses \WP_MainWP_Stream\Alert
714
- */
715
- public function save_new_alert() {
716
- check_ajax_referer( 'save_alert', 'wp_mainwp_alerts_nonce' );
717
- $trigger_author = wp_mainwp_stream_filter_input( INPUT_POST, 'wp_mainwp_stream_trigger_author' );
718
- $trigger_connector_and_context = wp_mainwp_stream_filter_input( INPUT_POST, 'wp_mainwp_stream_trigger_context' );
719
- if ( false !== strpos( $trigger_connector_and_context, '-' ) ) {
720
- // This is a connector with a context such as posts-post.
721
- $trigger_connector_and_context_split = explode( '-', $trigger_connector_and_context );
722
- $trigger_connector = $trigger_connector_and_context_split[0];
723
- $trigger_context = $trigger_connector_and_context_split[1];
724
- } else {
725
- if ( ! empty( $trigger_connector_and_context ) ) {
726
- // This is a parent connector with no dash such as posts.
727
- $trigger_connector = $trigger_connector_and_context;
728
- $trigger_context = '';
729
- } else {
730
- // There is no connector or context.
731
- $trigger_connector = '';
732
- $trigger_context = '';
733
- }
734
- }
735
-
736
- $trigger_action = wp_mainwp_stream_filter_input( INPUT_POST, 'wp_mainwp_stream_trigger_action' );
737
- $alert_type = wp_mainwp_stream_filter_input( INPUT_POST, 'wp_mainwp_stream_alert_type' );
738
- $alert_status = wp_mainwp_stream_filter_input( INPUT_POST, 'wp_mainwp_stream_alert_status' );
739
-
740
- // Insert the post into the database
741
- $item = (object) array(
742
- 'alert_type' => $alert_type,
743
- 'alert_meta' => array(
744
- 'trigger_author' => $trigger_author,
745
- 'trigger_connector' => $trigger_connector,
746
- 'trigger_action' => $trigger_action,
747
- 'trigger_context' => $trigger_context,
748
- ),
749
- 'alert_status' => $alert_status,
750
- );
751
- $alert = new Alert( $item, $this->plugin );
752
- $title = $alert->get_title();
753
- $post_id = wp_insert_post(
754
- array(
755
- 'post_status' => $alert_status,
756
- 'post_type' => 'wp_mainwp_alerts',
757
- 'post_title' => $title,
758
- )
759
- );
760
- if ( empty( $post_id ) ) {
761
- wp_send_json_error();
762
- }
763
- add_post_meta( $post_id, 'alert_type', $alert_type );
764
-
765
- $alert_meta = array(
766
- 'trigger_author' => $trigger_author,
767
- 'trigger_connector' => $trigger_connector,
768
- 'trigger_action' => $trigger_action,
769
- 'trigger_context' => $trigger_context,
770
- );
771
- $alert_meta = apply_filters( 'wp_mainwp_alerts_save_meta', $alert_meta, $alert_type );
772
- add_post_meta( $post_id, 'alert_meta', $alert_meta );
773
- wp_send_json_success(
774
- array(
775
- 'success' => true,
776
- )
777
- );
778
- }
779
-
780
- /**
781
- * Get new alert triggers notifications.
782
- */
783
- public function get_new_alert_triggers_notifications() {
784
- ob_start();
785
- ?>
786
- <fieldset class="inline-edit-col inline-edit-wp_mainwp_alerts inline-edit-add-new-triggers">
787
- <legend class="inline-edit-legend">Add New</legend>
788
- <?php $GLOBALS['wp_mainwp_stream']->alerts->display_triggers_box(); ?>
789
- </fieldset>
790
- <fieldset class="inline-edit-col inline-edit-wp_mainwp_alerts inline-edit-add-new-notifications">
791
- <?php $GLOBALS['wp_mainwp_stream']->alerts->display_notification_box(); ?>
792
- </fieldset>
793
- <fieldset class="inline-edit-col inline-edit-wp_mainwp_alerts inline-edit-add-new-status">
794
- <?php $GLOBALS['wp_mainwp_stream']->alerts->display_status_box(); ?>
795
- </fieldset>
796
- <?php
797
- $html = ob_get_clean();
798
- wp_send_json_success(
799
- array(
800
- 'success' => true,
801
- 'html' => $html,
802
- )
803
- );
804
- }
805
-
806
- /**
807
- * Add action links to Stream drop row in admin list screen.
808
- *
809
- * @filter wp_mainwp_stream_action_links_{connector}
810
- *
811
- * @param array $links Previous links registered
812
- * @param Record $record Stream record
813
- *
814
- * @return array Action links
815
- *
816
- * @uses \WP_MainWP_Stream\Connector_Posts
817
- */
818
- public function change_alert_action_links( $links, $record ) {
819
- $post = get_post( $record->object_id );
820
-
821
- if ( $post && self::POST_TYPE === $post->post_type && $post->post_status === $record->get_meta( 'new_status', true ) ) {
822
- if ( 'trash' !== $post->post_status ) {
823
- $connector_posts = new \WP_MainWP_Stream\Connector_Posts();
824
- $post_type_name = $connector_posts->get_post_type_name( get_post_type( $post->ID ) );
825
-
826
- // translators: Placeholder refers to the post type singular name (e.g. "Post")
827
- $links[ sprintf( esc_html_x( 'Edit %s', 'Post type singular name', 'mainwp-child-reports' ), $post_type_name ) ] = admin_url( 'edit.php?post_type=wp_mainwp_alerts#post-' . $post->ID );
828
- unset( $links[ esc_html__( 'View', 'mainwp-child-reports' ) ] );
829
- }
830
- }
831
-
832
- return $links;
833
- }
834
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
classes/class-db.php CHANGED
@@ -63,14 +63,6 @@ class DB {
63
  */
64
  $record = apply_filters( 'wp_mainwp_stream_record_array', $record );
65
 
66
- array_walk(
67
- $record, function( &$value, &$key ) {
68
- if ( ! is_array( $value ) ) {
69
- $value = strip_tags( $value );
70
- }
71
- }
72
- );
73
-
74
  if ( empty( $record ) ) {
75
  return false;
76
  }
63
  */
64
  $record = apply_filters( 'wp_mainwp_stream_record_array', $record );
65
 
 
 
 
 
 
 
 
 
66
  if ( empty( $record ) ) {
67
  return false;
68
  }
classes/class-filter-input.php CHANGED
@@ -5,43 +5,44 @@ namespace WP_MainWP_Stream;
5
 
6
  /**
7
  * Class Filter_Input.
 
8
  * @package WP_MainWP_Stream
9
  */
10
  class Filter_Input {
11
 
12
- /** @var array $filter_callbacks Array of filter callbacks. */
13
  public static $filter_callbacks = array(
14
- FILTER_DEFAULT => null,
15
  // Validate.
16
- FILTER_VALIDATE_BOOLEAN => 'is_bool',
17
- FILTER_VALIDATE_EMAIL => 'is_email',
18
- FILTER_VALIDATE_FLOAT => 'is_float',
19
- FILTER_VALIDATE_INT => 'is_int',
20
- FILTER_VALIDATE_IP => array( __CLASS__, 'is_ip_address' ),
21
- FILTER_VALIDATE_REGEXP => array( __CLASS__, 'is_regex' ),
22
- FILTER_VALIDATE_URL => 'wp_http_validate_url',
23
  // Sanitize.
24
- FILTER_SANITIZE_EMAIL => 'sanitize_email',
25
- FILTER_SANITIZE_ENCODED => 'esc_url_raw',
26
- FILTER_SANITIZE_NUMBER_FLOAT => 'floatval',
27
- FILTER_SANITIZE_NUMBER_INT => 'intval',
28
- FILTER_SANITIZE_SPECIAL_CHARS => 'htmlspecialchars',
29
- FILTER_SANITIZE_STRING => 'sanitize_text_field',
30
- FILTER_SANITIZE_URL => 'esc_url_raw',
31
  // Other.
32
- FILTER_UNSAFE_RAW => null,
33
  );
34
 
35
- /**
36
- * Input type checker.
37
- *
38
- * @param $type
39
- * @param $variable_name
40
- * @param null $filter
41
- * @param array $options
42
- * @return array|bool|mixed|null
43
- * @throws \Exception
44
- */
45
  public static function super( $type, $variable_name, $filter = null, $options = array() ) {
46
  $super = null;
47
 
@@ -75,15 +76,15 @@ class Filter_Input {
75
  return $var;
76
  }
77
 
78
- /**
79
- * Filter & sanitiser.
80
- *
81
- * @param $var
82
- * @param null $filter
83
- * @param array $options
84
- * @return array|bool|mixed|null
85
- * @throws \Exception
86
- */
87
  public static function filter( $var, $filter = null, $options = array() ) {
88
 
89
  // Default filter is a sanitizer, not validator
@@ -98,11 +99,11 @@ class Filter_Input {
98
  $filter_callback = self::$filter_callbacks[ $filter ];
99
  $result = call_user_func( $filter_callback, $var );
100
 
101
- /**
102
- * filter_var / filter_input treats validation/sanitization filters the same.
103
- * They both return output and change the var value, this shouldn't be the case here.
104
- * We'll do a boolean check on validation function, and let sanitizers change the value.
105
- */
106
  $filter_type = ( $filter < 500 ) ? 'validator' : 'sanitizer';
107
  if ( 'validator' === $filter_type ) { // Validation functions
108
  if ( ! $result ) {
@@ -132,12 +133,12 @@ class Filter_Input {
132
  return $var;
133
  }
134
 
135
- /**
136
- * Check if subject is equal to $var.
137
- *
138
- * @param string $var Pregmatch pattern.
139
- * @return bool Return FALSE if $test equals false.
140
- */
141
  public static function is_regex( $var ) {
142
  // @codingStandardsIgnoreStart
143
  $test = @preg_match( $var, '' );
@@ -146,13 +147,13 @@ class Filter_Input {
146
  return false !== $test;
147
  }
148
 
149
- /**
150
- * Check for IP address.
151
- *
152
- * @param string $var String to check for IP address.
153
- *
154
- * @return bool Return FASLE if not an IP address.
155
- */
156
  public static function is_ip_address( $var ) {
157
  return false !== \WP_Http::is_ip_address( $var );
158
  }
5
 
6
  /**
7
  * Class Filter_Input.
8
+ *
9
  * @package WP_MainWP_Stream
10
  */
11
  class Filter_Input {
12
 
13
+ /** @var array $filter_callbacks Array of filter callbacks. */
14
  public static $filter_callbacks = array(
15
+ FILTER_DEFAULT => null,
16
  // Validate.
17
+ FILTER_VALIDATE_BOOLEAN => 'is_bool',
18
+ FILTER_VALIDATE_EMAIL => 'is_email',
19
+ FILTER_VALIDATE_FLOAT => 'is_float',
20
+ FILTER_VALIDATE_INT => 'is_int',
21
+ FILTER_VALIDATE_IP => array( __CLASS__, 'is_ip_address' ),
22
+ FILTER_VALIDATE_REGEXP => array( __CLASS__, 'is_regex' ),
23
+ FILTER_VALIDATE_URL => 'wp_http_validate_url',
24
  // Sanitize.
25
+ FILTER_SANITIZE_EMAIL => 'sanitize_email',
26
+ FILTER_SANITIZE_ENCODED => 'esc_url_raw',
27
+ FILTER_SANITIZE_NUMBER_FLOAT => 'floatval',
28
+ FILTER_SANITIZE_NUMBER_INT => 'intval',
29
+ FILTER_SANITIZE_SPECIAL_CHARS => 'htmlspecialchars',
30
+ FILTER_SANITIZE_FULL_SPECIAL_CHARS => 'sanitize_text_field',
31
+ FILTER_SANITIZE_URL => 'esc_url_raw',
32
  // Other.
33
+ FILTER_UNSAFE_RAW => null,
34
  );
35
 
36
+ /**
37
+ * Input type checker.
38
+ *
39
+ * @param $type
40
+ * @param $variable_name
41
+ * @param null $filter
42
+ * @param array $options
43
+ * @return array|bool|mixed|null
44
+ * @throws \Exception
45
+ */
46
  public static function super( $type, $variable_name, $filter = null, $options = array() ) {
47
  $super = null;
48
 
76
  return $var;
77
  }
78
 
79
+ /**
80
+ * Filter & sanitiser.
81
+ *
82
+ * @param $var
83
+ * @param null $filter
84
+ * @param array $options
85
+ * @return array|bool|mixed|null
86
+ * @throws \Exception
87
+ */
88
  public static function filter( $var, $filter = null, $options = array() ) {
89
 
90
  // Default filter is a sanitizer, not validator
99
  $filter_callback = self::$filter_callbacks[ $filter ];
100
  $result = call_user_func( $filter_callback, $var );
101
 
102
+ /**
103
+ * filter_var / filter_input treats validation/sanitization filters the same.
104
+ * They both return output and change the var value, this shouldn't be the case here.
105
+ * We'll do a boolean check on validation function, and let sanitizers change the value.
106
+ */
107
  $filter_type = ( $filter < 500 ) ? 'validator' : 'sanitizer';
108
  if ( 'validator' === $filter_type ) { // Validation functions
109
  if ( ! $result ) {
133
  return $var;
134
  }
135
 
136
+ /**
137
+ * Check if subject is equal to $var.
138
+ *
139
+ * @param string $var Pregmatch pattern.
140
+ * @return bool Return FALSE if $test equals false.
141
+ */
142
  public static function is_regex( $var ) {
143
  // @codingStandardsIgnoreStart
144
  $test = @preg_match( $var, '' );
147
  return false !== $test;
148
  }
149
 
150
+ /**
151
+ * Check for IP address.
152
+ *
153
+ * @param string $var String to check for IP address.
154
+ *
155
+ * @return bool Return FASLE if not an IP address.
156
+ */
157
  public static function is_ip_address( $var ) {
158
  return false !== \WP_Http::is_ip_address( $var );
159
  }
classes/class-install.php CHANGED
@@ -516,7 +516,7 @@ class Install {
516
  user_id bigint(20) unsigned NOT NULL DEFAULT '0',
517
  user_role varchar(50) NOT NULL DEFAULT '',
518
  summary longtext NOT NULL,
519
- created datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
520
  connector varchar(100) NOT NULL,
521
  context varchar(100) NOT NULL,
522
  action varchar(100) NOT NULL,
516
  user_id bigint(20) unsigned NOT NULL DEFAULT '0',
517
  user_role varchar(50) NOT NULL DEFAULT '',
518
  summary longtext NOT NULL,
519
+ created datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
520
  connector varchar(100) NOT NULL,
521
  context varchar(100) NOT NULL,
522
  action varchar(100) NOT NULL,
classes/class-live-update.php CHANGED
@@ -5,11 +5,13 @@ namespace WP_MainWP_Stream;
5
 
6
  /**
7
  * Class Live_Update.
 
8
  * @package WP_MainWP_Stream
9
  */
10
  class Live_Update {
11
  /**
12
  * Hold Plugin class
 
13
  * @var Plugin
14
  */
15
  public $plugin;
@@ -54,9 +56,9 @@ class Live_Update {
54
  check_ajax_referer( $this->user_meta_key . '_nonce', 'nonce' );
55
 
56
  $input = array(
57
- 'checked' => FILTER_SANITIZE_STRING,
58
- 'user' => FILTER_SANITIZE_STRING,
59
- 'heartbeat' => FILTER_SANITIZE_STRING,
60
  );
61
 
62
  $input = filter_input_array( INPUT_POST, $input );
@@ -136,7 +138,7 @@ class Live_Update {
136
  /**
137
  * Sends Updated Actions to the List Table View
138
  *
139
- * @param int $last_time Timestamp of last update
140
  * @param array $args Query args
141
  *
142
  * @return array Array of recently updated items
@@ -187,7 +189,8 @@ class Live_Update {
187
 
188
  // Register list table
189
  $this->list_table = new List_Table(
190
- $this->plugin, array(
 
191
  'screen' => 'settings_page_' . $this->plugin->admin->records_page_slug,
192
  )
193
  );
5
 
6
  /**
7
  * Class Live_Update.
8
+ *
9
  * @package WP_MainWP_Stream
10
  */
11
  class Live_Update {
12
  /**
13
  * Hold Plugin class
14
+ *
15
  * @var Plugin
16
  */
17
  public $plugin;
56
  check_ajax_referer( $this->user_meta_key . '_nonce', 'nonce' );
57
 
58
  $input = array(
59
+ 'checked' => FILTER_SANITIZE_FULL_SPECIAL_CHARS, // FILTER_SANITIZE_STRING.
60
+ 'user' => FILTER_SANITIZE_FULL_SPECIAL_CHARS,
61
+ 'heartbeat' => FILTER_SANITIZE_FULL_SPECIAL_CHARS,
62
  );
63
 
64
  $input = filter_input_array( INPUT_POST, $input );
138
  /**
139
  * Sends Updated Actions to the List Table View
140
  *
141
+ * @param int $last_time Timestamp of last update
142
  * @param array $args Query args
143
  *
144
  * @return array Array of recently updated items
189
 
190
  // Register list table
191
  $this->list_table = new List_Table(
192
+ $this->plugin,
193
+ array(
194
  'screen' => 'settings_page_' . $this->plugin->admin->records_page_slug,
195
  )
196
  );
classes/class-network.php CHANGED
@@ -155,8 +155,7 @@ class Network {
155
  }
156
 
157
  remove_submenu_page( $this->plugin->admin->records_page_slug, 'wp_mainwp_stream_settings' );
158
- remove_submenu_page( $this->plugin->admin->records_page_slug, 'edit.php?post_type=wp_mainwp_alerts' );
159
-
160
  $this->plugin->admin->screen_id['network_settings'] = add_submenu_page(
161
  $this->plugin->admin->records_page_slug,
162
  __( 'Reports Network Settings', 'mainwp-child-reports' ),
155
  }
156
 
157
  remove_submenu_page( $this->plugin->admin->records_page_slug, 'wp_mainwp_stream_settings' );
158
+
 
159
  $this->plugin->admin->screen_id['network_settings'] = add_submenu_page(
160
  $this->plugin->admin->records_page_slug,
161
  __( 'Reports Network Settings', 'mainwp-child-reports' ),
classes/class-plugin.php CHANGED
@@ -18,12 +18,6 @@ class Plugin {
18
  /** @var \WP_MainWP_Stream\Admin Admin class. */
19
  public $admin;
20
 
21
- /** @var \WP_MainWP_Stream\Alerts Alerts class. */
22
- public $alerts;
23
-
24
- /** @var \WP_MainWP_Stream\Alerts_List Alerts_List class. */
25
- public $alerts_list;
26
-
27
  /** @var \WP_MainWP_Stream\Connectors Connectors class. */
28
  public $connectors;
29
 
@@ -171,17 +165,12 @@ class Plugin {
171
  *
172
  * @action init
173
  *
174
- * @uses \WP_MainWP_Stream\Alerts
175
- * @uses \WP_MainWP_Stream\Alerts_List
176
  * @uses \WP_MainWP_Stream\Connectors
177
  * @uses \WP_MainWP_Stream\Settings
178
  */
179
  public function init() {
180
  $this->settings = new Settings( $this );
181
- $this->connectors = new Connectors( $this );
182
- $this->alerts = new Alerts( $this );
183
- $this->alerts_list = new Alerts_List( $this );
184
-
185
  }
186
 
187
  /**
18
  /** @var \WP_MainWP_Stream\Admin Admin class. */
19
  public $admin;
20
 
 
 
 
 
 
 
21
  /** @var \WP_MainWP_Stream\Connectors Connectors class. */
22
  public $connectors;
23
 
165
  *
166
  * @action init
167
  *
 
 
168
  * @uses \WP_MainWP_Stream\Connectors
169
  * @uses \WP_MainWP_Stream\Settings
170
  */
171
  public function init() {
172
  $this->settings = new Settings( $this );
173
+ $this->connectors = new Connectors( $this );
 
 
 
174
  }
175
 
176
  /**
classes/class-settings.php CHANGED
@@ -367,44 +367,28 @@ class Settings {
367
  'default' => 0,
368
  'sticky' => 'bottom',
369
  ),
370
- // array(
371
- // 'name' => 'convert_old_data',
372
- // 'title' => esc_html__( 'Convert Old Data', 'mainwp-child-reports' ),
373
- // 'type' => 'link',
374
- // 'href' => add_query_arg(
375
- // array(
376
- // 'action' => 'wp_mainwp_stream_convert',
377
- // 'wp_mainwp_stream_nonce_convert' => wp_create_nonce( 'stream_nonce_convert' ),
378
- // ),
379
- // admin_url( 'admin-ajax.php' )
380
- // ),
381
- // 'class' => 'warning',
382
- // 'desc' => esc_html__( 'Warning: This will convert old data.', 'mainwp-child-reports' ),
383
- // 'default' => 0,
384
- // 'sticky' => 'bottom',
385
- // ),
386
  ),
387
  ),
388
  );
389
 
390
- if ( isset( $_GET['try_repair'] ) && $_GET['try_repair'] == 'yes') {
391
- $repair_data = array(
392
- 'name' => 'try_repair',
393
- 'title' => esc_html__( 'Repair Data', 'mainwp-child-reports' ),
394
  'type' => 'link',
395
  'href' => add_query_arg(
396
  array(
397
- 'action' => 'wp_mainwp_stream_try_repair',
398
- 'wp_mainwp_stream_nonce_try_repair' => wp_create_nonce( 'mainwp_stream_nonce_repair' )
399
  ),
400
  admin_url( 'admin-ajax.php' )
401
  ),
402
  'class' => 'warning',
403
- 'desc' => '',
404
  'default' => 0,
405
  'sticky' => 'bottom',
406
  );
407
- array_push( $fields['advanced']['fields'], $repair_data );
408
  }
409
 
410
  // If Akismet is active, allow Admins to opt-in to Akismet tracking
@@ -488,6 +472,13 @@ class Settings {
488
  );
489
  }
490
 
 
 
 
 
 
 
 
491
  /**
492
  * Iterate through registered fields and extract default values
493
  *
@@ -1170,7 +1161,7 @@ class Settings {
1170
  $ttl_before = isset( $old_value['general_records_ttl'] ) ? (int) $old_value['general_records_ttl'] : - 1;
1171
  $ttl_after = isset( $new_value['general_records_ttl'] ) ? (int) $new_value['general_records_ttl'] : - 1;
1172
 
1173
- if ( $ttl_after < $ttl_before ) {
1174
  /**
1175
  * Action assists in purging when TTL is shortened
1176
  */
367
  'default' => 0,
368
  'sticky' => 'bottom',
369
  ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
370
  ),
371
  ),
372
  );
373
 
374
+ if ( isset( $_GET['try_uninstall'] ) && $_GET['try_uninstall'] == 'yes') {
375
+ $uninstall_data = array(
376
+ 'name' => 'wp_mainwp_stream_uninstall',
377
+ 'title' => esc_html__( 'Uninstall ' . $branding_name . ' Reports Database', 'mainwp-child-reports' ),
378
  'type' => 'link',
379
  'href' => add_query_arg(
380
  array(
381
+ 'action' => 'wp_mainwp_stream_uninstall',
382
+ 'wp_mainwp_stream_nonce' => wp_create_nonce( 'stream_nonce' ),
383
  ),
384
  admin_url( 'admin-ajax.php' )
385
  ),
386
  'class' => 'warning',
387
+ 'desc' => esc_html__( 'Warning: This will Uninstall all reports data from the database.', 'mainwp-child-reports' ),
388
  'default' => 0,
389
  'sticky' => 'bottom',
390
  );
391
+ array_push( $fields['advanced']['fields'], $uninstall_data );
392
  }
393
 
394
  // If Akismet is active, allow Admins to opt-in to Akismet tracking
472
  );
473
  }
474
 
475
+
476
+ public function get_delete_logs_by_select() {
477
+ return array(
478
+
479
+ );
480
+ }
481
+
482
  /**
483
  * Iterate through registered fields and extract default values
484
  *
1161
  $ttl_before = isset( $old_value['general_records_ttl'] ) ? (int) $old_value['general_records_ttl'] : - 1;
1162
  $ttl_after = isset( $new_value['general_records_ttl'] ) ? (int) $new_value['general_records_ttl'] : - 1;
1163
 
1164
+ if ( $ttl_after != $ttl_before ) {
1165
  /**
1166
  * Action assists in purging when TTL is shortened
1167
  */
connectors/class-connector-installer.php CHANGED
@@ -188,6 +188,11 @@ class Connector_Installer extends Connector {
188
 
189
  $logs[] = compact( 'slug', 'name', 'version', 'message', 'action' );
190
  } elseif ( 'update' === $action ) {
 
 
 
 
 
191
  $action = 'updated';
192
  // translators: Placeholders refer to a plugin/theme type, a plugin/theme name, and a plugin/theme version (e.g. "plugin", "Stream", "4.2").
193
  $message = _x(
188
 
189
  $logs[] = compact( 'slug', 'name', 'version', 'message', 'action' );
190
  } elseif ( 'update' === $action ) {
191
+
192
+ if ( is_object( $upgrader ) && property_exists( $upgrader, 'skin' ) && 'Automatic_Upgrader_Skin' == get_class( $upgrader->skin ) ) {
193
+ return false;
194
+ }
195
+
196
  $action = 'updated';
197
  // translators: Placeholders refer to a plugin/theme type, a plugin/theme name, and a plugin/theme version (e.g. "plugin", "Stream", "4.2").
198
  $message = _x(
connectors/class-connector-mainwp-sucuri.php CHANGED
@@ -100,7 +100,7 @@ class Connector_MainWP_Sucuri extends Connector {
100
  $scan_status = 'failed';
101
  }
102
 
103
- $scan_result = maybe_unserialize( base64_decode( $data ) );
104
  $status = $webtrust = '';
105
  if ( is_array( $scan_result ) ) {
106
  $status = isset( $scan_result['status'] ) ? $scan_result['status'] : '';
100
  $scan_status = 'failed';
101
  }
102
 
103
+ $scan_result = json_decode( base64_decode( $data ), true );
104
  $status = $webtrust = '';
105
  if ( is_array( $scan_result ) ) {
106
  $status = isset( $scan_result['status'] ) ? $scan_result['status'] : '';
connectors/class-connector-widgets.php CHANGED
@@ -300,8 +300,9 @@ class Connector_Widgets extends Connector {
300
  * @return void
301
  */
302
  protected function handle_widget_removal( $old, $new ) {
303
- $all_old_widget_ids = array_unique( call_user_func_array( 'array_merge', $old ) );
304
- $all_new_widget_ids = array_unique( call_user_func_array( 'array_merge', $new ) );
 
305
  // @todo In the customizer, moving widgets to other sidebars is problematic because each sidebar is registered as a separate setting; so we need to make sure that all $_POST['customized'] are applied?
306
  // @todo The widget option is getting updated before the sidebars_widgets are updated, so we need to hook into the option update to try to cache any deletions for future lookup
307
 
@@ -360,8 +361,10 @@ class Connector_Widgets extends Connector {
360
  * @return void
361
  */
362
  protected function handle_widget_addition( $old, $new ) {
363
- $all_old_widget_ids = array_unique( call_user_func_array( 'array_merge', $old ) );
364
- $all_new_widget_ids = array_unique( call_user_func_array( 'array_merge', $new ) );
 
 
365
  $added_widget_ids = array_diff( $all_new_widget_ids, $all_old_widget_ids );
366
 
367
  foreach ( $added_widget_ids as $widget_id ) {
300
  * @return void
301
  */
302
  protected function handle_widget_removal( $old, $new ) {
303
+ $all_old_widget_ids = array_unique( call_user_func_array( 'array_merge', array_values( $old ) ) );
304
+ $all_new_widget_ids = array_unique( call_user_func_array( 'array_merge', array_values( $new ) ) );
305
+
306
  // @todo In the customizer, moving widgets to other sidebars is problematic because each sidebar is registered as a separate setting; so we need to make sure that all $_POST['customized'] are applied?
307
  // @todo The widget option is getting updated before the sidebars_widgets are updated, so we need to hook into the option update to try to cache any deletions for future lookup
308
 
361
  * @return void
362
  */
363
  protected function handle_widget_addition( $old, $new ) {
364
+
365
+ $all_old_widget_ids = array_unique( call_user_func_array( 'array_merge', array_values( $old ) ) );
366
+ $all_new_widget_ids = array_unique( call_user_func_array( 'array_merge', array_values( $new ) ) );
367
+
368
  $added_widget_ids = array_diff( $all_new_widget_ids, $all_old_widget_ids );
369
 
370
  foreach ( $added_widget_ids as $widget_id ) {
includes/db-updates.php CHANGED
@@ -5,308 +5,6 @@
5
  * To fix meta data.
6
  */
7
 
8
- /**
9
- * MainWP WP Stream Database Update Version 3.5.2
10
- *
11
- * @param string $db_version New Database version.
12
- * @param string $current_version Current Database version.
13
- *
14
- * @return string $current_version Current WP Stream Database version.
15
- */
16
- function wp_mainwp_stream_update_auto_352( $db_version, $current_version ) {
17
-
18
- /** @global object $wpdb WordPress Database objcet. */
19
- global $wpdb;
20
-
21
- $first_correct = $wpdb->get_results(
22
- " SELECT sm.record_id, sm.meta_id
23
- FROM {$wpdb->prefix}mainwp_stream as s
24
- LEFT JOIN {$wpdb->prefix}mainwp_stream_meta as sm
25
- ON s.ID = sm.record_id
26
- where sm.meta_key = 'user_meta'
27
- ORDER BY s.ID ASC LIMIT 1 "
28
- );
29
-
30
- $first_correct_record_id = 0;
31
- if ( $first_correct ) {
32
- $first_correct = current( $first_correct );
33
- $first_correct_record_id = $first_correct->record_id;
34
- }
35
-
36
- if ( empty( $first_correct_record_id ) ) {
37
- return; // this is correct conversion
38
- }
39
-
40
- // First get correct meta id.
41
- $sql = $wpdb->prepare(
42
- "SELECT * FROM {$wpdb->base_prefix}mainwp_stream_meta
43
- WHERE record_id = %d ORDER BY meta_id ASC LIMIT 1",
44
- $first_correct_record_id
45
- );
46
-
47
- $first_correct_meta_id = 0;
48
-
49
- $correct_meta = $wpdb->get_results( $sql );
50
- if ( $correct_meta ) {
51
- $correct_meta = current( $correct_meta );
52
- $first_correct_meta_id = $correct_meta->meta_id;
53
- }
54
-
55
- //$date = new DateTime( '2019-8-31 23:59:59', $timezone = new DateTimeZone( 'UTC' ) ); // fixed value, around 3 months ago
56
- //$where = " AND ( `created` > STR_TO_DATE(" . $wpdb->prepare('%s', $date->format( 'Y-m-d H:i:s' )) . ", '%Y-%m-%d %H:%i:%s') ) ";
57
- $where = " AND ID < " . intval( $first_correct_record_id );
58
- $orderby = ' ORDER BY ID DESC '; // DESC importance
59
-
60
- $starting_row = 0;
61
- $rows_per_round = 5000;
62
-
63
- $stream_entries = $wpdb->get_results( "SELECT * FROM {$wpdb->base_prefix}mainwp_stream WHERE 1 = 1 " .
64
- $where . $orderby . $wpdb->prepare( " LIMIT %d, %d", $starting_row, $rows_per_round ) );
65
- $stop = false;
66
-
67
- $fix_what = array(
68
- 'plugin_updated',
69
- 'plugin_activated_deactivated',
70
- 'theme_updated',
71
- 'theme_activated_deactivated',
72
- 'wordpress_update',
73
- 'post_page',
74
- 'mainwp_backups',
75
- 'wordfence_scan',
76
- 'sucuri_scan'
77
- );
78
-
79
- while ( ! empty( $stream_entries ) ) {
80
-
81
- foreach( $fix_what as $fix_value ) {
82
- $correct_meta_id = $first_correct_meta_id;
83
-
84
- foreach ( $stream_entries as $entry ) {
85
-
86
- if ( $fix_value == 'plugin_updated' ) {
87
- if ( $entry->connector != 'installer' || $entry->context != 'plugins' || $entry->action !== 'updated') {
88
- continue; // next entry
89
- }
90
- } else if ( $fix_value == 'plugin_activated_deactivated' ) {
91
- if ( $entry->connector != 'installer' || $entry->context != 'plugins' || ( $entry->action !== 'activated' && $entry->action !== 'deactivated' ) ) {
92
- continue; // next entry
93
- }
94
- } else if ( $fix_value == 'theme_updated' ) {
95
- if ( $entry->connector != 'installer' || $entry->context !== 'themes' || $entry->action !== 'updated' ) {
96
- continue; // next entry
97
- }
98
- } else if ( $fix_value == 'theme_activated_deactivated' ) {
99
- if ( $entry->connector != 'installer' || $entry->context != 'themes' || ( $entry->action !== 'activated' && $entry->action !== 'deactivated' ) ) {
100
- continue; // next entry
101
- }
102
- } else if ($fix_value == 'wordpress_update') {
103
- if ( $entry->connector != 'installer' || $entry->context !== 'wordpress' || $entry->action != 'updated' ) {
104
- continue; // next entry
105
- }
106
- } else if ($fix_value == 'post_page') {
107
- if ( $entry->connector != 'posts' || ( $entry->context !== 'post' && $entry->context !== 'page' ) ) {
108
- continue; // next entry
109
- }
110
- } else if ($fix_value == 'mainwp_backups') {
111
- if ( $entry->connector != 'mainwp_backups' || $entry->context != 'backups' ) {
112
- continue; // next entry
113
- }
114
- } else if ($fix_value == 'wordfence_scan') {
115
- if ( $entry->context !== 'wordfence_scan' ) {
116
- continue; // next entry
117
- }
118
- } else if ($fix_value == 'sucuri_scan') {
119
- if ( $entry->context !== 'sucuri_scan' ) {
120
- continue; // next entry
121
- }
122
- }
123
-
124
- $fix_next_type = false;
125
-
126
- // loop meta records
127
- while ( true ) {
128
-
129
- $fix_next_entry = false;
130
-
131
- $sql = $wpdb->prepare(
132
- "SELECT * FROM {$wpdb->base_prefix}mainwp_stream_meta
133
- WHERE meta_id < %d ORDER BY meta_id DESC LIMIT 20", // get 20 meta items to fix
134
- $correct_meta_id
135
- );
136
-
137
- $incorrect_metas = $wpdb->get_results( $sql );
138
-
139
- if ( empty( $incorrect_metas ) ) {
140
-
141
- // valid meta, fix next type
142
- $fix_next_type = true;
143
- break;
144
- }
145
-
146
- foreach( $incorrect_metas as $incorr) {
147
- // guess to fix record_id
148
- $update_it = false;
149
- if ( $fix_value == 'plugin_updated' ) {
150
- if ( $incorr->meta_key == 'type' && $incorr->meta_value === 'plugin') {
151
- $update_it = true;
152
- }
153
- } else if ( $fix_value == 'plugin_activated_deactivated' ) {
154
- if ( $incorr->meta_key == 'type' && $incorr->meta_value === 'plugin') {
155
- $update_it = true;
156
- }
157
- } else if ( $fix_value == 'theme_updated' ) {
158
- if ( $incorr->meta_key == 'type' && $incorr->meta_value === 'theme' ) {
159
- $update_it = true;
160
- }
161
- } else if ( $fix_value == 'theme_activated_deactivated' ) {
162
- if ( $incorr->meta_key == 'type' && $incorr->meta_value === 'theme') {
163
- $update_it = true;
164
- }
165
- } else if ($fix_value == 'wordpress_update') {
166
- if ( $incorr->meta_key == 'auto_updated' ) {
167
- $update_it = true;
168
- }
169
- } else if ($fix_value == 'post_page') {
170
- if ( $incorr->meta_key == 'singular_name' && ( $incorr->meta_value == 'page' || $incorr->meta_value == 'post' ) ) {
171
- $update_it = true;
172
- }
173
- } else if ($fix_value == 'mainwp_backups') {
174
- if ( $incorr->meta_key == 'backup_time' ) {
175
- $update_it = true;
176
- }
177
- } else if ($fix_value == 'wordfence_scan') {
178
- if ( $incorr->meta_key == 'result' && strpos( $incorr->meta_value, 'SUM_FINAL' ) !== false ) {
179
- $update_it = true;
180
- }
181
- } else if ($fix_value == 'sucuri_scan') {
182
- if ( $incorr->meta_key == 'scan_status' ) {
183
- $update_it = true;
184
- }
185
- }
186
-
187
- // it's ok
188
- $correct_meta_id -= 1;
189
-
190
- if ( $update_it ) {
191
-
192
- $sql = $wpdb->prepare(
193
- "SELECT * FROM {$wpdb->base_prefix}mainwp_stream_meta
194
- WHERE record_id = %d AND meta_id < %d ",
195
- $incorr->record_id, $incorr->meta_id + 10 // + 10 to sure it does not update fixed meta
196
- );
197
-
198
- $fix_metas = $wpdb->get_results( $sql );
199
-
200
- if ( $fix_metas ) {
201
- // verify one more time
202
- if ( $fix_value == 'plugin_activated_deactivated' || $fix_value == 'theme_activated_deactivated' ) {
203
- if ( count($fix_metas) > 3 )
204
- continue;
205
- }
206
-
207
- if ( count($fix_metas) > 20 ) //not valid
208
- continue;
209
-
210
- $fixed_ids = array();
211
- foreach( $fix_metas as $item ) {
212
- $fixed_ids[] = $item->meta_id;
213
- }
214
-
215
- if ($fixed_ids) {
216
- $wpdb->query( 'UPDATE ' . $wpdb->base_prefix . 'mainwp_stream_meta' . ' SET record_id=' . $entry->ID . ' WHERE meta_id IN (' . implode( ",", $fixed_ids) . ')');
217
- }
218
- }
219
-
220
- // found the correct meta so go to fix next entry
221
- $fix_next_entry = true;
222
- break;
223
- }
224
- }
225
-
226
- $wpdb->flush();
227
-
228
- if ( $fix_next_entry )
229
- break;
230
-
231
- }
232
-
233
- if ( $fix_next_type ) {
234
- break; // to fix next type
235
- }
236
- }
237
- }
238
-
239
- $starting_row += $rows_per_round;
240
- if ( !$stop )
241
- $stream_entries = $wpdb->get_results( "SELECT * FROM {$wpdb->base_prefix}mainwp_stream WHERE 1 = 1 " . $where . $orderby . $wpdb->prepare( "LIMIT %d, %d", $starting_row, $rows_per_round ) );
242
- }
243
-
244
- return $current_version;
245
- }
246
-
247
- /**
248
- * Version 3.5.0
249
- *
250
- * To fix connector.
251
- *
252
- * @param string $db_version
253
- * @param string $current_version
254
- *
255
- * @return string
256
- */
257
- function wp_mainwp_stream_update_auto_350($db_version, $current_version ) {
258
-
259
- /** @global object $wpdb WordPress Database objcet. */
260
- global $wpdb;
261
-
262
- $stream_entries = $wpdb->get_results( "SELECT * FROM {$wpdb->base_prefix}mainwp_stream" );
263
- foreach ( $stream_entries as $entry ) {
264
- $connector = $entry->connector;
265
- $context = $entry->context;
266
- $action = $entry->action;
267
-
268
- if ( in_array( $connector, array('updraftplus_backups', 'backupbuddy_backups', 'backupwordpress_backups', 'backwpup_backups', 'wptimecapsule_backups') )) {
269
- $context = 'backups';
270
- $action = rtrim($connector, 's');
271
- $connector = 'mainwp_backups';
272
- }
273
- else if ($connector == 'mainwp_maintenance')
274
- {
275
- $action = 'maintenance';
276
- $context = 'mainwp_maintenance';
277
- }
278
- else if ($connector == 'mainwp_sucuri')
279
- {
280
- $action = 'sucuri_scan';
281
- $context = 'sucuri_scan';
282
- }
283
- else if ($connector == 'wordfence_scan')
284
- {
285
- $action = 'wordfence_scan';
286
- $context = 'wordfence_scan';
287
- $connector = 'mainwp_wordfence';
288
- }
289
- else
290
- {
291
- continue;
292
- }
293
-
294
- $wpdb->update(
295
- $wpdb->base_prefix . 'mainwp_stream', array(
296
- 'connector' => $connector,
297
- 'context' => $context,
298
- 'action' => $action,
299
- ), array(
300
- 'ID' => $entry->ID,
301
- )
302
- );
303
-
304
- }
305
-
306
- return $current_version;
307
-
308
- }
309
-
310
  /**
311
  * Version 3.0.8
312
  *
@@ -324,120 +22,3 @@ function wp_mainwp_stream_update_auto_308( $db_version, $current_version ) {
324
  return $current_version;
325
  }
326
 
327
- /**
328
- * Version 3.0.2
329
- *
330
- * @param string $db_version
331
- * @param string $current_version
332
- *
333
- * @return string
334
- */
335
- function wp_mainwp_stream_update_302( $db_version, $current_version ) {
336
-
337
- /** @global object $wpdb WordPress Database objcet. */
338
- global $wpdb;
339
-
340
- $stream_entries = $wpdb->get_results( "SELECT * FROM {$wpdb->base_prefix}mainwp_stream" );
341
- foreach ( $stream_entries as $entry ) {
342
- $class = 'Connector_' . $entry->context;
343
- if ( class_exists( $class ) ) {
344
- $connector = new $class();
345
- $wpdb->update(
346
- $wpdb->base_prefix . 'mainwp_stream', array(
347
- 'connector' => $connector->name,
348
- ), array(
349
- 'ID' => $entry->ID,
350
- )
351
- );
352
- } else {
353
- $wpdb->update(
354
- $wpdb->base_prefix . 'mainwp_stream', array(
355
- 'connector' => strtolower( $entry->connector ),
356
- ), array(
357
- 'ID' => $entry->ID,
358
- )
359
- );
360
- }
361
- }
362
-
363
- return $current_version;
364
- }
365
-
366
- /**
367
- * Version 3.0.0
368
- *
369
- * Update from 1.4.9
370
- *
371
- * @param string $db_version
372
- * @param string $current_version
373
- *
374
- * @return string
375
- */
376
- function wp_mainwp_stream_update_auto_300( $db_version, $current_version ) {
377
-
378
- /** @global object $wpdb WordPress Database objcet. */
379
- global $wpdb;
380
-
381
- // Get only the author_meta values that are double-serialized
382
- $wpdb->query( "RENAME TABLE {$wpdb->base_prefix}mainwp_stream TO {$wpdb->base_prefix}mainwp_stream_tmp, {$wpdb->base_prefix}mainwp_stream_context TO {$wpdb->base_prefix}mainwp_stream_context_tmp" );
383
-
384
- $plugin = wp_mainwp_stream_get_instance();
385
- $plugin->install->install( $current_version );
386
-
387
- $date = new DateTime( '2019-8-31 23:59:59', $timezone = new DateTimeZone( 'UTC' ) ); // fixed value, around 3 months ago
388
-
389
- $where = " AND `created` > STR_TO_DATE(" . $wpdb->prepare('%s', $date->format( 'Y-m-d H:i:s' )) . ", '%Y-%m-%d %H:%i:%s') ";
390
- $orderby = ' ORDER BY ID ASC '; // ASC importance
391
-
392
- $starting_row = 0;
393
- $rows_per_round = 5000;
394
-
395
- $stream_entries = $wpdb->get_results( "SELECT * FROM {$wpdb->base_prefix}mainwp_stream_tmp WHERE 1 = 1 " . $where . $orderby . $wpdb->prepare( " LIMIT %d, %d", $starting_row, $rows_per_round ) );
396
-
397
- while ( ! empty( $stream_entries ) ) {
398
- foreach ( $stream_entries as $entry ) {
399
- $context = $wpdb->get_row(
400
- $wpdb->prepare( "SELECT * FROM {$wpdb->base_prefix}mainwp_stream_context_tmp WHERE record_id = %s LIMIT 1", $entry->ID )
401
- );
402
-
403
- if (empty($context)) {
404
- continue;
405
- }
406
-
407
- $new_entry = array(
408
- 'site_id' => $entry->site_id,
409
- 'blog_id' => $entry->blog_id,
410
- 'user_id' => $entry->author,
411
- 'user_role' => $entry->author_role,
412
- 'summary' => $entry->summary,
413
- 'created' => $entry->created,
414
- 'connector' => $context->connector,
415
- 'context' => $context->context,
416
- 'action' => $context->action,
417
- 'ip' => $entry->ip,
418
- );
419
-
420
- if ( $entry->object_id && 0 !== $entry->object_id ) {
421
- $new_entry['object_id'] = $entry->object_id;
422
- }
423
-
424
- $wpdb->insert( $wpdb->base_prefix . 'mainwp_stream', $new_entry );
425
-
426
- if ( $new_insert_id = $wpdb->insert_id ) {
427
- $wpdb->update(
428
- $wpdb->base_prefix . 'mainwp_stream_meta', array(
429
- 'record_id' => $new_insert_id,
430
- ), array(
431
- 'record_id' => $entry->ID,
432
- )
433
- );
434
- }
435
- }
436
-
437
- $starting_row += $rows_per_round;
438
-
439
- $stream_entries = $wpdb->get_results( "SELECT * FROM {$wpdb->base_prefix}mainwp_stream_tmp WHERE 1 = 1 " . $where . $orderby . $wpdb->prepare( "LIMIT %d, %d", $starting_row, $rows_per_round ) );
440
- }
441
- //$wpdb->query( "DROP TABLE {$wpdb->base_prefix}mainwp_stream_tmp, {$wpdb->base_prefix}mainwp_stream_context_tmp" );
442
- return $current_version;
443
- }
5
  * To fix meta data.
6
  */
7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  /**
9
  * Version 3.0.8
10
  *
22
  return $current_version;
23
  }
24
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/functions.php CHANGED
@@ -41,8 +41,8 @@ function wp_mainwp_stream_filter_var( $var, $filter = null, $options = array() )
41
  * Converts a time into an ISO 8601 extended formatted string.
42
  *
43
  * @param int|bool $time Seconds since unix epoc
44
- * @param int $offset Hour offset
45
- * @param bool $mysql_date_string Whether to use mysql date string.
46
  *
47
  * @return string an ISO 8601 extended formatted time
48
  * @throws Exception Error message.
@@ -58,7 +58,7 @@ function wp_mainwp_stream_get_iso_8601_extended_date( $time = false, $offset = 0
58
  $offset_string = sprintf( 'Etc/GMT%s%d', $offset < 0 ? '+' : '-', abs( $offset ) );
59
 
60
  $timezone = new DateTimeZone( $offset_string );
61
- $date = new DateTime( gmdate( 'Y-m-d H:i:s.' . $micro_seconds, $microtime ), $timezone );
62
 
63
  if ( $mysql_date_string ) {
64
  return $date->format( 'Y-m-d H:i:s' );
@@ -71,8 +71,8 @@ function wp_mainwp_stream_get_iso_8601_extended_date( $time = false, $offset = 0
71
  * Encode to JSON in a way that is also backwards compatible.
72
  *
73
  * @param mixed $data
74
- * @param int $options (optional)
75
- * @param int $depth (optional)
76
  *
77
  * @return string
78
  */
@@ -148,17 +148,3 @@ function wp_mainwp_stream_is_cron_enabled() {
148
  function wp_mainwp_stream_is_cron_doing() {
149
  return ( defined( 'DOING_CRON' ) && DOING_CRON ) ? true : false;
150
  }
151
-
152
- /**
153
- * Get the asset min suffix if defined.
154
- *
155
- * @return string
156
- */
157
- function wp_mainwp_stream_min_suffix() {
158
- $min = '';
159
- // if ( ! defined( 'SCRIPT_DEBUG' ) || false === SCRIPT_DEBUG ) {
160
- // $min = 'min.';
161
- // }
162
-
163
- return $min;
164
- }
41
  * Converts a time into an ISO 8601 extended formatted string.
42
  *
43
  * @param int|bool $time Seconds since unix epoc
44
+ * @param int $offset Hour offset
45
+ * @param bool $mysql_date_string Whether to use mysql date string.
46
  *
47
  * @return string an ISO 8601 extended formatted time
48
  * @throws Exception Error message.
58
  $offset_string = sprintf( 'Etc/GMT%s%d', $offset < 0 ? '+' : '-', abs( $offset ) );
59
 
60
  $timezone = new DateTimeZone( $offset_string );
61
+ $date = new DateTime( gmdate( 'Y-m-d H:i:s.' . $micro_seconds, intval( $microtime ) ), $timezone );
62
 
63
  if ( $mysql_date_string ) {
64
  return $date->format( 'Y-m-d H:i:s' );
71
  * Encode to JSON in a way that is also backwards compatible.
72
  *
73
  * @param mixed $data
74
+ * @param int $options (optional)
75
+ * @param int $depth (optional)
76
  *
77
  * @return string
78
  */
148
  function wp_mainwp_stream_is_cron_doing() {
149
  return ( defined( 'DOING_CRON' ) && DOING_CRON ) ? true : false;
150
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
mainwp-child-reports.php CHANGED
@@ -7,7 +7,7 @@
7
  * Description: The MainWP Child Report plugin tracks Child sites for the MainWP Client Reports Extension. The plugin is only useful if you are using MainWP and the Client Reports Extension.
8
  * Author: MainWP
9
  * Author URI: https://mainwp.com
10
- * Version: 2.0.8
11
  * Requires at least: 3.6
12
  * Text Domain: mainwp-child-reports
13
  * License: GPLv3 or later
7
  * Description: The MainWP Child Report plugin tracks Child sites for the MainWP Client Reports Extension. The plugin is only useful if you are using MainWP and the Client Reports Extension.
8
  * Author: MainWP
9
  * Author URI: https://mainwp.com
10
+ * Version: 2.1
11
  * Requires at least: 3.6
12
  * Text Domain: mainwp-child-reports
13
  * License: GPLv3 or later
readme.txt CHANGED
@@ -5,9 +5,9 @@ Author: mainwp
5
  Author URI: https://mainwp.com
6
  Plugin URI: https://mainwp.com
7
  Requires at least: 3.6
8
- Tested up to: 6.1
9
  Requires PHP: 7.0
10
- Stable tag: 2.0.8
11
  License: GPLv3 or later
12
  License URI: https://www.gnu.org/licenses/gpl-3.0.html
13
 
@@ -36,6 +36,10 @@ Credit to the [Stream Plugin](https://wordpress.org/plugins/stream/) which the M
36
 
37
  == Changelog ==
38
 
 
 
 
 
39
  = 2.0.8 - 9-15-2021 =
40
  * Fixed: An issue with logging certain actions triggered by WP Cron
41
  * Fixed: An issue with displaying timestamps on some setups
5
  Author URI: https://mainwp.com
6
  Plugin URI: https://mainwp.com
7
  Requires at least: 3.6
8
+ Tested up to: 6.1.1
9
  Requires PHP: 7.0
10
+ Stable tag: 2.1
11
  License: GPLv3 or later
12
  License URI: https://www.gnu.org/licenses/gpl-3.0.html
13
 
36
 
37
  == Changelog ==
38
 
39
+ = 2.1 - 12-14-2022 =
40
+ * Updated: PHP 8.1 compatibility improvements
41
+ * Preventative: Multiple security enhancements
42
+
43
  = 2.0.8 - 9-15-2021 =
44
  * Fixed: An issue with logging certain actions triggered by WP Cron
45
  * Fixed: An issue with displaying timestamps on some setups
ui/css/admin.css CHANGED
@@ -18,36 +18,6 @@
18
  overflow: visible;
19
  }
20
 
21
- .post-type-wp_mainwp_alerts .select2 .select2-selection,
22
- .mainwp-stream-exclude-list .select2 .select2-selection{
23
- border-color: #ccc;
24
- background: #f7f7f7;
25
- -webkit-box-shadow: 0 1px 0 #ccc;
26
- box-shadow: 0 1px 0 #ccc;
27
- }
28
-
29
- .post-type-wp_mainwp_alerts .select2 .select2-selection--multiple,
30
- .mainwp-stream-exclude-list .select2 .select2-selection--multiple{
31
- font-size: 0;
32
- min-height: 28px;
33
- }
34
-
35
- .post-type-wp_mainwp_alerts .select2-container.select2-container--focus .select2-selection--multiple,
36
- .mainwp-stream-exclude-list .select2-container.select2-container--focus .select2-selection--multiple{
37
- border: solid #ccc 1px;
38
- }
39
-
40
- .post-type-wp_mainwp_alerts .select2-container .select2-selection--multiple .select2-selection__choice,
41
- .mainwp-stream-exclude-list .select2-container .select2-selection--multiple .select2-selection__choice{
42
- margin-top: 4px;
43
- margin-bottom: 3px;
44
- }
45
-
46
- .post-type-wp_mainwp_alerts .select2 .select2-selection .select2-selection__rendered,
47
- .mainwp-stream-exclude-list .select2 .select2-selection .select2-selection__rendered{
48
- color: #555;
49
- }
50
-
51
  #record-query-reset {
52
  position: relative;
53
  margin-left: 5px;
@@ -280,128 +250,6 @@
280
  margin-right: 1em;
281
  }
282
 
283
- .post-type-wp_mainwp_alerts a.warning {
284
- color: #a00;
285
- }
286
-
287
- .post-type-wp_mainwp_alerts a.warning:hover {
288
- color: #f00;
289
- }
290
-
291
- /* Date Interval Common */
292
-
293
- .post-type-wp_mainwp_alerts .date-interval .field-predefined {
294
- width: 165px;
295
- float: left;
296
- margin-right: 6px;
297
- margin-bottom: 6px;
298
- }
299
-
300
- .post-type-wp_mainwp_alerts .date-interval .date-inputs {
301
- float: left;
302
- margin-right: 6px;
303
- margin-bottom: 6px;
304
- }
305
-
306
- .post-type-wp_mainwp_alerts .date-interval .date-inputs .field-to,
307
- .post-type-wp_mainwp_alerts .date-interval .date-inputs .field-from {
308
- line-height: 28px;
309
- height: 28px;
310
- margin: 0;
311
- width: 125px;
312
- }
313
-
314
- .post-type-wp_mainwp_alerts .date-interval .date-inputs .box {
315
- position: relative;
316
- display: block;
317
- float: left;
318
- }
319
-
320
- .post-type-wp_mainwp_alerts .date-interval .date-inputs .box .date-remove {
321
- display: none;
322
- position: absolute;
323
- cursor: pointer;
324
- top: 0;
325
- right: 0;
326
- width: 20px;
327
- height: 28px;
328
- line-height: 28px;
329
- font-size: 14px;
330
- padding-top: 1px;
331
- padding-right: 2px;
332
- }
333
-
334
- .post-type-wp_mainwp_alerts .date-interval .date-inputs .box .date-remove:before {
335
- content: '\f158';
336
- }
337
-
338
- .post-type-wp_mainwp_alerts .date-interval .date-inputs .connector {
339
- display: block;
340
- float: left;
341
- border: 1px solid #ddd;
342
- border-left: 0;
343
- border-right: 0;
344
- height: 26px;
345
- line-height: 28px;
346
- padding-left: 2px;
347
- width: 20px;
348
- text-align: center;
349
- font-size: 14px;
350
- }
351
-
352
- .post-type-wp_mainwp_alerts .date-interval .date-inputs .connector:before {
353
- content: '\f345';
354
- }
355
-
356
-
357
- /* Select2 Common */
358
-
359
- .post-type-wp_mainwp_alerts li.select2-searching,
360
- .post-type-wp_mainwp_alerts li.select2-no-results {
361
- background: none;
362
- padding: 7px 7px 0;
363
- color: #999;
364
- }
365
-
366
- .post-type-wp_mainwp_alerts .select2 .select2-selection .select2-selection__placeholder {
367
- color: #72777c;
368
- }
369
-
370
- .post-type-wp_mainwp_alerts .select2-results .select2-disabled {
371
- background: transparent;
372
- color: #aaa;
373
- }
374
-
375
- .post-type-wp_mainwp_alerts .select2 .select2-search--inline {
376
- float: none;
377
- margin-bottom: 4px;
378
- margin-left: 2px;
379
- }
380
-
381
- .post-type-wp_mainwp_alerts .select2-selection .icon16 {
382
- margin: -3px 1px 0 -3px;
383
- padding: 0;
384
- width: 16px;
385
- height: 16px;
386
- }
387
-
388
- .post-type-wp_mainwp_alerts .select2-selection .icon16 {
389
- padding-right: 8px;
390
- }
391
-
392
- .post-type-wp_mainwp_alerts .select2-chosen .icon16:before,
393
- .post-type-wp_mainwp_alerts .select2-search-choice .icon16:before {
394
- font-size: 15px !important;
395
- color: #656565;
396
- }
397
-
398
- .post-type-wp_mainwp_alerts .select2-search-choice-close {
399
- -webkit-transition: none;
400
- -moz-transition: none;
401
- -o-transition: all 0 none;
402
- transition: none;
403
- }
404
-
405
  .wp-mainwp-stream-select2-icon {
406
  position: relative;
407
  top: 3px;
@@ -543,23 +391,6 @@
543
  }
544
  }
545
 
546
-
547
- .settings_page_mainwp-reports-page .alert-highlight.highlight-yellow {
548
- background-color: #ffffe0;
549
- }
550
-
551
- .settings_page_mainwp-reports-page .alert-highlight.highlight-red {
552
- background-color: #fbeaea;
553
- }
554
-
555
- .settings_page_mainwp-reports-page .alert-highlight.highlight-green {
556
- background-color: #ecf7ed;
557
- }
558
-
559
- .settings_page_mainwp-reports-page .alert-highlight.highlight-blue {
560
- background-color: #e5f5fa;
561
- }
562
-
563
  /* Extensions */
564
 
565
  .post-type-stream_notification .view-switch {
18
  overflow: visible;
19
  }
20
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  #record-query-reset {
22
  position: relative;
23
  margin-left: 5px;
250
  margin-right: 1em;
251
  }
252
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
253
  .wp-mainwp-stream-select2-icon {
254
  position: relative;
255
  top: 3px;
391
  }
392
  }
393
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
394
  /* Extensions */
395
 
396
  .post-type-stream_notification .view-switch {
ui/css/admin.min.css DELETED
@@ -1 +0,0 @@
1
- .settings_page_mainwp-reports-page .tablenav{padding-top:6px}.settings_page_mainwp-reports-page #record-actions-form{margin-top:-32px}.settings_page_mainwp-reports-page #record-actions-form .button{margin-left:6px;float:left}.settings_page_mainwp-reports-page .tablenav .actions{padding:0;overflow:visible}.post-type-wp_mainwp_alerts .select2 .select2-selection,.mainwp-stream-exclude-list .select2 .select2-selection{border-color:#ccc;background:#f7f7f7;-webkit-box-shadow:0 1px 0 #ccc;box-shadow:0 1px 0 #ccc}.post-type-wp_mainwp_alerts .select2 .select2-selection--multiple,.mainwp-stream-exclude-list .select2 .select2-selection--multiple{font-size:0;min-height:28px}.post-type-wp_mainwp_alerts .select2-container.select2-container--focus .select2-selection--multiple,.mainwp-stream-exclude-list .select2-container.select2-container--focus .select2-selection--multiple{border:solid #ccc 1px}.post-type-wp_mainwp_alerts .select2-container .select2-selection--multiple .select2-selection__choice,.mainwp-stream-exclude-list .select2-container .select2-selection--multiple .select2-selection__choice{margin-top:4px;margin-bottom:3px}.post-type-wp_mainwp_alerts .select2 .select2-selection .select2-selection__rendered,.mainwp-stream-exclude-list .select2 .select2-selection .select2-selection__rendered{color:#555}#record-query-reset{position:relative;margin-left:5px;line-height:28px;text-decoration:none;display:inline-block}#record-query-reset span.dashicons{position:absolute;top:.5em;left:0;font-size:13px}#record-query-reset .record-query-reset-text{margin-left:19px}.settings_page_mainwp-reports-page .chosen-container-single{margin-top:3px;margin-right:6px}.settings_page_mainwp-reports-page .view-switch{display:none}.settings_page_mainwp-reports-page #filter-date-range{float:left;margin-right:6px}.settings_page_mainwp-reports-page .manage-column{width:12%}.settings_page_mainwp-reports-page .column-date{min-width:10%;white-space:nowrap}.settings_page_mainwp-reports-page .column-date .timeago{padding-right:1em}.settings_page_mainwp-reports-page .column-user_id{width:18%}.settings_page_mainwp-reports-page .column-summary{width:auto}.settings_page_mainwp-reports-page .column-ip{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.settings_page_mainwp-reports-page .stream-filter-object-id{padding-left:5px;visibility:hidden}.settings_page_mainwp-reports-page td.summary:hover .stream-filter-object-id{visibility:visible}.settings_page_mainwp-reports-page .tablenav .stream-export-tablenav{margin-top:6px;height:28px;float:right}.settings_page_mainwp-reports-page .tablenav .stream-export-tablenav a{margin-top:0}@media only screen and (min-width:782px){.settings_page_mainwp-reports-page .tablenav .tablenav-pages{margin-bottom:4px}.settings_page_mainwp-reports-page .tablenav .stream-export-tablenav{margin-bottom:4px;float:left}.settings_page_mainwp-reports-page .tablenav .stream-export-tablenav a{margin-top:5px;display:inline-block}}@media only screen and (max-width:782px){.settings_page_mainwp-reports-page .tablenav.bottom .displaying-num{top:-8px}}@media only screen and (max-width:900px){.settings_page_mainwp-reports-page .fixed .manage-column,.settings_page_mainwp-reports-page .fixed tbody tr td{display:none!important}.settings_page_mainwp-reports-page .fixed .column-date,.settings_page_mainwp-reports-page .fixed .column-summary,.settings_page_mainwp-reports-page .fixed .column-user_id,.settings_page_mainwp-reports-page .fixed tbody tr.no-items td{display:table-cell!important}.settings_page_mainwp-reports-page .fixed .column-date{width:100px}.settings_page_mainwp-reports-page .fixed .column-user_id{width:50%}.settings_page_mainwp-reports-page .fixed .column-summary{width:100%}}@media only screen and (max-width:480px){.settings_page_mainwp-reports-page .fixed .column-user_id{display:none}}.settings_page_mainwp-reports-page .wp-list-table tr td::before{content:""!important}.settings_page_mainwp-reports-page .column-user_id a{vertical-align:top}.settings_page_mainwp-reports-page .column-user_id img{float:left;margin:1px 10px 8px 0;width:32px;height:32px}.settings_page_mainwp-reports-page .column-user_id .deleted{font-style:italic;color:#aaa}.settings_page_mainwp-reports-page .filter-date-range{margin-top:-1px}.settings_page_mainwp-reports-page .alignleft.actions input[type=text]{height:28px;line-height:19px}.settings_page_mainwp-reports-page .date-interval{display:inline}.settings_page_mainwp-reports-page .select2-container{margin-right:6px;margin-bottom:6px}.settings_page_mainwp-reports-page .select2-container.select2-allowclear .select2-choice abbr{margin-top:-2px}.settings_page_mainwp-reports-page .stream-live-update-checkbox .spinner{margin-top:5px}#dashboard_stream_activity .new-row,.settings_page_mainwp-reports-page .new-row{background-color:#ffffe0!important;-webkit-transition:background .5s linear;-moz-transition:background .5s linear;-ms-transition:background .5s linear;-o-transition:background .5s linear;transition:background .5s linear}#dashboard_stream_activity .new-row.alternate,.settings_page_mainwp-reports-page .new-row.alternate{background-color:#ffffcd!important}#dashboard_stream_activity .new-row.fadeout,.settings_page_mainwp-reports-page .new-row.fadeout{background-color:transparent!important}#dashboard_stream_activity .new-row.alternate.fadeout,.settings_page_mainwp-reports-page .new-row.alternate.fadeout{background-color:#f9f9f9!important}.settings_page_mainwp-reports-page #the-list .no-items .stream-list-table-no-items{text-align:center}.settings_page_mainwp-reports-page #the-list .no-items .stream-list-table-no-items p{margin:2px 0}.wp_mainwp_stream_default_settings .select2.select2-container,.wp_mainwp_stream_network_settings .select2.select2-container,.wp_mainwp_stream_settings .select2.select2-container{min-width:160px;max-width:100%}.wp_mainwp_stream_default_settings .tablenav,.wp_mainwp_stream_network_settings .tablenav,.wp_mainwp_stream_settings .tablenav{margin-top:16px}.wp_mainwp_stream_default_settings .tablenav input,.wp_mainwp_stream_network_settings .tablenav input,.wp_mainwp_stream_settings .tablenav input{margin-right:1em}.post-type-wp_mainwp_alerts a.warning{color:#a00}.post-type-wp_mainwp_alerts a.warning:hover{color:red}.post-type-wp_mainwp_alerts .date-interval .field-predefined{width:165px;float:left;margin-right:6px;margin-bottom:6px}.post-type-wp_mainwp_alerts .date-interval .date-inputs{float:left;margin-right:6px;margin-bottom:6px}.post-type-wp_mainwp_alerts .date-interval .date-inputs .field-from,.post-type-wp_mainwp_alerts .date-interval .date-inputs .field-to{line-height:28px;height:28px;margin:0;width:125px}.post-type-wp_mainwp_alerts .date-interval .date-inputs .box{position:relative;display:block;float:left}.post-type-wp_mainwp_alerts .date-interval .date-inputs .box .date-remove{display:none;position:absolute;cursor:pointer;top:0;right:0;width:20px;height:28px;line-height:28px;font-size:14px;padding-top:1px;padding-right:2px}.post-type-wp_mainwp_alerts .date-interval .date-inputs .box .date-remove:before{content:'\f158'}.post-type-wp_mainwp_alerts .date-interval .date-inputs .connector{display:block;float:left;border:1px solid #ddd;border-left:0;border-right:0;height:26px;line-height:28px;padding-left:2px;width:20px;text-align:center;font-size:14px}.post-type-wp_mainwp_alerts .date-interval .date-inputs .connector:before{content:'\f345'}.post-type-wp_mainwp_alerts li.select2-no-results,.post-type-wp_mainwp_alerts li.select2-searching{background:0 0;padding:7px 7px 0;color:#999}.post-type-wp_mainwp_alerts .select2 .select2-selection .select2-selection__placeholder{color:#72777c}.post-type-wp_mainwp_alerts .select2-results .select2-disabled{background:0 0;color:#aaa}.post-type-wp_mainwp_alerts .select2 .select2-search--inline{float:none;margin-bottom:4px;margin-left:2px}.post-type-wp_mainwp_alerts .select2-selection .icon16{margin:-3px 1px 0 -3px;padding:0;width:16px;height:16px}.post-type-wp_mainwp_alerts .select2-selection .icon16{padding-right:8px}.post-type-wp_mainwp_alerts .select2-chosen .icon16:before,.post-type-wp_mainwp_alerts .select2-search-choice .icon16:before{font-size:15px!important;color:#656565}.post-type-wp_mainwp_alerts .select2-search-choice-close{-webkit-transition:none;-moz-transition:none;-o-transition:all 0 none;transition:none}.wp-mainwp-stream-select2-icon{position:relative;top:3px;margin-right:4px;width:16px;height:16px}.select2-disabled .wp-mainwp-stream-select2-icon{filter:url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#grayscale");filter:gray;-webkit-filter:grayscale(100%);-moz-filter:grayscale(100%)}.mainwp-stream-exclude-list{margin-top:1em}.mainwp-stream-exclude-list th{font-weight:400;padding:8px 10px;width:auto}.mainwp-stream-exclude-list tbody tr.no-items{background-color:#fff}.mainwp-stream-exclude-list tbody tr.no-items td{padding:8px 10px;font-size:13px}.mainwp-stream-exclude-list tbody th.check-column{padding:16px 0 0 3px}.mainwp-stream-exclude-list thead th.actions-column{width:3em}.mainwp-stream-exclude-list tbody th.actions-column{padding:21px 10px 20px 0}.mainwp-stream-exclude-list tbody th.actions-column a{display:none;color:#a00;font-size:13px}.mainwp-stream-exclude-list tbody tr:hover th.actions-column a{display:block}.mainwp-stream-exclude-list tbody th.actions-column a:hover{color:red}.mainwp-stream-exclude-list tbody th.actions-column .dashicons{margin-top:4px}.mainwp-stream-exclude-list tbody td .ip_address{width:100%}.mainwp-stream-exclude-list tbody td .ip_address.invalid{border:1px solid rgba(160,0,0,.75)}.mainwp-stream-exclude-list .icon-users{top:-3px!important;position:relative!important}.wp_mainwp_stream_screen .select2-results__option .parent{font-weight:700}.wp_mainwp_stream_screen .select2-results__option .child{padding-left:8px}@media screen and (max-width:900px){.wp_mainwp_stream_network_settings .mainwp-stream-exclude-list .actions-column,.wp_mainwp_stream_settings .mainwp-stream-exclude-list .actions-column{display:none}}@media screen and (max-width:782px){.settings_page_mainwp-reports-page #record-actions-form{margin-top:0;margin-bottom:35px}.wp_mainwp_stream_default_settings .mainwp-stream-exclude-list td,.wp_mainwp_stream_network_settings .mainwp-stream-exclude-list td,.wp_mainwp_stream_settings .mainwp-stream-exclude-list td{padding:10px 10px 0 0}.wp_mainwp_stream_default_settings .mainwp-stream-exclude-list th,.wp_mainwp_stream_network_settings .mainwp-stream-exclude-list th,.wp_mainwp_stream_settings .mainwp-stream-exclude-list th{display:none}.wp_mainwp_stream_default_settings .mainwp-stream-exclude-list .check-column,.wp_mainwp_stream_network_settings .mainwp-stream-exclude-list .check-column,.wp_mainwp_stream_settings .mainwp-stream-exclude-list .check-column{display:table-cell;padding:13px 10px 0 3px}.wp_mainwp_stream_default_settings .mainwp-stream-exclude-list thead .actions-column,.wp_mainwp_stream_network_settings .mainwp-stream-exclude-list thead .actions-column,.wp_mainwp_stream_settings .mainwp-stream-exclude-list thead .actions-column{display:table-cell;width:auto}.wp_mainwp_stream_default_settings .mainwp-stream-exclude-list thead .actions-column .hidden,.wp_mainwp_stream_network_settings .mainwp-stream-exclude-list thead .actions-column .hidden,.wp_mainwp_stream_settings .mainwp-stream-exclude-list thead .actions-column .hidden{display:block}.wp_mainwp_stream_default_settings .mainwp-stream-exclude-list tfoot,.wp_mainwp_stream_network_settings .mainwp-stream-exclude-list tfoot,.wp_mainwp_stream_settings .mainwp-stream-exclude-list tfoot{display:none}}.settings_page_mainwp-reports-page .alert-highlight.highlight-yellow{background-color:#ffffe0}.settings_page_mainwp-reports-page .alert-highlight.highlight-red{background-color:#fbeaea}.settings_page_mainwp-reports-page .alert-highlight.highlight-green{background-color:#ecf7ed}.settings_page_mainwp-reports-page .alert-highlight.highlight-blue{background-color:#e5f5fa}.post-type-stream_notification .view-switch{display:none}
 
ui/css/alerts-list.css DELETED
@@ -1,142 +0,0 @@
1
- .edit-php.post-type-wp_mainwp_alerts .inline-edit-col,
2
- .edit-php.post-type-wp_mainwp_alerts .widefat .inline-edit-col,
3
- .edit-php.post-type-wp_mainwp_alerts .widefat p {
4
- color: #444;
5
- font-size: 12px;
6
- display: block;
7
- margin: .2em 0;
8
- line-height: 2.5;
9
- }
10
- .edit-php.post-type-wp_mainwp_alerts .inline-edit-col .wp_mainwp_stream_alert_type_description {
11
- line-height: 1.5em;
12
- display: inline-block;
13
- }
14
- .edit-php.post-type-wp_mainwp_alerts .inline-edit-col {
15
- padding: 0 0.5em !important;
16
- }
17
-
18
- .edit-php.post-type-wp_mainwp_alerts .inline-edit-col legend {
19
- padding: 0.2em 0 !important;
20
- color: #555;
21
- }
22
-
23
- .edit-php.post-type-wp_mainwp_alerts .inline-edit-col .select2-container {
24
- display: block;
25
- }
26
-
27
- #wp_mainwp_stream_alert_type_form {
28
- max-height: 14em;
29
- border: 1px solid #ddd;
30
- overflow-y: scroll;
31
- padding: 0.2em 0.5em;
32
- margin: 6px 0;
33
- background-color: #fff;
34
- display: none;
35
- }
36
-
37
- #wp_mainwp_stream_alert_type_form select {
38
- width: 100%;
39
- }
40
-
41
- #wp_mainwp_stream_alert_type_form .dashicons {
42
- position: relative;
43
- top: 7px;
44
- left: -2px;
45
- font-size: 1em;
46
- }
47
-
48
- .edit-php.post-type-wp_mainwp_alerts .misc-pub-section.misc-pub-post-status,
49
- .edit-php.post-type-wp_mainwp_alerts #misc-publishing-actions {
50
- padding: 0;
51
- }
52
-
53
- @media ( min-width: 781px ) {
54
- .wp-mainwp-stream-show-mobile {
55
- display: none;
56
- }
57
- .edit-php.post-type-wp_mainwp_alerts .inline-edit-col.inline-edit-wp_mainwp_alerts {
58
- float: left;
59
- width: 100%;
60
- max-width: 20%
61
- }
62
- }
63
-
64
- .edit-php.post-type-wp_mainwp_alerts .select2 .select2-selection {
65
- border-color: #ccc;
66
- background: #f7f7f7;
67
- -webkit-box-shadow: 0 1px 0 #ccc;
68
- box-shadow: 0 1px 0 #ccc;
69
- }
70
- .edit-php.post-type-wp_mainwp_alerts label {
71
- font-style: italic;
72
- }
73
-
74
- .edit-php.post-type-wp_mainwp_alerts select {
75
- width: auto;
76
- }
77
-
78
- .edit-php.post-type-wp_mainwp_alerts span.select2-selection__rendered {
79
- font-style: normal;
80
- }
81
-
82
- #add-new-alert.inline-edit-row.inline-edit-row-page .inline-edit-col-right {
83
- margin-top: 32px;
84
- }
85
- .edit-php.post-type-wp_mainwp_alerts #add-new-alert .select2.select2-container {
86
- display: block;
87
- }
88
- .edit-php.post-type-wp_mainwp_alerts #add-new-alert .inline-edit-add-new-notifications,
89
- .edit-php.post-type-wp_mainwp_alerts #add-new-alert .inline-edit-add-new-status {
90
- margin-top: 33px;
91
- }
92
- #add-new-alert .inline-edit-add-new-triggers label {
93
- margin: .2em 0;
94
- line-height: 2.5;
95
- }
96
- .post-type-wp_mainwp_alerts .select2-container {
97
- margin-bottom: 6px;
98
- min-width: 165px;
99
- }
100
-
101
- /* Alert List Page */
102
- .post-type-wp_mainwp_alerts #posts-filter #post-query-submit {
103
- display: none;
104
- }
105
-
106
- .post-type-wp_mainwp_alerts .wp-list-table .alert_trigger_value {
107
- padding: 3px 20px 3px 10px;
108
- border-top: 1px solid #e5e5e5;
109
- border-bottom: 1px solid #e5e5e5;
110
- background: #fff;
111
- display: inline-block;
112
- height: 22px;
113
- line-height: 22px;
114
- box-shadow: 0 1px 1px rgba(0, 0, 0, .04);
115
- }
116
-
117
- .post-type-wp_mainwp_alerts .wp-list-table .alert_trigger_value:first-child {
118
- border-left: 1px solid #e5e5e5;
119
- }
120
-
121
- .post-type-wp_mainwp_alerts .wp-list-table .alert_trigger_value:last-child {
122
- padding-right: 10px;
123
- border-right: 1px solid #e5e5e5;
124
- }
125
-
126
- .post-type-wp_mainwp_alerts .wp-list-table .alert_trigger_value:after {
127
- content: "";
128
- position: absolute;
129
- margin-left: 7px;
130
- margin-top: 6px;
131
- display: inline-block;
132
- height: 8px;
133
- width: 8px;
134
- transform: rotate(45deg);
135
- border-top: 2px solid #e5e5e5;
136
- border-right: 2px solid #e5e5e5;
137
- }
138
-
139
- .post-type-wp_mainwp_alerts .wp-list-table .alert_trigger_value:last-child:after {
140
- border-top: none;
141
- border-right: none;
142
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ui/css/alerts-list.min.css DELETED
@@ -1 +0,0 @@
1
- .edit-php.post-type-wp_mainwp_alerts .inline-edit-col,.edit-php.post-type-wp_mainwp_alerts .widefat .inline-edit-col,.edit-php.post-type-wp_mainwp_alerts .widefat p{color:#444;font-size:12px;display:block;margin:.2em 0;line-height:2.5}.edit-php.post-type-wp_mainwp_alerts .inline-edit-col .wp_mainwp_stream_alert_type_description{line-height:1.5em;display:inline-block}.edit-php.post-type-wp_mainwp_alerts .inline-edit-col{padding:0 .5em!important}.edit-php.post-type-wp_mainwp_alerts .inline-edit-col legend{padding:.2em 0!important;color:#555}.edit-php.post-type-wp_mainwp_alerts .inline-edit-col .select2-container{display:block}#wp_mainwp_stream_alert_type_form{max-height:14em;border:1px solid #ddd;overflow-y:scroll;padding:.2em .5em;margin:6px 0;background-color:#fff;display:none}#wp_mainwp_stream_alert_type_form select{width:100%}#wp_mainwp_stream_alert_type_form .dashicons{position:relative;top:7px;left:-2px;font-size:1em}.edit-php.post-type-wp_mainwp_alerts #misc-publishing-actions,.edit-php.post-type-wp_mainwp_alerts .misc-pub-section.misc-pub-post-status{padding:0}@media (min-width:781px){.wp-mainwp-stream-show-mobile{display:none}.edit-php.post-type-wp_mainwp_alerts .inline-edit-col.inline-edit-wp_mainwp_alerts{float:left;width:100%;max-width:20%}}.edit-php.post-type-wp_mainwp_alerts .select2 .select2-selection{border-color:#ccc;background:#f7f7f7;-webkit-box-shadow:0 1px 0 #ccc;box-shadow:0 1px 0 #ccc}.edit-php.post-type-wp_mainwp_alerts label{font-style:italic}.edit-php.post-type-wp_mainwp_alerts select{width:auto}.edit-php.post-type-wp_mainwp_alerts span.select2-selection__rendered{font-style:normal}#add-new-alert.inline-edit-row.inline-edit-row-page .inline-edit-col-right{margin-top:32px}.edit-php.post-type-wp_mainwp_alerts #add-new-alert .select2.select2-container{display:block}.edit-php.post-type-wp_mainwp_alerts #add-new-alert .inline-edit-add-new-notifications,.edit-php.post-type-wp_mainwp_alerts #add-new-alert .inline-edit-add-new-status{margin-top:33px}#add-new-alert .inline-edit-add-new-triggers label{margin:.2em 0;line-height:2.5}.post-type-wp_mainwp_alerts .select2-container{margin-bottom:6px;min-width:165px}.post-type-wp_mainwp_alerts #posts-filter #post-query-submit{display:none}.post-type-wp_mainwp_alerts .wp-list-table .alert_trigger_value{padding:3px 20px 3px 10px;border-top:1px solid #e5e5e5;border-bottom:1px solid #e5e5e5;background:#fff;display:inline-block;height:22px;line-height:22px;box-shadow:0 1px 1px rgba(0,0,0,.04)}.post-type-wp_mainwp_alerts .wp-list-table .alert_trigger_value:first-child{border-left:1px solid #e5e5e5}.post-type-wp_mainwp_alerts .wp-list-table .alert_trigger_value:last-child{padding-right:10px;border-right:1px solid #e5e5e5}.post-type-wp_mainwp_alerts .wp-list-table .alert_trigger_value:after{content:"";position:absolute;margin-left:7px;margin-top:6px;display:inline-block;height:8px;width:8px;transform:rotate(45deg);border-top:2px solid #e5e5e5;border-right:2px solid #e5e5e5}.post-type-wp_mainwp_alerts .wp-list-table .alert_trigger_value:last-child:after{border-top:none;border-right:none}
 
ui/css/datepicker.min.css DELETED
@@ -1 +0,0 @@
1
- .ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-next,.ui-datepicker .ui-datepicker-prev{position:absolute;top:2px}.ui-datepicker .ui-datepicker-prev{left:12px}.ui-datepicker .ui-datepicker-next{right:12px}.ui-datepicker .ui-datepicker-next span,.ui-datepicker .ui-datepicker-prev span{font-size:0;width:12px;height:12px;display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month-year{width:100%}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:700;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td a,.ui-datepicker td span{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}#ui-datepicker-div.stream-datepicker.ui-widget{margin-top:5px;border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}#ui-datepicker-div.stream-datepicker.ui-datepicker *{padding:0;font-family:'Open Sans',sans-serif}#ui-datepicker-div.stream-datepicker.ui-datepicker{padding:0}#ui-datepicker-div.stream-datepicker.ui-datepicker table{font-size:13px}#ui-datepicker-div.stream-datepicker .ui-datepicker-header{border:none;background:#23282d;color:#fff;font-weight:400}#ui-datepicker-div.stream-datepicker .ui-datepicker-header .ui-state-hover{background:#23282d;border-color:transparent;cursor:pointer;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}#ui-datepicker-div.stream-datepicker.ui-datepicker thead{background:#23282d;color:#fff}#ui-datepicker-div.stream-datepicker .ui-corner-all{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}#ui-datepicker-div.stream-datepicker.ui-datepicker .ui-datepicker-title{color:#fff;font-size:14px}#ui-datepicker-div.stream-datepicker.ui-datepicker .ui-datepicker-next,#ui-datepicker-div.stream-datepicker.ui-datepicker .ui-datepicker-next-hover,#ui-datepicker-div.stream-datepicker.ui-datepicker .ui-datepicker-prev,#ui-datepicker-div.stream-datepicker.ui-datepicker .ui-datepicker-prev-hover{top:.33em;border:none}#ui-datepicker-div.stream-datepicker.ui-datepicker .ui-datepicker-next span,#ui-datepicker-div.stream-datepicker.ui-datepicker .ui-datepicker-prev span{background-image:url(../stream-icons/datepicker-icons.png);background-position:-32px 0;margin-top:0;top:0;font-weight:400}#ui-datepicker-div.stream-datepicker.ui-datepicker .ui-datepicker-prev span{background-position:-96px 0}#ui-datepicker-div.stream-datepicker.ui-datepicker table{margin:0}#ui-datepicker-div.stream-datepicker.ui-datepicker th{padding:.75em 0;color:#fff;font-weight:400;border:none;border-top:1px solid #32373c}#ui-datepicker-div.stream-datepicker.ui-datepicker td{background:#f1f1f1;border:none;padding:0}#ui-datepicker-div.stream-datepicker td .ui-state-default{background:0 0;border:none;text-align:center;padding:.5em;margin:0;font-weight:400;color:#32373c}#ui-datepicker-div.stream-datepicker td.ui-state-disabled .ui-state-default,#ui-datepicker-div.stream-datepicker.ui-datepicker .ui-widget-content td.ui-state-disabled,#ui-datepicker-div.stream-datepicker.ui-datepicker td.ui-state-disabled{opacity:1;color:#999}#ui-datepicker-div.stream-datepicker td .ui-state-active,#ui-datepicker-div.stream-datepicker td .ui-state-hover{background:#0074a2;color:#fff}.admin-color-light #ui-datepicker-div.stream-datepicker .ui-datepicker-header,.admin-color-light #ui-datepicker-div.stream-datepicker .ui-datepicker-header .ui-state-hover,.admin-color-light #ui-datepicker-div.stream-datepicker td .ui-state-active,.admin-color-light #ui-datepicker-div.stream-datepicker td .ui-state-hover,.admin-color-light #ui-datepicker-div.stream-datepicker.ui-datepicker thead{background:#e5e5e5}.admin-color-light #ui-datepicker-div.stream-datepicker.ui-datepicker td{background:#fff}.admin-color-light #ui-datepicker-div.stream-datepicker.ui-datepicker .ui-datepicker-next span,.admin-color-light #ui-datepicker-div.stream-datepicker.ui-datepicker .ui-datepicker-prev span{background-image:url(../stream-icons/datepicker-icons-gray.png)}.admin-color-light #ui-datepicker-div.stream-datepicker.ui-datepicker th{border-color:#fff}.admin-color-light #ui-datepicker-div.stream-datepicker td .ui-state-default,.admin-color-light #ui-datepicker-div.stream-datepicker.ui-datepicker .ui-datepicker-title,.admin-color-light #ui-datepicker-div.stream-datepicker.ui-datepicker th{color:#555}.admin-color-light #ui-datepicker-div.stream-datepicker td .ui-state-active,.admin-color-light #ui-datepicker-div.stream-datepicker td .ui-state-hover{color:#fff;background:#888}.admin-color-light #ui-datepicker-div.stream-datepicker td.ui-state-disabled .ui-state-default,.admin-color-light #ui-datepicker-div.stream-datepicker.ui-datepicker .ui-widget-content td.ui-state-disabled,.admin-color-light #ui-datepicker-div.stream-datepicker.ui-datepicker td.ui-state-disabled{color:#ccc}.admin-color-blue #ui-datepicker-div.stream-datepicker .ui-datepicker-header,.admin-color-blue #ui-datepicker-div.stream-datepicker .ui-datepicker-header .ui-state-hover,.admin-color-blue #ui-datepicker-div.stream-datepicker td .ui-state-active,.admin-color-blue #ui-datepicker-div.stream-datepicker td .ui-state-hover,.admin-color-blue #ui-datepicker-div.stream-datepicker.ui-datepicker thead{background:#4796b3}.admin-color-blue #ui-datepicker-div.stream-datepicker.ui-datepicker th{border-color:#52accc}.admin-color-blue #ui-datepicker-div.stream-datepicker.ui-datepicker .ui-datepicker-title,.admin-color-blue #ui-datepicker-div.stream-datepicker.ui-datepicker th{color:#fff}.admin-color-blue #ui-datepicker-div.stream-datepicker td .ui-state-active,.admin-color-blue #ui-datepicker-div.stream-datepicker td .ui-state-hover{background:#096484}.admin-color-coffee #ui-datepicker-div.stream-datepicker .ui-datepicker-header,.admin-color-coffee #ui-datepicker-div.stream-datepicker .ui-datepicker-header .ui-state-hover,.admin-color-coffee #ui-datepicker-div.stream-datepicker td .ui-state-active,.admin-color-coffee #ui-datepicker-div.stream-datepicker td .ui-state-hover,.admin-color-coffee #ui-datepicker-div.stream-datepicker.ui-datepicker thead{background:#46403c}.admin-color-coffee #ui-datepicker-div.stream-datepicker.ui-datepicker th{border-color:#59524c}.admin-color-coffee #ui-datepicker-div.stream-datepicker.ui-datepicker .ui-datepicker-title,.admin-color-coffee #ui-datepicker-div.stream-datepicker.ui-datepicker th{color:#fff}.admin-color-coffee #ui-datepicker-div.stream-datepicker td .ui-state-active,.admin-color-coffee #ui-datepicker-div.stream-datepicker td .ui-state-hover{background:#c7a589}.admin-color-ectoplasm #ui-datepicker-div.stream-datepicker .ui-datepicker-header,.admin-color-ectoplasm #ui-datepicker-div.stream-datepicker .ui-datepicker-header .ui-state-hover,.admin-color-ectoplasm #ui-datepicker-div.stream-datepicker td .ui-state-active,.admin-color-ectoplasm #ui-datepicker-div.stream-datepicker td .ui-state-hover,.admin-color-ectoplasm #ui-datepicker-div.stream-datepicker.ui-datepicker thead{background:#413256}.admin-color-ectoplasm #ui-datepicker-div.stream-datepicker.ui-datepicker th{border-color:#523f6d}.admin-color-ectoplasm #ui-datepicker-div.stream-datepicker.ui-datepicker .ui-datepicker-title,.admin-color-ectoplasm #ui-datepicker-div.stream-datepicker.ui-datepicker th{color:#fff}.admin-color-ectoplasm #ui-datepicker-div.stream-datepicker td .ui-state-active,.admin-color-ectoplasm #ui-datepicker-div.stream-datepicker td .ui-state-hover{background:#a3b745}.admin-color-midnight #ui-datepicker-div.stream-datepicker .ui-datepicker-header,.admin-color-midnight #ui-datepicker-div.stream-datepicker .ui-datepicker-header .ui-state-hover,.admin-color-midnight #ui-datepicker-div.stream-datepicker td .ui-state-active,.admin-color-midnight #ui-datepicker-div.stream-datepicker td .ui-state-hover,.admin-color-midnight #ui-datepicker-div.stream-datepicker.ui-datepicker thead{background:#26292c}.admin-color-midnight #ui-datepicker-div.stream-datepicker.ui-datepicker th{border-color:#363b3f}.admin-color-midnight #ui-datepicker-div.stream-datepicker.ui-datepicker .ui-datepicker-title,.admin-color-midnight #ui-datepicker-div.stream-datepicker.ui-datepicker th{color:#fff}.admin-color-midnight #ui-datepicker-div.stream-datepicker td .ui-state-active,.admin-color-midnight #ui-datepicker-div.stream-datepicker td .ui-state-hover{background:#e14d43}.admin-color-ocean #ui-datepicker-div.stream-datepicker .ui-datepicker-header,.admin-color-ocean #ui-datepicker-div.stream-datepicker .ui-datepicker-header .ui-state-hover,.admin-color-ocean #ui-datepicker-div.stream-datepicker td .ui-state-active,.admin-color-ocean #ui-datepicker-div.stream-datepicker td .ui-state-hover,.admin-color-ocean #ui-datepicker-div.stream-datepicker.ui-datepicker thead{background:#627c83}.admin-color-ocean #ui-datepicker-div.stream-datepicker.ui-datepicker th{border-color:#738e96}.admin-color-ocean #ui-datepicker-div.stream-datepicker.ui-datepicker .ui-datepicker-title,.admin-color-ocean #ui-datepicker-div.stream-datepicker.ui-datepicker th{color:#fff}.admin-color-ocean #ui-datepicker-div.stream-datepicker td .ui-state-active,.admin-color-ocean #ui-datepicker-div.stream-datepicker td .ui-state-hover{background:#9ebaa0}.admin-color-sunrise #ui-datepicker-div.stream-datepicker .ui-datepicker-header,.admin-color-sunrise #ui-datepicker-div.stream-datepicker .ui-datepicker-header .ui-state-hover,.admin-color-sunrise #ui-datepicker-div.stream-datepicker td .ui-state-active,.admin-color-sunrise #ui-datepicker-div.stream-datepicker td .ui-state-hover,.admin-color-sunrise #ui-datepicker-div.stream-datepicker.ui-datepicker thead{background:#be3631}.admin-color-sunrise #ui-datepicker-div.stream-datepicker.ui-datepicker th{border-color:#cf4944}.admin-color-sunrise #ui-datepicker-div.stream-datepicker.ui-datepicker .ui-datepicker-title,.admin-color-sunrise #ui-datepicker-div.stream-datepicker.ui-datepicker th{color:#fff}.admin-color-sunrise #ui-datepicker-div.stream-datepicker td .ui-state-active,.admin-color-sunrise #ui-datepicker-div.stream-datepicker td .ui-state-hover{background:#dd823b}
 
ui/js/admin.js CHANGED
@@ -173,7 +173,7 @@ jQuery(
173
  );
174
 
175
  $( 'body' ).on(
176
- 'click', '#wp_mainwp_stream_uninstall', function( e ) {
177
  if ( ! window.confirm( wp_mainwp_stream.i18n.confirm_uninstall ) ) {
178
  e.preventDefault();
179
  }
173
  );
174
 
175
  $( 'body' ).on(
176
+ 'click', '#wp_mainwp_stream_advanced_wp_mainwp_stream_uninstall, #wp_mainwp_stream_uninstall', function( e ) {
177
  if ( ! window.confirm( wp_mainwp_stream.i18n.confirm_uninstall ) ) {
178
  e.preventDefault();
179
  }
ui/js/admin.min.js DELETED
@@ -1 +0,0 @@
1
- jQuery(function(e){"en"===wp_mainwp_stream.locale&&void 0!==e.timeago&&(e.timeago.settings.strings.seconds="seconds",e.timeago.settings.strings.minute="a minute",e.timeago.settings.strings.hour="an hour",e.timeago.settings.strings.hours="%d hours",e.timeago.settings.strings.month="a month",e.timeago.settings.strings.year="a year"),e("li.settings_page_mainwp-reports-page ul li.wp-first-item.current").parent().parent().find(".update-plugins").remove(),e(".settings_page_mainwp-reports-page :input.chosen-select").each(function(t,a){var i={},n=function(t){var a=e("<span>"),i=e(t.element),n="";return"- "===t.text.substring(0,2)&&(t.text=t.text.substring(2)),void 0!==t.id&&(0===t.id.indexOf("group-")?a.addClass("parent"):i.hasClass("level-2")&&a.addClass("child")),void 0!==t.icon?n=t.icon:void 0!==i&&""!==i.data("icon")&&(n=i.data("icon")),n&&a.html('<img src="'+n+'" class="wp-mainwp-stream-select2-icon">'),a.append(t.text),a},r=function(e){return"- "===e.text.substring(0,2)&&(e.text=e.text.substring(2)),e.text};i=e(a).find("option").not(":selected").not(":empty").length>0?{minimumResultsForSearch:10,templateResult:n,templateSelection:r,allowClear:!0,width:"165px"}:{minimumInputLength:3,allowClear:!0,width:"165px",ajax:{url:ajaxurl,dataType:"json",quietMillis:100,data:function(t){return{action:"wp_mainwp_stream_filters",nonce:e("#mainwp_stream_filters_user_search_nonce").val(),filter:e(a).attr("name"),q:t.term}},processResults:function(t){var a=[];return e.each(t,function(e,t){a.push({id:t.id,text:t.label})}),{results:a}}},templateResult:n,templateSelection:r},e(a).select2(i)});var t=e.streamGetQueryVars(),a=e('.settings_page_mainwp-reports-page select.chosen-select[name="context"]');void 0!==t.context&&""!==t.context||void 0===t.connector||(a.val("group-"+t.connector),a.trigger("change")),e("input[type=submit]","#record-filter-form").click(function(){e("input[type=submit]",e(this).parents("form")).removeAttr("clicked"),e(this).attr("clicked","true")}),e("#record-filter-form").submit(function(){var t=e('.settings_page_mainwp-reports-page :input.chosen-select[name="context"]'),a=t.find("option:selected"),i=t.parent().find(".record-filter-connector"),n=a.data("group"),r=a.prop("class"),s=e(".recordactions select");"true"!==e("#record-actions-submit").attr("clicked")&&s.val(""),i.val(n),"level-1"===r&&a.val("")}),e(window).load(function(){e('.settings_page_mainwp-reports-page input[type="search"]').off("mousedown")}),e("body").on("click","#wp_mainwp_stream_advanced_delete_all_records, #wp_mainwp_stream_network_advanced_delete_all_records",function(e){window.confirm(wp_mainwp_stream.i18n.confirm_purge)||e.preventDefault()}),e("body").on("click","#wp_mainwp_stream_advanced_reset_site_settings, #wp_mainwp_stream_network_advanced_reset_site_settings",function(e){window.confirm(wp_mainwp_stream.i18n.confirm_defaults)||e.preventDefault()}),e("body").on("click","#wp_mainwp_stream_uninstall",function(e){window.confirm(wp_mainwp_stream.i18n.confirm_uninstall)||e.preventDefault()});var i=e(".wp_mainwp_stream_screen .nav-tab-wrapper"),n=e(".wp_mainwp_stream_screen .nav-tab-content table.form-table"),r=i.find(".nav-tab-active"),s=r.length>0?i.find("a").index(r):0,o=window.location.hash.match(/^#(\d+)$/),c=null!==o?o[1]:s,d=function(t){var a=e('input[name="option_page"][value^="wp_stream"]').closest("form");if(0!==a.length){var i=a.attr("action");a.prop("action",i.replace(/(^[^#]*).*$/,"$1#"+t))}};i.on("click","a",function(){var t=i.find("a").index(e(this)),a=window.location.hash.match(/^#(\d+)$/);return n.hide().eq(t).show(),i.find("a").removeClass("nav-tab-active").filter(e(this)).addClass("nav-tab-active"),""!==window.location.hash&&null===a||(window.location.hash=t),d(t),!1}),i.children().eq(c).trigger("click"),e(document).ready(function(){function t(){var t=!0;e('div.metabox-prefs [name="date-hide"]').is(":checked")&&(t=!1),e("div.alignleft.actions div.select2-container").each(function(){if(!e(this).is(":hidden"))return t=!1,!1}),t?(e("input#record-query-submit").hide(),e("span.filter_info").show()):(e("input#record-query-submit").show(),e("span.filter_info").hide())}e("#enable_live_update").click(function(){var t=e("#mainwp_stream_live_update_nonce").val(),a=e("#mainwp_enable_live_update_user").val(),i="unchecked",n="true";e("#enable_live_update").is(":checked")&&(i="checked"),n=e("#enable_live_update").data("heartbeat"),e.ajax({type:"POST",url:ajaxurl,data:{action:"mainwp_stream_enable_live_update",nonce:t,user:a,checked:i,heartbeat:n},dataType:"json",beforeSend:function(){e(".stream-live-update-checkbox .spinner").show().css({display:"inline-block"})},success:function(t){e(".stream-live-update-checkbox .spinner").hide(),!1===t.success&&(e("#enable_live_update").prop("checked",!1),t.data&&window.alert(t.data))}})}),e('div.metabox-prefs [name="date-hide"]').is(":checked")?e("div.date-interval").show():e("div.date-interval").hide(),e("div.actions select.chosen-select").each(function(){var t=e(this).prop("name");e('div.metabox-prefs [name="'+t+'-hide"]').is(":checked")?e(this).prev(".select2-container").show():e(this).prev(".select2-container").hide()}),t(),e('div.metabox-prefs [type="checkbox"]').click(function(){var a=e(this).prop("id");"date-hide"===a?e(this).is(":checked")?e("div.date-interval").show():e("div.date-interval").hide():(a=a.replace("-hide",""),e(this).is(":checked")?e('[name="'+a+'"]').prev(".select2-container").show():e('[name="'+a+'"]').prev(".select2-container").hide()),t()}),e("#ui-datepicker-div").addClass("stream-datepicker")}),e("table.wp-list-table").on("updated",function(){e(this).find("time.relative-time").each(function(t,a){var i=e(a);i.removeClass("relative-time"),e('<strong><time datetime="'+i.attr("datetime")+'" class="timeago"/></time></strong><br/>').prependTo(i.parent().parent()).find("time.timeago").timeago()})}).trigger("updated");var l={init:function(t){this.wrapper=t,this.save_interval(this.wrapper.find(".button-primary"),this.wrapper),this.$=this.wrapper.each(function(t,a){var i=e(a),n=i.find(".date-inputs"),r=i.find(".field-from"),s=i.find(".field-to"),o=s.prev(".date-remove"),c=r.prev(".date-remove"),d=i.children(".field-predefined"),l=e("").add(s).add(r);if(jQuery.datepicker){var p=parseFloat(wp_mainwp_stream.gmt_offset)-(new Date).getTimezoneOffset()/60*-1,u=new Date,h=new Date(u.getTime()+60*p*60*1e3),m=0;u.getDate()===h.getDate()&&u.getMonth()===h.getMonth()||(m=u.getTime()<h.getTime()?"+1d":"-1d"),l.datepicker({dateFormat:"yy/mm/dd",minDate:null,maxDate:m,defaultDate:h,beforeShow:function(){e(this).prop("disabled",!0)},onClose:function(){e(this).prop("disabled",!1)}}),l.datepicker("widget").addClass("stream-datepicker")}d.select2({allowClear:!0}),""!==r.val()&&c.show(),""!==s.val()&&o.show(),d.on({change:function(){var t=e(this).val(),a=d.find('[value="'+t+'"]'),i=a.data("to"),o=a.data("from");if("custom"===t)return n.show(),!1;n.hide(),l.datepicker("hide"),r.val(o).trigger("change",[!0]),s.val(i).trigger("change",[!0]),jQuery.datepicker&&l.datepicker("widget").is(":visible")&&l.datepicker("refresh").datepicker("hide")},"select2-removed":function(){d.val("").trigger("change")},check_options:function(){if(""!==s.val()&&""!==r.val()){var e=d.find("option").filter('[data-to="'+s.val()+'"]').filter('[data-from="'+r.val()+'"]');0!==e.length?d.val(e.attr("value")).trigger("change",[!0]):d.val("custom").trigger("change",[!0])}else""===s.val()&&""===r.val()?d.val("").trigger("change",[!0]):d.val("custom").trigger("change",[!0])}}),r.on("change",function(){if(""!==r.val()?(c.show(),s.datepicker("option","minDate",r.val())):c.hide(),!0===arguments[arguments.length-1])return!1;d.trigger("check_options")}),s.on("change",function(){if(""!==s.val()?(o.show(),r.datepicker("option","maxDate",s.val())):o.hide(),!0===arguments[arguments.length-1])return!1;d.trigger("check_options")}),d.trigger("change"),e("").add(c).add(o).on("click",function(){e(this).next("input").val("").trigger("change")})})},save_interval:function(t){var a=this.wrapper;t.click(function(){var t={key:a.find("select.field-predefined").find(":selected").val(),start:a.find(".date-inputs .field-from").val(),end:a.find(".date-inputs .field-to").val()};e(this).attr("href",e(this).attr("href")+"&"+e.param(t))})}};e(document).ready(function(){l.init(e(".date-interval")),e('select[name="context"] .level-1').each(function(){var t=!0;e(this).nextUntil(".level-1").each(function(){if(e(this).is(":not(:disabled)"))return t=!1,!1}),!0===t&&e(this).prop("disabled",!0)})})}),jQuery.extend({streamGetQueryVars:function(e){return(e||document.location.search).replace(/(^\?)/,"").split("&").map(function(e){return e=e.split("="),this[e[0]]=e[1],this}.bind({}))[0]}});
 
ui/js/alerts-list.js DELETED
@@ -1,15 +0,0 @@
1
- /* globals jQuery */
2
- ( function( $ ) {
3
- $( document ).ready(
4
- function() {
5
- $( '.inline-edit-col-left, .inline-edit-col-right, #major-publishing-actions', '.edit-php.post-type-wp_mainwp_alerts' ).each(
6
- function() {
7
- $( this ).remove();
8
- }
9
- );
10
-
11
- // This is done with JS instead of CSS to override the inline styles added by Select2's JS.
12
- $( '.select2-container', '.inline-edit-col' ).css( { 'width': '100%' } );
13
- }
14
- );
15
- })( jQuery );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ui/js/alerts-list.min.js DELETED
@@ -1 +0,0 @@
1
- !function(e){e(document).ready(function(){e(".inline-edit-col-left, .inline-edit-col-right, #major-publishing-actions",".edit-php.post-type-wp_mainwp_alerts").each(function(){e(this).remove()}),e(".select2-container",".inline-edit-col").css({width:"100%"})})}(jQuery);
 
ui/js/alerts.js DELETED
@@ -1,309 +0,0 @@
1
- /* globals jQuery, streamAlerts, inlineEditPost */
2
- jQuery(
3
- function( $ ) {
4
- 'use strict';
5
- var $post_row,
6
- $edit_row;
7
- var setupSelectTwo = function setupSelectTwo( id ) {
8
- var $target = $( id );
9
- $target.find( '.select2-select.connector_or_context' ).each(
10
- function( k, el ) {
11
- $( el ).select2(
12
- {
13
- allowClear: true,
14
- placeholder: streamAlerts.anyContext,
15
- templateResult: function( item ) {
16
- if ( 'undefined' === typeof item.id ) {
17
- return item.text;
18
- }
19
- if ( -1 === item.id.indexOf( '-' ) ) {
20
- return $( '<span class="parent">' + item.text + '</span>' );
21
- } else {
22
- return $( '<span class="child">' + item.text + '</span>' );
23
- }
24
- },
25
- matcher: function (params, data) {
26
- var match = $.extend( true, {}, data );
27
-
28
- if (null === params.term || '' === $.trim( params.term )) {
29
- return match;
30
- }
31
-
32
- var term = params.term.toLowerCase();
33
-
34
- match.id = match.id.replace( 'blogs', 'sites' );
35
- if (match.id.toLowerCase().indexOf( term ) >= 0) {
36
- return match;
37
- }
38
-
39
- if (match.children) {
40
- for (var i = match.children.length - 1; i >= 0; i--) {
41
- var child = match.children[i];
42
-
43
- // Remove term from results if it doesn't match.
44
- if (-1 === child.id.toLowerCase().indexOf( term )) {
45
- match.children.splice( i, 1 );
46
- }
47
- }
48
-
49
- if (match.children.length > 0) {
50
- return match;
51
- }
52
- }
53
-
54
- return null;
55
- }
56
- }
57
- ).change(
58
- function() {
59
- var value = $( this ).val();
60
- if ( value ) {
61
- var parts = value.split( '-' );
62
- $( this ).siblings( '.connector' ).val( parts[0] );
63
- $( this ).siblings( '.context' ).val( parts[1] );
64
- }
65
- }
66
- );
67
-
68
- var parts = [
69
- $( el ).siblings( '.connector' ).val(),
70
- $( el ).siblings( '.context' ).val()
71
- ];
72
- if ( '' === parts[1] ) {
73
- parts.splice( 1, 1 );
74
- }
75
- $( el ).val( parts.join( '-' ) ).trigger( 'change' );
76
- }
77
- );
78
-
79
- $target.find( 'select.select2-select:not(.connector_or_context)' ).each(
80
- function() {
81
- var element_id_split = $( this ).attr( 'id' ).split( '_' );
82
- var select_name = element_id_split[element_id_split.length - 1].charAt( 0 ).toUpperCase() +
83
- element_id_split[element_id_split.length - 1].slice( 1 );
84
- $( this ).select2(
85
- {
86
- allowClear: true,
87
- placeholder: streamAlerts.any + ' ' + select_name
88
- }
89
- );
90
- }
91
- );
92
- };
93
- var $alertSettingSelect = $( '#wp_mainwp_stream_alert_type' );
94
-
95
- var loadAlertSettings = function( alert_type ) {
96
- var data = {
97
- 'action' : 'load_alerts_settings',
98
- 'alert_type' : alert_type
99
- };
100
-
101
- var $edit_row = $( '#wp_mainwp_stream_alert_type' ).closest( 'tr' );
102
- var row_id = $edit_row.attr( 'id' );
103
- data.post_id = row_id.split( '-' )[1];
104
- $.post(
105
- window.ajaxurl, data, function( response ) {
106
- var $alert_type_settings = $( '#wp_mainwp_stream_alert_type_form' );
107
- var alert_type = $( '#wp_mainwp_stream_alert_type' ).val();
108
- if ('none' === alert_type) {
109
- $alert_type_settings.hide();
110
- return;
111
- }
112
- $alert_type_settings.html( response.data.html );
113
- $alert_type_settings.show();
114
- }
115
- );
116
- };
117
-
118
- $( '#the-list' ).on(
119
- 'change', '#wp_mainwp_stream_trigger_connector_or_context', function() {
120
- if ( 'wp_mainwp_stream_trigger_connector_or_context' === $( this ).attr( 'id' ) ) {
121
- var connector = $( this ).val();
122
- if ( connector && 0 < connector.indexOf( '-' ) ) {
123
- var connector_split = connector.split( '-' );
124
- connector = connector_split[0];
125
- }
126
- getActions( connector );
127
- }
128
- }
129
- );
130
-
131
- var getActions = function( connector ) {
132
- var trigger_action = $( '#wp_mainwp_stream_trigger_action' );
133
- trigger_action.empty();
134
- trigger_action.prop( 'disabled', true );
135
-
136
- var placeholder = $( '<option/>', {value: '', text: ''} );
137
- trigger_action.append( placeholder );
138
-
139
- var data = {
140
- 'action' : 'get_actions',
141
- 'connector' : connector
142
- };
143
-
144
- $.post(
145
- window.ajaxurl, data, function( response ) {
146
- var success = response.success,
147
- actions = response.data;
148
- if ( ! success ) {
149
- return;
150
- }
151
- for ( var key in actions ) {
152
- if ( actions.hasOwnProperty( key ) ) {
153
- var value = actions[key];
154
- var option = $( '<option/>', {value: key, text: value} );
155
- trigger_action.append( option );
156
- }
157
- }
158
- trigger_action.prop( 'disabled', false );
159
- $( document ).trigger( 'alert-actions-updated' );
160
- }
161
- );
162
- };
163
-
164
- $alertSettingSelect.change(
165
- function() {
166
- loadAlertSettings( $( this ).val() );
167
- }
168
- );
169
-
170
- $( '#wpbody-content' ).on(
171
- 'click', 'a.page-title-action', function( e ) {
172
- e.preventDefault();
173
- $( '#add-new-alert' ).remove();
174
- if ( $( '.inline-edit-wp_mainwp_alerts' ).length > 0 ) {
175
- $( '.inline-edit-wp_mainwp_alerts .inline-edit-save button.button-secondary.cancel' ).trigger( 'click' );
176
- }
177
- var alert_form_html = '';
178
- var data = {
179
- 'action': 'get_new_alert_triggers_notifications'
180
- };
181
- $.post(
182
- window.ajaxurl, data, function( response ) {
183
- if ( true === response.success ) {
184
- alert_form_html = response.data.html;
185
- $( 'tbody#the-list' ).prepend( '<tr id="add-new-alert" class="inline-edit-row inline-edit-row-page inline-edit-page quick-edit-row quick-edit-row-page inline-edit-page inline-editor" style=""><td colspan="4" class="colspanchange">' + alert_form_html + '<p class="submit inline-edit-save"> <button type="button" class="button-secondary cancel alignleft">Cancel</button> <input type="hidden" id="_inline_edit" name="_inline_edit" value="3550d271fe"> <button type="button" class="button-primary save alignright">Save</button> <span class="spinner"></span><span class="error" style="display:none"></span> <br class="clear"></p></td></tr>' );
186
- var add_new_alert = $( '#add-new-alert' );
187
- var current_bg_color = add_new_alert.css( 'background-color' );
188
-
189
- // Color taken from /wp-admin/css/forms.css
190
- // #pass-strength-result.strong
191
- add_new_alert.css( 'background-color', '#C1E1B9' );
192
- setTimeout(
193
- function() {
194
- add_new_alert.css( 'background-color', current_bg_color );
195
- }, 250
196
- );
197
-
198
- $( '#wp_mainwp_stream_alert_type' ).change(
199
- function() {
200
- loadAlertSettings( $( this ).val() );
201
- }
202
- );
203
- add_new_alert.on(
204
- 'click', '.button-secondary.cancel', function() {
205
- $( '#add-new-alert' ).remove();
206
- }
207
- );
208
- add_new_alert.on( 'click', '.button-primary.save', save_new_alert );
209
-
210
- setupSelectTwo( '#add-new-alert' );
211
- }
212
- }
213
- );
214
-
215
- }
216
- );
217
- var save_new_alert = function save_new_alert( e ) {
218
- e.preventDefault();
219
- $( '#add-new-alert' ).find( 'p.submit.inline-edit-save span.spinner' ).css( 'visibility', 'visible' );
220
- var data = {
221
- 'action': 'save_new_alert',
222
- 'wp_mainwp_alerts_nonce': $( '#wp_mainwp_alerts_nonce' ).val(),
223
- 'wp_mainwp_stream_trigger_author': $( '#wp_mainwp_stream_trigger_author' ).val(),
224
- 'wp_mainwp_stream_trigger_context': $( '#wp_mainwp_stream_trigger_connector_or_context' ).val(),
225
- 'wp_mainwp_stream_trigger_action': $( '#wp_mainwp_stream_trigger_action' ).val(),
226
- 'wp_mainwp_stream_alert_type': $( '#wp_mainwp_stream_alert_type' ).val(),
227
- 'wp_mainwp_stream_alert_status': $( '#wp_mainwp_stream_alert_status' ).val()
228
- };
229
- $( '#wp_mainwp_stream_alert_type_form' ).find( ':input' ).each(
230
- function(){
231
- var alert_type_data_id = $( this ).attr( 'id' );
232
- if ( $( this ).val() ) {
233
- data[alert_type_data_id] = $( this ).val();
234
- }
235
- }
236
- );
237
-
238
- $.post(
239
- window.ajaxurl, data, function( response ) {
240
- if ( true === response.success ) {
241
- $( '#add-new-alert' ).find( 'p.submit.inline-edit-save span.spinner' ).css( 'visibility', 'hidden' );
242
- location.reload();
243
- }
244
- }
245
- );
246
- };
247
-
248
- // we create a copy of the WP inline edit post function
249
- var $wp_inline_edit = inlineEditPost.edit;
250
-
251
- // and then we overwrite the function with our own code
252
- inlineEditPost.edit = function( id ) {
253
- // "call" the original WP edit function
254
- // we don't want to leave WordPress hanging
255
- $wp_inline_edit.apply( this, arguments );
256
-
257
- // now we take care of our business
258
-
259
- // get the post ID
260
- var post_id = 0;
261
- if ( typeof( id ) === 'object' ) {
262
- post_id = parseInt( this.getId( id ), 10 );
263
- }
264
-
265
- if ( post_id > 0 ) {
266
- // define the edit row
267
- $edit_row = $( '#edit-' + post_id );
268
- $post_row = $( '#post-' + post_id );
269
-
270
- // get the data
271
- var alert_trigger_connector = $post_row.find( 'input[name="wp_mainwp_stream_trigger_connector"]' ).val();
272
- var alert_trigger_context = $post_row.find( 'input[name="wp_mainwp_stream_trigger_context"]' ).val();
273
- var alert_trigger_connector_context = alert_trigger_connector + '-' + alert_trigger_context;
274
- var alert_trigger_action = $post_row.find( 'input[name="wp_mainwp_stream_trigger_action"]' ).val();
275
- var alert_status = $post_row.find( 'input[name="wp_mainwp_stream_alert_status"]' ).val();
276
-
277
- // populate the data
278
- $edit_row.find( 'input[name="wp_mainwp_stream_trigger_connector"]' ).attr( 'value', alert_trigger_connector );
279
- $edit_row.find( 'input[name="wp_mainwp_stream_trigger_context"]' ).attr( 'value', alert_trigger_context );
280
- $edit_row.find( 'select[name="wp_mainwp_stream_trigger_connector_or_context"] option[value="' + alert_trigger_connector_context + '"]' ).attr( 'selected', 'selected' );
281
- $( document ).one(
282
- 'alert-actions-updated', function() {
283
- $edit_row.find( 'input[name="wp_mainwp_stream_trigger_action"]' ).attr( 'value', alert_trigger_action );
284
- $edit_row.find( 'select[name="wp_mainwp_stream_trigger_action"] option[value="' + alert_trigger_action + '"]' ).attr( 'selected', 'selected' ).trigger( 'change' );
285
- }
286
- );
287
- $edit_row.find( 'select[name="wp_mainwp_stream_alert_status"] option[value="' + alert_status + '"]' ).attr( 'selected', 'selected' );
288
- setupSelectTwo( '#edit-' + post_id );
289
-
290
- // Alert type handling
291
- $( '#wp_mainwp_stream_alert_type_form' ).hide();
292
- var alert_type = $post_row.find( 'input[name="wp_mainwp_stream_alert_type"]' ).val();
293
- $edit_row.find( 'select[name="wp_mainwp_stream_alert_type"] option[value="' + alert_type + '"]' ).attr( 'selected', 'selected' ).trigger( 'change' );
294
- }
295
- };
296
- if ( window.location.hash ) {
297
- var $target_post_row = $( window.location.hash );
298
- if ( $target_post_row.length ) {
299
- var scroll_to_position = $target_post_row.offset().top - $( '#wpadminbar' ).height();
300
- $( 'html, body' ).animate(
301
- {
302
- scrollTop: scroll_to_position
303
- }, 1000
304
- );
305
- $target_post_row.find( '.row-actions a.editinline' ).trigger( 'click' );
306
- }
307
- }
308
- }
309
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ui/js/alerts.min.js DELETED
@@ -1 +0,0 @@
1
- jQuery(function(t){"use strict";var e,n,a=function(e){var n=t(e);n.find(".select2-select.connector_or_context").each(function(e,n){t(n).select2({allowClear:!0,placeholder:streamAlerts.anyContext,templateResult:function(e){return void 0===e.id?e.text:t(-1===e.id.indexOf("-")?'<span class="parent">'+e.text+"</span>":'<span class="child">'+e.text+"</span>")},matcher:function(e,n){var a=t.extend(!0,{},n);if(null===e.term||""===t.trim(e.term))return a;var i=e.term.toLowerCase();if(a.id=a.id.replace("blogs","sites"),a.id.toLowerCase().indexOf(i)>=0)return a;if(a.children){for(var r=a.children.length-1;r>=0;r--)-1===a.children[r].id.toLowerCase().indexOf(i)&&a.children.splice(r,1);if(a.children.length>0)return a}return null}}).change(function(){var e=t(this).val();if(e){var n=e.split("-");t(this).siblings(".connector").val(n[0]),t(this).siblings(".context").val(n[1])}});var a=[t(n).siblings(".connector").val(),t(n).siblings(".context").val()];""===a[1]&&a.splice(1,1),t(n).val(a.join("-")).trigger("change")}),n.find("select.select2-select:not(.connector_or_context)").each(function(){var e=t(this).attr("id").split("_"),n=e[e.length-1].charAt(0).toUpperCase()+e[e.length-1].slice(1);t(this).select2({allowClear:!0,placeholder:streamAlerts.any+" "+n})})},i=t("#wp_mainwp_stream_alert_type"),r=function(e){var n={action:"load_alerts_settings",alert_type:e},a=t("#wp_mainwp_stream_alert_type").closest("tr").attr("id");n.post_id=a.split("-")[1],t.post(window.ajaxurl,n,function(e){var n=t("#wp_mainwp_stream_alert_type_form");"none"!==t("#wp_mainwp_stream_alert_type").val()?(n.html(e.data.html),n.show()):n.hide()})};t("#the-list").on("change","#wp_mainwp_stream_trigger_connector_or_context",function(){if("wp_mainwp_stream_trigger_connector_or_context"===t(this).attr("id")){var e=t(this).val();e&&0<e.indexOf("-")&&(e=e.split("-")[0]),s(e)}});var s=function(e){var n=t("#wp_mainwp_stream_trigger_action");n.empty(),n.prop("disabled",!0);var a=t("<option/>",{value:"",text:""});n.append(a);var i={action:"get_actions",connector:e};t.post(window.ajaxurl,i,function(e){var a=e.success,i=e.data;if(a){for(var r in i)if(i.hasOwnProperty(r)){var s=i[r],l=t("<option/>",{value:r,text:s});n.append(l)}n.prop("disabled",!1),t(document).trigger("alert-actions-updated")}})};i.change(function(){r(t(this).val())}),t("#wpbody-content").on("click","a.page-title-action",function(e){e.preventDefault(),t("#add-new-alert").remove(),t(".inline-edit-wp_mainwp_alerts").length>0&&t(".inline-edit-wp_mainwp_alerts .inline-edit-save button.button-secondary.cancel").trigger("click");var n="",i={action:"get_new_alert_triggers_notifications"};t.post(window.ajaxurl,i,function(e){if(!0===e.success){n=e.data.html,t("tbody#the-list").prepend('<tr id="add-new-alert" class="inline-edit-row inline-edit-row-page inline-edit-page quick-edit-row quick-edit-row-page inline-edit-page inline-editor" style=""><td colspan="4" class="colspanchange">'+n+'<p class="submit inline-edit-save"> <button type="button" class="button-secondary cancel alignleft">Cancel</button> <input type="hidden" id="_inline_edit" name="_inline_edit" value="3550d271fe"> <button type="button" class="button-primary save alignright">Save</button> <span class="spinner"></span><span class="error" style="display:none"></span> <br class="clear"></p></td></tr>');var i=t("#add-new-alert"),s=i.css("background-color");i.css("background-color","#C1E1B9"),setTimeout(function(){i.css("background-color",s)},250),t("#wp_mainwp_stream_alert_type").change(function(){r(t(this).val())}),i.on("click",".button-secondary.cancel",function(){t("#add-new-alert").remove()}),i.on("click",".button-primary.save",l),a("#add-new-alert")}})});var l=function(e){e.preventDefault(),t("#add-new-alert").find("p.submit.inline-edit-save span.spinner").css("visibility","visible");var n={action:"save_new_alert",wp_mainwp_alerts_nonce:t("#wp_mainwp_alerts_nonce").val(),wp_mainwp_stream_trigger_author:t("#wp_mainwp_stream_trigger_author").val(),wp_mainwp_stream_trigger_context:t("#wp_mainwp_stream_trigger_connector_or_context").val(),wp_mainwp_stream_trigger_action:t("#wp_mainwp_stream_trigger_action").val(),wp_mainwp_stream_alert_type:t("#wp_mainwp_stream_alert_type").val(),wp_mainwp_stream_alert_status:t("#wp_mainwp_stream_alert_status").val()};t("#wp_mainwp_stream_alert_type_form").find(":input").each(function(){var e=t(this).attr("id");t(this).val()&&(n[e]=t(this).val())}),t.post(window.ajaxurl,n,function(e){!0===e.success&&(t("#add-new-alert").find("p.submit.inline-edit-save span.spinner").css("visibility","hidden"),location.reload())})},o=inlineEditPost.edit;if(inlineEditPost.edit=function(i){o.apply(this,arguments);var r=0;if("object"==typeof i&&(r=parseInt(this.getId(i),10)),r>0){n=t("#edit-"+r);var s=(e=t("#post-"+r)).find('input[name="wp_mainwp_stream_trigger_connector"]').val(),l=e.find('input[name="wp_mainwp_stream_trigger_context"]').val(),c=s+"-"+l,p=e.find('input[name="wp_mainwp_stream_trigger_action"]').val(),_=e.find('input[name="wp_mainwp_stream_alert_status"]').val();n.find('input[name="wp_mainwp_stream_trigger_connector"]').attr("value",s),n.find('input[name="wp_mainwp_stream_trigger_context"]').attr("value",l),n.find('select[name="wp_mainwp_stream_trigger_connector_or_context"] option[value="'+c+'"]').attr("selected","selected"),t(document).one("alert-actions-updated",function(){n.find('input[name="wp_mainwp_stream_trigger_action"]').attr("value",p),n.find('select[name="wp_mainwp_stream_trigger_action"] option[value="'+p+'"]').attr("selected","selected").trigger("change")}),n.find('select[name="wp_mainwp_stream_alert_status"] option[value="'+_+'"]').attr("selected","selected"),a("#edit-"+r),t("#wp_mainwp_stream_alert_type_form").hide();var d=e.find('input[name="wp_mainwp_stream_alert_type"]').val();n.find('select[name="wp_mainwp_stream_alert_type"] option[value="'+d+'"]').attr("selected","selected").trigger("change")}},window.location.hash){var c=t(window.location.hash);if(c.length){var p=c.offset().top-t("#wpadminbar").height();t("html, body").animate({scrollTop:p},1e3),c.find(".row-actions a.editinline").trigger("click")}}});
 
ui/js/exclude.min.js DELETED
@@ -1 +0,0 @@
1
- jQuery(function(e){function t(t,s){var n=e(".select2-select.action",t),l=n.val();n.empty(),n.prop("disabled",!0);var i=e("<option/>",{value:"",text:""});n.append(i);var c={action:"get_actions",connector:s};e.post(window.ajaxurl,c,function(t){var s=t.success,i=t.data;if(s){for(var c in i)if(i.hasOwnProperty(c)){var r=i[c],a=e("<option/>",{value:c,text:r});n.append(a)}n.val(l),n.prop("disabled",!1),e(document).trigger("alert-actions-updated")}})}function s(){var t=e("table.mainwp-stream-exclude-list tbody tr:not( .hidden ) input.cb-select:checked"),s=e("#exclude_rules_remove_rules");0===t.length?s.prop("disabled",!0):s.prop("disabled",!1)}function n(){var t=e("table.mainwp-stream-exclude-list tbody tr:not( .hidden )"),s=e("table.mainwp-stream-exclude-list tbody tr.no-items"),n=e(".check-column.manage-column input.cb-select"),l=e("#exclude_rules_remove_rules");0===t.length?(s.show(),n.prop("disabled",!0),l.prop("disabled",!0)):(s.hide(),n.prop("disabled",!1)),wp_mainwp_stream_regenerate_alt_rows(t)}var l=function(){var l;e(".mainwp-stream-exclude-list tr:not(.hidden) select.select2-select.connector_or_context").each(function(s,n){e(n).select2({allowClear:!0,templateResult:function(t){return void 0===t.id?t.text:e(-1===t.id.indexOf("-")?'<span class="parent">'+t.text+"</span>":'<span class="child">'+t.text+"</span>")},matcher:function(t,s){var n=e.extend(!0,{},s);if(null==t.term||""===e.trim(t.term))return n;var l=t.term.toLowerCase();if(n.id=n.id.replace("blogs","sites"),n.id.toLowerCase().indexOf(l)>=0)return n;if(n.children){for(var i=n.children.length-1;i>=0;i--)-1===n.children[i].id.toLowerCase().indexOf(l)&&n.children.splice(i,1);if(n.children.length>0)return n}return null}}).on("change",function(){var s=e(this).closest("tr"),n=e(this).val();n&&0<n.indexOf("-")&&(n=n.split("-")[0]),t(s,n)})}),e(".mainwp-stream-exclude-list tr:not(.hidden) select.select2-select.action").each(function(t,s){e(s).select2({allowClear:!0})}),e(".mainwp-stream-exclude-list tr:not(.hidden) select.select2-select.author_or_role").each(function(t,s){(l=e(s)).select2({ajax:{type:"POST",url:ajaxurl,dataType:"json",quietMillis:500,data:function(e,t){return{find:e,limit:10,pager:t,action:"stream_get_users",nonce:l.data("nonce")}},processResults:function(t){var s={results:[{text:"",id:""},{text:"Roles",children:[]},{text:"Users",children:[]}]};if(!0!==t.success||void 0===t.data||!0!==t.data.status)return s;if(void 0===t.data.users||void 0===t.data.roles)return s;var n=[];return e.each(t.data.roles,function(e,t){n.push({id:e,text:t})}),s.results[1].children=n,s.results[2].children=t.data.users,s}},templateResult:function(t){var s=e("<div>").text(t.text);return void 0!==t.icon&&t.icon&&(s.prepend(e('<img src="'+t.icon+'" class="wp-mainwp-stream-select2-icon">')),s.attr("title",t.tooltip)),void 0!==t.tooltip?s.attr("title",t.tooltip):void 0!==t.user_count&&s.attr("title",t.user_count),s},templateSelection:function(t){var s=e("<div>").text(t.text);return e.isNumeric(t.id)&&t.text.indexOf("icon-users")<0&&s.append(e('<i class="icon16 icon-users"></i>')),s},allowClear:!0,placeholder:l.data("placeholder")}).on("change",function(){var t=e(this).select2("data");e(this).data("selected-id",t.id),e(this).data("selected-text",t.text)})}),e(".mainwp-stream-exclude-list tr:not(.hidden) select.select2-select.ip_address").each(function(t,s){var n=e(s),l="";n.select2({ajax:{type:"POST",url:ajaxurl,dataType:"json",quietMillis:500,data:function(e){return l=e.term,{find:e,limit:10,action:"stream_get_ips",nonce:n.data("nonce")}},processResults:function(t){var s={results:[]},n=[];return!0===t.success&&void 0!==t.data&&e.each(t.data,function(e,t){s.results.push({id:t,text:t})}),void 0===l?s:null===(n=l.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/))?s:(n.shift(),(n=e.grep(n,function(e){var t=parseInt(e,10);return t<=255&&t.toString()===e})).length>=4&&s.results.push({id:l,text:l}),s)}},allowClear:!1,multiple:!0,maximumSelectionSize:1,placeholder:n.data("placeholder"),tags:!0})}).on("change",function(){e(this).prev(".select2-container").find("input.select2-input").blur()}),e("ul.select2-choices, ul.select2-choices li, input.select2-input",".mainwp-stream-exclude-list tr:not(.hidden) .ip_address").on("mousedown click focus",function(){var t=e(this).closest(".select2-container"),s=t.find("input.select2-input");if(t.select2("data").length>=1)return s.blur(),!1}),e(".mainwp-stream-exclude-list tr:not(.hidden) .exclude_rules_remove_rule_row").on("click",function(){e(this).closest("tr").remove(),n(),s()})};l(),e(".mainwp-stream-exclude-list tr:not(.hidden) select.select2-select.author_or_role").each(function(){var t=e("<option selected>"+e(this).data("selected-text")+"</option>").val(e(this).data("selected-id"));e(this).append(t).trigger("change")}),e(".mainwp-stream-exclude-list tr:not(.hidden) select.select2-select.connector_or_context").each(function(){var t=[e(this).siblings(".connector").val(),e(this).siblings(".context").val()];""===t[1]&&t.splice(1,1),e(this).val(t.join("-")).trigger("change")}),e("#exclude_rules_new_rule").on("click",function(){var t=e("table.mainwp-stream-exclude-list");e("tr:not(.hidden) select.select2-select",t).each(function(){e(this).select2("destroy")});var i=e("tr",t).last(),c=i.clone();c.removeAttr("class"),e(".mainwp-stream-exclude-list tbody :input").off(),e(":input",c).off().val(""),i.after(c),l(),n(),s()}),e("#exclude_rules_remove_rules").on("click",function(){var t=e("table.mainwp-stream-exclude-list"),l=e("tbody input.cb-select:checked",t).closest("tr");e("tbody tr",t).length-l.length>=2?l.remove():(e(":input",l).val(""),e(l).not(":first").remove(),e(".select2-select",l).select2("val","")),t.find("input.cb-select").prop("checked",!1),n(),s()}),e(".mainwp-stream-exclude-list").closest("form").submit(function(){e(".mainwp-stream-exclude-list tbody tr.hidden",this).each(function(){e(this).find(":input").removeAttr("name")}),e(".mainwp-stream-exclude-list tbody tr:not(.hidden) select.select2-select.connector_or_context",this).each(function(){var t=e(this).val().split("-");e(this).siblings(".connector").val(t[0]),e(this).siblings(".context").val(t[1]),e(this).removeAttr("name")}),e(".mainwp-stream-exclude-list tbody tr:not(.hidden) select.select2-select.ip_address",this).each(function(){var t=e("option:selected",this).first();e("option:selected:not(:first)",this).each(function(){t.attr("value",t.attr("value")+","+e(this).attr("value")),e(this).removeAttr("selected")})})}),e(".mainwp-stream-exclude-list").closest("td").prev("th").hide(),e("table.mainwp-stream-exclude-list").on("click","input.cb-select",function(){s()}),e(document).ready(function(){n(),s()})});
 
ui/js/global.min.js DELETED
@@ -1 +0,0 @@
1
- jQuery(function(t){function e(t){window.confirm(wp_mainwp_stream_global.bulk_actions.i18n.confirm_action)||t.preventDefault()}t('.actions :submit:not([name="filter_action"])').on("click",function(n){t("table.widefat tbody :checkbox:checked").length>wp_mainwp_stream_global.bulk_actions.threshold&&e(n)}),t("#delete_all").on("click",function(n){parseInt(t("ul.subsubsub li.trash .count").text().replace(/\D/g,""),10)>wp_mainwp_stream_global.bulk_actions.threshold&&e(n)})});var wp_mainwp_stream_regenerate_alt_rows=function(t){if(!t.length)return!1;t.removeClass("alternate"),t.each(function(t){jQuery(this).addClass(t%2?"":"alternate")})};
 
ui/js/live-updates.min.js DELETED
@@ -1 +0,0 @@
1
- jQuery(function(e){e(document).ready(function(){if("settings_page_mainwp-reports-page"===wp_mainwp_stream_live_updates.current_screen&&"1"===wp_mainwp_stream_live_updates.current_page&&"asc"!==wp_mainwp_stream_live_updates.current_order&&!(parseInt(wp_mainwp_stream_live_updates.current_query_count,10)>1)){var t=".settings_page_mainwp-reports-page #the-list";wp.heartbeat.interval("fast"),e(document).on("heartbeat-send.stream",function(a,r){r["wp-mainwp-stream-heartbeat"]="live-update";var s=e(t+" tr:first .column-date time"),n=1;0!==s.length&&(n=""===s.attr("datetime")?1:s.attr("datetime")),r["wp-mainwp-stream-heartbeat-last-time"]=n,r["wp-mainwp-stream-heartbeat-query"]=wp_mainwp_stream_live_updates.current_query}),e(document).on("heartbeat-tick.stream",function(a,r){if(r["wp-mainwp-stream-heartbeat"]&&0!==r["wp-mainwp-stream-heartbeat"].length){var s=e("#edit_mainwp_stream_per_page").val(),n=e(t+" tr"),l=e(r["wp-mainwp-stream-heartbeat"]);l.addClass("new-row");var p=n.first().hasClass("alternate");if(1!==l.length||p){var i=0!=l.length%2||p?"odd":"even";l.filter(":nth-child("+i+")").addClass("alternate")}else l.addClass("alternate");e(t).prepend(l),e(".metabox-prefs input").each(function(){if(!0!==e(this).prop("checked")){var t=e(this).val();e("td.column-"+t).hide()}});var _=s-(l.length+n.length);_<0&&e(t+" tr").slice(_).remove(),e(t+" tr.no-items").remove();var d=r.total_items_i18n||"";d&&(e(".displaying-num").text(d),e(".total-pages").text(r.total_pages_i18n),e(".tablenav-pages").find(".next-page, .last-page").toggleClass("disabled",r.total_pages===e(".current-page").val()),e(".tablenav-pages .last-page").attr("href",r.last_page_link)),e(t).parent().trigger("updated"),wp_mainwp_stream_regenerate_alt_rows(e(t+" tr")),setTimeout(function(){e(".new-row").addClass("fadeout"),setTimeout(function(){e(t+" tr").removeClass("new-row fadeout")},500)},3e3)}})}})});
 
ui/js/settings.min.js DELETED
@@ -1 +0,0 @@
1
- jQuery(function(e){function a(){t.is(":checked")?(r.addClass("hidden"),i.addClass("hidden")):(r.removeClass("hidden"),i.removeClass("hidden"))}var n;n="wp_mainwp_stream_network"===e('input[name="option_page"]').val()?"_network_affix":"";var t=e("#wp_stream"+n+"\\[general_keep_records_indefinitely\\]"),i=e("#wp_stream"+n+"_general_records_ttl"),r=i.closest("tr");t.on("change",function(){a()}),a(),e("#wp_mainwp_stream_general_reset_site_settings").click(function(e){confirm(wp_mainwp_stream.i18n.confirm_defaults)||e.preventDefault()});var o=e(".nav-tab-wrapper"),s=e(".nav-tab-content table.form-table"),c=o.find(".nav-tab-active"),l=c.length>0?o.find("a").index(c):0,d=window.location.hash.match(/^#(\d+)$/),h=null!==d?d[1]:l,_=function(a){var n=e('input[name="option_page"][value^="wp_stream"]').closest("form");if(0!==n.length){var t=n.attr("action");n.prop("action",t.replace(/(^[^#]*).*$/,"$1#"+a))}};o.on("click","a",function(){var a=o.find("a").index(e(this)),n=window.location.hash.match(/^#(\d+)$/);return s.hide().eq(a).show(),o.find("a").removeClass("nav-tab-active").filter(e(this)).addClass("nav-tab-active"),""!==window.location.hash&&null===n||(window.location.hash=a),_(a),!1}),o.children().eq(h).trigger("click")});
 
ui/js/wpseo-admin.min.js DELETED
@@ -1 +0,0 @@
1
- jQuery(function(o){var t,n,a;window.location.hash.substr("stream-highlight-")&&(t=window.location.hash.replace("stream-highlight-",""),n=o(":input"+t),window.location.hash="",n.length&&(o("#wpseo-tabs").length&&(a=n.parents(".wpseotab").first().attr("id"),window.location.hash="#top#"+a),jQuery(document).ready(function(){setTimeout(function(){o("body,html").animate({scrollTop:n.offset().top-50},"slow",function(){n.animate({backgroundColor:"yellow"},"slow")})},500)})))});
 
ui/lib/select2/css/select2.css CHANGED
@@ -1,484 +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
- height: 1px !important;
122
- margin: -1px !important;
123
- overflow: hidden !important;
124
- padding: 0 !important;
125
- position: absolute !important;
126
- width: 1px !important; }
127
-
128
- .select2-container--default .select2-selection--single {
129
- background-color: #fff;
130
- border: 1px solid #aaa;
131
- border-radius: 4px; }
132
- .select2-container--default .select2-selection--single .select2-selection__rendered {
133
- color: #444;
134
- line-height: 28px; }
135
- .select2-container--default .select2-selection--single .select2-selection__clear {
136
- cursor: pointer;
137
- float: right;
138
- font-weight: bold; }
139
- .select2-container--default .select2-selection--single .select2-selection__placeholder {
140
- color: #999; }
141
- .select2-container--default .select2-selection--single .select2-selection__arrow {
142
- height: 26px;
143
- position: absolute;
144
- top: 1px;
145
- right: 1px;
146
- width: 20px; }
147
- .select2-container--default .select2-selection--single .select2-selection__arrow b {
148
- border-color: #888 transparent transparent transparent;
149
- border-style: solid;
150
- border-width: 5px 4px 0 4px;
151
- height: 0;
152
- left: 50%;
153
- margin-left: -4px;
154
- margin-top: -2px;
155
- position: absolute;
156
- top: 50%;
157
- width: 0; }
158
-
159
- .select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear {
160
- float: left; }
161
-
162
- .select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow {
163
- left: 1px;
164
- right: auto; }
165
-
166
- .select2-container--default.select2-container--disabled .select2-selection--single {
167
- background-color: #eee;
168
- cursor: default; }
169
- .select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear {
170
- display: none; }
171
-
172
- .select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b {
173
- border-color: transparent transparent #888 transparent;
174
- border-width: 0 4px 5px 4px; }
175
-
176
- .select2-container--default .select2-selection--multiple {
177
- background-color: white;
178
- border: 1px solid #aaa;
179
- border-radius: 4px;
180
- cursor: text; }
181
- .select2-container--default .select2-selection--multiple .select2-selection__rendered {
182
- box-sizing: border-box;
183
- list-style: none;
184
- margin: 0;
185
- padding: 0 5px;
186
- width: 100%; }
187
- .select2-container--default .select2-selection--multiple .select2-selection__rendered li {
188
- list-style: none; }
189
- .select2-container--default .select2-selection--multiple .select2-selection__placeholder {
190
- color: #999;
191
- margin-top: 5px;
192
- float: left; }
193
- .select2-container--default .select2-selection--multiple .select2-selection__clear {
194
- cursor: pointer;
195
- float: right;
196
- font-weight: bold;
197
- margin-top: 5px;
198
- margin-right: 10px; }
199
- .select2-container--default .select2-selection--multiple .select2-selection__choice {
200
- background-color: #e4e4e4;
201
- border: 1px solid #aaa;
202
- border-radius: 4px;
203
- cursor: default;
204
- float: left;
205
- margin-right: 5px;
206
- margin-top: 5px;
207
- padding: 0 5px; }
208
- .select2-container--default .select2-selection--multiple .select2-selection__choice__remove {
209
- color: #999;
210
- cursor: pointer;
211
- display: inline-block;
212
- font-weight: bold;
213
- margin-right: 2px; }
214
- .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover {
215
- color: #333; }
216
-
217
- .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder, .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline {
218
- float: right; }
219
-
220
- .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice {
221
- margin-left: 5px;
222
- margin-right: auto; }
223
-
224
- .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove {
225
- margin-left: 2px;
226
- margin-right: auto; }
227
-
228
- .select2-container--default.select2-container--focus .select2-selection--multiple {
229
- border: solid black 1px;
230
- outline: 0; }
231
-
232
- .select2-container--default.select2-container--disabled .select2-selection--multiple {
233
- background-color: #eee;
234
- cursor: default; }
235
-
236
- .select2-container--default.select2-container--disabled .select2-selection__choice__remove {
237
- display: none; }
238
-
239
- .select2-container--default.select2-container--open.select2-container--above .select2-selection--single, .select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple {
240
- border-top-left-radius: 0;
241
- border-top-right-radius: 0; }
242
-
243
- .select2-container--default.select2-container--open.select2-container--below .select2-selection--single, .select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple {
244
- border-bottom-left-radius: 0;
245
- border-bottom-right-radius: 0; }
246
-
247
- .select2-container--default .select2-search--dropdown .select2-search__field {
248
- border: 1px solid #aaa; }
249
-
250
- .select2-container--default .select2-search--inline .select2-search__field {
251
- background: transparent;
252
- border: none;
253
- outline: 0;
254
- box-shadow: none;
255
- -webkit-appearance: textfield; }
256
-
257
- .select2-container--default .select2-results > .select2-results__options {
258
- max-height: 200px;
259
- overflow-y: auto; }
260
-
261
- .select2-container--default .select2-results__option[role=group] {
262
- padding: 0; }
263
-
264
- .select2-container--default .select2-results__option[aria-disabled=true] {
265
- color: #999; }
266
-
267
- .select2-container--default .select2-results__option[aria-selected=true] {
268
- background-color: #ddd; }
269
-
270
- .select2-container--default .select2-results__option .select2-results__option {
271
- padding-left: 1em; }
272
- .select2-container--default .select2-results__option .select2-results__option .select2-results__group {
273
- padding-left: 0; }
274
- .select2-container--default .select2-results__option .select2-results__option .select2-results__option {
275
- margin-left: -1em;
276
- padding-left: 2em; }
277
- .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
278
- margin-left: -2em;
279
- padding-left: 3em; }
280
- .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
281
- margin-left: -3em;
282
- padding-left: 4em; }
283
- .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
284
- margin-left: -4em;
285
- padding-left: 5em; }
286
- .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
287
- margin-left: -5em;
288
- padding-left: 6em; }
289
-
290
- .select2-container--default .select2-results__option--highlighted[aria-selected] {
291
- background-color: #5897fb;
292
- color: white; }
293
-
294
- .select2-container--default .select2-results__group {
295
- cursor: default;
296
- display: block;
297
- padding: 6px; }
298
-
299
- .select2-container--classic .select2-selection--single {
300
- background-color: #f7f7f7;
301
- border: 1px solid #aaa;
302
- border-radius: 4px;
303
- outline: 0;
304
- background-image: -webkit-linear-gradient(top, white 50%, #eeeeee 100%);
305
- background-image: -o-linear-gradient(top, white 50%, #eeeeee 100%);
306
- background-image: linear-gradient(to bottom, white 50%, #eeeeee 100%);
307
- background-repeat: repeat-x;
308
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); }
309
- .select2-container--classic .select2-selection--single:focus {
310
- border: 1px solid #5897fb; }
311
- .select2-container--classic .select2-selection--single .select2-selection__rendered {
312
- color: #444;
313
- line-height: 28px; }
314
- .select2-container--classic .select2-selection--single .select2-selection__clear {
315
- cursor: pointer;
316
- float: right;
317
- font-weight: bold;
318
- margin-right: 10px; }
319
- .select2-container--classic .select2-selection--single .select2-selection__placeholder {
320
- color: #999; }
321
- .select2-container--classic .select2-selection--single .select2-selection__arrow {
322
- background-color: #ddd;
323
- border: none;
324
- border-left: 1px solid #aaa;
325
- border-top-right-radius: 4px;
326
- border-bottom-right-radius: 4px;
327
- height: 26px;
328
- position: absolute;
329
- top: 1px;
330
- right: 1px;
331
- width: 20px;
332
- background-image: -webkit-linear-gradient(top, #eeeeee 50%, #cccccc 100%);
333
- background-image: -o-linear-gradient(top, #eeeeee 50%, #cccccc 100%);
334
- background-image: linear-gradient(to bottom, #eeeeee 50%, #cccccc 100%);
335
- background-repeat: repeat-x;
336
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0); }
337
- .select2-container--classic .select2-selection--single .select2-selection__arrow b {
338
- border-color: #888 transparent transparent transparent;
339
- border-style: solid;
340
- border-width: 5px 4px 0 4px;
341
- height: 0;
342
- left: 50%;
343
- margin-left: -4px;
344
- margin-top: -2px;
345
- position: absolute;
346
- top: 50%;
347
- width: 0; }
348
-
349
- .select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear {
350
- float: left; }
351
-
352
- .select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow {
353
- border: none;
354
- border-right: 1px solid #aaa;
355
- border-radius: 0;
356
- border-top-left-radius: 4px;
357
- border-bottom-left-radius: 4px;
358
- left: 1px;
359
- right: auto; }
360
-
361
- .select2-container--classic.select2-container--open .select2-selection--single {
362
- border: 1px solid #5897fb; }
363
- .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow {
364
- background: transparent;
365
- border: none; }
366
- .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b {
367
- border-color: transparent transparent #888 transparent;
368
- border-width: 0 4px 5px 4px; }
369
-
370
- .select2-container--classic.select2-container--open.select2-container--above .select2-selection--single {
371
- border-top: none;
372
- border-top-left-radius: 0;
373
- border-top-right-radius: 0;
374
- background-image: -webkit-linear-gradient(top, white 0%, #eeeeee 50%);
375
- background-image: -o-linear-gradient(top, white 0%, #eeeeee 50%);
376
- background-image: linear-gradient(to bottom, white 0%, #eeeeee 50%);
377
- background-repeat: repeat-x;
378
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); }
379
-
380
- .select2-container--classic.select2-container--open.select2-container--below .select2-selection--single {
381
- border-bottom: none;
382
- border-bottom-left-radius: 0;
383
- border-bottom-right-radius: 0;
384
- background-image: -webkit-linear-gradient(top, #eeeeee 50%, white 100%);
385
- background-image: -o-linear-gradient(top, #eeeeee 50%, white 100%);
386
- background-image: linear-gradient(to bottom, #eeeeee 50%, white 100%);
387
- background-repeat: repeat-x;
388
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0); }
389
-
390
- .select2-container--classic .select2-selection--multiple {
391
- background-color: white;
392
- border: 1px solid #aaa;
393
- border-radius: 4px;
394
- cursor: text;
395
- outline: 0; }
396
- .select2-container--classic .select2-selection--multiple:focus {
397
- border: 1px solid #5897fb; }
398
- .select2-container--classic .select2-selection--multiple .select2-selection__rendered {
399
- list-style: none;
400
- margin: 0;
401
- padding: 0 5px; }
402
- .select2-container--classic .select2-selection--multiple .select2-selection__clear {
403
- display: none; }
404
- .select2-container--classic .select2-selection--multiple .select2-selection__choice {
405
- background-color: #e4e4e4;
406
- border: 1px solid #aaa;
407
- border-radius: 4px;
408
- cursor: default;
409
- float: left;
410
- margin-right: 5px;
411
- margin-top: 5px;
412
- padding: 0 5px; }
413
- .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove {
414
- color: #888;
415
- cursor: pointer;
416
- display: inline-block;
417
- font-weight: bold;
418
- margin-right: 2px; }
419
- .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover {
420
- color: #555; }
421
-
422
- .select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice {
423
- float: right; }
424
-
425
- .select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice {
426
- margin-left: 5px;
427
- margin-right: auto; }
428
-
429
- .select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove {
430
- margin-left: 2px;
431
- margin-right: auto; }
432
-
433
- .select2-container--classic.select2-container--open .select2-selection--multiple {
434
- border: 1px solid #5897fb; }
435
-
436
- .select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple {
437
- border-top: none;
438
- border-top-left-radius: 0;
439
- border-top-right-radius: 0; }
440
-
441
- .select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple {
442
- border-bottom: none;
443
- border-bottom-left-radius: 0;
444
- border-bottom-right-radius: 0; }
445
-
446
- .select2-container--classic .select2-search--dropdown .select2-search__field {
447
- border: 1px solid #aaa;
448
- outline: 0; }
449
-
450
- .select2-container--classic .select2-search--inline .select2-search__field {
451
- outline: 0;
452
- box-shadow: none; }
453
-
454
- .select2-container--classic .select2-dropdown {
455
- background-color: white;
456
- border: 1px solid transparent; }
457
-
458
- .select2-container--classic .select2-dropdown--above {
459
- border-bottom: none; }
460
-
461
- .select2-container--classic .select2-dropdown--below {
462
- border-top: none; }
463
-
464
- .select2-container--classic .select2-results > .select2-results__options {
465
- max-height: 200px;
466
- overflow-y: auto; }
467
-
468
- .select2-container--classic .select2-results__option[role=group] {
469
- padding: 0; }
470
-
471
- .select2-container--classic .select2-results__option[aria-disabled=true] {
472
- color: grey; }
473
-
474
- .select2-container--classic .select2-results__option--highlighted[aria-selected] {
475
- background-color: #3875d7;
476
- color: white; }
477
-
478
- .select2-container--classic .select2-results__group {
479
- cursor: default;
480
- display: block;
481
- padding: 6px; }
482
-
483
- .select2-container--classic.select2-container--open .select2-dropdown {
484
- border-color: #5897fb; }
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; }
 
 
 
ui/lib/select2/css/select2.min.css CHANGED
@@ -1 +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;height:1px !important;margin:-1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !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__placeholder{color:#999;margin-top:5px;float:left}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px}.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-selection__placeholder,.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}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{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}
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}
ui/lib/select2/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}();
ui/lib/select2/js/i18n/ar.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/ar",[],function(){return{errorLoading:function(){return"لا يمكن تحميل النتائج"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="الرجاء حذف "+t+" عناصر";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="الرجاء إضافة "+t+" عناصر";return n},loadingMore:function(){return"جاري تحميل نتائج إضافية..."},maximumSelected:function(e){var t="تستطيع إختيار "+e.maximum+" بنود فقط";return t},noResults:function(){return"لم يتم العثور على أي نتائج"},searching:function(){return"جاري البحث…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/js/i18n/az.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/az",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return t+" simvol silin"},inputTooShort:function(e){var t=e.minimum-e.input.length;return t+" simvol daxil edin"},loadingMore:function(){return"Daha çox nəticə yüklənir…"},maximumSelected:function(e){return"Sadəcə "+e.maximum+" element seçə bilərsiniz"},noResults:function(){return"Nəticə tapılmadı"},searching:function(){return"Axtarılır…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/js/i18n/bg.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/bg",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Моля въведете с "+t+" по-малко символ";return t>1&&(n+="a"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Моля въведете още "+t+" символ";return t>1&&(n+="a"),n},loadingMore:function(){return"Зареждат се още…"},maximumSelected:function(e){var t="Можете да направите до "+e.maximum+" ";return e.maximum>1?t+="избора":t+="избор",t},noResults:function(){return"Няма намерени съвпадения"},searching:function(){return"Търсене…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/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}();
ui/lib/select2/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}();
ui/lib/select2/js/i18n/ca.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/ca",[],function(){return{errorLoading:function(){return"La càrrega ha fallat"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Si us plau, elimina "+t+" car";return t==1?n+="àcter":n+="àcters",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Si us plau, introdueix "+t+" car";return t==1?n+="àcter":n+="àcters",n},loadingMore:function(){return"Carregant més resultats…"},maximumSelected:function(e){var t="Només es pot seleccionar "+e.maximum+" element";return e.maximum!=1&&(t+="s"),t},noResults:function(){return"No s'han trobat resultats"},searching:function(){return"Cercant…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/js/i18n/cs.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/cs",[],function(){function e(e,t){switch(e){case 2:return t?"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(t){var n=t.input.length-t.maximum;return n==1?"Prosím zadejte o jeden znak méně":n<=4?"Prosím zadejte o "+e(n,!0)+" znaky méně":"Prosím zadejte o "+n+" znaků méně"},inputTooShort:function(t){var n=t.minimum-t.input.length;return n==1?"Prosím zadejte ještě jeden znak":n<=4?"Prosím zadejte ještě další "+e(n,!0)+" znaky":"Prosím zadejte ještě dalších "+n+" znaků"},loadingMore:function(){return"Načítají se další výsledky…"},maximumSelected:function(t){var n=t.maximum;return n==1?"Můžete zvolit jen jednu položku":n<=4?"Můžete zvolit maximálně "+e(n,!1)+" položky":"Můžete zvolit maximálně "+n+" položek"},noResults:function(){return"Nenalezeny žádné položky"},searching:function(){return"Vyhledávání…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/js/i18n/da.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/da",[],function(){return{errorLoading:function(){return"Resultaterne kunne ikke indlæses."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Angiv venligst "+t+" tegn mindre";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Angiv venligst "+t+" tegn mere";return n},loadingMore:function(){return"Indlæser flere resultater…"},maximumSelected:function(e){var t="Du kan kun vælge "+e.maximum+" emne";return e.maximum!=1&&(t+="r"),t},noResults:function(){return"Ingen resultater fundet"},searching:function(){return"Søger…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/js/i18n/de.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/de",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return"Bitte "+t+" Zeichen weniger eingeben"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Bitte "+t+" Zeichen mehr eingeben"},loadingMore:function(){return"Lade mehr Ergebnisse…"},maximumSelected:function(e){var t="Sie können nur "+e.maximum+" Eintr";return e.maximum===1?t+="ag":t+="äge",t+=" auswählen",t},noResults:function(){return"Keine Übereinstimmungen gefunden"},searching:function(){return"Suche…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/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}();
ui/lib/select2/js/i18n/el.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/el",[],function(){return{errorLoading:function(){return"Τα αποτελέσματα δεν μπόρεσαν να φορτώσουν."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Παρακαλώ διαγράψτε "+t+" χαρακτήρ";return t==1&&(n+="α"),t!=1&&(n+="ες"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Παρακαλώ συμπληρώστε "+t+" ή περισσότερους χαρακτήρες";return n},loadingMore:function(){return"Φόρτωση περισσότερων αποτελεσμάτων…"},maximumSelected:function(e){var t="Μπορείτε να επιλέξετε μόνο "+e.maximum+" επιλογ";return e.maximum==1&&(t+="ή"),e.maximum!=1&&(t+="ές"),t},noResults:function(){return"Δεν βρέθηκαν αποτελέσματα"},searching:function(){return"Αναζήτηση…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/js/i18n/en.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return 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 t!=1&&(n+="s"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Please enter "+t+" or more characters";return n},loadingMore:function(){return"Loading more results…"},maximumSelected:function(e){var t="You can only select "+e.maximum+" item";return e.maximum!=1&&(t+="s"),t},noResults:function(){return"No results found"},searching:function(){return"Searching…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/js/i18n/es.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/es",[],function(){return{errorLoading:function(){return"La carga falló"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Por favor, elimine "+t+" car";return t==1?n+="ácter":n+="acteres",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Por favor, introduzca "+t+" car";return t==1?n+="ácter":n+="acteres",n},loadingMore:function(){return"Cargando más resultados…"},maximumSelected:function(e){var t="Sólo puede seleccionar "+e.maximum+" elemento";return e.maximum!=1&&(t+="s"),t},noResults:function(){return"No se encontraron resultados"},searching:function(){return"Buscando…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/js/i18n/et.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/et",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Sisesta "+t+" täht";return t!=1&&(n+="e"),n+=" vähem",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Sisesta "+t+" täht";return t!=1&&(n+="e"),n+=" rohkem",n},loadingMore:function(){return"Laen tulemusi…"},maximumSelected:function(e){var t="Saad vaid "+e.maximum+" tulemus";return e.maximum==1?t+="e":t+="t",t+=" valida",t},noResults:function(){return"Tulemused puuduvad"},searching:function(){return"Otsin…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/js/i18n/eu.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/eu",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Idatzi ";return t==1?n+="karaktere bat":n+=t+" karaktere",n+=" gutxiago",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Idatzi ";return t==1?n+="karaktere bat":n+=t+" karaktere",n+=" gehiago",n},loadingMore:function(){return"Emaitza gehiago kargatzen…"},maximumSelected:function(e){return e.maximum===1?"Elementu bakarra hauta dezakezu":e.maximum+" elementu hauta ditzakezu soilik"},noResults:function(){return"Ez da bat datorrenik aurkitu"},searching:function(){return"Bilatzen…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/js/i18n/fa.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/fa",[],function(){return{errorLoading:function(){return"امکان بارگذاری نتایج وجود ندارد."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="لطفاً "+t+" کاراکتر را حذف نمایید";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="لطفاً تعداد "+t+" کاراکتر یا بیشتر وارد نمایید";return n},loadingMore:function(){return"در حال بارگذاری نتایج بیشتر..."},maximumSelected:function(e){var t="شما تنها می‌توانید "+e.maximum+" آیتم را انتخاب نمایید";return t},noResults:function(){return"هیچ نتیجه‌ای یافت نشد"},searching:function(){return"در حال جستجو..."}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/js/i18n/fi.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/fi",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return"Ole hyvä ja anna "+t+" merkkiä vähemmän"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Ole hyvä ja anna "+t+" merkkiä lisää"},loadingMore:function(){return"Ladataan lisää tuloksia…"},maximumSelected:function(e){return"Voit valita ainoastaan "+e.maximum+" kpl"},noResults:function(){return"Ei tuloksia"},searching:function(){}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/js/i18n/fr.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/fr",[],function(){return{errorLoading:function(){return"Les résultats ne peuvent pas être chargés."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Supprimez "+t+" caractère";return t!==1&&(n+="s"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Saisissez "+t+" caractère";return t!==1&&(n+="s"),n},loadingMore:function(){return"Chargement de résultats supplémentaires…"},maximumSelected:function(e){var t="Vous pouvez seulement sélectionner "+e.maximum+" élément";return e.maximum!==1&&(t+="s"),t},noResults:function(){return"Aucun résultat trouvé"},searching:function(){return"Recherche en cours…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/js/i18n/gl.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/gl",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Elimine ";return t===1?n+="un carácter":n+=t+" caracteres",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Engada ";return t===1?n+="un carácter":n+=t+" caracteres",n},loadingMore:function(){return"Cargando máis resultados…"},maximumSelected:function(e){var t="Só pode ";return e.maximum===1?t+="un elemento":t+=e.maximum+" elementos",t},noResults:function(){return"Non se atoparon resultados"},searching:function(){return"Buscando…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/js/i18n/he.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/he",[],function(){return{errorLoading:function(){return"שגיאה בטעינת התוצאות"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="נא למחוק ";return t===1?n+="תו אחד":n+=t+" תווים",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="נא להכניס ";return t===1?n+="תו אחד":n+=t+" תווים",n+=" או יותר",n},loadingMore:function(){return"טוען תוצאות נוספות…"},maximumSelected:function(e){var t="באפשרותך לבחור עד ";return e.maximum===1?t+="פריט אחד":t+=e.maximum+" פריטים",t},noResults:function(){return"לא נמצאו תוצאות"},searching:function(){return"מחפש…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/js/i18n/hi.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/hi",[],function(){return{errorLoading:function(){return"परिणामों को लोड नहीं किया जा सका।"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=t+" अक्षर को हटा दें";return t>1&&(n=t+" अक्षरों को हटा दें "),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="कृपया "+t+" या अधिक अक्षर दर्ज करें";return n},loadingMore:function(){return"अधिक परिणाम लोड हो रहे है..."},maximumSelected:function(e){var t="आप केवल "+e.maximum+" आइटम का चयन कर सकते हैं";return t},noResults:function(){return"कोई परिणाम नहीं मिला"},searching:function(){return"खोज रहा है..."}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/js/i18n/hr.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/hr",[],function(){function e(e){var t=" "+e+" znak";return e%10<5&&e%10>0&&(e%100<5||e%100>19)?e%10>1&&(t+="a"):t+="ova",t}return{errorLoading:function(){return"Preuzimanje nije uspjelo."},inputTooLong:function(t){var n=t.input.length-t.maximum;return"Unesite "+e(n)},inputTooShort:function(t){var n=t.minimum-t.input.length;return"Unesite još "+e(n)},loadingMore:function(){return"Učitavanje rezultata…"},maximumSelected:function(e){return"Maksimalan broj odabranih stavki je "+e.maximum},noResults:function(){return"Nema rezultata"},searching:function(){return"Pretraga…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/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}();
ui/lib/select2/js/i18n/hu.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/hu",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return"Túl hosszú. "+t+" karakterrel több, mint kellene."},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Túl rövid. Még "+t+" 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…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/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}();
ui/lib/select2/js/i18n/id.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/id",[],function(){return{errorLoading:function(){return"Data tidak boleh diambil."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Hapuskan "+t+" huruf"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Masukkan "+t+" huruf lagi"},loadingMore:function(){return"Mengambil data…"},maximumSelected:function(e){return"Anda hanya dapat memilih "+e.maximum+" pilihan"},noResults:function(){return"Tidak ada data yang sesuai"},searching:function(){return"Mencari…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/js/i18n/is.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/is",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vinsamlegast styttið texta um "+t+" staf";return t<=1?n:n+"i"},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vinsamlegast skrifið "+t+" staf";return t>1&&(n+="i"),n+=" í viðbót",n},loadingMore:function(){return"Sæki fleiri niðurstöður…"},maximumSelected:function(e){return"Þú getur aðeins valið "+e.maximum+" atriði"},noResults:function(){return"Ekkert fannst"},searching:function(){return"Leita…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/js/i18n/it.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/it",[],function(){return{errorLoading:function(){return"I risultati non possono essere caricati."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Per favore cancella "+t+" caratter";return t!==1?n+="i":n+="e",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Per favore inserisci "+t+" o più caratteri";return n},loadingMore:function(){return"Caricando più risultati…"},maximumSelected:function(e){var t="Puoi selezionare solo "+e.maximum+" element";return e.maximum!==1?t+="i":t+="o",t},noResults:function(){return"Nessun risultato trovato"},searching:function(){return"Sto cercando…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/js/i18n/ja.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/ja",[],function(){return{errorLoading:function(){return"結果が読み込まれませんでした"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=t+" 文字を削除してください";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="少なくとも "+t+" 文字を入力してください";return n},loadingMore:function(){return"読み込み中…"},maximumSelected:function(e){var t=e.maximum+" 件しか選択できません";return t},noResults:function(){return"対象が見つかりません"},searching:function(){return"検索しています…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/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}();
ui/lib/select2/js/i18n/km.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/km",[],function(){return{errorLoading:function(){return"មិនអាចទាញយកទិន្នន័យ"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="សូមលុបចេញ "+t+" អក្សរ";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="សូមបញ្ចូល"+t+" អក្សរ រឺ ច្រើនជាងនេះ";return n},loadingMore:function(){return"កំពុងទាញយកទិន្នន័យបន្ថែម..."},maximumSelected:function(e){var t="អ្នកអាចជ្រើសរើសបានតែ "+e.maximum+" ជម្រើសប៉ុណ្ណោះ";return t},noResults:function(){return"មិនមានលទ្ធផល"},searching:function(){return"កំពុងស្វែងរក..."}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/js/i18n/ko.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/ko",[],function(){return{errorLoading:function(){return"결과를 불러올 수 없습니다."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="너무 깁니다. "+t+" 글자 지워주세요.";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="너무 짧습니다. "+t+" 글자 더 입력해주세요.";return n},loadingMore:function(){return"불러오는 중…"},maximumSelected:function(e){var t="최대 "+e.maximum+"개까지만 선택 가능합니다.";return t},noResults:function(){return"결과가 없습니다."},searching:function(){return"검색 중…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/js/i18n/lt.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/lt",[],function(){function e(e,t,n,r){return e%10===1&&(e%100<11||e%100>19)?t:e%10>=2&&e%10<=9&&(e%100<11||e%100>19)?n:r}return{inputTooLong:function(t){var n=t.input.length-t.maximum,r="Pašalinkite "+n+" simbol";return r+=e(n,"į","ius","ių"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Įrašykite dar "+n+" simbol";return r+=e(n,"į","ius","ių"),r},loadingMore:function(){return"Kraunama daugiau rezultatų…"},maximumSelected:function(t){var n="Jūs galite pasirinkti tik "+t.maximum+" element";return n+=e(t.maximum,"ą","us","ų"),n},noResults:function(){return"Atitikmenų nerasta"},searching:function(){return"Ieškoma…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/js/i18n/lv.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/lv",[],function(){function e(e,t,n,r){return e===11?t:e%10===1?n:r}return{inputTooLong:function(t){var n=t.input.length-t.maximum,r="Lūdzu ievadiet par "+n;return r+=" simbol"+e(n,"iem","u","iem"),r+" mazāk"},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Lūdzu ievadiet vēl "+n;return r+=" simbol"+e(n,"us","u","us"),r},loadingMore:function(){return"Datu ielāde…"},maximumSelected:function(t){var n="Jūs varat izvēlēties ne vairāk kā "+t.maximum;return n+=" element"+e(t.maximum,"us","u","us"),n},noResults:function(){return"Sakritību nav"},searching:function(){return"Meklēšana…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/js/i18n/mk.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/mk",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Ве молиме внесете "+e.maximum+" помалку карактер";return e.maximum!==1&&(n+="и"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Ве молиме внесете уште "+e.maximum+" карактер";return e.maximum!==1&&(n+="и"),n},loadingMore:function(){return"Вчитување резултати…"},maximumSelected:function(e){var t="Можете да изберете само "+e.maximum+" ставк";return e.maximum===1?t+="а":t+="и",t},noResults:function(){return"Нема пронајдено совпаѓања"},searching:function(){return"Пребарување…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/js/i18n/ms.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/ms",[],function(){return{errorLoading:function(){return"Keputusan tidak berjaya dimuatkan."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Sila hapuskan "+t+" aksara"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Sila masukkan "+t+" atau lebih aksara"},loadingMore:function(){return"Sedang memuatkan keputusan…"},maximumSelected:function(e){return"Anda hanya boleh memilih "+e.maximum+" pilihan"},noResults:function(){return"Tiada padanan yang ditemui"},searching:function(){return"Mencari…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/js/i18n/nb.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/nb",[],function(){return{errorLoading:function(){return"Kunne ikke hente resultater."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Vennligst fjern "+t+" tegn"},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vennligst skriv inn ";return t>1?n+=" flere tegn":n+=" tegn til",n},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…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/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}();
ui/lib/select2/js/i18n/nl.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/nl",[],function(){return{errorLoading:function(){return"De resultaten konden niet worden geladen."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Gelieve "+t+" karakters te verwijderen";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Gelieve "+t+" of meer karakters in te voeren";return n},loadingMore:function(){return"Meer resultaten laden…"},maximumSelected:function(e){var t=e.maximum==1?"kan":"kunnen",n="Er "+t+" maar "+e.maximum+" item";return e.maximum!=1&&(n+="s"),n+=" worden geselecteerd",n},noResults:function(){return"Geen resultaten gevonden…"},searching:function(){return"Zoeken…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/js/i18n/pl.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/pl",[],function(){var e=["znak","znaki","znaków"],t=["element","elementy","elementów"],n=function(t,n){if(t===1)return n[0];if(t>1&&t<=4)return n[1];if(t>=5)return n[2]};return{errorLoading:function(){return"Nie można załadować wyników."},inputTooLong:function(t){var r=t.input.length-t.maximum;return"Usuń "+r+" "+n(r,e)},inputTooShort:function(t){var r=t.minimum-t.input.length;return"Podaj przynajmniej "+r+" "+n(r,e)},loadingMore:function(){return"Trwa ładowanie…"},maximumSelected:function(e){return"Możesz zaznaczyć tylko "+e.maximum+" "+n(e.maximum,t)},noResults:function(){return"Brak wyników"},searching:function(){return"Trwa wyszukiwanie…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/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}();
ui/lib/select2/js/i18n/pt-BR.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/pt-BR",[],function(){return{errorLoading:function(){return"Os resultados não puderam ser carregados."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Apague "+t+" caracter";return t!=1&&(n+="es"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Digite "+t+" ou mais caracteres";return n},loadingMore:function(){return"Carregando mais resultados…"},maximumSelected:function(e){var t="Você só pode selecionar "+e.maximum+" ite";return e.maximum==1?t+="m":t+="ns",t},noResults:function(){return"Nenhum resultado encontrado"},searching:function(){return"Buscando…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/js/i18n/pt.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/pt",[],function(){return{errorLoading:function(){return"Os resultados não puderam ser carregados."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Por favor apague "+t+" ";return n+=t!=1?"caracteres":"carácter",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Introduza "+t+" ou mais caracteres";return n},loadingMore:function(){return"A carregar mais resultados…"},maximumSelected:function(e){var t="Apenas pode seleccionar "+e.maximum+" ";return t+=e.maximum!=1?"itens":"item",t},noResults:function(){return"Sem resultados"},searching:function(){return"A procurar…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/js/i18n/ro.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return 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 t!==1&&(n+="e"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vă rugăm să introduceți "+t+"sau mai multe caractere";return n},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",e.maximum!==1&&(t+="e"),t},noResults:function(){return"Nu au fost găsite rezultate"},searching:function(){return"Căutare…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/js/i18n/ru.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/ru",[],function(){function e(e,t,n,r){return e%10<5&&e%10>0&&e%100<5||e%100>20?e%10>1?n:t:r}return{errorLoading:function(){return"Невозможно загрузить результаты"},inputTooLong:function(t){var n=t.input.length-t.maximum,r="Пожалуйста, введите на "+n+" символ";return r+=e(n,"","a","ов"),r+=" меньше",r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Пожалуйста, введите еще хотя бы "+n+" символ";return r+=e(n,"","a","ов"),r},loadingMore:function(){return"Загрузка данных…"},maximumSelected:function(t){var n="Вы можете выбрать не более "+t.maximum+" элемент";return n+=e(t.maximum,"","a","ов"),n},noResults:function(){return"Совпадений не найдено"},searching:function(){return"Поиск…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/js/i18n/sk.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/sk",[],function(){var e={2:function(e){return e?"dva":"dve"},3:function(){return"tri"},4:function(){return"štyri"}};return{inputTooLong:function(t){var n=t.input.length-t.maximum;return n==1?"Prosím, zadajte o jeden znak menej":n>=2&&n<=4?"Prosím, zadajte o "+e[n](!0)+" znaky menej":"Prosím, zadajte o "+n+" znakov menej"},inputTooShort:function(t){var n=t.minimum-t.input.length;return n==1?"Prosím, zadajte ešte jeden znak":n<=4?"Prosím, zadajte ešte ďalšie "+e[n](!0)+" znaky":"Prosím, zadajte ešte ďalších "+n+" znakov"},loadingMore:function(){return"Loading more results…"},maximumSelected:function(t){return t.maximum==1?"Môžete zvoliť len jednu položku":t.maximum>=2&&t.maximum<=4?"Môžete zvoliť najviac "+e[t.maximum](!1)+" položky":"Môžete zvoliť najviac "+t.maximum+" položiek"},noResults:function(){return"Nenašli sa žiadne položky"},searching:function(){return"Vyhľadávanie…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/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}();
ui/lib/select2/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}();
ui/lib/select2/js/i18n/sr-Cyrl.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/sr-Cyrl",[],function(){function e(e,t,n,r){return e%10==1&&e%100!=11?t:e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?n:r}return{errorLoading:function(){return"Преузимање није успело."},inputTooLong:function(t){var n=t.input.length-t.maximum,r="Обришите "+n+" симбол";return r+=e(n,"","а","а"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Укуцајте бар још "+n+" симбол";return r+=e(n,"","а","а"),r},loadingMore:function(){return"Преузимање још резултата…"},maximumSelected:function(t){var n="Можете изабрати само "+t.maximum+" ставк";return n+=e(t.maximum,"у","е","и"),n},noResults:function(){return"Ништа није пронађено"},searching:function(){return"Претрага…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/js/i18n/sr.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/sr",[],function(){function e(e,t,n,r){return e%10==1&&e%100!=11?t:e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?n:r}return{errorLoading:function(){return"Preuzimanje nije uspelo."},inputTooLong:function(t){var n=t.input.length-t.maximum,r="Obrišite "+n+" simbol";return r+=e(n,"","a","a"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Ukucajte bar još "+n+" simbol";return r+=e(n,"","a","a"),r},loadingMore:function(){return"Preuzimanje još rezultata…"},maximumSelected:function(t){var n="Možete izabrati samo "+t.maximum+" stavk";return n+=e(t.maximum,"u","e","i"),n},noResults:function(){return"Ništa nije pronađeno"},searching:function(){return"Pretraga…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/js/i18n/sv.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/sv",[],function(){return{errorLoading:function(){return"Resultat kunde inte laddas."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vänligen sudda ut "+t+" tecken";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vänligen skriv in "+t+" eller fler tecken";return n},loadingMore:function(){return"Laddar fler resultat…"},maximumSelected:function(e){var t="Du kan max välja "+e.maximum+" element";return t},noResults:function(){return"Inga träffar"},searching:function(){return"Söker…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/js/i18n/th.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/th",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="โปรดลบออก "+t+" ตัวอักษร";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="โปรดพิมพ์เพิ่มอีก "+t+" ตัวอักษร";return n},loadingMore:function(){return"กำลังค้นข้อมูลเพิ่ม…"},maximumSelected:function(e){var t="คุณสามารถเลือกได้ไม่เกิน "+e.maximum+" รายการ";return t},noResults:function(){return"ไม่พบข้อมูล"},searching:function(){return"กำลังค้นข้อมูล…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/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}();
ui/lib/select2/js/i18n/tr.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/tr",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n=t+" karakter daha girmelisiniz";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="En az "+t+" karakter daha girmelisiniz";return n},loadingMore:function(){return"Daha fazla…"},maximumSelected:function(e){var t="Sadece "+e.maximum+" seçim yapabilirsiniz";return t},noResults:function(){return"Sonuç bulunamadı"},searching:function(){return"Aranıyor…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/js/i18n/uk.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/uk",[],function(){function e(e,t,n,r){return e%100>10&&e%100<15?r:e%10===1?t:e%10>1&&e%10<5?n:r}return{errorLoading:function(){return"Неможливо завантажити результати"},inputTooLong:function(t){var n=t.input.length-t.maximum;return"Будь ласка, видаліть "+n+" "+e(t.maximum,"літеру","літери","літер")},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Будь ласка, введіть "+t+" або більше літер"},loadingMore:function(){return"Завантаження інших результатів…"},maximumSelected:function(t){return"Ви можете вибрати лише "+t.maximum+" "+e(t.maximum,"пункт","пункти","пунктів")},noResults:function(){return"Нічого не знайдено"},searching:function(){return"Пошук…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/js/i18n/vi.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/vi",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vui lòng nhập ít hơn "+t+" ký tự";return t!=1&&(n+="s"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vui lòng nhập nhiều hơn "+t+' ký tự"';return n},loadingMore:function(){return"Đang lấy thêm kết quả…"},maximumSelected:function(e){var t="Chỉ có thể chọn được "+e.maximum+" lựa chọn";return t},noResults:function(){return"Không tìm thấy kết quả"},searching:function(){return"Đang tìm…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/js/i18n/zh-CN.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/zh-CN",[],function(){return{errorLoading:function(){return"无法载入结果。"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="请删除"+t+"个字符";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="请再输入至少"+t+"个字符";return n},loadingMore:function(){return"载入更多结果…"},maximumSelected:function(e){var t="最多只能选择"+e.maximum+"个项目";return t},noResults:function(){return"未找到结果"},searching:function(){return"搜索中…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/js/i18n/zh-TW.js CHANGED
@@ -1,3 +1,3 @@
1
- /*! Select2 4.0.3 | 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;return e.define("select2/i18n/zh-TW",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="請刪掉"+t+"個字元";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="請再輸入"+t+"個字元";return n},loadingMore:function(){return"載入中…"},maximumSelected:function(e){var t="你只能選擇最多"+e.maximum+"項";return t},noResults:function(){return"沒有找到相符的項目"},searching:function(){return"搜尋中…"}}}),{define:e.define,require:e.require}})();
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}();
ui/lib/select2/js/select2.full.js CHANGED
@@ -1,6436 +1,6820 @@
1
- /*!
2
- * Select2 4.0.3
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 exports === 'object') {
13
- // Node/CommonJS
14
- factory(require('jquery'));
15
- } else {
16
- // Browser globals
17
- factory(jQuery);
18
- }
19
- }(function (jQuery) {
20
- // This is needed so we can catch the AMD loader configuration and use it
21
- // The inner file should be wrapped (by `banner.start.js`) in a function that
22
- // returns the AMD loader references.
23
- var S2 =
24
- (function () {
25
- // Restore the Select2 AMD loader so it can be used
26
- // Needed mostly in the language files, where the loader is not inserted
27
- if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd) {
28
- var S2 = jQuery.fn.select2.amd;
29
- }
30
- var S2;(function () { if (!S2 || !S2.requirejs) {
31
- if (!S2) { S2 = {}; } else { require = S2; }
32
- /**
33
- * @license almond 0.3.1 Copyright (c) 2011-2014, The Dojo Foundation All Rights Reserved.
34
- * Available via the MIT or new BSD license.
35
- * see: http://github.com/jrburke/almond for details
36
- */
37
- //Going sloppy to avoid 'use strict' string cost, but strict practices should
38
- //be followed.
39
- /*jslint sloppy: true */
40
- /*global setTimeout: false */
41
-
42
- var requirejs, require, define;
43
- (function (undef) {
44
- var main, req, makeMap, handlers,
45
- defined = {},
46
- waiting = {},
47
- config = {},
48
- defining = {},
49
- hasOwn = Object.prototype.hasOwnProperty,
50
- aps = [].slice,
51
- jsSuffixRegExp = /\.js$/;
52
-
53
- function hasProp(obj, prop) {
54
- return hasOwn.call(obj, prop);
55
- }
56
-
57
- /**
58
- * Given a relative module name, like ./something, normalize it to
59
- * a real name that can be mapped to a path.
60
- * @param {String} name the relative name
61
- * @param {String} baseName a real name that the name arg is relative
62
- * to.
63
- * @returns {String} normalized name
64
- */
65
- function normalize(name, baseName) {
66
- var nameParts, nameSegment, mapValue, foundMap, lastIndex,
67
- foundI, foundStarMap, starI, i, j, part,
68
- baseParts = baseName && baseName.split("/"),
69
- map = config.map,
70
- starMap = (map && map['*']) || {};
71
-
72
- //Adjust any relative paths.
73
- if (name && name.charAt(0) === ".") {
74
- //If have a base name, try to normalize against it,
75
- //otherwise, assume it is a top-level require that will
76
- //be relative to baseUrl in the end.
77
- if (baseName) {
78
- name = name.split('/');
79
- lastIndex = name.length - 1;
80
-
81
- // Node .js allowance:
82
- if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {
83
- name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');
84
- }
85
-
86
- //Lop off the last part of baseParts, so that . matches the
87
- //"directory" and not name of the baseName's module. For instance,
88
- //baseName of "one/two/three", maps to "one/two/three.js", but we
89
- //want the directory, "one/two" for this normalization.
90
- name = baseParts.slice(0, baseParts.length - 1).concat(name);
91
-
92
- //start trimDots
93
- for (i = 0; i < name.length; i += 1) {
94
- part = name[i];
95
- if (part === ".") {
96
- name.splice(i, 1);
97
- i -= 1;
98
- } else if (part === "..") {
99
- if (i === 1 && (name[2] === '..' || name[0] === '..')) {
100
- //End of the line. Keep at least one non-dot
101
- //path segment at the front so it can be mapped
102
- //correctly to disk. Otherwise, there is likely
103
- //no path mapping for a path starting with '..'.
104
- //This can still fail, but catches the most reasonable
105
- //uses of ..
106
- break;
107
- } else if (i > 0) {
108
- name.splice(i - 1, 2);
109
- i -= 2;
110
- }
111
- }
112
- }
113
- //end trimDots
114
-
115
- name = name.join("/");
116
- } else if (name.indexOf('./') === 0) {
117
- // No baseName, so this is ID is resolved relative
118
- // to baseUrl, pull off the leading dot.
119
- name = name.substring(2);
120
- }
121
- }
122
-
123
- //Apply map config if available.
124
- if ((baseParts || starMap) && map) {
125
- nameParts = name.split('/');
126
-
127
- for (i = nameParts.length; i > 0; i -= 1) {
128
- nameSegment = nameParts.slice(0, i).join("/");
129
-
130
- if (baseParts) {
131
- //Find the longest baseName segment match in the config.
132
- //So, do joins on the biggest to smallest lengths of baseParts.
133
- for (j = baseParts.length; j > 0; j -= 1) {
134
- mapValue = map[baseParts.slice(0, j).join('/')];
135
-
136
- //baseName segment has config, find if it has one for
137
- //this name.
138
- if (mapValue) {
139
- mapValue = mapValue[nameSegment];
140
- if (mapValue) {
141
- //Match, update name to the new value.
142
- foundMap = mapValue;
143
- foundI = i;
144
- break;
145
- }
146
- }
147
- }
148
- }
149
-
150
- if (foundMap) {
151
- break;
152
- }
153
-
154
- //Check for a star map match, but just hold on to it,
155
- //if there is a shorter segment match later in a matching
156
- //config, then favor over this star map.
157
- if (!foundStarMap && starMap && starMap[nameSegment]) {
158
- foundStarMap = starMap[nameSegment];
159
- starI = i;
160
- }
161
- }
162
-
163
- if (!foundMap && foundStarMap) {
164
- foundMap = foundStarMap;
165
- foundI = starI;
166
- }
167
-
168
- if (foundMap) {
169
- nameParts.splice(0, foundI, foundMap);
170
- name = nameParts.join('/');
171
- }
172
- }
173
-
174
- return name;
175
- }
176
-
177
- function makeRequire(relName, forceSync) {
178
- return function () {
179
- //A version of a require function that passes a moduleName
180
- //value for items that may need to
181
- //look up paths relative to the moduleName
182
- var args = aps.call(arguments, 0);
183
-
184
- //If first arg is not require('string'), and there is only
185
- //one arg, it is the array form without a callback. Insert
186
- //a null so that the following concat is correct.
187
- if (typeof args[0] !== 'string' && args.length === 1) {
188
- args.push(null);
189
- }
190
- return req.apply(undef, args.concat([relName, forceSync]));
191
- };
192
- }
193
-
194
- function makeNormalize(relName) {
195
- return function (name) {
196
- return normalize(name, relName);
197
- };
198
- }
199
-
200
- function makeLoad(depName) {
201
- return function (value) {
202
- defined[depName] = value;
203
- };
204
- }
205
-
206
- function callDep(name) {
207
- if (hasProp(waiting, name)) {
208
- var args = waiting[name];
209
- delete waiting[name];
210
- defining[name] = true;
211
- main.apply(undef, args);
212
- }
213
-
214
- if (!hasProp(defined, name) && !hasProp(defining, name)) {
215
- throw new Error('No ' + name);
216
- }
217
- return defined[name];
218
- }
219
-
220
- //Turns a plugin!resource to [plugin, resource]
221
- //with the plugin being undefined if the name
222
- //did not have a plugin prefix.
223
- function splitPrefix(name) {
224
- var prefix,
225
- index = name ? name.indexOf('!') : -1;
226
- if (index > -1) {
227
- prefix = name.substring(0, index);
228
- name = name.substring(index + 1, name.length);
229
- }
230
- return [prefix, name];
231
- }
232
-
233
- /**
234
- * Makes a name map, normalizing the name, and using a plugin
235
- * for normalization if necessary. Grabs a ref to plugin
236
- * too, as an optimization.
237
- */
238
- makeMap = function (name, relName) {
239
- var plugin,
240
- parts = splitPrefix(name),
241
- prefix = parts[0];
242
-
243
- name = parts[1];
244
-
245
- if (prefix) {
246
- prefix = normalize(prefix, relName);
247
- plugin = callDep(prefix);
248
- }
249
-
250
- //Normalize according
251
- if (prefix) {
252
- if (plugin && plugin.normalize) {
253
- name = plugin.normalize(name, makeNormalize(relName));
254
- } else {
255
- name = normalize(name, relName);
256
- }
257
- } else {
258
- name = normalize(name, relName);
259
- parts = splitPrefix(name);
260
- prefix = parts[0];
261
- name = parts[1];
262
- if (prefix) {
263
- plugin = callDep(prefix);
264
- }
265
- }
266
-
267
- //Using ridiculous property names for space reasons
268
- return {
269
- f: prefix ? prefix + '!' + name : name, //fullName
270
- n: name,
271
- pr: prefix,
272
- p: plugin
273
- };
274
- };
275
-
276
- function makeConfig(name) {
277
- return function () {
278
- return (config && config.config && config.config[name]) || {};
279
- };
280
- }
281
-
282
- handlers = {
283
- require: function (name) {
284
- return makeRequire(name);
285
- },
286
- exports: function (name) {
287
- var e = defined[name];
288
- if (typeof e !== 'undefined') {
289
- return e;
290
- } else {
291
- return (defined[name] = {});
292
- }
293
- },
294
- module: function (name) {
295
- return {
296
- id: name,
297
- uri: '',
298
- exports: defined[name],
299
- config: makeConfig(name)
300
- };
301
- }
302
- };
303
-
304
- main = function (name, deps, callback, relName) {
305
- var cjsModule, depName, ret, map, i,
306
- args = [],
307
- callbackType = typeof callback,
308
- usingExports;
309
-
310
- //Use name if no relName
311
- relName = relName || name;
312
-
313
- //Call the callback to define the module, if necessary.
314
- if (callbackType === 'undefined' || callbackType === 'function') {
315
- //Pull out the defined dependencies and pass the ordered
316
- //values to the callback.
317
- //Default to [require, exports, module] if no deps
318
- deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;
319
- for (i = 0; i < deps.length; i += 1) {
320
- map = makeMap(deps[i], relName);
321
- depName = map.f;
322
-
323
- //Fast path CommonJS standard dependencies.
324
- if (depName === "require") {
325
- args[i] = handlers.require(name);
326
- } else if (depName === "exports") {
327
- //CommonJS module spec 1.1
328
- args[i] = handlers.exports(name);
329
- usingExports = true;
330
- } else if (depName === "module") {
331
- //CommonJS module spec 1.1
332
- cjsModule = args[i] = handlers.module(name);
333
- } else if (hasProp(defined, depName) ||
334
- hasProp(waiting, depName) ||
335
- hasProp(defining, depName)) {
336
- args[i] = callDep(depName);
337
- } else if (map.p) {
338
- map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});
339
- args[i] = defined[depName];
340
- } else {
341
- throw new Error(name + ' missing ' + depName);
342
- }
343
- }
344
-
345
- ret = callback ? callback.apply(defined[name], args) : undefined;
346
-
347
- if (name) {
348
- //If setting exports via "module" is in play,
349
- //favor that over return value and exports. After that,
350
- //favor a non-undefined return value over exports use.
351
- if (cjsModule && cjsModule.exports !== undef &&
352
- cjsModule.exports !== defined[name]) {
353
- defined[name] = cjsModule.exports;
354
- } else if (ret !== undef || !usingExports) {
355
- //Use the return value from the function.
356
- defined[name] = ret;
357
- }
358
- }
359
- } else if (name) {
360
- //May just be an object definition for the module. Only
361
- //worry about defining if have a module name.
362
- defined[name] = callback;
363
- }
364
- };
365
-
366
- requirejs = require = req = function (deps, callback, relName, forceSync, alt) {
367
- if (typeof deps === "string") {
368
- if (handlers[deps]) {
369
- //callback in this case is really relName
370
- return handlers[deps](callback);
371
- }
372
- //Just return the module wanted. In this scenario, the
373
- //deps arg is the module name, and second arg (if passed)
374
- //is just the relName.
375
- //Normalize module name, if it contains . or ..
376
- return callDep(makeMap(deps, callback).f);
377
- } else if (!deps.splice) {
378
- //deps is a config object, not an array.
379
- config = deps;
380
- if (config.deps) {
381
- req(config.deps, config.callback);
382
- }
383
- if (!callback) {
384
- return;
385
- }
386
-
387
- if (callback.splice) {
388
- //callback is an array, which means it is a dependency list.
389
- //Adjust args if there are dependencies
390
- deps = callback;
391
- callback = relName;
392
- relName = null;
393
- } else {
394
- deps = undef;
395
- }
396
- }
397
-
398
- //Support require(['a'])
399
- callback = callback || function () {};
400
-
401
- //If relName is a function, it is an errback handler,
402
- //so remove it.
403
- if (typeof relName === 'function') {
404
- relName = forceSync;
405
- forceSync = alt;
406
- }
407
-
408
- //Simulate async callback;
409
- if (forceSync) {
410
- main(undef, deps, callback, relName);
411
- } else {
412
- //Using a non-zero value because of concern for what old browsers
413
- //do, and latest browsers "upgrade" to 4 if lower value is used:
414
- //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:
415
- //If want a value immediately, use require('id') instead -- something
416
- //that works in almond on the global level, but not guaranteed and
417
- //unlikely to work in other AMD implementations.
418
- setTimeout(function () {
419
- main(undef, deps, callback, relName);
420
- }, 4);
421
- }
422
-
423
- return req;
424
- };
425
-
426
- /**
427
- * Just drops the config on the floor, but returns req in case
428
- * the config return value is used.
429
- */
430
- req.config = function (cfg) {
431
- return req(cfg);
432
- };
433
-
434
- /**
435
- * Expose module registry for debugging and tooling
436
- */
437
- requirejs._defined = defined;
438
-
439
- define = function (name, deps, callback) {
440
- if (typeof name !== 'string') {
441
- throw new Error('See almond README: incorrect module build, no module name');
442
- }
443
-
444
- //This module may not have dependencies
445
- if (!deps.splice) {
446
- //deps is not an array, so probably means
447
- //an object literal or factory function for
448
- //the value. Adjust args.
449
- callback = deps;
450
- deps = [];
451
- }
452
-
453
- if (!hasProp(defined, name) && !hasProp(waiting, name)) {
454
- waiting[name] = [name, deps, callback];
455
- }
456
- };
457
-
458
- define.amd = {
459
- jQuery: true
460
- };
461
- }());
462
-
463
- S2.requirejs = requirejs;S2.require = require;S2.define = define;
464
- }
465
- }());
466
- S2.define("almond", function(){});
467
-
468
- /* global jQuery:false, $:false */
469
- S2.define('jquery',[],function () {
470
- var _$ = jQuery || $;
471
-
472
- if (_$ == null && console && console.error) {
473
- console.error(
474
- 'Select2: An instance of jQuery or a jQuery-compatible library was not ' +
475
- 'found. Make sure that you are including jQuery before Select2 on your ' +
476
- 'web page.'
477
- );
478
- }
479
-
480
- return _$;
481
- });
482
-
483
- S2.define('select2/utils',[
484
- 'jquery'
485
- ], function ($) {
486
- var Utils = {};
487
-
488
- Utils.Extend = function (ChildClass, SuperClass) {
489
- var __hasProp = {}.hasOwnProperty;
490
-
491
- function BaseConstructor () {
492
- this.constructor = ChildClass;
493
- }
494
-
495
- for (var key in SuperClass) {
496
- if (__hasProp.call(SuperClass, key)) {
497
- ChildClass[key] = SuperClass[key];
498
- }
499
- }
500
-
501
- BaseConstructor.prototype = SuperClass.prototype;
502
- ChildClass.prototype = new BaseConstructor();
503
- ChildClass.__super__ = SuperClass.prototype;
504
-
505
- return ChildClass;
506
- };
507
-
508
- function getMethods (theClass) {
509
- var proto = theClass.prototype;
510
-
511
- var methods = [];
512
-
513
- for (var methodName in proto) {
514
- var m = proto[methodName];
515
-
516
- if (typeof m !== 'function') {
517
- continue;
518
- }
519
-
520
- if (methodName === 'constructor') {
521
- continue;
522
- }
523
-
524
- methods.push(methodName);
525
- }
526
-
527
- return methods;
528
- }
529
-
530
- Utils.Decorate = function (SuperClass, DecoratorClass) {
531
- var decoratedMethods = getMethods(DecoratorClass);
532
- var superMethods = getMethods(SuperClass);
533
-
534
- function DecoratedClass () {
535
- var unshift = Array.prototype.unshift;
536
-
537
- var argCount = DecoratorClass.prototype.constructor.length;
538
-
539
- var calledConstructor = SuperClass.prototype.constructor;
540
-
541
- if (argCount > 0) {
542
- unshift.call(arguments, SuperClass.prototype.constructor);
543
-
544
- calledConstructor = DecoratorClass.prototype.constructor;
545
- }
546
-
547
- calledConstructor.apply(this, arguments);
548
- }
549
-
550
- DecoratorClass.displayName = SuperClass.displayName;
551
-
552
- function ctr () {
553
- this.constructor = DecoratedClass;
554
- }
555
-
556
- DecoratedClass.prototype = new ctr();
557
-
558
- for (var m = 0; m < superMethods.length; m++) {
559
- var superMethod = superMethods[m];
560
-
561
- DecoratedClass.prototype[superMethod] =
562
- SuperClass.prototype[superMethod];
563
- }
564
-
565
- var calledMethod = function (methodName) {
566
- // Stub out the original method if it's not decorating an actual method
567
- var originalMethod = function () {};
568
-
569
- if (methodName in DecoratedClass.prototype) {
570
- originalMethod = DecoratedClass.prototype[methodName];
571
- }
572
-
573
- var decoratedMethod = DecoratorClass.prototype[methodName];
574
-
575
- return function () {
576
- var unshift = Array.prototype.unshift;
577
-
578
- unshift.call(arguments, originalMethod);
579
-
580
- return decoratedMethod.apply(this, arguments);
581
- };
582
- };
583
-
584
- for (var d = 0; d < decoratedMethods.length; d++) {
585
- var decoratedMethod = decoratedMethods[d];
586
-
587
- DecoratedClass.prototype[decoratedMethod] = calledMethod(decoratedMethod);
588
- }
589
-
590
- return DecoratedClass;
591
- };
592
-
593
- var Observable = function () {
594
- this.listeners = {};
595
- };
596
-
597
- Observable.prototype.on = function (event, callback) {
598
- this.listeners = this.listeners || {};
599
-
600
- if (event in this.listeners) {
601
- this.listeners[event].push(callback);
602
- } else {
603
- this.listeners[event] = [callback];
604
- }
605
- };
606
-
607
- Observable.prototype.trigger = function (event) {
608
- var slice = Array.prototype.slice;
609
- var params = slice.call(arguments, 1);
610
-
611
- this.listeners = this.listeners || {};
612
-
613
- // Params should always come in as an array
614
- if (params == null) {
615
- params = [];
616
- }
617
-
618
- // If there are no arguments to the event, use a temporary object
619
- if (params.length === 0) {
620
- params.push({});
621
- }
622
-
623
- // Set the `_type` of the first object to the event
624
- params[0]._type = event;
625
-
626
- if (event in this.listeners) {
627
- this.invoke(this.listeners[event], slice.call(arguments, 1));
628
- }
629
-
630
- if ('*' in this.listeners) {
631
- this.invoke(this.listeners['*'], arguments);
632
- }
633
- };
634
-
635
- Observable.prototype.invoke = function (listeners, params) {
636
- for (var i = 0, len = listeners.length; i < len; i++) {
637
- listeners[i].apply(this, params);
638
- }
639
- };
640
-
641
- Utils.Observable = Observable;
642
-
643
- Utils.generateChars = function (length) {
644
- var chars = '';
645
-
646
- for (var i = 0; i < length; i++) {
647
- var randomChar = Math.floor(Math.random() * 36);
648
- chars += randomChar.toString(36);
649
- }
650
-
651
- return chars;
652
- };
653
-
654
- Utils.bind = function (func, context) {
655
- return function () {
656
- func.apply(context, arguments);
657
- };
658
- };
659
-
660
- Utils._convertData = function (data) {
661
- for (var originalKey in data) {
662
- var keys = originalKey.split('-');
663
-
664
- var dataLevel = data;
665
-
666
- if (keys.length === 1) {
667
- continue;
668
- }
669
-
670
- for (var k = 0; k < keys.length; k++) {
671
- var key = keys[k];
672
-
673
- // Lowercase the first letter
674
- // By default, dash-separated becomes camelCase
675
- key = key.substring(0, 1).toLowerCase() + key.substring(1);
676
-
677
- if (!(key in dataLevel)) {
678
- dataLevel[key] = {};
679
- }
680
-
681
- if (k == keys.length - 1) {
682
- dataLevel[key] = data[originalKey];
683
- }
684
-
685
- dataLevel = dataLevel[key];
686
- }
687
-
688
- delete data[originalKey];
689
- }
690
-
691
- return data;
692
- };
693
-
694
- Utils.hasScroll = function (index, el) {
695
- // Adapted from the function created by @ShadowScripter
696
- // and adapted by @BillBarry on the Stack Exchange Code Review website.
697
- // The original code can be found at
698
- // http://codereview.stackexchange.com/q/13338
699
- // and was designed to be used with the Sizzle selector engine.
700
-
701
- var $el = $(el);
702
- var overflowX = el.style.overflowX;
703
- var overflowY = el.style.overflowY;
704
-
705
- //Check both x and y declarations
706
- if (overflowX === overflowY &&
707
- (overflowY === 'hidden' || overflowY === 'visible')) {
708
- return false;
709
- }
710
-
711
- if (overflowX === 'scroll' || overflowY === 'scroll') {
712
- return true;
713
- }
714
-
715
- return ($el.innerHeight() < el.scrollHeight ||
716
- $el.innerWidth() < el.scrollWidth);
717
- };
718
-
719
- Utils.escapeMarkup = function (markup) {
720
- var replaceMap = {
721
- '\\': '&#92;',
722
- '&': '&amp;',
723
- '<': '&lt;',
724
- '>': '&gt;',
725
- '"': '&quot;',
726
- '\'': '&#39;',
727
- '/': '&#47;'
728
- };
729
-
730
- // Do not try to escape the markup if it's not a string
731
- if (typeof markup !== 'string') {
732
- return markup;
733
- }
734
-
735
- return String(markup).replace(/[&<>"'\/\\]/g, function (match) {
736
- return replaceMap[match];
737
- });
738
- };
739
-
740
- // Append an array of jQuery nodes to a given element.
741
- Utils.appendMany = function ($element, $nodes) {
742
- // jQuery 1.7.x does not support $.fn.append() with an array
743
- // Fall back to a jQuery object collection using $.fn.add()
744
- if ($.fn.jquery.substr(0, 3) === '1.7') {
745
- var $jqNodes = $();
746
-
747
- $.map($nodes, function (node) {
748
- $jqNodes = $jqNodes.add(node);
749
- });
750
-
751
- $nodes = $jqNodes;
752
- }
753
-
754
- $element.append($nodes);
755
- };
756
-
757
- return Utils;
758
- });
759
-
760
- S2.define('select2/results',[
761
- 'jquery',
762
- './utils'
763
- ], function ($, Utils) {
764
- function Results ($element, options, dataAdapter) {
765
- this.$element = $element;
766
- this.data = dataAdapter;
767
- this.options = options;
768
-
769
- Results.__super__.constructor.call(this);
770
- }
771
-
772
- Utils.Extend(Results, Utils.Observable);
773
-
774
- Results.prototype.render = function () {
775
- var $results = $(
776
- '<ul class="select2-results__options" role="tree"></ul>'
777
- );
778
-
779
- if (this.options.get('multiple')) {
780
- $results.attr('aria-multiselectable', 'true');
781
- }
782
-
783
- this.$results = $results;
784
-
785
- return $results;
786
- };
787
-
788
- Results.prototype.clear = function () {
789
- this.$results.empty();
790
- };
791
-
792
- Results.prototype.displayMessage = function (params) {
793
- var escapeMarkup = this.options.get('escapeMarkup');
794
-
795
- this.clear();
796
- this.hideLoading();
797
-
798
- var $message = $(
799
- '<li role="treeitem" aria-live="assertive"' +
800
- ' class="select2-results__option"></li>'
801
- );
802
-
803
- var message = this.options.get('translations').get(params.message);
804
-
805
- $message.append(
806
- escapeMarkup(
807
- message(params.args)
808
- )
809
- );
810
-
811
- $message[0].className += ' select2-results__message';
812
-
813
- this.$results.append($message);
814
- };
815
-
816
- Results.prototype.hideMessages = function () {
817
- this.$results.find('.select2-results__message').remove();
818
- };
819
-
820
- Results.prototype.append = function (data) {
821
- this.hideLoading();
822
-
823
- var $options = [];
824
-
825
- if (data.results == null || data.results.length === 0) {
826
- if (this.$results.children().length === 0) {
827
- this.trigger('results:message', {
828
- message: 'noResults'
829
- });
830
- }
831
-
832
- return;
833
- }
834
-
835
- data.results = this.sort(data.results);
836
-
837
- for (var d = 0; d < data.results.length; d++) {
838
- var item = data.results[d];
839
-
840
- var $option = this.option(item);
841
-
842
- $options.push($option);
843
- }
844
-
845
- this.$results.append($options);
846
- };
847
-
848
- Results.prototype.position = function ($results, $dropdown) {
849
- var $resultsContainer = $dropdown.find('.select2-results');
850
- $resultsContainer.append($results);
851
- };
852
-
853
- Results.prototype.sort = function (data) {
854
- var sorter = this.options.get('sorter');
855
-
856
- return sorter(data);
857
- };
858
-
859
- Results.prototype.highlightFirstItem = function () {
860
- var $options = this.$results
861
- .find('.select2-results__option[aria-selected]');
862
-
863
- var $selected = $options.filter('[aria-selected=true]');
864
-
865
- // Check if there are any selected options
866
- if ($selected.length > 0) {
867
- // If there are selected options, highlight the first
868
- $selected.first().trigger('mouseenter');
869
- } else {
870
- // If there are no selected options, highlight the first option
871
- // in the dropdown
872
- $options.first().trigger('mouseenter');
873
- }
874
-
875
- this.ensureHighlightVisible();
876
- };
877
-
878
- Results.prototype.setClasses = function () {
879
- var self = this;
880
-
881
- this.data.current(function (selected) {
882
- var selectedIds = $.map(selected, function (s) {
883
- return s.id.toString();
884
- });
885
-
886
- var $options = self.$results
887
- .find('.select2-results__option[aria-selected]');
888
-
889
- $options.each(function () {
890
- var $option = $(this);
891
-
892
- var item = $.data(this, 'data');
893
-
894
- // id needs to be converted to a string when comparing
895
- var id = '' + item.id;
896
-
897
- if ((item.element != null && item.element.selected) ||
898
- (item.element == null && $.inArray(id, selectedIds) > -1)) {
899
- $option.attr('aria-selected', 'true');
900
- } else {
901
- $option.attr('aria-selected', 'false');
902
- }
903
- });
904
-
905
- });
906
- };
907
-
908
- Results.prototype.showLoading = function (params) {
909
- this.hideLoading();
910
-
911
- var loadingMore = this.options.get('translations').get('searching');
912
-
913
- var loading = {
914
- disabled: true,
915
- loading: true,
916
- text: loadingMore(params)
917
- };
918
- var $loading = this.option(loading);
919
- $loading.className += ' loading-results';
920
-
921
- this.$results.prepend($loading);
922
- };
923
-
924
- Results.prototype.hideLoading = function () {
925
- this.$results.find('.loading-results').remove();
926
- };
927
-
928
- Results.prototype.option = function (data) {
929
- var option = document.createElement('li');
930
- option.className = 'select2-results__option';
931
-
932
- var attrs = {
933
- 'role': 'treeitem',
934
- 'aria-selected': 'false'
935
- };
936
-
937
- if (data.disabled) {
938
- delete attrs['aria-selected'];
939
- attrs['aria-disabled'] = 'true';
940
- }
941
-
942
- if (data.id == null) {
943
- delete attrs['aria-selected'];
944
- }
945
-
946
- if (data._resultId != null) {
947
- option.id = data._resultId;
948
- }
949
-
950
- if (data.title) {
951
- option.title = data.title;
952
- }
953
-
954
- if (data.children) {
955
- attrs.role = 'group';
956
- attrs['aria-label'] = data.text;
957
- delete attrs['aria-selected'];
958
- }
959
-
960
- for (var attr in attrs) {
961
- var val = attrs[attr];
962
-
963
- option.setAttribute(attr, val);
964
- }
965
-
966
- if (data.children) {
967
- var $option = $(option);
968
-
969
- var label = document.createElement('strong');
970
- label.className = 'select2-results__group';
971
-
972
- var $label = $(label);
973
- this.template(data, label);
974
-
975
- var $children = [];
976
-
977
- for (var c = 0; c < data.children.length; c++) {
978
- var child = data.children[c];
979
-
980
- var $child = this.option(child);
981
-
982
- $children.push($child);
983
- }
984
-
985
- var $childrenContainer = $('<ul></ul>', {
986
- 'class': 'select2-results__options select2-results__options--nested'
987
- });
988
-
989
- $childrenContainer.append($children);
990
-
991
- $option.append(label);
992
- $option.append($childrenContainer);
993
- } else {
994
- this.template(data, option);
995
- }
996
-
997
- $.data(option, 'data', data);
998
-
999
- return option;
1000
- };
1001
-
1002
- Results.prototype.bind = function (container, $container) {
1003
- var self = this;
1004
-
1005
- var id = container.id + '-results';
1006
-
1007
- this.$results.attr('id', id);
1008
-
1009
- container.on('results:all', function (params) {
1010
- self.clear();
1011
- self.append(params.data);
1012
-
1013
- if (container.isOpen()) {
1014
- self.setClasses();
1015
- self.highlightFirstItem();
1016
- }
1017
- });
1018
-
1019
- container.on('results:append', function (params) {
1020
- self.append(params.data);
1021
-
1022
- if (container.isOpen()) {
1023
- self.setClasses();
1024
- }
1025
- });
1026
-
1027
- container.on('query', function (params) {
1028
- self.hideMessages();
1029
- self.showLoading(params);
1030
- });
1031
-
1032
- container.on('select', function () {
1033
- if (!container.isOpen()) {
1034
- return;
1035
- }
1036
-
1037
- self.setClasses();
1038
- self.highlightFirstItem();
1039
- });
1040
-
1041
- container.on('unselect', function () {
1042
- if (!container.isOpen()) {
1043
- return;
1044
- }
1045
-
1046
- self.setClasses();
1047
- self.highlightFirstItem();
1048
- });
1049
-
1050
- container.on('open', function () {
1051
- // When the dropdown is open, aria-expended="true"
1052
- self.$results.attr('aria-expanded', 'true');
1053
- self.$results.attr('aria-hidden', 'false');
1054
-
1055
- self.setClasses();
1056
- self.ensureHighlightVisible();
1057
- });
1058
-
1059
- container.on('close', function () {
1060
- // When the dropdown is closed, aria-expended="false"
1061
- self.$results.attr('aria-expanded', 'false');
1062
- self.$results.attr('aria-hidden', 'true');
1063
- self.$results.removeAttr('aria-activedescendant');
1064
- });
1065
-
1066
- container.on('results:toggle', function () {
1067
- var $highlighted = self.getHighlightedResults();
1068
-
1069
- if ($highlighted.length === 0) {
1070
- return;
1071
- }
1072
-
1073
- $highlighted.trigger('mouseup');
1074
- });
1075
-
1076
- container.on('results:select', function () {
1077
- var $highlighted = self.getHighlightedResults();
1078
-
1079
- if ($highlighted.length === 0) {
1080
- return;
1081
- }
1082
-
1083
- var data = $highlighted.data('data');
1084
-
1085
- if ($highlighted.attr('aria-selected') == 'true') {
1086
- self.trigger('close', {});
1087
- } else {
1088
- self.trigger('select', {
1089
- data: data
1090
- });
1091
- }
1092
- });
1093
-
1094
- container.on('results:previous', function () {
1095
- var $highlighted = self.getHighlightedResults();
1096
-
1097
- var $options = self.$results.find('[aria-selected]');
1098
-
1099
- var currentIndex = $options.index($highlighted);
1100
-
1101
- // If we are already at te top, don't move further
1102
- if (currentIndex === 0) {
1103
- return;
1104
- }
1105
-
1106
- var nextIndex = currentIndex - 1;
1107
-
1108
- // If none are highlighted, highlight the first
1109
- if ($highlighted.length === 0) {
1110
- nextIndex = 0;
1111
- }
1112
-
1113
- var $next = $options.eq(nextIndex);
1114
-
1115
- $next.trigger('mouseenter');
1116
-
1117
- var currentOffset = self.$results.offset().top;
1118
- var nextTop = $next.offset().top;
1119
- var nextOffset = self.$results.scrollTop() + (nextTop - currentOffset);
1120
-
1121
- if (nextIndex === 0) {
1122
- self.$results.scrollTop(0);
1123
- } else if (nextTop - currentOffset < 0) {
1124
- self.$results.scrollTop(nextOffset);
1125
- }
1126
- });
1127
-
1128
- container.on('results:next', function () {
1129
- var $highlighted = self.getHighlightedResults();
1130
-
1131
- var $options = self.$results.find('[aria-selected]');
1132
-
1133
- var currentIndex = $options.index($highlighted);
1134
-
1135
- var nextIndex = currentIndex + 1;
1136
-
1137
- // If we are at the last option, stay there
1138
- if (nextIndex >= $options.length) {
1139
- return;
1140
- }
1141
-
1142
- var $next = $options.eq(nextIndex);
1143
-
1144
- $next.trigger('mouseenter');
1145
-
1146
- var currentOffset = self.$results.offset().top +
1147
- self.$results.outerHeight(false);
1148
- var nextBottom = $next.offset().top + $next.outerHeight(false);
1149
- var nextOffset = self.$results.scrollTop() + nextBottom - currentOffset;
1150
-
1151
- if (nextIndex === 0) {
1152
- self.$results.scrollTop(0);
1153
- } else if (nextBottom > currentOffset) {
1154
- self.$results.scrollTop(nextOffset);
1155
- }
1156
- });
1157
-
1158
- container.on('results:focus', function (params) {
1159
- params.element.addClass('select2-results__option--highlighted');
1160
- });
1161
-
1162
- container.on('results:message', function (params) {
1163
- self.displayMessage(params);
1164
- });
1165
-
1166
- if ($.fn.mousewheel) {
1167
- this.$results.on('mousewheel', function (e) {
1168
- var top = self.$results.scrollTop();
1169
-
1170
- var bottom = self.$results.get(0).scrollHeight - top + e.deltaY;
1171
-
1172
- var isAtTop = e.deltaY > 0 && top - e.deltaY <= 0;
1173
- var isAtBottom = e.deltaY < 0 && bottom <= self.$results.height();
1174
-
1175
- if (isAtTop) {
1176
- self.$results.scrollTop(0);
1177
-
1178
- e.preventDefault();
1179
- e.stopPropagation();
1180
- } else if (isAtBottom) {
1181
- self.$results.scrollTop(
1182
- self.$results.get(0).scrollHeight - self.$results.height()
1183
- );
1184
-
1185
- e.preventDefault();
1186
- e.stopPropagation();
1187
- }
1188
- });
1189
- }
1190
-
1191
- this.$results.on('mouseup', '.select2-results__option[aria-selected]',
1192
- function (evt) {
1193
- var $this = $(this);
1194
-
1195
- var data = $this.data('data');
1196
-
1197
- if ($this.attr('aria-selected') === 'true') {
1198
- if (self.options.get('multiple')) {
1199
- self.trigger('unselect', {
1200
- originalEvent: evt,
1201
- data: data
1202
- });
1203
- } else {
1204
- self.trigger('close', {});
1205
- }
1206
-
1207
- return;
1208
- }
1209
-
1210
- self.trigger('select', {
1211
- originalEvent: evt,
1212
- data: data
1213
- });
1214
- });
1215
-
1216
- this.$results.on('mouseenter', '.select2-results__option[aria-selected]',
1217
- function (evt) {
1218
- var data = $(this).data('data');
1219
-
1220
- self.getHighlightedResults()
1221
- .removeClass('select2-results__option--highlighted');
1222
-
1223
- self.trigger('results:focus', {
1224
- data: data,
1225
- element: $(this)
1226
- });
1227
- });
1228
- };
1229
-
1230
- Results.prototype.getHighlightedResults = function () {
1231
- var $highlighted = this.$results
1232
- .find('.select2-results__option--highlighted');
1233
-
1234
- return $highlighted;
1235
- };
1236
-
1237
- Results.prototype.destroy = function () {
1238
- this.$results.remove();
1239
- };
1240
-
1241
- Results.prototype.ensureHighlightVisible = function () {
1242
- var $highlighted = this.getHighlightedResults();
1243
-
1244
- if ($highlighted.length === 0) {
1245
- return;
1246
- }
1247
-
1248
- var $options = this.$results.find('[aria-selected]');
1249
-
1250
- var currentIndex = $options.index($highlighted);
1251
-
1252
- var currentOffset = this.$results.offset().top;
1253
- var nextTop = $highlighted.offset().top;
1254
- var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);
1255
-
1256
- var offsetDelta = nextTop - currentOffset;
1257
- nextOffset -= $highlighted.outerHeight(false) * 2;
1258
-
1259
- if (currentIndex <= 2) {
1260
- this.$results.scrollTop(0);
1261
- } else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {
1262
- this.$results.scrollTop(nextOffset);
1263
- }
1264
- };
1265
-
1266
- Results.prototype.template = function (result, container) {
1267
- var template = this.options.get('templateResult');
1268
- var escapeMarkup = this.options.get('escapeMarkup');
1269
-
1270
- var content = template(result, container);
1271
-
1272
- if (content == null) {
1273
- container.style.display = 'none';
1274
- } else if (typeof content === 'string') {
1275
- container.innerHTML = escapeMarkup(content);
1276
- } else {
1277
- $(container).append(content);
1278
- }
1279
- };
1280
-
1281
- return Results;
1282
- });
1283
-
1284
- S2.define('select2/keys',[
1285
-
1286
- ], function () {
1287
- var KEYS = {
1288
- BACKSPACE: 8,
1289
- TAB: 9,
1290
- ENTER: 13,
1291
- SHIFT: 16,
1292
- CTRL: 17,
1293
- ALT: 18,
1294
- ESC: 27,
1295
- SPACE: 32,
1296
- PAGE_UP: 33,
1297
- PAGE_DOWN: 34,
1298
- END: 35,
1299
- HOME: 36,
1300
- LEFT: 37,
1301
- UP: 38,
1302
- RIGHT: 39,
1303
- DOWN: 40,
1304
- DELETE: 46
1305
- };
1306
-
1307
- return KEYS;
1308
- });
1309
-
1310
- S2.define('select2/selection/base',[
1311
- 'jquery',
1312
- '../utils',
1313
- '../keys'
1314
- ], function ($, Utils, KEYS) {
1315
- function BaseSelection ($element, options) {
1316
- this.$element = $element;
1317
- this.options = options;
1318
-
1319
- BaseSelection.__super__.constructor.call(this);
1320
- }
1321
-
1322
- Utils.Extend(BaseSelection, Utils.Observable);
1323
-
1324
- BaseSelection.prototype.render = function () {
1325
- var $selection = $(
1326
- '<span class="select2-selection" role="combobox" ' +
1327
- ' aria-haspopup="true" aria-expanded="false">' +
1328
- '</span>'
1329
- );
1330
-
1331
- this._tabindex = 0;
1332
-
1333
- if (this.$element.data('old-tabindex') != null) {
1334
- this._tabindex = this.$element.data('old-tabindex');
1335
- } else if (this.$element.attr('tabindex') != null) {
1336
- this._tabindex = this.$element.attr('tabindex');
1337
- }
1338
-
1339
- $selection.attr('title', this.$element.attr('title'));
1340
- $selection.attr('tabindex', this._tabindex);
1341
-
1342
- this.$selection = $selection;
1343
-
1344
- return $selection;
1345
- };
1346
-
1347
- BaseSelection.prototype.bind = function (container, $container) {
1348
- var self = this;
1349
-
1350
- var id = container.id + '-container';
1351
- var resultsId = container.id + '-results';
1352
-
1353
- this.container = container;
1354
-
1355
- this.$selection.on('focus', function (evt) {
1356
- self.trigger('focus', evt);
1357
- });
1358
-
1359
- this.$selection.on('blur', function (evt) {
1360
- self._handleBlur(evt);
1361
- });
1362
-
1363
- this.$selection.on('keydown', function (evt) {
1364
- self.trigger('keypress', evt);
1365
-
1366
- if (evt.which === KEYS.SPACE) {
1367
- evt.preventDefault();
1368
- }
1369
- });
1370
-
1371
- container.on('results:focus', function (params) {
1372
- self.$selection.attr('aria-activedescendant', params.data._resultId);
1373
- });
1374
-
1375
- container.on('selection:update', function (params) {
1376
- self.update(params.data);
1377
- });
1378
-
1379
- container.on('open', function () {
1380
- // When the dropdown is open, aria-expanded="true"
1381
- self.$selection.attr('aria-expanded', 'true');
1382
- self.$selection.attr('aria-owns', resultsId);
1383
-
1384
- self._attachCloseHandler(container);
1385
- });
1386
-
1387
- container.on('close', function () {
1388
- // When the dropdown is closed, aria-expanded="false"
1389
- self.$selection.attr('aria-expanded', 'false');
1390
- self.$selection.removeAttr('aria-activedescendant');
1391
- self.$selection.removeAttr('aria-owns');
1392
-
1393
- self.$selection.focus();
1394
-
1395
- self._detachCloseHandler(container);
1396
- });
1397
-
1398
- container.on('enable', function () {
1399
- self.$selection.attr('tabindex', self._tabindex);
1400
- });
1401
-
1402
- container.on('disable', function () {
1403
- self.$selection.attr('tabindex', '-1');
1404
- });
1405
- };
1406
-
1407
- BaseSelection.prototype._handleBlur = function (evt) {
1408
- var self = this;
1409
-
1410
- // This needs to be delayed as the active element is the body when the tab
1411
- // key is pressed, possibly along with others.
1412
- window.setTimeout(function () {
1413
- // Don't trigger `blur` if the focus is still in the selection
1414
- if (
1415
- (document.activeElement == self.$selection[0]) ||
1416
- ($.contains(self.$selection[0], document.activeElement))
1417
- ) {
1418
- return;
1419
- }
1420
-
1421
- self.trigger('blur', evt);
1422
- }, 1);
1423
- };
1424
-
1425
- BaseSelection.prototype._attachCloseHandler = function (container) {
1426
- var self = this;
1427
-
1428
- $(document.body).on('mousedown.select2.' + container.id, function (e) {
1429
- var $target = $(e.target);
1430
-
1431
- var $select = $target.closest('.select2');
1432
-
1433
- var $all = $('.select2.select2-container--open');
1434
-
1435
- $all.each(function () {
1436
- var $this = $(this);
1437
-
1438
- if (this == $select[0]) {
1439
- return;
1440
- }
1441
-
1442
- var $element = $this.data('element');
1443
-
1444
- $element.select2('close');
1445
- });
1446
- });
1447
- };
1448
-
1449
- BaseSelection.prototype._detachCloseHandler = function (container) {
1450
- $(document.body).off('mousedown.select2.' + container.id);
1451
- };
1452
-
1453
- BaseSelection.prototype.position = function ($selection, $container) {
1454
- var $selectionContainer = $container.find('.selection');
1455
- $selectionContainer.append($selection);
1456
- };
1457
-
1458
- BaseSelection.prototype.destroy = function () {
1459
- this._detachCloseHandler(this.container);
1460
- };
1461
-
1462
- BaseSelection.prototype.update = function (data) {
1463
- throw new Error('The `update` method must be defined in child classes.');
1464
- };
1465
-
1466
- return BaseSelection;
1467
- });
1468
-
1469
- S2.define('select2/selection/single',[
1470
- 'jquery',
1471
- './base',
1472
- '../utils',
1473
- '../keys'
1474
- ], function ($, BaseSelection, Utils, KEYS) {
1475
- function SingleSelection () {
1476
- SingleSelection.__super__.constructor.apply(this, arguments);
1477
- }
1478
-
1479
- Utils.Extend(SingleSelection, BaseSelection);
1480
-
1481
- SingleSelection.prototype.render = function () {
1482
- var $selection = SingleSelection.__super__.render.call(this);
1483
-
1484
- $selection.addClass('select2-selection--single');
1485
-
1486
- $selection.html(
1487
- '<span class="select2-selection__rendered"></span>' +
1488
- '<span class="select2-selection__arrow" role="presentation">' +
1489
- '<b role="presentation"></b>' +
1490
- '</span>'
1491
- );
1492
-
1493
- return $selection;
1494
- };
1495
-
1496
- SingleSelection.prototype.bind = function (container, $container) {
1497
- var self = this;
1498
-
1499
- SingleSelection.__super__.bind.apply(this, arguments);
1500
-
1501
- var id = container.id + '-container';
1502
-
1503
- this.$selection.find('.select2-selection__rendered').attr('id', id);
1504
- this.$selection.attr('aria-labelledby', id);
1505
-
1506
- this.$selection.on('mousedown', function (evt) {
1507
- // Only respond to left clicks
1508
- if (evt.which !== 1) {
1509
- return;
1510
- }
1511
-
1512
- self.trigger('toggle', {
1513
- originalEvent: evt
1514
- });
1515
- });
1516
-
1517
- this.$selection.on('focus', function (evt) {
1518
- // User focuses on the container
1519
- });
1520
-
1521
- this.$selection.on('blur', function (evt) {
1522
- // User exits the container
1523
- });
1524
-
1525
- container.on('focus', function (evt) {
1526
- if (!container.isOpen()) {
1527
- self.$selection.focus();
1528
- }
1529
- });
1530
-
1531
- container.on('selection:update', function (params) {
1532
- self.update(params.data);
1533
- });
1534
- };
1535
-
1536
- SingleSelection.prototype.clear = function () {
1537
- this.$selection.find('.select2-selection__rendered').empty();
1538
- };
1539
-
1540
- SingleSelection.prototype.display = function (data, container) {
1541
- var template = this.options.get('templateSelection');
1542
- var escapeMarkup = this.options.get('escapeMarkup');
1543
-
1544
- return escapeMarkup(template(data, container));
1545
- };
1546
-
1547
- SingleSelection.prototype.selectionContainer = function () {
1548
- return $('<span></span>');
1549
- };
1550
-
1551
- SingleSelection.prototype.update = function (data) {
1552
- if (data.length === 0) {
1553
- this.clear();
1554
- return;
1555
- }
1556
-
1557
- var selection = data[0];
1558
-
1559
- var $rendered = this.$selection.find('.select2-selection__rendered');
1560
- var formatted = this.display(selection, $rendered);
1561
-
1562
- $rendered.empty().append(formatted);
1563
- $rendered.prop('title', selection.title || selection.text);
1564
- };
1565
-
1566
- return SingleSelection;
1567
- });
1568
-
1569
- S2.define('select2/selection/multiple',[
1570
- 'jquery',
1571
- './base',
1572
- '../utils'
1573
- ], function ($, BaseSelection, Utils) {
1574
- function MultipleSelection ($element, options) {
1575
- MultipleSelection.__super__.constructor.apply(this, arguments);
1576
- }
1577
-
1578
- Utils.Extend(MultipleSelection, BaseSelection);
1579
-
1580
- MultipleSelection.prototype.render = function () {
1581
- var $selection = MultipleSelection.__super__.render.call(this);
1582
-
1583
- $selection.addClass('select2-selection--multiple');
1584
-
1585
- $selection.html(
1586
- '<ul class="select2-selection__rendered"></ul>'
1587
- );
1588
-
1589
- return $selection;
1590
- };
1591
-
1592
- MultipleSelection.prototype.bind = function (container, $container) {
1593
- var self = this;
1594
-
1595
- MultipleSelection.__super__.bind.apply(this, arguments);
1596
-
1597
- this.$selection.on('click', function (evt) {
1598
- self.trigger('toggle', {
1599
- originalEvent: evt
1600
- });
1601
- });
1602
-
1603
- this.$selection.on(
1604
- 'click',
1605
- '.select2-selection__choice__remove',
1606
- function (evt) {
1607
- // Ignore the event if it is disabled
1608
- if (self.options.get('disabled')) {
1609
- return;
1610
- }
1611
-
1612
- var $remove = $(this);
1613
- var $selection = $remove.parent();
1614
-
1615
- var data = $selection.data('data');
1616
-
1617
- self.trigger('unselect', {
1618
- originalEvent: evt,
1619
- data: data
1620
- });
1621
- }
1622
- );
1623
- };
1624
-
1625
- MultipleSelection.prototype.clear = function () {
1626
- this.$selection.find('.select2-selection__rendered').empty();
1627
- };
1628
-
1629
- MultipleSelection.prototype.display = function (data, container) {
1630
- var template = this.options.get('templateSelection');
1631
- var escapeMarkup = this.options.get('escapeMarkup');
1632
-
1633
- return escapeMarkup(template(data, container));
1634
- };
1635
-
1636
- MultipleSelection.prototype.selectionContainer = function () {
1637
- var $container = $(
1638
- '<li class="select2-selection__choice">' +
1639
- '<span class="select2-selection__choice__remove" role="presentation">' +
1640
- '&times;' +
1641
- '</span>' +
1642
- '</li>'
1643
- );
1644
-
1645
- return $container;
1646
- };
1647
-
1648
- MultipleSelection.prototype.update = function (data) {
1649
- this.clear();
1650
-
1651
- if (data.length === 0) {
1652
- return;
1653
- }
1654
-
1655
- var $selections = [];
1656
-
1657
- for (var d = 0; d < data.length; d++) {
1658
- var selection = data[d];
1659
-
1660
- var $selection = this.selectionContainer();
1661
- var formatted = this.display(selection, $selection);
1662
-
1663
- $selection.append(formatted);
1664
- $selection.prop('title', selection.title || selection.text);
1665
-
1666
- $selection.data('data', selection);
1667
-
1668
- $selections.push($selection);
1669
- }
1670
-
1671
- var $rendered = this.$selection.find('.select2-selection__rendered');
1672
-
1673
- Utils.appendMany($rendered, $selections);
1674
- };
1675
-
1676
- return MultipleSelection;
1677
- });
1678
-
1679
- S2.define('select2/selection/placeholder',[
1680
- '../utils'
1681
- ], function (Utils) {
1682
- function Placeholder (decorated, $element, options) {
1683
- this.placeholder = this.normalizePlaceholder(options.get('placeholder'));
1684
-
1685
- decorated.call(this, $element, options);
1686
- }
1687
-
1688
- Placeholder.prototype.normalizePlaceholder = function (_, placeholder) {
1689
- if (typeof placeholder === 'string') {
1690
- placeholder = {
1691
- id: '',
1692
- text: placeholder
1693
- };
1694
- }
1695
-
1696
- return placeholder;
1697
- };
1698
-
1699
- Placeholder.prototype.createPlaceholder = function (decorated, placeholder) {
1700
- var $placeholder = this.selectionContainer();
1701
-
1702
- $placeholder.html(this.display(placeholder));
1703
- $placeholder.addClass('select2-selection__placeholder')
1704
- .removeClass('select2-selection__choice');
1705
-
1706
- return $placeholder;
1707
- };
1708
-
1709
- Placeholder.prototype.update = function (decorated, data) {
1710
- var singlePlaceholder = (
1711
- data.length == 1 && data[0].id != this.placeholder.id
1712
- );
1713
- var multipleSelections = data.length > 1;
1714
-
1715
- if (multipleSelections || singlePlaceholder) {
1716
- return decorated.call(this, data);
1717
- }
1718
-
1719
- this.clear();
1720
-
1721
- var $placeholder = this.createPlaceholder(this.placeholder);
1722
-
1723
- this.$selection.find('.select2-selection__rendered').append($placeholder);
1724
- };
1725
-
1726
- return Placeholder;
1727
- });
1728
-
1729
- S2.define('select2/selection/allowClear',[
1730
- 'jquery',
1731
- '../keys'
1732
- ], function ($, KEYS) {
1733
- function AllowClear () { }
1734
-
1735
- AllowClear.prototype.bind = function (decorated, container, $container) {
1736
- var self = this;
1737
-
1738
- decorated.call(this, container, $container);
1739
-
1740
- if (this.placeholder == null) {
1741
- if (this.options.get('debug') && window.console && console.error) {
1742
- console.error(
1743
- 'Select2: The `allowClear` option should be used in combination ' +
1744
- 'with the `placeholder` option.'
1745
- );
1746
- }
1747
- }
1748
-
1749
- this.$selection.on('mousedown', '.select2-selection__clear',
1750
- function (evt) {
1751
- self._handleClear(evt);
1752
- });
1753
-
1754
- container.on('keypress', function (evt) {
1755
- self._handleKeyboardClear(evt, container);
1756
- });
1757
- };
1758
-
1759
- AllowClear.prototype._handleClear = function (_, evt) {
1760
- // Ignore the event if it is disabled
1761
- if (this.options.get('disabled')) {
1762
- return;
1763
- }
1764
-
1765
- var $clear = this.$selection.find('.select2-selection__clear');
1766
-
1767
- // Ignore the event if nothing has been selected
1768
- if ($clear.length === 0) {
1769
- return;
1770
- }
1771
-
1772
- evt.stopPropagation();
1773
-
1774
- var data = $clear.data('data');
1775
-
1776
- for (var d = 0; d < data.length; d++) {
1777
- var unselectData = {
1778
- data: data[d]
1779
- };
1780
-
1781
- // Trigger the `unselect` event, so people can prevent it from being
1782
- // cleared.
1783
- this.trigger('unselect', unselectData);
1784
-
1785
- // If the event was prevented, don't clear it out.
1786
- if (unselectData.prevented) {
1787
- return;
1788
- }
1789
- }
1790
-
1791
- this.$element.val(this.placeholder.id).trigger('change');
1792
-
1793
- this.trigger('toggle', {});
1794
- };
1795
-
1796
- AllowClear.prototype._handleKeyboardClear = function (_, evt, container) {
1797
- if (container.isOpen()) {
1798
- return;
1799
- }
1800
-
1801
- if (evt.which == KEYS.DELETE || evt.which == KEYS.BACKSPACE) {
1802
- this._handleClear(evt);
1803
- }
1804
- };
1805
-
1806
- AllowClear.prototype.update = function (decorated, data) {
1807
- decorated.call(this, data);
1808
-
1809
- if (this.$selection.find('.select2-selection__placeholder').length > 0 ||
1810
- data.length === 0) {
1811
- return;
1812
- }
1813
-
1814
- var $remove = $(
1815
- '<span class="select2-selection__clear">' +
1816
- '&times;' +
1817
- '</span>'
1818
- );
1819
- $remove.data('data', data);
1820
-
1821
- this.$selection.find('.select2-selection__rendered').prepend($remove);
1822
- };
1823
-
1824
- return AllowClear;
1825
- });
1826
-
1827
- S2.define('select2/selection/search',[
1828
- 'jquery',
1829
- '../utils',
1830
- '../keys'
1831
- ], function ($, Utils, KEYS) {
1832
- function Search (decorated, $element, options) {
1833
- decorated.call(this, $element, options);
1834
- }
1835
-
1836
- Search.prototype.render = function (decorated) {
1837
- var $search = $(
1838
- '<li class="select2-search select2-search--inline">' +
1839
- '<input class="select2-search__field" type="search" tabindex="-1"' +
1840
- ' autocomplete="off" autocorrect="off" autocapitalize="off"' +
1841
- ' spellcheck="false" role="textbox" aria-autocomplete="list" />' +
1842
- '</li>'
1843
- );
1844
-
1845
- this.$searchContainer = $search;
1846
- this.$search = $search.find('input');
1847
-
1848
- var $rendered = decorated.call(this);
1849
-
1850
- this._transferTabIndex();
1851
-
1852
- return $rendered;
1853
- };
1854
-
1855
- Search.prototype.bind = function (decorated, container, $container) {
1856
- var self = this;
1857
-
1858
- decorated.call(this, container, $container);
1859
-
1860
- container.on('open', function () {
1861
- self.$search.trigger('focus');
1862
- });
1863
-
1864
- container.on('close', function () {
1865
- self.$search.val('');
1866
- self.$search.removeAttr('aria-activedescendant');
1867
- self.$search.trigger('focus');
1868
- });
1869
-
1870
- container.on('enable', function () {
1871
- self.$search.prop('disabled', false);
1872
-
1873
- self._transferTabIndex();
1874
- });
1875
-
1876
- container.on('disable', function () {
1877
- self.$search.prop('disabled', true);
1878
- });
1879
-
1880
- container.on('focus', function (evt) {
1881
- self.$search.trigger('focus');
1882
- });
1883
-
1884
- container.on('results:focus', function (params) {
1885
- self.$search.attr('aria-activedescendant', params.id);
1886
- });
1887
-
1888
- this.$selection.on('focusin', '.select2-search--inline', function (evt) {
1889
- self.trigger('focus', evt);
1890
- });
1891
-
1892
- this.$selection.on('focusout', '.select2-search--inline', function (evt) {
1893
- self._handleBlur(evt);
1894
- });
1895
-
1896
- this.$selection.on('keydown', '.select2-search--inline', function (evt) {
1897
- evt.stopPropagation();
1898
-
1899
- self.trigger('keypress', evt);
1900
-
1901
- self._keyUpPrevented = evt.isDefaultPrevented();
1902
-
1903
- var key = evt.which;
1904
-
1905
- if (key === KEYS.BACKSPACE && self.$search.val() === '') {
1906
- var $previousChoice = self.$searchContainer
1907
- .prev('.select2-selection__choice');
1908
-
1909
- if ($previousChoice.length > 0) {
1910
- var item = $previousChoice.data('data');
1911
-
1912
- self.searchRemoveChoice(item);
1913
-
1914
- evt.preventDefault();
1915
- }
1916
- }
1917
- });
1918
-
1919
- // Try to detect the IE version should the `documentMode` property that
1920
- // is stored on the document. This is only implemented in IE and is
1921
- // slightly cleaner than doing a user agent check.
1922
- // This property is not available in Edge, but Edge also doesn't have
1923
- // this bug.
1924
- var msie = document.documentMode;
1925
- var disableInputEvents = msie && msie <= 11;
1926
-
1927
- // Workaround for browsers which do not support the `input` event
1928
- // This will prevent double-triggering of events for browsers which support
1929
- // both the `keyup` and `input` events.
1930
- this.$selection.on(
1931
- 'input.searchcheck',
1932
- '.select2-search--inline',
1933
- function (evt) {
1934
- // IE will trigger the `input` event when a placeholder is used on a
1935
- // search box. To get around this issue, we are forced to ignore all
1936
- // `input` events in IE and keep using `keyup`.
1937
- if (disableInputEvents) {
1938
- self.$selection.off('input.search input.searchcheck');
1939
- return;
1940
- }
1941
-
1942
- // Unbind the duplicated `keyup` event
1943
- self.$selection.off('keyup.search');
1944
- }
1945
- );
1946
-
1947
- this.$selection.on(
1948
- 'keyup.search input.search',
1949
- '.select2-search--inline',
1950
- function (evt) {
1951
- // IE will trigger the `input` event when a placeholder is used on a
1952
- // search box. To get around this issue, we are forced to ignore all
1953
- // `input` events in IE and keep using `keyup`.
1954
- if (disableInputEvents && evt.type === 'input') {
1955
- self.$selection.off('input.search input.searchcheck');
1956
- return;
1957
- }
1958
-
1959
- var key = evt.which;
1960
-
1961
- // We can freely ignore events from modifier keys
1962
- if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) {
1963
- return;
1964
- }
1965
-
1966
- // Tabbing will be handled during the `keydown` phase
1967
- if (key == KEYS.TAB) {
1968
- return;
1969
- }
1970
-
1971
- self.handleSearch(evt);
1972
- }
1973
- );
1974
- };
1975
-
1976
- /**
1977
- * This method will transfer the tabindex attribute from the rendered
1978
- * selection to the search box. This allows for the search box to be used as
1979
- * the primary focus instead of the selection container.
1980
- *
1981
- * @private
1982
- */
1983
- Search.prototype._transferTabIndex = function (decorated) {
1984
- this.$search.attr('tabindex', this.$selection.attr('tabindex'));
1985
- this.$selection.attr('tabindex', '-1');
1986
- };
1987
-
1988
- Search.prototype.createPlaceholder = function (decorated, placeholder) {
1989
- this.$search.attr('placeholder', placeholder.text);
1990
- };
1991
-
1992
- Search.prototype.update = function (decorated, data) {
1993
- var searchHadFocus = this.$search[0] == document.activeElement;
1994
-
1995
- this.$search.attr('placeholder', '');
1996
-
1997
- decorated.call(this, data);
1998
-
1999
- this.$selection.find('.select2-selection__rendered')
2000
- .append(this.$searchContainer);
2001
-
2002
- this.resizeSearch();
2003
- if (searchHadFocus) {
2004
- this.$search.focus();
2005
- }
2006
- };
2007
-
2008
- Search.prototype.handleSearch = function () {
2009
- this.resizeSearch();
2010
-
2011
- if (!this._keyUpPrevented) {
2012
- var input = this.$search.val();
2013
-
2014
- this.trigger('query', {
2015
- term: input
2016
- });
2017
- }
2018
-
2019
- this._keyUpPrevented = false;
2020
- };
2021
-
2022
- Search.prototype.searchRemoveChoice = function (decorated, item) {
2023
- this.trigger('unselect', {
2024
- data: item
2025
- });
2026
-
2027
- this.$search.val(item.text);
2028
- this.handleSearch();
2029
- };
2030
-
2031
- Search.prototype.resizeSearch = function () {
2032
- this.$search.css('width', '25px');
2033
-
2034
- var width = '';
2035
-
2036
- if (this.$search.attr('placeholder') !== '') {
2037
- width = this.$selection.find('.select2-selection__rendered').innerWidth();
2038
- } else {
2039
- var minimumWidth = this.$search.val().length + 1;
2040
-
2041
- width = (minimumWidth * 0.75) + 'em';
2042
- }
2043
-
2044
- this.$search.css('width', width);
2045
- };
2046
-
2047
- return Search;
2048
- });
2049
-
2050
- S2.define('select2/selection/eventRelay',[
2051
- 'jquery'
2052
- ], function ($) {
2053
- function EventRelay () { }
2054
-
2055
- EventRelay.prototype.bind = function (decorated, container, $container) {
2056
- var self = this;
2057
- var relayEvents = [
2058
- 'open', 'opening',
2059
- 'close', 'closing',
2060
- 'select', 'selecting',
2061
- 'unselect', 'unselecting'
2062
- ];
2063
-
2064
- var preventableEvents = ['opening', 'closing', 'selecting', 'unselecting'];
2065
-
2066
- decorated.call(this, container, $container);
2067
-
2068
- container.on('*', function (name, params) {
2069
- // Ignore events that should not be relayed
2070
- if ($.inArray(name, relayEvents) === -1) {
2071
- return;
2072
- }
2073
-
2074
- // The parameters should always be an object
2075
- params = params || {};
2076
-
2077
- // Generate the jQuery event for the Select2 event
2078
- var evt = $.Event('select2:' + name, {
2079
- params: params
2080
- });
2081
-
2082
- self.$element.trigger(evt);
2083
-
2084
- // Only handle preventable events if it was one
2085
- if ($.inArray(name, preventableEvents) === -1) {
2086
- return;
2087
- }
2088
-
2089
- params.prevented = evt.isDefaultPrevented();
2090
- });
2091
- };
2092
-
2093
- return EventRelay;
2094
- });
2095
-
2096
- S2.define('select2/translation',[
2097
- 'jquery',
2098
- 'require'
2099
- ], function ($, require) {
2100
- function Translation (dict) {
2101
- this.dict = dict || {};
2102
- }
2103
-
2104
- Translation.prototype.all = function () {
2105
- return this.dict;
2106
- };
2107
-
2108
- Translation.prototype.get = function (key) {
2109
- return this.dict[key];
2110
- };
2111
-
2112
- Translation.prototype.extend = function (translation) {
2113
- this.dict = $.extend({}, translation.all(), this.dict);
2114
- };
2115
-
2116
- // Static functions
2117
-
2118
- Translation._cache = {};
2119
-
2120
- Translation.loadPath = function (path) {
2121
- if (!(path in Translation._cache)) {
2122
- var translations = require(path);
2123
-
2124
- Translation._cache[path] = translations;
2125
- }
2126
-
2127
- return new Translation(Translation._cache[path]);
2128
- };
2129
-
2130
- return Translation;
2131
- });
2132
-
2133
- S2.define('select2/diacritics',[
2134
-
2135
- ], function () {
2136
- var diacritics = {
2137
- '\u24B6': 'A',
2138
- '\uFF21': 'A',
2139
- '\u00C0': 'A',
2140
- '\u00C1': 'A',
2141
- '\u00C2': 'A',
2142
- '\u1EA6': 'A',
2143
- '\u1EA4': 'A',
2144
- '\u1EAA': 'A',
2145
- '\u1EA8': 'A',
2146
- '\u00C3': 'A',
2147
- '\u0100': 'A',
2148
- '\u0102': 'A',
2149
- '\u1EB0': 'A',
2150
- '\u1EAE': 'A',
2151
- '\u1EB4': 'A',
2152
- '\u1EB2': 'A',
2153
- '\u0226': 'A',
2154
- '\u01E0': 'A',
2155
- '\u00C4': 'A',
2156
- '\u01DE': 'A',
2157
- '\u1EA2': 'A',
2158
- '\u00C5': 'A',
2159
- '\u01FA': 'A',
2160
- '\u01CD': 'A',
2161
- '\u0200': 'A',
2162
- '\u0202': 'A',
2163
- '\u1EA0': 'A',
2164
- '\u1EAC': 'A',
2165
- '\u1EB6': 'A',
2166
- '\u1E00': 'A',
2167
- '\u0104': 'A',
2168
- '\u023A': 'A',
2169
- '\u2C6F': 'A',
2170
- '\uA732': 'AA',
2171
- '\u00C6': 'AE',
2172
- '\u01FC': 'AE',
2173
- '\u01E2': 'AE',
2174
- '\uA734': 'AO',
2175
- '\uA736': 'AU',
2176
- '\uA738': 'AV',
2177
- '\uA73A': 'AV',
2178
- '\uA73C': 'AY',
2179
- '\u24B7': 'B',
2180
- '\uFF22': 'B',
2181
- '\u1E02': 'B',
2182
- '\u1E04': 'B',
2183
- '\u1E06': 'B',
2184
- '\u0243': 'B',
2185
- '\u0182': 'B',
2186
- '\u0181': 'B',
2187
- '\u24B8': 'C',
2188
- '\uFF23': 'C',
2189
- '\u0106': 'C',
2190
- '\u0108': 'C',
2191
- '\u010A': 'C',
2192
- '\u010C': 'C',
2193
- '\u00C7': 'C',
2194
- '\u1E08': 'C',
2195
- '\u0187': 'C',
2196
- '\u023B': 'C',
2197
- '\uA73E': 'C',
2198
- '\u24B9': 'D',
2199
- '\uFF24': 'D',
2200
- '\u1E0A': 'D',
2201
- '\u010E': 'D',
2202
- '\u1E0C': 'D',
2203
- '\u1E10': 'D',
2204
- '\u1E12': 'D',
2205
- '\u1E0E': 'D',
2206
- '\u0110': 'D',
2207
- '\u018B': 'D',
2208
- '\u018A': 'D',
2209
- '\u0189': 'D',
2210
- '\uA779': 'D',
2211
- '\u01F1': 'DZ',
2212
- '\u01C4': 'DZ',
2213
- '\u01F2': 'Dz',
2214
- '\u01C5': 'Dz',
2215
- '\u24BA': 'E',
2216
- '\uFF25': 'E',
2217
- '\u00C8': 'E',
2218
- '\u00C9': 'E',
2219
- '\u00CA': 'E',
2220
- '\u1EC0': 'E',
2221
- '\u1EBE': 'E',
2222
- '\u1EC4': 'E',
2223
- '\u1EC2': 'E',
2224
- '\u1EBC': 'E',
2225
- '\u0112': 'E',
2226
- '\u1E14': 'E',
2227
- '\u1E16': 'E',
2228
- '\u0114': 'E',
2229
- '\u0116': 'E',
2230
- '\u00CB': 'E',
2231
- '\u1EBA': 'E',
2232
- '\u011A': 'E',
2233
- '\u0204': 'E',
2234
- '\u0206': 'E',
2235
- '\u1EB8': 'E',
2236
- '\u1EC6': 'E',
2237
- '\u0228': 'E',
2238
- '\u1E1C': 'E',
2239
- '\u0118': 'E',
2240
- '\u1E18': 'E',
2241
- '\u1E1A': 'E',
2242
- '\u0190': 'E',
2243
- '\u018E': 'E',
2244
- '\u24BB': 'F',
2245
- '\uFF26': 'F',
2246
- '\u1E1E': 'F',
2247
- '\u0191': 'F',
2248
- '\uA77B': 'F',
2249
- '\u24BC': 'G',
2250
- '\uFF27': 'G',
2251
- '\u01F4': 'G',
2252
- '\u011C': 'G',
2253
- '\u1E20': 'G',
2254
- '\u011E': 'G',
2255
- '\u0120': 'G',
2256
- '\u01E6': 'G',
2257
- '\u0122': 'G',
2258
- '\u01E4': 'G',
2259
- '\u0193': 'G',
2260
- '\uA7A0': 'G',
2261
- '\uA77D': 'G',
2262
- '\uA77E': 'G',
2263
- '\u24BD': 'H',
2264
- '\uFF28': 'H',
2265
- '\u0124': 'H',
2266
- '\u1E22': 'H',
2267
- '\u1E26': 'H',
2268
- '\u021E': 'H',
2269
- '\u1E24': 'H',
2270
- '\u1E28': 'H',
2271
- '\u1E2A': 'H',
2272
- '\u0126': 'H',
2273
- '\u2C67': 'H',
2274
- '\u2C75': 'H',
2275
- '\uA78D': 'H',
2276
- '\u24BE': 'I',
2277
- '\uFF29': 'I',
2278
- '\u00CC': 'I',
2279
- '\u00CD': 'I',
2280
- '\u00CE': 'I',
2281
- '\u0128': 'I',
2282
- '\u012A': 'I',
2283
- '\u012C': 'I',
2284
- '\u0130': 'I',
2285
- '\u00CF': 'I',
2286
- '\u1E2E': 'I',
2287
- '\u1EC8': 'I',
2288
- '\u01CF': 'I',
2289
- '\u0208': 'I',
2290
- '\u020A': 'I',
2291
- '\u1ECA': 'I',
2292
- '\u012E': 'I',
2293
- '\u1E2C': 'I',
2294
- '\u0197': 'I',
2295
- '\u24BF': 'J',
2296
- '\uFF2A': 'J',
2297
- '\u0134': 'J',
2298
- '\u0248': 'J',
2299
- '\u24C0': 'K',
2300
- '\uFF2B': 'K',
2301
- '\u1E30': 'K',
2302
- '\u01E8': 'K',
2303
- '\u1E32': 'K',
2304
- '\u0136': 'K',
2305
- '\u1E34': 'K',
2306
- '\u0198': 'K',
2307
- '\u2C69': 'K',
2308
- '\uA740': 'K',
2309
- '\uA742': 'K',
2310
- '\uA744': 'K',
2311
- '\uA7A2': 'K',
2312
- '\u24C1': 'L',
2313
- '\uFF2C': 'L',
2314
- '\u013F': 'L',
2315
- '\u0139': 'L',
2316
- '\u013D': 'L',
2317
- '\u1E36': 'L',
2318
- '\u1E38': 'L',
2319
- '\u013B': 'L',
2320
- '\u1E3C': 'L',
2321
- '\u1E3A': 'L',
2322
- '\u0141': 'L',
2323
- '\u023D': 'L',
2324
- '\u2C62': 'L',
2325
- '\u2C60': 'L',
2326
- '\uA748': 'L',
2327
- '\uA746': 'L',
2328
- '\uA780': 'L',
2329
- '\u01C7': 'LJ',
2330
- '\u01C8': 'Lj',
2331
- '\u24C2': 'M',
2332
- '\uFF2D': 'M',
2333
- '\u1E3E': 'M',
2334
- '\u1E40': 'M',
2335
- '\u1E42': 'M',
2336
- '\u2C6E': 'M',
2337
- '\u019C': 'M',
2338
- '\u24C3': 'N',
2339
- '\uFF2E': 'N',
2340
- '\u01F8': 'N',
2341
- '\u0143': 'N',
2342
- '\u00D1': 'N',
2343
- '\u1E44': 'N',
2344
- '\u0147': 'N',
2345
- '\u1E46': 'N',
2346
- '\u0145': 'N',
2347
- '\u1E4A': 'N',
2348
- '\u1E48': 'N',
2349
- '\u0220': 'N',
2350
- '\u019D': 'N',
2351
- '\uA790': 'N',
2352
- '\uA7A4': 'N',
2353
- '\u01CA': 'NJ',
2354
- '\u01CB': 'Nj',
2355
- '\u24C4': 'O',
2356
- '\uFF2F': 'O',
2357
- '\u00D2': 'O',
2358
- '\u00D3': 'O',
2359
- '\u00D4': 'O',
2360
- '\u1ED2': 'O',
2361
- '\u1ED0': 'O',
2362
- '\u1ED6': 'O',
2363
- '\u1ED4': 'O',
2364
- '\u00D5': 'O',
2365
- '\u1E4C': 'O',
2366
- '\u022C': 'O',
2367
- '\u1E4E': 'O',
2368
- '\u014C': 'O',
2369
- '\u1E50': 'O',
2370
- '\u1E52': 'O',
2371
- '\u014E': 'O',
2372
- '\u022E': 'O',
2373
- '\u0230': 'O',
2374
- '\u00D6': 'O',
2375
- '\u022A': 'O',
2376
- '\u1ECE': 'O',
2377
- '\u0150': 'O',
2378
- '\u01D1': 'O',
2379
- '\u020C': 'O',
2380
- '\u020E': 'O',
2381
- '\u01A0': 'O',
2382
- '\u1EDC': 'O',
2383
- '\u1EDA': 'O',
2384
- '\u1EE0': 'O',
2385
- '\u1EDE': 'O',
2386
- '\u1EE2': 'O',
2387
- '\u1ECC': 'O',
2388
- '\u1ED8': 'O',
2389
- '\u01EA': 'O',
2390
- '\u01EC': 'O',
2391
- '\u00D8': 'O',
2392
- '\u01FE': 'O',
2393
- '\u0186': 'O',
2394
- '\u019F': 'O',
2395
- '\uA74A': 'O',
2396
- '\uA74C': 'O',
2397
- '\u01A2': 'OI',
2398
- '\uA74E': 'OO',
2399
- '\u0222': 'OU',
2400
- '\u24C5': 'P',
2401
- '\uFF30': 'P',
2402
- '\u1E54': 'P',
2403
- '\u1E56': 'P',
2404
- '\u01A4': 'P',
2405
- '\u2C63': 'P',
2406
- '\uA750': 'P',
2407
- '\uA752': 'P',
2408
- '\uA754': 'P',
2409
- '\u24C6': 'Q',
2410
- '\uFF31': 'Q',
2411
- '\uA756': 'Q',
2412
- '\uA758': 'Q',
2413
- '\u024A': 'Q',
2414
- '\u24C7': 'R',
2415
- '\uFF32': 'R',
2416
- '\u0154': 'R',
2417
- '\u1E58': 'R',
2418
- '\u0158': 'R',
2419
- '\u0210': 'R',
2420
- '\u0212': 'R',
2421
- '\u1E5A': 'R',
2422
- '\u1E5C': 'R',
2423
- '\u0156': 'R',
2424
- '\u1E5E': 'R',
2425
- '\u024C': 'R',
2426
- '\u2C64': 'R',
2427
- '\uA75A': 'R',
2428
- '\uA7A6': 'R',
2429
- '\uA782': 'R',
2430
- '\u24C8': 'S',
2431
- '\uFF33': 'S',
2432
- '\u1E9E': 'S',
2433
- '\u015A': 'S',
2434
- '\u1E64': 'S',
2435
- '\u015C': 'S',
2436
- '\u1E60': 'S',
2437
- '\u0160': 'S',
2438
- '\u1E66': 'S',
2439
- '\u1E62': 'S',
2440
- '\u1E68': 'S',
2441
- '\u0218': 'S',
2442
- '\u015E': 'S',
2443
- '\u2C7E': 'S',
2444
- '\uA7A8': 'S',
2445
- '\uA784': 'S',
2446
- '\u24C9': 'T',
2447
- '\uFF34': 'T',
2448
- '\u1E6A': 'T',
2449
- '\u0164': 'T',
2450
- '\u1E6C': 'T',
2451
- '\u021A': 'T',
2452
- '\u0162': 'T',
2453
- '\u1E70': 'T',
2454
- '\u1E6E': 'T',
2455
- '\u0166': 'T',
2456
- '\u01AC': 'T',
2457
- '\u01AE': 'T',
2458
- '\u023E': 'T',
2459
- '\uA786': 'T',
2460
- '\uA728': 'TZ',
2461
- '\u24CA': 'U',
2462
- '\uFF35': 'U',
2463
- '\u00D9': 'U',
2464
- '\u00DA': 'U',
2465
- '\u00DB': 'U',
2466
- '\u0168': 'U',
2467
- '\u1E78': 'U',
2468
- '\u016A': 'U',
2469
- '\u1E7A': 'U',
2470
- '\u016C': 'U',
2471
- '\u00DC': 'U',
2472
- '\u01DB': 'U',
2473
- '\u01D7': 'U',
2474
- '\u01D5': 'U',
2475
- '\u01D9': 'U',
2476
- '\u1EE6': 'U',
2477
- '\u016E': 'U',
2478
- '\u0170': 'U',
2479
- '\u01D3': 'U',
2480
- '\u0214': 'U',
2481
- '\u0216': 'U',
2482
- '\u01AF': 'U',
2483
- '\u1EEA': 'U',
2484
- '\u1EE8': 'U',
2485
- '\u1EEE': 'U',
2486
- '\u1EEC': 'U',
2487
- '\u1EF0': 'U',
2488
- '\u1EE4': 'U',
2489
- '\u1E72': 'U',
2490
- '\u0172': 'U',
2491
- '\u1E76': 'U',
2492
- '\u1E74': 'U',
2493
- '\u0244': 'U',
2494
- '\u24CB': 'V',
2495
- '\uFF36': 'V',
2496
- '\u1E7C': 'V',
2497
- '\u1E7E': 'V',
2498
- '\u01B2': 'V',
2499
- '\uA75E': 'V',
2500
- '\u0245': 'V',
2501
- '\uA760': 'VY',
2502
- '\u24CC': 'W',
2503
- '\uFF37': 'W',
2504
- '\u1E80': 'W',
2505
- '\u1E82': 'W',
2506
- '\u0174': 'W',
2507
- '\u1E86': 'W',
2508
- '\u1E84': 'W',
2509
- '\u1E88': 'W',
2510
- '\u2C72': 'W',
2511
- '\u24CD': 'X',
2512
- '\uFF38': 'X',
2513
- '\u1E8A': 'X',
2514
- '\u1E8C': 'X',
2515
- '\u24CE': 'Y',
2516
- '\uFF39': 'Y',
2517
- '\u1EF2': 'Y',
2518
- '\u00DD': 'Y',
2519
- '\u0176': 'Y',
2520
- '\u1EF8': 'Y',
2521
- '\u0232': 'Y',
2522
- '\u1E8E': 'Y',
2523
- '\u0178': 'Y',
2524
- '\u1EF6': 'Y',
2525
- '\u1EF4': 'Y',
2526
- '\u01B3': 'Y',
2527
- '\u024E': 'Y',
2528
- '\u1EFE': 'Y',
2529
- '\u24CF': 'Z',
2530
- '\uFF3A': 'Z',
2531
- '\u0179': 'Z',
2532
- '\u1E90': 'Z',
2533
- '\u017B': 'Z',
2534
- '\u017D': 'Z',
2535
- '\u1E92': 'Z',
2536
- '\u1E94': 'Z',
2537
- '\u01B5': 'Z',
2538
- '\u0224': 'Z',
2539
- '\u2C7F': 'Z',
2540
- '\u2C6B': 'Z',
2541
- '\uA762': 'Z',
2542
- '\u24D0': 'a',
2543
- '\uFF41': 'a',
2544
- '\u1E9A': 'a',
2545
- '\u00E0': 'a',
2546
- '\u00E1': 'a',
2547
- '\u00E2': 'a',
2548
- '\u1EA7': 'a',
2549
- '\u1EA5': 'a',
2550
- '\u1EAB': 'a',
2551
- '\u1EA9': 'a',
2552
- '\u00E3': 'a',
2553
- '\u0101': 'a',
2554
- '\u0103': 'a',
2555
- '\u1EB1': 'a',
2556
- '\u1EAF': 'a',
2557
- '\u1EB5': 'a',
2558
- '\u1EB3': 'a',
2559
- '\u0227': 'a',
2560
- '\u01E1': 'a',
2561
- '\u00E4': 'a',
2562
- '\u01DF': 'a',
2563
- '\u1EA3': 'a',
2564
- '\u00E5': 'a',
2565
- '\u01FB': 'a',
2566
- '\u01CE': 'a',
2567
- '\u0201': 'a',
2568
- '\u0203': 'a',
2569
- '\u1EA1': 'a',
2570
- '\u1EAD': 'a',
2571
- '\u1EB7': 'a',
2572
- '\u1E01': 'a',
2573
- '\u0105': 'a',
2574
- '\u2C65': 'a',
2575
- '\u0250': 'a',
2576
- '\uA733': 'aa',
2577
- '\u00E6': 'ae',
2578
- '\u01FD': 'ae',
2579
- '\u01E3': 'ae',
2580
- '\uA735': 'ao',
2581
- '\uA737': 'au',
2582
- '\uA739': 'av',
2583
- '\uA73B': 'av',
2584
- '\uA73D': 'ay',
2585
- '\u24D1': 'b',
2586
- '\uFF42': 'b',
2587
- '\u1E03': 'b',
2588
- '\u1E05': 'b',
2589
- '\u1E07': 'b',
2590
- '\u0180': 'b',
2591
- '\u0183': 'b',
2592
- '\u0253': 'b',
2593
- '\u24D2': 'c',
2594
- '\uFF43': 'c',
2595
- '\u0107': 'c',
2596
- '\u0109': 'c',
2597
- '\u010B': 'c',
2598
- '\u010D': 'c',
2599
- '\u00E7': 'c',
2600
- '\u1E09': 'c',
2601
- '\u0188': 'c',
2602
- '\u023C': 'c',
2603
- '\uA73F': 'c',
2604
- '\u2184': 'c',
2605
- '\u24D3': 'd',
2606
- '\uFF44': 'd',
2607
- '\u1E0B': 'd',
2608
- '\u010F': 'd',
2609
- '\u1E0D': 'd',
2610
- '\u1E11': 'd',
2611
- '\u1E13': 'd',
2612
- '\u1E0F': 'd',
2613
- '\u0111': 'd',
2614
- '\u018C': 'd',
2615
- '\u0256': 'd',
2616
- '\u0257': 'd',
2617
- '\uA77A': 'd',
2618
- '\u01F3': 'dz',
2619
- '\u01C6': 'dz',
2620
- '\u24D4': 'e',
2621
- '\uFF45': 'e',
2622
- '\u00E8': 'e',
2623
- '\u00E9': 'e',
2624
- '\u00EA': 'e',
2625
- '\u1EC1': 'e',
2626
- '\u1EBF': 'e',
2627
- '\u1EC5': 'e',
2628
- '\u1EC3': 'e',
2629
- '\u1EBD': 'e',
2630
- '\u0113': 'e',
2631
- '\u1E15': 'e',
2632
- '\u1E17': 'e',
2633
- '\u0115': 'e',
2634
- '\u0117': 'e',
2635
- '\u00EB': 'e',
2636
- '\u1EBB': 'e',
2637
- '\u011B': 'e',
2638
- '\u0205': 'e',
2639
- '\u0207': 'e',
2640
- '\u1EB9': 'e',
2641
- '\u1EC7': 'e',
2642
- '\u0229': 'e',
2643
- '\u1E1D': 'e',
2644
- '\u0119': 'e',
2645
- '\u1E19': 'e',
2646
- '\u1E1B': 'e',
2647
- '\u0247': 'e',
2648
- '\u025B': 'e',
2649
- '\u01DD': 'e',
2650
- '\u24D5': 'f',
2651
- '\uFF46': 'f',
2652
- '\u1E1F': 'f',
2653
- '\u0192': 'f',
2654
- '\uA77C': 'f',
2655
- '\u24D6': 'g',
2656
- '\uFF47': 'g',
2657
- '\u01F5': 'g',
2658
- '\u011D': 'g',
2659
- '\u1E21': 'g',
2660
- '\u011F': 'g',
2661
- '\u0121': 'g',
2662
- '\u01E7': 'g',
2663
- '\u0123': 'g',
2664
- '\u01E5': 'g',
2665
- '\u0260': 'g',
2666
- '\uA7A1': 'g',
2667
- '\u1D79': 'g',
2668
- '\uA77F': 'g',
2669
- '\u24D7': 'h',
2670
- '\uFF48': 'h',
2671
- '\u0125': 'h',
2672
- '\u1E23': 'h',
2673
- '\u1E27': 'h',
2674
- '\u021F': 'h',
2675
- '\u1E25': 'h',
2676
- '\u1E29': 'h',
2677
- '\u1E2B': 'h',
2678
- '\u1E96': 'h',
2679
- '\u0127': 'h',
2680
- '\u2C68': 'h',
2681
- '\u2C76': 'h',
2682
- '\u0265': 'h',
2683
- '\u0195': 'hv',
2684
- '\u24D8': 'i',
2685
- '\uFF49': 'i',
2686
- '\u00EC': 'i',
2687
- '\u00ED': 'i',
2688
- '\u00EE': 'i',
2689
- '\u0129': 'i',
2690
- '\u012B': 'i',
2691
- '\u012D': 'i',
2692
- '\u00EF': 'i',
2693
- '\u1E2F': 'i',
2694
- '\u1EC9': 'i',
2695
- '\u01D0': 'i',
2696
- '\u0209': 'i',
2697
- '\u020B': 'i',
2698
- '\u1ECB': 'i',
2699
- '\u012F': 'i',
2700
- '\u1E2D': 'i',
2701
- '\u0268': 'i',
2702
- '\u0131': 'i',
2703
- '\u24D9': 'j',
2704
- '\uFF4A': 'j',
2705
- '\u0135': 'j',
2706
- '\u01F0': 'j',
2707
- '\u0249': 'j',
2708
- '\u24DA': 'k',
2709
- '\uFF4B': 'k',
2710
- '\u1E31': 'k',
2711
- '\u01E9': 'k',
2712
- '\u1E33': 'k',
2713
- '\u0137': 'k',
2714
- '\u1E35': 'k',
2715
- '\u0199': 'k',
2716
- '\u2C6A': 'k',
2717
- '\uA741': 'k',
2718
- '\uA743': 'k',
2719
- '\uA745': 'k',
2720
- '\uA7A3': 'k',
2721
- '\u24DB': 'l',
2722
- '\uFF4C': 'l',
2723
- '\u0140': 'l',
2724
- '\u013A': 'l',
2725
- '\u013E': 'l',
2726
- '\u1E37': 'l',
2727
- '\u1E39': 'l',
2728
- '\u013C': 'l',
2729
- '\u1E3D': 'l',
2730
- '\u1E3B': 'l',
2731
- '\u017F': 'l',
2732
- '\u0142': 'l',
2733
- '\u019A': 'l',
2734
- '\u026B': 'l',
2735
- '\u2C61': 'l',
2736
- '\uA749': 'l',
2737
- '\uA781': 'l',
2738
- '\uA747': 'l',
2739
- '\u01C9': 'lj',
2740
- '\u24DC': 'm',
2741
- '\uFF4D': 'm',
2742
- '\u1E3F': 'm',
2743
- '\u1E41': 'm',
2744
- '\u1E43': 'm',
2745
- '\u0271': 'm',
2746
- '\u026F': 'm',
2747
- '\u24DD': 'n',
2748
- '\uFF4E': 'n',
2749
- '\u01F9': 'n',
2750
- '\u0144': 'n',
2751
- '\u00F1': 'n',
2752
- '\u1E45': 'n',
2753
- '\u0148': 'n',
2754
- '\u1E47': 'n',
2755
- '\u0146': 'n',
2756
- '\u1E4B': 'n',
2757
- '\u1E49': 'n',
2758
- '\u019E': 'n',
2759
- '\u0272': 'n',
2760
- '\u0149': 'n',
2761
- '\uA791': 'n',
2762
- '\uA7A5': 'n',
2763
- '\u01CC': 'nj',
2764
- '\u24DE': 'o',
2765
- '\uFF4F': 'o',
2766
- '\u00F2': 'o',
2767
- '\u00F3': 'o',
2768
- '\u00F4': 'o',
2769
- '\u1ED3': 'o',
2770
- '\u1ED1': 'o',
2771
- '\u1ED7': 'o',
2772
- '\u1ED5': 'o',
2773
- '\u00F5': 'o',
2774
- '\u1E4D': 'o',
2775
- '\u022D': 'o',
2776
- '\u1E4F': 'o',
2777
- '\u014D': 'o',
2778
- '\u1E51': 'o',
2779
- '\u1E53': 'o',
2780
- '\u014F': 'o',
2781
- '\u022F': 'o',
2782
- '\u0231': 'o',
2783
- '\u00F6': 'o',
2784
- '\u022B': 'o',
2785
- '\u1ECF': 'o',
2786
- '\u0151': 'o',
2787
- '\u01D2': 'o',
2788
- '\u020D': 'o',
2789
- '\u020F': 'o',
2790
- '\u01A1': 'o',
2791
- '\u1EDD': 'o',
2792
- '\u1EDB': 'o',
2793
- '\u1EE1': 'o',
2794
- '\u1EDF': 'o',
2795
- '\u1EE3': 'o',
2796
- '\u1ECD': 'o',
2797
- '\u1ED9': 'o',
2798
- '\u01EB': 'o',
2799
- '\u01ED': 'o',
2800
- '\u00F8': 'o',
2801
- '\u01FF': 'o',
2802
- '\u0254': 'o',
2803
- '\uA74B': 'o',
2804
- '\uA74D': 'o',
2805
- '\u0275': 'o',
2806
- '\u01A3': 'oi',
2807
- '\u0223': 'ou',
2808
- '\uA74F': 'oo',
2809
- '\u24DF': 'p',
2810
- '\uFF50': 'p',
2811
- '\u1E55': 'p',
2812
- '\u1E57': 'p',
2813
- '\u01A5': 'p',
2814
- '\u1D7D': 'p',
2815
- '\uA751': 'p',
2816
- '\uA753': 'p',
2817
- '\uA755': 'p',
2818
- '\u24E0': 'q',
2819
- '\uFF51': 'q',
2820
- '\u024B': 'q',
2821
- '\uA757': 'q',
2822
- '\uA759': 'q',
2823
- '\u24E1': 'r',
2824
- '\uFF52': 'r',
2825
- '\u0155': 'r',
2826
- '\u1E59': 'r',
2827
- '\u0159': 'r',
2828
- '\u0211': 'r',
2829
- '\u0213': 'r',
2830
- '\u1E5B': 'r',
2831
- '\u1E5D': 'r',
2832
- '\u0157': 'r',
2833
- '\u1E5F': 'r',
2834
- '\u024D': 'r',
2835
- '\u027D': 'r',
2836
- '\uA75B': 'r',
2837
- '\uA7A7': 'r',
2838
- '\uA783': 'r',
2839
- '\u24E2': 's',
2840
- '\uFF53': 's',
2841
- '\u00DF': 's',
2842
- '\u015B': 's',
2843
- '\u1E65': 's',
2844
- '\u015D': 's',
2845
- '\u1E61': 's',
2846
- '\u0161': 's',
2847
- '\u1E67': 's',
2848
- '\u1E63': 's',
2849
- '\u1E69': 's',
2850
- '\u0219': 's',
2851
- '\u015F': 's',
2852
- '\u023F': 's',
2853
- '\uA7A9': 's',
2854
- '\uA785': 's',
2855
- '\u1E9B': 's',
2856
- '\u24E3': 't',
2857
- '\uFF54': 't',
2858
- '\u1E6B': 't',
2859
- '\u1E97': 't',
2860
- '\u0165': 't',
2861
- '\u1E6D': 't',
2862
- '\u021B': 't',
2863
- '\u0163': 't',
2864
- '\u1E71': 't',
2865
- '\u1E6F': 't',
2866
- '\u0167': 't',
2867
- '\u01AD': 't',
2868
- '\u0288': 't',
2869
- '\u2C66': 't',
2870
- '\uA787': 't',
2871
- '\uA729': 'tz',
2872
- '\u24E4': 'u',
2873
- '\uFF55': 'u',
2874
- '\u00F9': 'u',
2875
- '\u00FA': 'u',
2876
- '\u00FB': 'u',
2877
- '\u0169': 'u',
2878
- '\u1E79': 'u',
2879
- '\u016B': 'u',
2880
- '\u1E7B': 'u',
2881
- '\u016D': 'u',
2882
- '\u00FC': 'u',
2883
- '\u01DC': 'u',
2884
- '\u01D8': 'u',
2885
- '\u01D6': 'u',
2886
- '\u01DA': 'u',
2887
- '\u1EE7': 'u',
2888
- '\u016F': 'u',
2889
- '\u0171': 'u',
2890
- '\u01D4': 'u',
2891
- '\u0215': 'u',
2892
- '\u0217': 'u',
2893
- '\u01B0': 'u',
2894
- '\u1EEB': 'u',
2895
- '\u1EE9': 'u',
2896
- '\u1EEF': 'u',
2897
- '\u1EED': 'u',
2898
- '\u1EF1': 'u',
2899
- '\u1EE5': 'u',
2900
- '\u1E73': 'u',
2901
- '\u0173': 'u',
2902
- '\u1E77': 'u',
2903
- '\u1E75': 'u',
2904
- '\u0289': 'u',
2905
- '\u24E5': 'v',
2906
- '\uFF56': 'v',
2907
- '\u1E7D': 'v',
2908
- '\u1E7F': 'v',
2909
- '\u028B': 'v',
2910
- '\uA75F': 'v',
2911
- '\u028C': 'v',
2912
- '\uA761': 'vy',
2913
- '\u24E6': 'w',
2914
- '\uFF57': 'w',
2915
- '\u1E81': 'w',
2916
- '\u1E83': 'w',
2917
- '\u0175': 'w',
2918
- '\u1E87': 'w',
2919
- '\u1E85': 'w',
2920
- '\u1E98': 'w',
2921
- '\u1E89': 'w',
2922
- '\u2C73': 'w',
2923
- '\u24E7': 'x',
2924
- '\uFF58': 'x',
2925
- '\u1E8B': 'x',
2926
- '\u1E8D': 'x',
2927
- '\u24E8': 'y',
2928
- '\uFF59': 'y',
2929
- '\u1EF3': 'y',
2930
- '\u00FD': 'y',
2931
- '\u0177': 'y',
2932
- '\u1EF9': 'y',
2933
- '\u0233': 'y',
2934
- '\u1E8F': 'y',
2935
- '\u00FF': 'y',
2936
- '\u1EF7': 'y',
2937
- '\u1E99': 'y',
2938
- '\u1EF5': 'y',
2939
- '\u01B4': 'y',
2940
- '\u024F': 'y',
2941
- '\u1EFF': 'y',
2942
- '\u24E9': 'z',
2943
- '\uFF5A': 'z',
2944
- '\u017A': 'z',
2945
- '\u1E91': 'z',
2946
- '\u017C': 'z',
2947
- '\u017E': 'z',
2948
- '\u1E93': 'z',
2949
- '\u1E95': 'z',
2950
- '\u01B6': 'z',
2951
- '\u0225': 'z',
2952
- '\u0240': 'z',
2953
- '\u2C6C': 'z',
2954
- '\uA763': 'z',
2955
- '\u0386': '\u0391',
2956
- '\u0388': '\u0395',
2957
- '\u0389': '\u0397',
2958
- '\u038A': '\u0399',
2959
- '\u03AA': '\u0399',
2960
- '\u038C': '\u039F',
2961
- '\u038E': '\u03A5',
2962
- '\u03AB': '\u03A5',
2963
- '\u038F': '\u03A9',
2964
- '\u03AC': '\u03B1',
2965
- '\u03AD': '\u03B5',
2966
- '\u03AE': '\u03B7',
2967
- '\u03AF': '\u03B9',
2968
- '\u03CA': '\u03B9',
2969
- '\u0390': '\u03B9',
2970
- '\u03CC': '\u03BF',
2971
- '\u03CD': '\u03C5',
2972
- '\u03CB': '\u03C5',
2973
- '\u03B0': '\u03C5',
2974
- '\u03C9': '\u03C9',
2975
- '\u03C2': '\u03C3'
2976
- };
2977
-
2978
- return diacritics;
2979
- });
2980
-
2981
- S2.define('select2/data/base',[
2982
- '../utils'
2983
- ], function (Utils) {
2984
- function BaseAdapter ($element, options) {
2985
- BaseAdapter.__super__.constructor.call(this);
2986
- }
2987
-
2988
- Utils.Extend(BaseAdapter, Utils.Observable);
2989
-
2990
- BaseAdapter.prototype.current = function (callback) {
2991
- throw new Error('The `current` method must be defined in child classes.');
2992
- };
2993
-
2994
- BaseAdapter.prototype.query = function (params, callback) {
2995
- throw new Error('The `query` method must be defined in child classes.');
2996
- };
2997
-
2998
- BaseAdapter.prototype.bind = function (container, $container) {
2999
- // Can be implemented in subclasses
3000
- };
3001
-
3002
- BaseAdapter.prototype.destroy = function () {
3003
- // Can be implemented in subclasses
3004
- };
3005
-
3006
- BaseAdapter.prototype.generateResultId = function (container, data) {
3007
- var id = container.id + '-result-';
3008
-
3009
- id += Utils.generateChars(4);
3010
-
3011
- if (data.id != null) {
3012
- id += '-' + data.id.toString();
3013
- } else {
3014
- id += '-' + Utils.generateChars(4);
3015
- }
3016
- return id;
3017
- };
3018
-
3019
- return BaseAdapter;
3020
- });
3021
-
3022
- S2.define('select2/data/select',[
3023
- './base',
3024
- '../utils',
3025
- 'jquery'
3026
- ], function (BaseAdapter, Utils, $) {
3027
- function SelectAdapter ($element, options) {
3028
- this.$element = $element;
3029
- this.options = options;
3030
-
3031
- SelectAdapter.__super__.constructor.call(this);
3032
- }
3033
-
3034
- Utils.Extend(SelectAdapter, BaseAdapter);
3035
-
3036
- SelectAdapter.prototype.current = function (callback) {
3037
- var data = [];
3038
- var self = this;
3039
-
3040
- this.$element.find(':selected').each(function () {
3041
- var $option = $(this);
3042
-
3043
- var option = self.item($option);
3044
-
3045
- data.push(option);
3046
- });
3047
-
3048
- callback(data);
3049
- };
3050
-
3051
- SelectAdapter.prototype.select = function (data) {
3052
- var self = this;
3053
-
3054
- data.selected = true;
3055
-
3056
- // If data.element is a DOM node, use it instead
3057
- if ($(data.element).is('option')) {
3058
- data.element.selected = true;
3059
-
3060
- this.$element.trigger('change');
3061
-
3062
- return;
3063
- }
3064
-
3065
- if (this.$element.prop('multiple')) {
3066
- this.current(function (currentData) {
3067
- var val = [];
3068
-
3069
- data = [data];
3070
- data.push.apply(data, currentData);
3071
-
3072
- for (var d = 0; d < data.length; d++) {
3073
- var id = data[d].id;
3074
-
3075
- if ($.inArray(id, val) === -1) {
3076
- val.push(id);
3077
- }
3078
- }
3079
-
3080
- self.$element.val(val);
3081
- self.$element.trigger('change');
3082
- });
3083
- } else {
3084
- var val = data.id;
3085
-
3086
- this.$element.val(val);
3087
- this.$element.trigger('change');
3088
- }
3089
- };
3090
-
3091
- SelectAdapter.prototype.unselect = function (data) {
3092
- var self = this;
3093
-
3094
- if (!this.$element.prop('multiple')) {
3095
- return;
3096
- }
3097
-
3098
- data.selected = false;
3099
-
3100
- if ($(data.element).is('option')) {
3101
- data.element.selected = false;
3102
-
3103
- this.$element.trigger('change');
3104
-
3105
- return;
3106
- }
3107
-
3108
- this.current(function (currentData) {
3109
- var val = [];
3110
-
3111
- for (var d = 0; d < currentData.length; d++) {
3112
- var id = currentData[d].id;
3113
-
3114
- if (id !== data.id && $.inArray(id, val) === -1) {
3115
- val.push(id);
3116
- }
3117
- }
3118
-
3119
- self.$element.val(val);
3120
-
3121
- self.$element.trigger('change');
3122
- });
3123
- };
3124
-
3125
- SelectAdapter.prototype.bind = function (container, $container) {
3126
- var self = this;
3127
-
3128
- this.container = container;
3129
-
3130
- container.on('select', function (params) {
3131
- self.select(params.data);
3132
- });
3133
-
3134
- container.on('unselect', function (params) {
3135
- self.unselect(params.data);
3136
- });
3137
- };
3138
-
3139
- SelectAdapter.prototype.destroy = function () {
3140
- // Remove anything added to child elements
3141
- this.$element.find('*').each(function () {
3142
- // Remove any custom data set by Select2
3143
- $.removeData(this, 'data');
3144
- });
3145
- };
3146
-
3147
- SelectAdapter.prototype.query = function (params, callback) {
3148
- var data = [];
3149
- var self = this;
3150
-
3151
- var $options = this.$element.children();
3152
-
3153
- $options.each(function () {
3154
- var $option = $(this);
3155
-
3156
- if (!$option.is('option') && !$option.is('optgroup')) {
3157
- return;
3158
- }
3159
-
3160
- var option = self.item($option);
3161
-
3162
- var matches = self.matches(params, option);
3163
-
3164
- if (matches !== null) {
3165
- data.push(matches);
3166
- }
3167
- });
3168
-
3169
- callback({
3170
- results: data
3171
- });
3172
- };
3173
-
3174
- SelectAdapter.prototype.addOptions = function ($options) {
3175
- Utils.appendMany(this.$element, $options);
3176
- };
3177
-
3178
- SelectAdapter.prototype.option = function (data) {
3179
- var option;
3180
-
3181
- if (data.children) {
3182
- option = document.createElement('optgroup');
3183
- option.label = data.text;
3184
- } else {
3185
- option = document.createElement('option');
3186
-
3187
- if (option.textContent !== undefined) {
3188
- option.textContent = data.text;
3189
- } else {
3190
- option.innerText = data.text;
3191
- }
3192
- }
3193
-
3194
- if (data.id) {
3195
- option.value = data.id;
3196
- }
3197
-
3198
- if (data.disabled) {
3199
- option.disabled = true;
3200
- }
3201
-
3202
- if (data.selected) {
3203
- option.selected = true;
3204
- }
3205
-
3206
- if (data.title) {
3207
- option.title = data.title;
3208
- }
3209
-
3210
- var $option = $(option);
3211
-
3212
- var normalizedData = this._normalizeItem(data);
3213
- normalizedData.element = option;
3214
-
3215
- // Override the option's data with the combined data
3216
- $.data(option, 'data', normalizedData);
3217
-
3218
- return $option;
3219
- };
3220
-
3221
- SelectAdapter.prototype.item = function ($option) {
3222
- var data = {};
3223
-
3224
- data = $.data($option[0], 'data');
3225
-
3226
- if (data != null) {
3227
- return data;
3228
- }
3229
-
3230
- if ($option.is('option')) {
3231
- data = {
3232
- id: $option.val(),
3233
- text: $option.text(),
3234
- disabled: $option.prop('disabled'),
3235
- selected: $option.prop('selected'),
3236
- title: $option.prop('title')
3237
- };
3238
- } else if ($option.is('optgroup')) {
3239
- data = {
3240
- text: $option.prop('label'),
3241
- children: [],
3242
- title: $option.prop('title')
3243
- };
3244
-
3245
- var $children = $option.children('option');
3246
- var children = [];
3247
-
3248
- for (var c = 0; c < $children.length; c++) {
3249
- var $child = $($children[c]);
3250
-
3251
- var child = this.item($child);
3252
-
3253
- children.push(child);
3254
- }
3255
-
3256
- data.children = children;
3257
- }
3258
-
3259
- data = this._normalizeItem(data);
3260
- data.element = $option[0];
3261
-
3262
- $.data($option[0], 'data', data);
3263
-
3264
- return data;
3265
- };
3266
-
3267
- SelectAdapter.prototype._normalizeItem = function (item) {
3268
- if (!$.isPlainObject(item)) {
3269
- item = {
3270
- id: item,
3271
- text: item
3272
- };
3273
- }
3274
-
3275
- item = $.extend({}, {
3276
- text: ''
3277
- }, item);
3278
-
3279
- var defaults = {
3280
- selected: false,
3281
- disabled: false
3282
- };
3283
-
3284
- if (item.id != null) {
3285
- item.id = item.id.toString();
3286
- }
3287
-
3288
- if (item.text != null) {
3289
- item.text = item.text.toString();
3290
- }
3291
-
3292
- if (item._resultId == null && item.id && this.container != null) {
3293
- item._resultId = this.generateResultId(this.container, item);
3294
- }
3295
-
3296
- return $.extend({}, defaults, item);
3297
- };
3298
-
3299
- SelectAdapter.prototype.matches = function (params, data) {
3300
- var matcher = this.options.get('matcher');
3301
-
3302
- return matcher(params, data);
3303
- };
3304
-
3305
- return SelectAdapter;
3306
- });
3307
-
3308
- S2.define('select2/data/array',[
3309
- './select',
3310
- '../utils',
3311
- 'jquery'
3312
- ], function (SelectAdapter, Utils, $) {
3313
- function ArrayAdapter ($element, options) {
3314
- var data = options.get('data') || [];
3315
-
3316
- ArrayAdapter.__super__.constructor.call(this, $element, options);
3317
-
3318
- this.addOptions(this.convertToOptions(data));
3319
- }
3320
-
3321
- Utils.Extend(ArrayAdapter, SelectAdapter);
3322
-
3323
- ArrayAdapter.prototype.select = function (data) {
3324
- var $option = this.$element.find('option').filter(function (i, elm) {
3325
- return elm.value == data.id.toString();
3326
- });
3327
-
3328
- if ($option.length === 0) {
3329
- $option = this.option(data);
3330
-
3331
- this.addOptions($option);
3332
- }
3333
-
3334
- ArrayAdapter.__super__.select.call(this, data);
3335
- };
3336
-
3337
- ArrayAdapter.prototype.convertToOptions = function (data) {
3338
- var self = this;
3339
-
3340
- var $existing = this.$element.find('option');
3341
- var existingIds = $existing.map(function () {
3342
- return self.item($(this)).id;
3343
- }).get();
3344
-
3345
- var $options = [];
3346
-
3347
- // Filter out all items except for the one passed in the argument
3348
- function onlyItem (item) {
3349
- return function () {
3350
- return $(this).val() == item.id;
3351
- };
3352
- }
3353
-
3354
- for (var d = 0; d < data.length; d++) {
3355
- var item = this._normalizeItem(data[d]);
3356
-
3357
- // Skip items which were pre-loaded, only merge the data
3358
- if ($.inArray(item.id, existingIds) >= 0) {
3359
- var $existingOption = $existing.filter(onlyItem(item));
3360
-
3361
- var existingData = this.item($existingOption);
3362
- var newData = $.extend(true, {}, item, existingData);
3363
-
3364
- var $newOption = this.option(newData);
3365
-
3366
- $existingOption.replaceWith($newOption);
3367
-
3368
- continue;
3369
- }
3370
-
3371
- var $option = this.option(item);
3372
-
3373
- if (item.children) {
3374
- var $children = this.convertToOptions(item.children);
3375
-
3376
- Utils.appendMany($option, $children);
3377
- }
3378
-
3379
- $options.push($option);
3380
- }
3381
-
3382
- return $options;
3383
- };
3384
-
3385
- return ArrayAdapter;
3386
- });
3387
-
3388
- S2.define('select2/data/ajax',[
3389
- './array',
3390
- '../utils',
3391
- 'jquery'
3392
- ], function (ArrayAdapter, Utils, $) {
3393
- function AjaxAdapter ($element, options) {
3394
- this.ajaxOptions = this._applyDefaults(options.get('ajax'));
3395
-
3396
- if (this.ajaxOptions.processResults != null) {
3397
- this.processResults = this.ajaxOptions.processResults;
3398
- }
3399
-
3400
- AjaxAdapter.__super__.constructor.call(this, $element, options);
3401
- }
3402
-
3403
- Utils.Extend(AjaxAdapter, ArrayAdapter);
3404
-
3405
- AjaxAdapter.prototype._applyDefaults = function (options) {
3406
- var defaults = {
3407
- data: function (params) {
3408
- return $.extend({}, params, {
3409
- q: params.term
3410
- });
3411
- },
3412
- transport: function (params, success, failure) {
3413
- var $request = $.ajax(params);
3414
-
3415
- $request.then(success);
3416
- $request.fail(failure);
3417
-
3418
- return $request;
3419
- }
3420
- };
3421
-
3422
- return $.extend({}, defaults, options, true);
3423
- };
3424
-
3425
- AjaxAdapter.prototype.processResults = function (results) {
3426
- return results;
3427
- };
3428
-
3429
- AjaxAdapter.prototype.query = function (params, callback) {
3430
- var matches = [];
3431
- var self = this;
3432
-
3433
- if (this._request != null) {
3434
- // JSONP requests cannot always be aborted
3435
- if ($.isFunction(this._request.abort)) {
3436
- this._request.abort();
3437
- }
3438
-
3439
- this._request = null;
3440
- }
3441
-
3442
- var options = $.extend({
3443
- type: 'GET'
3444
- }, this.ajaxOptions);
3445
-
3446
- if (typeof options.url === 'function') {
3447
- options.url = options.url.call(this.$element, params);
3448
- }
3449
-
3450
- if (typeof options.data === 'function') {
3451
- options.data = options.data.call(this.$element, params);
3452
- }
3453
-
3454
- function request () {
3455
- var $request = options.transport(options, function (data) {
3456
- var results = self.processResults(data, params);
3457
-
3458
- if (self.options.get('debug') && window.console && console.error) {
3459
- // Check to make sure that the response included a `results` key.
3460
- if (!results || !results.results || !$.isArray(results.results)) {
3461
- console.error(
3462
- 'Select2: The AJAX results did not return an array in the ' +
3463
- '`results` key of the response.'
3464
- );
3465
- }
3466
- }
3467
-
3468
- callback(results);
3469
- }, function () {
3470
- // Attempt to detect if a request was aborted
3471
- // Only works if the transport exposes a status property
3472
- if ($request.status && $request.status === '0') {
3473
- return;
3474
- }
3475
-
3476
- self.trigger('results:message', {
3477
- message: 'errorLoading'
3478
- });
3479
- });
3480
-
3481
- self._request = $request;
3482
- }
3483
-
3484
- if (this.ajaxOptions.delay && params.term != null) {
3485
- if (this._queryTimeout) {
3486
- window.clearTimeout(this._queryTimeout);
3487
- }
3488
-
3489
- this._queryTimeout = window.setTimeout(request, this.ajaxOptions.delay);
3490
- } else {
3491
- request();
3492
- }
3493
- };
3494
-
3495
- return AjaxAdapter;
3496
- });
3497
-
3498
- S2.define('select2/data/tags',[
3499
- 'jquery'
3500
- ], function ($) {
3501
- function Tags (decorated, $element, options) {
3502
- var tags = options.get('tags');
3503
-
3504
- var createTag = options.get('createTag');
3505
-
3506
- if (createTag !== undefined) {
3507
- this.createTag = createTag;
3508
- }
3509
-
3510
- var insertTag = options.get('insertTag');
3511
-
3512
- if (insertTag !== undefined) {
3513
- this.insertTag = insertTag;
3514
- }
3515
-
3516
- decorated.call(this, $element, options);
3517
-
3518
- if ($.isArray(tags)) {
3519
- for (var t = 0; t < tags.length; t++) {
3520
- var tag = tags[t];
3521
- var item = this._normalizeItem(tag);
3522
-
3523
- var $option = this.option(item);
3524
-
3525
- this.$element.append($option);
3526
- }
3527
- }
3528
- }
3529
-
3530
- Tags.prototype.query = function (decorated, params, callback) {
3531
- var self = this;
3532
-
3533
- this._removeOldTags();
3534
-
3535
- if (params.term == null || params.page != null) {
3536
- decorated.call(this, params, callback);
3537
- return;
3538
- }
3539
-
3540
- function wrapper (obj, child) {
3541
- var data = obj.results;
3542
-
3543
- for (var i = 0; i < data.length; i++) {
3544
- var option = data[i];
3545
-
3546
- var checkChildren = (
3547
- option.children != null &&
3548
- !wrapper({
3549
- results: option.children
3550
- }, true)
3551
- );
3552
-
3553
- var checkText = option.text === params.term;
3554
-
3555
- if (checkText || checkChildren) {
3556
- if (child) {
3557
- return false;
3558
- }
3559
-
3560
- obj.data = data;
3561
- callback(obj);
3562
-
3563
- return;
3564
- }
3565
- }
3566
-
3567
- if (child) {
3568
- return true;
3569
- }
3570
-
3571
- var tag = self.createTag(params);
3572
-
3573
- if (tag != null) {
3574
- var $option = self.option(tag);
3575
- $option.attr('data-select2-tag', true);
3576
-
3577
- self.addOptions([$option]);
3578
-
3579
- self.insertTag(data, tag);
3580
- }
3581
-
3582
- obj.results = data;
3583
-
3584
- callback(obj);
3585
- }
3586
-
3587
- decorated.call(this, params, wrapper);
3588
- };
3589
-
3590
- Tags.prototype.createTag = function (decorated, params) {
3591
- var term = $.trim(params.term);
3592
-
3593
- if (term === '') {
3594
- return null;
3595
- }
3596
-
3597
- return {
3598
- id: term,
3599
- text: term
3600
- };
3601
- };
3602
-
3603
- Tags.prototype.insertTag = function (_, data, tag) {
3604
- data.unshift(tag);
3605
- };
3606
-
3607
- Tags.prototype._removeOldTags = function (_) {
3608
- var tag = this._lastTag;
3609
-
3610
- var $options = this.$element.find('option[data-select2-tag]');
3611
-
3612
- $options.each(function () {
3613
- if (this.selected) {
3614
- return;
3615
- }
3616
-
3617
- $(this).remove();
3618
- });
3619
- };
3620
-
3621
- return Tags;
3622
- });
3623
-
3624
- S2.define('select2/data/tokenizer',[
3625
- 'jquery'
3626
- ], function ($) {
3627
- function Tokenizer (decorated, $element, options) {
3628
- var tokenizer = options.get('tokenizer');
3629
-
3630
- if (tokenizer !== undefined) {
3631
- this.tokenizer = tokenizer;
3632
- }
3633
-
3634
- decorated.call(this, $element, options);
3635
- }
3636
-
3637
- Tokenizer.prototype.bind = function (decorated, container, $container) {
3638
- decorated.call(this, container, $container);
3639
-
3640
- this.$search = container.dropdown.$search || container.selection.$search ||
3641
- $container.find('.select2-search__field');
3642
- };
3643
-
3644
- Tokenizer.prototype.query = function (decorated, params, callback) {
3645
- var self = this;
3646
-
3647
- function createAndSelect (data) {
3648
- // Normalize the data object so we can use it for checks
3649
- var item = self._normalizeItem(data);
3650
-
3651
- // Check if the data object already exists as a tag
3652
- // Select it if it doesn't
3653
- var $existingOptions = self.$element.find('option').filter(function () {
3654
- return $(this).val() === item.id;
3655
- });
3656
-
3657
- // If an existing option wasn't found for it, create the option
3658
- if (!$existingOptions.length) {
3659
- var $option = self.option(item);
3660
- $option.attr('data-select2-tag', true);
3661
-
3662
- self._removeOldTags();
3663
- self.addOptions([$option]);
3664
- }
3665
-
3666
- // Select the item, now that we know there is an option for it
3667
- select(item);
3668
- }
3669
-
3670
- function select (data) {
3671
- self.trigger('select', {
3672
- data: data
3673
- });
3674
- }
3675
-
3676
- params.term = params.term || '';
3677
-
3678
- var tokenData = this.tokenizer(params, this.options, createAndSelect);
3679
-
3680
- if (tokenData.term !== params.term) {
3681
- // Replace the search term if we have the search box
3682
- if (this.$search.length) {
3683
- this.$search.val(tokenData.term);
3684
- this.$search.focus();
3685
- }
3686
-
3687
- params.term = tokenData.term;
3688
- }
3689
-
3690
- decorated.call(this, params, callback);
3691
- };
3692
-
3693
- Tokenizer.prototype.tokenizer = function (_, params, options, callback) {
3694
- var separators = options.get('tokenSeparators') || [];
3695
- var term = params.term;
3696
- var i = 0;
3697
-
3698
- var createTag = this.createTag || function (params) {
3699
- return {
3700
- id: params.term,
3701
- text: params.term
3702
- };
3703
- };
3704
-
3705
- while (i < term.length) {
3706
- var termChar = term[i];
3707
-
3708
- if ($.inArray(termChar, separators) === -1) {
3709
- i++;
3710
-
3711
- continue;
3712
- }
3713
-
3714
- var part = term.substr(0, i);
3715
- var partParams = $.extend({}, params, {
3716
- term: part
3717
- });
3718
-
3719
- var data = createTag(partParams);
3720
-
3721
- if (data == null) {
3722
- i++;
3723
- continue;
3724
- }
3725
-
3726
- callback(data);
3727
-
3728
- // Reset the term to not include the tokenized portion
3729
- term = term.substr(i + 1) || '';
3730
- i = 0;
3731
- }
3732
-
3733
- return {
3734
- term: term
3735
- };
3736
- };
3737
-
3738
- return Tokenizer;
3739
- });
3740
-
3741
- S2.define('select2/data/minimumInputLength',[
3742
-
3743
- ], function () {
3744
- function MinimumInputLength (decorated, $e, options) {
3745
- this.minimumInputLength = options.get('minimumInputLength');
3746
-
3747
- decorated.call(this, $e, options);
3748
- }
3749
-
3750
- MinimumInputLength.prototype.query = function (decorated, params, callback) {
3751
- params.term = params.term || '';
3752
-
3753
- if (params.term.length < this.minimumInputLength) {
3754
- this.trigger('results:message', {
3755
- message: 'inputTooShort',
3756
- args: {
3757
- minimum: this.minimumInputLength,
3758
- input: params.term,
3759
- params: params
3760
- }
3761
- });
3762
-
3763
- return;
3764
- }
3765
-
3766
- decorated.call(this, params, callback);
3767
- };
3768
-
3769
- return MinimumInputLength;
3770
- });
3771
-
3772
- S2.define('select2/data/maximumInputLength',[
3773
-
3774
- ], function () {
3775
- function MaximumInputLength (decorated, $e, options) {
3776
- this.maximumInputLength = options.get('maximumInputLength');
3777
-
3778
- decorated.call(this, $e, options);
3779
- }
3780
-
3781
- MaximumInputLength.prototype.query = function (decorated, params, callback) {
3782
- params.term = params.term || '';
3783
-
3784
- if (this.maximumInputLength > 0 &&
3785
- params.term.length > this.maximumInputLength) {
3786
- this.trigger('results:message', {
3787
- message: 'inputTooLong',
3788
- args: {
3789
- maximum: this.maximumInputLength,
3790
- input: params.term,
3791
- params: params
3792
- }
3793
- });
3794
-
3795
- return;
3796
- }
3797
-
3798
- decorated.call(this, params, callback);
3799
- };
3800
-
3801
- return MaximumInputLength;
3802
- });
3803
-
3804
- S2.define('select2/data/maximumSelectionLength',[
3805
-
3806
- ], function (){
3807
- function MaximumSelectionLength (decorated, $e, options) {
3808
- this.maximumSelectionLength = options.get('maximumSelectionLength');
3809
-
3810
- decorated.call(this, $e, options);
3811
- }
3812
-
3813
- MaximumSelectionLength.prototype.query =
3814
- function (decorated, params, callback) {
3815
- var self = this;
3816
-
3817
- this.current(function (currentData) {
3818
- var count = currentData != null ? currentData.length : 0;
3819
- if (self.maximumSelectionLength > 0 &&
3820
- count >= self.maximumSelectionLength) {
3821
- self.trigger('results:message', {
3822
- message: 'maximumSelected',
3823
- args: {
3824
- maximum: self.maximumSelectionLength
3825
- }
3826
- });
3827
- return;
3828
- }
3829
- decorated.call(self, params, callback);
3830
- });
3831
- };
3832
-
3833
- return MaximumSelectionLength;
3834
- });
3835
-
3836
- S2.define('select2/dropdown',[
3837
- 'jquery',
3838
- './utils'
3839
- ], function ($, Utils) {
3840
- function Dropdown ($element, options) {
3841
- this.$element = $element;
3842
- this.options = options;
3843
-
3844
- Dropdown.__super__.constructor.call(this);
3845
- }
3846
-
3847
- Utils.Extend(Dropdown, Utils.Observable);
3848
-
3849
- Dropdown.prototype.render = function () {
3850
- var $dropdown = $(
3851
- '<span class="select2-dropdown">' +
3852
- '<span class="select2-results"></span>' +
3853
- '</span>'
3854
- );
3855
-
3856
- $dropdown.attr('dir', this.options.get('dir'));
3857
-
3858
- this.$dropdown = $dropdown;
3859
-
3860
- return $dropdown;
3861
- };
3862
-
3863
- Dropdown.prototype.bind = function () {
3864
- // Should be implemented in subclasses
3865
- };
3866
-
3867
- Dropdown.prototype.position = function ($dropdown, $container) {
3868
- // Should be implmented in subclasses
3869
- };
3870
-
3871
- Dropdown.prototype.destroy = function () {
3872
- // Remove the dropdown from the DOM
3873
- this.$dropdown.remove();
3874
- };
3875
-
3876
- return Dropdown;
3877
- });
3878
-
3879
- S2.define('select2/dropdown/search',[
3880
- 'jquery',
3881
- '../utils'
3882
- ], function ($, Utils) {
3883
- function Search () { }
3884
-
3885
- Search.prototype.render = function (decorated) {
3886
- var $rendered = decorated.call(this);
3887
-
3888
- var $search = $(
3889
- '<span class="select2-search select2-search--dropdown">' +
3890
- '<input class="select2-search__field" type="search" tabindex="-1"' +
3891
- ' autocomplete="off" autocorrect="off" autocapitalize="off"' +
3892
- ' spellcheck="false" role="textbox" />' +
3893
- '</span>'
3894
- );
3895
-
3896
- this.$searchContainer = $search;
3897
- this.$search = $search.find('input');
3898
-
3899
- $rendered.prepend($search);
3900
-
3901
- return $rendered;
3902
- };
3903
-
3904
- Search.prototype.bind = function (decorated, container, $container) {
3905
- var self = this;
3906
-
3907
- decorated.call(this, container, $container);
3908
-
3909
- this.$search.on('keydown', function (evt) {
3910
- self.trigger('keypress', evt);
3911
-
3912
- self._keyUpPrevented = evt.isDefaultPrevented();
3913
- });
3914
-
3915
- // Workaround for browsers which do not support the `input` event
3916
- // This will prevent double-triggering of events for browsers which support
3917
- // both the `keyup` and `input` events.
3918
- this.$search.on('input', function (evt) {
3919
- // Unbind the duplicated `keyup` event
3920
- $(this).off('keyup');
3921
- });
3922
-
3923
- this.$search.on('keyup input', function (evt) {
3924
- self.handleSearch(evt);
3925
- });
3926
-
3927
- container.on('open', function () {
3928
- self.$search.attr('tabindex', 0);
3929
-
3930
- self.$search.focus();
3931
-
3932
- window.setTimeout(function () {
3933
- self.$search.focus();
3934
- }, 0);
3935
- });
3936
-
3937
- container.on('close', function () {
3938
- self.$search.attr('tabindex', -1);
3939
-
3940
- self.$search.val('');
3941
- });
3942
-
3943
- container.on('focus', function () {
3944
- if (container.isOpen()) {
3945
- self.$search.focus();
3946
- }
3947
- });
3948
-
3949
- container.on('results:all', function (params) {
3950
- if (params.query.term == null || params.query.term === '') {
3951
- var showSearch = self.showSearch(params);
3952
-
3953
- if (showSearch) {
3954
- self.$searchContainer.removeClass('select2-search--hide');
3955
- } else {
3956
- self.$searchContainer.addClass('select2-search--hide');
3957
- }
3958
- }
3959
- });
3960
- };
3961
-
3962
- Search.prototype.handleSearch = function (evt) {
3963
- if (!this._keyUpPrevented) {
3964
- var input = this.$search.val();
3965
-
3966
- this.trigger('query', {
3967
- term: input
3968
- });
3969
- }
3970
-
3971
- this._keyUpPrevented = false;
3972
- };
3973
-
3974
- Search.prototype.showSearch = function (_, params) {
3975
- return true;
3976
- };
3977
-
3978
- return Search;
3979
- });
3980
-
3981
- S2.define('select2/dropdown/hidePlaceholder',[
3982
-
3983
- ], function () {
3984
- function HidePlaceholder (decorated, $element, options, dataAdapter) {
3985
- this.placeholder = this.normalizePlaceholder(options.get('placeholder'));
3986
-
3987
- decorated.call(this, $element, options, dataAdapter);
3988
- }
3989
-
3990
- HidePlaceholder.prototype.append = function (decorated, data) {
3991
- data.results = this.removePlaceholder(data.results);
3992
-
3993
- decorated.call(this, data);
3994
- };
3995
-
3996
- HidePlaceholder.prototype.normalizePlaceholder = function (_, placeholder) {
3997
- if (typeof placeholder === 'string') {
3998
- placeholder = {
3999
- id: '',
4000
- text: placeholder
4001
- };
4002
- }
4003
-
4004
- return placeholder;
4005
- };
4006
-
4007
- HidePlaceholder.prototype.removePlaceholder = function (_, data) {
4008
- var modifiedData = data.slice(0);
4009
-
4010
- for (var d = data.length - 1; d >= 0; d--) {
4011
- var item = data[d];
4012
-
4013
- if (this.placeholder.id === item.id) {
4014
- modifiedData.splice(d, 1);
4015
- }
4016
- }
4017
-
4018
- return modifiedData;
4019
- };
4020
-
4021
- return HidePlaceholder;
4022
- });
4023
-
4024
- S2.define('select2/dropdown/infiniteScroll',[
4025
- 'jquery'
4026
- ], function ($) {
4027
- function InfiniteScroll (decorated, $element, options, dataAdapter) {
4028
- this.lastParams = {};
4029
-
4030
- decorated.call(this, $element, options, dataAdapter);
4031
-
4032
- this.$loadingMore = this.createLoadingMore();
4033
- this.loading = false;
4034
- }
4035
-
4036
- InfiniteScroll.prototype.append = function (decorated, data) {
4037
- this.$loadingMore.remove();
4038
- this.loading = false;
4039
-
4040
- decorated.call(this, data);
4041
-
4042
- if (this.showLoadingMore(data)) {
4043
- this.$results.append(this.$loadingMore);
4044
- }
4045
- };
4046
-
4047
- InfiniteScroll.prototype.bind = function (decorated, container, $container) {
4048
- var self = this;
4049
-
4050
- decorated.call(this, container, $container);
4051
-
4052
- container.on('query', function (params) {
4053
- self.lastParams = params;
4054
- self.loading = true;
4055
- });
4056
-
4057
- container.on('query:append', function (params) {
4058
- self.lastParams = params;
4059
- self.loading = true;
4060
- });
4061
-
4062
- this.$results.on('scroll', function () {
4063
- var isLoadMoreVisible = $.contains(
4064
- document.documentElement,
4065
- self.$loadingMore[0]
4066
- );
4067
-
4068
- if (self.loading || !isLoadMoreVisible) {
4069
- return;
4070
- }
4071
-
4072
- var currentOffset = self.$results.offset().top +
4073
- self.$results.outerHeight(false);
4074
- var loadingMoreOffset = self.$loadingMore.offset().top +
4075
- self.$loadingMore.outerHeight(false);
4076
-
4077
- if (currentOffset + 50 >= loadingMoreOffset) {
4078
- self.loadMore();
4079
- }
4080
- });
4081
- };
4082
-
4083
- InfiniteScroll.prototype.loadMore = function () {
4084
- this.loading = true;
4085
-
4086
- var params = $.extend({}, {page: 1}, this.lastParams);
4087
-
4088
- params.page++;
4089
-
4090
- this.trigger('query:append', params);
4091
- };
4092
-
4093
- InfiniteScroll.prototype.showLoadingMore = function (_, data) {
4094
- return data.pagination && data.pagination.more;
4095
- };
4096
-
4097
- InfiniteScroll.prototype.createLoadingMore = function () {
4098
- var $option = $(
4099
- '<li ' +
4100
- 'class="select2-results__option select2-results__option--load-more"' +
4101
- 'role="treeitem" aria-disabled="true"></li>'
4102
- );
4103
-
4104
- var message = this.options.get('translations').get('loadingMore');
4105
-
4106
- $option.html(message(this.lastParams));
4107
-
4108
- return $option;
4109
- };
4110
-
4111
- return InfiniteScroll;
4112
- });
4113
-
4114
- S2.define('select2/dropdown/attachBody',[
4115
- 'jquery',
4116
- '../utils'
4117
- ], function ($, Utils) {
4118
- function AttachBody (decorated, $element, options) {
4119
- this.$dropdownParent = options.get('dropdownParent') || $(document.body);
4120
-
4121
- decorated.call(this, $element, options);
4122
- }
4123
-
4124
- AttachBody.prototype.bind = function (decorated, container, $container) {
4125
- var self = this;
4126
-
4127
- var setupResultsEvents = false;
4128
-
4129
- decorated.call(this, container, $container);
4130
-
4131
- container.on('open', function () {
4132
- self._showDropdown();
4133
- self._attachPositioningHandler(container);
4134
-
4135
- if (!setupResultsEvents) {
4136
- setupResultsEvents = true;
4137
-
4138
- container.on('results:all', function () {
4139
- self._positionDropdown();
4140
- self._resizeDropdown();
4141
- });
4142
-
4143
- container.on('results:append', function () {
4144
- self._positionDropdown();
4145
- self._resizeDropdown();
4146
- });
4147
- }
4148
- });
4149
-
4150
- container.on('close', function () {
4151
- self._hideDropdown();
4152
- self._detachPositioningHandler(container);
4153
- });
4154
-
4155
- this.$dropdownContainer.on('mousedown', function (evt) {
4156
- evt.stopPropagation();
4157
- });
4158
- };
4159
-
4160
- AttachBody.prototype.destroy = function (decorated) {
4161
- decorated.call(this);
4162
-
4163
- this.$dropdownContainer.remove();
4164
- };
4165
-
4166
- AttachBody.prototype.position = function (decorated, $dropdown, $container) {
4167
- // Clone all of the container classes
4168
- $dropdown.attr('class', $container.attr('class'));
4169
-
4170
- $dropdown.removeClass('select2');
4171
- $dropdown.addClass('select2-container--open');
4172
-
4173
- $dropdown.css({
4174
- position: 'absolute',
4175
- top: -999999
4176
- });
4177
-
4178
- this.$container = $container;
4179
- };
4180
-
4181
- AttachBody.prototype.render = function (decorated) {
4182
- var $container = $('<span></span>');
4183
-
4184
- var $dropdown = decorated.call(this);
4185
- $container.append($dropdown);
4186
-
4187
- this.$dropdownContainer = $container;
4188
-
4189
- return $container;
4190
- };
4191
-
4192
- AttachBody.prototype._hideDropdown = function (decorated) {
4193
- this.$dropdownContainer.detach();
4194
- };
4195
-
4196
- AttachBody.prototype._attachPositioningHandler =
4197
- function (decorated, container) {
4198
- var self = this;
4199
-
4200
- var scrollEvent = 'scroll.select2.' + container.id;
4201
- var resizeEvent = 'resize.select2.' + container.id;
4202
- var orientationEvent = 'orientationchange.select2.' + container.id;
4203
-
4204
- var $watchers = this.$container.parents().filter(Utils.hasScroll);
4205
- $watchers.each(function () {
4206
- $(this).data('select2-scroll-position', {
4207
- x: $(this).scrollLeft(),
4208
- y: $(this).scrollTop()
4209
- });
4210
- });
4211
-
4212
- $watchers.on(scrollEvent, function (ev) {
4213
- var position = $(this).data('select2-scroll-position');
4214
- $(this).scrollTop(position.y);
4215
- });
4216
-
4217
- $(window).on(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent,
4218
- function (e) {
4219
- self._positionDropdown();
4220
- self._resizeDropdown();
4221
- });
4222
- };
4223
-
4224
- AttachBody.prototype._detachPositioningHandler =
4225
- function (decorated, container) {
4226
- var scrollEvent = 'scroll.select2.' + container.id;
4227
- var resizeEvent = 'resize.select2.' + container.id;
4228
- var orientationEvent = 'orientationchange.select2.' + container.id;
4229
-
4230
- var $watchers = this.$container.parents().filter(Utils.hasScroll);
4231
- $watchers.off(scrollEvent);
4232
-
4233
- $(window).off(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent);
4234
- };
4235
-
4236
- AttachBody.prototype._positionDropdown = function () {
4237
- var $window = $(window);
4238
-
4239
- var isCurrentlyAbove = this.$dropdown.hasClass('select2-dropdown--above');
4240
- var isCurrentlyBelow = this.$dropdown.hasClass('select2-dropdown--below');
4241
-
4242
- var newDirection = null;
4243
-
4244
- var offset = this.$container.offset();
4245
-
4246
- offset.bottom = offset.top + this.$container.outerHeight(false);
4247
-
4248
- var container = {
4249
- height: this.$container.outerHeight(false)
4250
- };
4251
-
4252
- container.top = offset.top;
4253
- container.bottom = offset.top + container.height;
4254
-
4255
- var dropdown = {
4256
- height: this.$dropdown.outerHeight(false)
4257
- };
4258
-
4259
- var viewport = {
4260
- top: $window.scrollTop(),
4261
- bottom: $window.scrollTop() + $window.height()
4262
- };
4263
-
4264
- var enoughRoomAbove = viewport.top < (offset.top - dropdown.height);
4265
- var enoughRoomBelow = viewport.bottom > (offset.bottom + dropdown.height);
4266
-
4267
- var css = {
4268
- left: offset.left,
4269
- top: container.bottom
4270
- };
4271
-
4272
- // Determine what the parent element is to use for calciulating the offset
4273
- var $offsetParent = this.$dropdownParent;
4274
-
4275
- // For statically positoned elements, we need to get the element
4276
- // that is determining the offset
4277
- if ($offsetParent.css('position') === 'static') {
4278
- $offsetParent = $offsetParent.offsetParent();
4279
- }
4280
-
4281
- var parentOffset = $offsetParent.offset();
4282
-
4283
- css.top -= parentOffset.top;
4284
- css.left -= parentOffset.left;
4285
-
4286
- if (!isCurrentlyAbove && !isCurrentlyBelow) {
4287
- newDirection = 'below';
4288
- }
4289
-
4290
- if (!enoughRoomBelow && enoughRoomAbove && !isCurrentlyAbove) {
4291
- newDirection = 'above';
4292
- } else if (!enoughRoomAbove && enoughRoomBelow && isCurrentlyAbove) {
4293
- newDirection = 'below';
4294
- }
4295
-
4296
- if (newDirection == 'above' ||
4297
- (isCurrentlyAbove && newDirection !== 'below')) {
4298
- css.top = container.top - parentOffset.top - dropdown.height;
4299
- }
4300
-
4301
- if (newDirection != null) {
4302
- this.$dropdown
4303
- .removeClass('select2-dropdown--below select2-dropdown--above')
4304
- .addClass('select2-dropdown--' + newDirection);
4305
- this.$container
4306
- .removeClass('select2-container--below select2-container--above')
4307
- .addClass('select2-container--' + newDirection);
4308
- }
4309
-
4310
- this.$dropdownContainer.css(css);
4311
- };
4312
-
4313
- AttachBody.prototype._resizeDropdown = function () {
4314
- var css = {
4315
- width: this.$container.outerWidth(false) + 'px'
4316
- };
4317
-
4318
- if (this.options.get('dropdownAutoWidth')) {
4319
- css.minWidth = css.width;
4320
- css.position = 'relative';
4321
- css.width = 'auto';
4322
- }
4323
-
4324
- this.$dropdown.css(css);
4325
- };
4326
-
4327
- AttachBody.prototype._showDropdown = function (decorated) {
4328
- this.$dropdownContainer.appendTo(this.$dropdownParent);
4329
-
4330
- this._positionDropdown();
4331
- this._resizeDropdown();
4332
- };
4333
-
4334
- return AttachBody;
4335
- });
4336
-
4337
- S2.define('select2/dropdown/minimumResultsForSearch',[
4338
-
4339
- ], function () {
4340
- function countResults (data) {
4341
- var count = 0;
4342
-
4343
- for (var d = 0; d < data.length; d++) {
4344
- var item = data[d];
4345
-
4346
- if (item.children) {
4347
- count += countResults(item.children);
4348
- } else {
4349
- count++;
4350
- }
4351
- }
4352
-
4353
- return count;
4354
- }
4355
-
4356
- function MinimumResultsForSearch (decorated, $element, options, dataAdapter) {
4357
- this.minimumResultsForSearch = options.get('minimumResultsForSearch');
4358
-
4359
- if (this.minimumResultsForSearch < 0) {
4360
- this.minimumResultsForSearch = Infinity;
4361
- }
4362
-
4363
- decorated.call(this, $element, options, dataAdapter);
4364
- }
4365
-
4366
- MinimumResultsForSearch.prototype.showSearch = function (decorated, params) {
4367
- if (countResults(params.data.results) < this.minimumResultsForSearch) {
4368
- return false;
4369
- }
4370
-
4371
- return decorated.call(this, params);
4372
- };
4373
-
4374
- return MinimumResultsForSearch;
4375
- });
4376
-
4377
- S2.define('select2/dropdown/selectOnClose',[
4378
-
4379
- ], function () {
4380
- function SelectOnClose () { }
4381
-
4382
- SelectOnClose.prototype.bind = function (decorated, container, $container) {
4383
- var self = this;
4384
-
4385
- decorated.call(this, container, $container);
4386
-
4387
- container.on('close', function (params) {
4388
- self._handleSelectOnClose(params);
4389
- });
4390
- };
4391
-
4392
- SelectOnClose.prototype._handleSelectOnClose = function (_, params) {
4393
- if (params && params.originalSelect2Event != null) {
4394
- var event = params.originalSelect2Event;
4395
-
4396
- // Don't select an item if the close event was triggered from a select or
4397
- // unselect event
4398
- if (event._type === 'select' || event._type === 'unselect') {
4399
- return;
4400
- }
4401
- }
4402
-
4403
- var $highlightedResults = this.getHighlightedResults();
4404
-
4405
- // Only select highlighted results
4406
- if ($highlightedResults.length < 1) {
4407
- return;
4408
- }
4409
-
4410
- var data = $highlightedResults.data('data');
4411
-
4412
- // Don't re-select already selected resulte
4413
- if (
4414
- (data.element != null && data.element.selected) ||
4415
- (data.element == null && data.selected)
4416
- ) {
4417
- return;
4418
- }
4419
-
4420
- this.trigger('select', {
4421
- data: data
4422
- });
4423
- };
4424
-
4425
- return SelectOnClose;
4426
- });
4427
-
4428
- S2.define('select2/dropdown/closeOnSelect',[
4429
-
4430
- ], function () {
4431
- function CloseOnSelect () { }
4432
-
4433
- CloseOnSelect.prototype.bind = function (decorated, container, $container) {
4434
- var self = this;
4435
-
4436
- decorated.call(this, container, $container);
4437
-
4438
- container.on('select', function (evt) {
4439
- self._selectTriggered(evt);
4440
- });
4441
-
4442
- container.on('unselect', function (evt) {
4443
- self._selectTriggered(evt);
4444
- });
4445
- };
4446
-
4447
- CloseOnSelect.prototype._selectTriggered = function (_, evt) {
4448
- var originalEvent = evt.originalEvent;
4449
-
4450
- // Don't close if the control key is being held
4451
- if (originalEvent && originalEvent.ctrlKey) {
4452
- return;
4453
- }
4454
-
4455
- this.trigger('close', {
4456
- originalEvent: originalEvent,
4457
- originalSelect2Event: evt
4458
- });
4459
- };
4460
-
4461
- return CloseOnSelect;
4462
- });
4463
-
4464
- S2.define('select2/i18n/en',[],function () {
4465
- // English
4466
- return {
4467
- errorLoading: function () {
4468
- return 'The results could not be loaded.';
4469
- },
4470
- inputTooLong: function (args) {
4471
- var overChars = args.input.length - args.maximum;
4472
-
4473
- var message = 'Please delete ' + overChars + ' character';
4474
-
4475
- if (overChars != 1) {
4476
- message += 's';
4477
- }
4478
-
4479
- return message;
4480
- },
4481
- inputTooShort: function (args) {
4482
- var remainingChars = args.minimum - args.input.length;
4483
-
4484
- var message = 'Please enter ' + remainingChars + ' or more characters';
4485
-
4486
- return message;
4487
- },
4488
- loadingMore: function () {
4489
- return 'Loading more results…';
4490
- },
4491
- maximumSelected: function (args) {
4492
- var message = 'You can only select ' + args.maximum + ' item';
4493
-
4494
- if (args.maximum != 1) {
4495
- message += 's';
4496
- }
4497
-
4498
- return message;
4499
- },
4500
- noResults: function () {
4501
- return 'No results found';
4502
- },
4503
- searching: function () {
4504
- return 'Searching…';
4505
- }
4506
- };
4507
- });
4508
-
4509
- S2.define('select2/defaults',[
4510
- 'jquery',
4511
- 'require',
4512
-
4513
- './results',
4514
-
4515
- './selection/single',
4516
- './selection/multiple',
4517
- './selection/placeholder',
4518
- './selection/allowClear',
4519
- './selection/search',
4520
- './selection/eventRelay',
4521
-
4522
- './utils',
4523
- './translation',
4524
- './diacritics',
4525
-
4526
- './data/select',
4527
- './data/array',
4528
- './data/ajax',
4529
- './data/tags',
4530
- './data/tokenizer',
4531
- './data/minimumInputLength',
4532
- './data/maximumInputLength',
4533
- './data/maximumSelectionLength',
4534
-
4535
- './dropdown',
4536
- './dropdown/search',
4537
- './dropdown/hidePlaceholder',
4538
- './dropdown/infiniteScroll',
4539
- './dropdown/attachBody',
4540
- './dropdown/minimumResultsForSearch',
4541
- './dropdown/selectOnClose',
4542
- './dropdown/closeOnSelect',
4543
-
4544
- './i18n/en'
4545
- ], function ($, require,
4546
-
4547
- ResultsList,
4548
-
4549
- SingleSelection, MultipleSelection, Placeholder, AllowClear,
4550
- SelectionSearch, EventRelay,
4551
-
4552
- Utils, Translation, DIACRITICS,
4553
-
4554
- SelectData, ArrayData, AjaxData, Tags, Tokenizer,
4555
- MinimumInputLength, MaximumInputLength, MaximumSelectionLength,
4556
-
4557
- Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll,
4558
- AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect,
4559
-
4560
- EnglishTranslation) {
4561
- function Defaults () {
4562
- this.reset();
4563
- }
4564
-
4565
- Defaults.prototype.apply = function (options) {
4566
- options = $.extend(true, {}, this.defaults, options);
4567
-
4568
- if (options.dataAdapter == null) {
4569
- if (options.ajax != null) {
4570
- options.dataAdapter = AjaxData;
4571
- } else if (options.data != null) {
4572
- options.dataAdapter = ArrayData;
4573
- } else {
4574
- options.dataAdapter = SelectData;
4575
- }
4576
-
4577
- if (options.minimumInputLength > 0) {
4578
- options.dataAdapter = Utils.Decorate(
4579
- options.dataAdapter,
4580
- MinimumInputLength
4581
- );
4582
- }
4583
-
4584
- if (options.maximumInputLength > 0) {
4585
- options.dataAdapter = Utils.Decorate(
4586
- options.dataAdapter,
4587
- MaximumInputLength
4588
- );
4589
- }
4590
-
4591
- if (options.maximumSelectionLength > 0) {
4592
- options.dataAdapter = Utils.Decorate(
4593
- options.dataAdapter,
4594
- MaximumSelectionLength
4595
- );
4596
- }
4597
-
4598
- if (options.tags) {
4599
- options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags);
4600
- }
4601
-
4602
- if (options.tokenSeparators != null || options.tokenizer != null) {
4603
- options.dataAdapter = Utils.Decorate(
4604
- options.dataAdapter,
4605
- Tokenizer
4606
- );
4607
- }
4608
-
4609
- if (options.query != null) {
4610
- var Query = require(options.amdBase + 'compat/query');
4611
-
4612
- options.dataAdapter = Utils.Decorate(
4613
- options.dataAdapter,
4614
- Query
4615
- );
4616
- }
4617
-
4618
- if (options.initSelection != null) {
4619
- var InitSelection = require(options.amdBase + 'compat/initSelection');
4620
-
4621
- options.dataAdapter = Utils.Decorate(
4622
- options.dataAdapter,
4623
- InitSelection
4624
- );
4625
- }
4626
- }
4627
-
4628
- if (options.resultsAdapter == null) {
4629
- options.resultsAdapter = ResultsList;
4630
-
4631
- if (options.ajax != null) {
4632
- options.resultsAdapter = Utils.Decorate(
4633
- options.resultsAdapter,
4634
- InfiniteScroll
4635
- );
4636
- }
4637
-
4638
- if (options.placeholder != null) {
4639
- options.resultsAdapter = Utils.Decorate(
4640
- options.resultsAdapter,
4641
- HidePlaceholder
4642
- );
4643
- }
4644
-
4645
- if (options.selectOnClose) {
4646
- options.resultsAdapter = Utils.Decorate(
4647
- options.resultsAdapter,
4648
- SelectOnClose
4649
- );
4650
- }
4651
- }
4652
-
4653
- if (options.dropdownAdapter == null) {
4654
- if (options.multiple) {
4655
- options.dropdownAdapter = Dropdown;
4656
- } else {
4657
- var SearchableDropdown = Utils.Decorate(Dropdown, DropdownSearch);
4658
-
4659
- options.dropdownAdapter = SearchableDropdown;
4660
- }
4661
-
4662
- if (options.minimumResultsForSearch !== 0) {
4663
- options.dropdownAdapter = Utils.Decorate(
4664
- options.dropdownAdapter,
4665
- MinimumResultsForSearch
4666
- );
4667
- }
4668
-
4669
- if (options.closeOnSelect) {
4670
- options.dropdownAdapter = Utils.Decorate(
4671
- options.dropdownAdapter,
4672
- CloseOnSelect
4673
- );
4674
- }
4675
-
4676
- if (
4677
- options.dropdownCssClass != null ||
4678
- options.dropdownCss != null ||
4679
- options.adaptDropdownCssClass != null
4680
- ) {
4681
- var DropdownCSS = require(options.amdBase + 'compat/dropdownCss');
4682
-
4683
- options.dropdownAdapter = Utils.Decorate(
4684
- options.dropdownAdapter,
4685
- DropdownCSS
4686
- );
4687
- }
4688
-
4689
- options.dropdownAdapter = Utils.Decorate(
4690
- options.dropdownAdapter,
4691
- AttachBody
4692
- );
4693
- }
4694
-
4695
- if (options.selectionAdapter == null) {
4696
- if (options.multiple) {
4697
- options.selectionAdapter = MultipleSelection;
4698
- } else {
4699
- options.selectionAdapter = SingleSelection;
4700
- }
4701
-
4702
- // Add the placeholder mixin if a placeholder was specified
4703
- if (options.placeholder != null) {
4704
- options.selectionAdapter = Utils.Decorate(
4705
- options.selectionAdapter,
4706
- Placeholder
4707
- );
4708
- }
4709
-
4710
- if (options.allowClear) {
4711
- options.selectionAdapter = Utils.Decorate(
4712
- options.selectionAdapter,
4713
- AllowClear
4714
- );
4715
- }
4716
-
4717
- if (options.multiple) {
4718
- options.selectionAdapter = Utils.Decorate(
4719
- options.selectionAdapter,
4720
- SelectionSearch
4721
- );
4722
- }
4723
-
4724
- if (
4725
- options.containerCssClass != null ||
4726
- options.containerCss != null ||
4727
- options.adaptContainerCssClass != null
4728
- ) {
4729
- var ContainerCSS = require(options.amdBase + 'compat/containerCss');
4730
-
4731
- options.selectionAdapter = Utils.Decorate(
4732
- options.selectionAdapter,
4733
- ContainerCSS
4734
- );
4735
- }
4736
-
4737
- options.selectionAdapter = Utils.Decorate(
4738
- options.selectionAdapter,
4739
- EventRelay
4740
- );
4741
- }
4742
-
4743
- if (typeof options.language === 'string') {
4744
- // Check if the language is specified with a region
4745
- if (options.language.indexOf('-') > 0) {
4746
- // Extract the region information if it is included
4747
- var languageParts = options.language.split('-');
4748
- var baseLanguage = languageParts[0];
4749
-
4750
- options.language = [options.language, baseLanguage];
4751
- } else {
4752
- options.language = [options.language];
4753
- }
4754
- }
4755
-
4756
- if ($.isArray(options.language)) {
4757
- var languages = new Translation();
4758
- options.language.push('en');
4759
-
4760
- var languageNames = options.language;
4761
-
4762
- for (var l = 0; l < languageNames.length; l++) {
4763
- var name = languageNames[l];
4764
- var language = {};
4765
-
4766
- try {
4767
- // Try to load it with the original name
4768
- language = Translation.loadPath(name);
4769
- } catch (e) {
4770
- try {
4771
- // If we couldn't load it, check if it wasn't the full path
4772
- name = this.defaults.amdLanguageBase + name;
4773
- language = Translation.loadPath(name);
4774
- } catch (ex) {
4775
- // The translation could not be loaded at all. Sometimes this is
4776
- // because of a configuration problem, other times this can be
4777
- // because of how Select2 helps load all possible translation files.
4778
- if (options.debug && window.console && console.warn) {
4779
- console.warn(
4780
- 'Select2: The language file for "' + name + '" could not be ' +
4781
- 'automatically loaded. A fallback will be used instead.'
4782
- );
4783
- }
4784
-
4785
- continue;
4786
- }
4787
- }
4788
-
4789
- languages.extend(language);
4790
- }
4791
-
4792
- options.translations = languages;
4793
- } else {
4794
- var baseTranslation = Translation.loadPath(
4795
- this.defaults.amdLanguageBase + 'en'
4796
- );
4797
- var customTranslation = new Translation(options.language);
4798
-
4799
- customTranslation.extend(baseTranslation);
4800
-
4801
- options.translations = customTranslation;
4802
- }
4803
-
4804
- return options;
4805
- };
4806
-
4807
- Defaults.prototype.reset = function () {
4808
- function stripDiacritics (text) {
4809
- // Used 'uni range + named function' from http://jsperf.com/diacritics/18
4810
- function match(a) {
4811
- return DIACRITICS[a] || a;
4812
- }
4813
-
4814
- return text.replace(/[^\u0000-\u007E]/g, match);
4815
- }
4816
-
4817
- function matcher (params, data) {
4818
- // Always return the object if there is nothing to compare
4819
- if ($.trim(params.term) === '') {
4820
- return data;
4821
- }
4822
-
4823
- // Do a recursive check for options with children
4824
- if (data.children && data.children.length > 0) {
4825
- // Clone the data object if there are children
4826
- // This is required as we modify the object to remove any non-matches
4827
- var match = $.extend(true, {}, data);
4828
-
4829
- // Check each child of the option
4830
- for (var c = data.children.length - 1; c >= 0; c--) {
4831
- var child = data.children[c];
4832
-
4833
- var matches = matcher(params, child);
4834
-
4835
- // If there wasn't a match, remove the object in the array
4836
- if (matches == null) {
4837
- match.children.splice(c, 1);
4838
- }
4839
- }
4840
-
4841
- // If any children matched, return the new object
4842
- if (match.children.length > 0) {
4843
- return match;
4844
- }
4845
-
4846
- // If there were no matching children, check just the plain object
4847
- return matcher(params, match);
4848
- }
4849
-
4850
- var original = stripDiacritics(data.text).toUpperCase();
4851
- var term = stripDiacritics(params.term).toUpperCase();
4852
-
4853
- // Check if the text contains the term
4854
- if (original.indexOf(term) > -1) {
4855
- return data;
4856
- }
4857
-
4858
- // If it doesn't contain the term, don't return anything
4859
- return null;
4860
- }
4861
-
4862
- this.defaults = {
4863
- amdBase: './',
4864
- amdLanguageBase: './i18n/',
4865
- closeOnSelect: true,
4866
- debug: false,
4867
- dropdownAutoWidth: false,
4868
- escapeMarkup: Utils.escapeMarkup,
4869
- language: EnglishTranslation,
4870
- matcher: matcher,
4871
- minimumInputLength: 0,
4872
- maximumInputLength: 0,
4873
- maximumSelectionLength: 0,
4874
- minimumResultsForSearch: 0,
4875
- selectOnClose: false,
4876
- sorter: function (data) {
4877
- return data;
4878
- },
4879
- templateResult: function (result) {
4880
- return result.text;
4881
- },
4882
- templateSelection: function (selection) {
4883
- return selection.text;
4884
- },
4885
- theme: 'default',
4886
- width: 'resolve'
4887
- };
4888
- };
4889
-
4890
- Defaults.prototype.set = function (key, value) {
4891
- var camelKey = $.camelCase(key);
4892
-
4893
- var data = {};
4894
- data[camelKey] = value;
4895
-
4896
- var convertedData = Utils._convertData(data);
4897
-
4898
- $.extend(this.defaults, convertedData);
4899
- };
4900
-
4901
- var defaults = new Defaults();
4902
-
4903
- return defaults;
4904
- });
4905
-
4906
- S2.define('select2/options',[
4907
- 'require',
4908
- 'jquery',
4909
- './defaults',
4910
- './utils'
4911
- ], function (require, $, Defaults, Utils) {
4912
- function Options (options, $element) {
4913
- this.options = options;
4914
-
4915
- if ($element != null) {
4916
- this.fromElement($element);
4917
- }
4918
-
4919
- this.options = Defaults.apply(this.options);
4920
-
4921
- if ($element && $element.is('input')) {
4922
- var InputCompat = require(this.get('amdBase') + 'compat/inputData');
4923
-
4924
- this.options.dataAdapter = Utils.Decorate(
4925
- this.options.dataAdapter,
4926
- InputCompat
4927
- );
4928
- }
4929
- }
4930
-
4931
- Options.prototype.fromElement = function ($e) {
4932
- var excludedData = ['select2'];
4933
-
4934
- if (this.options.multiple == null) {
4935
- this.options.multiple = $e.prop('multiple');
4936
- }
4937
-
4938
- if (this.options.disabled == null) {
4939
- this.options.disabled = $e.prop('disabled');
4940
- }
4941
-
4942
- if (this.options.language == null) {
4943
- if ($e.prop('lang')) {
4944
- this.options.language = $e.prop('lang').toLowerCase();
4945
- } else if ($e.closest('[lang]').prop('lang')) {
4946
- this.options.language = $e.closest('[lang]').prop('lang');
4947
- }
4948
- }
4949
-
4950
- if (this.options.dir == null) {
4951
- if ($e.prop('dir')) {
4952
- this.options.dir = $e.prop('dir');
4953
- } else if ($e.closest('[dir]').prop('dir')) {
4954
- this.options.dir = $e.closest('[dir]').prop('dir');
4955
- } else {
4956
- this.options.dir = 'ltr';
4957
- }
4958
- }
4959
-
4960
- $e.prop('disabled', this.options.disabled);
4961
- $e.prop('multiple', this.options.multiple);
4962
-
4963
- if ($e.data('select2Tags')) {
4964
- if (this.options.debug && window.console && console.warn) {
4965
- console.warn(
4966
- 'Select2: The `data-select2-tags` attribute has been changed to ' +
4967
- 'use the `data-data` and `data-tags="true"` attributes and will be ' +
4968
- 'removed in future versions of Select2.'
4969
- );
4970
- }
4971
-
4972
- $e.data('data', $e.data('select2Tags'));
4973
- $e.data('tags', true);
4974
- }
4975
-
4976
- if ($e.data('ajaxUrl')) {
4977
- if (this.options.debug && window.console && console.warn) {
4978
- console.warn(
4979
- 'Select2: The `data-ajax-url` attribute has been changed to ' +
4980
- '`data-ajax--url` and support for the old attribute will be removed' +
4981
- ' in future versions of Select2.'
4982
- );
4983
- }
4984
-
4985
- $e.attr('ajax--url', $e.data('ajaxUrl'));
4986
- $e.data('ajax--url', $e.data('ajaxUrl'));
4987
- }
4988
-
4989
- var dataset = {};
4990
-
4991
- // Prefer the element's `dataset` attribute if it exists
4992
- // jQuery 1.x does not correctly handle data attributes with multiple dashes
4993
- if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) {
4994
- dataset = $.extend(true, {}, $e[0].dataset, $e.data());
4995
- } else {
4996
- dataset = $e.data();
4997
- }
4998
-
4999
- var data = $.extend(true, {}, dataset);
5000
-
5001
- data = Utils._convertData(data);
5002
-
5003
- for (var key in data) {
5004
- if ($.inArray(key, excludedData) > -1) {
5005
- continue;
5006
- }
5007
-
5008
- if ($.isPlainObject(this.options[key])) {
5009
- $.extend(this.options[key], data[key]);
5010
- } else {
5011
- this.options[key] = data[key];
5012
- }
5013
- }
5014
-
5015
- return this;
5016
- };
5017
-
5018
- Options.prototype.get = function (key) {
5019
- return this.options[key];
5020
- };
5021
-
5022
- Options.prototype.set = function (key, val) {
5023
- this.options[key] = val;
5024
- };
5025
-
5026
- return Options;
5027
- });
5028
-
5029
- S2.define('select2/core',[
5030
- 'jquery',
5031
- './options',
5032
- './utils',
5033
- './keys'
5034
- ], function ($, Options, Utils, KEYS) {
5035
- var Select2 = function ($element, options) {
5036
- if ($element.data('select2') != null) {
5037
- $element.data('select2').destroy();
5038
- }
5039
-
5040
- this.$element = $element;
5041
-
5042
- this.id = this._generateId($element);
5043
-
5044
- options = options || {};
5045
-
5046
- this.options = new Options(options, $element);
5047
-
5048
- Select2.__super__.constructor.call(this);
5049
-
5050
- // Set up the tabindex
5051
-
5052
- var tabindex = $element.attr('tabindex') || 0;
5053
- $element.data('old-tabindex', tabindex);
5054
- $element.attr('tabindex', '-1');
5055
-
5056
- // Set up containers and adapters
5057
-
5058
- var DataAdapter = this.options.get('dataAdapter');
5059
- this.dataAdapter = new DataAdapter($element, this.options);
5060
-
5061
- var $container = this.render();
5062
-
5063
- this._placeContainer($container);
5064
-
5065
- var SelectionAdapter = this.options.get('selectionAdapter');
5066
- this.selection = new SelectionAdapter($element, this.options);
5067
- this.$selection = this.selection.render();
5068
-
5069
- this.selection.position(this.$selection, $container);
5070
-
5071
- var DropdownAdapter = this.options.get('dropdownAdapter');
5072
- this.dropdown = new DropdownAdapter($element, this.options);
5073
- this.$dropdown = this.dropdown.render();
5074
-
5075
- this.dropdown.position(this.$dropdown, $container);
5076
-
5077
- var ResultsAdapter = this.options.get('resultsAdapter');
5078
- this.results = new ResultsAdapter($element, this.options, this.dataAdapter);
5079
- this.$results = this.results.render();
5080
-
5081
- this.results.position(this.$results, this.$dropdown);
5082
-
5083
- // Bind events
5084
-
5085
- var self = this;
5086
-
5087
- // Bind the container to all of the adapters
5088
- this._bindAdapters();
5089
-
5090
- // Register any DOM event handlers
5091
- this._registerDomEvents();
5092
-
5093
- // Register any internal event handlers
5094
- this._registerDataEvents();
5095
- this._registerSelectionEvents();
5096
- this._registerDropdownEvents();
5097
- this._registerResultsEvents();
5098
- this._registerEvents();
5099
-
5100
- // Set the initial state
5101
- this.dataAdapter.current(function (initialData) {
5102
- self.trigger('selection:update', {
5103
- data: initialData
5104
- });
5105
- });
5106
-
5107
- // Hide the original select
5108
- $element.addClass('select2-hidden-accessible');
5109
- $element.attr('aria-hidden', 'true');
5110
-
5111
- // Synchronize any monitored attributes
5112
- this._syncAttributes();
5113
-
5114
- $element.data('select2', this);
5115
- };
5116
-
5117
- Utils.Extend(Select2, Utils.Observable);
5118
-
5119
- Select2.prototype._generateId = function ($element) {
5120
- var id = '';
5121
-
5122
- if ($element.attr('id') != null) {
5123
- id = $element.attr('id');
5124
- } else if ($element.attr('name') != null) {
5125
- id = $element.attr('name') + '-' + Utils.generateChars(2);
5126
- } else {
5127
- id = Utils.generateChars(4);
5128
- }
5129
-
5130
- id = id.replace(/(:|\.|\[|\]|,)/g, '');
5131
- id = 'select2-' + id;
5132
-
5133
- return id;
5134
- };
5135
-
5136
- Select2.prototype._placeContainer = function ($container) {
5137
- $container.insertAfter(this.$element);
5138
-
5139
- var width = this._resolveWidth(this.$element, this.options.get('width'));
5140
-
5141
- if (width != null) {
5142
- $container.css('width', width);
5143
- }
5144
- };
5145
-
5146
- Select2.prototype._resolveWidth = function ($element, method) {
5147
- var WIDTH = /^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;
5148
-
5149
- if (method == 'resolve') {
5150
- var styleWidth = this._resolveWidth($element, 'style');
5151
-
5152
- if (styleWidth != null) {
5153
- return styleWidth;
5154
- }
5155
-
5156
- return this._resolveWidth($element, 'element');
5157
- }
5158
-
5159
- if (method == 'element') {
5160
- var elementWidth = $element.outerWidth(false);
5161
-
5162
- if (elementWidth <= 0) {
5163
- return 'auto';
5164
- }
5165
-
5166
- return elementWidth + 'px';
5167
- }
5168
-
5169
- if (method == 'style') {
5170
- var style = $element.attr('style');
5171
-
5172
- if (typeof(style) !== 'string') {
5173
- return null;
5174
- }
5175
-
5176
- var attrs = style.split(';');
5177
-
5178
- for (var i = 0, l = attrs.length; i < l; i = i + 1) {
5179
- var attr = attrs[i].replace(/\s/g, '');
5180
- var matches = attr.match(WIDTH);
5181
-
5182
- if (matches !== null && matches.length >= 1) {
5183
- return matches[1];
5184
- }
5185
- }
5186
-
5187
- return null;
5188
- }
5189
-
5190
- return method;
5191
- };
5192
-
5193
- Select2.prototype._bindAdapters = function () {
5194
- this.dataAdapter.bind(this, this.$container);
5195
- this.selection.bind(this, this.$container);
5196
-
5197
- this.dropdown.bind(this, this.$container);
5198
- this.results.bind(this, this.$container);
5199
- };
5200
-
5201
- Select2.prototype._registerDomEvents = function () {
5202
- var self = this;
5203
-
5204
- this.$element.on('change.select2', function () {
5205
- self.dataAdapter.current(function (data) {
5206
- self.trigger('selection:update', {
5207
- data: data
5208
- });
5209
- });
5210
- });
5211
-
5212
- this.$element.on('focus.select2', function (evt) {
5213
- self.trigger('focus', evt);
5214
- });
5215
-
5216
- this._syncA = Utils.bind(this._syncAttributes, this);
5217
- this._syncS = Utils.bind(this._syncSubtree, this);
5218
-
5219
- if (this.$element[0].attachEvent) {
5220
- this.$element[0].attachEvent('onpropertychange', this._syncA);
5221
- }
5222
-
5223
- var observer = window.MutationObserver ||
5224
- window.WebKitMutationObserver ||
5225
- window.MozMutationObserver
5226
- ;
5227
-
5228
- if (observer != null) {
5229
- this._observer = new observer(function (mutations) {
5230
- $.each(mutations, self._syncA);
5231
- $.each(mutations, self._syncS);
5232
- });
5233
- this._observer.observe(this.$element[0], {
5234
- attributes: true,
5235
- childList: true,
5236
- subtree: false
5237
- });
5238
- } else if (this.$element[0].addEventListener) {
5239
- this.$element[0].addEventListener(
5240
- 'DOMAttrModified',
5241
- self._syncA,
5242
- false
5243
- );
5244
- this.$element[0].addEventListener(
5245
- 'DOMNodeInserted',
5246
- self._syncS,
5247
- false
5248
- );
5249
- this.$element[0].addEventListener(
5250
- 'DOMNodeRemoved',
5251
- self._syncS,
5252
- false
5253
- );
5254
- }
5255
- };
5256
-
5257
- Select2.prototype._registerDataEvents = function () {
5258
- var self = this;
5259
-
5260
- this.dataAdapter.on('*', function (name, params) {
5261
- self.trigger(name, params);
5262
- });
5263
- };
5264
-
5265
- Select2.prototype._registerSelectionEvents = function () {
5266
- var self = this;
5267
- var nonRelayEvents = ['toggle', 'focus'];
5268
-
5269
- this.selection.on('toggle', function () {
5270
- self.toggleDropdown();
5271
- });
5272
-
5273
- this.selection.on('focus', function (params) {
5274
- self.focus(params);
5275
- });
5276
-
5277
- this.selection.on('*', function (name, params) {
5278
- if ($.inArray(name, nonRelayEvents) !== -1) {
5279
- return;
5280
- }
5281
-
5282
- self.trigger(name, params);
5283
- });
5284
- };
5285
-
5286
- Select2.prototype._registerDropdownEvents = function () {
5287
- var self = this;
5288
-
5289
- this.dropdown.on('*', function (name, params) {
5290
- self.trigger(name, params);
5291
- });
5292
- };
5293
-
5294
- Select2.prototype._registerResultsEvents = function () {
5295
- var self = this;
5296
-
5297
- this.results.on('*', function (name, params) {
5298
- self.trigger(name, params);
5299
- });
5300
- };
5301
-
5302
- Select2.prototype._registerEvents = function () {
5303
- var self = this;
5304
-
5305
- this.on('open', function () {
5306
- self.$container.addClass('select2-container--open');
5307
- });
5308
-
5309
- this.on('close', function () {
5310
- self.$container.removeClass('select2-container--open');
5311
- });
5312
-
5313
- this.on('enable', function () {
5314
- self.$container.removeClass('select2-container--disabled');
5315
- });
5316
-
5317
- this.on('disable', function () {
5318
- self.$container.addClass('select2-container--disabled');
5319
- });
5320
-
5321
- this.on('blur', function () {
5322
- self.$container.removeClass('select2-container--focus');
5323
- });
5324
-
5325
- this.on('query', function (params) {
5326
- if (!self.isOpen()) {
5327
- self.trigger('open', {});
5328
- }
5329
-
5330
- this.dataAdapter.query(params, function (data) {
5331
- self.trigger('results:all', {
5332
- data: data,
5333
- query: params
5334
- });
5335
- });
5336
- });
5337
-
5338
- this.on('query:append', function (params) {
5339
- this.dataAdapter.query(params, function (data) {
5340
- self.trigger('results:append', {
5341
- data: data,
5342
- query: params
5343
- });
5344
- });
5345
- });
5346
-
5347
- this.on('keypress', function (evt) {
5348
- var key = evt.which;
5349
-
5350
- if (self.isOpen()) {
5351
- if (key === KEYS.ESC || key === KEYS.TAB ||
5352
- (key === KEYS.UP && evt.altKey)) {
5353
- self.close();
5354
-
5355
- evt.preventDefault();
5356
- } else if (key === KEYS.ENTER) {
5357
- self.trigger('results:select', {});
5358
-
5359
- evt.preventDefault();
5360
- } else if ((key === KEYS.SPACE && evt.ctrlKey)) {
5361
- self.trigger('results:toggle', {});
5362
-
5363
- evt.preventDefault();
5364
- } else if (key === KEYS.UP) {
5365
- self.trigger('results:previous', {});
5366
-
5367
- evt.preventDefault();
5368
- } else if (key === KEYS.DOWN) {
5369
- self.trigger('results:next', {});
5370
-
5371
- evt.preventDefault();
5372
- }
5373
- } else {
5374
- if (key === KEYS.ENTER || key === KEYS.SPACE ||
5375
- (key === KEYS.DOWN && evt.altKey)) {
5376
- self.open();
5377
-
5378
- evt.preventDefault();
5379
- }
5380
- }
5381
- });
5382
- };
5383
-
5384
- Select2.prototype._syncAttributes = function () {
5385
- this.options.set('disabled', this.$element.prop('disabled'));
5386
-
5387
- if (this.options.get('disabled')) {
5388
- if (this.isOpen()) {
5389
- this.close();
5390
- }
5391
-
5392
- this.trigger('disable', {});
5393
- } else {
5394
- this.trigger('enable', {});
5395
- }
5396
- };
5397
-
5398
- Select2.prototype._syncSubtree = function (evt, mutations) {
5399
- var changed = false;
5400
- var self = this;
5401
-
5402
- // Ignore any mutation events raised for elements that aren't options or
5403
- // optgroups. This handles the case when the select element is destroyed
5404
- if (
5405
- evt && evt.target && (
5406
- evt.target.nodeName !== 'OPTION' && evt.target.nodeName !== 'OPTGROUP'
5407
- )
5408
- ) {
5409
- return;
5410
- }
5411
-
5412
- if (!mutations) {
5413
- // If mutation events aren't supported, then we can only assume that the
5414
- // change affected the selections
5415
- changed = true;
5416
- } else if (mutations.addedNodes && mutations.addedNodes.length > 0) {
5417
- for (var n = 0; n < mutations.addedNodes.length; n++) {
5418
- var node = mutations.addedNodes[n];
5419
-
5420
- if (node.selected) {
5421
- changed = true;
5422
- }
5423
- }
5424
- } else if (mutations.removedNodes && mutations.removedNodes.length > 0) {
5425
- changed = true;
5426
- }
5427
-
5428
- // Only re-pull the data if we think there is a change
5429
- if (changed) {
5430
- this.dataAdapter.current(function (currentData) {
5431
- self.trigger('selection:update', {
5432
- data: currentData
5433
- });
5434
- });
5435
- }
5436
- };
5437
-
5438
- /**
5439
- * Override the trigger method to automatically trigger pre-events when
5440
- * there are events that can be prevented.
5441
- */
5442
- Select2.prototype.trigger = function (name, args) {
5443
- var actualTrigger = Select2.__super__.trigger;
5444
- var preTriggerMap = {
5445
- 'open': 'opening',
5446
- 'close': 'closing',
5447
- 'select': 'selecting',
5448
- 'unselect': 'unselecting'
5449
- };
5450
-
5451
- if (args === undefined) {
5452
- args = {};
5453
- }
5454
-
5455
- if (name in preTriggerMap) {
5456
- var preTriggerName = preTriggerMap[name];
5457
- var preTriggerArgs = {
5458
- prevented: false,
5459
- name: name,
5460
- args: args
5461
- };
5462
-
5463
- actualTrigger.call(this, preTriggerName, preTriggerArgs);
5464
-
5465
- if (preTriggerArgs.prevented) {
5466
- args.prevented = true;
5467
-
5468
- return;
5469
- }
5470
- }
5471
-
5472
- actualTrigger.call(this, name, args);
5473
- };
5474
-
5475
- Select2.prototype.toggleDropdown = function () {
5476
- if (this.options.get('disabled')) {
5477
- return;
5478
- }
5479
-
5480
- if (this.isOpen()) {
5481
- this.close();
5482
- } else {
5483
- this.open();
5484
- }
5485
- };
5486
-
5487
- Select2.prototype.open = function () {
5488
- if (this.isOpen()) {
5489
- return;
5490
- }
5491
-
5492
- this.trigger('query', {});
5493
- };
5494
-
5495
- Select2.prototype.close = function () {
5496
- if (!this.isOpen()) {
5497
- return;
5498
- }
5499
-
5500
- this.trigger('close', {});
5501
- };
5502
-
5503
- Select2.prototype.isOpen = function () {
5504
- return this.$container.hasClass('select2-container--open');
5505
- };
5506
-
5507
- Select2.prototype.hasFocus = function () {
5508
- return this.$container.hasClass('select2-container--focus');
5509
- };
5510
-
5511
- Select2.prototype.focus = function (data) {
5512
- // No need to re-trigger focus events if we are already focused
5513
- if (this.hasFocus()) {
5514
- return;
5515
- }
5516
-
5517
- this.$container.addClass('select2-container--focus');
5518
- this.trigger('focus', {});
5519
- };
5520
-
5521
- Select2.prototype.enable = function (args) {
5522
- if (this.options.get('debug') && window.console && console.warn) {
5523
- console.warn(
5524
- 'Select2: The `select2("enable")` method has been deprecated and will' +
5525
- ' be removed in later Select2 versions. Use $element.prop("disabled")' +
5526
- ' instead.'
5527
- );
5528
- }
5529
-
5530
- if (args == null || args.length === 0) {
5531
- args = [true];
5532
- }
5533
-
5534
- var disabled = !args[0];
5535
-
5536
- this.$element.prop('disabled', disabled);
5537
- };
5538
-
5539
- Select2.prototype.data = function () {
5540
- if (this.options.get('debug') &&
5541
- arguments.length > 0 && window.console && console.warn) {
5542
- console.warn(
5543
- 'Select2: Data can no longer be set using `select2("data")`. You ' +
5544
- 'should consider setting the value instead using `$element.val()`.'
5545
- );
5546
- }
5547
-
5548
- var data = [];
5549
-
5550
- this.dataAdapter.current(function (currentData) {
5551
- data = currentData;
5552
- });
5553
-
5554
- return data;
5555
- };
5556
-
5557
- Select2.prototype.val = function (args) {
5558
- if (this.options.get('debug') && window.console && console.warn) {
5559
- console.warn(
5560
- 'Select2: The `select2("val")` method has been deprecated and will be' +
5561
- ' removed in later Select2 versions. Use $element.val() instead.'
5562
- );
5563
- }
5564
-
5565
- if (args == null || args.length === 0) {
5566
- return this.$element.val();
5567
- }
5568
-
5569
- var newVal = args[0];
5570
-
5571
- if ($.isArray(newVal)) {
5572
- newVal = $.map(newVal, function (obj) {
5573
- return obj.toString();
5574
- });
5575
- }
5576
-
5577
- this.$element.val(newVal).trigger('change');
5578
- };
5579
-
5580
- Select2.prototype.destroy = function () {
5581
- this.$container.remove();
5582
-
5583
- if (this.$element[0].detachEvent) {
5584
- this.$element[0].detachEvent('onpropertychange', this._syncA);
5585
- }
5586
-
5587
- if (this._observer != null) {
5588
- this._observer.disconnect();
5589
- this._observer = null;
5590
- } else if (this.$element[0].removeEventListener) {
5591
- this.$element[0]
5592
- .removeEventListener('DOMAttrModified', this._syncA, false);
5593
- this.$element[0]
5594
- .removeEventListener('DOMNodeInserted', this._syncS, false);
5595
- this.$element[0]
5596
- .removeEventListener('DOMNodeRemoved', this._syncS, false);
5597
- }
5598
-
5599
- this._syncA = null;
5600
- this._syncS = null;
5601
-
5602
- this.$element.off('.select2');
5603
- this.$element.attr('tabindex', this.$element.data('old-tabindex'));
5604
-
5605
- this.$element.removeClass('select2-hidden-accessible');
5606
- this.$element.attr('aria-hidden', 'false');
5607
- this.$element.removeData('select2');
5608
-
5609
- this.dataAdapter.destroy();
5610
- this.selection.destroy();
5611
- this.dropdown.destroy();
5612
- this.results.destroy();
5613
-
5614
- this.dataAdapter = null;
5615
- this.selection = null;
5616
- this.dropdown = null;
5617
- this.results = null;
5618
- };
5619
-
5620
- Select2.prototype.render = function () {
5621
- var $container = $(
5622
- '<span class="select2 select2-container">' +
5623
- '<span class="selection"></span>' +
5624
- '<span class="dropdown-wrapper" aria-hidden="true"></span>' +
5625
- '</span>'
5626
- );
5627
-
5628
- $container.attr('dir', this.options.get('dir'));
5629
-
5630
- this.$container = $container;
5631
-
5632
- this.$container.addClass('select2-container--' + this.options.get('theme'));
5633
-
5634
- $container.data('element', this.$element);
5635
-
5636
- return $container;
5637
- };
5638
-
5639
- return Select2;
5640
- });
5641
-
5642
- S2.define('select2/compat/utils',[
5643
- 'jquery'
5644
- ], function ($) {
5645
- function syncCssClasses ($dest, $src, adapter) {
5646
- var classes, replacements = [], adapted;
5647
-
5648
- classes = $.trim($dest.attr('class'));
5649
-
5650
- if (classes) {
5651
- classes = '' + classes; // for IE which returns object
5652
-
5653
- $(classes.split(/\s+/)).each(function () {
5654
- // Save all Select2 classes
5655
- if (this.indexOf('select2-') === 0) {
5656
- replacements.push(this);
5657
- }
5658
- });
5659
- }
5660
-
5661
- classes = $.trim($src.attr('class'));
5662
-
5663
- if (classes) {
5664
- classes = '' + classes; // for IE which returns object
5665
-
5666
- $(classes.split(/\s+/)).each(function () {
5667
- // Only adapt non-Select2 classes
5668
- if (this.indexOf('select2-') !== 0) {
5669
- adapted = adapter(this);
5670
-
5671
- if (adapted != null) {
5672
- replacements.push(adapted);
5673
- }
5674
- }
5675
- });
5676
- }
5677
-
5678
- $dest.attr('class', replacements.join(' '));
5679
- }
5680
-
5681
- return {
5682
- syncCssClasses: syncCssClasses
5683
- };
5684
- });
5685
-
5686
- S2.define('select2/compat/containerCss',[
5687
- 'jquery',
5688
- './utils'
5689
- ], function ($, CompatUtils) {
5690
- // No-op CSS adapter that discards all classes by default
5691
- function _containerAdapter (clazz) {
5692
- return null;
5693
- }
5694
-
5695
- function ContainerCSS () { }
5696
-
5697
- ContainerCSS.prototype.render = function (decorated) {
5698
- var $container = decorated.call(this);
5699
-
5700
- var containerCssClass = this.options.get('containerCssClass') || '';
5701
-
5702
- if ($.isFunction(containerCssClass)) {
5703
- containerCssClass = containerCssClass(this.$element);
5704
- }
5705
-
5706
- var containerCssAdapter = this.options.get('adaptContainerCssClass');
5707
- containerCssAdapter = containerCssAdapter || _containerAdapter;
5708
-
5709
- if (containerCssClass.indexOf(':all:') !== -1) {
5710
- containerCssClass = containerCssClass.replace(':all:', '');
5711
-
5712
- var _cssAdapter = containerCssAdapter;
5713
-
5714
- containerCssAdapter = function (clazz) {
5715
- var adapted = _cssAdapter(clazz);
5716
-
5717
- if (adapted != null) {
5718
- // Append the old one along with the adapted one
5719
- return adapted + ' ' + clazz;
5720
- }
5721
-
5722
- return clazz;
5723
- };
5724
- }
5725
-
5726
- var containerCss = this.options.get('containerCss') || {};
5727
-
5728
- if ($.isFunction(containerCss)) {
5729
- containerCss = containerCss(this.$element);
5730
- }
5731
-
5732
- CompatUtils.syncCssClasses($container, this.$element, containerCssAdapter);
5733
-
5734
- $container.css(containerCss);
5735
- $container.addClass(containerCssClass);
5736
-
5737
- return $container;
5738
- };
5739
-
5740
- return ContainerCSS;
5741
- });
5742
-
5743
- S2.define('select2/compat/dropdownCss',[
5744
- 'jquery',
5745
- './utils'
5746
- ], function ($, CompatUtils) {
5747
- // No-op CSS adapter that discards all classes by default
5748
- function _dropdownAdapter (clazz) {
5749
- return null;
5750
- }
5751
-
5752
- function DropdownCSS () { }
5753
-
5754
- DropdownCSS.prototype.render = function (decorated) {
5755
- var $dropdown = decorated.call(this);
5756
-
5757
- var dropdownCssClass = this.options.get('dropdownCssClass') || '';
5758
-
5759
- if ($.isFunction(dropdownCssClass)) {
5760
- dropdownCssClass = dropdownCssClass(this.$element);
5761
- }
5762
-
5763
- var dropdownCssAdapter = this.options.get('adaptDropdownCssClass');
5764
- dropdownCssAdapter = dropdownCssAdapter || _dropdownAdapter;
5765
-
5766
- if (dropdownCssClass.indexOf(':all:') !== -1) {
5767
- dropdownCssClass = dropdownCssClass.replace(':all:', '');
5768
-
5769
- var _cssAdapter = dropdownCssAdapter;
5770
-
5771
- dropdownCssAdapter = function (clazz) {
5772
- var adapted = _cssAdapter(clazz);
5773
-
5774
- if (adapted != null) {
5775
- // Append the old one along with the adapted one
5776
- return adapted + ' ' + clazz;
5777
- }
5778
-
5779
- return clazz;
5780
- };
5781
- }
5782
-
5783
- var dropdownCss = this.options.get('dropdownCss') || {};
5784
-
5785
- if ($.isFunction(dropdownCss)) {
5786
- dropdownCss = dropdownCss(this.$element);
5787
- }
5788
-
5789
- CompatUtils.syncCssClasses($dropdown, this.$element, dropdownCssAdapter);
5790
-
5791
- $dropdown.css(dropdownCss);
5792
- $dropdown.addClass(dropdownCssClass);
5793
-
5794
- return $dropdown;
5795
- };
5796
-
5797
- return DropdownCSS;
5798
- });
5799
-
5800
- S2.define('select2/compat/initSelection',[
5801
- 'jquery'
5802
- ], function ($) {
5803
- function InitSelection (decorated, $element, options) {
5804
- if (options.get('debug') && window.console && console.warn) {
5805
- console.warn(
5806
- 'Select2: The `initSelection` option has been deprecated in favor' +
5807
- ' of a custom data adapter that overrides the `current` method. ' +
5808
- 'This method is now called multiple times instead of a single ' +
5809
- 'time when the instance is initialized. Support will be removed ' +
5810
- 'for the `initSelection` option in future versions of Select2'
5811
- );
5812
- }
5813
-
5814
- this.initSelection = options.get('initSelection');
5815
- this._isInitialized = false;
5816
-
5817
- decorated.call(this, $element, options);
5818
- }
5819
-
5820
- InitSelection.prototype.current = function (decorated, callback) {
5821
- var self = this;
5822
-
5823
- if (this._isInitialized) {
5824
- decorated.call(this, callback);
5825
-
5826
- return;
5827
- }
5828
-
5829
- this.initSelection.call(null, this.$element, function (data) {
5830
- self._isInitialized = true;
5831
-
5832
- if (!$.isArray(data)) {
5833
- data = [data];
5834
- }
5835
-
5836
- callback(data);
5837
- });
5838
- };
5839
-
5840
- return InitSelection;
5841
- });
5842
-
5843
- S2.define('select2/compat/inputData',[
5844
- 'jquery'
5845
- ], function ($) {
5846
- function InputData (decorated, $element, options) {
5847
- this._currentData = [];
5848
- this._valueSeparator = options.get('valueSeparator') || ',';
5849
-
5850
- if ($element.prop('type') === 'hidden') {
5851
- if (options.get('debug') && console && console.warn) {
5852
- console.warn(
5853
- 'Select2: Using a hidden input with Select2 is no longer ' +
5854
- 'supported and may stop working in the future. It is recommended ' +
5855
- 'to use a `<select>` element instead.'
5856
- );
5857
- }
5858
- }
5859
-
5860
- decorated.call(this, $element, options);
5861
- }
5862
-
5863
- InputData.prototype.current = function (_, callback) {
5864
- function getSelected (data, selectedIds) {
5865
- var selected = [];
5866
-
5867
- if (data.selected || $.inArray(data.id, selectedIds) !== -1) {
5868
- data.selected = true;
5869
- selected.push(data);
5870
- } else {
5871
- data.selected = false;
5872
- }
5873
-
5874
- if (data.children) {
5875
- selected.push.apply(selected, getSelected(data.children, selectedIds));
5876
- }
5877
-
5878
- return selected;
5879
- }
5880
-
5881
- var selected = [];
5882
-
5883
- for (var d = 0; d < this._currentData.length; d++) {
5884
- var data = this._currentData[d];
5885
-
5886
- selected.push.apply(
5887
- selected,
5888
- getSelected(
5889
- data,
5890
- this.$element.val().split(
5891
- this._valueSeparator
5892
- )
5893
- )
5894
- );
5895
- }
5896
-
5897
- callback(selected);
5898
- };
5899
-
5900
- InputData.prototype.select = function (_, data) {
5901
- if (!this.options.get('multiple')) {
5902
- this.current(function (allData) {
5903
- $.map(allData, function (data) {
5904
- data.selected = false;
5905
- });
5906
- });
5907
-
5908
- this.$element.val(data.id);
5909
- this.$element.trigger('change');
5910
- } else {
5911
- var value = this.$element.val();
5912
- value += this._valueSeparator + data.id;
5913
-
5914
- this.$element.val(value);
5915
- this.$element.trigger('change');
5916
- }
5917
- };
5918
-
5919
- InputData.prototype.unselect = function (_, data) {
5920
- var self = this;
5921
-
5922
- data.selected = false;
5923
-
5924
- this.current(function (allData) {
5925
- var values = [];
5926
-
5927
- for (var d = 0; d < allData.length; d++) {
5928
- var item = allData[d];
5929
-
5930
- if (data.id == item.id) {
5931
- continue;
5932
- }
5933
-
5934
- values.push(item.id);
5935
- }
5936
-
5937
- self.$element.val(values.join(self._valueSeparator));
5938
- self.$element.trigger('change');
5939
- });
5940
- };
5941
-
5942
- InputData.prototype.query = function (_, params, callback) {
5943
- var results = [];
5944
-
5945
- for (var d = 0; d < this._currentData.length; d++) {
5946
- var data = this._currentData[d];
5947
-
5948
- var matches = this.matches(params, data);
5949
-
5950
- if (matches !== null) {
5951
- results.push(matches);
5952
- }
5953
- }
5954
-
5955
- callback({
5956
- results: results
5957
- });
5958
- };
5959
-
5960
- InputData.prototype.addOptions = function (_, $options) {
5961
- var options = $.map($options, function ($option) {
5962
- return $.data($option[0], 'data');
5963
- });
5964
-
5965
- this._currentData.push.apply(this._currentData, options);
5966
- };
5967
-
5968
- return InputData;
5969
- });
5970
-
5971
- S2.define('select2/compat/matcher',[
5972
- 'jquery'
5973
- ], function ($) {
5974
- function oldMatcher (matcher) {
5975
- function wrappedMatcher (params, data) {
5976
- var match = $.extend(true, {}, data);
5977
-
5978
- if (params.term == null || $.trim(params.term) === '') {
5979
- return match;
5980
- }
5981
-
5982
- if (data.children) {
5983
- for (var c = data.children.length - 1; c >= 0; c--) {
5984
- var child = data.children[c];
5985
-
5986
- // Check if the child object matches
5987
- // The old matcher returned a boolean true or false
5988
- var doesMatch = matcher(params.term, child.text, child);
5989
-
5990
- // If the child didn't match, pop it off
5991
- if (!doesMatch) {
5992
- match.children.splice(c, 1);
5993
- }
5994
- }
5995
-
5996
- if (match.children.length > 0) {
5997
- return match;
5998
- }
5999
- }
6000
-
6001
- if (matcher(params.term, data.text, data)) {
6002
- return match;
6003
- }
6004
-
6005
- return null;
6006
- }
6007
-
6008
- return wrappedMatcher;
6009
- }
6010
-
6011
- return oldMatcher;
6012
- });
6013
-
6014
- S2.define('select2/compat/query',[
6015
-
6016
- ], function () {
6017
- function Query (decorated, $element, options) {
6018
- if (options.get('debug') && window.console && console.warn) {
6019
- console.warn(
6020
- 'Select2: The `query` option has been deprecated in favor of a ' +
6021
- 'custom data adapter that overrides the `query` method. Support ' +
6022
- 'will be removed for the `query` option in future versions of ' +
6023
- 'Select2.'
6024
- );
6025
- }
6026
-
6027
- decorated.call(this, $element, options);
6028
- }
6029
-
6030
- Query.prototype.query = function (_, params, callback) {
6031
- params.callback = callback;
6032
-
6033
- var query = this.options.get('query');
6034
-
6035
- query.call(null, params);
6036
- };
6037
-
6038
- return Query;
6039
- });
6040
-
6041
- S2.define('select2/dropdown/attachContainer',[
6042
-
6043
- ], function () {
6044
- function AttachContainer (decorated, $element, options) {
6045
- decorated.call(this, $element, options);
6046
- }
6047
-
6048
- AttachContainer.prototype.position =
6049
- function (decorated, $dropdown, $container) {
6050
- var $dropdownContainer = $container.find('.dropdown-wrapper');
6051
- $dropdownContainer.append($dropdown);
6052
-
6053
- $dropdown.addClass('select2-dropdown--below');
6054
- $container.addClass('select2-container--below');
6055
- };
6056
-
6057
- return AttachContainer;
6058
- });
6059
-
6060
- S2.define('select2/dropdown/stopPropagation',[
6061
-
6062
- ], function () {
6063
- function StopPropagation () { }
6064
-
6065
- StopPropagation.prototype.bind = function (decorated, container, $container) {
6066
- decorated.call(this, container, $container);
6067
-
6068
- var stoppedEvents = [
6069
- 'blur',
6070
- 'change',
6071
- 'click',
6072
- 'dblclick',
6073
- 'focus',
6074
- 'focusin',
6075
- 'focusout',
6076
- 'input',
6077
- 'keydown',
6078
- 'keyup',
6079
- 'keypress',
6080
- 'mousedown',
6081
- 'mouseenter',
6082
- 'mouseleave',
6083
- 'mousemove',
6084
- 'mouseover',
6085
- 'mouseup',
6086
- 'search',
6087
- 'touchend',
6088
- 'touchstart'
6089
- ];
6090
-
6091
- this.$dropdown.on(stoppedEvents.join(' '), function (evt) {
6092
- evt.stopPropagation();
6093
- });
6094
- };
6095
-
6096
- return StopPropagation;
6097
- });
6098
-
6099
- S2.define('select2/selection/stopPropagation',[
6100
-
6101
- ], function () {
6102
- function StopPropagation () { }
6103
-
6104
- StopPropagation.prototype.bind = function (decorated, container, $container) {
6105
- decorated.call(this, container, $container);
6106
-
6107
- var stoppedEvents = [
6108
- 'blur',
6109
- 'change',
6110
- 'click',
6111
- 'dblclick',
6112
- 'focus',
6113
- 'focusin',
6114
- 'focusout',
6115
- 'input',
6116
- 'keydown',
6117
- 'keyup',
6118
- 'keypress',
6119
- 'mousedown',
6120
- 'mouseenter',
6121
- 'mouseleave',
6122
- 'mousemove',
6123
- 'mouseover',
6124
- 'mouseup',
6125
- 'search',
6126
- 'touchend',
6127
- 'touchstart'
6128
- ];
6129
-
6130
- this.$selection.on(stoppedEvents.join(' '), function (evt) {
6131
- evt.stopPropagation();
6132
- });
6133
- };
6134
-
6135
- return StopPropagation;
6136
- });
6137
-
6138
- /*!
6139
- * jQuery Mousewheel 3.1.13
6140
- *
6141
- * Copyright jQuery Foundation and other contributors
6142
- * Released under the MIT license
6143
- * http://jquery.org/license
6144
- */
6145
-
6146
- (function (factory) {
6147
- if ( typeof S2.define === 'function' && S2.define.amd ) {
6148
- // AMD. Register as an anonymous module.
6149
- S2.define('jquery-mousewheel',['jquery'], factory);
6150
- } else if (typeof exports === 'object') {
6151
- // Node/CommonJS style for Browserify
6152
- module.exports = factory;
6153
- } else {
6154
- // Browser globals
6155
- factory(jQuery);
6156
- }
6157
- }(function ($) {
6158
-
6159
- var toFix = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'],
6160
- toBind = ( 'onwheel' in document || document.documentMode >= 9 ) ?
6161
- ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'],
6162
- slice = Array.prototype.slice,
6163
- nullLowestDeltaTimeout, lowestDelta;
6164
-
6165
- if ( $.event.fixHooks ) {
6166
- for ( var i = toFix.length; i; ) {
6167
- $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks;
6168
- }
6169
- }
6170
-
6171
- var special = $.event.special.mousewheel = {
6172
- version: '3.1.12',
6173
-
6174
- setup: function() {
6175
- if ( this.addEventListener ) {
6176
- for ( var i = toBind.length; i; ) {
6177
- this.addEventListener( toBind[--i], handler, false );
6178
- }
6179
- } else {
6180
- this.onmousewheel = handler;
6181
- }
6182
- // Store the line height and page height for this particular element
6183
- $.data(this, 'mousewheel-line-height', special.getLineHeight(this));
6184
- $.data(this, 'mousewheel-page-height', special.getPageHeight(this));
6185
- },
6186
-
6187
- teardown: function() {
6188
- if ( this.removeEventListener ) {
6189
- for ( var i = toBind.length; i; ) {
6190
- this.removeEventListener( toBind[--i], handler, false );
6191
- }
6192
- } else {
6193
- this.onmousewheel = null;
6194
- }
6195
- // Clean up the data we added to the element
6196
- $.removeData(this, 'mousewheel-line-height');
6197
- $.removeData(this, 'mousewheel-page-height');
6198
- },
6199
-
6200
- getLineHeight: function(elem) {
6201
- var $elem = $(elem),
6202
- $parent = $elem['offsetParent' in $.fn ? 'offsetParent' : 'parent']();
6203
- if (!$parent.length) {
6204
- $parent = $('body');
6205
- }
6206
- return parseInt($parent.css('fontSize'), 10) || parseInt($elem.css('fontSize'), 10) || 16;
6207
- },
6208
-
6209
- getPageHeight: function(elem) {
6210
- return $(elem).height();
6211
- },
6212
-
6213
- settings: {
6214
- adjustOldDeltas: true, // see shouldAdjustOldDeltas() below
6215
- normalizeOffset: true // calls getBoundingClientRect for each event
6216
- }
6217
- };
6218
-
6219
- $.fn.extend({
6220
- mousewheel: function(fn) {
6221
- return fn ? this.bind('mousewheel', fn) : this.trigger('mousewheel');
6222
- },
6223
-
6224
- unmousewheel: function(fn) {
6225
- return this.unbind('mousewheel', fn);
6226
- }
6227
- });
6228
-
6229
-
6230
- function handler(event) {
6231
- var orgEvent = event || window.event,
6232
- args = slice.call(arguments, 1),
6233
- delta = 0,
6234
- deltaX = 0,
6235
- deltaY = 0,
6236
- absDelta = 0,
6237
- offsetX = 0,
6238
- offsetY = 0;
6239
- event = $.event.fix(orgEvent);
6240
- event.type = 'mousewheel';
6241
-
6242
- // Old school scrollwheel delta
6243
- if ( 'detail' in orgEvent ) { deltaY = orgEvent.detail * -1; }
6244
- if ( 'wheelDelta' in orgEvent ) { deltaY = orgEvent.wheelDelta; }
6245
- if ( 'wheelDeltaY' in orgEvent ) { deltaY = orgEvent.wheelDeltaY; }
6246
- if ( 'wheelDeltaX' in orgEvent ) { deltaX = orgEvent.wheelDeltaX * -1; }
6247
-
6248
- // Firefox < 17 horizontal scrolling related to DOMMouseScroll event
6249
- if ( 'axis' in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {
6250
- deltaX = deltaY * -1;
6251
- deltaY = 0;
6252
- }
6253
-
6254
- // Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy
6255
- delta = deltaY === 0 ? deltaX : deltaY;
6256
-
6257
- // New school wheel delta (wheel event)
6258
- if ( 'deltaY' in orgEvent ) {
6259
- deltaY = orgEvent.deltaY * -1;
6260
- delta = deltaY;
6261
- }
6262
- if ( 'deltaX' in orgEvent ) {
6263
- deltaX = orgEvent.deltaX;
6264
- if ( deltaY === 0 ) { delta = deltaX * -1; }
6265
- }
6266
-
6267
- // No change actually happened, no reason to go any further
6268
- if ( deltaY === 0 && deltaX === 0 ) { return; }
6269
-
6270
- // Need to convert lines and pages to pixels if we aren't already in pixels
6271
- // There are three delta modes:
6272
- // * deltaMode 0 is by pixels, nothing to do
6273
- // * deltaMode 1 is by lines
6274
- // * deltaMode 2 is by pages
6275
- if ( orgEvent.deltaMode === 1 ) {
6276
- var lineHeight = $.data(this, 'mousewheel-line-height');
6277
- delta *= lineHeight;
6278
- deltaY *= lineHeight;
6279
- deltaX *= lineHeight;
6280
- } else if ( orgEvent.deltaMode === 2 ) {
6281
- var pageHeight = $.data(this, 'mousewheel-page-height');
6282
- delta *= pageHeight;
6283
- deltaY *= pageHeight;
6284
- deltaX *= pageHeight;
6285
- }
6286
-
6287
- // Store lowest absolute delta to normalize the delta values
6288
- absDelta = Math.max( Math.abs(deltaY), Math.abs(deltaX) );
6289
-
6290
- if ( !lowestDelta || absDelta < lowestDelta ) {
6291
- lowestDelta = absDelta;
6292
-
6293
- // Adjust older deltas if necessary
6294
- if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {
6295
- lowestDelta /= 40;
6296
- }
6297
- }
6298
-
6299
- // Adjust older deltas if necessary
6300
- if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {
6301
- // Divide all the things by 40!
6302
- delta /= 40;
6303
- deltaX /= 40;
6304
- deltaY /= 40;
6305
- }
6306
-
6307
- // Get a whole, normalized value for the deltas
6308
- delta = Math[ delta >= 1 ? 'floor' : 'ceil' ](delta / lowestDelta);
6309
- deltaX = Math[ deltaX >= 1 ? 'floor' : 'ceil' ](deltaX / lowestDelta);
6310
- deltaY = Math[ deltaY >= 1 ? 'floor' : 'ceil' ](deltaY / lowestDelta);
6311
-
6312
- // Normalise offsetX and offsetY properties
6313
- if ( special.settings.normalizeOffset && this.getBoundingClientRect ) {
6314
- var boundingRect = this.getBoundingClientRect();
6315
- offsetX = event.clientX - boundingRect.left;
6316
- offsetY = event.clientY - boundingRect.top;
6317
- }
6318
-
6319
- // Add information to the event object
6320
- event.deltaX = deltaX;
6321
- event.deltaY = deltaY;
6322
- event.deltaFactor = lowestDelta;
6323
- event.offsetX = offsetX;
6324
- event.offsetY = offsetY;
6325
- // Go ahead and set deltaMode to 0 since we converted to pixels
6326
- // Although this is a little odd since we overwrite the deltaX/Y
6327
- // properties with normalized deltas.
6328
- event.deltaMode = 0;
6329
-
6330
- // Add event and delta to the front of the arguments
6331
- args.unshift(event, delta, deltaX, deltaY);
6332
-
6333
- // Clearout lowestDelta after sometime to better
6334
- // handle multiple device types that give different
6335
- // a different lowestDelta
6336
- // Ex: trackpad = 3 and mouse wheel = 120
6337
- if (nullLowestDeltaTimeout) { clearTimeout(nullLowestDeltaTimeout); }
6338
- nullLowestDeltaTimeout = setTimeout(nullLowestDelta, 200);
6339
-
6340
- return ($.event.dispatch || $.event.handle).apply(this, args);
6341
- }
6342
-
6343
- function nullLowestDelta() {
6344
- lowestDelta = null;
6345
- }
6346
-
6347
- function shouldAdjustOldDeltas(orgEvent, absDelta) {
6348
- // If this is an older event and the delta is divisable by 120,
6349
- // then we are assuming that the browser is treating this as an
6350
- // older mouse wheel event and that we should divide the deltas
6351
- // by 40 to try and get a more usable deltaFactor.
6352
- // Side note, this actually impacts the reported scroll distance
6353
- // in older browsers and can cause scrolling to be slower than native.
6354
- // Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false.
6355
- return special.settings.adjustOldDeltas && orgEvent.type === 'mousewheel' && absDelta % 120 === 0;
6356
- }
6357
-
6358
- }));
6359
-
6360
- S2.define('jquery.select2',[
6361
- 'jquery',
6362
- 'jquery-mousewheel',
6363
-
6364
- './select2/core',
6365
- './select2/defaults'
6366
- ], function ($, _, Select2, Defaults) {
6367
- if ($.fn.select2 == null) {
6368
- // All methods that should return the element
6369
- var thisMethods = ['open', 'close', 'destroy'];
6370
-
6371
- $.fn.select2 = function (options) {
6372
- options = options || {};
6373
-
6374
- if (typeof options === 'object') {
6375
- this.each(function () {
6376
- var instanceOptions = $.extend(true, {}, options);
6377
-
6378
- var instance = new Select2($(this), instanceOptions);
6379
- });
6380
-
6381
- return this;
6382
- } else if (typeof options === 'string') {
6383
- var ret;
6384
- var args = Array.prototype.slice.call(arguments, 1);
6385
-
6386
- this.each(function () {
6387
- var instance = $(this).data('select2');
6388
-
6389
- if (instance == null && window.console && console.error) {
6390
- console.error(
6391
- 'The select2(\'' + options + '\') method was called on an ' +
6392
- 'element that is not using Select2.'
6393
- );
6394
- }
6395
-
6396
- ret = instance[options].apply(instance, args);
6397
- });
6398
-
6399
- // Check if we should be returning `this`
6400
- if ($.inArray(options, thisMethods) > -1) {
6401
- return this;
6402
- }
6403
-
6404
- return ret;
6405
- } else {
6406
- throw new Error('Invalid arguments for Select2: ' + options);
6407
- }
6408
- };
6409
- }
6410
-
6411
- if ($.fn.select2.defaults == null) {
6412
- $.fn.select2.defaults = Defaults;
6413
- }
6414
-
6415
- return Select2;
6416
- });
6417
-
6418
- // Return the AMD loader configuration so it can be used outside of this file
6419
- return {
6420
- define: S2.define,
6421
- require: S2.require
6422
- };
6423
- }());
6424
-
6425
- // Autoload the jQuery bindings
6426
- // We know that all of the modules exist above this, so we're safe
6427
- var select2 = S2.require('jquery.select2');
6428
-
6429
- // Hold the AMD module references on the jQuery function that was just loaded
6430
- // This allows Select2 to use the internal loader outside of this file, such
6431
- // as in the language files.
6432
- jQuery.fn.select2.amd = S2;
6433
-
6434
- // Return the Select2 instance for anyone who is importing it.
6435
- return select2;
6436
- }));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ }));
ui/lib/select2/js/select2.full.min.js CHANGED
@@ -1,3 +1,2 @@
1
- /*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports?require("jquery"):jQuery)}(function(a){var b=function(){if(a&&a.fn&&a.fn.select2&&a.fn.select2.amd)var b=a.fn.select2.amd;var b;return function(){if(!b||!b.requirejs){b?c=b:b={};var a,c,d;!function(b){function e(a,b){return u.call(a,b)}function f(a,b){var c,d,e,f,g,h,i,j,k,l,m,n=b&&b.split("/"),o=s.map,p=o&&o["*"]||{};if(a&&"."===a.charAt(0))if(b){for(a=a.split("/"),g=a.length-1,s.nodeIdCompat&&w.test(a[g])&&(a[g]=a[g].replace(w,"")),a=n.slice(0,n.length-1).concat(a),k=0;k<a.length;k+=1)if(m=a[k],"."===m)a.splice(k,1),k-=1;else if(".."===m){if(1===k&&(".."===a[2]||".."===a[0]))break;k>0&&(a.splice(k-1,2),k-=2)}a=a.join("/")}else 0===a.indexOf("./")&&(a=a.substring(2));if((n||p)&&o){for(c=a.split("/"),k=c.length;k>0;k-=1){if(d=c.slice(0,k).join("/"),n)for(l=n.length;l>0;l-=1)if(e=o[n.slice(0,l).join("/")],e&&(e=e[d])){f=e,h=k;break}if(f)break;!i&&p&&p[d]&&(i=p[d],j=k)}!f&&i&&(f=i,h=j),f&&(c.splice(0,h,f),a=c.join("/"))}return a}function g(a,c){return function(){var d=v.call(arguments,0);return"string"!=typeof d[0]&&1===d.length&&d.push(null),n.apply(b,d.concat([a,c]))}}function h(a){return function(b){return f(b,a)}}function i(a){return function(b){q[a]=b}}function j(a){if(e(r,a)){var c=r[a];delete r[a],t[a]=!0,m.apply(b,c)}if(!e(q,a)&&!e(t,a))throw new Error("No "+a);return q[a]}function k(a){var b,c=a?a.indexOf("!"):-1;return c>-1&&(b=a.substring(0,c),a=a.substring(c+1,a.length)),[b,a]}function l(a){return function(){return s&&s.config&&s.config[a]||{}}}var m,n,o,p,q={},r={},s={},t={},u=Object.prototype.hasOwnProperty,v=[].slice,w=/\.js$/;o=function(a,b){var c,d=k(a),e=d[0];return a=d[1],e&&(e=f(e,b),c=j(e)),e?a=c&&c.normalize?c.normalize(a,h(b)):f(a,b):(a=f(a,b),d=k(a),e=d[0],a=d[1],e&&(c=j(e))),{f:e?e+"!"+a:a,n:a,pr:e,p:c}},p={require:function(a){return g(a)},exports:function(a){var b=q[a];return"undefined"!=typeof b?b:q[a]={}},module:function(a){return{id:a,uri:"",exports:q[a],config:l(a)}}},m=function(a,c,d,f){var h,k,l,m,n,s,u=[],v=typeof d;if(f=f||a,"undefined"===v||"function"===v){for(c=!c.length&&d.length?["require","exports","module"]:c,n=0;n<c.length;n+=1)if(m=o(c[n],f),k=m.f,"require"===k)u[n]=p.require(a);else if("exports"===k)u[n]=p.exports(a),s=!0;else if("module"===k)h=u[n]=p.module(a);else if(e(q,k)||e(r,k)||e(t,k))u[n]=j(k);else{if(!m.p)throw new Error(a+" missing "+k);m.p.load(m.n,g(f,!0),i(k),{}),u[n]=q[k]}l=d?d.apply(q[a],u):void 0,a&&(h&&h.exports!==b&&h.exports!==q[a]?q[a]=h.exports:l===b&&s||(q[a]=l))}else a&&(q[a]=d)},a=c=n=function(a,c,d,e,f){if("string"==typeof a)return p[a]?p[a](c):j(o(a,c).f);if(!a.splice){if(s=a,s.deps&&n(s.deps,s.callback),!c)return;c.splice?(a=c,c=d,d=null):a=b}return c=c||function(){},"function"==typeof d&&(d=e,e=f),e?m(b,a,c,d):setTimeout(function(){m(b,a,c,d)},4),n},n.config=function(a){return n(a)},a._defined=q,d=function(a,b,c){if("string"!=typeof a)throw new Error("See almond README: incorrect module build, no module name");b.splice||(c=b,b=[]),e(q,a)||e(r,a)||(r[a]=[a,b,c])},d.amd={jQuery:!0}}(),b.requirejs=a,b.require=c,b.define=d}}(),b.define("almond",function(){}),b.define("jquery",[],function(){var b=a||$;return null==b&&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."),b}),b.define("select2/utils",["jquery"],function(a){function b(a){var b=a.prototype,c=[];for(var d in b){var e=b[d];"function"==typeof e&&"constructor"!==d&&c.push(d)}return c}var c={};c.Extend=function(a,b){function c(){this.constructor=a}var d={}.hasOwnProperty;for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},c.Decorate=function(a,c){function d(){var b=Array.prototype.unshift,d=c.prototype.constructor.length,e=a.prototype.constructor;d>0&&(b.call(arguments,a.prototype.constructor),e=c.prototype.constructor),e.apply(this,arguments)}function e(){this.constructor=d}var f=b(c),g=b(a);c.displayName=a.displayName,d.prototype=new e;for(var h=0;h<g.length;h++){var i=g[h];d.prototype[i]=a.prototype[i]}for(var j=(function(a){var b=function(){};a in d.prototype&&(b=d.prototype[a]);var e=c.prototype[a];return function(){var a=Array.prototype.unshift;return a.call(arguments,b),e.apply(this,arguments)}}),k=0;k<f.length;k++){var l=f[k];d.prototype[l]=j(l)}return d};var d=function(){this.listeners={}};return d.prototype.on=function(a,b){this.listeners=this.listeners||{},a in this.listeners?this.listeners[a].push(b):this.listeners[a]=[b]},d.prototype.trigger=function(a){var b=Array.prototype.slice,c=b.call(arguments,1);this.listeners=this.listeners||{},null==c&&(c=[]),0===c.length&&c.push({}),c[0]._type=a,a in this.listeners&&this.invoke(this.listeners[a],b.call(arguments,1)),"*"in this.listeners&&this.invoke(this.listeners["*"],arguments)},d.prototype.invoke=function(a,b){for(var c=0,d=a.length;d>c;c++)a[c].apply(this,b)},c.Observable=d,c.generateChars=function(a){for(var b="",c=0;a>c;c++){var d=Math.floor(36*Math.random());b+=d.toString(36)}return b},c.bind=function(a,b){return function(){a.apply(b,arguments)}},c._convertData=function(a){for(var b in a){var c=b.split("-"),d=a;if(1!==c.length){for(var e=0;e<c.length;e++){var f=c[e];f=f.substring(0,1).toLowerCase()+f.substring(1),f in d||(d[f]={}),e==c.length-1&&(d[f]=a[b]),d=d[f]}delete a[b]}}return a},c.hasScroll=function(b,c){var d=a(c),e=c.style.overflowX,f=c.style.overflowY;return e!==f||"hidden"!==f&&"visible"!==f?"scroll"===e||"scroll"===f?!0:d.innerHeight()<c.scrollHeight||d.innerWidth()<c.scrollWidth:!1},c.escapeMarkup=function(a){var b={"\\":"&#92;","&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#47;"};return"string"!=typeof a?a:String(a).replace(/[&<>"'\/\\]/g,function(a){return b[a]})},c.appendMany=function(b,c){if("1.7"===a.fn.jquery.substr(0,3)){var d=a();a.map(c,function(a){d=d.add(a)}),c=d}b.append(c)},c}),b.define("select2/results",["jquery","./utils"],function(a,b){function c(a,b,d){this.$element=a,this.data=d,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('<ul class="select2-results__options" role="tree"></ul>');return this.options.get("multiple")&&b.attr("aria-multiselectable","true"),this.$results=b,b},c.prototype.clear=function(){this.$results.empty()},c.prototype.displayMessage=function(b){var c=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var d=a('<li role="treeitem" aria-live="assertive" class="select2-results__option"></li>'),e=this.options.get("translations").get(b.message);d.append(c(e(b.args))),d[0].className+=" select2-results__message",this.$results.append(d)},c.prototype.hideMessages=function(){this.$results.find(".select2-results__message").remove()},c.prototype.append=function(a){this.hideLoading();var b=[];if(null==a.results||0===a.results.length)return void(0===this.$results.children().length&&this.trigger("results:message",{message:"noResults"}));a.results=this.sort(a.results);for(var c=0;c<a.results.length;c++){var d=a.results[c],e=this.option(d);b.push(e)}this.$results.append(b)},c.prototype.position=function(a,b){var c=b.find(".select2-results");c.append(a)},c.prototype.sort=function(a){var b=this.options.get("sorter");return b(a)},c.prototype.highlightFirstItem=function(){var a=this.$results.find(".select2-results__option[aria-selected]"),b=a.filter("[aria-selected=true]");b.length>0?b.first().trigger("mouseenter"):a.first().trigger("mouseenter"),this.ensureHighlightVisible()},c.prototype.setClasses=function(){var b=this;this.data.current(function(c){var d=a.map(c,function(a){return a.id.toString()}),e=b.$results.find(".select2-results__option[aria-selected]");e.each(function(){var b=a(this),c=a.data(this,"data"),e=""+c.id;null!=c.element&&c.element.selected||null==c.element&&a.inArray(e,d)>-1?b.attr("aria-selected","true"):b.attr("aria-selected","false")})})},c.prototype.showLoading=function(a){this.hideLoading();var b=this.options.get("translations").get("searching"),c={disabled:!0,loading:!0,text:b(a)},d=this.option(c);d.className+=" loading-results",this.$results.prepend(d)},c.prototype.hideLoading=function(){this.$results.find(".loading-results").remove()},c.prototype.option=function(b){var c=document.createElement("li");c.className="select2-results__option";var d={role:"treeitem","aria-selected":"false"};b.disabled&&(delete d["aria-selected"],d["aria-disabled"]="true"),null==b.id&&delete d["aria-selected"],null!=b._resultId&&(c.id=b._resultId),b.title&&(c.title=b.title),b.children&&(d.role="group",d["aria-label"]=b.text,delete d["aria-selected"]);for(var e in d){var f=d[e];c.setAttribute(e,f)}if(b.children){var g=a(c),h=document.createElement("strong");h.className="select2-results__group";a(h);this.template(b,h);for(var i=[],j=0;j<b.children.length;j++){var k=b.children[j],l=this.option(k);i.push(l)}var m=a("<ul></ul>",{"class":"select2-results__options select2-results__options--nested"});m.append(i),g.append(h),g.append(m)}else this.template(b,c);return a.data(c,"data",b),c},c.prototype.bind=function(b,c){var d=this,e=b.id+"-results";this.$results.attr("id",e),b.on("results:all",function(a){d.clear(),d.append(a.data),b.isOpen()&&(d.setClasses(),d.highlightFirstItem())}),b.on("results:append",function(a){d.append(a.data),b.isOpen()&&d.setClasses()}),b.on("query",function(a){d.hideMessages(),d.showLoading(a)}),b.on("select",function(){b.isOpen()&&(d.setClasses(),d.highlightFirstItem())}),b.on("unselect",function(){b.isOpen()&&(d.setClasses(),d.highlightFirstItem())}),b.on("open",function(){d.$results.attr("aria-expanded","true"),d.$results.attr("aria-hidden","false"),d.setClasses(),d.ensureHighlightVisible()}),b.on("close",function(){d.$results.attr("aria-expanded","false"),d.$results.attr("aria-hidden","true"),d.$results.removeAttr("aria-activedescendant")}),b.on("results:toggle",function(){var a=d.getHighlightedResults();0!==a.length&&a.trigger("mouseup")}),b.on("results:select",function(){var a=d.getHighlightedResults();if(0!==a.length){var b=a.data("data");"true"==a.attr("aria-selected")?d.trigger("close",{}):d.trigger("select",{data:b})}}),b.on("results:previous",function(){var a=d.getHighlightedResults(),b=d.$results.find("[aria-selected]"),c=b.index(a);if(0!==c){var e=c-1;0===a.length&&(e=0);var f=b.eq(e);f.trigger("mouseenter");var g=d.$results.offset().top,h=f.offset().top,i=d.$results.scrollTop()+(h-g);0===e?d.$results.scrollTop(0):0>h-g&&d.$results.scrollTop(i)}}),b.on("results:next",function(){var a=d.getHighlightedResults(),b=d.$results.find("[aria-selected]"),c=b.index(a),e=c+1;if(!(e>=b.length)){var f=b.eq(e);f.trigger("mouseenter");var g=d.$results.offset().top+d.$results.outerHeight(!1),h=f.offset().top+f.outerHeight(!1),i=d.$results.scrollTop()+h-g;0===e?d.$results.scrollTop(0):h>g&&d.$results.scrollTop(i)}}),b.on("results:focus",function(a){a.element.addClass("select2-results__option--highlighted")}),b.on("results:message",function(a){d.displayMessage(a)}),a.fn.mousewheel&&this.$results.on("mousewheel",function(a){var b=d.$results.scrollTop(),c=d.$results.get(0).scrollHeight-b+a.deltaY,e=a.deltaY>0&&b-a.deltaY<=0,f=a.deltaY<0&&c<=d.$results.height();e?(d.$results.scrollTop(0),a.preventDefault(),a.stopPropagation()):f&&(d.$results.scrollTop(d.$results.get(0).scrollHeight-d.$results.height()),a.preventDefault(),a.stopPropagation())}),this.$results.on("mouseup",".select2-results__option[aria-selected]",function(b){var c=a(this),e=c.data("data");return"true"===c.attr("aria-selected")?void(d.options.get("multiple")?d.trigger("unselect",{originalEvent:b,data:e}):d.trigger("close",{})):void d.trigger("select",{originalEvent:b,data:e})}),this.$results.on("mouseenter",".select2-results__option[aria-selected]",function(b){var c=a(this).data("data");d.getHighlightedResults().removeClass("select2-results__option--highlighted"),d.trigger("results:focus",{data:c,element:a(this)})})},c.prototype.getHighlightedResults=function(){var a=this.$results.find(".select2-results__option--highlighted");return a},c.prototype.destroy=function(){this.$results.remove()},c.prototype.ensureHighlightVisible=function(){var a=this.getHighlightedResults();if(0!==a.length){var b=this.$results.find("[aria-selected]"),c=b.index(a),d=this.$results.offset().top,e=a.offset().top,f=this.$results.scrollTop()+(e-d),g=e-d;f-=2*a.outerHeight(!1),2>=c?this.$results.scrollTop(0):(g>this.$results.outerHeight()||0>g)&&this.$results.scrollTop(f)}},c.prototype.template=function(b,c){var d=this.options.get("templateResult"),e=this.options.get("escapeMarkup"),f=d(b,c);null==f?c.style.display="none":"string"==typeof f?c.innerHTML=e(f):a(c).append(f)},c}),b.define("select2/keys",[],function(){var a={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};return a}),b.define("select2/selection/base",["jquery","../utils","../keys"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,b.Observable),d.prototype.render=function(){var b=a('<span class="select2-selection" role="combobox" aria-haspopup="true" aria-expanded="false"></span>');return this._tabindex=0,null!=this.$element.data("old-tabindex")?this._tabindex=this.$element.data("old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),b.attr("title",this.$element.attr("title")),b.attr("tabindex",this._tabindex),this.$selection=b,b},d.prototype.bind=function(a,b){var d=this,e=(a.id+"-container",a.id+"-results");this.container=a,this.$selection.on("focus",function(a){d.trigger("focus",a)}),this.$selection.on("blur",function(a){d._handleBlur(a)}),this.$selection.on("keydown",function(a){d.trigger("keypress",a),a.which===c.SPACE&&a.preventDefault()}),a.on("results:focus",function(a){d.$selection.attr("aria-activedescendant",a.data._resultId)}),a.on("selection:update",function(a){d.update(a.data)}),a.on("open",function(){d.$selection.attr("aria-expanded","true"),d.$selection.attr("aria-owns",e),d._attachCloseHandler(a)}),a.on("close",function(){d.$selection.attr("aria-expanded","false"),d.$selection.removeAttr("aria-activedescendant"),d.$selection.removeAttr("aria-owns"),d.$selection.focus(),d._detachCloseHandler(a)}),a.on("enable",function(){d.$selection.attr("tabindex",d._tabindex)}),a.on("disable",function(){d.$selection.attr("tabindex","-1")})},d.prototype._handleBlur=function(b){var c=this;window.setTimeout(function(){document.activeElement==c.$selection[0]||a.contains(c.$selection[0],document.activeElement)||c.trigger("blur",b)},1)},d.prototype._attachCloseHandler=function(b){a(document.body).on("mousedown.select2."+b.id,function(b){var c=a(b.target),d=c.closest(".select2"),e=a(".select2.select2-container--open");e.each(function(){var b=a(this);if(this!=d[0]){var c=b.data("element");c.select2("close")}})})},d.prototype._detachCloseHandler=function(b){a(document.body).off("mousedown.select2."+b.id)},d.prototype.position=function(a,b){var c=b.find(".selection");c.append(a)},d.prototype.destroy=function(){this._detachCloseHandler(this.container)},d.prototype.update=function(a){throw new Error("The `update` method must be defined in child classes.")},d}),b.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(a,b,c,d){function e(){e.__super__.constructor.apply(this,arguments)}return c.Extend(e,b),e.prototype.render=function(){var a=e.__super__.render.call(this);return a.addClass("select2-selection--single"),a.html('<span class="select2-selection__rendered"></span><span class="select2-selection__arrow" role="presentation"><b role="presentation"></b></span>'),a},e.prototype.bind=function(a,b){var c=this;e.__super__.bind.apply(this,arguments);var d=a.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",d),this.$selection.attr("aria-labelledby",d),this.$selection.on("mousedown",function(a){1===a.which&&c.trigger("toggle",{originalEvent:a})}),this.$selection.on("focus",function(a){}),this.$selection.on("blur",function(a){}),a.on("focus",function(b){a.isOpen()||c.$selection.focus()}),a.on("selection:update",function(a){c.update(a.data)})},e.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},e.prototype.display=function(a,b){var c=this.options.get("templateSelection"),d=this.options.get("escapeMarkup");return d(c(a,b))},e.prototype.selectionContainer=function(){return a("<span></span>")},e.prototype.update=function(a){if(0===a.length)return void this.clear();var b=a[0],c=this.$selection.find(".select2-selection__rendered"),d=this.display(b,c);c.empty().append(d),c.prop("title",b.title||b.text)},e}),b.define("select2/selection/multiple",["jquery","./base","../utils"],function(a,b,c){function d(a,b){d.__super__.constructor.apply(this,arguments)}return c.Extend(d,b),d.prototype.render=function(){var a=d.__super__.render.call(this);return a.addClass("select2-selection--multiple"),a.html('<ul class="select2-selection__rendered"></ul>'),a},d.prototype.bind=function(b,c){var e=this;d.__super__.bind.apply(this,arguments),this.$selection.on("click",function(a){e.trigger("toggle",{originalEvent:a})}),this.$selection.on("click",".select2-selection__choice__remove",function(b){if(!e.options.get("disabled")){var c=a(this),d=c.parent(),f=d.data("data");e.trigger("unselect",{originalEvent:b,data:f})}})},d.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},d.prototype.display=function(a,b){var c=this.options.get("templateSelection"),d=this.options.get("escapeMarkup");return d(c(a,b))},d.prototype.selectionContainer=function(){var b=a('<li class="select2-selection__choice"><span class="select2-selection__choice__remove" role="presentation">&times;</span></li>');return b},d.prototype.update=function(a){if(this.clear(),0!==a.length){for(var b=[],d=0;d<a.length;d++){var e=a[d],f=this.selectionContainer(),g=this.display(e,f);f.append(g),f.prop("title",e.title||e.text),f.data("data",e),b.push(f)}var h=this.$selection.find(".select2-selection__rendered");c.appendMany(h,b)}},d}),b.define("select2/selection/placeholder",["../utils"],function(a){function b(a,b,c){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c)}return b.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},b.prototype.createPlaceholder=function(a,b){var c=this.selectionContainer();return c.html(this.display(b)),c.addClass("select2-selection__placeholder").removeClass("select2-selection__choice"),c},b.prototype.update=function(a,b){var c=1==b.length&&b[0].id!=this.placeholder.id,d=b.length>1;if(d||c)return a.call(this,b);this.clear();var e=this.createPlaceholder(this.placeholder);this.$selection.find(".select2-selection__rendered").append(e)},b}),b.define("select2/selection/allowClear",["jquery","../keys"],function(a,b){function c(){}return c.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),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(a){d._handleClear(a)}),b.on("keypress",function(a){d._handleKeyboardClear(a,b)})},c.prototype._handleClear=function(a,b){if(!this.options.get("disabled")){var c=this.$selection.find(".select2-selection__clear");if(0!==c.length){b.stopPropagation();for(var d=c.data("data"),e=0;e<d.length;e++){var f={data:d[e]};if(this.trigger("unselect",f),f.prevented)return}this.$element.val(this.placeholder.id).trigger("change"),this.trigger("toggle",{})}}},c.prototype._handleKeyboardClear=function(a,c,d){d.isOpen()||(c.which==b.DELETE||c.which==b.BACKSPACE)&&this._handleClear(c)},c.prototype.update=function(b,c){if(b.call(this,c),!(this.$selection.find(".select2-selection__placeholder").length>0||0===c.length)){var d=a('<span class="select2-selection__clear">&times;</span>');d.data("data",c),this.$selection.find(".select2-selection__rendered").prepend(d)}},c}),b.define("select2/selection/search",["jquery","../utils","../keys"],function(a,b,c){function d(a,b,c){a.call(this,b,c)}return d.prototype.render=function(b){var c=a('<li class="select2-search select2-search--inline"><input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" role="textbox" aria-autocomplete="list" /></li>');this.$searchContainer=c,this.$search=c.find("input");var d=b.call(this);return this._transferTabIndex(),d},d.prototype.bind=function(a,b,d){var e=this;a.call(this,b,d),b.on("open",function(){e.$search.trigger("focus")}),b.on("close",function(){e.$search.val(""),e.$search.removeAttr("aria-activedescendant"),e.$search.trigger("focus")}),b.on("enable",function(){e.$search.prop("disabled",!1),e._transferTabIndex()}),b.on("disable",function(){e.$search.prop("disabled",!0)}),b.on("focus",function(a){e.$search.trigger("focus")}),b.on("results:focus",function(a){e.$search.attr("aria-activedescendant",a.id)}),this.$selection.on("focusin",".select2-search--inline",function(a){e.trigger("focus",a)}),this.$selection.on("focusout",".select2-search--inline",function(a){e._handleBlur(a)}),this.$selection.on("keydown",".select2-search--inline",function(a){a.stopPropagation(),e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented();var b=a.which;if(b===c.BACKSPACE&&""===e.$search.val()){var d=e.$searchContainer.prev(".select2-selection__choice");if(d.length>0){var f=d.data("data");e.searchRemoveChoice(f),a.preventDefault()}}});var f=document.documentMode,g=f&&11>=f;this.$selection.on("input.searchcheck",".select2-search--inline",function(a){return g?void e.$selection.off("input.search input.searchcheck"):void e.$selection.off("keyup.search")}),this.$selection.on("keyup.search input.search",".select2-search--inline",function(a){if(g&&"input"===a.type)return void e.$selection.off("input.search input.searchcheck");var b=a.which;b!=c.SHIFT&&b!=c.CTRL&&b!=c.ALT&&b!=c.TAB&&e.handleSearch(a)})},d.prototype._transferTabIndex=function(a){this.$search.attr("tabindex",this.$selection.attr("tabindex")),this.$selection.attr("tabindex","-1")},d.prototype.createPlaceholder=function(a,b){this.$search.attr("placeholder",b.text)},d.prototype.update=function(a,b){var c=this.$search[0]==document.activeElement;this.$search.attr("placeholder",""),a.call(this,b),this.$selection.find(".select2-selection__rendered").append(this.$searchContainer),this.resizeSearch(),c&&this.$search.focus()},d.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var a=this.$search.val();this.trigger("query",{term:a})}this._keyUpPrevented=!1},d.prototype.searchRemoveChoice=function(a,b){this.trigger("unselect",{data:b}),this.$search.val(b.text),this.handleSearch()},d.prototype.resizeSearch=function(){this.$search.css("width","25px");var a="";if(""!==this.$search.attr("placeholder"))a=this.$selection.find(".select2-selection__rendered").innerWidth();else{var b=this.$search.val().length+1;a=.75*b+"em"}this.$search.css("width",a)},d}),b.define("select2/selection/eventRelay",["jquery"],function(a){function b(){}return b.prototype.bind=function(b,c,d){var e=this,f=["open","opening","close","closing","select","selecting","unselect","unselecting"],g=["opening","closing","selecting","unselecting"];b.call(this,c,d),c.on("*",function(b,c){if(-1!==a.inArray(b,f)){c=c||{};var d=a.Event("select2:"+b,{params:c});e.$element.trigger(d),-1!==a.inArray(b,g)&&(c.prevented=d.isDefaultPrevented())}})},b}),b.define("select2/translation",["jquery","require"],function(a,b){function c(a){this.dict=a||{}}return c.prototype.all=function(){return this.dict},c.prototype.get=function(a){return this.dict[a]},c.prototype.extend=function(b){this.dict=a.extend({},b.all(),this.dict)},c._cache={},c.loadPath=function(a){if(!(a in c._cache)){var d=b(a);c._cache[a]=d}return new c(c._cache[a])},c}),b.define("select2/diacritics",[],function(){var 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","Ⓓ":"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","Ƣ":"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","ƣ":"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","Ά":"Α","Έ":"Ε","Ή":"Η","Ί":"Ι","Ϊ":"Ι","Ό":"Ο","Ύ":"Υ","Ϋ":"Υ","Ώ":"Ω","ά":"α","έ":"ε","ή":"η","ί":"ι","ϊ":"ι","ΐ":"ι","ό":"ο","ύ":"υ","ϋ":"υ","ΰ":"υ","ω":"ω","ς":"σ"};return a}),b.define("select2/data/base",["../utils"],function(a){function b(a,c){b.__super__.constructor.call(this)}return a.Extend(b,a.Observable),b.prototype.current=function(a){throw new Error("The `current` method must be defined in child classes.")},b.prototype.query=function(a,b){throw new Error("The `query` method must be defined in child classes.")},b.prototype.bind=function(a,b){},b.prototype.destroy=function(){},b.prototype.generateResultId=function(b,c){var d=b.id+"-result-";return d+=a.generateChars(4),d+=null!=c.id?"-"+c.id.toString():"-"+a.generateChars(4)},b}),b.define("select2/data/select",["./base","../utils","jquery"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,a),d.prototype.current=function(a){var b=[],d=this;this.$element.find(":selected").each(function(){var a=c(this),e=d.item(a);b.push(e)}),a(b)},d.prototype.select=function(a){var b=this;if(a.selected=!0,c(a.element).is("option"))return a.element.selected=!0,void this.$element.trigger("change");
2
- if(this.$element.prop("multiple"))this.current(function(d){var e=[];a=[a],a.push.apply(a,d);for(var f=0;f<a.length;f++){var g=a[f].id;-1===c.inArray(g,e)&&e.push(g)}b.$element.val(e),b.$element.trigger("change")});else{var d=a.id;this.$element.val(d),this.$element.trigger("change")}},d.prototype.unselect=function(a){var b=this;if(this.$element.prop("multiple"))return a.selected=!1,c(a.element).is("option")?(a.element.selected=!1,void this.$element.trigger("change")):void this.current(function(d){for(var e=[],f=0;f<d.length;f++){var g=d[f].id;g!==a.id&&-1===c.inArray(g,e)&&e.push(g)}b.$element.val(e),b.$element.trigger("change")})},d.prototype.bind=function(a,b){var c=this;this.container=a,a.on("select",function(a){c.select(a.data)}),a.on("unselect",function(a){c.unselect(a.data)})},d.prototype.destroy=function(){this.$element.find("*").each(function(){c.removeData(this,"data")})},d.prototype.query=function(a,b){var d=[],e=this,f=this.$element.children();f.each(function(){var b=c(this);if(b.is("option")||b.is("optgroup")){var f=e.item(b),g=e.matches(a,f);null!==g&&d.push(g)}}),b({results:d})},d.prototype.addOptions=function(a){b.appendMany(this.$element,a)},d.prototype.option=function(a){var b;a.children?(b=document.createElement("optgroup"),b.label=a.text):(b=document.createElement("option"),void 0!==b.textContent?b.textContent=a.text:b.innerText=a.text),a.id&&(b.value=a.id),a.disabled&&(b.disabled=!0),a.selected&&(b.selected=!0),a.title&&(b.title=a.title);var d=c(b),e=this._normalizeItem(a);return e.element=b,c.data(b,"data",e),d},d.prototype.item=function(a){var b={};if(b=c.data(a[0],"data"),null!=b)return b;if(a.is("option"))b={id:a.val(),text:a.text(),disabled:a.prop("disabled"),selected:a.prop("selected"),title:a.prop("title")};else if(a.is("optgroup")){b={text:a.prop("label"),children:[],title:a.prop("title")};for(var d=a.children("option"),e=[],f=0;f<d.length;f++){var g=c(d[f]),h=this.item(g);e.push(h)}b.children=e}return b=this._normalizeItem(b),b.element=a[0],c.data(a[0],"data",b),b},d.prototype._normalizeItem=function(a){c.isPlainObject(a)||(a={id:a,text:a}),a=c.extend({},{text:""},a);var b={selected:!1,disabled:!1};return null!=a.id&&(a.id=a.id.toString()),null!=a.text&&(a.text=a.text.toString()),null==a._resultId&&a.id&&null!=this.container&&(a._resultId=this.generateResultId(this.container,a)),c.extend({},b,a)},d.prototype.matches=function(a,b){var c=this.options.get("matcher");return c(a,b)},d}),b.define("select2/data/array",["./select","../utils","jquery"],function(a,b,c){function d(a,b){var c=b.get("data")||[];d.__super__.constructor.call(this,a,b),this.addOptions(this.convertToOptions(c))}return b.Extend(d,a),d.prototype.select=function(a){var b=this.$element.find("option").filter(function(b,c){return c.value==a.id.toString()});0===b.length&&(b=this.option(a),this.addOptions(b)),d.__super__.select.call(this,a)},d.prototype.convertToOptions=function(a){function d(a){return function(){return c(this).val()==a.id}}for(var e=this,f=this.$element.find("option"),g=f.map(function(){return e.item(c(this)).id}).get(),h=[],i=0;i<a.length;i++){var j=this._normalizeItem(a[i]);if(c.inArray(j.id,g)>=0){var k=f.filter(d(j)),l=this.item(k),m=c.extend(!0,{},j,l),n=this.option(m);k.replaceWith(n)}else{var o=this.option(j);if(j.children){var p=this.convertToOptions(j.children);b.appendMany(o,p)}h.push(o)}}return h},d}),b.define("select2/data/ajax",["./array","../utils","jquery"],function(a,b,c){function d(a,b){this.ajaxOptions=this._applyDefaults(b.get("ajax")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),d.__super__.constructor.call(this,a,b)}return b.Extend(d,a),d.prototype._applyDefaults=function(a){var b={data:function(a){return c.extend({},a,{q:a.term})},transport:function(a,b,d){var e=c.ajax(a);return e.then(b),e.fail(d),e}};return c.extend({},b,a,!0)},d.prototype.processResults=function(a){return a},d.prototype.query=function(a,b){function d(){var d=f.transport(f,function(d){var f=e.processResults(d,a);e.options.get("debug")&&window.console&&console.error&&(f&&f.results&&c.isArray(f.results)||console.error("Select2: The AJAX results did not return an array in the `results` key of the response.")),b(f)},function(){d.status&&"0"===d.status||e.trigger("results:message",{message:"errorLoading"})});e._request=d}var e=this;null!=this._request&&(c.isFunction(this._request.abort)&&this._request.abort(),this._request=null);var f=c.extend({type:"GET"},this.ajaxOptions);"function"==typeof f.url&&(f.url=f.url.call(this.$element,a)),"function"==typeof f.data&&(f.data=f.data.call(this.$element,a)),this.ajaxOptions.delay&&null!=a.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(d,this.ajaxOptions.delay)):d()},d}),b.define("select2/data/tags",["jquery"],function(a){function b(b,c,d){var e=d.get("tags"),f=d.get("createTag");void 0!==f&&(this.createTag=f);var g=d.get("insertTag");if(void 0!==g&&(this.insertTag=g),b.call(this,c,d),a.isArray(e))for(var h=0;h<e.length;h++){var i=e[h],j=this._normalizeItem(i),k=this.option(j);this.$element.append(k)}}return b.prototype.query=function(a,b,c){function d(a,f){for(var g=a.results,h=0;h<g.length;h++){var i=g[h],j=null!=i.children&&!d({results:i.children},!0),k=i.text===b.term;if(k||j)return f?!1:(a.data=g,void c(a))}if(f)return!0;var l=e.createTag(b);if(null!=l){var m=e.option(l);m.attr("data-select2-tag",!0),e.addOptions([m]),e.insertTag(g,l)}a.results=g,c(a)}var e=this;return this._removeOldTags(),null==b.term||null!=b.page?void a.call(this,b,c):void a.call(this,b,d)},b.prototype.createTag=function(b,c){var d=a.trim(c.term);return""===d?null:{id:d,text:d}},b.prototype.insertTag=function(a,b,c){b.unshift(c)},b.prototype._removeOldTags=function(b){var c=(this._lastTag,this.$element.find("option[data-select2-tag]"));c.each(function(){this.selected||a(this).remove()})},b}),b.define("select2/data/tokenizer",["jquery"],function(a){function b(a,b,c){var d=c.get("tokenizer");void 0!==d&&(this.tokenizer=d),a.call(this,b,c)}return b.prototype.bind=function(a,b,c){a.call(this,b,c),this.$search=b.dropdown.$search||b.selection.$search||c.find(".select2-search__field")},b.prototype.query=function(b,c,d){function e(b){var c=g._normalizeItem(b),d=g.$element.find("option").filter(function(){return a(this).val()===c.id});if(!d.length){var e=g.option(c);e.attr("data-select2-tag",!0),g._removeOldTags(),g.addOptions([e])}f(c)}function f(a){g.trigger("select",{data:a})}var g=this;c.term=c.term||"";var h=this.tokenizer(c,this.options,e);h.term!==c.term&&(this.$search.length&&(this.$search.val(h.term),this.$search.focus()),c.term=h.term),b.call(this,c,d)},b.prototype.tokenizer=function(b,c,d,e){for(var f=d.get("tokenSeparators")||[],g=c.term,h=0,i=this.createTag||function(a){return{id:a.term,text:a.term}};h<g.length;){var j=g[h];if(-1!==a.inArray(j,f)){var k=g.substr(0,h),l=a.extend({},c,{term:k}),m=i(l);null!=m?(e(m),g=g.substr(h+1)||"",h=0):h++}else h++}return{term:g}},b}),b.define("select2/data/minimumInputLength",[],function(){function a(a,b,c){this.minimumInputLength=c.get("minimumInputLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){return b.term=b.term||"",b.term.length<this.minimumInputLength?void this.trigger("results:message",{message:"inputTooShort",args:{minimum:this.minimumInputLength,input:b.term,params:b}}):void a.call(this,b,c)},a}),b.define("select2/data/maximumInputLength",[],function(){function a(a,b,c){this.maximumInputLength=c.get("maximumInputLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){return b.term=b.term||"",this.maximumInputLength>0&&b.term.length>this.maximumInputLength?void this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:b.term,params:b}}):void a.call(this,b,c)},a}),b.define("select2/data/maximumSelectionLength",[],function(){function a(a,b,c){this.maximumSelectionLength=c.get("maximumSelectionLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){var d=this;this.current(function(e){var f=null!=e?e.length:0;return d.maximumSelectionLength>0&&f>=d.maximumSelectionLength?void d.trigger("results:message",{message:"maximumSelected",args:{maximum:d.maximumSelectionLength}}):void a.call(d,b,c)})},a}),b.define("select2/dropdown",["jquery","./utils"],function(a,b){function c(a,b){this.$element=a,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('<span class="select2-dropdown"><span class="select2-results"></span></span>');return b.attr("dir",this.options.get("dir")),this.$dropdown=b,b},c.prototype.bind=function(){},c.prototype.position=function(a,b){},c.prototype.destroy=function(){this.$dropdown.remove()},c}),b.define("select2/dropdown/search",["jquery","../utils"],function(a,b){function c(){}return c.prototype.render=function(b){var c=b.call(this),d=a('<span class="select2-search select2-search--dropdown"><input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" role="textbox" /></span>');return this.$searchContainer=d,this.$search=d.find("input"),c.prepend(d),c},c.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),this.$search.on("keydown",function(a){e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented()}),this.$search.on("input",function(b){a(this).off("keyup")}),this.$search.on("keyup input",function(a){e.handleSearch(a)}),c.on("open",function(){e.$search.attr("tabindex",0),e.$search.focus(),window.setTimeout(function(){e.$search.focus()},0)}),c.on("close",function(){e.$search.attr("tabindex",-1),e.$search.val("")}),c.on("focus",function(){c.isOpen()&&e.$search.focus()}),c.on("results:all",function(a){if(null==a.query.term||""===a.query.term){var b=e.showSearch(a);b?e.$searchContainer.removeClass("select2-search--hide"):e.$searchContainer.addClass("select2-search--hide")}})},c.prototype.handleSearch=function(a){if(!this._keyUpPrevented){var b=this.$search.val();this.trigger("query",{term:b})}this._keyUpPrevented=!1},c.prototype.showSearch=function(a,b){return!0},c}),b.define("select2/dropdown/hidePlaceholder",[],function(){function a(a,b,c,d){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c,d)}return a.prototype.append=function(a,b){b.results=this.removePlaceholder(b.results),a.call(this,b)},a.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},a.prototype.removePlaceholder=function(a,b){for(var c=b.slice(0),d=b.length-1;d>=0;d--){var e=b[d];this.placeholder.id===e.id&&c.splice(d,1)}return c},a}),b.define("select2/dropdown/infiniteScroll",["jquery"],function(a){function b(a,b,c,d){this.lastParams={},a.call(this,b,c,d),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return b.prototype.append=function(a,b){this.$loadingMore.remove(),this.loading=!1,a.call(this,b),this.showLoadingMore(b)&&this.$results.append(this.$loadingMore)},b.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),c.on("query",function(a){e.lastParams=a,e.loading=!0}),c.on("query:append",function(a){e.lastParams=a,e.loading=!0}),this.$results.on("scroll",function(){var b=a.contains(document.documentElement,e.$loadingMore[0]);if(!e.loading&&b){var c=e.$results.offset().top+e.$results.outerHeight(!1),d=e.$loadingMore.offset().top+e.$loadingMore.outerHeight(!1);c+50>=d&&e.loadMore()}})},b.prototype.loadMore=function(){this.loading=!0;var b=a.extend({},{page:1},this.lastParams);b.page++,this.trigger("query:append",b)},b.prototype.showLoadingMore=function(a,b){return b.pagination&&b.pagination.more},b.prototype.createLoadingMore=function(){var b=a('<li class="select2-results__option select2-results__option--load-more"role="treeitem" aria-disabled="true"></li>'),c=this.options.get("translations").get("loadingMore");return b.html(c(this.lastParams)),b},b}),b.define("select2/dropdown/attachBody",["jquery","../utils"],function(a,b){function c(b,c,d){this.$dropdownParent=d.get("dropdownParent")||a(document.body),b.call(this,c,d)}return c.prototype.bind=function(a,b,c){var d=this,e=!1;a.call(this,b,c),b.on("open",function(){d._showDropdown(),d._attachPositioningHandler(b),e||(e=!0,b.on("results:all",function(){d._positionDropdown(),d._resizeDropdown()}),b.on("results:append",function(){d._positionDropdown(),d._resizeDropdown()}))}),b.on("close",function(){d._hideDropdown(),d._detachPositioningHandler(b)}),this.$dropdownContainer.on("mousedown",function(a){a.stopPropagation()})},c.prototype.destroy=function(a){a.call(this),this.$dropdownContainer.remove()},c.prototype.position=function(a,b,c){b.attr("class",c.attr("class")),b.removeClass("select2"),b.addClass("select2-container--open"),b.css({position:"absolute",top:-999999}),this.$container=c},c.prototype.render=function(b){var c=a("<span></span>"),d=b.call(this);return c.append(d),this.$dropdownContainer=c,c},c.prototype._hideDropdown=function(a){this.$dropdownContainer.detach()},c.prototype._attachPositioningHandler=function(c,d){var e=this,f="scroll.select2."+d.id,g="resize.select2."+d.id,h="orientationchange.select2."+d.id,i=this.$container.parents().filter(b.hasScroll);i.each(function(){a(this).data("select2-scroll-position",{x:a(this).scrollLeft(),y:a(this).scrollTop()})}),i.on(f,function(b){var c=a(this).data("select2-scroll-position");a(this).scrollTop(c.y)}),a(window).on(f+" "+g+" "+h,function(a){e._positionDropdown(),e._resizeDropdown()})},c.prototype._detachPositioningHandler=function(c,d){var e="scroll.select2."+d.id,f="resize.select2."+d.id,g="orientationchange.select2."+d.id,h=this.$container.parents().filter(b.hasScroll);h.off(e),a(window).off(e+" "+f+" "+g)},c.prototype._positionDropdown=function(){var b=a(window),c=this.$dropdown.hasClass("select2-dropdown--above"),d=this.$dropdown.hasClass("select2-dropdown--below"),e=null,f=this.$container.offset();f.bottom=f.top+this.$container.outerHeight(!1);var g={height:this.$container.outerHeight(!1)};g.top=f.top,g.bottom=f.top+g.height;var h={height:this.$dropdown.outerHeight(!1)},i={top:b.scrollTop(),bottom:b.scrollTop()+b.height()},j=i.top<f.top-h.height,k=i.bottom>f.bottom+h.height,l={left:f.left,top:g.bottom},m=this.$dropdownParent;"static"===m.css("position")&&(m=m.offsetParent());var n=m.offset();l.top-=n.top,l.left-=n.left,c||d||(e="below"),k||!j||c?!j&&k&&c&&(e="below"):e="above",("above"==e||c&&"below"!==e)&&(l.top=g.top-n.top-h.height),null!=e&&(this.$dropdown.removeClass("select2-dropdown--below select2-dropdown--above").addClass("select2-dropdown--"+e),this.$container.removeClass("select2-container--below select2-container--above").addClass("select2-container--"+e)),this.$dropdownContainer.css(l)},c.prototype._resizeDropdown=function(){var a={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(a.minWidth=a.width,a.position="relative",a.width="auto"),this.$dropdown.css(a)},c.prototype._showDropdown=function(a){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},c}),b.define("select2/dropdown/minimumResultsForSearch",[],function(){function a(b){for(var c=0,d=0;d<b.length;d++){var e=b[d];e.children?c+=a(e.children):c++}return c}function b(a,b,c,d){this.minimumResultsForSearch=c.get("minimumResultsForSearch"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=1/0),a.call(this,b,c,d)}return b.prototype.showSearch=function(b,c){return a(c.data.results)<this.minimumResultsForSearch?!1:b.call(this,c)},b}),b.define("select2/dropdown/selectOnClose",[],function(){function a(){}return a.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),b.on("close",function(a){d._handleSelectOnClose(a)})},a.prototype._handleSelectOnClose=function(a,b){if(b&&null!=b.originalSelect2Event){var c=b.originalSelect2Event;if("select"===c._type||"unselect"===c._type)return}var d=this.getHighlightedResults();if(!(d.length<1)){var e=d.data("data");null!=e.element&&e.element.selected||null==e.element&&e.selected||this.trigger("select",{data:e})}},a}),b.define("select2/dropdown/closeOnSelect",[],function(){function a(){}return a.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),b.on("select",function(a){d._selectTriggered(a)}),b.on("unselect",function(a){d._selectTriggered(a)})},a.prototype._selectTriggered=function(a,b){var c=b.originalEvent;c&&c.ctrlKey||this.trigger("close",{originalEvent:c,originalSelect2Event:b})},a}),b.define("select2/i18n/en",[],function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(a){var b=a.input.length-a.maximum,c="Please delete "+b+" character";return 1!=b&&(c+="s"),c},inputTooShort:function(a){var b=a.minimum-a.input.length,c="Please enter "+b+" or more characters";return c},loadingMore:function(){return"Loading more results…"},maximumSelected:function(a){var b="You can only select "+a.maximum+" item";return 1!=a.maximum&&(b+="s"),b},noResults:function(){return"No results found"},searching:function(){return"Searching…"}}}),b.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(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C){function D(){this.reset()}D.prototype.apply=function(l){if(l=a.extend(!0,{},this.defaults,l),null==l.dataAdapter){if(null!=l.ajax?l.dataAdapter=o:null!=l.data?l.dataAdapter=n:l.dataAdapter=m,l.minimumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,r)),l.maximumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,s)),l.maximumSelectionLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,t)),l.tags&&(l.dataAdapter=j.Decorate(l.dataAdapter,p)),(null!=l.tokenSeparators||null!=l.tokenizer)&&(l.dataAdapter=j.Decorate(l.dataAdapter,q)),null!=l.query){var C=b(l.amdBase+"compat/query");l.dataAdapter=j.Decorate(l.dataAdapter,C)}if(null!=l.initSelection){var D=b(l.amdBase+"compat/initSelection");l.dataAdapter=j.Decorate(l.dataAdapter,D)}}if(null==l.resultsAdapter&&(l.resultsAdapter=c,null!=l.ajax&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,x)),null!=l.placeholder&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,w)),l.selectOnClose&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,A))),null==l.dropdownAdapter){if(l.multiple)l.dropdownAdapter=u;else{var E=j.Decorate(u,v);l.dropdownAdapter=E}if(0!==l.minimumResultsForSearch&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,z)),l.closeOnSelect&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,B)),null!=l.dropdownCssClass||null!=l.dropdownCss||null!=l.adaptDropdownCssClass){var F=b(l.amdBase+"compat/dropdownCss");l.dropdownAdapter=j.Decorate(l.dropdownAdapter,F)}l.dropdownAdapter=j.Decorate(l.dropdownAdapter,y)}if(null==l.selectionAdapter){if(l.multiple?l.selectionAdapter=e:l.selectionAdapter=d,null!=l.placeholder&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,f)),l.allowClear&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,g)),l.multiple&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,h)),null!=l.containerCssClass||null!=l.containerCss||null!=l.adaptContainerCssClass){var G=b(l.amdBase+"compat/containerCss");l.selectionAdapter=j.Decorate(l.selectionAdapter,G)}l.selectionAdapter=j.Decorate(l.selectionAdapter,i)}if("string"==typeof l.language)if(l.language.indexOf("-")>0){var H=l.language.split("-"),I=H[0];l.language=[l.language,I]}else l.language=[l.language];if(a.isArray(l.language)){var J=new k;l.language.push("en");for(var K=l.language,L=0;L<K.length;L++){var M=K[L],N={};try{N=k.loadPath(M)}catch(O){try{M=this.defaults.amdLanguageBase+M,N=k.loadPath(M)}catch(P){l.debug&&window.console&&console.warn&&console.warn('Select2: The language file for "'+M+'" could not be automatically loaded. A fallback will be used instead.');continue}}J.extend(N)}l.translations=J}else{var Q=k.loadPath(this.defaults.amdLanguageBase+"en"),R=new k(l.language);R.extend(Q),l.translations=R}return l},D.prototype.reset=function(){function b(a){function b(a){return l[a]||a}return a.replace(/[^\u0000-\u007E]/g,b)}function c(d,e){if(""===a.trim(d.term))return e;if(e.children&&e.children.length>0){for(var f=a.extend(!0,{},e),g=e.children.length-1;g>=0;g--){var h=e.children[g],i=c(d,h);null==i&&f.children.splice(g,1)}return f.children.length>0?f:c(d,f)}var j=b(e.text).toUpperCase(),k=b(d.term).toUpperCase();return j.indexOf(k)>-1?e:null}this.defaults={amdBase:"./",amdLanguageBase:"./i18n/",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:j.escapeMarkup,language:C,matcher:c,minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,sorter:function(a){return a},templateResult:function(a){return a.text},templateSelection:function(a){return a.text},theme:"default",width:"resolve"}},D.prototype.set=function(b,c){var d=a.camelCase(b),e={};e[d]=c;var f=j._convertData(e);a.extend(this.defaults,f)};var E=new D;return E}),b.define("select2/options",["require","jquery","./defaults","./utils"],function(a,b,c,d){function e(b,e){if(this.options=b,null!=e&&this.fromElement(e),this.options=c.apply(this.options),e&&e.is("input")){var f=a(this.get("amdBase")+"compat/inputData");this.options.dataAdapter=d.Decorate(this.options.dataAdapter,f)}}return e.prototype.fromElement=function(a){var c=["select2"];null==this.options.multiple&&(this.options.multiple=a.prop("multiple")),null==this.options.disabled&&(this.options.disabled=a.prop("disabled")),null==this.options.language&&(a.prop("lang")?this.options.language=a.prop("lang").toLowerCase():a.closest("[lang]").prop("lang")&&(this.options.language=a.closest("[lang]").prop("lang"))),null==this.options.dir&&(a.prop("dir")?this.options.dir=a.prop("dir"):a.closest("[dir]").prop("dir")?this.options.dir=a.closest("[dir]").prop("dir"):this.options.dir="ltr"),a.prop("disabled",this.options.disabled),a.prop("multiple",this.options.multiple),a.data("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.'),a.data("data",a.data("select2Tags")),a.data("tags",!0)),a.data("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."),a.attr("ajax--url",a.data("ajaxUrl")),a.data("ajax--url",a.data("ajaxUrl")));var e={};e=b.fn.jquery&&"1."==b.fn.jquery.substr(0,2)&&a[0].dataset?b.extend(!0,{},a[0].dataset,a.data()):a.data();var f=b.extend(!0,{},e);f=d._convertData(f);for(var g in f)b.inArray(g,c)>-1||(b.isPlainObject(this.options[g])?b.extend(this.options[g],f[g]):this.options[g]=f[g]);return this},e.prototype.get=function(a){return this.options[a]},e.prototype.set=function(a,b){this.options[a]=b},e}),b.define("select2/core",["jquery","./options","./utils","./keys"],function(a,b,c,d){var e=function(a,c){null!=a.data("select2")&&a.data("select2").destroy(),this.$element=a,this.id=this._generateId(a),c=c||{},this.options=new b(c,a),e.__super__.constructor.call(this);var d=a.attr("tabindex")||0;a.data("old-tabindex",d),a.attr("tabindex","-1");var f=this.options.get("dataAdapter");this.dataAdapter=new f(a,this.options);var g=this.render();this._placeContainer(g);var h=this.options.get("selectionAdapter");this.selection=new h(a,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,g);var i=this.options.get("dropdownAdapter");this.dropdown=new i(a,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,g);var j=this.options.get("resultsAdapter");this.results=new j(a,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var k=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(a){k.trigger("selection:update",{data:a})}),a.addClass("select2-hidden-accessible"),a.attr("aria-hidden","true"),this._syncAttributes(),a.data("select2",this)};return c.Extend(e,c.Observable),e.prototype._generateId=function(a){var b="";return b=null!=a.attr("id")?a.attr("id"):null!=a.attr("name")?a.attr("name")+"-"+c.generateChars(2):c.generateChars(4),b=b.replace(/(:|\.|\[|\]|,)/g,""),b="select2-"+b},e.prototype._placeContainer=function(a){a.insertAfter(this.$element);var b=this._resolveWidth(this.$element,this.options.get("width"));null!=b&&a.css("width",b)},e.prototype._resolveWidth=function(a,b){var c=/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if("resolve"==b){var d=this._resolveWidth(a,"style");return null!=d?d:this._resolveWidth(a,"element")}if("element"==b){var e=a.outerWidth(!1);return 0>=e?"auto":e+"px"}if("style"==b){var f=a.attr("style");if("string"!=typeof f)return null;for(var g=f.split(";"),h=0,i=g.length;i>h;h+=1){var j=g[h].replace(/\s/g,""),k=j.match(c);if(null!==k&&k.length>=1)return k[1]}return null}return b},e.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)},e.prototype._registerDomEvents=function(){var b=this;this.$element.on("change.select2",function(){b.dataAdapter.current(function(a){b.trigger("selection:update",{data:a})})}),this.$element.on("focus.select2",function(a){b.trigger("focus",a)}),this._syncA=c.bind(this._syncAttributes,this),this._syncS=c.bind(this._syncSubtree,this),this.$element[0].attachEvent&&this.$element[0].attachEvent("onpropertychange",this._syncA);var d=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;null!=d?(this._observer=new d(function(c){a.each(c,b._syncA),a.each(c,b._syncS)}),this._observer.observe(this.$element[0],{attributes:!0,childList:!0,subtree:!1})):this.$element[0].addEventListener&&(this.$element[0].addEventListener("DOMAttrModified",b._syncA,!1),this.$element[0].addEventListener("DOMNodeInserted",b._syncS,!1),this.$element[0].addEventListener("DOMNodeRemoved",b._syncS,!1))},e.prototype._registerDataEvents=function(){var a=this;this.dataAdapter.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerSelectionEvents=function(){var b=this,c=["toggle","focus"];this.selection.on("toggle",function(){b.toggleDropdown()}),this.selection.on("focus",function(a){b.focus(a)}),this.selection.on("*",function(d,e){-1===a.inArray(d,c)&&b.trigger(d,e)})},e.prototype._registerDropdownEvents=function(){var a=this;this.dropdown.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerResultsEvents=function(){var a=this;this.results.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerEvents=function(){var a=this;this.on("open",function(){a.$container.addClass("select2-container--open")}),this.on("close",function(){a.$container.removeClass("select2-container--open")}),this.on("enable",function(){a.$container.removeClass("select2-container--disabled")}),this.on("disable",function(){a.$container.addClass("select2-container--disabled")}),this.on("blur",function(){a.$container.removeClass("select2-container--focus")}),this.on("query",function(b){a.isOpen()||a.trigger("open",{}),this.dataAdapter.query(b,function(c){a.trigger("results:all",{data:c,query:b})})}),this.on("query:append",function(b){this.dataAdapter.query(b,function(c){a.trigger("results:append",{data:c,query:b})})}),this.on("keypress",function(b){var c=b.which;a.isOpen()?c===d.ESC||c===d.TAB||c===d.UP&&b.altKey?(a.close(),b.preventDefault()):c===d.ENTER?(a.trigger("results:select",{}),b.preventDefault()):c===d.SPACE&&b.ctrlKey?(a.trigger("results:toggle",{}),b.preventDefault()):c===d.UP?(a.trigger("results:previous",{}),b.preventDefault()):c===d.DOWN&&(a.trigger("results:next",{}),b.preventDefault()):(c===d.ENTER||c===d.SPACE||c===d.DOWN&&b.altKey)&&(a.open(),b.preventDefault())})},e.prototype._syncAttributes=function(){this.options.set("disabled",this.$element.prop("disabled")),this.options.get("disabled")?(this.isOpen()&&this.close(),this.trigger("disable",{})):this.trigger("enable",{})},e.prototype._syncSubtree=function(a,b){var c=!1,d=this;if(!a||!a.target||"OPTION"===a.target.nodeName||"OPTGROUP"===a.target.nodeName){if(b)if(b.addedNodes&&b.addedNodes.length>0)for(var e=0;e<b.addedNodes.length;e++){var f=b.addedNodes[e];f.selected&&(c=!0)}else b.removedNodes&&b.removedNodes.length>0&&(c=!0);else c=!0;c&&this.dataAdapter.current(function(a){d.trigger("selection:update",{data:a})})}},e.prototype.trigger=function(a,b){var c=e.__super__.trigger,d={open:"opening",close:"closing",select:"selecting",unselect:"unselecting"};if(void 0===b&&(b={}),a in d){var f=d[a],g={prevented:!1,name:a,args:b};if(c.call(this,f,g),g.prevented)return void(b.prevented=!0)}c.call(this,a,b)},e.prototype.toggleDropdown=function(){this.options.get("disabled")||(this.isOpen()?this.close():this.open())},e.prototype.open=function(){this.isOpen()||this.trigger("query",{})},e.prototype.close=function(){this.isOpen()&&this.trigger("close",{})},e.prototype.isOpen=function(){return this.$container.hasClass("select2-container--open")},e.prototype.hasFocus=function(){return this.$container.hasClass("select2-container--focus")},e.prototype.focus=function(a){this.hasFocus()||(this.$container.addClass("select2-container--focus"),this.trigger("focus",{}))},e.prototype.enable=function(a){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==a||0===a.length)&&(a=[!0]);var b=!a[0];this.$element.prop("disabled",b)},e.prototype.data=function(){this.options.get("debug")&&arguments.length>0&&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 a=[];return this.dataAdapter.current(function(b){a=b}),a},e.prototype.val=function(b){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==b||0===b.length)return this.$element.val();var c=b[0];a.isArray(c)&&(c=a.map(c,function(a){return a.toString()})),this.$element.val(c).trigger("change")},e.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",this.$element.data("old-tabindex")),this.$element.removeClass("select2-hidden-accessible"),this.$element.attr("aria-hidden","false"),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;
3
- },e.prototype.render=function(){var b=a('<span class="select2 select2-container"><span class="selection"></span><span class="dropdown-wrapper" aria-hidden="true"></span></span>');return b.attr("dir",this.options.get("dir")),this.$container=b,this.$container.addClass("select2-container--"+this.options.get("theme")),b.data("element",this.$element),b},e}),b.define("select2/compat/utils",["jquery"],function(a){function b(b,c,d){var e,f,g=[];e=a.trim(b.attr("class")),e&&(e=""+e,a(e.split(/\s+/)).each(function(){0===this.indexOf("select2-")&&g.push(this)})),e=a.trim(c.attr("class")),e&&(e=""+e,a(e.split(/\s+/)).each(function(){0!==this.indexOf("select2-")&&(f=d(this),null!=f&&g.push(f))})),b.attr("class",g.join(" "))}return{syncCssClasses:b}}),b.define("select2/compat/containerCss",["jquery","./utils"],function(a,b){function c(a){return null}function d(){}return d.prototype.render=function(d){var e=d.call(this),f=this.options.get("containerCssClass")||"";a.isFunction(f)&&(f=f(this.$element));var g=this.options.get("adaptContainerCssClass");if(g=g||c,-1!==f.indexOf(":all:")){f=f.replace(":all:","");var h=g;g=function(a){var b=h(a);return null!=b?b+" "+a:a}}var i=this.options.get("containerCss")||{};return a.isFunction(i)&&(i=i(this.$element)),b.syncCssClasses(e,this.$element,g),e.css(i),e.addClass(f),e},d}),b.define("select2/compat/dropdownCss",["jquery","./utils"],function(a,b){function c(a){return null}function d(){}return d.prototype.render=function(d){var e=d.call(this),f=this.options.get("dropdownCssClass")||"";a.isFunction(f)&&(f=f(this.$element));var g=this.options.get("adaptDropdownCssClass");if(g=g||c,-1!==f.indexOf(":all:")){f=f.replace(":all:","");var h=g;g=function(a){var b=h(a);return null!=b?b+" "+a:a}}var i=this.options.get("dropdownCss")||{};return a.isFunction(i)&&(i=i(this.$element)),b.syncCssClasses(e,this.$element,g),e.css(i),e.addClass(f),e},d}),b.define("select2/compat/initSelection",["jquery"],function(a){function b(a,b,c){c.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=c.get("initSelection"),this._isInitialized=!1,a.call(this,b,c)}return b.prototype.current=function(b,c){var d=this;return this._isInitialized?void b.call(this,c):void this.initSelection.call(null,this.$element,function(b){d._isInitialized=!0,a.isArray(b)||(b=[b]),c(b)})},b}),b.define("select2/compat/inputData",["jquery"],function(a){function b(a,b,c){this._currentData=[],this._valueSeparator=c.get("valueSeparator")||",","hidden"===b.prop("type")&&c.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."),a.call(this,b,c)}return b.prototype.current=function(b,c){function d(b,c){var e=[];return b.selected||-1!==a.inArray(b.id,c)?(b.selected=!0,e.push(b)):b.selected=!1,b.children&&e.push.apply(e,d(b.children,c)),e}for(var e=[],f=0;f<this._currentData.length;f++){var g=this._currentData[f];e.push.apply(e,d(g,this.$element.val().split(this._valueSeparator)))}c(e)},b.prototype.select=function(b,c){if(this.options.get("multiple")){var d=this.$element.val();d+=this._valueSeparator+c.id,this.$element.val(d),this.$element.trigger("change")}else this.current(function(b){a.map(b,function(a){a.selected=!1})}),this.$element.val(c.id),this.$element.trigger("change")},b.prototype.unselect=function(a,b){var c=this;b.selected=!1,this.current(function(a){for(var d=[],e=0;e<a.length;e++){var f=a[e];b.id!=f.id&&d.push(f.id)}c.$element.val(d.join(c._valueSeparator)),c.$element.trigger("change")})},b.prototype.query=function(a,b,c){for(var d=[],e=0;e<this._currentData.length;e++){var f=this._currentData[e],g=this.matches(b,f);null!==g&&d.push(g)}c({results:d})},b.prototype.addOptions=function(b,c){var d=a.map(c,function(b){return a.data(b[0],"data")});this._currentData.push.apply(this._currentData,d)},b}),b.define("select2/compat/matcher",["jquery"],function(a){function b(b){function c(c,d){var e=a.extend(!0,{},d);if(null==c.term||""===a.trim(c.term))return e;if(d.children){for(var f=d.children.length-1;f>=0;f--){var g=d.children[f],h=b(c.term,g.text,g);h||e.children.splice(f,1)}if(e.children.length>0)return e}return b(c.term,d.text,d)?e:null}return c}return b}),b.define("select2/compat/query",[],function(){function a(a,b,c){c.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."),a.call(this,b,c)}return a.prototype.query=function(a,b,c){b.callback=c;var d=this.options.get("query");d.call(null,b)},a}),b.define("select2/dropdown/attachContainer",[],function(){function a(a,b,c){a.call(this,b,c)}return a.prototype.position=function(a,b,c){var d=c.find(".dropdown-wrapper");d.append(b),b.addClass("select2-dropdown--below"),c.addClass("select2-container--below")},a}),b.define("select2/dropdown/stopPropagation",[],function(){function a(){}return a.prototype.bind=function(a,b,c){a.call(this,b,c);var d=["blur","change","click","dblclick","focus","focusin","focusout","input","keydown","keyup","keypress","mousedown","mouseenter","mouseleave","mousemove","mouseover","mouseup","search","touchend","touchstart"];this.$dropdown.on(d.join(" "),function(a){a.stopPropagation()})},a}),b.define("select2/selection/stopPropagation",[],function(){function a(){}return a.prototype.bind=function(a,b,c){a.call(this,b,c);var d=["blur","change","click","dblclick","focus","focusin","focusout","input","keydown","keyup","keypress","mousedown","mouseenter","mouseleave","mousemove","mouseover","mouseup","search","touchend","touchstart"];this.$selection.on(d.join(" "),function(a){a.stopPropagation()})},a}),function(c){"function"==typeof b.define&&b.define.amd?b.define("jquery-mousewheel",["jquery"],c):"object"==typeof exports?module.exports=c:c(a)}(function(a){function b(b){var g=b||window.event,h=i.call(arguments,1),j=0,l=0,m=0,n=0,o=0,p=0;if(b=a.event.fix(g),b.type="mousewheel","detail"in g&&(m=-1*g.detail),"wheelDelta"in g&&(m=g.wheelDelta),"wheelDeltaY"in g&&(m=g.wheelDeltaY),"wheelDeltaX"in g&&(l=-1*g.wheelDeltaX),"axis"in g&&g.axis===g.HORIZONTAL_AXIS&&(l=-1*m,m=0),j=0===m?l:m,"deltaY"in g&&(m=-1*g.deltaY,j=m),"deltaX"in g&&(l=g.deltaX,0===m&&(j=-1*l)),0!==m||0!==l){if(1===g.deltaMode){var q=a.data(this,"mousewheel-line-height");j*=q,m*=q,l*=q}else if(2===g.deltaMode){var r=a.data(this,"mousewheel-page-height");j*=r,m*=r,l*=r}if(n=Math.max(Math.abs(m),Math.abs(l)),(!f||f>n)&&(f=n,d(g,n)&&(f/=40)),d(g,n)&&(j/=40,l/=40,m/=40),j=Math[j>=1?"floor":"ceil"](j/f),l=Math[l>=1?"floor":"ceil"](l/f),m=Math[m>=1?"floor":"ceil"](m/f),k.settings.normalizeOffset&&this.getBoundingClientRect){var s=this.getBoundingClientRect();o=b.clientX-s.left,p=b.clientY-s.top}return b.deltaX=l,b.deltaY=m,b.deltaFactor=f,b.offsetX=o,b.offsetY=p,b.deltaMode=0,h.unshift(b,j,l,m),e&&clearTimeout(e),e=setTimeout(c,200),(a.event.dispatch||a.event.handle).apply(this,h)}}function c(){f=null}function d(a,b){return k.settings.adjustOldDeltas&&"mousewheel"===a.type&&b%120===0}var e,f,g=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],h="onwheel"in document||document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],i=Array.prototype.slice;if(a.event.fixHooks)for(var j=g.length;j;)a.event.fixHooks[g[--j]]=a.event.mouseHooks;var k=a.event.special.mousewheel={version:"3.1.12",setup:function(){if(this.addEventListener)for(var c=h.length;c;)this.addEventListener(h[--c],b,!1);else this.onmousewheel=b;a.data(this,"mousewheel-line-height",k.getLineHeight(this)),a.data(this,"mousewheel-page-height",k.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var c=h.length;c;)this.removeEventListener(h[--c],b,!1);else this.onmousewheel=null;a.removeData(this,"mousewheel-line-height"),a.removeData(this,"mousewheel-page-height")},getLineHeight:function(b){var c=a(b),d=c["offsetParent"in a.fn?"offsetParent":"parent"]();return d.length||(d=a("body")),parseInt(d.css("fontSize"),10)||parseInt(c.css("fontSize"),10)||16},getPageHeight:function(b){return a(b).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};a.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})}),b.define("jquery.select2",["jquery","jquery-mousewheel","./select2/core","./select2/defaults"],function(a,b,c,d){if(null==a.fn.select2){var e=["open","close","destroy"];a.fn.select2=function(b){if(b=b||{},"object"==typeof b)return this.each(function(){var d=a.extend(!0,{},b);new c(a(this),d)}),this;if("string"==typeof b){var d,f=Array.prototype.slice.call(arguments,1);return this.each(function(){var c=a(this).data("select2");null==c&&window.console&&console.error&&console.error("The select2('"+b+"') method was called on an element that is not using Select2."),d=c[b].apply(c,f)}),a.inArray(b,e)>-1?this:d}throw new Error("Invalid arguments for Select2: "+b)}}return null==a.fn.select2.defaults&&(a.fn.select2.defaults=d),c}),{define:b.define,require:b.require}}(),c=b.require("jquery.select2");return a.fn.select2.amd=b,c});
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});
 
ui/lib/select2/js/select2.js CHANGED
@@ -1,5725 +1,6108 @@
1
- /*!
2
- * Select2 4.0.3
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 exports === 'object') {
13
- // Node/CommonJS
14
- factory(require('jquery'));
15
- } else {
16
- // Browser globals
17
- factory(jQuery);
18
- }
19
- }(function (jQuery) {
20
- // This is needed so we can catch the AMD loader configuration and use it
21
- // The inner file should be wrapped (by `banner.start.js`) in a function that
22
- // returns the AMD loader references.
23
- var S2 =
24
- (function () {
25
- // Restore the Select2 AMD loader so it can be used
26
- // Needed mostly in the language files, where the loader is not inserted
27
- if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd) {
28
- var S2 = jQuery.fn.select2.amd;
29
- }
30
- var S2;(function () { if (!S2 || !S2.requirejs) {
31
- if (!S2) { S2 = {}; } else { require = S2; }
32
- /**
33
- * @license almond 0.3.1 Copyright (c) 2011-2014, The Dojo Foundation All Rights Reserved.
34
- * Available via the MIT or new BSD license.
35
- * see: http://github.com/jrburke/almond for details
36
- */
37
- //Going sloppy to avoid 'use strict' string cost, but strict practices should
38
- //be followed.
39
- /*jslint sloppy: true */
40
- /*global setTimeout: false */
41
-
42
- var requirejs, require, define;
43
- (function (undef) {
44
- var main, req, makeMap, handlers,
45
- defined = {},
46
- waiting = {},
47
- config = {},
48
- defining = {},
49
- hasOwn = Object.prototype.hasOwnProperty,
50
- aps = [].slice,
51
- jsSuffixRegExp = /\.js$/;
52
-
53
- function hasProp(obj, prop) {
54
- return hasOwn.call(obj, prop);
55
- }
56
-
57
- /**
58
- * Given a relative module name, like ./something, normalize it to
59
- * a real name that can be mapped to a path.
60
- * @param {String} name the relative name
61
- * @param {String} baseName a real name that the name arg is relative
62
- * to.
63
- * @returns {String} normalized name
64
- */
65
- function normalize(name, baseName) {
66
- var nameParts, nameSegment, mapValue, foundMap, lastIndex,
67
- foundI, foundStarMap, starI, i, j, part,
68
- baseParts = baseName && baseName.split("/"),
69
- map = config.map,
70
- starMap = (map && map['*']) || {};
71
-
72
- //Adjust any relative paths.
73
- if (name && name.charAt(0) === ".") {
74
- //If have a base name, try to normalize against it,
75
- //otherwise, assume it is a top-level require that will
76
- //be relative to baseUrl in the end.
77
- if (baseName) {
78
- name = name.split('/');
79
- lastIndex = name.length - 1;
80
-
81
- // Node .js allowance:
82
- if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {
83
- name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');
84
- }
85
-
86
- //Lop off the last part of baseParts, so that . matches the
87
- //"directory" and not name of the baseName's module. For instance,
88
- //baseName of "one/two/three", maps to "one/two/three.js", but we
89
- //want the directory, "one/two" for this normalization.
90
- name = baseParts.slice(0, baseParts.length - 1).concat(name);
91
-
92
- //start trimDots
93
- for (i = 0; i < name.length; i += 1) {
94
- part = name[i];
95
- if (part === ".") {
96
- name.splice(i, 1);
97
- i -= 1;
98
- } else if (part === "..") {
99
- if (i === 1 && (name[2] === '..' || name[0] === '..')) {
100
- //End of the line. Keep at least one non-dot
101
- //path segment at the front so it can be mapped
102
- //correctly to disk. Otherwise, there is likely
103
- //no path mapping for a path starting with '..'.
104
- //This can still fail, but catches the most reasonable
105
- //uses of ..
106
- break;
107
- } else if (i > 0) {
108
- name.splice(i - 1, 2);
109
- i -= 2;
110
- }
111
- }
112
- }
113
- //end trimDots
114
-
115
- name = name.join("/");
116
- } else if (name.indexOf('./') === 0) {
117
- // No baseName, so this is ID is resolved relative
118
- // to baseUrl, pull off the leading dot.
119
- name = name.substring(2);
120
- }
121
- }
122
-
123
- //Apply map config if available.
124
- if ((baseParts || starMap) && map) {
125
- nameParts = name.split('/');
126
-
127
- for (i = nameParts.length; i > 0; i -= 1) {
128
- nameSegment = nameParts.slice(0, i).join("/");
129
-
130
- if (baseParts) {
131
- //Find the longest baseName segment match in the config.
132
- //So, do joins on the biggest to smallest lengths of baseParts.
133
- for (j = baseParts.length; j > 0; j -= 1) {
134
- mapValue = map[baseParts.slice(0, j).join('/')];
135
-
136
- //baseName segment has config, find if it has one for
137
- //this name.
138
- if (mapValue) {
139
- mapValue = mapValue[nameSegment];
140
- if (mapValue) {
141
- //Match, update name to the new value.
142
- foundMap = mapValue;
143
- foundI = i;
144
- break;
145
- }
146
- }
147
- }
148
- }
149
-
150
- if (foundMap) {
151
- break;
152
- }
153
-
154
- //Check for a star map match, but just hold on to it,
155
- //if there is a shorter segment match later in a matching
156
- //config, then favor over this star map.
157
- if (!foundStarMap && starMap && starMap[nameSegment]) {
158
- foundStarMap = starMap[nameSegment];
159
- starI = i;
160
- }
161
- }
162
-
163
- if (!foundMap && foundStarMap) {
164
- foundMap = foundStarMap;
165
- foundI = starI;
166
- }
167
-
168
- if (foundMap) {
169
- nameParts.splice(0, foundI, foundMap);
170
- name = nameParts.join('/');
171
- }
172
- }
173
-
174
- return name;
175
- }
176
-
177
- function makeRequire(relName, forceSync) {
178
- return function () {
179
- //A version of a require function that passes a moduleName
180
- //value for items that may need to
181
- //look up paths relative to the moduleName
182
- var args = aps.call(arguments, 0);
183
-
184
- //If first arg is not require('string'), and there is only
185
- //one arg, it is the array form without a callback. Insert
186
- //a null so that the following concat is correct.
187
- if (typeof args[0] !== 'string' && args.length === 1) {
188
- args.push(null);
189
- }
190
- return req.apply(undef, args.concat([relName, forceSync]));
191
- };
192
- }
193
-
194
- function makeNormalize(relName) {
195
- return function (name) {
196
- return normalize(name, relName);
197
- };
198
- }
199
-
200
- function makeLoad(depName) {
201
- return function (value) {
202
- defined[depName] = value;
203
- };
204
- }
205
-
206
- function callDep(name) {
207
- if (hasProp(waiting, name)) {
208
- var args = waiting[name];
209
- delete waiting[name];
210
- defining[name] = true;
211
- main.apply(undef, args);
212
- }
213
-
214
- if (!hasProp(defined, name) && !hasProp(defining, name)) {
215
- throw new Error('No ' + name);
216
- }
217
- return defined[name];
218
- }
219
-
220
- //Turns a plugin!resource to [plugin, resource]
221
- //with the plugin being undefined if the name
222
- //did not have a plugin prefix.
223
- function splitPrefix(name) {
224
- var prefix,
225
- index = name ? name.indexOf('!') : -1;
226
- if (index > -1) {
227
- prefix = name.substring(0, index);
228
- name = name.substring(index + 1, name.length);
229
- }
230
- return [prefix, name];
231
- }
232
-
233
- /**
234
- * Makes a name map, normalizing the name, and using a plugin
235
- * for normalization if necessary. Grabs a ref to plugin
236
- * too, as an optimization.
237
- */
238
- makeMap = function (name, relName) {
239
- var plugin,
240
- parts = splitPrefix(name),
241
- prefix = parts[0];
242
-
243
- name = parts[1];
244
-
245
- if (prefix) {
246
- prefix = normalize(prefix, relName);
247
- plugin = callDep(prefix);
248
- }
249
-
250
- //Normalize according
251
- if (prefix) {
252
- if (plugin && plugin.normalize) {
253
- name = plugin.normalize(name, makeNormalize(relName));
254
- } else {
255
- name = normalize(name, relName);
256
- }
257
- } else {
258
- name = normalize(name, relName);
259
- parts = splitPrefix(name);
260
- prefix = parts[0];
261
- name = parts[1];
262
- if (prefix) {
263
- plugin = callDep(prefix);
264
- }
265
- }
266
-
267
- //Using ridiculous property names for space reasons
268
- return {
269
- f: prefix ? prefix + '!' + name : name, //fullName
270
- n: name,
271
- pr: prefix,
272
- p: plugin
273
- };
274
- };
275
-
276
- function makeConfig(name) {
277
- return function () {
278
- return (config && config.config && config.config[name]) || {};
279
- };
280
- }
281
-
282
- handlers = {
283
- require: function (name) {
284
- return makeRequire(name);
285
- },
286
- exports: function (name) {
287
- var e = defined[name];
288
- if (typeof e !== 'undefined') {
289
- return e;
290
- } else {
291
- return (defined[name] = {});
292
- }
293
- },
294
- module: function (name) {
295
- return {
296
- id: name,
297
- uri: '',
298
- exports: defined[name],
299
- config: makeConfig(name)
300
- };
301
- }
302
- };
303
-
304
- main = function (name, deps, callback, relName) {
305
- var cjsModule, depName, ret, map, i,
306
- args = [],
307
- callbackType = typeof callback,
308
- usingExports;
309
-
310
- //Use name if no relName
311
- relName = relName || name;
312
-
313
- //Call the callback to define the module, if necessary.
314
- if (callbackType === 'undefined' || callbackType === 'function') {
315
- //Pull out the defined dependencies and pass the ordered
316
- //values to the callback.
317
- //Default to [require, exports, module] if no deps
318
- deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;
319
- for (i = 0; i < deps.length; i += 1) {
320
- map = makeMap(deps[i], relName);
321
- depName = map.f;
322
-
323
- //Fast path CommonJS standard dependencies.
324
- if (depName === "require") {
325
- args[i] = handlers.require(name);
326
- } else if (depName === "exports") {
327
- //CommonJS module spec 1.1
328
- args[i] = handlers.exports(name);
329
- usingExports = true;
330
- } else if (depName === "module") {
331
- //CommonJS module spec 1.1
332
- cjsModule = args[i] = handlers.module(name);
333
- } else if (hasProp(defined, depName) ||
334
- hasProp(waiting, depName) ||
335
- hasProp(defining, depName)) {
336
- args[i] = callDep(depName);
337
- } else if (map.p) {
338
- map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});
339
- args[i] = defined[depName];
340
- } else {
341
- throw new Error(name + ' missing ' + depName);
342
- }
343
- }
344
-
345
- ret = callback ? callback.apply(defined[name], args) : undefined;
346
-
347
- if (name) {
348
- //If setting exports via "module" is in play,
349
- //favor that over return value and exports. After that,
350
- //favor a non-undefined return value over exports use.
351
- if (cjsModule && cjsModule.exports !== undef &&
352
- cjsModule.exports !== defined[name]) {
353
- defined[name] = cjsModule.exports;
354
- } else if (ret !== undef || !usingExports) {
355
- //Use the return value from the function.
356
- defined[name] = ret;
357
- }
358
- }
359
- } else if (name) {
360
- //May just be an object definition for the module. Only
361
- //worry about defining if have a module name.
362
- defined[name] = callback;
363
- }
364
- };
365
-
366
- requirejs = require = req = function (deps, callback, relName, forceSync, alt) {
367
- if (typeof deps === "string") {
368
- if (handlers[deps]) {
369
- //callback in this case is really relName
370
- return handlers[deps](callback);
371
- }
372
- //Just return the module wanted. In this scenario, the
373
- //deps arg is the module name, and second arg (if passed)
374
- //is just the relName.
375
- //Normalize module name, if it contains . or ..
376
- return callDep(makeMap(deps, callback).f);
377
- } else if (!deps.splice) {
378
- //deps is a config object, not an array.
379
- config = deps;
380
- if (config.deps) {
381
- req(config.deps, config.callback);
382
- }
383
- if (!callback) {
384
- return;
385
- }
386
-
387
- if (callback.splice) {
388
- //callback is an array, which means it is a dependency list.
389
- //Adjust args if there are dependencies
390
- deps = callback;
391
- callback = relName;
392
- relName = null;
393
- } else {
394
- deps = undef;
395
- }
396
- }
397
-
398
- //Support require(['a'])
399
- callback = callback || function () {};
400
-
401
- //If relName is a function, it is an errback handler,
402
- //so remove it.
403
- if (typeof relName === 'function') {
404
- relName = forceSync;
405
- forceSync = alt;
406
- }
407
-
408
- //Simulate async callback;
409
- if (forceSync) {
410
- main(undef, deps, callback, relName);
411
- } else {
412
- //Using a non-zero value because of concern for what old browsers
413
- //do, and latest browsers "upgrade" to 4 if lower value is used:
414
- //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:
415
- //If want a value immediately, use require('id') instead -- something
416
- //that works in almond on the global level, but not guaranteed and
417
- //unlikely to work in other AMD implementations.
418
- setTimeout(function () {
419
- main(undef, deps, callback, relName);
420
- }, 4);
421
- }
422
-
423
- return req;
424
- };
425
-
426
- /**
427
- * Just drops the config on the floor, but returns req in case
428
- * the config return value is used.
429
- */
430
- req.config = function (cfg) {
431
- return req(cfg);
432
- };
433
-
434
- /**
435
- * Expose module registry for debugging and tooling
436
- */
437
- requirejs._defined = defined;
438
-
439
- define = function (name, deps, callback) {
440
- if (typeof name !== 'string') {
441
- throw new Error('See almond README: incorrect module build, no module name');
442
- }
443
-
444
- //This module may not have dependencies
445
- if (!deps.splice) {
446
- //deps is not an array, so probably means
447
- //an object literal or factory function for
448
- //the value. Adjust args.
449
- callback = deps;
450
- deps = [];
451
- }
452
-
453
- if (!hasProp(defined, name) && !hasProp(waiting, name)) {
454
- waiting[name] = [name, deps, callback];
455
- }
456
- };
457
-
458
- define.amd = {
459
- jQuery: true
460
- };
461
- }());
462
-
463
- S2.requirejs = requirejs;S2.require = require;S2.define = define;
464
- }
465
- }());
466
- S2.define("almond", function(){});
467
-
468
- /* global jQuery:false, $:false */
469
- S2.define('jquery',[],function () {
470
- var _$ = jQuery || $;
471
-
472
- if (_$ == null && console && console.error) {
473
- console.error(
474
- 'Select2: An instance of jQuery or a jQuery-compatible library was not ' +
475
- 'found. Make sure that you are including jQuery before Select2 on your ' +
476
- 'web page.'
477
- );
478
- }
479
-
480
- return _$;
481
- });
482
-
483
- S2.define('select2/utils',[
484
- 'jquery'
485
- ], function ($) {
486
- var Utils = {};
487
-
488
- Utils.Extend = function (ChildClass, SuperClass) {
489
- var __hasProp = {}.hasOwnProperty;
490
-
491
- function BaseConstructor () {
492
- this.constructor = ChildClass;
493
- }
494
-
495
- for (var key in SuperClass) {
496
- if (__hasProp.call(SuperClass, key)) {
497
- ChildClass[key] = SuperClass[key];
498
- }
499
- }
500
-
501
- BaseConstructor.prototype = SuperClass.prototype;
502
- ChildClass.prototype = new BaseConstructor();
503
- ChildClass.__super__ = SuperClass.prototype;
504
-
505
- return ChildClass;
506
- };
507
-
508
- function getMethods (theClass) {
509
- var proto = theClass.prototype;
510
-
511
- var methods = [];
512
-
513
- for (var methodName in proto) {
514
- var m = proto[methodName];
515
-
516
- if (typeof m !== 'function') {
517
- continue;
518
- }
519
-
520
- if (methodName === 'constructor') {
521
- continue;
522
- }
523
-
524
- methods.push(methodName);
525
- }
526
-
527
- return methods;
528
- }
529
-
530
- Utils.Decorate = function (SuperClass, DecoratorClass) {
531
- var decoratedMethods = getMethods(DecoratorClass);
532
- var superMethods = getMethods(SuperClass);
533
-
534
- function DecoratedClass () {
535
- var unshift = Array.prototype.unshift;
536
-
537
- var argCount = DecoratorClass.prototype.constructor.length;
538
-
539
- var calledConstructor = SuperClass.prototype.constructor;
540
-
541
- if (argCount > 0) {
542
- unshift.call(arguments, SuperClass.prototype.constructor);
543
-
544
- calledConstructor = DecoratorClass.prototype.constructor;
545
- }
546
-
547
- calledConstructor.apply(this, arguments);
548
- }
549
-
550
- DecoratorClass.displayName = SuperClass.displayName;
551
-
552
- function ctr () {
553
- this.constructor = DecoratedClass;
554
- }
555
-
556
- DecoratedClass.prototype = new ctr();
557
-
558
- for (var m = 0; m < superMethods.length; m++) {
559
- var superMethod = superMethods[m];
560
-
561
- DecoratedClass.prototype[superMethod] =
562
- SuperClass.prototype[superMethod];
563
- }
564
-
565
- var calledMethod = function (methodName) {
566
- // Stub out the original method if it's not decorating an actual method
567
- var originalMethod = function () {};
568
-
569
- if (methodName in DecoratedClass.prototype) {
570
- originalMethod = DecoratedClass.prototype[methodName];
571
- }
572
-
573
- var decoratedMethod = DecoratorClass.prototype[methodName];
574
-
575
- return function () {
576
- var unshift = Array.prototype.unshift;
577
-
578
- unshift.call(arguments, originalMethod);
579
-
580
- return decoratedMethod.apply(this, arguments);
581
- };
582
- };
583
-
584
- for (var d = 0; d < decoratedMethods.length; d++) {
585
- var decoratedMethod = decoratedMethods[d];
586
-
587
- DecoratedClass.prototype[decoratedMethod] = calledMethod(decoratedMethod);
588
- }
589
-
590
- return DecoratedClass;
591
- };
592
-
593
- var Observable = function () {
594
- this.listeners = {};
595
- };
596
-
597
- Observable.prototype.on = function (event, callback) {
598
- this.listeners = this.listeners || {};
599
-
600
- if (event in this.listeners) {
601
- this.listeners[event].push(callback);
602
- } else {
603
- this.listeners[event] = [callback];
604
- }
605
- };
606
-
607
- Observable.prototype.trigger = function (event) {
608
- var slice = Array.prototype.slice;
609
- var params = slice.call(arguments, 1);
610
-
611
- this.listeners = this.listeners || {};
612
-
613
- // Params should always come in as an array
614
- if (params == null) {
615
- params = [];
616
- }
617
-
618
- // If there are no arguments to the event, use a temporary object
619
- if (params.length === 0) {
620
- params.push({});
621
- }
622
-
623
- // Set the `_type` of the first object to the event
624
- params[0]._type = event;
625
-
626
- if (event in this.listeners) {
627
- this.invoke(this.listeners[event], slice.call(arguments, 1));
628
- }
629
-
630
- if ('*' in this.listeners) {
631
- this.invoke(this.listeners['*'], arguments);
632
- }
633
- };
634
-
635
- Observable.prototype.invoke = function (listeners, params) {
636
- for (var i = 0, len = listeners.length; i < len; i++) {
637
- listeners[i].apply(this, params);
638
- }
639
- };
640
-
641
- Utils.Observable = Observable;
642
-
643
- Utils.generateChars = function (length) {
644
- var chars = '';
645
-
646
- for (var i = 0; i < length; i++) {
647
- var randomChar = Math.floor(Math.random() * 36);
648
- chars += randomChar.toString(36);
649
- }
650
-
651
- return chars;
652
- };
653
-
654
- Utils.bind = function (func, context) {
655
- return function () {
656
- func.apply(context, arguments);
657
- };
658
- };
659
-
660
- Utils._convertData = function (data) {
661
- for (var originalKey in data) {
662
- var keys = originalKey.split('-');
663
-
664
- var dataLevel = data;
665
-
666
- if (keys.length === 1) {
667
- continue;
668
- }
669
-
670
- for (var k = 0; k < keys.length; k++) {
671
- var key = keys[k];
672
-
673
- // Lowercase the first letter
674
- // By default, dash-separated becomes camelCase
675
- key = key.substring(0, 1).toLowerCase() + key.substring(1);
676
-
677
- if (!(key in dataLevel)) {
678
- dataLevel[key] = {};
679
- }
680
-
681
- if (k == keys.length - 1) {
682
- dataLevel[key] = data[originalKey];
683
- }
684
-
685
- dataLevel = dataLevel[key];
686
- }
687
-
688
- delete data[originalKey];
689
- }
690
-
691
- return data;
692
- };
693
-
694
- Utils.hasScroll = function (index, el) {
695
- // Adapted from the function created by @ShadowScripter
696
- // and adapted by @BillBarry on the Stack Exchange Code Review website.
697
- // The original code can be found at
698
- // http://codereview.stackexchange.com/q/13338
699
- // and was designed to be used with the Sizzle selector engine.
700
-
701
- var $el = $(el);
702
- var overflowX = el.style.overflowX;
703
- var overflowY = el.style.overflowY;
704
-
705
- //Check both x and y declarations
706
- if (overflowX === overflowY &&
707
- (overflowY === 'hidden' || overflowY === 'visible')) {
708
- return false;
709
- }
710
-
711
- if (overflowX === 'scroll' || overflowY === 'scroll') {
712
- return true;
713
- }
714
-
715
- return ($el.innerHeight() < el.scrollHeight ||
716
- $el.innerWidth() < el.scrollWidth);
717
- };
718
-
719
- Utils.escapeMarkup = function (markup) {
720
- var replaceMap = {
721
- '\\': '&#92;',
722
- '&': '&amp;',
723
- '<': '&lt;',
724
- '>': '&gt;',
725
- '"': '&quot;',
726
- '\'': '&#39;',
727
- '/': '&#47;'
728
- };
729
-
730
- // Do not try to escape the markup if it's not a string
731
- if (typeof markup !== 'string') {
732
- return markup;
733
- }
734
-
735
- return String(markup).replace(/[&<>"'\/\\]/g, function (match) {
736
- return replaceMap[match];
737
- });
738
- };
739
-
740
- // Append an array of jQuery nodes to a given element.
741
- Utils.appendMany = function ($element, $nodes) {
742
- // jQuery 1.7.x does not support $.fn.append() with an array
743
- // Fall back to a jQuery object collection using $.fn.add()
744
- if ($.fn.jquery.substr(0, 3) === '1.7') {
745
- var $jqNodes = $();
746
-
747
- $.map($nodes, function (node) {
748
- $jqNodes = $jqNodes.add(node);
749
- });
750
-
751
- $nodes = $jqNodes;
752
- }
753
-
754
- $element.append($nodes);
755
- };
756
-
757
- return Utils;
758
- });
759
-
760
- S2.define('select2/results',[
761
- 'jquery',
762
- './utils'
763
- ], function ($, Utils) {
764
- function Results ($element, options, dataAdapter) {
765
- this.$element = $element;
766
- this.data = dataAdapter;
767
- this.options = options;
768
-
769
- Results.__super__.constructor.call(this);
770
- }
771
-
772
- Utils.Extend(Results, Utils.Observable);
773
-
774
- Results.prototype.render = function () {
775
- var $results = $(
776
- '<ul class="select2-results__options" role="tree"></ul>'
777
- );
778
-
779
- if (this.options.get('multiple')) {
780
- $results.attr('aria-multiselectable', 'true');
781
- }
782
-
783
- this.$results = $results;
784
-
785
- return $results;
786
- };
787
-
788
- Results.prototype.clear = function () {
789
- this.$results.empty();
790
- };
791
-
792
- Results.prototype.displayMessage = function (params) {
793
- var escapeMarkup = this.options.get('escapeMarkup');
794
-
795
- this.clear();
796
- this.hideLoading();
797
-
798
- var $message = $(
799
- '<li role="treeitem" aria-live="assertive"' +
800
- ' class="select2-results__option"></li>'
801
- );
802
-
803
- var message = this.options.get('translations').get(params.message);
804
-
805
- $message.append(
806
- escapeMarkup(
807
- message(params.args)
808
- )
809
- );
810
-
811
- $message[0].className += ' select2-results__message';
812
-
813
- this.$results.append($message);
814
- };
815
-
816
- Results.prototype.hideMessages = function () {
817
- this.$results.find('.select2-results__message').remove();
818
- };
819
-
820
- Results.prototype.append = function (data) {
821
- this.hideLoading();
822
-
823
- var $options = [];
824
-
825
- if (data.results == null || data.results.length === 0) {
826
- if (this.$results.children().length === 0) {
827
- this.trigger('results:message', {
828
- message: 'noResults'
829
- });
830
- }
831
-
832
- return;
833
- }
834
-
835
- data.results = this.sort(data.results);
836
-
837
- for (var d = 0; d < data.results.length; d++) {
838
- var item = data.results[d];
839
-
840
- var $option = this.option(item);
841
-
842
- $options.push($option);
843
- }
844
-
845
- this.$results.append($options);
846
- };
847
-
848
- Results.prototype.position = function ($results, $dropdown) {
849
- var $resultsContainer = $dropdown.find('.select2-results');
850
- $resultsContainer.append($results);
851
- };
852
-
853
- Results.prototype.sort = function (data) {
854
- var sorter = this.options.get('sorter');
855
-
856
- return sorter(data);
857
- };
858
-
859
- Results.prototype.highlightFirstItem = function () {
860
- var $options = this.$results
861
- .find('.select2-results__option[aria-selected]');
862
-
863
- var $selected = $options.filter('[aria-selected=true]');
864
-
865
- // Check if there are any selected options
866
- if ($selected.length > 0) {
867
- // If there are selected options, highlight the first
868
- $selected.first().trigger('mouseenter');
869
- } else {
870
- // If there are no selected options, highlight the first option
871
- // in the dropdown
872
- $options.first().trigger('mouseenter');
873
- }
874
-
875
- this.ensureHighlightVisible();
876
- };
877
-
878
- Results.prototype.setClasses = function () {
879
- var self = this;
880
-
881
- this.data.current(function (selected) {
882
- var selectedIds = $.map(selected, function (s) {
883
- return s.id.toString();
884
- });
885
-
886
- var $options = self.$results
887
- .find('.select2-results__option[aria-selected]');
888
-
889
- $options.each(function () {
890
- var $option = $(this);
891
-
892
- var item = $.data(this, 'data');
893
-
894
- // id needs to be converted to a string when comparing
895
- var id = '' + item.id;
896
-
897
- if ((item.element != null && item.element.selected) ||
898
- (item.element == null && $.inArray(id, selectedIds) > -1)) {
899
- $option.attr('aria-selected', 'true');
900
- } else {
901
- $option.attr('aria-selected', 'false');
902
- }
903
- });
904
-
905
- });
906
- };
907
-
908
- Results.prototype.showLoading = function (params) {
909
- this.hideLoading();
910
-
911
- var loadingMore = this.options.get('translations').get('searching');
912
-
913
- var loading = {
914
- disabled: true,
915
- loading: true,
916
- text: loadingMore(params)
917
- };
918
- var $loading = this.option(loading);
919
- $loading.className += ' loading-results';
920
-
921
- this.$results.prepend($loading);
922
- };
923
-
924
- Results.prototype.hideLoading = function () {
925
- this.$results.find('.loading-results').remove();
926
- };
927
-
928
- Results.prototype.option = function (data) {
929
- var option = document.createElement('li');
930
- option.className = 'select2-results__option';
931
-
932
- var attrs = {
933
- 'role': 'treeitem',
934
- 'aria-selected': 'false'
935
- };
936
-
937
- if (data.disabled) {
938
- delete attrs['aria-selected'];
939
- attrs['aria-disabled'] = 'true';
940
- }
941
-
942
- if (data.id == null) {
943
- delete attrs['aria-selected'];
944
- }
945
-
946
- if (data._resultId != null) {
947
- option.id = data._resultId;
948
- }
949
-
950
- if (data.title) {
951
- option.title = data.title;
952
- }
953
-
954
- if (data.children) {
955
- attrs.role = 'group';
956
- attrs['aria-label'] = data.text;
957
- delete attrs['aria-selected'];
958
- }
959
-
960
- for (var attr in attrs) {
961
- var val = attrs[attr];
962
-
963
- option.setAttribute(attr, val);
964
- }
965
-
966
- if (data.children) {
967
- var $option = $(option);
968
-
969
- var label = document.createElement('strong');
970
- label.className = 'select2-results__group';
971
-
972
- var $label = $(label);
973
- this.template(data, label);
974
-
975
- var $children = [];
976
-
977
- for (var c = 0; c < data.children.length; c++) {
978
- var child = data.children[c];
979
-
980
- var $child = this.option(child);
981
-
982
- $children.push($child);
983
- }
984
-
985
- var $childrenContainer = $('<ul></ul>', {
986
- 'class': 'select2-results__options select2-results__options--nested'
987
- });
988
-
989
- $childrenContainer.append($children);
990
-
991
- $option.append(label);
992
- $option.append($childrenContainer);
993
- } else {
994
- this.template(data, option);
995
- }
996
-
997
- $.data(option, 'data', data);
998
-
999
- return option;
1000
- };
1001
-
1002
- Results.prototype.bind = function (container, $container) {
1003
- var self = this;
1004
-
1005
- var id = container.id + '-results';
1006
-
1007
- this.$results.attr('id', id);
1008
-
1009
- container.on('results:all', function (params) {
1010
- self.clear();
1011
- self.append(params.data);
1012
-
1013
- if (container.isOpen()) {
1014
- self.setClasses();
1015
- self.highlightFirstItem();
1016
- }
1017
- });
1018
-
1019
- container.on('results:append', function (params) {
1020
- self.append(params.data);
1021
-
1022
- if (container.isOpen()) {
1023
- self.setClasses();
1024
- }
1025
- });
1026
-
1027
- container.on('query', function (params) {
1028
- self.hideMessages();
1029
- self.showLoading(params);
1030
- });
1031
-
1032
- container.on('select', function () {
1033
- if (!container.isOpen()) {
1034
- return;
1035
- }
1036
-
1037
- self.setClasses();
1038
- self.highlightFirstItem();
1039
- });
1040
-
1041
- container.on('unselect', function () {
1042
- if (!container.isOpen()) {
1043
- return;
1044
- }
1045
-
1046
- self.setClasses();
1047
- self.highlightFirstItem();
1048
- });
1049
-
1050
- container.on('open', function () {
1051
- // When the dropdown is open, aria-expended="true"
1052
- self.$results.attr('aria-expanded', 'true');
1053
- self.$results.attr('aria-hidden', 'false');
1054
-
1055
- self.setClasses();
1056
- self.ensureHighlightVisible();
1057
- });
1058
-
1059
- container.on('close', function () {
1060
- // When the dropdown is closed, aria-expended="false"
1061
- self.$results.attr('aria-expanded', 'false');
1062
- self.$results.attr('aria-hidden', 'true');
1063
- self.$results.removeAttr('aria-activedescendant');
1064
- });
1065
-
1066
- container.on('results:toggle', function () {
1067
- var $highlighted = self.getHighlightedResults();
1068
-
1069
- if ($highlighted.length === 0) {
1070
- return;
1071
- }
1072
-
1073
- $highlighted.trigger('mouseup');
1074
- });
1075
-
1076
- container.on('results:select', function () {
1077
- var $highlighted = self.getHighlightedResults();
1078
-
1079
- if ($highlighted.length === 0) {
1080
- return;
1081
- }
1082
-
1083
- var data = $highlighted.data('data');
1084
-
1085
- if ($highlighted.attr('aria-selected') == 'true') {
1086
- self.trigger('close', {});
1087
- } else {
1088
- self.trigger('select', {
1089
- data: data
1090
- });
1091
- }
1092
- });
1093
-
1094
- container.on('results:previous', function () {
1095
- var $highlighted = self.getHighlightedResults();
1096
-
1097
- var $options = self.$results.find('[aria-selected]');
1098
-
1099
- var currentIndex = $options.index($highlighted);
1100
-
1101
- // If we are already at te top, don't move further
1102
- if (currentIndex === 0) {
1103
- return;
1104
- }
1105
-
1106
- var nextIndex = currentIndex - 1;
1107
-
1108
- // If none are highlighted, highlight the first
1109
- if ($highlighted.length === 0) {
1110
- nextIndex = 0;
1111
- }
1112
-
1113
- var $next = $options.eq(nextIndex);
1114
-
1115
- $next.trigger('mouseenter');
1116
-
1117
- var currentOffset = self.$results.offset().top;
1118
- var nextTop = $next.offset().top;
1119
- var nextOffset = self.$results.scrollTop() + (nextTop - currentOffset);
1120
-
1121
- if (nextIndex === 0) {
1122
- self.$results.scrollTop(0);
1123
- } else if (nextTop - currentOffset < 0) {
1124
- self.$results.scrollTop(nextOffset);
1125
- }
1126
- });
1127
-
1128
- container.on('results:next', function () {
1129
- var $highlighted = self.getHighlightedResults();
1130
-
1131
- var $options = self.$results.find('[aria-selected]');
1132
-
1133
- var currentIndex = $options.index($highlighted);
1134
-
1135
- var nextIndex = currentIndex + 1;
1136
-
1137
- // If we are at the last option, stay there
1138
- if (nextIndex >= $options.length) {
1139
- return;
1140
- }
1141
-
1142
- var $next = $options.eq(nextIndex);
1143
-
1144
- $next.trigger('mouseenter');
1145
-
1146
- var currentOffset = self.$results.offset().top +
1147
- self.$results.outerHeight(false);
1148
- var nextBottom = $next.offset().top + $next.outerHeight(false);
1149
- var nextOffset = self.$results.scrollTop() + nextBottom - currentOffset;
1150
-
1151
- if (nextIndex === 0) {
1152
- self.$results.scrollTop(0);
1153
- } else if (nextBottom > currentOffset) {
1154
- self.$results.scrollTop(nextOffset);
1155
- }
1156
- });
1157
-
1158
- container.on('results:focus', function (params) {
1159
- params.element.addClass('select2-results__option--highlighted');
1160
- });
1161
-
1162
- container.on('results:message', function (params) {
1163
- self.displayMessage(params);
1164
- });
1165
-
1166
- if ($.fn.mousewheel) {
1167
- this.$results.on('mousewheel', function (e) {
1168
- var top = self.$results.scrollTop();
1169
-
1170
- var bottom = self.$results.get(0).scrollHeight - top + e.deltaY;
1171
-
1172
- var isAtTop = e.deltaY > 0 && top - e.deltaY <= 0;
1173
- var isAtBottom = e.deltaY < 0 && bottom <= self.$results.height();
1174
-
1175
- if (isAtTop) {
1176
- self.$results.scrollTop(0);
1177
-
1178
- e.preventDefault();
1179
- e.stopPropagation();
1180
- } else if (isAtBottom) {
1181
- self.$results.scrollTop(
1182
- self.$results.get(0).scrollHeight - self.$results.height()
1183
- );
1184
-
1185
- e.preventDefault();
1186
- e.stopPropagation();
1187
- }
1188
- });
1189
- }
1190
-
1191
- this.$results.on('mouseup', '.select2-results__option[aria-selected]',
1192
- function (evt) {
1193
- var $this = $(this);
1194
-
1195
- var data = $this.data('data');
1196
-
1197
- if ($this.attr('aria-selected') === 'true') {
1198
- if (self.options.get('multiple')) {
1199
- self.trigger('unselect', {
1200
- originalEvent: evt,
1201
- data: data
1202
- });
1203
- } else {
1204
- self.trigger('close', {});
1205
- }
1206
-
1207
- return;
1208
- }
1209
-
1210
- self.trigger('select', {
1211
- originalEvent: evt,
1212
- data: data
1213
- });
1214
- });
1215
-
1216
- this.$results.on('mouseenter', '.select2-results__option[aria-selected]',
1217
- function (evt) {
1218
- var data = $(this).data('data');
1219
-
1220
- self.getHighlightedResults()
1221
- .removeClass('select2-results__option--highlighted');
1222
-
1223
- self.trigger('results:focus', {
1224
- data: data,
1225
- element: $(this)
1226
- });
1227
- });
1228
- };
1229
-
1230
- Results.prototype.getHighlightedResults = function () {
1231
- var $highlighted = this.$results
1232
- .find('.select2-results__option--highlighted');
1233
-
1234
- return $highlighted;
1235
- };
1236
-
1237
- Results.prototype.destroy = function () {
1238
- this.$results.remove();
1239
- };
1240
-
1241
- Results.prototype.ensureHighlightVisible = function () {
1242
- var $highlighted = this.getHighlightedResults();
1243
-
1244
- if ($highlighted.length === 0) {
1245
- return;
1246
- }
1247
-
1248
- var $options = this.$results.find('[aria-selected]');
1249
-
1250
- var currentIndex = $options.index($highlighted);
1251
-
1252
- var currentOffset = this.$results.offset().top;
1253
- var nextTop = $highlighted.offset().top;
1254
- var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);
1255
-
1256
- var offsetDelta = nextTop - currentOffset;
1257
- nextOffset -= $highlighted.outerHeight(false) * 2;
1258
-
1259
- if (currentIndex <= 2) {
1260
- this.$results.scrollTop(0);
1261
- } else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {
1262
- this.$results.scrollTop(nextOffset);
1263
- }
1264
- };
1265
-
1266
- Results.prototype.template = function (result, container) {
1267
- var template = this.options.get('templateResult');
1268
- var escapeMarkup = this.options.get('escapeMarkup');
1269
-
1270
- var content = template(result, container);
1271
-
1272
- if (content == null) {
1273
- container.style.display = 'none';
1274
- } else if (typeof content === 'string') {
1275
- container.innerHTML = escapeMarkup(content);
1276
- } else {
1277
- $(container).append(content);
1278
- }
1279
- };
1280
-
1281
- return Results;
1282
- });
1283
-
1284
- S2.define('select2/keys',[
1285
-
1286
- ], function () {
1287
- var KEYS = {
1288
- BACKSPACE: 8,
1289
- TAB: 9,
1290
- ENTER: 13,
1291
- SHIFT: 16,
1292
- CTRL: 17,
1293
- ALT: 18,
1294
- ESC: 27,
1295
- SPACE: 32,
1296
- PAGE_UP: 33,
1297
- PAGE_DOWN: 34,
1298
- END: 35,
1299
- HOME: 36,
1300
- LEFT: 37,
1301
- UP: 38,
1302
- RIGHT: 39,
1303
- DOWN: 40,
1304
- DELETE: 46
1305
- };
1306
-
1307
- return KEYS;
1308
- });
1309
-
1310
- S2.define('select2/selection/base',[
1311
- 'jquery',
1312
- '../utils',
1313
- '../keys'
1314
- ], function ($, Utils, KEYS) {
1315
- function BaseSelection ($element, options) {
1316
- this.$element = $element;
1317
- this.options = options;
1318
-
1319
- BaseSelection.__super__.constructor.call(this);
1320
- }
1321
-
1322
- Utils.Extend(BaseSelection, Utils.Observable);
1323
-
1324
- BaseSelection.prototype.render = function () {
1325
- var $selection = $(
1326
- '<span class="select2-selection" role="combobox" ' +
1327
- ' aria-haspopup="true" aria-expanded="false">' +
1328
- '</span>'
1329
- );
1330
-
1331
- this._tabindex = 0;
1332
-
1333
- if (this.$element.data('old-tabindex') != null) {
1334
- this._tabindex = this.$element.data('old-tabindex');
1335
- } else if (this.$element.attr('tabindex') != null) {
1336
- this._tabindex = this.$element.attr('tabindex');
1337
- }
1338
-
1339
- $selection.attr('title', this.$element.attr('title'));
1340
- $selection.attr('tabindex', this._tabindex);
1341
-
1342
- this.$selection = $selection;
1343
-
1344
- return $selection;
1345
- };
1346
-
1347
- BaseSelection.prototype.bind = function (container, $container) {
1348
- var self = this;
1349
-
1350
- var id = container.id + '-container';
1351
- var resultsId = container.id + '-results';
1352
-
1353
- this.container = container;
1354
-
1355
- this.$selection.on('focus', function (evt) {
1356
- self.trigger('focus', evt);
1357
- });
1358
-
1359
- this.$selection.on('blur', function (evt) {
1360
- self._handleBlur(evt);
1361
- });
1362
-
1363
- this.$selection.on('keydown', function (evt) {
1364
- self.trigger('keypress', evt);
1365
-
1366
- if (evt.which === KEYS.SPACE) {
1367
- evt.preventDefault();
1368
- }
1369
- });
1370
-
1371
- container.on('results:focus', function (params) {
1372
- self.$selection.attr('aria-activedescendant', params.data._resultId);
1373
- });
1374
-
1375
- container.on('selection:update', function (params) {
1376
- self.update(params.data);
1377
- });
1378
-
1379
- container.on('open', function () {
1380
- // When the dropdown is open, aria-expanded="true"
1381
- self.$selection.attr('aria-expanded', 'true');
1382
- self.$selection.attr('aria-owns', resultsId);
1383
-
1384
- self._attachCloseHandler(container);
1385
- });
1386
-
1387
- container.on('close', function () {
1388
- // When the dropdown is closed, aria-expanded="false"
1389
- self.$selection.attr('aria-expanded', 'false');
1390
- self.$selection.removeAttr('aria-activedescendant');
1391
- self.$selection.removeAttr('aria-owns');
1392
-
1393
- self.$selection.focus();
1394
-
1395
- self._detachCloseHandler(container);
1396
- });
1397
-
1398
- container.on('enable', function () {
1399
- self.$selection.attr('tabindex', self._tabindex);
1400
- });
1401
-
1402
- container.on('disable', function () {
1403
- self.$selection.attr('tabindex', '-1');
1404
- });
1405
- };
1406
-
1407
- BaseSelection.prototype._handleBlur = function (evt) {
1408
- var self = this;
1409
-
1410
- // This needs to be delayed as the active element is the body when the tab
1411
- // key is pressed, possibly along with others.
1412
- window.setTimeout(function () {
1413
- // Don't trigger `blur` if the focus is still in the selection
1414
- if (
1415
- (document.activeElement == self.$selection[0]) ||
1416
- ($.contains(self.$selection[0], document.activeElement))
1417
- ) {
1418
- return;
1419
- }
1420
-
1421
- self.trigger('blur', evt);
1422
- }, 1);
1423
- };
1424
-
1425
- BaseSelection.prototype._attachCloseHandler = function (container) {
1426
- var self = this;
1427
-
1428
- $(document.body).on('mousedown.select2.' + container.id, function (e) {
1429
- var $target = $(e.target);
1430
-
1431
- var $select = $target.closest('.select2');
1432
-
1433
- var $all = $('.select2.select2-container--open');
1434
-
1435
- $all.each(function () {
1436
- var $this = $(this);
1437
-
1438
- if (this == $select[0]) {
1439
- return;
1440
- }
1441
-
1442
- var $element = $this.data('element');
1443
-
1444
- $element.select2('close');
1445
- });
1446
- });
1447
- };
1448
-
1449
- BaseSelection.prototype._detachCloseHandler = function (container) {
1450
- $(document.body).off('mousedown.select2.' + container.id);
1451
- };
1452
-
1453
- BaseSelection.prototype.position = function ($selection, $container) {
1454
- var $selectionContainer = $container.find('.selection');
1455
- $selectionContainer.append($selection);
1456
- };
1457
-
1458
- BaseSelection.prototype.destroy = function () {
1459
- this._detachCloseHandler(this.container);
1460
- };
1461
-
1462
- BaseSelection.prototype.update = function (data) {
1463
- throw new Error('The `update` method must be defined in child classes.');
1464
- };
1465
-
1466
- return BaseSelection;
1467
- });
1468
-
1469
- S2.define('select2/selection/single',[
1470
- 'jquery',
1471
- './base',
1472
- '../utils',
1473
- '../keys'
1474
- ], function ($, BaseSelection, Utils, KEYS) {
1475
- function SingleSelection () {
1476
- SingleSelection.__super__.constructor.apply(this, arguments);
1477
- }
1478
-
1479
- Utils.Extend(SingleSelection, BaseSelection);
1480
-
1481
- SingleSelection.prototype.render = function () {
1482
- var $selection = SingleSelection.__super__.render.call(this);
1483
-
1484
- $selection.addClass('select2-selection--single');
1485
-
1486
- $selection.html(
1487
- '<span class="select2-selection__rendered"></span>' +
1488
- '<span class="select2-selection__arrow" role="presentation">' +
1489
- '<b role="presentation"></b>' +
1490
- '</span>'
1491
- );
1492
-
1493
- return $selection;
1494
- };
1495
-
1496
- SingleSelection.prototype.bind = function (container, $container) {
1497
- var self = this;
1498
-
1499
- SingleSelection.__super__.bind.apply(this, arguments);
1500
-
1501
- var id = container.id + '-container';
1502
-
1503
- this.$selection.find('.select2-selection__rendered').attr('id', id);
1504
- this.$selection.attr('aria-labelledby', id);
1505
-
1506
- this.$selection.on('mousedown', function (evt) {
1507
- // Only respond to left clicks
1508
- if (evt.which !== 1) {
1509
- return;
1510
- }
1511
-
1512
- self.trigger('toggle', {
1513
- originalEvent: evt
1514
- });
1515
- });
1516
-
1517
- this.$selection.on('focus', function (evt) {
1518
- // User focuses on the container
1519
- });
1520
-
1521
- this.$selection.on('blur', function (evt) {
1522
- // User exits the container
1523
- });
1524
-
1525
- container.on('focus', function (evt) {
1526
- if (!container.isOpen()) {
1527
- self.$selection.focus();
1528
- }
1529
- });
1530
-
1531
- container.on('selection:update', function (params) {
1532
- self.update(params.data);
1533
- });
1534
- };
1535
-
1536
- SingleSelection.prototype.clear = function () {
1537
- this.$selection.find('.select2-selection__rendered').empty();
1538
- };
1539
-
1540
- SingleSelection.prototype.display = function (data, container) {
1541
- var template = this.options.get('templateSelection');
1542
- var escapeMarkup = this.options.get('escapeMarkup');
1543
-
1544
- return escapeMarkup(template(data, container));
1545
- };
1546
-
1547
- SingleSelection.prototype.selectionContainer = function () {
1548
- return $('<span></span>');
1549
- };
1550
-
1551
- SingleSelection.prototype.update = function (data) {
1552
- if (data.length === 0) {
1553
- this.clear();
1554
- return;
1555
- }
1556
-
1557
- var selection = data[0];
1558
-
1559
- var $rendered = this.$selection.find('.select2-selection__rendered');
1560
- var formatted = this.display(selection, $rendered);
1561
-
1562
- $rendered.empty().append(formatted);
1563
- $rendered.prop('title', selection.title || selection.text);
1564
- };
1565
-
1566
- return SingleSelection;
1567
- });
1568
-
1569
- S2.define('select2/selection/multiple',[
1570
- 'jquery',
1571
- './base',
1572
- '../utils'
1573
- ], function ($, BaseSelection, Utils) {
1574
- function MultipleSelection ($element, options) {
1575
- MultipleSelection.__super__.constructor.apply(this, arguments);
1576
- }
1577
-
1578
- Utils.Extend(MultipleSelection, BaseSelection);
1579
-
1580
- MultipleSelection.prototype.render = function () {
1581
- var $selection = MultipleSelection.__super__.render.call(this);
1582
-
1583
- $selection.addClass('select2-selection--multiple');
1584
-
1585
- $selection.html(
1586
- '<ul class="select2-selection__rendered"></ul>'
1587
- );
1588
-
1589
- return $selection;
1590
- };
1591
-
1592
- MultipleSelection.prototype.bind = function (container, $container) {
1593
- var self = this;
1594
-
1595
- MultipleSelection.__super__.bind.apply(this, arguments);
1596
-
1597
- this.$selection.on('click', function (evt) {
1598
- self.trigger('toggle', {
1599
- originalEvent: evt
1600
- });
1601
- });
1602
-
1603
- this.$selection.on(
1604
- 'click',
1605
- '.select2-selection__choice__remove',
1606
- function (evt) {
1607
- // Ignore the event if it is disabled
1608
- if (self.options.get('disabled')) {
1609
- return;
1610
- }
1611
-
1612
- var $remove = $(this);
1613
- var $selection = $remove.parent();
1614
-
1615
- var data = $selection.data('data');
1616
-
1617
- self.trigger('unselect', {
1618
- originalEvent: evt,
1619
- data: data
1620
- });
1621
- }
1622
- );
1623
- };
1624
-
1625
- MultipleSelection.prototype.clear = function () {
1626
- this.$selection.find('.select2-selection__rendered').empty();
1627
- };
1628
-
1629
- MultipleSelection.prototype.display = function (data, container) {
1630
- var template = this.options.get('templateSelection');
1631
- var escapeMarkup = this.options.get('escapeMarkup');
1632
-
1633
- return escapeMarkup(template(data, container));
1634
- };
1635
-
1636
- MultipleSelection.prototype.selectionContainer = function () {
1637
- var $container = $(
1638
- '<li class="select2-selection__choice">' +
1639
- '<span class="select2-selection__choice__remove" role="presentation">' +
1640
- '&times;' +
1641
- '</span>' +
1642
- '</li>'
1643
- );
1644
-
1645
- return $container;
1646
- };
1647
-
1648
- MultipleSelection.prototype.update = function (data) {
1649
- this.clear();
1650
-
1651
- if (data.length === 0) {
1652
- return;
1653
- }
1654
-
1655
- var $selections = [];
1656
-
1657
- for (var d = 0; d < data.length; d++) {
1658
- var selection = data[d];
1659
-
1660
- var $selection = this.selectionContainer();
1661
- var formatted = this.display(selection, $selection);
1662
-
1663
- $selection.append(formatted);
1664
- $selection.prop('title', selection.title || selection.text);
1665
-
1666
- $selection.data('data', selection);
1667
-
1668
- $selections.push($selection);
1669
- }
1670
-
1671
- var $rendered = this.$selection.find('.select2-selection__rendered');
1672
-
1673
- Utils.appendMany($rendered, $selections);
1674
- };
1675
-
1676
- return MultipleSelection;
1677
- });
1678
-
1679
- S2.define('select2/selection/placeholder',[
1680
- '../utils'
1681
- ], function (Utils) {
1682
- function Placeholder (decorated, $element, options) {
1683
- this.placeholder = this.normalizePlaceholder(options.get('placeholder'));
1684
-
1685
- decorated.call(this, $element, options);
1686
- }
1687
-
1688
- Placeholder.prototype.normalizePlaceholder = function (_, placeholder) {
1689
- if (typeof placeholder === 'string') {
1690
- placeholder = {
1691
- id: '',
1692
- text: placeholder
1693
- };
1694
- }
1695
-
1696
- return placeholder;
1697
- };
1698
-
1699
- Placeholder.prototype.createPlaceholder = function (decorated, placeholder) {
1700
- var $placeholder = this.selectionContainer();
1701
-
1702
- $placeholder.html(this.display(placeholder));
1703
- $placeholder.addClass('select2-selection__placeholder')
1704
- .removeClass('select2-selection__choice');
1705
-
1706
- return $placeholder;
1707
- };
1708
-
1709
- Placeholder.prototype.update = function (decorated, data) {
1710
- var singlePlaceholder = (
1711
- data.length == 1 && data[0].id != this.placeholder.id
1712
- );
1713
- var multipleSelections = data.length > 1;
1714
-
1715
- if (multipleSelections || singlePlaceholder) {
1716
- return decorated.call(this, data);
1717
- }
1718
-
1719
- this.clear();
1720
-
1721
- var $placeholder = this.createPlaceholder(this.placeholder);
1722
-
1723
- this.$selection.find('.select2-selection__rendered').append($placeholder);
1724
- };
1725
-
1726
- return Placeholder;
1727
- });
1728
-
1729
- S2.define('select2/selection/allowClear',[
1730
- 'jquery',
1731
- '../keys'
1732
- ], function ($, KEYS) {
1733
- function AllowClear () { }
1734
-
1735
- AllowClear.prototype.bind = function (decorated, container, $container) {
1736
- var self = this;
1737
-
1738
- decorated.call(this, container, $container);
1739
-
1740
- if (this.placeholder == null) {
1741
- if (this.options.get('debug') && window.console && console.error) {
1742
- console.error(
1743
- 'Select2: The `allowClear` option should be used in combination ' +
1744
- 'with the `placeholder` option.'
1745
- );
1746
- }
1747
- }
1748
-
1749
- this.$selection.on('mousedown', '.select2-selection__clear',
1750
- function (evt) {
1751
- self._handleClear(evt);
1752
- });
1753
-
1754
- container.on('keypress', function (evt) {
1755
- self._handleKeyboardClear(evt, container);
1756
- });
1757
- };
1758
-
1759
- AllowClear.prototype._handleClear = function (_, evt) {
1760
- // Ignore the event if it is disabled
1761
- if (this.options.get('disabled')) {
1762
- return;
1763
- }
1764
-
1765
- var $clear = this.$selection.find('.select2-selection__clear');
1766
-
1767
- // Ignore the event if nothing has been selected
1768
- if ($clear.length === 0) {
1769
- return;
1770
- }
1771
-
1772
- evt.stopPropagation();
1773
-
1774
- var data = $clear.data('data');
1775
-
1776
- for (var d = 0; d < data.length; d++) {
1777
- var unselectData = {
1778
- data: data[d]
1779
- };
1780
-
1781
- // Trigger the `unselect` event, so people can prevent it from being
1782
- // cleared.
1783
- this.trigger('unselect', unselectData);
1784
-
1785
- // If the event was prevented, don't clear it out.
1786
- if (unselectData.prevented) {
1787
- return;
1788
- }
1789
- }
1790
-
1791
- this.$element.val(this.placeholder.id).trigger('change');
1792
-
1793
- this.trigger('toggle', {});
1794
- };
1795
-
1796
- AllowClear.prototype._handleKeyboardClear = function (_, evt, container) {
1797
- if (container.isOpen()) {
1798
- return;
1799
- }
1800
-
1801
- if (evt.which == KEYS.DELETE || evt.which == KEYS.BACKSPACE) {
1802
- this._handleClear(evt);
1803
- }
1804
- };
1805
-
1806
- AllowClear.prototype.update = function (decorated, data) {
1807
- decorated.call(this, data);
1808
-
1809
- if (this.$selection.find('.select2-selection__placeholder').length > 0 ||
1810
- data.length === 0) {
1811
- return;
1812
- }
1813
-
1814
- var $remove = $(
1815
- '<span class="select2-selection__clear">' +
1816
- '&times;' +
1817
- '</span>'
1818
- );
1819
- $remove.data('data', data);
1820
-
1821
- this.$selection.find('.select2-selection__rendered').prepend($remove);
1822
- };
1823
-
1824
- return AllowClear;
1825
- });
1826
-
1827
- S2.define('select2/selection/search',[
1828
- 'jquery',
1829
- '../utils',
1830
- '../keys'
1831
- ], function ($, Utils, KEYS) {
1832
- function Search (decorated, $element, options) {
1833
- decorated.call(this, $element, options);
1834
- }
1835
-
1836
- Search.prototype.render = function (decorated) {
1837
- var $search = $(
1838
- '<li class="select2-search select2-search--inline">' +
1839
- '<input class="select2-search__field" type="search" tabindex="-1"' +
1840
- ' autocomplete="off" autocorrect="off" autocapitalize="off"' +
1841
- ' spellcheck="false" role="textbox" aria-autocomplete="list" />' +
1842
- '</li>'
1843
- );
1844
-
1845
- this.$searchContainer = $search;
1846
- this.$search = $search.find('input');
1847
-
1848
- var $rendered = decorated.call(this);
1849
-
1850
- this._transferTabIndex();
1851
-
1852
- return $rendered;
1853
- };
1854
-
1855
- Search.prototype.bind = function (decorated, container, $container) {
1856
- var self = this;
1857
-
1858
- decorated.call(this, container, $container);
1859
-
1860
- container.on('open', function () {
1861
- self.$search.trigger('focus');
1862
- });
1863
-
1864
- container.on('close', function () {
1865
- self.$search.val('');
1866
- self.$search.removeAttr('aria-activedescendant');
1867
- self.$search.trigger('focus');
1868
- });
1869
-
1870
- container.on('enable', function () {
1871
- self.$search.prop('disabled', false);
1872
-
1873
- self._transferTabIndex();
1874
- });
1875
-
1876
- container.on('disable', function () {
1877
- self.$search.prop('disabled', true);
1878
- });
1879
-
1880
- container.on('focus', function (evt) {
1881
- self.$search.trigger('focus');
1882
- });
1883
-
1884
- container.on('results:focus', function (params) {
1885
- self.$search.attr('aria-activedescendant', params.id);
1886
- });
1887
-
1888
- this.$selection.on('focusin', '.select2-search--inline', function (evt) {
1889
- self.trigger('focus', evt);
1890
- });
1891
-
1892
- this.$selection.on('focusout', '.select2-search--inline', function (evt) {
1893
- self._handleBlur(evt);
1894
- });
1895
-
1896
- this.$selection.on('keydown', '.select2-search--inline', function (evt) {
1897
- evt.stopPropagation();
1898
-
1899
- self.trigger('keypress', evt);
1900
-
1901
- self._keyUpPrevented = evt.isDefaultPrevented();
1902
-
1903
- var key = evt.which;
1904
-
1905
- if (key === KEYS.BACKSPACE && self.$search.val() === '') {
1906
- var $previousChoice = self.$searchContainer
1907
- .prev('.select2-selection__choice');
1908
-
1909
- if ($previousChoice.length > 0) {
1910
- var item = $previousChoice.data('data');
1911
-
1912
- self.searchRemoveChoice(item);
1913
-
1914
- evt.preventDefault();
1915
- }
1916
- }
1917
- });
1918
-
1919
- // Try to detect the IE version should the `documentMode` property that
1920
- // is stored on the document. This is only implemented in IE and is
1921
- // slightly cleaner than doing a user agent check.
1922
- // This property is not available in Edge, but Edge also doesn't have
1923
- // this bug.
1924
- var msie = document.documentMode;
1925
- var disableInputEvents = msie && msie <= 11;
1926
-
1927
- // Workaround for browsers which do not support the `input` event
1928
- // This will prevent double-triggering of events for browsers which support
1929
- // both the `keyup` and `input` events.
1930
- this.$selection.on(
1931
- 'input.searchcheck',
1932
- '.select2-search--inline',
1933
- function (evt) {
1934
- // IE will trigger the `input` event when a placeholder is used on a
1935
- // search box. To get around this issue, we are forced to ignore all
1936
- // `input` events in IE and keep using `keyup`.
1937
- if (disableInputEvents) {
1938
- self.$selection.off('input.search input.searchcheck');
1939
- return;
1940
- }
1941
-
1942
- // Unbind the duplicated `keyup` event
1943
- self.$selection.off('keyup.search');
1944
- }
1945
- );
1946
-
1947
- this.$selection.on(
1948
- 'keyup.search input.search',
1949
- '.select2-search--inline',
1950
- function (evt) {
1951
- // IE will trigger the `input` event when a placeholder is used on a
1952
- // search box. To get around this issue, we are forced to ignore all
1953
- // `input` events in IE and keep using `keyup`.
1954
- if (disableInputEvents && evt.type === 'input') {
1955
- self.$selection.off('input.search input.searchcheck');
1956
- return;
1957
- }
1958
-
1959
- var key = evt.which;
1960
-
1961
- // We can freely ignore events from modifier keys
1962
- if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) {
1963
- return;
1964
- }
1965
-
1966
- // Tabbing will be handled during the `keydown` phase
1967
- if (key == KEYS.TAB) {
1968
- return;
1969
- }
1970
-
1971
- self.handleSearch(evt);
1972
- }
1973
- );
1974
- };
1975
-
1976
- /**
1977
- * This method will transfer the tabindex attribute from the rendered
1978
- * selection to the search box. This allows for the search box to be used as
1979
- * the primary focus instead of the selection container.
1980
- *
1981
- * @private
1982
- */
1983
- Search.prototype._transferTabIndex = function (decorated) {
1984
- this.$search.attr('tabindex', this.$selection.attr('tabindex'));
1985
- this.$selection.attr('tabindex', '-1');
1986
- };
1987
-
1988
- Search.prototype.createPlaceholder = function (decorated, placeholder) {
1989
- this.$search.attr('placeholder', placeholder.text);
1990
- };
1991
-
1992
- Search.prototype.update = function (decorated, data) {
1993
- var searchHadFocus = this.$search[0] == document.activeElement;
1994
-
1995
- this.$search.attr('placeholder', '');
1996
-
1997
- decorated.call(this, data);
1998
-
1999
- this.$selection.find('.select2-selection__rendered')
2000
- .append(this.$searchContainer);
2001
-
2002
- this.resizeSearch();
2003
- if (searchHadFocus) {
2004
- this.$search.focus();
2005
- }
2006
- };
2007
-
2008
- Search.prototype.handleSearch = function () {
2009
- this.resizeSearch();
2010
-
2011
- if (!this._keyUpPrevented) {
2012
- var input = this.$search.val();
2013
-
2014
- this.trigger('query', {
2015
- term: input
2016
- });
2017
- }
2018
-
2019
- this._keyUpPrevented = false;
2020
- };
2021
-
2022
- Search.prototype.searchRemoveChoice = function (decorated, item) {
2023
- this.trigger('unselect', {
2024
- data: item
2025
- });
2026
-
2027
- this.$search.val(item.text);
2028
- this.handleSearch();
2029
- };
2030
-
2031
- Search.prototype.resizeSearch = function () {
2032
- this.$search.css('width', '25px');
2033
-
2034
- var width = '';
2035
-
2036
- if (this.$search.attr('placeholder') !== '') {
2037
- width = this.$selection.find('.select2-selection__rendered').innerWidth();
2038
- } else {
2039
- var minimumWidth = this.$search.val().length + 1;
2040
-
2041
- width = (minimumWidth * 0.75) + 'em';
2042
- }
2043
-
2044
- this.$search.css('width', width);
2045
- };
2046
-
2047
- return Search;
2048
- });
2049
-
2050
- S2.define('select2/selection/eventRelay',[
2051
- 'jquery'
2052
- ], function ($) {
2053
- function EventRelay () { }
2054
-
2055
- EventRelay.prototype.bind = function (decorated, container, $container) {
2056
- var self = this;
2057
- var relayEvents = [
2058
- 'open', 'opening',
2059
- 'close', 'closing',
2060
- 'select', 'selecting',
2061
- 'unselect', 'unselecting'
2062
- ];
2063
-
2064
- var preventableEvents = ['opening', 'closing', 'selecting', 'unselecting'];
2065
-
2066
- decorated.call(this, container, $container);
2067
-
2068
- container.on('*', function (name, params) {
2069
- // Ignore events that should not be relayed
2070
- if ($.inArray(name, relayEvents) === -1) {
2071
- return;
2072
- }
2073
-
2074
- // The parameters should always be an object
2075
- params = params || {};
2076
-
2077
- // Generate the jQuery event for the Select2 event
2078
- var evt = $.Event('select2:' + name, {
2079
- params: params
2080
- });
2081
-
2082
- self.$element.trigger(evt);
2083
-
2084
- // Only handle preventable events if it was one
2085
- if ($.inArray(name, preventableEvents) === -1) {
2086
- return;
2087
- }
2088
-
2089
- params.prevented = evt.isDefaultPrevented();
2090
- });
2091
- };
2092
-
2093
- return EventRelay;
2094
- });
2095
-
2096
- S2.define('select2/translation',[
2097
- 'jquery',
2098
- 'require'
2099
- ], function ($, require) {
2100
- function Translation (dict) {
2101
- this.dict = dict || {};
2102
- }
2103
-
2104
- Translation.prototype.all = function () {
2105
- return this.dict;
2106
- };
2107
-
2108
- Translation.prototype.get = function (key) {
2109
- return this.dict[key];
2110
- };
2111
-
2112
- Translation.prototype.extend = function (translation) {
2113
- this.dict = $.extend({}, translation.all(), this.dict);
2114
- };
2115
-
2116
- // Static functions
2117
-
2118
- Translation._cache = {};
2119
-
2120
- Translation.loadPath = function (path) {
2121
- if (!(path in Translation._cache)) {
2122
- var translations = require(path);
2123
-
2124
- Translation._cache[path] = translations;
2125
- }
2126
-
2127
- return new Translation(Translation._cache[path]);
2128
- };
2129
-
2130
- return Translation;
2131
- });
2132
-
2133
- S2.define('select2/diacritics',[
2134
-
2135
- ], function () {
2136
- var diacritics = {
2137
- '\u24B6': 'A',
2138
- '\uFF21': 'A',
2139
- '\u00C0': 'A',
2140
- '\u00C1': 'A',
2141
- '\u00C2': 'A',
2142
- '\u1EA6': 'A',
2143
- '\u1EA4': 'A',
2144
- '\u1EAA': 'A',
2145
- '\u1EA8': 'A',
2146
- '\u00C3': 'A',
2147
- '\u0100': 'A',
2148
- '\u0102': 'A',
2149
- '\u1EB0': 'A',
2150
- '\u1EAE': 'A',
2151
- '\u1EB4': 'A',
2152
- '\u1EB2': 'A',
2153
- '\u0226': 'A',
2154
- '\u01E0': 'A',
2155
- '\u00C4': 'A',
2156
- '\u01DE': 'A',
2157
- '\u1EA2': 'A',
2158
- '\u00C5': 'A',
2159
- '\u01FA': 'A',
2160
- '\u01CD': 'A',
2161
- '\u0200': 'A',
2162
- '\u0202': 'A',
2163
- '\u1EA0': 'A',
2164
- '\u1EAC': 'A',
2165
- '\u1EB6': 'A',
2166
- '\u1E00': 'A',
2167
- '\u0104': 'A',
2168
- '\u023A': 'A',
2169
- '\u2C6F': 'A',
2170
- '\uA732': 'AA',
2171
- '\u00C6': 'AE',
2172
- '\u01FC': 'AE',
2173
- '\u01E2': 'AE',
2174
- '\uA734': 'AO',
2175
- '\uA736': 'AU',
2176
- '\uA738': 'AV',
2177
- '\uA73A': 'AV',
2178
- '\uA73C': 'AY',
2179
- '\u24B7': 'B',
2180
- '\uFF22': 'B',
2181
- '\u1E02': 'B',
2182
- '\u1E04': 'B',
2183
- '\u1E06': 'B',
2184
- '\u0243': 'B',
2185
- '\u0182': 'B',
2186
- '\u0181': 'B',
2187
- '\u24B8': 'C',
2188
- '\uFF23': 'C',
2189
- '\u0106': 'C',
2190
- '\u0108': 'C',
2191
- '\u010A': 'C',
2192
- '\u010C': 'C',
2193
- '\u00C7': 'C',
2194
- '\u1E08': 'C',
2195
- '\u0187': 'C',
2196
- '\u023B': 'C',
2197
- '\uA73E': 'C',
2198
- '\u24B9': 'D',
2199
- '\uFF24': 'D',
2200
- '\u1E0A': 'D',
2201
- '\u010E': 'D',
2202
- '\u1E0C': 'D',
2203
- '\u1E10': 'D',
2204
- '\u1E12': 'D',
2205
- '\u1E0E': 'D',
2206
- '\u0110': 'D',
2207
- '\u018B': 'D',
2208
- '\u018A': 'D',
2209
- '\u0189': 'D',
2210
- '\uA779': 'D',
2211
- '\u01F1': 'DZ',
2212
- '\u01C4': 'DZ',
2213
- '\u01F2': 'Dz',
2214
- '\u01C5': 'Dz',
2215
- '\u24BA': 'E',
2216
- '\uFF25': 'E',
2217
- '\u00C8': 'E',
2218
- '\u00C9': 'E',
2219
- '\u00CA': 'E',
2220
- '\u1EC0': 'E',
2221
- '\u1EBE': 'E',
2222
- '\u1EC4': 'E',
2223
- '\u1EC2': 'E',
2224
- '\u1EBC': 'E',
2225
- '\u0112': 'E',
2226
- '\u1E14': 'E',
2227
- '\u1E16': 'E',
2228
- '\u0114': 'E',
2229
- '\u0116': 'E',
2230
- '\u00CB': 'E',
2231
- '\u1EBA': 'E',
2232
- '\u011A': 'E',
2233
- '\u0204': 'E',
2234
- '\u0206': 'E',
2235
- '\u1EB8': 'E',
2236
- '\u1EC6': 'E',
2237
- '\u0228': 'E',
2238
- '\u1E1C': 'E',
2239
- '\u0118': 'E',
2240
- '\u1E18': 'E',
2241
- '\u1E1A': 'E',
2242
- '\u0190': 'E',
2243
- '\u018E': 'E',
2244
- '\u24BB': 'F',
2245
- '\uFF26': 'F',
2246
- '\u1E1E': 'F',
2247
- '\u0191': 'F',
2248
- '\uA77B': 'F',
2249
- '\u24BC': 'G',
2250
- '\uFF27': 'G',
2251
- '\u01F4': 'G',
2252
- '\u011C': 'G',
2253
- '\u1E20': 'G',
2254
- '\u011E': 'G',
2255
- '\u0120': 'G',
2256
- '\u01E6': 'G',
2257
- '\u0122': 'G',
2258
- '\u01E4': 'G',
2259
- '\u0193': 'G',
2260
- '\uA7A0': 'G',
2261
- '\uA77D': 'G',
2262
- '\uA77E': 'G',
2263
- '\u24BD': 'H',
2264
- '\uFF28': 'H',
2265
- '\u0124': 'H',
2266
- '\u1E22': 'H',
2267
- '\u1E26': 'H',
2268
- '\u021E': 'H',
2269
- '\u1E24': 'H',
2270
- '\u1E28': 'H',
2271
- '\u1E2A': 'H',
2272
- '\u0126': 'H',
2273
- '\u2C67': 'H',
2274
- '\u2C75': 'H',
2275
- '\uA78D': 'H',
2276
- '\u24BE': 'I',
2277
- '\uFF29': 'I',
2278
- '\u00CC': 'I',
2279
- '\u00CD': 'I',
2280
- '\u00CE': 'I',
2281
- '\u0128': 'I',
2282
- '\u012A': 'I',
2283
- '\u012C': 'I',
2284
- '\u0130': 'I',
2285
- '\u00CF': 'I',
2286
- '\u1E2E': 'I',
2287
- '\u1EC8': 'I',
2288
- '\u01CF': 'I',
2289
- '\u0208': 'I',
2290
- '\u020A': 'I',
2291
- '\u1ECA': 'I',
2292
- '\u012E': 'I',
2293
- '\u1E2C': 'I',
2294
- '\u0197': 'I',
2295
- '\u24BF': 'J',
2296
- '\uFF2A': 'J',
2297
- '\u0134': 'J',
2298
- '\u0248': 'J',
2299
- '\u24C0': 'K',
2300
- '\uFF2B': 'K',
2301
- '\u1E30': 'K',
2302
- '\u01E8': 'K',
2303
- '\u1E32': 'K',
2304
- '\u0136': 'K',
2305
- '\u1E34': 'K',
2306
- '\u0198': 'K',
2307
- '\u2C69': 'K',
2308
- '\uA740': 'K',
2309
- '\uA742': 'K',
2310
- '\uA744': 'K',
2311
- '\uA7A2': 'K',
2312
- '\u24C1': 'L',
2313
- '\uFF2C': 'L',
2314
- '\u013F': 'L',
2315
- '\u0139': 'L',
2316
- '\u013D': 'L',
2317
- '\u1E36': 'L',
2318
- '\u1E38': 'L',
2319
- '\u013B': 'L',
2320
- '\u1E3C': 'L',
2321
- '\u1E3A': 'L',
2322
- '\u0141': 'L',
2323
- '\u023D': 'L',
2324
- '\u2C62': 'L',
2325
- '\u2C60': 'L',
2326
- '\uA748': 'L',
2327
- '\uA746': 'L',
2328
- '\uA780': 'L',
2329
- '\u01C7': 'LJ',
2330
- '\u01C8': 'Lj',
2331
- '\u24C2': 'M',
2332
- '\uFF2D': 'M',
2333
- '\u1E3E': 'M',
2334
- '\u1E40': 'M',
2335
- '\u1E42': 'M',
2336
- '\u2C6E': 'M',
2337
- '\u019C': 'M',
2338
- '\u24C3': 'N',
2339
- '\uFF2E': 'N',
2340
- '\u01F8': 'N',
2341
- '\u0143': 'N',
2342
- '\u00D1': 'N',
2343
- '\u1E44': 'N',
2344
- '\u0147': 'N',
2345
- '\u1E46': 'N',
2346
- '\u0145': 'N',
2347
- '\u1E4A': 'N',
2348
- '\u1E48': 'N',
2349
- '\u0220': 'N',
2350
- '\u019D': 'N',
2351
- '\uA790': 'N',
2352
- '\uA7A4': 'N',
2353
- '\u01CA': 'NJ',
2354
- '\u01CB': 'Nj',
2355
- '\u24C4': 'O',
2356
- '\uFF2F': 'O',
2357
- '\u00D2': 'O',
2358
- '\u00D3': 'O',
2359
- '\u00D4': 'O',
2360
- '\u1ED2': 'O',
2361
- '\u1ED0': 'O',
2362
- '\u1ED6': 'O',
2363
- '\u1ED4': 'O',
2364
- '\u00D5': 'O',
2365
- '\u1E4C': 'O',
2366
- '\u022C': 'O',
2367
- '\u1E4E': 'O',
2368
- '\u014C': 'O',
2369
- '\u1E50': 'O',
2370
- '\u1E52': 'O',
2371
- '\u014E': 'O',
2372
- '\u022E': 'O',
2373
- '\u0230': 'O',
2374
- '\u00D6': 'O',
2375
- '\u022A': 'O',
2376
- '\u1ECE': 'O',
2377
- '\u0150': 'O',
2378
- '\u01D1': 'O',
2379
- '\u020C': 'O',
2380
- '\u020E': 'O',
2381
- '\u01A0': 'O',
2382
- '\u1EDC': 'O',
2383
- '\u1EDA': 'O',
2384
- '\u1EE0': 'O',
2385
- '\u1EDE': 'O',
2386
- '\u1EE2': 'O',
2387
- '\u1ECC': 'O',
2388
- '\u1ED8': 'O',
2389
- '\u01EA': 'O',
2390
- '\u01EC': 'O',
2391
- '\u00D8': 'O',
2392
- '\u01FE': 'O',
2393
- '\u0186': 'O',
2394
- '\u019F': 'O',
2395
- '\uA74A': 'O',
2396
- '\uA74C': 'O',
2397
- '\u01A2': 'OI',
2398
- '\uA74E': 'OO',
2399
- '\u0222': 'OU',
2400
- '\u24C5': 'P',
2401
- '\uFF30': 'P',
2402
- '\u1E54': 'P',
2403
- '\u1E56': 'P',
2404
- '\u01A4': 'P',
2405
- '\u2C63': 'P',
2406
- '\uA750': 'P',
2407
- '\uA752': 'P',
2408
- '\uA754': 'P',
2409
- '\u24C6': 'Q',
2410
- '\uFF31': 'Q',
2411
- '\uA756': 'Q',
2412
- '\uA758': 'Q',
2413
- '\u024A': 'Q',
2414
- '\u24C7': 'R',
2415
- '\uFF32': 'R',
2416
- '\u0154': 'R',
2417
- '\u1E58': 'R',
2418
- '\u0158': 'R',
2419
- '\u0210': 'R',
2420
- '\u0212': 'R',
2421
- '\u1E5A': 'R',
2422
- '\u1E5C': 'R',
2423
- '\u0156': 'R',
2424
- '\u1E5E': 'R',
2425
- '\u024C': 'R',
2426
- '\u2C64': 'R',
2427
- '\uA75A': 'R',
2428
- '\uA7A6': 'R',
2429
- '\uA782': 'R',
2430
- '\u24C8': 'S',
2431
- '\uFF33': 'S',
2432
- '\u1E9E': 'S',
2433
- '\u015A': 'S',
2434
- '\u1E64': 'S',
2435
- '\u015C': 'S',
2436
- '\u1E60': 'S',
2437
- '\u0160': 'S',
2438
- '\u1E66': 'S',
2439
- '\u1E62': 'S',
2440
- '\u1E68': 'S',
2441
- '\u0218': 'S',
2442
- '\u015E': 'S',
2443
- '\u2C7E': 'S',
2444
- '\uA7A8': 'S',
2445
- '\uA784': 'S',
2446
- '\u24C9': 'T',
2447
- '\uFF34': 'T',
2448
- '\u1E6A': 'T',
2449
- '\u0164': 'T',
2450
- '\u1E6C': 'T',
2451
- '\u021A': 'T',
2452
- '\u0162': 'T',
2453
- '\u1E70': 'T',
2454
- '\u1E6E': 'T',
2455
- '\u0166': 'T',
2456
- '\u01AC': 'T',
2457
- '\u01AE': 'T',
2458
- '\u023E': 'T',
2459
- '\uA786': 'T',
2460
- '\uA728': 'TZ',
2461
- '\u24CA': 'U',
2462
- '\uFF35': 'U',
2463
- '\u00D9': 'U',
2464
- '\u00DA': 'U',
2465
- '\u00DB': 'U',
2466
- '\u0168': 'U',
2467
- '\u1E78': 'U',
2468
- '\u016A': 'U',
2469
- '\u1E7A': 'U',
2470
- '\u016C': 'U',
2471
- '\u00DC': 'U',
2472
- '\u01DB': 'U',
2473
- '\u01D7': 'U',
2474
- '\u01D5': 'U',
2475
- '\u01D9': 'U',
2476
- '\u1EE6': 'U',
2477
- '\u016E': 'U',
2478
- '\u0170': 'U',
2479
- '\u01D3': 'U',
2480
- '\u0214': 'U',
2481
- '\u0216': 'U',
2482
- '\u01AF': 'U',
2483
- '\u1EEA': 'U',
2484
- '\u1EE8': 'U',
2485
- '\u1EEE': 'U',
2486
- '\u1EEC': 'U',
2487
- '\u1EF0': 'U',
2488
- '\u1EE4': 'U',
2489
- '\u1E72': 'U',
2490
- '\u0172': 'U',
2491
- '\u1E76': 'U',
2492
- '\u1E74': 'U',
2493
- '\u0244': 'U',
2494
- '\u24CB': 'V',
2495
- '\uFF36': 'V',
2496
- '\u1E7C': 'V',
2497
- '\u1E7E': 'V',
2498
- '\u01B2': 'V',
2499
- '\uA75E': 'V',
2500
- '\u0245': 'V',
2501
- '\uA760': 'VY',
2502
- '\u24CC': 'W',
2503
- '\uFF37': 'W',
2504
- '\u1E80': 'W',
2505
- '\u1E82': 'W',
2506
- '\u0174': 'W',
2507
- '\u1E86': 'W',
2508
- '\u1E84': 'W',
2509
- '\u1E88': 'W',
2510
- '\u2C72': 'W',
2511
- '\u24CD': 'X',
2512
- '\uFF38': 'X',
2513
- '\u1E8A': 'X',
2514
- '\u1E8C': 'X',
2515
- '\u24CE': 'Y',
2516
- '\uFF39': 'Y',
2517
- '\u1EF2': 'Y',
2518
- '\u00DD': 'Y',
2519
- '\u0176': 'Y',
2520
- '\u1EF8': 'Y',
2521
- '\u0232': 'Y',
2522
- '\u1E8E': 'Y',
2523
- '\u0178': 'Y',
2524
- '\u1EF6': 'Y',
2525
- '\u1EF4': 'Y',
2526
- '\u01B3': 'Y',
2527
- '\u024E': 'Y',
2528
- '\u1EFE': 'Y',
2529
- '\u24CF': 'Z',
2530
- '\uFF3A': 'Z',
2531
- '\u0179': 'Z',
2532
- '\u1E90': 'Z',
2533
- '\u017B': 'Z',
2534
- '\u017D': 'Z',
2535
- '\u1E92': 'Z',
2536
- '\u1E94': 'Z',
2537
- '\u01B5': 'Z',
2538
- '\u0224': 'Z',
2539
- '\u2C7F': 'Z',
2540
- '\u2C6B': 'Z',
2541
- '\uA762': 'Z',
2542
- '\u24D0': 'a',
2543
- '\uFF41': 'a',
2544
- '\u1E9A': 'a',
2545
- '\u00E0': 'a',
2546
- '\u00E1': 'a',
2547
- '\u00E2': 'a',
2548
- '\u1EA7': 'a',
2549
- '\u1EA5': 'a',
2550
- '\u1EAB': 'a',
2551
- '\u1EA9': 'a',
2552
- '\u00E3': 'a',
2553
- '\u0101': 'a',
2554
- '\u0103': 'a',
2555
- '\u1EB1': 'a',
2556
- '\u1EAF': 'a',
2557
- '\u1EB5': 'a',
2558
- '\u1EB3': 'a',
2559
- '\u0227': 'a',
2560
- '\u01E1': 'a',
2561
- '\u00E4': 'a',
2562
- '\u01DF': 'a',
2563
- '\u1EA3': 'a',
2564
- '\u00E5': 'a',
2565
- '\u01FB': 'a',
2566
- '\u01CE': 'a',
2567
- '\u0201': 'a',
2568
- '\u0203': 'a',
2569
- '\u1EA1': 'a',
2570
- '\u1EAD': 'a',
2571
- '\u1EB7': 'a',
2572
- '\u1E01': 'a',
2573
- '\u0105': 'a',
2574
- '\u2C65': 'a',
2575
- '\u0250': 'a',
2576
- '\uA733': 'aa',
2577
- '\u00E6': 'ae',
2578
- '\u01FD': 'ae',
2579
- '\u01E3': 'ae',
2580
- '\uA735': 'ao',
2581
- '\uA737': 'au',
2582
- '\uA739': 'av',
2583
- '\uA73B': 'av',
2584
- '\uA73D': 'ay',
2585
- '\u24D1': 'b',
2586
- '\uFF42': 'b',
2587
- '\u1E03': 'b',
2588
- '\u1E05': 'b',
2589
- '\u1E07': 'b',
2590
- '\u0180': 'b',
2591
- '\u0183': 'b',
2592
- '\u0253': 'b',
2593
- '\u24D2': 'c',
2594
- '\uFF43': 'c',
2595
- '\u0107': 'c',
2596
- '\u0109': 'c',
2597
- '\u010B': 'c',
2598
- '\u010D': 'c',
2599
- '\u00E7': 'c',
2600
- '\u1E09': 'c',
2601
- '\u0188': 'c',
2602
- '\u023C': 'c',
2603
- '\uA73F': 'c',
2604
- '\u2184': 'c',
2605
- '\u24D3': 'd',
2606
- '\uFF44': 'd',
2607
- '\u1E0B': 'd',
2608
- '\u010F': 'd',
2609
- '\u1E0D': 'd',
2610
- '\u1E11': 'd',
2611
- '\u1E13': 'd',
2612
- '\u1E0F': 'd',
2613
- '\u0111': 'd',
2614
- '\u018C': 'd',
2615
- '\u0256': 'd',
2616
- '\u0257': 'd',
2617
- '\uA77A': 'd',
2618
- '\u01F3': 'dz',
2619
- '\u01C6': 'dz',
2620
- '\u24D4': 'e',
2621
- '\uFF45': 'e',
2622
- '\u00E8': 'e',
2623
- '\u00E9': 'e',
2624
- '\u00EA': 'e',
2625
- '\u1EC1': 'e',
2626
- '\u1EBF': 'e',
2627
- '\u1EC5': 'e',
2628
- '\u1EC3': 'e',
2629
- '\u1EBD': 'e',
2630
- '\u0113': 'e',
2631
- '\u1E15': 'e',
2632
- '\u1E17': 'e',
2633
- '\u0115': 'e',
2634
- '\u0117': 'e',
2635
- '\u00EB': 'e',
2636
- '\u1EBB': 'e',
2637
- '\u011B': 'e',
2638
- '\u0205': 'e',
2639
- '\u0207': 'e',
2640
- '\u1EB9': 'e',
2641
- '\u1EC7': 'e',
2642
- '\u0229': 'e',
2643
- '\u1E1D': 'e',
2644
- '\u0119': 'e',
2645
- '\u1E19': 'e',
2646
- '\u1E1B': 'e',
2647
- '\u0247': 'e',
2648
- '\u025B': 'e',
2649
- '\u01DD': 'e',
2650
- '\u24D5': 'f',
2651
- '\uFF46': 'f',
2652
- '\u1E1F': 'f',
2653
- '\u0192': 'f',
2654
- '\uA77C': 'f',
2655
- '\u24D6': 'g',
2656
- '\uFF47': 'g',
2657
- '\u01F5': 'g',
2658
- '\u011D': 'g',
2659
- '\u1E21': 'g',
2660
- '\u011F': 'g',
2661
- '\u0121': 'g',
2662
- '\u01E7': 'g',
2663
- '\u0123': 'g',
2664
- '\u01E5': 'g',
2665
- '\u0260': 'g',
2666
- '\uA7A1': 'g',
2667
- '\u1D79': 'g',
2668
- '\uA77F': 'g',
2669
- '\u24D7': 'h',
2670
- '\uFF48': 'h',
2671
- '\u0125': 'h',
2672
- '\u1E23': 'h',
2673
- '\u1E27': 'h',
2674
- '\u021F': 'h',
2675
- '\u1E25': 'h',
2676
- '\u1E29': 'h',
2677
- '\u1E2B': 'h',
2678
- '\u1E96': 'h',
2679
- '\u0127': 'h',
2680
- '\u2C68': 'h',
2681
- '\u2C76': 'h',
2682
- '\u0265': 'h',
2683
- '\u0195': 'hv',
2684
- '\u24D8': 'i',
2685
- '\uFF49': 'i',
2686
- '\u00EC': 'i',
2687
- '\u00ED': 'i',
2688
- '\u00EE': 'i',
2689
- '\u0129': 'i',
2690
- '\u012B': 'i',
2691
- '\u012D': 'i',
2692
- '\u00EF': 'i',
2693
- '\u1E2F': 'i',
2694
- '\u1EC9': 'i',
2695
- '\u01D0': 'i',
2696
- '\u0209': 'i',
2697
- '\u020B': 'i',
2698
- '\u1ECB': 'i',
2699
- '\u012F': 'i',
2700
- '\u1E2D': 'i',
2701
- '\u0268': 'i',
2702
- '\u0131': 'i',
2703
- '\u24D9': 'j',
2704
- '\uFF4A': 'j',
2705
- '\u0135': 'j',
2706
- '\u01F0': 'j',
2707
- '\u0249': 'j',
2708
- '\u24DA': 'k',
2709
- '\uFF4B': 'k',
2710
- '\u1E31': 'k',
2711
- '\u01E9': 'k',
2712
- '\u1E33': 'k',
2713
- '\u0137': 'k',
2714
- '\u1E35': 'k',
2715
- '\u0199': 'k',
2716
- '\u2C6A': 'k',
2717
- '\uA741': 'k',
2718
- '\uA743': 'k',
2719
- '\uA745': 'k',
2720
- '\uA7A3': 'k',
2721
- '\u24DB': 'l',
2722
- '\uFF4C': 'l',
2723
- '\u0140': 'l',
2724
- '\u013A': 'l',
2725
- '\u013E': 'l',
2726
- '\u1E37': 'l',
2727
- '\u1E39': 'l',
2728
- '\u013C': 'l',
2729
- '\u1E3D': 'l',
2730
- '\u1E3B': 'l',
2731
- '\u017F': 'l',
2732
- '\u0142': 'l',
2733
- '\u019A': 'l',
2734
- '\u026B': 'l',
2735
- '\u2C61': 'l',
2736
- '\uA749': 'l',
2737
- '\uA781': 'l',
2738
- '\uA747': 'l',
2739
- '\u01C9': 'lj',
2740
- '\u24DC': 'm',
2741
- '\uFF4D': 'm',
2742
- '\u1E3F': 'm',
2743
- '\u1E41': 'm',
2744
- '\u1E43': 'm',
2745
- '\u0271': 'm',
2746
- '\u026F': 'm',
2747
- '\u24DD': 'n',
2748
- '\uFF4E': 'n',
2749
- '\u01F9': 'n',
2750
- '\u0144': 'n',
2751
- '\u00F1': 'n',
2752
- '\u1E45': 'n',
2753
- '\u0148': 'n',
2754
- '\u1E47': 'n',
2755
- '\u0146': 'n',
2756
- '\u1E4B': 'n',
2757
- '\u1E49': 'n',
2758
- '\u019E': 'n',
2759
- '\u0272': 'n',
2760
- '\u0149': 'n',
2761
- '\uA791': 'n',
2762
- '\uA7A5': 'n',
2763
- '\u01CC': 'nj',
2764
- '\u24DE': 'o',
2765
- '\uFF4F': 'o',
2766
- '\u00F2': 'o',
2767
- '\u00F3': 'o',
2768
- '\u00F4': 'o',
2769
- '\u1ED3': 'o',
2770
- '\u1ED1': 'o',
2771
- '\u1ED7': 'o',
2772
- '\u1ED5': 'o',
2773
- '\u00F5': 'o',
2774
- '\u1E4D': 'o',
2775
- '\u022D': 'o',
2776
- '\u1E4F': 'o',
2777
- '\u014D': 'o',
2778
- '\u1E51': 'o',
2779
- '\u1E53': 'o',
2780
- '\u014F': 'o',
2781
- '\u022F': 'o',
2782
- '\u0231': 'o',
2783
- '\u00F6': 'o',
2784
- '\u022B': 'o',
2785
- '\u1ECF': 'o',
2786
- '\u0151': 'o',
2787
- '\u01D2': 'o',
2788
- '\u020D': 'o',
2789
- '\u020F': 'o',
2790
- '\u01A1': 'o',
2791
- '\u1EDD': 'o',
2792
- '\u1EDB': 'o',
2793
- '\u1EE1': 'o',
2794
- '\u1EDF': 'o',
2795
- '\u1EE3': 'o',
2796
- '\u1ECD': 'o',
2797
- '\u1ED9': 'o',
2798
- '\u01EB': 'o',
2799
- '\u01ED': 'o',
2800
- '\u00F8': 'o',
2801
- '\u01FF': 'o',
2802
- '\u0254': 'o',
2803
- '\uA74B': 'o',
2804
- '\uA74D': 'o',
2805
- '\u0275': 'o',
2806
- '\u01A3': 'oi',
2807
- '\u0223': 'ou',
2808
- '\uA74F': 'oo',
2809
- '\u24DF': 'p',
2810
- '\uFF50': 'p',
2811
- '\u1E55': 'p',
2812
- '\u1E57': 'p',
2813
- '\u01A5': 'p',
2814
- '\u1D7D': 'p',
2815
- '\uA751': 'p',
2816
- '\uA753': 'p',
2817
- '\uA755': 'p',
2818
- '\u24E0': 'q',
2819
- '\uFF51': 'q',
2820
- '\u024B': 'q',
2821
- '\uA757': 'q',
2822
- '\uA759': 'q',
2823
- '\u24E1': 'r',
2824
- '\uFF52': 'r',
2825
- '\u0155': 'r',
2826
- '\u1E59': 'r',
2827
- '\u0159': 'r',
2828
- '\u0211': 'r',
2829
- '\u0213': 'r',
2830
- '\u1E5B': 'r',
2831
- '\u1E5D': 'r',
2832
- '\u0157': 'r',
2833
- '\u1E5F': 'r',
2834
- '\u024D': 'r',
2835
- '\u027D': 'r',
2836
- '\uA75B': 'r',
2837
- '\uA7A7': 'r',
2838
- '\uA783': 'r',
2839
- '\u24E2': 's',
2840
- '\uFF53': 's',
2841
- '\u00DF': 's',
2842
- '\u015B': 's',
2843
- '\u1E65': 's',
2844
- '\u015D': 's',
2845
- '\u1E61': 's',
2846
- '\u0161': 's',
2847
- '\u1E67': 's',
2848
- '\u1E63': 's',
2849
- '\u1E69': 's',
2850
- '\u0219': 's',
2851
- '\u015F': 's',
2852
- '\u023F': 's',
2853
- '\uA7A9': 's',
2854
- '\uA785': 's',
2855
- '\u1E9B': 's',
2856
- '\u24E3': 't',
2857
- '\uFF54': 't',
2858
- '\u1E6B': 't',
2859
- '\u1E97': 't',
2860
- '\u0165': 't',
2861
- '\u1E6D': 't',
2862
- '\u021B': 't',
2863
- '\u0163': 't',
2864
- '\u1E71': 't',
2865
- '\u1E6F': 't',
2866
- '\u0167': 't',
2867
- '\u01AD': 't',
2868
- '\u0288': 't',
2869
- '\u2C66': 't',
2870
- '\uA787': 't',
2871
- '\uA729': 'tz',
2872
- '\u24E4': 'u',
2873
- '\uFF55': 'u',
2874
- '\u00F9': 'u',
2875
- '\u00FA': 'u',
2876
- '\u00FB': 'u',
2877
- '\u0169': 'u',
2878
- '\u1E79': 'u',
2879
- '\u016B': 'u',
2880
- '\u1E7B': 'u',
2881
- '\u016D': 'u',
2882
- '\u00FC': 'u',
2883
- '\u01DC': 'u',
2884
- '\u01D8': 'u',
2885
- '\u01D6': 'u',
2886
- '\u01DA': 'u',
2887
- '\u1EE7': 'u',
2888
- '\u016F': 'u',
2889
- '\u0171': 'u',
2890
- '\u01D4': 'u',
2891
- '\u0215': 'u',
2892
- '\u0217': 'u',
2893
- '\u01B0': 'u',
2894
- '\u1EEB': 'u',
2895
- '\u1EE9': 'u',
2896
- '\u1EEF': 'u',
2897
- '\u1EED': 'u',
2898
- '\u1EF1': 'u',
2899
- '\u1EE5': 'u',
2900
- '\u1E73': 'u',
2901
- '\u0173': 'u',
2902
- '\u1E77': 'u',
2903
- '\u1E75': 'u',
2904
- '\u0289': 'u',
2905
- '\u24E5': 'v',
2906
- '\uFF56': 'v',
2907
- '\u1E7D': 'v',
2908
- '\u1E7F': 'v',
2909
- '\u028B': 'v',
2910
- '\uA75F': 'v',
2911
- '\u028C': 'v',
2912
- '\uA761': 'vy',
2913
- '\u24E6': 'w',
2914
- '\uFF57': 'w',
2915
- '\u1E81': 'w',
2916
- '\u1E83': 'w',
2917
- '\u0175': 'w',
2918
- '\u1E87': 'w',
2919
- '\u1E85': 'w',
2920
- '\u1E98': 'w',
2921
- '\u1E89': 'w',
2922
- '\u2C73': 'w',
2923
- '\u24E7': 'x',
2924
- '\uFF58': 'x',
2925
- '\u1E8B': 'x',
2926
- '\u1E8D': 'x',
2927
- '\u24E8': 'y',
2928
- '\uFF59': 'y',
2929
- '\u1EF3': 'y',
2930
- '\u00FD': 'y',
2931
- '\u0177': 'y',
2932
- '\u1EF9': 'y',
2933
- '\u0233': 'y',
2934
- '\u1E8F': 'y',
2935
- '\u00FF': 'y',
2936
- '\u1EF7': 'y',
2937
- '\u1E99': 'y',
2938
- '\u1EF5': 'y',
2939
- '\u01B4': 'y',
2940
- '\u024F': 'y',
2941
- '\u1EFF': 'y',
2942
- '\u24E9': 'z',
2943
- '\uFF5A': 'z',
2944
- '\u017A': 'z',
2945
- '\u1E91': 'z',
2946
- '\u017C': 'z',
2947
- '\u017E': 'z',
2948
- '\u1E93': 'z',
2949
- '\u1E95': 'z',
2950
- '\u01B6': 'z',
2951
- '\u0225': 'z',
2952
- '\u0240': 'z',
2953
- '\u2C6C': 'z',
2954
- '\uA763': 'z',
2955
- '\u0386': '\u0391',
2956
- '\u0388': '\u0395',
2957
- '\u0389': '\u0397',
2958
- '\u038A': '\u0399',
2959
- '\u03AA': '\u0399',
2960
- '\u038C': '\u039F',
2961
- '\u038E': '\u03A5',
2962
- '\u03AB': '\u03A5',
2963
- '\u038F': '\u03A9',
2964
- '\u03AC': '\u03B1',
2965
- '\u03AD': '\u03B5',
2966
- '\u03AE': '\u03B7',
2967
- '\u03AF': '\u03B9',
2968
- '\u03CA': '\u03B9',
2969
- '\u0390': '\u03B9',
2970
- '\u03CC': '\u03BF',
2971
- '\u03CD': '\u03C5',
2972
- '\u03CB': '\u03C5',
2973
- '\u03B0': '\u03C5',
2974
- '\u03C9': '\u03C9',
2975
- '\u03C2': '\u03C3'
2976
- };
2977
-
2978
- return diacritics;
2979
- });
2980
-
2981
- S2.define('select2/data/base',[
2982
- '../utils'
2983
- ], function (Utils) {
2984
- function BaseAdapter ($element, options) {
2985
- BaseAdapter.__super__.constructor.call(this);
2986
- }
2987
-
2988
- Utils.Extend(BaseAdapter, Utils.Observable);
2989
-
2990
- BaseAdapter.prototype.current = function (callback) {
2991
- throw new Error('The `current` method must be defined in child classes.');
2992
- };
2993
-
2994
- BaseAdapter.prototype.query = function (params, callback) {
2995
- throw new Error('The `query` method must be defined in child classes.');
2996
- };
2997
-
2998
- BaseAdapter.prototype.bind = function (container, $container) {
2999
- // Can be implemented in subclasses
3000
- };
3001
-
3002
- BaseAdapter.prototype.destroy = function () {
3003
- // Can be implemented in subclasses
3004
- };
3005
-
3006
- BaseAdapter.prototype.generateResultId = function (container, data) {
3007
- var id = container.id + '-result-';
3008
-
3009
- id += Utils.generateChars(4);
3010
-
3011
- if (data.id != null) {
3012
- id += '-' + data.id.toString();
3013
- } else {
3014
- id += '-' + Utils.generateChars(4);
3015
- }
3016
- return id;
3017
- };
3018
-
3019
- return BaseAdapter;
3020
- });
3021
-
3022
- S2.define('select2/data/select',[
3023
- './base',
3024
- '../utils',
3025
- 'jquery'
3026
- ], function (BaseAdapter, Utils, $) {
3027
- function SelectAdapter ($element, options) {
3028
- this.$element = $element;
3029
- this.options = options;
3030
-
3031
- SelectAdapter.__super__.constructor.call(this);
3032
- }
3033
-
3034
- Utils.Extend(SelectAdapter, BaseAdapter);
3035
-
3036
- SelectAdapter.prototype.current = function (callback) {
3037
- var data = [];
3038
- var self = this;
3039
-
3040
- this.$element.find(':selected').each(function () {
3041
- var $option = $(this);
3042
-
3043
- var option = self.item($option);
3044
-
3045
- data.push(option);
3046
- });
3047
-
3048
- callback(data);
3049
- };
3050
-
3051
- SelectAdapter.prototype.select = function (data) {
3052
- var self = this;
3053
-
3054
- data.selected = true;
3055
-
3056
- // If data.element is a DOM node, use it instead
3057
- if ($(data.element).is('option')) {
3058
- data.element.selected = true;
3059
-
3060
- this.$element.trigger('change');
3061
-
3062
- return;
3063
- }
3064
-
3065
- if (this.$element.prop('multiple')) {
3066
- this.current(function (currentData) {
3067
- var val = [];
3068
-
3069
- data = [data];
3070
- data.push.apply(data, currentData);
3071
-
3072
- for (var d = 0; d < data.length; d++) {
3073
- var id = data[d].id;
3074
-
3075
- if ($.inArray(id, val) === -1) {
3076
- val.push(id);
3077
- }
3078
- }
3079
-
3080
- self.$element.val(val);
3081
- self.$element.trigger('change');
3082
- });
3083
- } else {
3084
- var val = data.id;
3085
-
3086
- this.$element.val(val);
3087
- this.$element.trigger('change');
3088
- }
3089
- };
3090
-
3091
- SelectAdapter.prototype.unselect = function (data) {
3092
- var self = this;
3093
-
3094
- if (!this.$element.prop('multiple')) {
3095
- return;
3096
- }
3097
-
3098
- data.selected = false;
3099
-
3100
- if ($(data.element).is('option')) {
3101
- data.element.selected = false;
3102
-
3103
- this.$element.trigger('change');
3104
-
3105
- return;
3106
- }
3107
-
3108
- this.current(function (currentData) {
3109
- var val = [];
3110
-
3111
- for (var d = 0; d < currentData.length; d++) {
3112
- var id = currentData[d].id;
3113
-
3114
- if (id !== data.id && $.inArray(id, val) === -1) {
3115
- val.push(id);
3116
- }
3117
- }
3118
-
3119
- self.$element.val(val);
3120
-
3121
- self.$element.trigger('change');
3122
- });
3123
- };
3124
-
3125
- SelectAdapter.prototype.bind = function (container, $container) {
3126
- var self = this;
3127
-
3128
- this.container = container;
3129
-
3130
- container.on('select', function (params) {
3131
- self.select(params.data);
3132
- });
3133
-
3134
- container.on('unselect', function (params) {
3135
- self.unselect(params.data);
3136
- });
3137
- };
3138
-
3139
- SelectAdapter.prototype.destroy = function () {
3140
- // Remove anything added to child elements
3141
- this.$element.find('*').each(function () {
3142
- // Remove any custom data set by Select2
3143
- $.removeData(this, 'data');
3144
- });
3145
- };
3146
-
3147
- SelectAdapter.prototype.query = function (params, callback) {
3148
- var data = [];
3149
- var self = this;
3150
-
3151
- var $options = this.$element.children();
3152
-
3153
- $options.each(function () {
3154
- var $option = $(this);
3155
-
3156
- if (!$option.is('option') && !$option.is('optgroup')) {
3157
- return;
3158
- }
3159
-
3160
- var option = self.item($option);
3161
-
3162
- var matches = self.matches(params, option);
3163
-
3164
- if (matches !== null) {
3165
- data.push(matches);
3166
- }
3167
- });
3168
-
3169
- callback({
3170
- results: data
3171
- });
3172
- };
3173
-
3174
- SelectAdapter.prototype.addOptions = function ($options) {
3175
- Utils.appendMany(this.$element, $options);
3176
- };
3177
-
3178
- SelectAdapter.prototype.option = function (data) {
3179
- var option;
3180
-
3181
- if (data.children) {
3182
- option = document.createElement('optgroup');
3183
- option.label = data.text;
3184
- } else {
3185
- option = document.createElement('option');
3186
-
3187
- if (option.textContent !== undefined) {
3188
- option.textContent = data.text;
3189
- } else {
3190
- option.innerText = data.text;
3191
- }
3192
- }
3193
-
3194
- if (data.id) {
3195
- option.value = data.id;
3196
- }
3197
-
3198
- if (data.disabled) {
3199
- option.disabled = true;
3200
- }
3201
-
3202
- if (data.selected) {
3203
- option.selected = true;
3204
- }
3205
-
3206
- if (data.title) {
3207
- option.title = data.title;
3208
- }
3209
-
3210
- var $option = $(option);
3211
-
3212
- var normalizedData = this._normalizeItem(data);
3213
- normalizedData.element = option;
3214
-
3215
- // Override the option's data with the combined data
3216
- $.data(option, 'data', normalizedData);
3217
-
3218
- return $option;
3219
- };
3220
-
3221
- SelectAdapter.prototype.item = function ($option) {
3222
- var data = {};
3223
-
3224
- data = $.data($option[0], 'data');
3225
-
3226
- if (data != null) {
3227
- return data;
3228
- }
3229
-
3230
- if ($option.is('option')) {
3231
- data = {
3232
- id: $option.val(),
3233
- text: $option.text(),
3234
- disabled: $option.prop('disabled'),
3235
- selected: $option.prop('selected'),
3236
- title: $option.prop('title')
3237
- };
3238
- } else if ($option.is('optgroup')) {
3239
- data = {
3240
- text: $option.prop('label'),
3241
- children: [],
3242
- title: $option.prop('title')
3243
- };
3244
-
3245
- var $children = $option.children('option');
3246
- var children = [];
3247
-
3248
- for (var c = 0; c < $children.length; c++) {
3249
- var $child = $($children[c]);
3250
-
3251
- var child = this.item($child);
3252
-
3253
- children.push(child);
3254
- }
3255
-
3256
- data.children = children;
3257
- }
3258
-
3259
- data = this._normalizeItem(data);
3260
- data.element = $option[0];
3261
-
3262
- $.data($option[0], 'data', data);
3263
-
3264
- return data;
3265
- };
3266
-
3267
- SelectAdapter.prototype._normalizeItem = function (item) {
3268
- if (!$.isPlainObject(item)) {
3269
- item = {
3270
- id: item,
3271
- text: item
3272
- };
3273
- }
3274
-
3275
- item = $.extend({}, {
3276
- text: ''
3277
- }, item);
3278
-
3279
- var defaults = {
3280
- selected: false,
3281
- disabled: false
3282
- };
3283
-
3284
- if (item.id != null) {
3285
- item.id = item.id.toString();
3286
- }
3287
-
3288
- if (item.text != null) {
3289
- item.text = item.text.toString();
3290
- }
3291
-
3292
- if (item._resultId == null && item.id && this.container != null) {
3293
- item._resultId = this.generateResultId(this.container, item);
3294
- }
3295
-
3296
- return $.extend({}, defaults, item);
3297
- };
3298
-
3299
- SelectAdapter.prototype.matches = function (params, data) {
3300
- var matcher = this.options.get('matcher');
3301
-
3302
- return matcher(params, data);
3303
- };
3304
-
3305
- return SelectAdapter;
3306
- });
3307
-
3308
- S2.define('select2/data/array',[
3309
- './select',
3310
- '../utils',
3311
- 'jquery'
3312
- ], function (SelectAdapter, Utils, $) {
3313
- function ArrayAdapter ($element, options) {
3314
- var data = options.get('data') || [];
3315
-
3316
- ArrayAdapter.__super__.constructor.call(this, $element, options);
3317
-
3318
- this.addOptions(this.convertToOptions(data));
3319
- }
3320
-
3321
- Utils.Extend(ArrayAdapter, SelectAdapter);
3322
-
3323
- ArrayAdapter.prototype.select = function (data) {
3324
- var $option = this.$element.find('option').filter(function (i, elm) {
3325
- return elm.value == data.id.toString();
3326
- });
3327
-
3328
- if ($option.length === 0) {
3329
- $option = this.option(data);
3330
-
3331
- this.addOptions($option);
3332
- }
3333
-
3334
- ArrayAdapter.__super__.select.call(this, data);
3335
- };
3336
-
3337
- ArrayAdapter.prototype.convertToOptions = function (data) {
3338
- var self = this;
3339
-
3340
- var $existing = this.$element.find('option');
3341
- var existingIds = $existing.map(function () {
3342
- return self.item($(this)).id;
3343
- }).get();
3344
-
3345
- var $options = [];
3346
-
3347
- // Filter out all items except for the one passed in the argument
3348
- function onlyItem (item) {
3349
- return function () {
3350
- return $(this).val() == item.id;
3351
- };
3352
- }
3353
-
3354
- for (var d = 0; d < data.length; d++) {
3355
- var item = this._normalizeItem(data[d]);
3356
-
3357
- // Skip items which were pre-loaded, only merge the data
3358
- if ($.inArray(item.id, existingIds) >= 0) {
3359
- var $existingOption = $existing.filter(onlyItem(item));
3360
-
3361
- var existingData = this.item($existingOption);
3362
- var newData = $.extend(true, {}, item, existingData);
3363
-
3364
- var $newOption = this.option(newData);
3365
-
3366
- $existingOption.replaceWith($newOption);
3367
-
3368
- continue;
3369
- }
3370
-
3371
- var $option = this.option(item);
3372
-
3373
- if (item.children) {
3374
- var $children = this.convertToOptions(item.children);
3375
-
3376
- Utils.appendMany($option, $children);
3377
- }
3378
-
3379
- $options.push($option);
3380
- }
3381
-
3382
- return $options;
3383
- };
3384
-
3385
- return ArrayAdapter;
3386
- });
3387
-
3388
- S2.define('select2/data/ajax',[
3389
- './array',
3390
- '../utils',
3391
- 'jquery'
3392
- ], function (ArrayAdapter, Utils, $) {
3393
- function AjaxAdapter ($element, options) {
3394
- this.ajaxOptions = this._applyDefaults(options.get('ajax'));
3395
-
3396
- if (this.ajaxOptions.processResults != null) {
3397
- this.processResults = this.ajaxOptions.processResults;
3398
- }
3399
-
3400
- AjaxAdapter.__super__.constructor.call(this, $element, options);
3401
- }
3402
-
3403
- Utils.Extend(AjaxAdapter, ArrayAdapter);
3404
-
3405
- AjaxAdapter.prototype._applyDefaults = function (options) {
3406
- var defaults = {
3407
- data: function (params) {
3408
- return $.extend({}, params, {
3409
- q: params.term
3410
- });
3411
- },
3412
- transport: function (params, success, failure) {
3413
- var $request = $.ajax(params);
3414
-
3415
- $request.then(success);
3416
- $request.fail(failure);
3417
-
3418
- return $request;
3419
- }
3420
- };
3421
-
3422
- return $.extend({}, defaults, options, true);
3423
- };
3424
-
3425
- AjaxAdapter.prototype.processResults = function (results) {
3426
- return results;
3427
- };
3428
-
3429
- AjaxAdapter.prototype.query = function (params, callback) {
3430
- var matches = [];
3431
- var self = this;
3432
-
3433
- if (this._request != null) {
3434
- // JSONP requests cannot always be aborted
3435
- if ($.isFunction(this._request.abort)) {
3436
- this._request.abort();
3437
- }
3438
-
3439
- this._request = null;
3440
- }
3441
-
3442
- var options = $.extend({
3443
- type: 'GET'
3444
- }, this.ajaxOptions);
3445
-
3446
- if (typeof options.url === 'function') {
3447
- options.url = options.url.call(this.$element, params);
3448
- }
3449
-
3450
- if (typeof options.data === 'function') {
3451
- options.data = options.data.call(this.$element, params);
3452
- }
3453
-
3454
- function request () {
3455
- var $request = options.transport(options, function (data) {
3456
- var results = self.processResults(data, params);
3457
-
3458
- if (self.options.get('debug') && window.console && console.error) {
3459
- // Check to make sure that the response included a `results` key.
3460
- if (!results || !results.results || !$.isArray(results.results)) {
3461
- console.error(
3462
- 'Select2: The AJAX results did not return an array in the ' +
3463
- '`results` key of the response.'
3464
- );
3465
- }
3466
- }
3467
-
3468
- callback(results);
3469
- }, function () {
3470
- // Attempt to detect if a request was aborted
3471
- // Only works if the transport exposes a status property
3472
- if ($request.status && $request.status === '0') {
3473
- return;
3474
- }
3475
-
3476
- self.trigger('results:message', {
3477
- message: 'errorLoading'
3478
- });
3479
- });
3480
-
3481
- self._request = $request;
3482
- }
3483
-
3484
- if (this.ajaxOptions.delay && params.term != null) {
3485
- if (this._queryTimeout) {
3486
- window.clearTimeout(this._queryTimeout);
3487
- }
3488
-
3489
- this._queryTimeout = window.setTimeout(request, this.ajaxOptions.delay);
3490
- } else {
3491
- request();
3492
- }
3493
- };
3494
-
3495
- return AjaxAdapter;
3496
- });
3497
-
3498
- S2.define('select2/data/tags',[
3499
- 'jquery'
3500
- ], function ($) {
3501
- function Tags (decorated, $element, options) {
3502
- var tags = options.get('tags');
3503
-
3504
- var createTag = options.get('createTag');
3505
-
3506
- if (createTag !== undefined) {
3507
- this.createTag = createTag;
3508
- }
3509
-
3510
- var insertTag = options.get('insertTag');
3511
-
3512
- if (insertTag !== undefined) {
3513
- this.insertTag = insertTag;
3514
- }
3515
-
3516
- decorated.call(this, $element, options);
3517
-
3518
- if ($.isArray(tags)) {
3519
- for (var t = 0; t < tags.length; t++) {
3520
- var tag = tags[t];
3521
- var item = this._normalizeItem(tag);
3522
-
3523
- var $option = this.option(item);
3524
-
3525
- this.$element.append($option);
3526
- }
3527
- }
3528
- }
3529
-
3530
- Tags.prototype.query = function (decorated, params, callback) {
3531
- var self = this;
3532
-
3533
- this._removeOldTags();
3534
-
3535
- if (params.term == null || params.page != null) {
3536
- decorated.call(this, params, callback);
3537
- return;
3538
- }
3539
-
3540
- function wrapper (obj, child) {
3541
- var data = obj.results;
3542
-
3543
- for (var i = 0; i < data.length; i++) {
3544
- var option = data[i];
3545
-
3546
- var checkChildren = (
3547
- option.children != null &&
3548
- !wrapper({
3549
- results: option.children
3550
- }, true)
3551
- );
3552
-
3553
- var checkText = option.text === params.term;
3554
-
3555
- if (checkText || checkChildren) {
3556
- if (child) {
3557
- return false;
3558
- }
3559
-
3560
- obj.data = data;
3561
- callback(obj);
3562
-
3563
- return;
3564
- }
3565
- }
3566
-
3567
- if (child) {
3568
- return true;
3569
- }
3570
-
3571
- var tag = self.createTag(params);
3572
-
3573
- if (tag != null) {
3574
- var $option = self.option(tag);
3575
- $option.attr('data-select2-tag', true);
3576
-
3577
- self.addOptions([$option]);
3578
-
3579
- self.insertTag(data, tag);
3580
- }
3581
-
3582
- obj.results = data;
3583
-
3584
- callback(obj);
3585
- }
3586
-
3587
- decorated.call(this, params, wrapper);
3588
- };
3589
-
3590
- Tags.prototype.createTag = function (decorated, params) {
3591
- var term = $.trim(params.term);
3592
-
3593
- if (term === '') {
3594
- return null;
3595
- }
3596
-
3597
- return {
3598
- id: term,
3599
- text: term
3600
- };
3601
- };
3602
-
3603
- Tags.prototype.insertTag = function (_, data, tag) {
3604
- data.unshift(tag);
3605
- };
3606
-
3607
- Tags.prototype._removeOldTags = function (_) {
3608
- var tag = this._lastTag;
3609
-
3610
- var $options = this.$element.find('option[data-select2-tag]');
3611
-
3612
- $options.each(function () {
3613
- if (this.selected) {
3614
- return;
3615
- }
3616
-
3617
- $(this).remove();
3618
- });
3619
- };
3620
-
3621
- return Tags;
3622
- });
3623
-
3624
- S2.define('select2/data/tokenizer',[
3625
- 'jquery'
3626
- ], function ($) {
3627
- function Tokenizer (decorated, $element, options) {
3628
- var tokenizer = options.get('tokenizer');
3629
-
3630
- if (tokenizer !== undefined) {
3631
- this.tokenizer = tokenizer;
3632
- }
3633
-
3634
- decorated.call(this, $element, options);
3635
- }
3636
-
3637
- Tokenizer.prototype.bind = function (decorated, container, $container) {
3638
- decorated.call(this, container, $container);
3639
-
3640
- this.$search = container.dropdown.$search || container.selection.$search ||
3641
- $container.find('.select2-search__field');
3642
- };
3643
-
3644
- Tokenizer.prototype.query = function (decorated, params, callback) {
3645
- var self = this;
3646
-
3647
- function createAndSelect (data) {
3648
- // Normalize the data object so we can use it for checks
3649
- var item = self._normalizeItem(data);
3650
-
3651
- // Check if the data object already exists as a tag
3652
- // Select it if it doesn't
3653
- var $existingOptions = self.$element.find('option').filter(function () {
3654
- return $(this).val() === item.id;
3655
- });
3656
-
3657
- // If an existing option wasn't found for it, create the option
3658
- if (!$existingOptions.length) {
3659
- var $option = self.option(item);
3660
- $option.attr('data-select2-tag', true);
3661
-
3662
- self._removeOldTags();
3663
- self.addOptions([$option]);
3664
- }
3665
-
3666
- // Select the item, now that we know there is an option for it
3667
- select(item);
3668
- }
3669
-
3670
- function select (data) {
3671
- self.trigger('select', {
3672
- data: data
3673
- });
3674
- }
3675
-
3676
- params.term = params.term || '';
3677
-
3678
- var tokenData = this.tokenizer(params, this.options, createAndSelect);
3679
-
3680
- if (tokenData.term !== params.term) {
3681
- // Replace the search term if we have the search box
3682
- if (this.$search.length) {
3683
- this.$search.val(tokenData.term);
3684
- this.$search.focus();
3685
- }
3686
-
3687
- params.term = tokenData.term;
3688
- }
3689
-
3690
- decorated.call(this, params, callback);
3691
- };
3692
-
3693
- Tokenizer.prototype.tokenizer = function (_, params, options, callback) {
3694
- var separators = options.get('tokenSeparators') || [];
3695
- var term = params.term;
3696
- var i = 0;
3697
-
3698
- var createTag = this.createTag || function (params) {
3699
- return {
3700
- id: params.term,
3701
- text: params.term
3702
- };
3703
- };
3704
-
3705
- while (i < term.length) {
3706
- var termChar = term[i];
3707
-
3708
- if ($.inArray(termChar, separators) === -1) {
3709
- i++;
3710
-
3711
- continue;
3712
- }
3713
-
3714
- var part = term.substr(0, i);
3715
- var partParams = $.extend({}, params, {
3716
- term: part
3717
- });
3718
-
3719
- var data = createTag(partParams);
3720
-
3721
- if (data == null) {
3722
- i++;
3723
- continue;
3724
- }
3725
-
3726
- callback(data);
3727
-
3728
- // Reset the term to not include the tokenized portion
3729
- term = term.substr(i + 1) || '';
3730
- i = 0;
3731
- }
3732
-
3733
- return {
3734
- term: term
3735
- };
3736
- };
3737
-
3738
- return Tokenizer;
3739
- });
3740
-
3741
- S2.define('select2/data/minimumInputLength',[
3742
-
3743
- ], function () {
3744
- function MinimumInputLength (decorated, $e, options) {
3745
- this.minimumInputLength = options.get('minimumInputLength');
3746
-
3747
- decorated.call(this, $e, options);
3748
- }
3749
-
3750
- MinimumInputLength.prototype.query = function (decorated, params, callback) {
3751
- params.term = params.term || '';
3752
-
3753
- if (params.term.length < this.minimumInputLength) {
3754
- this.trigger('results:message', {
3755
- message: 'inputTooShort',
3756
- args: {
3757
- minimum: this.minimumInputLength,
3758
- input: params.term,
3759
- params: params
3760
- }
3761
- });
3762
-
3763
- return;
3764
- }
3765
-
3766
- decorated.call(this, params, callback);
3767
- };
3768
-
3769
- return MinimumInputLength;
3770
- });
3771
-
3772
- S2.define('select2/data/maximumInputLength',[
3773
-
3774
- ], function () {
3775
- function MaximumInputLength (decorated, $e, options) {
3776
- this.maximumInputLength = options.get('maximumInputLength');
3777
-
3778
- decorated.call(this, $e, options);
3779
- }
3780
-
3781
- MaximumInputLength.prototype.query = function (decorated, params, callback) {
3782
- params.term = params.term || '';
3783
-
3784
- if (this.maximumInputLength > 0 &&
3785
- params.term.length > this.maximumInputLength) {
3786
- this.trigger('results:message', {
3787
- message: 'inputTooLong',
3788
- args: {
3789
- maximum: this.maximumInputLength,
3790
- input: params.term,
3791
- params: params
3792
- }
3793
- });
3794
-
3795
- return;
3796
- }
3797
-
3798
- decorated.call(this, params, callback);
3799
- };
3800
-
3801
- return MaximumInputLength;
3802
- });
3803
-
3804
- S2.define('select2/data/maximumSelectionLength',[
3805
-
3806
- ], function (){
3807
- function MaximumSelectionLength (decorated, $e, options) {
3808
- this.maximumSelectionLength = options.get('maximumSelectionLength');
3809
-
3810
- decorated.call(this, $e, options);
3811
- }
3812
-
3813
- MaximumSelectionLength.prototype.query =
3814
- function (decorated, params, callback) {
3815
- var self = this;
3816
-
3817
- this.current(function (currentData) {
3818
- var count = currentData != null ? currentData.length : 0;
3819
- if (self.maximumSelectionLength > 0 &&
3820
- count >= self.maximumSelectionLength) {
3821
- self.trigger('results:message', {
3822
- message: 'maximumSelected',
3823
- args: {
3824
- maximum: self.maximumSelectionLength
3825
- }
3826
- });
3827
- return;
3828
- }
3829
- decorated.call(self, params, callback);
3830
- });
3831
- };
3832
-
3833
- return MaximumSelectionLength;
3834
- });
3835
-
3836
- S2.define('select2/dropdown',[
3837
- 'jquery',
3838
- './utils'
3839
- ], function ($, Utils) {
3840
- function Dropdown ($element, options) {
3841
- this.$element = $element;
3842
- this.options = options;
3843
-
3844
- Dropdown.__super__.constructor.call(this);
3845
- }
3846
-
3847
- Utils.Extend(Dropdown, Utils.Observable);
3848
-
3849
- Dropdown.prototype.render = function () {
3850
- var $dropdown = $(
3851
- '<span class="select2-dropdown">' +
3852
- '<span class="select2-results"></span>' +
3853
- '</span>'
3854
- );
3855
-
3856
- $dropdown.attr('dir', this.options.get('dir'));
3857
-
3858
- this.$dropdown = $dropdown;
3859
-
3860
- return $dropdown;
3861
- };
3862
-
3863
- Dropdown.prototype.bind = function () {
3864
- // Should be implemented in subclasses
3865
- };
3866
-
3867
- Dropdown.prototype.position = function ($dropdown, $container) {
3868
- // Should be implmented in subclasses
3869
- };
3870
-
3871
- Dropdown.prototype.destroy = function () {
3872
- // Remove the dropdown from the DOM
3873
- this.$dropdown.remove();
3874
- };
3875
-
3876
- return Dropdown;
3877
- });
3878
-
3879
- S2.define('select2/dropdown/search',[
3880
- 'jquery',
3881
- '../utils'
3882
- ], function ($, Utils) {
3883
- function Search () { }
3884
-
3885
- Search.prototype.render = function (decorated) {
3886
- var $rendered = decorated.call(this);
3887
-
3888
- var $search = $(
3889
- '<span class="select2-search select2-search--dropdown">' +
3890
- '<input class="select2-search__field" type="search" tabindex="-1"' +
3891
- ' autocomplete="off" autocorrect="off" autocapitalize="off"' +
3892
- ' spellcheck="false" role="textbox" />' +
3893
- '</span>'
3894
- );
3895
-
3896
- this.$searchContainer = $search;
3897
- this.$search = $search.find('input');
3898
-
3899
- $rendered.prepend($search);
3900
-
3901
- return $rendered;
3902
- };
3903
-
3904
- Search.prototype.bind = function (decorated, container, $container) {
3905
- var self = this;
3906
-
3907
- decorated.call(this, container, $container);
3908
-
3909
- this.$search.on('keydown', function (evt) {
3910
- self.trigger('keypress', evt);
3911
-
3912
- self._keyUpPrevented = evt.isDefaultPrevented();
3913
- });
3914
-
3915
- // Workaround for browsers which do not support the `input` event
3916
- // This will prevent double-triggering of events for browsers which support
3917
- // both the `keyup` and `input` events.
3918
- this.$search.on('input', function (evt) {
3919
- // Unbind the duplicated `keyup` event
3920
- $(this).off('keyup');
3921
- });
3922
-
3923
- this.$search.on('keyup input', function (evt) {
3924
- self.handleSearch(evt);
3925
- });
3926
-
3927
- container.on('open', function () {
3928
- self.$search.attr('tabindex', 0);
3929
-
3930
- self.$search.focus();
3931
-
3932
- window.setTimeout(function () {
3933
- self.$search.focus();
3934
- }, 0);
3935
- });
3936
-
3937
- container.on('close', function () {
3938
- self.$search.attr('tabindex', -1);
3939
-
3940
- self.$search.val('');
3941
- });
3942
-
3943
- container.on('focus', function () {
3944
- if (container.isOpen()) {
3945
- self.$search.focus();
3946
- }
3947
- });
3948
-
3949
- container.on('results:all', function (params) {
3950
- if (params.query.term == null || params.query.term === '') {
3951
- var showSearch = self.showSearch(params);
3952
-
3953
- if (showSearch) {
3954
- self.$searchContainer.removeClass('select2-search--hide');
3955
- } else {
3956
- self.$searchContainer.addClass('select2-search--hide');
3957
- }
3958
- }
3959
- });
3960
- };
3961
-
3962
- Search.prototype.handleSearch = function (evt) {
3963
- if (!this._keyUpPrevented) {
3964
- var input = this.$search.val();
3965
-
3966
- this.trigger('query', {
3967
- term: input
3968
- });
3969
- }
3970
-
3971
- this._keyUpPrevented = false;
3972
- };
3973
-
3974
- Search.prototype.showSearch = function (_, params) {
3975
- return true;
3976
- };
3977
-
3978
- return Search;
3979
- });
3980
-
3981
- S2.define('select2/dropdown/hidePlaceholder',[
3982
-
3983
- ], function () {
3984
- function HidePlaceholder (decorated, $element, options, dataAdapter) {
3985
- this.placeholder = this.normalizePlaceholder(options.get('placeholder'));
3986
-
3987
- decorated.call(this, $element, options, dataAdapter);
3988
- }
3989
-
3990
- HidePlaceholder.prototype.append = function (decorated, data) {
3991
- data.results = this.removePlaceholder(data.results);
3992
-
3993
- decorated.call(this, data);
3994
- };
3995
-
3996
- HidePlaceholder.prototype.normalizePlaceholder = function (_, placeholder) {
3997
- if (typeof placeholder === 'string') {
3998
- placeholder = {
3999
- id: '',
4000
- text: placeholder
4001
- };
4002
- }
4003
-
4004
- return placeholder;
4005
- };
4006
-
4007
- HidePlaceholder.prototype.removePlaceholder = function (_, data) {
4008
- var modifiedData = data.slice(0);
4009
-
4010
- for (var d = data.length - 1; d >= 0; d--) {
4011
- var item = data[d];
4012
-
4013
- if (this.placeholder.id === item.id) {
4014
- modifiedData.splice(d, 1);
4015
- }
4016
- }
4017
-
4018
- return modifiedData;
4019
- };
4020
-
4021
- return HidePlaceholder;
4022
- });
4023
-
4024
- S2.define('select2/dropdown/infiniteScroll',[
4025
- 'jquery'
4026
- ], function ($) {
4027
- function InfiniteScroll (decorated, $element, options, dataAdapter) {
4028
- this.lastParams = {};
4029
-
4030
- decorated.call(this, $element, options, dataAdapter);
4031
-
4032
- this.$loadingMore = this.createLoadingMore();
4033
- this.loading = false;
4034
- }
4035
-
4036
- InfiniteScroll.prototype.append = function (decorated, data) {
4037
- this.$loadingMore.remove();
4038
- this.loading = false;
4039
-
4040
- decorated.call(this, data);
4041
-
4042
- if (this.showLoadingMore(data)) {
4043
- this.$results.append(this.$loadingMore);
4044
- }
4045
- };
4046
-
4047
- InfiniteScroll.prototype.bind = function (decorated, container, $container) {
4048
- var self = this;
4049
-
4050
- decorated.call(this, container, $container);
4051
-
4052
- container.on('query', function (params) {
4053
- self.lastParams = params;
4054
- self.loading = true;
4055
- });
4056
-
4057
- container.on('query:append', function (params) {
4058
- self.lastParams = params;
4059
- self.loading = true;
4060
- });
4061
-
4062
- this.$results.on('scroll', function () {
4063
- var isLoadMoreVisible = $.contains(
4064
- document.documentElement,
4065
- self.$loadingMore[0]
4066
- );
4067
-
4068
- if (self.loading || !isLoadMoreVisible) {
4069
- return;
4070
- }
4071
-
4072
- var currentOffset = self.$results.offset().top +
4073
- self.$results.outerHeight(false);
4074
- var loadingMoreOffset = self.$loadingMore.offset().top +
4075
- self.$loadingMore.outerHeight(false);
4076
-
4077
- if (currentOffset + 50 >= loadingMoreOffset) {
4078
- self.loadMore();
4079
- }
4080
- });
4081
- };
4082
-
4083
- InfiniteScroll.prototype.loadMore = function () {
4084
- this.loading = true;
4085
-
4086
- var params = $.extend({}, {page: 1}, this.lastParams);
4087
-
4088
- params.page++;
4089
-
4090
- this.trigger('query:append', params);
4091
- };
4092
-
4093
- InfiniteScroll.prototype.showLoadingMore = function (_, data) {
4094
- return data.pagination && data.pagination.more;
4095
- };
4096
-
4097
- InfiniteScroll.prototype.createLoadingMore = function () {
4098
- var $option = $(
4099
- '<li ' +
4100
- 'class="select2-results__option select2-results__option--load-more"' +
4101
- 'role="treeitem" aria-disabled="true"></li>'
4102
- );
4103
-
4104
- var message = this.options.get('translations').get('loadingMore');
4105
-
4106
- $option.html(message(this.lastParams));
4107
-
4108
- return $option;
4109
- };
4110
-
4111
- return InfiniteScroll;
4112
- });
4113
-
4114
- S2.define('select2/dropdown/attachBody',[
4115
- 'jquery',
4116
- '../utils'
4117
- ], function ($, Utils) {
4118
- function AttachBody (decorated, $element, options) {
4119
- this.$dropdownParent = options.get('dropdownParent') || $(document.body);
4120
-
4121
- decorated.call(this, $element, options);
4122
- }
4123
-
4124
- AttachBody.prototype.bind = function (decorated, container, $container) {
4125
- var self = this;
4126
-
4127
- var setupResultsEvents = false;
4128
-
4129
- decorated.call(this, container, $container);
4130
-
4131
- container.on('open', function () {
4132
- self._showDropdown();
4133
- self._attachPositioningHandler(container);
4134
-
4135
- if (!setupResultsEvents) {
4136
- setupResultsEvents = true;
4137
-
4138
- container.on('results:all', function () {
4139
- self._positionDropdown();
4140
- self._resizeDropdown();
4141
- });
4142
-
4143
- container.on('results:append', function () {
4144
- self._positionDropdown();
4145
- self._resizeDropdown();
4146
- });
4147
- }
4148
- });
4149
-
4150
- container.on('close', function () {
4151
- self._hideDropdown();
4152
- self._detachPositioningHandler(container);
4153
- });
4154
-
4155
- this.$dropdownContainer.on('mousedown', function (evt) {
4156
- evt.stopPropagation();
4157
- });
4158
- };
4159
-
4160
- AttachBody.prototype.destroy = function (decorated) {
4161
- decorated.call(this);
4162
-
4163
- this.$dropdownContainer.remove();
4164
- };
4165
-
4166
- AttachBody.prototype.position = function (decorated, $dropdown, $container) {
4167
- // Clone all of the container classes
4168
- $dropdown.attr('class', $container.attr('class'));
4169
-
4170
- $dropdown.removeClass('select2');
4171
- $dropdown.addClass('select2-container--open');
4172
-
4173
- $dropdown.css({
4174
- position: 'absolute',
4175
- top: -999999
4176
- });
4177
-
4178
- this.$container = $container;
4179
- };
4180
-
4181
- AttachBody.prototype.render = function (decorated) {
4182
- var $container = $('<span></span>');
4183
-
4184
- var $dropdown = decorated.call(this);
4185
- $container.append($dropdown);
4186
-
4187
- this.$dropdownContainer = $container;
4188
-
4189
- return $container;
4190
- };
4191
-
4192
- AttachBody.prototype._hideDropdown = function (decorated) {
4193
- this.$dropdownContainer.detach();
4194
- };
4195
-
4196
- AttachBody.prototype._attachPositioningHandler =
4197
- function (decorated, container) {
4198
- var self = this;
4199
-
4200
- var scrollEvent = 'scroll.select2.' + container.id;
4201
- var resizeEvent = 'resize.select2.' + container.id;
4202
- var orientationEvent = 'orientationchange.select2.' + container.id;
4203
-
4204
- var $watchers = this.$container.parents().filter(Utils.hasScroll);
4205
- $watchers.each(function () {
4206
- $(this).data('select2-scroll-position', {
4207
- x: $(this).scrollLeft(),
4208
- y: $(this).scrollTop()
4209
- });
4210
- });
4211
-
4212
- $watchers.on(scrollEvent, function (ev) {
4213
- var position = $(this).data('select2-scroll-position');
4214
- $(this).scrollTop(position.y);
4215
- });
4216
-
4217
- $(window).on(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent,
4218
- function (e) {
4219
- self._positionDropdown();
4220
- self._resizeDropdown();
4221
- });
4222
- };
4223
-
4224
- AttachBody.prototype._detachPositioningHandler =
4225
- function (decorated, container) {
4226
- var scrollEvent = 'scroll.select2.' + container.id;
4227
- var resizeEvent = 'resize.select2.' + container.id;
4228
- var orientationEvent = 'orientationchange.select2.' + container.id;
4229
-
4230
- var $watchers = this.$container.parents().filter(Utils.hasScroll);
4231
- $watchers.off(scrollEvent);
4232
-
4233
- $(window).off(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent);
4234
- };
4235
-
4236
- AttachBody.prototype._positionDropdown = function () {
4237
- var $window = $(window);
4238
-
4239
- var isCurrentlyAbove = this.$dropdown.hasClass('select2-dropdown--above');
4240
- var isCurrentlyBelow = this.$dropdown.hasClass('select2-dropdown--below');
4241
-
4242
- var newDirection = null;
4243
-
4244
- var offset = this.$container.offset();
4245
-
4246
- offset.bottom = offset.top + this.$container.outerHeight(false);
4247
-
4248
- var container = {
4249
- height: this.$container.outerHeight(false)
4250
- };
4251
-
4252
- container.top = offset.top;
4253
- container.bottom = offset.top + container.height;
4254
-
4255
- var dropdown = {
4256
- height: this.$dropdown.outerHeight(false)
4257
- };
4258
-
4259
- var viewport = {
4260
- top: $window.scrollTop(),
4261
- bottom: $window.scrollTop() + $window.height()
4262
- };
4263
-
4264
- var enoughRoomAbove = viewport.top < (offset.top - dropdown.height);
4265
- var enoughRoomBelow = viewport.bottom > (offset.bottom + dropdown.height);
4266
-
4267
- var css = {
4268
- left: offset.left,
4269
- top: container.bottom
4270
- };
4271
-
4272
- // Determine what the parent element is to use for calciulating the offset
4273
- var $offsetParent = this.$dropdownParent;
4274
-
4275
- // For statically positoned elements, we need to get the element
4276
- // that is determining the offset
4277
- if ($offsetParent.css('position') === 'static') {
4278
- $offsetParent = $offsetParent.offsetParent();
4279
- }
4280
-
4281
- var parentOffset = $offsetParent.offset();
4282
-
4283
- css.top -= parentOffset.top;
4284
- css.left -= parentOffset.left;
4285
-
4286
- if (!isCurrentlyAbove && !isCurrentlyBelow) {
4287
- newDirection = 'below';
4288
- }
4289
-
4290
- if (!enoughRoomBelow && enoughRoomAbove && !isCurrentlyAbove) {
4291
- newDirection = 'above';
4292
- } else if (!enoughRoomAbove && enoughRoomBelow && isCurrentlyAbove) {
4293
- newDirection = 'below';
4294
- }
4295
-
4296
- if (newDirection == 'above' ||
4297
- (isCurrentlyAbove && newDirection !== 'below')) {
4298
- css.top = container.top - parentOffset.top - dropdown.height;
4299
- }
4300
-
4301
- if (newDirection != null) {
4302
- this.$dropdown
4303
- .removeClass('select2-dropdown--below select2-dropdown--above')
4304
- .addClass('select2-dropdown--' + newDirection);
4305
- this.$container
4306
- .removeClass('select2-container--below select2-container--above')
4307
- .addClass('select2-container--' + newDirection);
4308
- }
4309
-
4310
- this.$dropdownContainer.css(css);
4311
- };
4312
-
4313
- AttachBody.prototype._resizeDropdown = function () {
4314
- var css = {
4315
- width: this.$container.outerWidth(false) + 'px'
4316
- };
4317
-
4318
- if (this.options.get('dropdownAutoWidth')) {
4319
- css.minWidth = css.width;
4320
- css.position = 'relative';
4321
- css.width = 'auto';
4322
- }
4323
-
4324
- this.$dropdown.css(css);
4325
- };
4326
-
4327
- AttachBody.prototype._showDropdown = function (decorated) {
4328
- this.$dropdownContainer.appendTo(this.$dropdownParent);
4329
-
4330
- this._positionDropdown();
4331
- this._resizeDropdown();
4332
- };
4333
-
4334
- return AttachBody;
4335
- });
4336
-
4337
- S2.define('select2/dropdown/minimumResultsForSearch',[
4338
-
4339
- ], function () {
4340
- function countResults (data) {
4341
- var count = 0;
4342
-
4343
- for (var d = 0; d < data.length; d++) {
4344
- var item = data[d];
4345
-
4346
- if (item.children) {
4347
- count += countResults(item.children);
4348
- } else {
4349
- count++;
4350
- }
4351
- }
4352
-
4353
- return count;
4354
- }
4355
-
4356
- function MinimumResultsForSearch (decorated, $element, options, dataAdapter) {
4357
- this.minimumResultsForSearch = options.get('minimumResultsForSearch');
4358
-
4359
- if (this.minimumResultsForSearch < 0) {
4360
- this.minimumResultsForSearch = Infinity;
4361
- }
4362
-
4363
- decorated.call(this, $element, options, dataAdapter);
4364
- }
4365
-
4366
- MinimumResultsForSearch.prototype.showSearch = function (decorated, params) {
4367
- if (countResults(params.data.results) < this.minimumResultsForSearch) {
4368
- return false;
4369
- }
4370
-
4371
- return decorated.call(this, params);
4372
- };
4373
-
4374
- return MinimumResultsForSearch;
4375
- });
4376
-
4377
- S2.define('select2/dropdown/selectOnClose',[
4378
-
4379
- ], function () {
4380
- function SelectOnClose () { }
4381
-
4382
- SelectOnClose.prototype.bind = function (decorated, container, $container) {
4383
- var self = this;
4384
-
4385
- decorated.call(this, container, $container);
4386
-
4387
- container.on('close', function (params) {
4388
- self._handleSelectOnClose(params);
4389
- });
4390
- };
4391
-
4392
- SelectOnClose.prototype._handleSelectOnClose = function (_, params) {
4393
- if (params && params.originalSelect2Event != null) {
4394
- var event = params.originalSelect2Event;
4395
-
4396
- // Don't select an item if the close event was triggered from a select or
4397
- // unselect event
4398
- if (event._type === 'select' || event._type === 'unselect') {
4399
- return;
4400
- }
4401
- }
4402
-
4403
- var $highlightedResults = this.getHighlightedResults();
4404
-
4405
- // Only select highlighted results
4406
- if ($highlightedResults.length < 1) {
4407
- return;
4408
- }
4409
-
4410
- var data = $highlightedResults.data('data');
4411
-
4412
- // Don't re-select already selected resulte
4413
- if (
4414
- (data.element != null && data.element.selected) ||
4415
- (data.element == null && data.selected)
4416
- ) {
4417
- return;
4418
- }
4419
-
4420
- this.trigger('select', {
4421
- data: data
4422
- });
4423
- };
4424
-
4425
- return SelectOnClose;
4426
- });
4427
-
4428
- S2.define('select2/dropdown/closeOnSelect',[
4429
-
4430
- ], function () {
4431
- function CloseOnSelect () { }
4432
-
4433
- CloseOnSelect.prototype.bind = function (decorated, container, $container) {
4434
- var self = this;
4435
-
4436
- decorated.call(this, container, $container);
4437
-
4438
- container.on('select', function (evt) {
4439
- self._selectTriggered(evt);
4440
- });
4441
-
4442
- container.on('unselect', function (evt) {
4443
- self._selectTriggered(evt);
4444
- });
4445
- };
4446
-
4447
- CloseOnSelect.prototype._selectTriggered = function (_, evt) {
4448
- var originalEvent = evt.originalEvent;
4449
-
4450
- // Don't close if the control key is being held
4451
- if (originalEvent && originalEvent.ctrlKey) {
4452
- return;
4453
- }
4454
-
4455
- this.trigger('close', {
4456
- originalEvent: originalEvent,
4457
- originalSelect2Event: evt
4458
- });
4459
- };
4460
-
4461
- return CloseOnSelect;
4462
- });
4463
-
4464
- S2.define('select2/i18n/en',[],function () {
4465
- // English
4466
- return {
4467
- errorLoading: function () {
4468
- return 'The results could not be loaded.';
4469
- },
4470
- inputTooLong: function (args) {
4471
- var overChars = args.input.length - args.maximum;
4472
-
4473
- var message = 'Please delete ' + overChars + ' character';
4474
-
4475
- if (overChars != 1) {
4476
- message += 's';
4477
- }
4478
-
4479
- return message;
4480
- },
4481
- inputTooShort: function (args) {
4482
- var remainingChars = args.minimum - args.input.length;
4483
-
4484
- var message = 'Please enter ' + remainingChars + ' or more characters';
4485
-
4486
- return message;
4487
- },
4488
- loadingMore: function () {
4489
- return 'Loading more results…';
4490
- },
4491
- maximumSelected: function (args) {
4492
- var message = 'You can only select ' + args.maximum + ' item';
4493
-
4494
- if (args.maximum != 1) {
4495
- message += 's';
4496
- }
4497
-
4498
- return message;
4499
- },
4500
- noResults: function () {
4501
- return 'No results found';
4502
- },
4503
- searching: function () {
4504
- return 'Searching…';
4505
- }
4506
- };
4507
- });
4508
-
4509
- S2.define('select2/defaults',[
4510
- 'jquery',
4511
- 'require',
4512
-
4513
- './results',
4514
-
4515
- './selection/single',
4516
- './selection/multiple',
4517
- './selection/placeholder',
4518
- './selection/allowClear',
4519
- './selection/search',
4520
- './selection/eventRelay',
4521
-
4522
- './utils',
4523
- './translation',
4524
- './diacritics',
4525
-
4526
- './data/select',
4527
- './data/array',
4528
- './data/ajax',
4529
- './data/tags',
4530
- './data/tokenizer',
4531
- './data/minimumInputLength',
4532
- './data/maximumInputLength',
4533
- './data/maximumSelectionLength',
4534
-
4535
- './dropdown',
4536
- './dropdown/search',
4537
- './dropdown/hidePlaceholder',
4538
- './dropdown/infiniteScroll',
4539
- './dropdown/attachBody',
4540
- './dropdown/minimumResultsForSearch',
4541
- './dropdown/selectOnClose',
4542
- './dropdown/closeOnSelect',
4543
-
4544
- './i18n/en'
4545
- ], function ($, require,
4546
-
4547
- ResultsList,
4548
-
4549
- SingleSelection, MultipleSelection, Placeholder, AllowClear,
4550
- SelectionSearch, EventRelay,
4551
-
4552
- Utils, Translation, DIACRITICS,
4553
-
4554
- SelectData, ArrayData, AjaxData, Tags, Tokenizer,
4555
- MinimumInputLength, MaximumInputLength, MaximumSelectionLength,
4556
-
4557
- Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll,
4558
- AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect,
4559
-
4560
- EnglishTranslation) {
4561
- function Defaults () {
4562
- this.reset();
4563
- }
4564
-
4565
- Defaults.prototype.apply = function (options) {
4566
- options = $.extend(true, {}, this.defaults, options);
4567
-
4568
- if (options.dataAdapter == null) {
4569
- if (options.ajax != null) {
4570
- options.dataAdapter = AjaxData;
4571
- } else if (options.data != null) {
4572
- options.dataAdapter = ArrayData;
4573
- } else {
4574
- options.dataAdapter = SelectData;
4575
- }
4576
-
4577
- if (options.minimumInputLength > 0) {
4578
- options.dataAdapter = Utils.Decorate(
4579
- options.dataAdapter,
4580
- MinimumInputLength
4581
- );
4582
- }
4583
-
4584
- if (options.maximumInputLength > 0) {
4585
- options.dataAdapter = Utils.Decorate(
4586
- options.dataAdapter,
4587
- MaximumInputLength
4588
- );
4589
- }
4590
-
4591
- if (options.maximumSelectionLength > 0) {
4592
- options.dataAdapter = Utils.Decorate(
4593
- options.dataAdapter,
4594
- MaximumSelectionLength
4595
- );
4596
- }
4597
-
4598
- if (options.tags) {
4599
- options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags);
4600
- }
4601
-
4602
- if (options.tokenSeparators != null || options.tokenizer != null) {
4603
- options.dataAdapter = Utils.Decorate(
4604
- options.dataAdapter,
4605
- Tokenizer
4606
- );
4607
- }
4608
-
4609
- if (options.query != null) {
4610
- var Query = require(options.amdBase + 'compat/query');
4611
-
4612
- options.dataAdapter = Utils.Decorate(
4613
- options.dataAdapter,
4614
- Query
4615
- );
4616
- }
4617
-
4618
- if (options.initSelection != null) {
4619
- var InitSelection = require(options.amdBase + 'compat/initSelection');
4620
-
4621
- options.dataAdapter = Utils.Decorate(
4622
- options.dataAdapter,
4623
- InitSelection
4624
- );
4625
- }
4626
- }
4627
-
4628
- if (options.resultsAdapter == null) {
4629
- options.resultsAdapter = ResultsList;
4630
-
4631
- if (options.ajax != null) {
4632
- options.resultsAdapter = Utils.Decorate(
4633
- options.resultsAdapter,
4634
- InfiniteScroll
4635
- );
4636
- }
4637
-
4638
- if (options.placeholder != null) {
4639
- options.resultsAdapter = Utils.Decorate(
4640
- options.resultsAdapter,
4641
- HidePlaceholder
4642
- );
4643
- }
4644
-
4645
- if (options.selectOnClose) {
4646
- options.resultsAdapter = Utils.Decorate(
4647
- options.resultsAdapter,
4648
- SelectOnClose
4649
- );
4650
- }
4651
- }
4652
-
4653
- if (options.dropdownAdapter == null) {
4654
- if (options.multiple) {
4655
- options.dropdownAdapter = Dropdown;
4656
- } else {
4657
- var SearchableDropdown = Utils.Decorate(Dropdown, DropdownSearch);
4658
-
4659
- options.dropdownAdapter = SearchableDropdown;
4660
- }
4661
-
4662
- if (options.minimumResultsForSearch !== 0) {
4663
- options.dropdownAdapter = Utils.Decorate(
4664
- options.dropdownAdapter,
4665
- MinimumResultsForSearch
4666
- );
4667
- }
4668
-
4669
- if (options.closeOnSelect) {
4670
- options.dropdownAdapter = Utils.Decorate(
4671
- options.dropdownAdapter,
4672
- CloseOnSelect
4673
- );
4674
- }
4675
-
4676
- if (
4677
- options.dropdownCssClass != null ||
4678
- options.dropdownCss != null ||
4679
- options.adaptDropdownCssClass != null
4680
- ) {
4681
- var DropdownCSS = require(options.amdBase + 'compat/dropdownCss');
4682
-
4683
- options.dropdownAdapter = Utils.Decorate(
4684
- options.dropdownAdapter,
4685
- DropdownCSS
4686
- );
4687
- }
4688
-
4689
- options.dropdownAdapter = Utils.Decorate(
4690
- options.dropdownAdapter,
4691
- AttachBody
4692
- );
4693
- }
4694
-
4695
- if (options.selectionAdapter == null) {
4696
- if (options.multiple) {
4697
- options.selectionAdapter = MultipleSelection;
4698
- } else {
4699
- options.selectionAdapter = SingleSelection;
4700
- }
4701
-
4702
- // Add the placeholder mixin if a placeholder was specified
4703
- if (options.placeholder != null) {
4704
- options.selectionAdapter = Utils.Decorate(
4705
- options.selectionAdapter,
4706
- Placeholder
4707
- );
4708
- }
4709
-
4710
- if (options.allowClear) {
4711
- options.selectionAdapter = Utils.Decorate(
4712
- options.selectionAdapter,
4713
- AllowClear
4714
- );
4715
- }
4716
-
4717
- if (options.multiple) {
4718
- options.selectionAdapter = Utils.Decorate(
4719
- options.selectionAdapter,
4720
- SelectionSearch
4721
- );
4722
- }
4723
-
4724
- if (
4725
- options.containerCssClass != null ||
4726
- options.containerCss != null ||
4727
- options.adaptContainerCssClass != null
4728
- ) {
4729
- var ContainerCSS = require(options.amdBase + 'compat/containerCss');
4730
-
4731
- options.selectionAdapter = Utils.Decorate(
4732
- options.selectionAdapter,
4733
- ContainerCSS
4734
- );
4735
- }
4736
-
4737
- options.selectionAdapter = Utils.Decorate(
4738
- options.selectionAdapter,
4739
- EventRelay
4740
- );
4741
- }
4742
-
4743
- if (typeof options.language === 'string') {
4744
- // Check if the language is specified with a region
4745
- if (options.language.indexOf('-') > 0) {
4746
- // Extract the region information if it is included
4747
- var languageParts = options.language.split('-');
4748
- var baseLanguage = languageParts[0];
4749
-
4750
- options.language = [options.language, baseLanguage];
4751
- } else {
4752
- options.language = [options.language];
4753
- }
4754
- }
4755
-
4756
- if ($.isArray(options.language)) {
4757
- var languages = new Translation();
4758
- options.language.push('en');
4759
-
4760
- var languageNames = options.language;
4761
-
4762
- for (var l = 0; l < languageNames.length; l++) {
4763
- var name = languageNames[l];
4764
- var language = {};
4765
-
4766
- try {
4767
- // Try to load it with the original name
4768
- language = Translation.loadPath(name);
4769
- } catch (e) {
4770
- try {
4771
- // If we couldn't load it, check if it wasn't the full path
4772
- name = this.defaults.amdLanguageBase + name;
4773
- language = Translation.loadPath(name);
4774
- } catch (ex) {
4775
- // The translation could not be loaded at all. Sometimes this is
4776
- // because of a configuration problem, other times this can be
4777
- // because of how Select2 helps load all possible translation files.
4778
- if (options.debug && window.console && console.warn) {
4779
- console.warn(
4780
- 'Select2: The language file for "' + name + '" could not be ' +
4781
- 'automatically loaded. A fallback will be used instead.'
4782
- );
4783
- }
4784
-
4785
- continue;
4786
- }
4787
- }
4788
-
4789
- languages.extend(language);
4790
- }
4791
-
4792
- options.translations = languages;
4793
- } else {
4794
- var baseTranslation = Translation.loadPath(
4795
- this.defaults.amdLanguageBase + 'en'
4796
- );
4797
- var customTranslation = new Translation(options.language);
4798
-
4799
- customTranslation.extend(baseTranslation);
4800
-
4801
- options.translations = customTranslation;
4802
- }
4803
-
4804
- return options;
4805
- };
4806
-
4807
- Defaults.prototype.reset = function () {
4808
- function stripDiacritics (text) {
4809
- // Used 'uni range + named function' from http://jsperf.com/diacritics/18
4810
- function match(a) {
4811
- return DIACRITICS[a] || a;
4812
- }
4813
-
4814
- return text.replace(/[^\u0000-\u007E]/g, match);
4815
- }
4816
-
4817
- function matcher (params, data) {
4818
- // Always return the object if there is nothing to compare
4819
- if ($.trim(params.term) === '') {
4820
- return data;
4821
- }
4822
-
4823
- // Do a recursive check for options with children
4824
- if (data.children && data.children.length > 0) {
4825
- // Clone the data object if there are children
4826
- // This is required as we modify the object to remove any non-matches
4827
- var match = $.extend(true, {}, data);
4828
-
4829
- // Check each child of the option
4830
- for (var c = data.children.length - 1; c >= 0; c--) {
4831
- var child = data.children[c];
4832
-
4833
- var matches = matcher(params, child);
4834
-
4835
- // If there wasn't a match, remove the object in the array
4836
- if (matches == null) {
4837
- match.children.splice(c, 1);
4838
- }
4839
- }
4840
-
4841
- // If any children matched, return the new object
4842
- if (match.children.length > 0) {
4843
- return match;
4844
- }
4845
-
4846
- // If there were no matching children, check just the plain object
4847
- return matcher(params, match);
4848
- }
4849
-
4850
- var original = stripDiacritics(data.text).toUpperCase();
4851
- var term = stripDiacritics(params.term).toUpperCase();
4852
-
4853
- // Check if the text contains the term
4854
- if (original.indexOf(term) > -1) {
4855
- return data;
4856
- }
4857
-
4858
- // If it doesn't contain the term, don't return anything
4859
- return null;
4860
- }
4861
-
4862
- this.defaults = {
4863
- amdBase: './',
4864
- amdLanguageBase: './i18n/',
4865
- closeOnSelect: true,
4866
- debug: false,
4867
- dropdownAutoWidth: false,
4868
- escapeMarkup: Utils.escapeMarkup,
4869
- language: EnglishTranslation,
4870
- matcher: matcher,
4871
- minimumInputLength: 0,
4872
- maximumInputLength: 0,
4873
- maximumSelectionLength: 0,
4874
- minimumResultsForSearch: 0,
4875
- selectOnClose: false,
4876
- sorter: function (data) {
4877
- return data;
4878
- },
4879
- templateResult: function (result) {
4880
- return result.text;
4881
- },
4882
- templateSelection: function (selection) {
4883
- return selection.text;
4884
- },
4885
- theme: 'default',
4886
- width: 'resolve'
4887
- };
4888
- };
4889
-
4890
- Defaults.prototype.set = function (key, value) {
4891
- var camelKey = $.camelCase(key);
4892
-
4893
- var data = {};
4894
- data[camelKey] = value;
4895
-
4896
- var convertedData = Utils._convertData(data);
4897
-
4898
- $.extend(this.defaults, convertedData);
4899
- };
4900
-
4901
- var defaults = new Defaults();
4902
-
4903
- return defaults;
4904
- });
4905
-
4906
- S2.define('select2/options',[
4907
- 'require',
4908
- 'jquery',
4909
- './defaults',
4910
- './utils'
4911
- ], function (require, $, Defaults, Utils) {
4912
- function Options (options, $element) {
4913
- this.options = options;
4914
-
4915
- if ($element != null) {
4916
- this.fromElement($element);
4917
- }
4918
-
4919
- this.options = Defaults.apply(this.options);
4920
-
4921
- if ($element && $element.is('input')) {
4922
- var InputCompat = require(this.get('amdBase') + 'compat/inputData');
4923
-
4924
- this.options.dataAdapter = Utils.Decorate(
4925
- this.options.dataAdapter,
4926
- InputCompat
4927
- );
4928
- }
4929
- }
4930
-
4931
- Options.prototype.fromElement = function ($e) {
4932
- var excludedData = ['select2'];
4933
-
4934
- if (this.options.multiple == null) {
4935
- this.options.multiple = $e.prop('multiple');
4936
- }
4937
-
4938
- if (this.options.disabled == null) {
4939
- this.options.disabled = $e.prop('disabled');
4940
- }
4941
-
4942
- if (this.options.language == null) {
4943
- if ($e.prop('lang')) {
4944
- this.options.language = $e.prop('lang').toLowerCase();
4945
- } else if ($e.closest('[lang]').prop('lang')) {
4946
- this.options.language = $e.closest('[lang]').prop('lang');
4947
- }
4948
- }
4949
-
4950
- if (this.options.dir == null) {
4951
- if ($e.prop('dir')) {
4952
- this.options.dir = $e.prop('dir');
4953
- } else if ($e.closest('[dir]').prop('dir')) {
4954
- this.options.dir = $e.closest('[dir]').prop('dir');
4955
- } else {
4956
- this.options.dir = 'ltr';
4957
- }
4958
- }
4959
-
4960
- $e.prop('disabled', this.options.disabled);
4961
- $e.prop('multiple', this.options.multiple);
4962
-
4963
- if ($e.data('select2Tags')) {
4964
- if (this.options.debug && window.console && console.warn) {
4965
- console.warn(
4966
- 'Select2: The `data-select2-tags` attribute has been changed to ' +
4967
- 'use the `data-data` and `data-tags="true"` attributes and will be ' +
4968
- 'removed in future versions of Select2.'
4969
- );
4970
- }
4971
-
4972
- $e.data('data', $e.data('select2Tags'));
4973
- $e.data('tags', true);
4974
- }
4975
-
4976
- if ($e.data('ajaxUrl')) {
4977
- if (this.options.debug && window.console && console.warn) {
4978
- console.warn(
4979
- 'Select2: The `data-ajax-url` attribute has been changed to ' +
4980
- '`data-ajax--url` and support for the old attribute will be removed' +
4981
- ' in future versions of Select2.'
4982
- );
4983
- }
4984
-
4985
- $e.attr('ajax--url', $e.data('ajaxUrl'));
4986
- $e.data('ajax--url', $e.data('ajaxUrl'));
4987
- }
4988
-
4989
- var dataset = {};
4990
-
4991
- // Prefer the element's `dataset` attribute if it exists
4992
- // jQuery 1.x does not correctly handle data attributes with multiple dashes
4993
- if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) {
4994
- dataset = $.extend(true, {}, $e[0].dataset, $e.data());
4995
- } else {
4996
- dataset = $e.data();
4997
- }
4998
-
4999
- var data = $.extend(true, {}, dataset);
5000
-
5001
- data = Utils._convertData(data);
5002
-
5003
- for (var key in data) {
5004
- if ($.inArray(key, excludedData) > -1) {
5005
- continue;
5006
- }
5007
-
5008
- if ($.isPlainObject(this.options[key])) {
5009
- $.extend(this.options[key], data[key]);
5010
- } else {
5011
- this.options[key] = data[key];
5012
- }
5013
- }
5014
-
5015
- return this;
5016
- };
5017
-
5018
- Options.prototype.get = function (key) {
5019
- return this.options[key];
5020
- };
5021
-
5022
- Options.prototype.set = function (key, val) {
5023
- this.options[key] = val;
5024
- };
5025
-
5026
- return Options;
5027
- });
5028
-
5029
- S2.define('select2/core',[
5030
- 'jquery',
5031
- './options',
5032
- './utils',
5033
- './keys'
5034
- ], function ($, Options, Utils, KEYS) {
5035
- var Select2 = function ($element, options) {
5036
- if ($element.data('select2') != null) {
5037
- $element.data('select2').destroy();
5038
- }
5039
-
5040
- this.$element = $element;
5041
-
5042
- this.id = this._generateId($element);
5043
-
5044
- options = options || {};
5045
-
5046
- this.options = new Options(options, $element);
5047
-
5048
- Select2.__super__.constructor.call(this);
5049
-
5050
- // Set up the tabindex
5051
-
5052
- var tabindex = $element.attr('tabindex') || 0;
5053
- $element.data('old-tabindex', tabindex);
5054
- $element.attr('tabindex', '-1');
5055
-
5056
- // Set up containers and adapters
5057
-
5058
- var DataAdapter = this.options.get('dataAdapter');
5059
- this.dataAdapter = new DataAdapter($element, this.options);
5060
-
5061
- var $container = this.render();
5062
-
5063
- this._placeContainer($container);
5064
-
5065
- var SelectionAdapter = this.options.get('selectionAdapter');
5066
- this.selection = new SelectionAdapter($element, this.options);
5067
- this.$selection = this.selection.render();
5068
-
5069
- this.selection.position(this.$selection, $container);
5070
-
5071
- var DropdownAdapter = this.options.get('dropdownAdapter');
5072
- this.dropdown = new DropdownAdapter($element, this.options);
5073
- this.$dropdown = this.dropdown.render();
5074
-
5075
- this.dropdown.position(this.$dropdown, $container);
5076
-
5077
- var ResultsAdapter = this.options.get('resultsAdapter');
5078
- this.results = new ResultsAdapter($element, this.options, this.dataAdapter);
5079
- this.$results = this.results.render();
5080
-
5081
- this.results.position(this.$results, this.$dropdown);
5082
-
5083
- // Bind events
5084
-
5085
- var self = this;
5086
-
5087
- // Bind the container to all of the adapters
5088
- this._bindAdapters();
5089
-
5090
- // Register any DOM event handlers
5091
- this._registerDomEvents();
5092
-
5093
- // Register any internal event handlers
5094
- this._registerDataEvents();
5095
- this._registerSelectionEvents();
5096
- this._registerDropdownEvents();
5097
- this._registerResultsEvents();
5098
- this._registerEvents();
5099
-
5100
- // Set the initial state
5101
- this.dataAdapter.current(function (initialData) {
5102
- self.trigger('selection:update', {
5103
- data: initialData
5104
- });
5105
- });
5106
-
5107
- // Hide the original select
5108
- $element.addClass('select2-hidden-accessible');
5109
- $element.attr('aria-hidden', 'true');
5110
-
5111
- // Synchronize any monitored attributes
5112
- this._syncAttributes();
5113
-
5114
- $element.data('select2', this);
5115
- };
5116
-
5117
- Utils.Extend(Select2, Utils.Observable);
5118
-
5119
- Select2.prototype._generateId = function ($element) {
5120
- var id = '';
5121
-
5122
- if ($element.attr('id') != null) {
5123
- id = $element.attr('id');
5124
- } else if ($element.attr('name') != null) {
5125
- id = $element.attr('name') + '-' + Utils.generateChars(2);
5126
- } else {
5127
- id = Utils.generateChars(4);
5128
- }
5129
-
5130
- id = id.replace(/(:|\.|\[|\]|,)/g, '');
5131
- id = 'select2-' + id;
5132
-
5133
- return id;
5134
- };
5135
-
5136
- Select2.prototype._placeContainer = function ($container) {
5137
- $container.insertAfter(this.$element);
5138
-
5139
- var width = this._resolveWidth(this.$element, this.options.get('width'));
5140
-
5141
- if (width != null) {
5142
- $container.css('width', width);
5143
- }
5144
- };
5145
-
5146
- Select2.prototype._resolveWidth = function ($element, method) {
5147
- var WIDTH = /^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;
5148
-
5149
- if (method == 'resolve') {
5150
- var styleWidth = this._resolveWidth($element, 'style');
5151
-
5152
- if (styleWidth != null) {
5153
- return styleWidth;
5154
- }
5155
-
5156
- return this._resolveWidth($element, 'element');
5157
- }
5158
-
5159
- if (method == 'element') {
5160
- var elementWidth = $element.outerWidth(false);
5161
-
5162
- if (elementWidth <= 0) {
5163
- return 'auto';
5164
- }
5165
-
5166
- return elementWidth + 'px';
5167
- }
5168
-
5169
- if (method == 'style') {
5170
- var style = $element.attr('style');
5171
-
5172
- if (typeof(style) !== 'string') {
5173
- return null;
5174
- }
5175
-
5176
- var attrs = style.split(';');
5177
-
5178
- for (var i = 0, l = attrs.length; i < l; i = i + 1) {
5179
- var attr = attrs[i].replace(/\s/g, '');
5180
- var matches = attr.match(WIDTH);
5181
-
5182
- if (matches !== null && matches.length >= 1) {
5183
- return matches[1];
5184
- }
5185
- }
5186
-
5187
- return null;
5188
- }
5189
-
5190
- return method;
5191
- };
5192
-
5193
- Select2.prototype._bindAdapters = function () {
5194
- this.dataAdapter.bind(this, this.$container);
5195
- this.selection.bind(this, this.$container);
5196
-
5197
- this.dropdown.bind(this, this.$container);
5198
- this.results.bind(this, this.$container);
5199
- };
5200
-
5201
- Select2.prototype._registerDomEvents = function () {
5202
- var self = this;
5203
-
5204
- this.$element.on('change.select2', function () {
5205
- self.dataAdapter.current(function (data) {
5206
- self.trigger('selection:update', {
5207
- data: data
5208
- });
5209
- });
5210
- });
5211
-
5212
- this.$element.on('focus.select2', function (evt) {
5213
- self.trigger('focus', evt);
5214
- });
5215
-
5216
- this._syncA = Utils.bind(this._syncAttributes, this);
5217
- this._syncS = Utils.bind(this._syncSubtree, this);
5218
-
5219
- if (this.$element[0].attachEvent) {
5220
- this.$element[0].attachEvent('onpropertychange', this._syncA);
5221
- }
5222
-
5223
- var observer = window.MutationObserver ||
5224
- window.WebKitMutationObserver ||
5225
- window.MozMutationObserver
5226
- ;
5227
-
5228
- if (observer != null) {
5229
- this._observer = new observer(function (mutations) {
5230
- $.each(mutations, self._syncA);
5231
- $.each(mutations, self._syncS);
5232
- });
5233
- this._observer.observe(this.$element[0], {
5234
- attributes: true,
5235
- childList: true,
5236
- subtree: false
5237
- });
5238
- } else if (this.$element[0].addEventListener) {
5239
- this.$element[0].addEventListener(
5240
- 'DOMAttrModified',
5241
- self._syncA,
5242
- false
5243
- );
5244
- this.$element[0].addEventListener(
5245
- 'DOMNodeInserted',
5246
- self._syncS,
5247
- false
5248
- );
5249
- this.$element[0].addEventListener(
5250
- 'DOMNodeRemoved',
5251
- self._syncS,
5252
- false
5253
- );
5254
- }
5255
- };
5256
-
5257
- Select2.prototype._registerDataEvents = function () {
5258
- var self = this;
5259
-
5260
- this.dataAdapter.on('*', function (name, params) {
5261
- self.trigger(name, params);
5262
- });
5263
- };
5264
-
5265
- Select2.prototype._registerSelectionEvents = function () {
5266
- var self = this;
5267
- var nonRelayEvents = ['toggle', 'focus'];
5268
-
5269
- this.selection.on('toggle', function () {
5270
- self.toggleDropdown();
5271
- });
5272
-
5273
- this.selection.on('focus', function (params) {
5274
- self.focus(params);
5275
- });
5276
-
5277
- this.selection.on('*', function (name, params) {
5278
- if ($.inArray(name, nonRelayEvents) !== -1) {
5279
- return;
5280
- }
5281
-
5282
- self.trigger(name, params);
5283
- });
5284
- };
5285
-
5286
- Select2.prototype._registerDropdownEvents = function () {
5287
- var self = this;
5288
-
5289
- this.dropdown.on('*', function (name, params) {
5290
- self.trigger(name, params);
5291
- });
5292
- };
5293
-
5294
- Select2.prototype._registerResultsEvents = function () {
5295
- var self = this;
5296
-
5297
- this.results.on('*', function (name, params) {
5298
- self.trigger(name, params);
5299
- });
5300
- };
5301
-
5302
- Select2.prototype._registerEvents = function () {
5303
- var self = this;
5304
-
5305
- this.on('open', function () {
5306
- self.$container.addClass('select2-container--open');
5307
- });
5308
-
5309
- this.on('close', function () {
5310
- self.$container.removeClass('select2-container--open');
5311
- });
5312
-
5313
- this.on('enable', function () {
5314
- self.$container.removeClass('select2-container--disabled');
5315
- });
5316
-
5317
- this.on('disable', function () {
5318
- self.$container.addClass('select2-container--disabled');
5319
- });
5320
-
5321
- this.on('blur', function () {
5322
- self.$container.removeClass('select2-container--focus');
5323
- });
5324
-
5325
- this.on('query', function (params) {
5326
- if (!self.isOpen()) {
5327
- self.trigger('open', {});
5328
- }
5329
-
5330
- this.dataAdapter.query(params, function (data) {
5331
- self.trigger('results:all', {
5332
- data: data,
5333
- query: params
5334
- });
5335
- });
5336
- });
5337
-
5338
- this.on('query:append', function (params) {
5339
- this.dataAdapter.query(params, function (data) {
5340
- self.trigger('results:append', {
5341
- data: data,
5342
- query: params
5343
- });
5344
- });
5345
- });
5346
-
5347
- this.on('keypress', function (evt) {
5348
- var key = evt.which;
5349
-
5350
- if (self.isOpen()) {
5351
- if (key === KEYS.ESC || key === KEYS.TAB ||
5352
- (key === KEYS.UP && evt.altKey)) {
5353
- self.close();
5354
-
5355
- evt.preventDefault();
5356
- } else if (key === KEYS.ENTER) {
5357
- self.trigger('results:select', {});
5358
-
5359
- evt.preventDefault();
5360
- } else if ((key === KEYS.SPACE && evt.ctrlKey)) {
5361
- self.trigger('results:toggle', {});
5362
-
5363
- evt.preventDefault();
5364
- } else if (key === KEYS.UP) {
5365
- self.trigger('results:previous', {});
5366
-
5367
- evt.preventDefault();
5368
- } else if (key === KEYS.DOWN) {
5369
- self.trigger('results:next', {});
5370
-
5371
- evt.preventDefault();
5372
- }
5373
- } else {
5374
- if (key === KEYS.ENTER || key === KEYS.SPACE ||
5375
- (key === KEYS.DOWN && evt.altKey)) {
5376
- self.open();
5377
-
5378
- evt.preventDefault();
5379
- }
5380
- }
5381
- });
5382
- };
5383
-
5384
- Select2.prototype._syncAttributes = function () {
5385
- this.options.set('disabled', this.$element.prop('disabled'));
5386
-
5387
- if (this.options.get('disabled')) {
5388
- if (this.isOpen()) {
5389
- this.close();
5390
- }
5391
-
5392
- this.trigger('disable', {});
5393
- } else {
5394
- this.trigger('enable', {});
5395
- }
5396
- };
5397
-
5398
- Select2.prototype._syncSubtree = function (evt, mutations) {
5399
- var changed = false;
5400
- var self = this;
5401
-
5402
- // Ignore any mutation events raised for elements that aren't options or
5403
- // optgroups. This handles the case when the select element is destroyed
5404
- if (
5405
- evt && evt.target && (
5406
- evt.target.nodeName !== 'OPTION' && evt.target.nodeName !== 'OPTGROUP'
5407
- )
5408
- ) {
5409
- return;
5410
- }
5411
-
5412
- if (!mutations) {
5413
- // If mutation events aren't supported, then we can only assume that the
5414
- // change affected the selections
5415
- changed = true;
5416
- } else if (mutations.addedNodes && mutations.addedNodes.length > 0) {
5417
- for (var n = 0; n < mutations.addedNodes.length; n++) {
5418
- var node = mutations.addedNodes[n];
5419
-
5420
- if (node.selected) {
5421
- changed = true;
5422
- }
5423
- }
5424
- } else if (mutations.removedNodes && mutations.removedNodes.length > 0) {
5425
- changed = true;
5426
- }
5427
-
5428
- // Only re-pull the data if we think there is a change
5429
- if (changed) {
5430
- this.dataAdapter.current(function (currentData) {
5431
- self.trigger('selection:update', {
5432
- data: currentData
5433
- });
5434
- });
5435
- }
5436
- };
5437
-
5438
- /**
5439
- * Override the trigger method to automatically trigger pre-events when
5440
- * there are events that can be prevented.
5441
- */
5442
- Select2.prototype.trigger = function (name, args) {
5443
- var actualTrigger = Select2.__super__.trigger;
5444
- var preTriggerMap = {
5445
- 'open': 'opening',
5446
- 'close': 'closing',
5447
- 'select': 'selecting',
5448
- 'unselect': 'unselecting'
5449
- };
5450
-
5451
- if (args === undefined) {
5452
- args = {};
5453
- }
5454
-
5455
- if (name in preTriggerMap) {
5456
- var preTriggerName = preTriggerMap[name];
5457
- var preTriggerArgs = {
5458
- prevented: false,
5459
- name: name,
5460
- args: args
5461
- };
5462
-
5463
- actualTrigger.call(this, preTriggerName, preTriggerArgs);
5464
-
5465
- if (preTriggerArgs.prevented) {
5466
- args.prevented = true;
5467
-
5468
- return;
5469
- }
5470
- }
5471
-
5472
- actualTrigger.call(this, name, args);
5473
- };
5474
-
5475
- Select2.prototype.toggleDropdown = function () {
5476
- if (this.options.get('disabled')) {
5477
- return;
5478
- }
5479
-
5480
- if (this.isOpen()) {
5481
- this.close();
5482
- } else {
5483
- this.open();
5484
- }
5485
- };
5486
-
5487
- Select2.prototype.open = function () {
5488
- if (this.isOpen()) {
5489
- return;
5490
- }
5491
-
5492
- this.trigger('query', {});
5493
- };
5494
-
5495
- Select2.prototype.close = function () {
5496
- if (!this.isOpen()) {
5497
- return;
5498
- }
5499
-
5500
- this.trigger('close', {});
5501
- };
5502
-
5503
- Select2.prototype.isOpen = function () {
5504
- return this.$container.hasClass('select2-container--open');
5505
- };
5506
-
5507
- Select2.prototype.hasFocus = function () {
5508
- return this.$container.hasClass('select2-container--focus');
5509
- };
5510
-
5511
- Select2.prototype.focus = function (data) {
5512
- // No need to re-trigger focus events if we are already focused
5513
- if (this.hasFocus()) {
5514
- return;
5515
- }
5516
-
5517
- this.$container.addClass('select2-container--focus');
5518
- this.trigger('focus', {});
5519
- };
5520
-
5521
- Select2.prototype.enable = function (args) {
5522
- if (this.options.get('debug') && window.console && console.warn) {
5523
- console.warn(
5524
- 'Select2: The `select2("enable")` method has been deprecated and will' +
5525
- ' be removed in later Select2 versions. Use $element.prop("disabled")' +
5526
- ' instead.'
5527
- );
5528
- }
5529
-
5530
- if (args == null || args.length === 0) {
5531
- args = [true];
5532
- }
5533
-
5534
- var disabled = !args[0];
5535
-
5536
- this.$element.prop('disabled', disabled);
5537
- };
5538
-
5539
- Select2.prototype.data = function () {
5540
- if (this.options.get('debug') &&
5541
- arguments.length > 0 && window.console && console.warn) {
5542
- console.warn(
5543
- 'Select2: Data can no longer be set using `select2("data")`. You ' +
5544
- 'should consider setting the value instead using `$element.val()`.'
5545
- );
5546
- }
5547
-
5548
- var data = [];
5549
-
5550
- this.dataAdapter.current(function (currentData) {
5551
- data = currentData;
5552
- });
5553
-
5554
- return data;
5555
- };
5556
-
5557
- Select2.prototype.val = function (args) {
5558
- if (this.options.get('debug') && window.console && console.warn) {
5559
- console.warn(
5560
- 'Select2: The `select2("val")` method has been deprecated and will be' +
5561
- ' removed in later Select2 versions. Use $element.val() instead.'
5562
- );
5563
- }
5564
-
5565
- if (args == null || args.length === 0) {
5566
- return this.$element.val();
5567
- }
5568
-
5569
- var newVal = args[0];
5570
-
5571
- if ($.isArray(newVal)) {
5572
- newVal = $.map(newVal, function (obj) {
5573
- return obj.toString();
5574
- });
5575
- }
5576
-
5577
- this.$element.val(newVal).trigger('change');
5578
- };
5579
-
5580
- Select2.prototype.destroy = function () {
5581
- this.$container.remove();
5582
-
5583
- if (this.$element[0].detachEvent) {
5584
- this.$element[0].detachEvent('onpropertychange', this._syncA);
5585
- }
5586
-
5587
- if (this._observer != null) {
5588
- this._observer.disconnect();
5589
- this._observer = null;
5590
- } else if (this.$element[0].removeEventListener) {
5591
- this.$element[0]
5592
- .removeEventListener('DOMAttrModified', this._syncA, false);
5593
- this.$element[0]
5594
- .removeEventListener('DOMNodeInserted', this._syncS, false);
5595
- this.$element[0]
5596
- .removeEventListener('DOMNodeRemoved', this._syncS, false);
5597
- }
5598
-
5599
- this._syncA = null;
5600
- this._syncS = null;
5601
-
5602
- this.$element.off('.select2');
5603
- this.$element.attr('tabindex', this.$element.data('old-tabindex'));
5604
-
5605
- this.$element.removeClass('select2-hidden-accessible');
5606
- this.$element.attr('aria-hidden', 'false');
5607
- this.$element.removeData('select2');
5608
-
5609
- this.dataAdapter.destroy();
5610
- this.selection.destroy();
5611
- this.dropdown.destroy();
5612
- this.results.destroy();
5613
-
5614
- this.dataAdapter = null;
5615
- this.selection = null;
5616
- this.dropdown = null;
5617
- this.results = null;
5618
- };
5619
-
5620
- Select2.prototype.render = function () {
5621
- var $container = $(
5622
- '<span class="select2 select2-container">' +
5623
- '<span class="selection"></span>' +
5624
- '<span class="dropdown-wrapper" aria-hidden="true"></span>' +
5625
- '</span>'
5626
- );
5627
-
5628
- $container.attr('dir', this.options.get('dir'));
5629
-
5630
- this.$container = $container;
5631
-
5632
- this.$container.addClass('select2-container--' + this.options.get('theme'));
5633
-
5634
- $container.data('element', this.$element);
5635
-
5636
- return $container;
5637
- };
5638
-
5639
- return Select2;
5640
- });
5641
-
5642
- S2.define('jquery-mousewheel',[
5643
- 'jquery'
5644
- ], function ($) {
5645
- // Used to shim jQuery.mousewheel for non-full builds.
5646
- return $;
5647
- });
5648
-
5649
- S2.define('jquery.select2',[
5650
- 'jquery',
5651
- 'jquery-mousewheel',
5652
-
5653
- './select2/core',
5654
- './select2/defaults'
5655
- ], function ($, _, Select2, Defaults) {
5656
- if ($.fn.select2 == null) {
5657
- // All methods that should return the element
5658
- var thisMethods = ['open', 'close', 'destroy'];
5659
-
5660
- $.fn.select2 = function (options) {
5661
- options = options || {};
5662
-
5663
- if (typeof options === 'object') {
5664
- this.each(function () {
5665
- var instanceOptions = $.extend(true, {}, options);
5666
-
5667
- var instance = new Select2($(this), instanceOptions);
5668
- });
5669
-
5670
- return this;
5671
- } else if (typeof options === 'string') {
5672
- var ret;
5673
- var args = Array.prototype.slice.call(arguments, 1);
5674
-
5675
- this.each(function () {
5676
- var instance = $(this).data('select2');
5677
-
5678
- if (instance == null && window.console && console.error) {
5679
- console.error(
5680
- 'The select2(\'' + options + '\') method was called on an ' +
5681
- 'element that is not using Select2.'
5682
- );
5683
- }
5684
-
5685
- ret = instance[options].apply(instance, args);
5686
- });
5687
-
5688
- // Check if we should be returning `this`
5689
- if ($.inArray(options, thisMethods) > -1) {
5690
- return this;
5691
- }
5692
-
5693
- return ret;
5694
- } else {
5695
- throw new Error('Invalid arguments for Select2: ' + options);
5696
- }
5697
- };
5698
- }
5699
-
5700
- if ($.fn.select2.defaults == null) {
5701
- $.fn.select2.defaults = Defaults;
5702
- }
5703
-
5704
- return Select2;
5705
- });
5706
-
5707
- // Return the AMD loader configuration so it can be used outside of this file
5708
- return {
5709
- define: S2.define,
5710
- require: S2.require
5711
- };
5712
- }());
5713
-
5714
- // Autoload the jQuery bindings
5715
- // We know that all of the modules exist above this, so we're safe
5716
- var select2 = S2.require('jquery.select2');
5717
-
5718
- // Hold the AMD module references on the jQuery function that was just loaded
5719
- // This allows Select2 to use the internal loader outside of this file, such
5720
- // as in the language files.
5721
- jQuery.fn.select2.amd = S2;
5722
-
5723
- // Return the Select2 instance for anyone who is importing it.
5724
- return select2;
5725
- }));
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