WP-Optimize - Version 3.0.18

Version Description

  • 27/Mar/2020 =

  • FIX: Don't override advanced-cache.php if caching is disabled

Download this release

Release Info

Developer DavidAnderson
Plugin Icon 128x128 WP-Optimize
Version 3.0.18
Comparing to
See all releases

Code changes from version 3.0.16 to 3.0.18

Files changed (54) hide show
  1. cache/class-wpo-cache-config.php +20 -1
  2. cache/class-wpo-cache-rules.php +49 -0
  3. cache/class-wpo-load-url-task.php +1 -1
  4. cache/class-wpo-page-cache.php +61 -5
  5. cache/file-based-page-cache-functions.php +61 -1
  6. css/admin-3-0-16.min.css +0 -2
  7. css/admin-3-0-16.min.css.map +0 -1
  8. css/admin-3-0-18.min.css +2 -0
  9. css/admin-3-0-18.min.css.map +1 -0
  10. css/admin.css +6 -0
  11. css/smush-3-0-16.min.css +0 -2
  12. css/smush-3-0-16.min.css.map +0 -1
  13. css/smush-3-0-18.min.css +2 -0
  14. css/smush-3-0-18.min.css.map +1 -0
  15. css/smush.css +21 -17
  16. css/wp-optimize-admin-3-0-16.min.css +0 -2
  17. css/wp-optimize-admin-3-0-16.min.css.map +0 -1
  18. css/wp-optimize-admin-3-0-18.min.css +2 -0
  19. css/wp-optimize-admin-3-0-18.min.css.map +1 -0
  20. css/wp-optimize-admin.css +306 -13
  21. css/wp-optimize-notices-3-0-16.min.css +0 -2
  22. css/wp-optimize-notices-3-0-16.min.css.map +0 -1
  23. css/wp-optimize-notices.css +0 -136
  24. google-fonts.json +1 -0
  25. includes/class-commands.php +25 -9
  26. includes/class-updraft-php-logger.php +1 -0
  27. includes/class-updraft-smush-manager-commands.php +1 -0
  28. includes/class-updraft-smush-manager.php +10 -10
  29. includes/class-wp-optimize-options.php +1 -1
  30. includes/class-wp-optimize-updates.php +8 -0
  31. includes/class-wp-optimizer.php +19 -2
  32. includes/wp-optimize-notices.php +12 -15
  33. js/cache-3-0-16.min.js +0 -1
  34. js/cache-3-0-18.min.js +1 -0
  35. js/cache.js +5 -3
  36. js/handlebars/LICENSE +1 -1
  37. js/handlebars/handlebars.js +298 -98
  38. js/handlebars/handlebars.min.js +5 -5
  39. js/handlebars/handlebars.runtime.js +245 -37
  40. js/handlebars/handlebars.runtime.min.js +3 -3
  41. js/loadAsync-3-0-18.min.js +1 -0
  42. js/loadAsync.js +23 -0
  43. js/loadCSS-3-0-18.min.js +1 -0
  44. js/loadCSS.js +89 -0
  45. js/minify-3-0-18.min.js +1 -0
  46. js/minify-admin-purge-3-0-18.min.js +1 -0
  47. js/minify-admin-purge.js +16 -0
  48. js/minify.js +244 -0
  49. js/{queue-3-0-16.min.js → queue-3-0-18.min.js} +0 -0
  50. js/send-command-3-0-18.min.js +1 -0
  51. js/send-command.js +105 -0
  52. js/tablesorter/jquery.tablesorter.js +2914 -2914
  53. js/tablesorter/jquery.tablesorter.min.js +1 -1
  54. js/tablesorter/jquery.tablesorter.widgets.js +614 -1215
cache/class-wpo-cache-config.php CHANGED
@@ -103,6 +103,8 @@ class WPO_Cache_Config {
103
  update_option('wpo_cache_config', $config);
104
  }
105
 
 
 
106
  return $this->write($config, $skip_disk_if_not_yet_present);
107
  }
108
 
@@ -163,7 +165,23 @@ class WPO_Cache_Config {
163
  }
164
 
165
  $this->config = wp_parse_args($config, $this->get_defaults());
166
- if ((!$only_if_present || file_exists($config_file)) && !file_put_contents($config_file, json_encode($this->config))) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
167
  return false;
168
  }
169
 
@@ -231,6 +249,7 @@ class WPO_Cache_Config {
231
  'enable_mobile_caching' => false,
232
  'enable_user_caching' => false,
233
  'site_url' => network_site_url('/'),
 
234
  );
235
 
236
  return apply_filters('wpo_cache_defaults', $defaults);
103
  update_option('wpo_cache_config', $config);
104
  }
105
 
106
+ do_action('wpo_cache_config_updated', $config);
107
+
108
  return $this->write($config, $skip_disk_if_not_yet_present);
109
  }
110
 
165
  }
166
 
167
  $this->config = wp_parse_args($config, $this->get_defaults());
168
+
169
+ // from 3.0.17 we use more secure way to store cache config files.
170
+ $advanced_cache_version = WPO_Page_Cache::instance()->get_advanced_cache_version();
171
+ // if advanced-cache.php exists and has at least 3.0.17 version or
172
+ // advanced-cache.php doesn't exist and WP-O has at least 3.0.17 version then
173
+ // we write the cache config in a new format.
174
+ if (($advanced_cache_version && (0 >= version_compare($advanced_cache_version, '3.0.17')))
175
+ || (!$advanced_cache_version && (0 >= version_compare(WPO_VERSION, '3.0.17')))
176
+ ) {
177
+ $config_content = '<?php' . "\n"
178
+ . 'if (!defined(\'ABSPATH\')) die(\'No direct access allowed\');' . "\n\n"
179
+ . '$GLOBALS[\'wpo_cache_config\'] = json_decode(\'' . json_encode($this->config) . '\', true);' . "\n";
180
+ } else {
181
+ $config_content = json_encode($this->config);
182
+ }
183
+
184
+ if ((!$only_if_present || file_exists($config_file)) && !file_put_contents($config_file, $config_content)) {
185
  return false;
186
  }
187
 
249
  'enable_mobile_caching' => false,
250
  'enable_user_caching' => false,
251
  'site_url' => network_site_url('/'),
252
+ 'enable_cache_per_country' => false,
253
  );
254
 
255
  return apply_filters('wpo_cache_defaults', $defaults);
cache/class-wpo-cache-rules.php CHANGED
@@ -38,11 +38,13 @@ class WPO_Cache_Rules {
38
  */
39
  public function setup_hooks() {
40
  add_action('save_post', array($this, 'purge_post_on_update'), 10, 1);
 
41
  add_action('wp_trash_post', array($this, 'purge_post_on_update'), 10, 1);
42
  add_action('comment_post', array($this, 'purge_post_on_comment'), 10, 3);
43
  add_action('wp_set_comment_status', array($this, 'purge_post_on_comment_status_change'), 10, 1);
44
  add_action('edit_terms', array($this, 'purge_related_elements_on_term_updated'), 10, 2);
45
  add_action('set_object_terms', array($this, 'purge_related_elements_on_post_terms_change'), 10, 6);
 
46
 
47
  /**
48
  * List of hooks for which when executed, the cache will be purged
@@ -119,6 +121,41 @@ class WPO_Cache_Rules {
119
  }
120
  }
121
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
122
  /**
123
  * We use it with edit_terms action filter to purge cached elements related
124
  * to updated term when term updated.
@@ -202,6 +239,18 @@ class WPO_Cache_Rules {
202
  }
203
  }
204
 
 
 
 
 
 
 
 
 
 
 
 
 
205
  /**
206
  * Returns an instance of the current class, creates one if it doesn't exist
207
  *
38
  */
39
  public function setup_hooks() {
40
  add_action('save_post', array($this, 'purge_post_on_update'), 10, 1);
41
+ add_action('save_post', array($this, 'purge_archive_pages_on_post_update'), 10, 1);
42
  add_action('wp_trash_post', array($this, 'purge_post_on_update'), 10, 1);
43
  add_action('comment_post', array($this, 'purge_post_on_comment'), 10, 3);
44
  add_action('wp_set_comment_status', array($this, 'purge_post_on_comment_status_change'), 10, 1);
45
  add_action('edit_terms', array($this, 'purge_related_elements_on_term_updated'), 10, 2);
46
  add_action('set_object_terms', array($this, 'purge_related_elements_on_post_terms_change'), 10, 6);
47
+ add_action('wpo_cache_config_updated', array($this, 'cache_config_updated'), 10, 1);
48
 
49
  /**
50
  * List of hooks for which when executed, the cache will be purged
121
  }
122
  }
123
 
124
+ /**
125
+ * Purge archive pages on post update.
126
+ *
127
+ * @param integer $post_id
128
+ */
129
+ public function purge_archive_pages_on_post_update($post_id) {
130
+ $post_type = get_post_type($post_id);
131
+
132
+ if ((defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) || 'revision' === $post_type) {
133
+ return;
134
+ }
135
+
136
+ $post_obj = get_post_type_object($post_type);
137
+
138
+ if ('post' == $post_type) {
139
+ // delete all archive pages for post.
140
+ $post_date = get_post_time('Y-m-j', false, $post_id);
141
+ list($year, $month, $day) = $post_date;
142
+
143
+ $archive_links = array(
144
+ get_year_link($year),
145
+ get_month_link($year, $month),
146
+ get_day_link($year, $month, $day),
147
+ );
148
+
149
+ foreach ($archive_links as $link) {
150
+ WPO_Page_Cache::delete_cache_by_url($link, true);
151
+ }
152
+ } elseif ($post_obj->has_archive) {
153
+ // delete archive page for custom post type.
154
+ WPO_Page_Cache::delete_cache_by_url(get_post_type_archive_link($post_type), true);
155
+ }
156
+
157
+ }
158
+
159
  /**
160
  * We use it with edit_terms action filter to purge cached elements related
161
  * to updated term when term updated.
239
  }
240
  }
241
 
242
+ /**
243
+ * Triggered by wpo_cache_config_updated.
244
+ *
245
+ * @param array $config
246
+ */
247
+ public function cache_config_updated($config) {
248
+ // delete front page form cache if defined in the settings
249
+ if (is_array($config['cache_exception_urls']) && in_array('/', $config['cache_exception_urls'])) {
250
+ WPO_Page_Cache::delete_cache_by_url(home_url());
251
+ }
252
+ }
253
+
254
  /**
255
  * Returns an instance of the current class, creates one if it doesn't exist
256
  *
cache/class-wpo-load-url-task.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  if (!defined('ABSPATH')) die('Access denied.');
4
 
5
- if (!class_exists('Updraft_Task_1_1')) require_once(WPO_PLUGIN_MAIN_PATH . 'vendor/updraft-tasks/class-updraft-task.php');
6
 
7
  if (!class_exists('WP_Optimize_Page_Cache_Preloader')) require_once(dirname(__FILE__) . '/class-wpo-cache-preloader.php');
8
 
2
 
3
  if (!defined('ABSPATH')) die('Access denied.');
4
 
5
+ if (!class_exists('Updraft_Task_1_1')) require_once(WPO_PLUGIN_MAIN_PATH . 'vendor/team-updraft/common-libs/src/updraft-tasks/class-updraft-task.php');
6
 
7
  if (!class_exists('WP_Optimize_Page_Cache_Preloader')) require_once(dirname(__FILE__) . '/class-wpo-cache-preloader.php');
8
 
cache/class-wpo-page-cache.php CHANGED
@@ -87,6 +87,13 @@ class WPO_Page_Cache {
87
  */
88
  public $advanced_cache_file_content;
89
 
 
 
 
 
 
 
 
90
  /**
91
  * Set everything up here
92
  */
@@ -109,12 +116,15 @@ class WPO_Page_Cache {
109
 
110
  // Handle single page purge.
111
  add_action('wp_loaded', array($this, 'handle_purge_single_page_cache'));
 
 
112
  }
113
 
114
  /**
115
  * Do required actions on activate/deactivate any plugin.
116
  */
117
  public function activate_deactivate_plugin() {
 
118
  $this->update_cache_config();
119
 
120
  /**
@@ -272,7 +282,7 @@ class WPO_Page_Cache {
272
  */
273
  public function show_notice($message, $type) {
274
  ?>
275
- <div class="notice notice-<?php echo $type; ?> is-dismissible">
276
  <p><?php echo $message; ?></p>
277
  </div>
278
  <script>
@@ -455,8 +465,12 @@ class WPO_Page_Cache {
455
  return new WP_Error('create_folders', sprintf(__('The request to the filesystem failed: unable to create directory %s. Please check your file permissions.'), str_ireplace(ABSPATH, '', WPO_CACHE_CONFIG_DIR)));
456
  }
457
 
458
- if (!is_dir(WPO_CACHE_FILES_DIR) && !wp_mkdir_p(WPO_CACHE_FILES_DIR)) {
459
- return new WP_Error('create_folders', sprintf(__('The request to the filesystem failed: unable to create directory %s. Please check your file permissions.'), str_ireplace(ABSPATH, '', WPO_CACHE_FILES_DIR)));
 
 
 
 
460
  }
461
 
462
  return true;
@@ -533,7 +547,11 @@ if (false !== \$plugin_location) {
533
 
534
  if (!@file_exists(WPO_CACHE_CONFIG_DIR . '/$config_file_basename')) { return; }
535
 
536
- \$GLOBALS['wpo_cache_config'] = json_decode(file_get_contents(WPO_CACHE_CONFIG_DIR . '/$config_file_basename'), true);
 
 
 
 
537
 
538
  if (empty(\$GLOBALS['wpo_cache_config']) || empty(\$GLOBALS['wpo_cache_config']['enable_page_caching'])) { return; }
539
 
@@ -551,7 +569,7 @@ EOF;
551
  return false;
552
  }
553
 
554
- if (file_put_contents($this->get_advanced_cache_filename(), $this->advanced_cache_file_content)) {
555
  $this->advanced_cache_file_writing_error = true;
556
  return false;
557
  }
@@ -560,6 +578,32 @@ EOF;
560
  return true;
561
  }
562
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
563
  /**
564
  * Get WPO version number from advanced-cache.php file.
565
  *
@@ -840,6 +884,18 @@ EOF;
840
  wpo_delete_files($path, false);
841
  }
842
 
 
 
 
 
 
 
 
 
 
 
 
 
843
  /**
844
  * Logs error messages
845
  *
87
  */
88
  public $advanced_cache_file_content;
89
 
90
+ /**
91
+ * Store the latest advanced-cache.php version required
92
+ *
93
+ * @var string
94
+ */
95
+ private $_minimum_advanced_cache_file_version = '3.0.17';
96
+
97
  /**
98
  * Set everything up here
99
  */
116
 
117
  // Handle single page purge.
118
  add_action('wp_loaded', array($this, 'handle_purge_single_page_cache'));
119
+
120
+ add_action('admin_init', array($this, 'admin_init'));
121
  }
122
 
123
  /**
124
  * Do required actions on activate/deactivate any plugin.
125
  */
126
  public function activate_deactivate_plugin() {
127
+
128
  $this->update_cache_config();
129
 
130
  /**
282
  */
283
  public function show_notice($message, $type) {
284
  ?>
285
+ <div class="notice wpo-notice notice-<?php echo $type; ?> is-dismissible">
286
  <p><?php echo $message; ?></p>
287
  </div>
288
  <script>
465
  return new WP_Error('create_folders', sprintf(__('The request to the filesystem failed: unable to create directory %s. Please check your file permissions.'), str_ireplace(ABSPATH, '', WPO_CACHE_CONFIG_DIR)));
466
  }
467
 
468
+ if (!is_dir(WPO_CACHE_FILES_DIR)) {
469
+ if (!wp_mkdir_p(WPO_CACHE_FILES_DIR)) {
470
+ return new WP_Error('create_folders', sprintf(__('The request to the filesystem failed: unable to create directory %s. Please check your file permissions.'), str_ireplace(ABSPATH, '', WPO_CACHE_FILES_DIR)));
471
+ } else {
472
+ wpo_disable_cache_directories_viewing();
473
+ }
474
  }
475
 
476
  return true;
547
 
548
  if (!@file_exists(WPO_CACHE_CONFIG_DIR . '/$config_file_basename')) { return; }
549
 
550
+ \$GLOBALS['wpo_cache_config'] = @json_decode(file_get_contents(WPO_CACHE_CONFIG_DIR . '/$config_file_basename'), true);
551
+
552
+ if (empty(\$GLOBALS['wpo_cache_config'])) {
553
+ include_once(WPO_CACHE_CONFIG_DIR . '/$config_file_basename');
554
+ }
555
 
556
  if (empty(\$GLOBALS['wpo_cache_config']) || empty(\$GLOBALS['wpo_cache_config']['enable_page_caching'])) { return; }
557
 
569
  return false;
570
  }
571
 
572
+ if (!file_put_contents($this->get_advanced_cache_filename(), $this->advanced_cache_file_content)) {
573
  $this->advanced_cache_file_writing_error = true;
574
  return false;
575
  }
578
  return true;
579
  }
580
 
581
+ /**
582
+ * Update advanced cache version if needed.
583
+ */
584
+ public function maybe_update_advanced_cache() {
585
+
586
+ if (!$this->is_enabled()) return;
587
+
588
+ // from 3.0.17 we use more secure way to store cache config files and need update advanced-cache.php
589
+ $advanced_cache_current_version = $this->get_advanced_cache_version();
590
+ if ($advanced_cache_current_version && version_compare($advanced_cache_current_version, $this->_minimum_advanced_cache_file_version, '>=')) return;
591
+
592
+ if (!$this->write_advanced_cache()) {
593
+ add_action('admin_notices', array($this, 'notice_advanced_cache_autoupdate_error'));
594
+ } else {
595
+ $this->update_cache_config();
596
+ }
597
+ }
598
+
599
+ /**
600
+ * Show notification when advanced-cache.php could not be updated.
601
+ */
602
+ public function notice_advanced_cache_autoupdate_error() {
603
+ $this->show_notice(__('The file advanced-cache.php needs to be updated, but the automatic process failed.', 'wp_optimize').
604
+ ' <a href="'.admin_url('admin.php?page=wpo_cache').'">'.__('Please try to re-enable WP-Optimize cache manually.', 'wp-optimize').'</a>', 'error');
605
+ }
606
+
607
  /**
608
  * Get WPO version number from advanced-cache.php file.
609
  *
884
  wpo_delete_files($path, false);
885
  }
886
 
887
+ /**
888
+ * Admin actions
889
+ *
890
+ * @return void
891
+ */
892
+ public function admin_init() {
893
+ // Maybe update the advanced cache.
894
+ if ((!defined('DOING_AJAX') || !DOING_AJAX) && current_user_can('update_plugins')) {
895
+ $this->maybe_update_advanced_cache();
896
+ }
897
+ }
898
+
899
  /**
900
  * Logs error messages
901
  *
cache/file-based-page-cache-functions.php CHANGED
@@ -46,6 +46,8 @@ function wpo_cache($buffer, $flags) {
46
  // Try creating a folder for cached files, if it was flushed recently
47
  if (!mkdir(WPO_CACHE_FILES_DIR)) {
48
  $no_cache_because[] = __('WP-O cache directory was not found', 'wp-optimize').' ('.WPO_CACHE_FILES_DIR.')';
 
 
49
  }
50
  }
51
 
@@ -123,7 +125,13 @@ function wpo_cache($buffer, $flags) {
123
 
124
  $add_to_footer = '';
125
 
126
- if (preg_match('#</html>#i', $buffer)) {
 
 
 
 
 
 
127
  if (!empty($GLOBALS['wpo_cache_config']['enable_mobile_caching']) && wpo_is_mobile()) {
128
  $add_to_footer .= "\n<!-- Cached by WP-Optimize - for mobile devices - https://getwpo.com - Last modified: " . gmdate('D, d M Y H:i:s', $modified_time) . " GMT -->\n";
129
  } else {
@@ -131,6 +139,9 @@ function wpo_cache($buffer, $flags) {
131
  }
132
  }
133
 
 
 
 
134
  /**
135
  * Save $buffer into cache file.
136
  */
@@ -197,6 +208,12 @@ function wpo_restricted_cache_page_type($restricted) {
197
  $restricted = __('Page type is not cacheable (search, 404 or password-protected)', 'wp-optimize');
198
  }
199
 
 
 
 
 
 
 
200
  // Don't cache htacesss. Remember to properly escape any output to prevent injection.
201
  if (strpos($_SERVER['REQUEST_URI'], '.htaccess') !== false) {
202
  $restricted = 'The file path is unsuitable for caching ('.$_SERVER['REQUEST_URI'].')';
@@ -613,6 +630,9 @@ function wpo_url_in_exceptions($url) {
613
  if (!empty($exceptions)) {
614
  foreach ($exceptions as $exception) {
615
 
 
 
 
616
  if (wpo_url_exception_match($url, $exception)) {
617
  // Exception match.
618
  return true;
@@ -883,3 +903,43 @@ function wpo_cache_config_get($key, $default = false) {
883
  }
884
  }
885
  endif;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
  // Try creating a folder for cached files, if it was flushed recently
47
  if (!mkdir(WPO_CACHE_FILES_DIR)) {
48
  $no_cache_because[] = __('WP-O cache directory was not found', 'wp-optimize').' ('.WPO_CACHE_FILES_DIR.')';
49
+ } else {
50
+ wpo_disable_cache_directories_viewing();
51
  }
52
  }
53
 
125
 
126
  $add_to_footer = '';
127
 
128
+ /**
129
+ * Filter wether to display the html comment <!-- Cached by WP-Optimize ... -->
130
+ *
131
+ * @param boolean $show - Wether to display the html comment
132
+ * @return boolean
133
+ */
134
+ if (preg_match('#</html>#i', $buffer) && (apply_filters('wpo_cache_show_cached_by_comment', true) || (defined('WP_DEBUG') && WP_DEBUG))) {
135
  if (!empty($GLOBALS['wpo_cache_config']['enable_mobile_caching']) && wpo_is_mobile()) {
136
  $add_to_footer .= "\n<!-- Cached by WP-Optimize - for mobile devices - https://getwpo.com - Last modified: " . gmdate('D, d M Y H:i:s', $modified_time) . " GMT -->\n";
137
  } else {
139
  }
140
  }
141
 
142
+ // Create an empty index.php file in the cache directory for disable directory viewing.
143
+ if (!is_file($path . '/index.php')) file_put_contents($path . '/index.php', '');
144
+
145
  /**
146
  * Save $buffer into cache file.
147
  */
208
  $restricted = __('Page type is not cacheable (search, 404 or password-protected)', 'wp-optimize');
209
  }
210
 
211
+ // Don't cache the front page if option is set.
212
+ if (in_array('/', wpo_get_url_exceptions()) && function_exists('is_front_page') && is_front_page()) {
213
+
214
+ $restricted = __('In the settings, caching is disabled for the front page', 'wp-optimize');
215
+ }
216
+
217
  // Don't cache htacesss. Remember to properly escape any output to prevent injection.
218
  if (strpos($_SERVER['REQUEST_URI'], '.htaccess') !== false) {
219
  $restricted = 'The file path is unsuitable for caching ('.$_SERVER['REQUEST_URI'].')';
630
  if (!empty($exceptions)) {
631
  foreach ($exceptions as $exception) {
632
 
633
+ // don't check / - front page using regexp, we handle it in wpo_restricted_cache_page_type()
634
+ if ('/' == $exception) continue;
635
+
636
  if (wpo_url_exception_match($url, $exception)) {
637
  // Exception match.
638
  return true;
903
  }
904
  }
905
  endif;
906
+
907
+ if (!function_exists('wpo_disable_cache_directories_viewing')) :
908
+ function wpo_disable_cache_directories_viewing() {
909
+ global $is_apache, $is_IIS, $is_iis7;
910
+
911
+ if (!is_dir(WPO_CACHE_FILES_DIR)) return;
912
+
913
+ // Create .htaccess file for apache server.
914
+ if ($is_apache) {
915
+ $htaccess_filename = WPO_CACHE_FILES_DIR . '/.htaccess';
916
+
917
+ // CS does not like heredoc
918
+ // phpcs:disable
919
+ $htaccess_content = <<<EOF
920
+ # Disable directory browsing
921
+ Options -Indexes
922
+
923
+ # Disable access to any files
924
+ <FilesMatch ".*">
925
+ Order allow,deny
926
+ Deny from all
927
+ </FilesMatch>
928
+ EOF;
929
+ // phpcs:enable
930
+
931
+ if (!is_file($htaccess_filename)) @file_put_contents($htaccess_filename, $htaccess_content); // phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged
932
+ }
933
+
934
+ // Create web.config file for IIS servers.
935
+ if ($is_IIS || $is_iis7) {
936
+ $webconfig_filename = WPO_CACHE_FILES_DIR . '/web.config';
937
+ $webconfig_content = "<configuration>\n<system.webServer>\n<authorization>\n<deny users=\"*\" />\n</authorization>\n</system.webServer>\n</configuration>\n";
938
+
939
+ if (!is_file($webconfig_filename)) @file_put_contents($webconfig_filename, $webconfig_content); // phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged
940
+ }
941
+
942
+ // Create empty index.php file for all servers.
943
+ if (!is_file(WPO_CACHE_FILES_DIR . '/index.php')) @file_put_contents(WPO_CACHE_FILES_DIR . '/index.php', '');// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged
944
+ }
945
+ endif;
css/admin-3-0-16.min.css DELETED
@@ -1,2 +0,0 @@
1
- .wpo_hidden{display:none !important}.wpo_info{background:#FFF;color:#444;font-family:-apple-system,"BlinkMacSystemFont","Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif;margin:2em auto;padding:1em 2em;max-width:700px;box-shadow:0 1px 3px rgba(0,0,0,0.13)}#wp-optimize-wrap .widefat thead th,#wp-optimize-wrap .widefat thead td{border-bottom:1px solid #e1e1e1}#wp-optimize-wrap .widefat td,#wp-optimize-wrap .widefat th{padding:8px 10px}.wpo_primary_big{padding:4px 6px !important;font-size:22px !important;min-height:34px;min-width:200px}.wpo_section{clear:both;padding:0;margin:0}.wp-optimize-settings{margin-bottom:16px}.wp-optimize-settings td>label{font-weight:bold;display:block;margin-bottom:8px}.wpo_col{display:block;float:left;margin:1% 0 1% 1%}.wpo_col:first-child{margin-left:0}.wpo_group:before,.wpo_group:after{content:"";display:table}.wpo_group:after{clear:both}.wpo_half_width{width:48%}.wpo_span_3_of_3{width:100%}.wpo_span_2_of_3{width:65.3%}.wpo_span_1_of_3{width:32.1%}#wp-optimize-wrap .nav-tab-wrapper{margin:0}@media screen and (min-width:549px){.show_on_default_sizes{display:block !important}.show_on_mobile_sizes{display:none !important}}@media screen and (max-width:548px){.show_on_default_sizes{display:none !important}.show_on_mobile_sizes{display:block !important}}@media screen and (max-width:768px){.wpo_col{margin:1% 0}.wpo_span_3_of_3{width:100%}.wpo_span_2_of_3{width:100%}.wpo_span_1_of_3{width:100%}.wpo_half_width{width:100%}}.wp-optimize-setting-is-sensitive td>label::before{content:"\f534";font-family:'dashicons';display:inline-block;margin-right:6px;font-style:normal;line-height:1;vertical-align:middle;width:20px;font-size:18px;height:20px;text-align:center;color:#72777c}.wpo-run-optimizations__container{margin-bottom:15px}td.wp-optimize-settings-optimization-checkbox{width:18px;padding-left:4px;padding-right:0}.wp-optimize-settings-optimization-checkbox input{margin:0;padding:0}#retention-period{width:60px}.wp-optimize-settings-optimization-info{font-size:80%;font-style:italic}img.addons{display:block;margin-left:auto;margin-right:auto;margin-bottom:20px;max-height:44px;height:auto;max-width:100%}.wpo_spinner{width:18px;height:18px;padding-left:10px;display:none;position:relative;top:4px}.optimization_spinner{width:20px;height:20px}#wp-optimize-auto-options{margin:20px 0 0 28px}.display-none{display:none}.visibility-hidden{visibility:hidden}.margin-one-percent{margin:1%}#save_done,.save-done{color:#d94f00;font-size:220% !important}.wp-optimize-settings-optimization-info a{text-decoration:underline}.wp-optimize-settings-optimization-run-spinner{position:relative;top:2px}@media screen and (min-width:782px){td.wp-optimize-settings-optimization-run{width:180px;padding-top:16px}}#wpoptimize_table_list .tablesorter-filter-row{display:none !important}#wpoptimize_table_list .optimization_spinner{position:relative;top:2px;left:5px}#wpoptimize_table_list .optimization_spinner.visibility-hidden{display:none}#wpoptimize_table_list_filter{width:100%;margin-bottom:15px}#wpoptimize_table_list_tables_not_found{display:none;margin:20px 0}div#wpoptimize_table_list_tables_not_found+h3{margin-top:30px}#wpoptimize_table_list tr th:first-child,#wpoptimize_table_list tr td:first-child{display:none}#optimize_form .select2-container,#wp-optimize-auto-options .select2-container{width:50% !important;top:-5px;height:40px;margin-left:10px}#wpoptimize_table_list .optimization_done_icon{color:#009b24;font-size:200%;display:inline-block;position:relative}#wpo_sitelist_show_moreoptions_cron{font-size:13px;line-height:1.5;letter-spacing:1px}#wp-optimize-nav-tab-contents-images .wpo_span_2_of_3 h3{display:inline-block}.wpo_remove_selected_sizes_btn__container{margin-top:20px}.unused-image-sizes__label{display:block;line-height:1.6}@media(max-width:782px){.unused-image-sizes__label{margin-left:30px;margin-bottom:15px;line-height:1;word-break:break-word}.unused-image-sizes__label input[type=checkbox]{margin-left:-30px}body.rtl .unused-image-sizes__label{margin-right:30px;margin-left:0}body.rtl .unused-image-sizes__label input[type=checkbox]{margin-left:4px;margin-right:-30px}}#wp-optimize-nav-tab-contents-tables a{vertical-align:middle}#wpo_sitelist_moreoptions,#wpo_sitelist_moreoptions_cron{margin:4px 16px 6px 0;border:1px dotted;padding:6px 10px;max-height:300px;overflow-y:scroll;overflow-x:hidden}#wpo_sitelist_moreoptions{max-height:150px;margin-right:0}#wpo_settings_sites_list li,#wpo_settings_sites_list li a{font-size:13px;line-height:1.5}#wpo_sitelist_moreoptions_cron li{padding-left:20px}#wpo_import_error_message{display:none;color:#9b0000}#wpo_import_success_message{display:none;color:#46b450}#wp-optimize-logging-options{margin-top:10px}.wpo_logging_header{font-weight:bold;border-top:1px solid #333;border-bottom:1px solid #333;padding:5px 0;margin:0}.wpo_logging_row{border-bottom:1px solid #a1a2a3;padding:5px 0}.wpo_logging_logger_title,.wpo_logging_options_title,.wpo_logging_status_title,.wpo_logging_actions_title,.wpo_logging_logger_row,.wpo_logging_options_row,.wpo_logging_status_row,.wpo_logging_actions_row{display:inline-block;vertical-align:middle}.wpo_logging_logger_title,.wpo_logging_logger_row{width:38%}.wpo_logging_options_title,.wpo_logging_options_row{width:44%}.wpo_logging_status_title,.wpo_logging_status_row{width:8%}.wpo_logging_actions_title,.wpo_logging_actions_row{width:7%}.wpo_logging_actions_row{text-align:right}.wpo_logging_options_row{word-wrap:break-word}.wpo_logging_actions_row .dashicons-no-alt,.wpo_add_logger_form .dashicons-no-alt{background-color:#f06666;color:#FFF;width:20px;height:20px;border-radius:20px;display:inline-block;cursor:pointer;margin-left:5px}.wpo_add_logger_form .dashicons-no-alt{margin-top:12px;margin-right:10px;float:right}.wpo_logger_type{width:90%;margin-top:10px}.wpo_logger_addition_option{width:100%;margin-top:5px}.wpo_alert_notice{background-color:#f06666;color:#FFF;padding:5px;display:block;margin-bottom:5px;border-radius:5px}.wpo_error_field{border-color:#f06666 !important}.save_settings_reminder{display:none;color:#333;padding:15px 20px;background-color:#f0a5a4;border-radius:3px;margin:15px 0}#wpo_remove_selected_sizes{margin-top:20px}.wpo_unused_images_buttons_wrap{float:right;margin-right:20px}.wpo_unused_images_container h3{min-width:150px}#wpo_unused_images,#wpo_smush_images_grid{max-height:500px;overflow-y:auto}#wpo_unused_images a{outline:0}#wp-optimize-nav-tab-wpo_database-tables-contents .wpo-take-a-backup{margin-left:1%}.run-single-table-delete{margin-top:3px}#wpo_browser_cache_output,#wpo_gzip_compression_output,#wpo_advanced_cache_output{background:#f0f0f0;padding:10px;border:1px solid #CCC;white-space:pre-wrap}#wpo_gzip_compression_error_message,.wpo-error{color:#9b0000}.notice.wpo-error__enabling-cache{white-space:pre;margin-bottom:15px}a.loading.wpo-refresh-gzip-status{color:rgba(68,68,68,0.5);text-decoration:none}a.loading.wpo-refresh-gzip-status img.wpo_spinner.display-none{display:inline-block}#wpo_browser_cache_expire_days,#wpo_browser_cache_expire_hours{width:50px}.wpo-enabled .wpo-disabled{display:none}.wpo-disabled .wpo-enabled{display:none}.wpo-button-wrap{margin-top:10px}
2
- /*# sourceMappingURL=admin-3-0-16.min.css.map */
 
 
css/admin-3-0-16.min.css.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["css/admin.css"],"names":[],"mappings":"AAAA;CACC,yBAAyB;CACzB;;AAED;CACC,iBAAiB;CACjB,YAAY;CACZ,2IAA2I;CAC3I,iBAAiB;CACjB,iBAAiB;CACjB,iBAAiB;CAEjB,uCAAuC;CACvC;;AAED;CACC,iCAAiC;CACjC;;AAED;CACC,kBAAkB;CAClB;;AAED,gBAAgB;AAChB;CACC,4BAA4B;CAC5B,2BAA2B;CAC3B,iBAAiB;CACjB,iBAAiB;CACjB;;AAED,gBAAgB;AAChB;CACC,YAAY;CACZ,WAAW;CACX,UAAU;CACV;;AAED;CACC,oBAAoB;CACpB;;AAED;CACC,kBAAkB;CAClB,eAAe;CACf,mBAAmB;CACnB;;AAED,oBAAoB;AACpB;CACC,eAAe;CACf,YAAY;CACZ,mBAAmB;CACnB;;AAED;CACC,eAAe;CACf;;AAED,gBAAgB;AAChB;;CAEC,YAAY;CACZ,eAAe;CACf;;AAED;CACC,YAAY;CACZ;;AAED;CACC,WAAW;CACX;;AAED,qBAAqB;AACrB;CACC,YAAY;CACZ;;AAED;CACC,aAAa;CACb;;AAED;CACC,aAAa;CACb;;AAED;CACC,UAAU;CACV;;AAED;;CAEC;EACC,0BAA0B;EAC1B;;CAED;EACC,yBAAyB;EACzB;;CAED;;AAED;;CAEC;EACC,yBAAyB;EACzB;;CAED;EACC,0BAA0B;EAC1B;;CAED;;AAED;;CAEC;EACC,aAAa;EACb;;CAED;EACC,YAAY;EACZ;;CAED;EACC,YAAY;EACZ;;CAED;EACC,YAAY;EACZ;;CAED;EACC,YAAY;EACZ;;CAED;;AAED,qRAAqR;;AAErR;CACC,iBAAiB;CACjB,yBAAyB;CACzB,sBAAsB;CACtB,kBAAkB;CAClB,mBAAmB;CACnB,eAAe;CACf,uBAAuB;CACvB,YAAY;CACZ,gBAAgB;CAChB,aAAa;CACb,mBAAmB;CACnB,eAAe;CACf;;AAED;CACC,oBAAoB;CACpB;;AAED;CACC,YAAY;CACZ,kBAAkB;CAClB,mBAAmB;CACnB;;AAED;CACC,YAAY;CACZ,aAAa;CACb;;AAED;CACC,YAAY;CACZ;;AAED;CACC,eAAe;CACf,mBAAmB;CACnB;;AAED;CACC,kBAAkB;CAClB;;AAED,sCAAsC;AACtC;CACC,eAAe;CACf,kBAAkB;CAClB,mBAAmB;CACnB,oBAAoB;CACpB,iBAAiB;CACjB,aAAa;CACb,gBAAgB;CAChB;;AAED;CACC,YAAY;CACZ,aAAa;CACb,mBAAmB;CACnB,cAAc;CACd,mBAAmB;CACnB,SAAS;CACT;;AAED;CACC,YAAY;CACZ,aAAa;CACb;;AAED;CACC,sBAAsB;CACtB;;AAED;CACC,cAAc;CACd;;AAED;CACC,mBAAmB;CACnB;;AAED;CACC,WAAW;CACX;;AAED;CACC,eAAe;CACf,2BAA2B;CAC3B;;AAED;CACC,2BAA2B;CAC3B;;AAED;CACC,mBAAmB;CACnB,SAAS;CACT;;AAED;;CAEC;EACC,aAAa;EACb,kBAAkB;EAClB;;CAED;;AAED;CACC,yBAAyB;CACzB;;AAED;CACC,mBAAmB;CACnB,SAAS;CACT,UAAU;CACV;;AAED;CACC,cAAc;CACd;;AAED;CACC,YAAY;CACZ,oBAAoB;CACpB;;AAED;CACC,cAAc;CACd,eAAe;CACf;;AAED;CACC,iBAAiB;CACjB;;AAED,uBAAuB;AACvB;;CAEC,cAAc;CACd;;AAED;;CAEC,sBAAsB;CACtB,UAAU;CACV,aAAa;CACb,kBAAkB;CAClB;;AAED;CACC,eAAe;CACf,gBAAgB;CAChB,sBAAsB;CACtB,mBAAmB;CACnB;;AAED;CACC,gBAAgB;CAChB,iBAAiB;CACjB,oBAAoB;CACpB;;AAED;CACC,sBAAsB;CACtB;;AAED;CACC,iBAAiB;CACjB;;AAED;CACC,eAAe;CACf,iBAAiB;CACjB;;AAED;;CAEC;EACC,kBAAkB;EAClB,oBAAoB;EACpB,eAAe;EACf,uBAAuB;EACvB;;CAED;EACC,mBAAmB;EACnB;;CAED;EACC,mBAAmB;EACnB,eAAe;EACf;;CAED;EACC,iBAAiB;EACjB,oBAAoB;EACpB;;CAED;;AAED;CACC,uBAAuB;CACvB;;AAED;;CAEC,uBAAuB;CACvB,mBAAmB;CACnB,kBAAkB;CAClB,kBAAkB;CAClB,mBAAmB;CACnB,mBAAmB;CACnB;;AAED;CACC,kBAAkB;CAClB,gBAAgB;CAChB;;AAED;;CAEC,gBAAgB;CAChB,iBAAiB;CACjB;;AAED;CACC,mBAAmB;CACnB;;AAED;CACC,cAAc;CACd,eAAe;CACf;;AAED;CACC,cAAc;CACd,eAAe;CACf;;AAED;CACC,iBAAiB;CACjB;;AAED,oBAAoB;AACpB;CACC,kBAAkB;CAClB,2BAA2B;CAC3B,8BAA8B;CAC9B,eAAe;CACf,UAAU;CACV;;AAED;CACC,iCAAiC;CACjC,eAAe;CACf;;AAED;;;;;;;;CAQC,sBAAsB;CACtB,uBAAuB;CACvB;;AAED;;CAEC,WAAW;CACX;;AAED;;CAEC,WAAW;CACX;;AAED;;CAEC,UAAU;CACV;;AAED;;CAEC,UAAU;CACV;;AAED;CACC,kBAAkB;CAClB;;AAED;CACC,sBAAsB;CACtB;;AAED;;CAEC,0BAA0B;CAC1B,YAAY;CACZ,YAAY;CACZ,aAAa;CACb,oBAAoB;CACpB,sBAAsB;CACtB,gBAAgB;CAChB,iBAAiB;CACjB;;AAED;CACC,iBAAiB;CACjB,mBAAmB;CACnB,aAAa;CACb;;AAED;CACC,WAAW;CACX,iBAAiB;CACjB;;AAED;CACC,YAAY;CACZ,gBAAgB;CAChB;;AAED;CACC,0BAA0B;CAC1B,YAAY;CACZ,aAAa;CACb,eAAe;CACf,mBAAmB;CACnB,mBAAmB;CACnB;;AAED;CACC,iCAAiC;CACjC;;AAED;CACC,cAAc;CACd,YAAY;CACZ,mBAAmB;CACnB,0BAA0B;CAC1B,mBAAmB;CACnB,eAAe;CACf;;AAED;CACC,iBAAiB;CACjB;;AAED;CACC,aAAa;CACb,mBAAmB;CACnB;;AAED;CACC,iBAAiB;CACjB;;AAED;CACC,kBAAkB;CAClB,iBAAiB;CACjB;;AAED;CACC,cAAc;CACd;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,gBAAgB;CAChB;;AAED;;;CAGC,oBAAoB;CACpB,cAAc;CACd,uBAAuB;CACvB,sBAAsB;CACtB;;AAED;;CAEC,eAAe;CACf;;AAED;CACC,iBAAiB;CACjB,oBAAoB;CACpB;;AAED;CACC,6BAA6B;CAC7B,sBAAsB;CACtB;;AAED;CACC,sBAAsB;CACtB;;AAED;;CAEC,YAAY;CACZ;;AAED;CACC,cAAc;CACd;;AAED;CACC,cAAc;CACd;;AAED;CACC,iBAAiB;CACjB","file":"admin-3-0-16.min.css","sourcesContent":[".wpo_hidden {\n\tdisplay: none !important;\n}\n\n.wpo_info {\n\tbackground: #FFF;\n\tcolor: #444;\n\tfont-family: -apple-system, \"BlinkMacSystemFont\", \"Segoe UI\", \"Roboto\", \"Oxygen-Sans\", \"Ubuntu\", \"Cantarell\", \"Helvetica Neue\", sans-serif;\n\tmargin: 2em auto;\n\tpadding: 1em 2em;\n\tmax-width: 700px;\n\t-webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.13);\n\tbox-shadow: 0 1px 3px rgba(0,0,0,0.13);\n}\n\n#wp-optimize-wrap .widefat thead th, #wp-optimize-wrap .widefat thead td {\n\tborder-bottom: 1px solid #E1E1E1;\n}\n\n#wp-optimize-wrap .widefat td, #wp-optimize-wrap .widefat th {\n\tpadding: 8px 10px;\n}\n\n/* big button */\n.wpo_primary_big {\n\tpadding: 4px 6px !important;\n\tfont-size: 22px !important;\n\tmin-height: 34px;\n\tmin-width: 200px;\n}\n\n/* SECTIONS */\n.wpo_section {\n\tclear: both;\n\tpadding: 0;\n\tmargin: 0;\n}\n\n.wp-optimize-settings {\n\tmargin-bottom: 16px;\n}\n\n.wp-optimize-settings td > label {\n\tfont-weight: bold;\n\tdisplay: block;\n\tmargin-bottom: 8px;\n}\n\n/* COLUMN SETUP */\n.wpo_col {\n\tdisplay: block;\n\tfloat: left;\n\tmargin: 1% 0 1% 1%;\n}\n\n.wpo_col:first-child {\n\tmargin-left: 0;\n}\n\n/* GROUPING */\n.wpo_group:before,\n.wpo_group:after {\n\tcontent: \"\";\n\tdisplay: table;\n}\n\n.wpo_group:after {\n\tclear: both;\n}\n\n.wpo_half_width {\n\twidth: 48%;\n}\n\n/* GRID OF THREE */\n.wpo_span_3_of_3 {\n\twidth: 100%;\n}\n\n.wpo_span_2_of_3 {\n\twidth: 65.3%;\n}\n\n.wpo_span_1_of_3 {\n\twidth: 32.1%;\n}\n\n#wp-optimize-wrap .nav-tab-wrapper {\n\tmargin: 0;\n}\n\n@media screen and (min-width: 549px) {\n\n\t.show_on_default_sizes {\n\t\tdisplay: block !important;\n\t}\n\n\t.show_on_mobile_sizes {\n\t\tdisplay: none !important;\n\t}\n\n}\n\n@media screen and (max-width: 548px) {\n\n\t.show_on_default_sizes {\n\t\tdisplay: none !important;\n\t}\n\n\t.show_on_mobile_sizes {\n\t\tdisplay: block !important;\n\t}\n\n}\n\n@media screen and (max-width: 768px) {\n\n\t.wpo_col {\n\t\tmargin: 1% 0;\n\t}\n\n\t.wpo_span_3_of_3 {\n\t\twidth: 100%;\n\t}\n\n\t.wpo_span_2_of_3 {\n\t\twidth: 100%;\n\t}\n\n\t.wpo_span_1_of_3 {\n\t\twidth: 100%;\n\t}\n\n\t.wpo_half_width {\n\t\twidth: 100%;\n\t}\n\n}\n\n/* .wp-optimize-settings-clean-transient label, .wp-optimize-settings-clean-pingbacks label, .wp-optimize-settings-clean-trackbacks label, .wp-optimize-settings-clean-postmeta label, .wp-optimize-settings-clean-orphandata label, .wp-optimize-settings-clean-commentmeta label */\n\n.wp-optimize-setting-is-sensitive td > label::before {\n\tcontent: \"\\f534\";\n\tfont-family: 'dashicons';\n\tdisplay: inline-block;\n\tmargin-right: 6px;\n\tfont-style: normal;\n\tline-height: 1;\n\tvertical-align: middle;\n\twidth: 20px;\n\tfont-size: 18px;\n\theight: 20px;\n\ttext-align: center;\n\tcolor: #72777C;\n}\n\n.wpo-run-optimizations__container {\n\tmargin-bottom: 15px;\n}\n\ntd.wp-optimize-settings-optimization-checkbox {\n\twidth: 18px;\n\tpadding-left: 4px;\n\tpadding-right: 0px;\n}\n\n.wp-optimize-settings-optimization-checkbox input {\n\tmargin: 0px;\n\tpadding: 0px;\n}\n\n#retention-period {\n\twidth: 60px;\n}\n\n.wp-optimize-settings-optimization-info {\n\tfont-size: 80%;\n\tfont-style: italic;\n}\n\n.wp-optimize-settings input[type=\"checkbox\"] {\n\t/* width: 18px; */\n}\n\n/* Added for the Image on Addons tab*/\nimg.addons {\n\tdisplay: block;\n\tmargin-left: auto;\n\tmargin-right: auto;\n\tmargin-bottom: 20px;\n\tmax-height: 44px;\n\theight: auto;\n\tmax-width: 100%;\n}\n\n.wpo_spinner {\n\twidth: 18px;\n\theight: 18px;\n\tpadding-left: 10px;\n\tdisplay: none;\n\tposition: relative;\n\ttop: 4px;\n}\n\n.optimization_spinner {\n\twidth: 20px;\n\theight: 20px;\n}\n\n#wp-optimize-auto-options {\n\tmargin: 20px 0 0 28px;\n}\n\n.display-none {\n\tdisplay: none;\n}\n\n.visibility-hidden {\n\tvisibility: hidden;\n}\n\n.margin-one-percent {\n\tmargin: 1%;\n}\n\n#save_done, .save-done {\n\tcolor: #D94F00;\n\tfont-size: 220% !important;\n}\n\n.wp-optimize-settings-optimization-info a {\n\ttext-decoration: underline;\n}\n\n.wp-optimize-settings-optimization-run-spinner {\n\tposition: relative;\n\ttop: 2px;\n}\n\n@media screen and (min-width: 782px) {\n\n\ttd.wp-optimize-settings-optimization-run {\n\t\twidth: 180px;\n\t\tpadding-top: 16px;\n\t}\n\n}\n\n#wpoptimize_table_list .tablesorter-filter-row {\n\tdisplay: none !important;\n}\n\n#wpoptimize_table_list .optimization_spinner {\n\tposition: relative;\n\ttop: 2px;\n\tleft: 5px;\n}\n\n#wpoptimize_table_list .optimization_spinner.visibility-hidden {\n\tdisplay: none;\n}\n\n#wpoptimize_table_list_filter {\n\twidth: 100%;\n\tmargin-bottom: 15px;\n}\n\n#wpoptimize_table_list_tables_not_found {\n\tdisplay: none;\n\tmargin: 20px 0;\n}\n\ndiv#wpoptimize_table_list_tables_not_found + h3 {\n\tmargin-top: 30px;\n}\n\n/* Hide First column */\n#wpoptimize_table_list tr th:first-child,\n#wpoptimize_table_list tr td:first-child {\n\tdisplay: none;\n}\n\n#optimize_form .select2-container,\n#wp-optimize-auto-options .select2-container {\n\twidth: 50% !important;\n\ttop: -5px;\n\theight: 40px;\n\tmargin-left: 10px;\n}\n\n#wpoptimize_table_list .optimization_done_icon {\n\tcolor: #009B24;\n\tfont-size: 200%;\n\tdisplay: inline-block;\n\tposition: relative;\n}\n\n#wpo_sitelist_show_moreoptions_cron {\n\tfont-size: 13px;\n\tline-height: 1.5;\n\tletter-spacing: 1px;\n}\n\n#wp-optimize-nav-tab-contents-images .wpo_span_2_of_3 h3 {\n\tdisplay: inline-block;\n}\n\n.wpo_remove_selected_sizes_btn__container {\n\tmargin-top: 20px;\n}\n\n.unused-image-sizes__label {\n\tdisplay: block;\n\tline-height: 1.6;\n}\n\n@media (max-width: 782px) {\n\n\t.unused-image-sizes__label {\n\t\tmargin-left: 30px;\n\t\tmargin-bottom: 15px;\n\t\tline-height: 1;\n\t\tword-break: break-word;\n\t}\n\n\t.unused-image-sizes__label input[type=checkbox] {\n\t\tmargin-left: -30px;\n\t}\n\n\tbody.rtl .unused-image-sizes__label {\n\t\tmargin-right: 30px;\n\t\tmargin-left: 0;\n\t}\n\n\tbody.rtl .unused-image-sizes__label input[type=checkbox] {\n\t\tmargin-left: 4px;\n\t\tmargin-right: -30px;\n\t}\n\n}\n\n#wp-optimize-nav-tab-contents-tables a {\n\tvertical-align: middle;\n}\n\n#wpo_sitelist_moreoptions,\n#wpo_sitelist_moreoptions_cron {\n\tmargin: 4px 16px 6px 0;\n\tborder: 1px dotted;\n\tpadding: 6px 10px;\n\tmax-height: 300px;\n\toverflow-y: scroll;\n\toverflow-x: hidden;\n}\n\n#wpo_sitelist_moreoptions {\n\tmax-height: 150px;\n\tmargin-right: 0;\n}\n\n#wpo_settings_sites_list li,\n#wpo_settings_sites_list li a {\n\tfont-size: 13px;\n\tline-height: 1.5;\n}\n\n#wpo_sitelist_moreoptions_cron li {\n\tpadding-left: 20px;\n}\n\n#wpo_import_error_message {\n\tdisplay: none;\n\tcolor: #9B0000;\n}\n\n#wpo_import_success_message {\n\tdisplay: none;\n\tcolor: #46B450;\n}\n\n#wp-optimize-logging-options {\n\tmargin-top: 10px;\n}\n\n/* Logger settings*/\n.wpo_logging_header {\n\tfont-weight: bold;\n\tborder-top: 1px solid #333;\n\tborder-bottom: 1px solid #333;\n\tpadding: 5px 0;\n\tmargin: 0;\n}\n\n.wpo_logging_row {\n\tborder-bottom: 1px solid #A1A2A3;\n\tpadding: 5px 0;\n}\n\n.wpo_logging_logger_title,\n.wpo_logging_options_title,\n.wpo_logging_status_title,\n.wpo_logging_actions_title,\n.wpo_logging_logger_row,\n.wpo_logging_options_row,\n.wpo_logging_status_row,\n.wpo_logging_actions_row {\n\tdisplay: inline-block;\n\tvertical-align: middle;\n}\n\n.wpo_logging_logger_title,\n.wpo_logging_logger_row {\n\twidth: 38%;\n}\n\n.wpo_logging_options_title,\n.wpo_logging_options_row {\n\twidth: 44%;\n}\n\n.wpo_logging_status_title,\n.wpo_logging_status_row {\n\twidth: 8%;\n}\n\n.wpo_logging_actions_title,\n.wpo_logging_actions_row {\n\twidth: 7%;\n}\n\n.wpo_logging_actions_row {\n\ttext-align: right;\n}\n\n.wpo_logging_options_row {\n\tword-wrap: break-word;\n}\n\n.wpo_logging_actions_row .dashicons-no-alt,\n.wpo_add_logger_form .dashicons-no-alt {\n\tbackground-color: #F06666;\n\tcolor: #FFF;\n\twidth: 20px;\n\theight: 20px;\n\tborder-radius: 20px;\n\tdisplay: inline-block;\n\tcursor: pointer;\n\tmargin-left: 5px;\n}\n\n.wpo_add_logger_form .dashicons-no-alt {\n\tmargin-top: 12px;\n\tmargin-right: 10px;\n\tfloat: right;\n}\n\n.wpo_logger_type {\n\twidth: 90%;\n\tmargin-top: 10px;\n}\n\n.wpo_logger_addition_option {\n\twidth: 100%;\n\tmargin-top: 5px;\n}\n\n.wpo_alert_notice {\n\tbackground-color: #F06666;\n\tcolor: #FFF;\n\tpadding: 5px;\n\tdisplay: block;\n\tmargin-bottom: 5px;\n\tborder-radius: 5px;\n}\n\n.wpo_error_field {\n\tborder-color: #F06666 !important;\n}\n\n.save_settings_reminder {\n\tdisplay: none;\n\tcolor: #333;\n\tpadding: 15px 20px;\n\tbackground-color: #F0A5A4;\n\tborder-radius: 3px;\n\tmargin: 15px 0;\n}\n\n#wpo_remove_selected_sizes {\n\tmargin-top: 20px;\n}\n\n.wpo_unused_images_buttons_wrap {\n\tfloat: right;\n\tmargin-right: 20px;\n}\n\n.wpo_unused_images_container h3 {\n\tmin-width: 150px;\n}\n\n#wpo_unused_images, #wpo_smush_images_grid {\n\tmax-height: 500px;\n\toverflow-y: auto;\n}\n\n#wpo_unused_images a {\n\toutline: none;\n}\n\n#wp-optimize-nav-tab-wpo_database-tables-contents .wpo-take-a-backup {\n\tmargin-left: 1%;\n}\n\n.run-single-table-delete {\n\tmargin-top: 3px;\n}\n\n#wpo_browser_cache_output,\n#wpo_gzip_compression_output,\n#wpo_advanced_cache_output {\n\tbackground: #F0F0F0;\n\tpadding: 10px;\n\tborder: 1px solid #CCC;\n\twhite-space: pre-wrap;\n}\n\n#wpo_gzip_compression_error_message,\n.wpo-error {\n\tcolor: #9B0000;\n}\n\n.notice.wpo-error__enabling-cache {\n\twhite-space: pre;\n\tmargin-bottom: 15px;\n}\n\na.loading.wpo-refresh-gzip-status {\n\tcolor: rgba(68, 68, 68, 0.5);\n\ttext-decoration: none;\n}\n\na.loading.wpo-refresh-gzip-status img.wpo_spinner.display-none {\n\tdisplay: inline-block;\n}\n\n#wpo_browser_cache_expire_days,\n#wpo_browser_cache_expire_hours {\n\twidth: 50px;\n}\n\n.wpo-enabled .wpo-disabled {\n\tdisplay: none;\n}\n\n.wpo-disabled .wpo-enabled {\n\tdisplay: none;\n}\n\n.wpo-button-wrap {\n\tmargin-top: 10px;\n}"]}
 
css/admin-3-0-18.min.css ADDED
@@ -0,0 +1,2 @@
 
 
1
+ .wpo_hidden{display:none !important}.wpo_info{background:#FFF;color:#444;font-family:-apple-system,"BlinkMacSystemFont","Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif;margin:2em auto;padding:1em 2em;max-width:700px;box-shadow:0 1px 3px rgba(0,0,0,0.13)}#wp-optimize-wrap .widefat thead th,#wp-optimize-wrap .widefat thead td{border-bottom:1px solid #e1e1e1}#wp-optimize-wrap .widefat td,#wp-optimize-wrap .widefat th{padding:8px 10px}.wpo_primary_big{padding:4px 6px !important;font-size:22px !important;min-height:34px;min-width:200px}.wpo_section{clear:both;padding:0;margin:0}.wp-optimize-settings{margin-bottom:16px}.wp-optimize-settings td>label{font-weight:bold;display:block;margin-bottom:8px}.wpo_col{display:block;float:left;margin:1% 0 1% 1%}.wpo_col:first-child{margin-left:0}.wpo_group:before,.wpo_group:after{content:"";display:table}.wpo_group:after{clear:both}.wpo_half_width{width:48%}.wpo_span_3_of_3{width:100%}.wpo_span_2_of_3{width:65.3%}.wpo_span_1_of_3{width:32.1%}#wp-optimize-wrap .nav-tab-wrapper{margin:0}@media screen and (min-width:549px){.show_on_default_sizes{display:block !important}.show_on_mobile_sizes{display:none !important}}@media screen and (max-width:548px){.show_on_default_sizes{display:none !important}.show_on_mobile_sizes{display:block !important}}@media screen and (max-width:768px){.wpo_col{margin:1% 0}.wpo_span_3_of_3{width:100%}.wpo_span_2_of_3{width:100%}.wpo_span_1_of_3{width:100%}.wpo_half_width{width:100%}}.wp-optimize-setting-is-sensitive td>label::before{content:"\f534";font-family:'dashicons';display:inline-block;margin-right:6px;font-style:normal;line-height:1;vertical-align:middle;width:20px;font-size:18px;height:20px;text-align:center;color:#72777c}.wpo-run-optimizations__container{margin-bottom:15px}.wp-optimize-optimizations-table-placeholder{min-height:80px}td.wp-optimize-settings-optimization-checkbox{width:18px;padding-left:4px;padding-right:0}.wp-optimize-settings-optimization-checkbox input{margin:0;padding:0}#retention-period{width:60px}.wp-optimize-settings-optimization-info{font-size:80%;font-style:italic}img.addons{display:block;margin-left:auto;margin-right:auto;margin-bottom:20px;max-height:44px;height:auto;max-width:100%}.wpo_spinner{width:18px;height:18px;padding-left:10px;display:none;position:relative;top:4px}.optimization_spinner{width:20px;height:20px}#wp-optimize-auto-options{margin:20px 0 0 28px}.display-none{display:none}.visibility-hidden{visibility:hidden}.margin-one-percent{margin:1%}#save_done,.save-done{color:#d94f00;font-size:220% !important}.wp-optimize-settings-optimization-info a{text-decoration:underline}.wp-optimize-settings-optimization-run-spinner{position:relative;top:2px}@media screen and (min-width:782px){td.wp-optimize-settings-optimization-run{width:180px;padding-top:16px}}#wpoptimize_table_list .tablesorter-filter-row{display:none !important}#wpoptimize_table_list .optimization_spinner{position:relative;top:2px;left:5px}#wpoptimize_table_list .optimization_spinner.visibility-hidden{display:none}#wpoptimize_table_list_filter{width:100%;margin-bottom:15px}#wpoptimize_table_list_tables_not_found{display:none;margin:20px 0}div#wpoptimize_table_list_tables_not_found+h3{margin-top:30px}#wpoptimize_table_list tr th:first-child,#wpoptimize_table_list tr td:first-child{display:none}#optimize_form .select2-container,#wp-optimize-auto-options .select2-container{width:50% !important;top:-5px;height:40px;margin-left:10px}#wpoptimize_table_list .optimization_done_icon{color:#009b24;font-size:200%;display:inline-block;position:relative}#wpo_sitelist_show_moreoptions_cron{font-size:13px;line-height:1.5;letter-spacing:1px}#wp-optimize-nav-tab-contents-images .wpo_span_2_of_3 h3{display:inline-block}.wpo_remove_selected_sizes_btn__container{margin-top:20px}.unused-image-sizes__label{display:block;line-height:1.6}@media(max-width:782px){.unused-image-sizes__label{margin-left:30px;margin-bottom:15px;line-height:1;word-break:break-word}.unused-image-sizes__label input[type=checkbox]{margin-left:-30px}body.rtl .unused-image-sizes__label{margin-right:30px;margin-left:0}body.rtl .unused-image-sizes__label input[type=checkbox]{margin-left:4px;margin-right:-30px}}#wp-optimize-nav-tab-contents-tables a{vertical-align:middle}#wpo_sitelist_moreoptions,#wpo_sitelist_moreoptions_cron{margin:4px 16px 6px 0;border:1px dotted;padding:6px 10px;max-height:300px;overflow-y:scroll;overflow-x:hidden}#wpo_sitelist_moreoptions{max-height:150px;margin-right:0}#wpo_settings_sites_list li,#wpo_settings_sites_list li a{font-size:13px;line-height:1.5}#wpo_sitelist_moreoptions_cron li{padding-left:20px}#wpo_import_error_message{display:none;color:#9b0000}#wpo_import_success_message{display:none;color:#46b450}#wp-optimize-logging-options{margin-top:10px}.wpo_logging_header{font-weight:bold;border-top:1px solid #333;border-bottom:1px solid #333;padding:5px 0;margin:0}.wpo_logging_row{border-bottom:1px solid #a1a2a3;padding:5px 0}.wpo_logging_logger_title,.wpo_logging_options_title,.wpo_logging_status_title,.wpo_logging_actions_title,.wpo_logging_logger_row,.wpo_logging_options_row,.wpo_logging_status_row,.wpo_logging_actions_row{display:inline-block;vertical-align:middle}.wpo_logging_logger_title,.wpo_logging_logger_row{width:38%}.wpo_logging_options_title,.wpo_logging_options_row{width:44%}.wpo_logging_status_title,.wpo_logging_status_row{width:8%}.wpo_logging_actions_title,.wpo_logging_actions_row{width:7%}.wpo_logging_actions_row{text-align:right}.wpo_logging_options_row{word-wrap:break-word}.wpo_logging_actions_row .dashicons-no-alt,.wpo_add_logger_form .dashicons-no-alt{background-color:#f06666;color:#FFF;width:20px;height:20px;border-radius:20px;display:inline-block;cursor:pointer;margin-left:5px}.wpo_add_logger_form .dashicons-no-alt{margin-top:12px;margin-right:10px;float:right}.wpo_logger_type{width:90%;margin-top:10px}.wpo_logger_addition_option{width:100%;margin-top:5px}.wpo_alert_notice{background-color:#f06666;color:#FFF;padding:5px;display:block;margin-bottom:5px;border-radius:5px}.wpo_error_field{border-color:#f06666 !important}.save_settings_reminder{display:none;color:#333;padding:15px 20px;background-color:#f0a5a4;border-radius:3px;margin:15px 0}#wpo_remove_selected_sizes{margin-top:20px}.wpo_unused_images_buttons_wrap{float:right;margin-right:20px}.wpo_unused_images_container h3{min-width:150px}#wpo_unused_images,#wpo_smush_images_grid{max-height:500px;overflow-y:auto}#wpo_unused_images a{outline:0}#wp-optimize-nav-tab-wpo_database-tables-contents .wpo-take-a-backup{margin-left:1%}.run-single-table-delete{margin-top:3px}#wpo_browser_cache_output,#wpo_gzip_compression_output,#wpo_advanced_cache_output{background:#f0f0f0;padding:10px;border:1px solid #CCC;white-space:pre-wrap}#wpo_gzip_compression_error_message,.wpo-error{color:#9b0000}.notice.wpo-error__enabling-cache{white-space:pre;margin-bottom:15px}a.loading.wpo-refresh-gzip-status{color:rgba(68,68,68,0.5);text-decoration:none}a.loading.wpo-refresh-gzip-status img.wpo_spinner.display-none{display:inline-block}#wpo_browser_cache_expire_days,#wpo_browser_cache_expire_hours{width:50px}.wpo-enabled .wpo-disabled{display:none}.wpo-disabled .wpo-enabled{display:none}.wpo-button-wrap{margin-top:10px}
2
+ /*# sourceMappingURL=admin-3-0-18.min.css.map */
css/admin-3-0-18.min.css.map ADDED
@@ -0,0 +1 @@
 
1
+ {"version":3,"sources":["css/admin.css"],"names":[],"mappings":"AAAA;CACC,yBAAyB;CACzB;;AAED;CACC,iBAAiB;CACjB,YAAY;CACZ,2IAA2I;CAC3I,iBAAiB;CACjB,iBAAiB;CACjB,iBAAiB;CAEjB,uCAAuC;CACvC;;AAED;CACC,iCAAiC;CACjC;;AAED;CACC,kBAAkB;CAClB;;AAED,gBAAgB;AAChB;CACC,4BAA4B;CAC5B,2BAA2B;CAC3B,iBAAiB;CACjB,iBAAiB;CACjB;;AAED,gBAAgB;AAChB;CACC,YAAY;CACZ,WAAW;CACX,UAAU;CACV;;AAED;CACC,oBAAoB;CACpB;;AAED;CACC,kBAAkB;CAClB,eAAe;CACf,mBAAmB;CACnB;;AAED,oBAAoB;AACpB;CACC,eAAe;CACf,YAAY;CACZ,mBAAmB;CACnB;;AAED;CACC,eAAe;CACf;;AAED,gBAAgB;AAChB;;CAEC,YAAY;CACZ,eAAe;CACf;;AAED;CACC,YAAY;CACZ;;AAED;CACC,WAAW;CACX;;AAED,qBAAqB;AACrB;CACC,YAAY;CACZ;;AAED;CACC,aAAa;CACb;;AAED;CACC,aAAa;CACb;;AAED;CACC,UAAU;CACV;;AAED;;CAEC;EACC,0BAA0B;EAC1B;;CAED;EACC,yBAAyB;EACzB;;CAED;;AAED;;CAEC;EACC,yBAAyB;EACzB;;CAED;EACC,0BAA0B;EAC1B;;CAED;;AAED;;CAEC;EACC,aAAa;EACb;;CAED;EACC,YAAY;EACZ;;CAED;EACC,YAAY;EACZ;;CAED;EACC,YAAY;EACZ;;CAED;EACC,YAAY;EACZ;;CAED;;AAED,qRAAqR;;AAErR,uBAAuB;;AAEvB;CACC,iBAAiB;CACjB,yBAAyB;CACzB,sBAAsB;CACtB,kBAAkB;CAClB,mBAAmB;CACnB,eAAe;CACf,uBAAuB;CACvB,YAAY;CACZ,gBAAgB;CAChB,aAAa;CACb,mBAAmB;CACnB,eAAe;CACf;;AAED;CACC,oBAAoB;CACpB;;AAED;CACC,iBAAiB;CACjB;;AAED;CACC,YAAY;CACZ,kBAAkB;CAClB,mBAAmB;CACnB;;AAED;CACC,YAAY;CACZ,aAAa;CACb;;AAED;CACC,YAAY;CACZ;;AAED;CACC,eAAe;CACf,mBAAmB;CACnB;;AAED;CACC,kBAAkB;CAClB;;AAED,sCAAsC;AACtC;CACC,eAAe;CACf,kBAAkB;CAClB,mBAAmB;CACnB,oBAAoB;CACpB,iBAAiB;CACjB,aAAa;CACb,gBAAgB;CAChB;;AAED;CACC,YAAY;CACZ,aAAa;CACb,mBAAmB;CACnB,cAAc;CACd,mBAAmB;CACnB,SAAS;CACT;;AAED;CACC,YAAY;CACZ,aAAa;CACb;;AAED;CACC,sBAAsB;CACtB;;AAED;CACC,cAAc;CACd;;AAED;CACC,mBAAmB;CACnB;;AAED;CACC,WAAW;CACX;;AAED;CACC,eAAe;CACf,2BAA2B;CAC3B;;AAED;CACC,2BAA2B;CAC3B;;AAED;CACC,mBAAmB;CACnB,SAAS;CACT;;AAED;;CAEC;EACC,aAAa;EACb,kBAAkB;EAClB;;CAED;;AAED;CACC,yBAAyB;CACzB;;AAED;CACC,mBAAmB;CACnB,SAAS;CACT,UAAU;CACV;;AAED;CACC,cAAc;CACd;;AAED;CACC,YAAY;CACZ,oBAAoB;CACpB;;AAED;CACC,cAAc;CACd,eAAe;CACf;;AAED;CACC,iBAAiB;CACjB;;AAED,uBAAuB;AACvB;;CAEC,cAAc;CACd;;AAED;;CAEC,sBAAsB;CACtB,UAAU;CACV,aAAa;CACb,kBAAkB;CAClB;;AAED;CACC,eAAe;CACf,gBAAgB;CAChB,sBAAsB;CACtB,mBAAmB;CACnB;;AAED;CACC,gBAAgB;CAChB,iBAAiB;CACjB,oBAAoB;CACpB;;AAED;CACC,sBAAsB;CACtB;;AAED;CACC,iBAAiB;CACjB;;AAED;CACC,eAAe;CACf,iBAAiB;CACjB;;AAED;;CAEC;EACC,kBAAkB;EAClB,oBAAoB;EACpB,eAAe;EACf,uBAAuB;EACvB;;CAED;EACC,mBAAmB;EACnB;;CAED;EACC,mBAAmB;EACnB,eAAe;EACf;;CAED;EACC,iBAAiB;EACjB,oBAAoB;EACpB;;CAED;;AAED;CACC,uBAAuB;CACvB;;AAED;;CAEC,uBAAuB;CACvB,mBAAmB;CACnB,kBAAkB;CAClB,kBAAkB;CAClB,mBAAmB;CACnB,mBAAmB;CACnB;;AAED;CACC,kBAAkB;CAClB,gBAAgB;CAChB;;AAED;;CAEC,gBAAgB;CAChB,iBAAiB;CACjB;;AAED;CACC,mBAAmB;CACnB;;AAED;CACC,cAAc;CACd,eAAe;CACf;;AAED;CACC,cAAc;CACd,eAAe;CACf;;AAED;CACC,iBAAiB;CACjB;;AAED,oBAAoB;AACpB;CACC,kBAAkB;CAClB,2BAA2B;CAC3B,8BAA8B;CAC9B,eAAe;CACf,UAAU;CACV;;AAED;CACC,iCAAiC;CACjC,eAAe;CACf;;AAED;;;;;;;;CAQC,sBAAsB;CACtB,uBAAuB;CACvB;;AAED;;CAEC,WAAW;CACX;;AAED;;CAEC,WAAW;CACX;;AAED;;CAEC,UAAU;CACV;;AAED;;CAEC,UAAU;CACV;;AAED;CACC,kBAAkB;CAClB;;AAED;CACC,sBAAsB;CACtB;;AAED;;CAEC,0BAA0B;CAC1B,YAAY;CACZ,YAAY;CACZ,aAAa;CACb,oBAAoB;CACpB,sBAAsB;CACtB,gBAAgB;CAChB,iBAAiB;CACjB;;AAED;CACC,iBAAiB;CACjB,mBAAmB;CACnB,aAAa;CACb;;AAED;CACC,WAAW;CACX,iBAAiB;CACjB;;AAED;CACC,YAAY;CACZ,gBAAgB;CAChB;;AAED;CACC,0BAA0B;CAC1B,YAAY;CACZ,aAAa;CACb,eAAe;CACf,mBAAmB;CACnB,mBAAmB;CACnB;;AAED;CACC,iCAAiC;CACjC;;AAED;CACC,cAAc;CACd,YAAY;CACZ,mBAAmB;CACnB,0BAA0B;CAC1B,mBAAmB;CACnB,eAAe;CACf;;AAED;CACC,iBAAiB;CACjB;;AAED;CACC,aAAa;CACb,mBAAmB;CACnB;;AAED;CACC,iBAAiB;CACjB;;AAED;CACC,kBAAkB;CAClB,iBAAiB;CACjB;;AAED;CACC,cAAc;CACd;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,gBAAgB;CAChB;;AAED;;;CAGC,oBAAoB;CACpB,cAAc;CACd,uBAAuB;CACvB,sBAAsB;CACtB;;AAED;;CAEC,eAAe;CACf;;AAED;CACC,iBAAiB;CACjB,oBAAoB;CACpB;;AAED;CACC,6BAA6B;CAC7B,sBAAsB;CACtB;;AAED;CACC,sBAAsB;CACtB;;AAED;;CAEC,YAAY;CACZ;;AAED;CACC,cAAc;CACd;;AAED;CACC,cAAc;CACd;;AAED;CACC,iBAAiB;CACjB","file":"admin-3-0-18.min.css","sourcesContent":[".wpo_hidden {\n\tdisplay: none !important;\n}\n\n.wpo_info {\n\tbackground: #FFF;\n\tcolor: #444;\n\tfont-family: -apple-system, \"BlinkMacSystemFont\", \"Segoe UI\", \"Roboto\", \"Oxygen-Sans\", \"Ubuntu\", \"Cantarell\", \"Helvetica Neue\", sans-serif;\n\tmargin: 2em auto;\n\tpadding: 1em 2em;\n\tmax-width: 700px;\n\t-webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.13);\n\tbox-shadow: 0 1px 3px rgba(0,0,0,0.13);\n}\n\n#wp-optimize-wrap .widefat thead th, #wp-optimize-wrap .widefat thead td {\n\tborder-bottom: 1px solid #E1E1E1;\n}\n\n#wp-optimize-wrap .widefat td, #wp-optimize-wrap .widefat th {\n\tpadding: 8px 10px;\n}\n\n/* big button */\n.wpo_primary_big {\n\tpadding: 4px 6px !important;\n\tfont-size: 22px !important;\n\tmin-height: 34px;\n\tmin-width: 200px;\n}\n\n/* SECTIONS */\n.wpo_section {\n\tclear: both;\n\tpadding: 0;\n\tmargin: 0;\n}\n\n.wp-optimize-settings {\n\tmargin-bottom: 16px;\n}\n\n.wp-optimize-settings td > label {\n\tfont-weight: bold;\n\tdisplay: block;\n\tmargin-bottom: 8px;\n}\n\n/* COLUMN SETUP */\n.wpo_col {\n\tdisplay: block;\n\tfloat: left;\n\tmargin: 1% 0 1% 1%;\n}\n\n.wpo_col:first-child {\n\tmargin-left: 0;\n}\n\n/* GROUPING */\n.wpo_group:before,\n.wpo_group:after {\n\tcontent: \"\";\n\tdisplay: table;\n}\n\n.wpo_group:after {\n\tclear: both;\n}\n\n.wpo_half_width {\n\twidth: 48%;\n}\n\n/* GRID OF THREE */\n.wpo_span_3_of_3 {\n\twidth: 100%;\n}\n\n.wpo_span_2_of_3 {\n\twidth: 65.3%;\n}\n\n.wpo_span_1_of_3 {\n\twidth: 32.1%;\n}\n\n#wp-optimize-wrap .nav-tab-wrapper {\n\tmargin: 0;\n}\n\n@media screen and (min-width: 549px) {\n\n\t.show_on_default_sizes {\n\t\tdisplay: block !important;\n\t}\n\n\t.show_on_mobile_sizes {\n\t\tdisplay: none !important;\n\t}\n\n}\n\n@media screen and (max-width: 548px) {\n\n\t.show_on_default_sizes {\n\t\tdisplay: none !important;\n\t}\n\n\t.show_on_mobile_sizes {\n\t\tdisplay: block !important;\n\t}\n\n}\n\n@media screen and (max-width: 768px) {\n\n\t.wpo_col {\n\t\tmargin: 1% 0;\n\t}\n\n\t.wpo_span_3_of_3 {\n\t\twidth: 100%;\n\t}\n\n\t.wpo_span_2_of_3 {\n\t\twidth: 100%;\n\t}\n\n\t.wpo_span_1_of_3 {\n\t\twidth: 100%;\n\t}\n\n\t.wpo_half_width {\n\t\twidth: 100%;\n\t}\n\n}\n\n/* .wp-optimize-settings-clean-transient label, .wp-optimize-settings-clean-pingbacks label, .wp-optimize-settings-clean-trackbacks label, .wp-optimize-settings-clean-postmeta label, .wp-optimize-settings-clean-orphandata label, .wp-optimize-settings-clean-commentmeta label */\n\n/* Optimizations tab */\n\n.wp-optimize-setting-is-sensitive td > label::before {\n\tcontent: \"\\f534\";\n\tfont-family: 'dashicons';\n\tdisplay: inline-block;\n\tmargin-right: 6px;\n\tfont-style: normal;\n\tline-height: 1;\n\tvertical-align: middle;\n\twidth: 20px;\n\tfont-size: 18px;\n\theight: 20px;\n\ttext-align: center;\n\tcolor: #72777C;\n}\n\n.wpo-run-optimizations__container {\n\tmargin-bottom: 15px;\n}\n\n.wp-optimize-optimizations-table-placeholder {\n\tmin-height: 80px;\n}\n\ntd.wp-optimize-settings-optimization-checkbox {\n\twidth: 18px;\n\tpadding-left: 4px;\n\tpadding-right: 0px;\n}\n\n.wp-optimize-settings-optimization-checkbox input {\n\tmargin: 0px;\n\tpadding: 0px;\n}\n\n#retention-period {\n\twidth: 60px;\n}\n\n.wp-optimize-settings-optimization-info {\n\tfont-size: 80%;\n\tfont-style: italic;\n}\n\n.wp-optimize-settings input[type=\"checkbox\"] {\n\t/* width: 18px; */\n}\n\n/* Added for the Image on Addons tab*/\nimg.addons {\n\tdisplay: block;\n\tmargin-left: auto;\n\tmargin-right: auto;\n\tmargin-bottom: 20px;\n\tmax-height: 44px;\n\theight: auto;\n\tmax-width: 100%;\n}\n\n.wpo_spinner {\n\twidth: 18px;\n\theight: 18px;\n\tpadding-left: 10px;\n\tdisplay: none;\n\tposition: relative;\n\ttop: 4px;\n}\n\n.optimization_spinner {\n\twidth: 20px;\n\theight: 20px;\n}\n\n#wp-optimize-auto-options {\n\tmargin: 20px 0 0 28px;\n}\n\n.display-none {\n\tdisplay: none;\n}\n\n.visibility-hidden {\n\tvisibility: hidden;\n}\n\n.margin-one-percent {\n\tmargin: 1%;\n}\n\n#save_done, .save-done {\n\tcolor: #D94F00;\n\tfont-size: 220% !important;\n}\n\n.wp-optimize-settings-optimization-info a {\n\ttext-decoration: underline;\n}\n\n.wp-optimize-settings-optimization-run-spinner {\n\tposition: relative;\n\ttop: 2px;\n}\n\n@media screen and (min-width: 782px) {\n\n\ttd.wp-optimize-settings-optimization-run {\n\t\twidth: 180px;\n\t\tpadding-top: 16px;\n\t}\n\n}\n\n#wpoptimize_table_list .tablesorter-filter-row {\n\tdisplay: none !important;\n}\n\n#wpoptimize_table_list .optimization_spinner {\n\tposition: relative;\n\ttop: 2px;\n\tleft: 5px;\n}\n\n#wpoptimize_table_list .optimization_spinner.visibility-hidden {\n\tdisplay: none;\n}\n\n#wpoptimize_table_list_filter {\n\twidth: 100%;\n\tmargin-bottom: 15px;\n}\n\n#wpoptimize_table_list_tables_not_found {\n\tdisplay: none;\n\tmargin: 20px 0;\n}\n\ndiv#wpoptimize_table_list_tables_not_found + h3 {\n\tmargin-top: 30px;\n}\n\n/* Hide First column */\n#wpoptimize_table_list tr th:first-child,\n#wpoptimize_table_list tr td:first-child {\n\tdisplay: none;\n}\n\n#optimize_form .select2-container,\n#wp-optimize-auto-options .select2-container {\n\twidth: 50% !important;\n\ttop: -5px;\n\theight: 40px;\n\tmargin-left: 10px;\n}\n\n#wpoptimize_table_list .optimization_done_icon {\n\tcolor: #009B24;\n\tfont-size: 200%;\n\tdisplay: inline-block;\n\tposition: relative;\n}\n\n#wpo_sitelist_show_moreoptions_cron {\n\tfont-size: 13px;\n\tline-height: 1.5;\n\tletter-spacing: 1px;\n}\n\n#wp-optimize-nav-tab-contents-images .wpo_span_2_of_3 h3 {\n\tdisplay: inline-block;\n}\n\n.wpo_remove_selected_sizes_btn__container {\n\tmargin-top: 20px;\n}\n\n.unused-image-sizes__label {\n\tdisplay: block;\n\tline-height: 1.6;\n}\n\n@media (max-width: 782px) {\n\n\t.unused-image-sizes__label {\n\t\tmargin-left: 30px;\n\t\tmargin-bottom: 15px;\n\t\tline-height: 1;\n\t\tword-break: break-word;\n\t}\n\n\t.unused-image-sizes__label input[type=checkbox] {\n\t\tmargin-left: -30px;\n\t}\n\n\tbody.rtl .unused-image-sizes__label {\n\t\tmargin-right: 30px;\n\t\tmargin-left: 0;\n\t}\n\n\tbody.rtl .unused-image-sizes__label input[type=checkbox] {\n\t\tmargin-left: 4px;\n\t\tmargin-right: -30px;\n\t}\n\n}\n\n#wp-optimize-nav-tab-contents-tables a {\n\tvertical-align: middle;\n}\n\n#wpo_sitelist_moreoptions,\n#wpo_sitelist_moreoptions_cron {\n\tmargin: 4px 16px 6px 0;\n\tborder: 1px dotted;\n\tpadding: 6px 10px;\n\tmax-height: 300px;\n\toverflow-y: scroll;\n\toverflow-x: hidden;\n}\n\n#wpo_sitelist_moreoptions {\n\tmax-height: 150px;\n\tmargin-right: 0;\n}\n\n#wpo_settings_sites_list li,\n#wpo_settings_sites_list li a {\n\tfont-size: 13px;\n\tline-height: 1.5;\n}\n\n#wpo_sitelist_moreoptions_cron li {\n\tpadding-left: 20px;\n}\n\n#wpo_import_error_message {\n\tdisplay: none;\n\tcolor: #9B0000;\n}\n\n#wpo_import_success_message {\n\tdisplay: none;\n\tcolor: #46B450;\n}\n\n#wp-optimize-logging-options {\n\tmargin-top: 10px;\n}\n\n/* Logger settings*/\n.wpo_logging_header {\n\tfont-weight: bold;\n\tborder-top: 1px solid #333;\n\tborder-bottom: 1px solid #333;\n\tpadding: 5px 0;\n\tmargin: 0;\n}\n\n.wpo_logging_row {\n\tborder-bottom: 1px solid #A1A2A3;\n\tpadding: 5px 0;\n}\n\n.wpo_logging_logger_title,\n.wpo_logging_options_title,\n.wpo_logging_status_title,\n.wpo_logging_actions_title,\n.wpo_logging_logger_row,\n.wpo_logging_options_row,\n.wpo_logging_status_row,\n.wpo_logging_actions_row {\n\tdisplay: inline-block;\n\tvertical-align: middle;\n}\n\n.wpo_logging_logger_title,\n.wpo_logging_logger_row {\n\twidth: 38%;\n}\n\n.wpo_logging_options_title,\n.wpo_logging_options_row {\n\twidth: 44%;\n}\n\n.wpo_logging_status_title,\n.wpo_logging_status_row {\n\twidth: 8%;\n}\n\n.wpo_logging_actions_title,\n.wpo_logging_actions_row {\n\twidth: 7%;\n}\n\n.wpo_logging_actions_row {\n\ttext-align: right;\n}\n\n.wpo_logging_options_row {\n\tword-wrap: break-word;\n}\n\n.wpo_logging_actions_row .dashicons-no-alt,\n.wpo_add_logger_form .dashicons-no-alt {\n\tbackground-color: #F06666;\n\tcolor: #FFF;\n\twidth: 20px;\n\theight: 20px;\n\tborder-radius: 20px;\n\tdisplay: inline-block;\n\tcursor: pointer;\n\tmargin-left: 5px;\n}\n\n.wpo_add_logger_form .dashicons-no-alt {\n\tmargin-top: 12px;\n\tmargin-right: 10px;\n\tfloat: right;\n}\n\n.wpo_logger_type {\n\twidth: 90%;\n\tmargin-top: 10px;\n}\n\n.wpo_logger_addition_option {\n\twidth: 100%;\n\tmargin-top: 5px;\n}\n\n.wpo_alert_notice {\n\tbackground-color: #F06666;\n\tcolor: #FFF;\n\tpadding: 5px;\n\tdisplay: block;\n\tmargin-bottom: 5px;\n\tborder-radius: 5px;\n}\n\n.wpo_error_field {\n\tborder-color: #F06666 !important;\n}\n\n.save_settings_reminder {\n\tdisplay: none;\n\tcolor: #333;\n\tpadding: 15px 20px;\n\tbackground-color: #F0A5A4;\n\tborder-radius: 3px;\n\tmargin: 15px 0;\n}\n\n#wpo_remove_selected_sizes {\n\tmargin-top: 20px;\n}\n\n.wpo_unused_images_buttons_wrap {\n\tfloat: right;\n\tmargin-right: 20px;\n}\n\n.wpo_unused_images_container h3 {\n\tmin-width: 150px;\n}\n\n#wpo_unused_images, #wpo_smush_images_grid {\n\tmax-height: 500px;\n\toverflow-y: auto;\n}\n\n#wpo_unused_images a {\n\toutline: none;\n}\n\n#wp-optimize-nav-tab-wpo_database-tables-contents .wpo-take-a-backup {\n\tmargin-left: 1%;\n}\n\n.run-single-table-delete {\n\tmargin-top: 3px;\n}\n\n#wpo_browser_cache_output,\n#wpo_gzip_compression_output,\n#wpo_advanced_cache_output {\n\tbackground: #F0F0F0;\n\tpadding: 10px;\n\tborder: 1px solid #CCC;\n\twhite-space: pre-wrap;\n}\n\n#wpo_gzip_compression_error_message,\n.wpo-error {\n\tcolor: #9B0000;\n}\n\n.notice.wpo-error__enabling-cache {\n\twhite-space: pre;\n\tmargin-bottom: 15px;\n}\n\na.loading.wpo-refresh-gzip-status {\n\tcolor: rgba(68, 68, 68, 0.5);\n\ttext-decoration: none;\n}\n\na.loading.wpo-refresh-gzip-status img.wpo_spinner.display-none {\n\tdisplay: inline-block;\n}\n\n#wpo_browser_cache_expire_days,\n#wpo_browser_cache_expire_hours {\n\twidth: 50px;\n}\n\n.wpo-enabled .wpo-disabled {\n\tdisplay: none;\n}\n\n.wpo-disabled .wpo-enabled {\n\tdisplay: none;\n}\n\n.wpo-button-wrap {\n\tmargin-top: 10px;\n}"]}
css/admin.css CHANGED
@@ -138,6 +138,8 @@
138
 
139
  /* .wp-optimize-settings-clean-transient label, .wp-optimize-settings-clean-pingbacks label, .wp-optimize-settings-clean-trackbacks label, .wp-optimize-settings-clean-postmeta label, .wp-optimize-settings-clean-orphandata label, .wp-optimize-settings-clean-commentmeta label */
140
 
 
 
141
  .wp-optimize-setting-is-sensitive td > label::before {
142
  content: "\f534";
143
  font-family: 'dashicons';
@@ -157,6 +159,10 @@
157
  margin-bottom: 15px;
158
  }
159
 
 
 
 
 
160
  td.wp-optimize-settings-optimization-checkbox {
161
  width: 18px;
162
  padding-left: 4px;
138
 
139
  /* .wp-optimize-settings-clean-transient label, .wp-optimize-settings-clean-pingbacks label, .wp-optimize-settings-clean-trackbacks label, .wp-optimize-settings-clean-postmeta label, .wp-optimize-settings-clean-orphandata label, .wp-optimize-settings-clean-commentmeta label */
140
 
141
+ /* Optimizations tab */
142
+
143
  .wp-optimize-setting-is-sensitive td > label::before {
144
  content: "\f534";
145
  font-family: 'dashicons';
159
  margin-bottom: 15px;
160
  }
161
 
162
+ .wp-optimize-optimizations-table-placeholder {
163
+ min-height: 80px;
164
+ }
165
+
166
  td.wp-optimize-settings-optimization-checkbox {
167
  width: 18px;
168
  padding-left: 4px;
css/smush-3-0-16.min.css DELETED
@@ -1,2 +0,0 @@
1
- .wpo-fieldgroup .autosmush{display:inline-block;width:100%}.wpo-fieldgroup .autosmush h3{font-size:1.2em;margin:3px 18px}.wpo-fieldgroup .compression_server div{max-width:300px}.wpo-fieldgroup .compression_server h2{margin:10px 0}.wpo-fieldgroup .compression_server h3{clear:both;width:100%}.wpo-fieldgroup .compression_server p{margin:1px}.wpo-fieldgroup .compression_server p:last-of-type{margin-bottom:10px}.wpo-fieldgroup .compression_server{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap}.wpo-fieldgroup .compression_server>div{-ms-flex:1;flex:1;margin-right:10px;height:100%;position:relative}.wpo-fieldgroup .compression_server input[type="radio"]{position:absolute;z-index:1;top:calc(50% + 2px);left:20px;transform:translatey(-50%)}.wpo-fieldgroup .compression_server input[type="radio"] ~ label h4{color:#23282d;margin-top:0;margin-bottom:.9em;font-size:1.2em}.wpo-fieldgroup .compression_server label{display:block;position:relative;box-sizing:border-box;height:100%;background:#FFF;text-align:left;box-shadow:0 3px 10px -2px hsla(150,5%,65%,0.5)}.wpo-fieldgroup .compression_server input[type="radio"]+label{padding:20px;border:2px solid #FFF;padding-left:65px;position:relative;border-radius:5px;color:#82868b}.wpo-fieldgroup .compression_server input[type="radio"]+label::before{content:'';display:block;position:absolute;top:0;left:52px;height:100%;border-right:1px solid #edeff0}.wpo-fieldgroup .save-options{margin:10px 0}.wpo-fieldgroup .compression_server input[type="radio"]:focus+label,.wpo-fieldgroup .compression_server input[type="radio"]+label:hover{border-color:rgba(0,134,184,0.38)}.wpo-fieldgroup .compression_server input[type="radio"]:focus+label{box-shadow:0 3px 10px -2px #5b9dd9}.wpo-fieldgroup .compression_server input[type="radio"]:focus+label h4{color:#0086b9}.wpo-fieldgroup .compression_server input[type="radio"]:checked+label,.wpo-fieldgroup .compression_server input[type="radio"]:checked+label:hover{border-color:#0086b9}@media only screen and (max-width:700px){.wpo-fieldgroup .compression_server{-ms-flex-direction:column;flex-direction:column}.wpo-fieldgroup .compression_server>div{margin-bottom:15px;max-width:100%}}.wpo-fieldgroup h4{margin:1em 0;width:100%}.wpo-fieldgroup .image_quality input[type=radio]{position:absolute;visibility:hidden;display:none}.wpo-fieldgroup .image_quality label{color:#23282d;display:inline-block;cursor:pointer;font-weight:bold;padding:5px 20px;background:#f9f9f9;float:left;margin:0 .5px}.wpo-fieldgroup .image_quality input[type=radio]:checked+label{color:white;background:#0088b9}.wpo-fieldgroup .image_quality label+.wpo-fieldgroup .image_quality input[type=radio]+label{border-left:solid 3px #675f6b}.wpo-fieldgroup .image_quality.radio-group{border:solid .5px #c4c4c4;display:inline-block;border-radius:5px;overflow:hidden;border-bottom:solid 2px #c4c4c4;background:#c4c4c4}.wpo-fieldgroup .image_options input{min-height:16px;min-width:16px;margin:3px 2px}img#wpo_smush_images_save_options_spinner{max-width:20px;max-height:20px}span#wpo_smush_images_save_options_fail{font-size:inherit;color:red}span#wpo_smush_images_save_options_done{font-size:inherit;color:green}#smush-complete-summary span.clearfix{height:10px;display:block;clear:both}span.close{display:block;clear:both;text-align:left;color:#df6927;border:2px solid;border-radius:50%;cursor:pointer}.modal-message-text{margin:0 25px}.smush-options.custom_compression{margin:10px}#smush-backup-delete-days{width:50px;margin:0 8px}img#wpo_smush_delete_backup_spinner{max-width:20px;max-height:20px;position:relative;top:4px}span#wpo_smush_delete_backup_done{font-size:inherit;color:green}.wpo-fieldgroup .smush-options.custom_compression{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;margin-left:24px}.wpo-fieldgroup .smush-options.custom_compression>span{display:inline-block;padding:6px;border:1px solid #cfd2d4;border-radius:4px;font-size:.9em;position:relative}.wpo-fieldgroup .smush-options.custom_compression>span.slider-start::after{content:'';width:6px;height:6px;display:block;position:absolute;top:0;left:100%;transform:translate(-3px,8px) rotate(45deg);border-right:1px solid #cfd2d4;border-top:1px solid #cfd2d4;background:#edeff0}.wpo-fieldgroup .smush-options.custom_compression>span.slider-end::before{content:'';width:6px;height:6px;display:block;position:absolute;top:0;right:100%;transform:translate(3px,8px) rotate(45deg);border-left:1px solid #cfd2d4;border-bottom:1px solid #cfd2d4;background:#edeff0}.wpo-fieldgroup .smush-options.custom_compression>input{margin-left:8px;margin-right:8px}@media screen and (max-width:782px){.wpo-fieldgroup input[type="radio"]{height:16px;width:16px}.wpo-fieldgroup input[type="radio"]:checked:before{width:6px;height:6px;margin:4px}.wpo-fieldgroup .smush-options.custom_compression{-ms-flex-direction:column;flex-direction:column}.wpo-fieldgroup .smush-options.custom_compression>input{width:100%}.wpo-fieldgroup .smush-options.custom_compression>span{display:block;width:100%}.wpo-fieldgroup .smush-options.custom_compression>span.slider-start::after{left:0;transform:translate(7px,22px) rotate(135deg)}.wpo-fieldgroup .smush-options.custom_compression>span.slider-end::before{right:auto;left:100%;transform:translate(-14px,-5px) rotate(135deg)}}#wpo_smush_settings .align-left{float:left}#wpo_smush_settings .align-right{float:right}.wpo-fieldgroup .wpo_smush_images_buttons_wrap{width:100%}.wpo-fieldgroup .smush-refresh-icon,.wpo-fieldgroup .smush-select-actions{font-size:15px}.wpo-fieldgroup img.wpo_smush_images_loader{display:none;min-height:20px;min-width:20px}.wpo-fieldgroup .dashicons.dashicons-image-rotate,{font-size:15px}.wpo-fieldgroup .toggle-smush-advanced{cursor:pointer;text-decoration:underline;color:#0088bc}.wpo-fieldgroup .button.toggle-smush-advanced{display:block;width:calc(100% + 40px);margin-left:-20px;margin-right:-20px;padding-left:20px;padding-right:20px;position:relative;text-decoration:none}.wpo-fieldgroup .button.toggle-smush-advanced span.dashicons{text-decoration:none;font-size:16px;height:16px;vertical-align:middle;color:#444;transition:.2s all}.wpo-fieldgroup .toggle-smush-advanced span.text{background:#f2f4f4;z-index:1;position:relative;padding-right:5px}.wpo-fieldgroup .button.toggle-smush-advanced:hover,.wpo-fieldgroup .button.toggle-smush-advanced:focus{background:transparent}.wpo-fieldgroup .button.toggle-smush-advanced .toggle-smush-advanced__text-show{display:inline-block}.wpo-fieldgroup .button.toggle-smush-advanced .toggle-smush-advanced__text-hide{display:none}.wpo-fieldgroup .button.toggle-smush-advanced.opened .toggle-smush-advanced__text-show{display:none}.wpo-fieldgroup .button.toggle-smush-advanced.opened .toggle-smush-advanced__text-hide{display:inline-block}.wpo-fieldgroup .button.toggle-smush-advanced.opened::before{content:'';border-top:1px solid #CCC;width:100%;position:absolute;top:16px;left:0}.wpo-fieldgroup .button.toggle-smush-advanced.opened span.dashicons{transform:rotate(180deg)}.wpo-fieldgroup .smush-advanced{display:none}.wpo-fieldgroup .button.toggle-smush-advanced.opened+.smush-advanced{display:block}.wpo_smush_image:focus-within label{box-shadow:0 0 4px #0272aa}.wpo_smush_image .wpo_smush_image__input:checked+label{border-color:#0272aa}.uncompressed-images input[type="checkbox"]{position:absolute;opacity:0;width:0;height:0}.uncompressed-images small.red{clear:both;display:block;margin:5px}.smush-actions .wpo_primary_small{display:inline-block;margin:5px}.smush-actions{display:inline-block;width:100%;margin:10px 0}.smush-actions .dashicons.dashicons-yes{font-size:15px;margin:0 5px}.smush-actions img{max-height:25px;max-width:25px}#smush-log-modal{width:100%;height:100%}#log-panel{height:80%;overflow:scroll;margin:2%}#log-panel pre{text-align:left;overflow:auto;height:100%;background:gainsboro}.smush-information{margin-bottom:10px}#smush_stats{text-align:center;margin:0 auto;padding:2%;min-width:350px;font-size:larger}#smush_stats .wpo_smush_stats_cta_btn{clear:both;display:block;text-align:center}#smush_stats .smush_stats_row td:first-child{text-align:left}#smush_stats tr.smush_stats_row td:last-child{text-align:right}#smush_stats #wpo_smush_images_information_container p{padding:10px}#smush-complete-summary .checkmark-circle{width:50px;height:50px;position:relative;display:inline-block;vertical-align:top}#smush-complete-summary .checkmark-circle .background{width:50px;height:50px;border-radius:50%;background:#df6927;position:absolute}#smush-complete-summary .checkmark-circle .checkmark{border-radius:5px}#smush-complete-summary .checkmark-circle .checkmark.draw:after{animation-delay:100ms;animation-duration:1s;animation-timing-function:ease;animation-name:checkmark;transform:scalex(-1) rotate(135deg);animation-fill-mode:forwards}#smush-complete-summary .checkmark-circle .checkmark:after{opacity:1;height:25px;width:12.5px;transform-origin:left top;border-right:5px solid white;border-top:5px solid white;border-radius:2.5px !important;content:'';left:8.3333333333px;top:25px;position:absolute}#smush_stats .wpo_primary_small{text-align:center}#smush-complete-summary #summary-message{margin:15px auto}img#wpo_smush_images_clear_stats_spinner{width:20px;line-height:1;vertical-align:middle}#wpo_smush_images_information_container{padding:10px}#wpo_smush_images_information_wrapper .progress-bar{height:25px;padding:1px;width:350px;margin:10px auto;border-radius:5px}#wpo_smush_images_information_wrapper .progress-bar span{display:inline-block;height:100%;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5) inset;transition:width .4s ease-in-out}#wpo_smush_images_information_wrapper .orange span{background-color:#df6927}#wpo_smush_images_information_wrapper .stripes span{background-size:30px;background-image:linear-gradient(135deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);animation:animate-stripes 3s linear infinite}#smush-metabox-inside-wrapper{display:inline-table;width:100%}#smush-metabox-inside-wrapper h4{margin:2px 0}#smush-metabox-inside-wrapper label{margin-top:5px;clear:left;display:block}#smush-metabox-inside-wrapper .wpo_smush_single_image{display:block}#smush-metabox-inside-wrapper .wpo_smush_single_image.action_button{padding:5px 0}#smush-metabox-inside-wrapper fieldset{margin:10px 0}#smush-metabox-inside-wrapper input[type="radio"]{margin:-4px 4px 0 0}#smush-metabox-inside-wrapper .alignleft{float:left}#smush-metabox-inside-wrapper p#smush_info{margin:20px auto;padding-top:10px;clear:both}#smush-metabox-inside-wrapper .toggle-smush-advanced{cursor:pointer;display:block;clear:both;margin-top:10px;margin-bottom:10px}#smush-metabox-inside-wrapper .toggle-smush-advanced:not(.opened) ~ .smush-advanced{display:none}#smush-metabox-inside-wrapper .toggle-smush-advanced.opened ~ .smush-advanced{display:block !important}#smush-metabox-inside-wrapper .smush-options.custom_compression span{display:block;max-width:30%;clear:both}#smush-metabox-inside-wrapper input#custom_compression_slider{display:block;clear:both;width:100%}#smush-metabox-inside-wrapper .smush-options.custom_compression span.alignleft{float:left}#smush-metabox-inside-wrapper .smush-options.custom_compression span.alignright{float:right;text-align:right}.smush-metabox-dashboard-link{clear:both;padding-top:15px;text-align:right}.media-frame-content .attachment-compat .compat-item,.compat-field-wpo_compress_image{overflow:visible !important}.compat-field-wpo_compress_image{border-top:1px solid #DDD}.compat-field-wpo_compress_image span.dashicons{text-align:left;float:none;min-height:0;padding-top:2px}.compat-field-wpo_compress_image td.field{width:auto;float:none}.compat-field-wpo_compress_image td.field [data-tooltip]{display:none}.compat-field-wpo_compress_image th.label{text-align:left;min-width:0;float:none;margin:0}.compat-field-wpo_compress_image th.label label span{font-weight:500;text-align:left}.wpo_restore_single_image .alignright{float:right}.blockUI.blockMsg.blockPage{z-index:170000 !important;right:0;left:0 !important;margin-right:auto !important;margin-left:auto !important;max-width:90%;cursor:default !important}.blockUI.blockOverlay{cursor:default !important}#smush-metabox-inside-wrapper [data-tooltip],.wpo-fieldgroup [data-tooltip]{position:relative;cursor:pointer;line-height:18px}#smush-metabox-inside-wrapper [data-tooltip]:before,#smush-metabox-inside-wrapper [data-tooltip]:after,.wpo-fieldgroup [data-tooltip]:before,.wpo-fieldgroup [data-tooltip]:after{visibility:hidden;-ms-filter:"alpha(opacity=0)";filter:alpha(opacity=0);opacity:0;pointer-events:none}#smush-metabox-inside-wrapper [data-tooltip]:before,.wpo-fieldgroup [data-tooltip]:before{position:absolute;bottom:150%;left:50%;margin-bottom:5px;margin-left:-140px;padding:12px;width:275px;z-index:9999;border-radius:3px;background-color:#000;background-color:hsla(0,0%,20%,0.95);color:#FFF;content:attr(data-tooltip);text-align:center;font-size:.85rem;font-weight:400;line-height:1.4}#smush-metabox-inside-wrapper [data-tooltip]:before{margin-left:-280px}#smush-metabox-inside-wrapper [data-tooltip]:after,.wpo-fieldgroup [data-tooltip]:after{position:absolute;bottom:150%;left:50%;margin-left:-5px;width:0;border-top:5px solid #000;border-top:5px solid hsla(0,0%,20%,0.9);border-right:5px solid transparent;border-left:5px solid transparent;content:" ";font-size:0;line-height:0}#smush-metabox-inside-wrapper [data-tooltip]:hover:before,#smush-metabox-inside-wrapper [data-tooltip]:hover:after,.wpo-fieldgroup [data-tooltip]:hover:before,.wpo-fieldgroup [data-tooltip]:hover:after,#smush-metabox-inside-wrapper [data-tooltip]:focus:before,#smush-metabox-inside-wrapper [data-tooltip]:focus:after,.wpo-fieldgroup [data-tooltip]:focus:before,.wpo-fieldgroup [data-tooltip]:focus:after{visibility:visible;-ms-filter:"alpha(opacity=100)";filter:alpha(opacity=100);opacity:1}@keyframes checkmark{0%{height:0;width:0;opacity:1}20%{height:0;width:12.5px;opacity:1}40%{height:25px;width:12.5px;opacity:1}100%{height:25px;width:12.5px;opacity:1}}@keyframes animate-stripes{0%{background-position:0 0}100%{background-position:60px 0}}@keyframes animate-stripes{0%{background-position:0 0}100%{background-position:60px 0}}
2
- /*# sourceMappingURL=smush-3-0-16.min.css.map */
 
 
css/smush-3-0-16.min.css.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["css/smush.css"],"names":[],"mappings":"AAAA;;GAEG;AACH;CACC,sBAAsB;CACtB,YAAY;CACZ;;AAED;CACC,iBAAiB;CACjB,iBAAiB;CACjB;;AAED;;GAEG;AACH;CACC,iBAAiB;CACjB;;AAED;CACC,eAAe;CACf;;AAED;CACC,YAAY;CACZ,YAAY;CACZ;;AAED;CACC,YAAY;CACZ;;AAED;CACC,oBAAoB;CACpB;;AAED;CACC,qBAAqB;CACrB,cAAc;CACd,wBAAwB;CACxB,oBAAoB;CACpB;;AAED;CACC,YAAY;CACZ,QAAQ;CACR,mBAAmB;CACnB,aAAa;CACb,mBAAmB;CACnB;;AAED;CACC,mBAAmB;CACnB,WAAW;CACX,qBAAqB;CACrB,WAAW;CACX,4BAA4B;CAC5B;;AAED;CACC,eAAe;CACf,cAAc;CACd,qBAAqB;CACrB,iBAAiB;CACjB;;AAED;CACC,eAAe;CACf,mBAAmB;CACnB,uBAAuB;CACvB,aAAa;CACb,iBAAiB;CACjB,iBAAiB;CACjB,sDAAsD;CACtD;;AAED;CACC,cAAc;CACd,uBAAuB;CACvB,mBAAmB;CACnB,mBAAmB;CACnB,mBAAmB;CACnB,eAAe;CACf;;AAED;CACC,YAAY;CACZ,eAAe;CACf,mBAAmB;CACnB,OAAO;CACP,WAAW;CACX,aAAa;CACb,gCAAgC;CAChC;;AAED;CACC,eAAe;CACf;;AAED;;CAEC,sCAAsC;CACtC;;AAED;CACC,sCAAsC;CACtC;;AAED;CACC,eAAe;CACf;;AAED;;CAEC,sBAAsB;CACtB;;AAED;;CAEC;EACC,2BAA2B;EAC3B,uBAAuB;EACvB;;CAED;EACC,oBAAoB;EACpB,gBAAgB;EAChB;;CAED;;AAED;;GAEG;AACH;CACC,cAAc;CACd,YAAY;CACZ;;AAED;CACC,mBAAmB;CACnB,mBAAmB;CACnB,cAAc;CACd;;AAED;CACC,eAAe;CACf,sBAAsB;CACtB,gBAAgB;CAChB,kBAAkB;CAClB,kBAAkB;CAClB,oBAAoB;CACpB,YAAY;CACZ,eAAe;CACf;;AAED;CACC,aAAa;CACb,oBAAoB;CACpB;;AAED;CACC,+BAA+B;CAC/B;;AAED;CACC,2BAA2B;CAC3B,sBAAsB;CACtB,mBAAmB;CACnB,iBAAiB;CACjB,iCAAiC;CACjC,oBAAoB;CACpB;;AAED;CACC,iBAAiB;CACjB,gBAAgB;CAChB,gBAAgB;CAChB;;AAED;CACC,gBAAgB;CAChB,iBAAiB;CACjB;;AAED;CACC,mBAAmB;CACnB,WAAW;CACX;;AAED;CACC,mBAAmB;CACnB,aAAa;CACb;;AAED;CACC,aAAa;CACb,eAAe;CACf,YAAY;CACZ;;AAED;CACC,eAAe;CACf,YAAY;CACZ,iBAAiB;CACjB,eAAe;CACf,kBAAkB;CAClB,mBAAmB;CACnB,gBAAgB;CAChB;;AAED;CACC,eAAe;CACf;;AAED;CACC,aAAa;CACb;;AAED;CACC,YAAY;CACZ,cAAc;CACd;;AAED;CACC,gBAAgB;CAChB,iBAAiB;CACjB,mBAAmB;CACnB,SAAS;CACT;;AAED;CACC,mBAAmB;CACnB,aAAa;CACb;;AAED;CACC,qBAAc;CAAd,cAAc;CACd,uBAAoB;KAApB,oBAAoB;CACpB,kBAAkB;CAClB;;AAED;CACC,sBAAsB;CACtB,aAAa;CACb,0BAA0B;CAC1B,mBAAmB;CACnB,iBAAiB;CACjB,mBAAmB;CACnB;;AAED;CACC,YAAY;CACZ,WAAW;CACX,YAAY;CACZ,eAAe;CACf,mBAAmB;CACnB,OAAO;CACP,WAAW;CACX,8CAA8C;CAC9C,gCAAgC;CAChC,8BAA8B;CAC9B,oBAAoB;CACpB;;AAED;CACC,YAAY;CACZ,WAAW;CACX,YAAY;CACZ,eAAe;CACf,mBAAmB;CACnB,OAAO;CACP,YAAY;CACZ,6CAA6C;CAC7C,+BAA+B;CAC/B,iCAAiC;CACjC,oBAAoB;CACpB;;AAED;CACC,iBAAiB;CACjB,kBAAkB;CAClB;;AAED;;CAEC;EACC,aAAa;EACb,YAAY;EACZ;;CAED;EACC,WAAW;EACX,YAAY;EACZ,YAAY;EACZ;;CAED;EACC,2BAAuB;MAAvB,uBAAuB;EACvB;;CAED;EACC,YAAY;EACZ;;CAED;EACC,eAAe;EACf,YAAY;EACZ;;CAED;EACC,QAAQ;EACR,+CAA+C;EAC/C;;CAED;EACC,YAAY;EACZ,WAAW;EACX,iDAAiD;EACjD;;CAED;;AAED;;GAEG;;AAEH;CACC,YAAY;CACZ;;AAED;CACC,aAAa;CACb;;AAED;CACC,YAAY;CACZ;;AAED;;CAEC,gBAAgB;CAChB;;AAED;CACC,cAAc;CACd,iBAAiB;CACjB,gBAAgB;CAChB;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,gBAAgB;CAChB,2BAA2B;CAC3B,eAAe;CACf;;AAED;CACC,eAAe;CACf,yBAAyB;CACzB,mBAAmB;CACnB,oBAAoB;CACpB,mBAAmB;CACnB,oBAAoB;CACpB,mBAAmB;CACnB,sBAAsB;CACtB;;AAED;CACC,sBAAsB;CACtB,gBAAgB;CAChB,aAAa;CACb,uBAAuB;CACvB,YAAY;CACZ,oBAAoB;CACpB;;AAED;CACC,oBAAoB;CACpB,WAAW;CACX,mBAAmB;CACnB,mBAAmB;CACnB;;AAED;;CAEC,wBAAwB;CACxB;;AAED;CACC,sBAAsB;CACtB;;AAED;CACC,cAAc;CACd;;AAED;CACC,cAAc;CACd;;AAED;CACC,sBAAsB;CACtB;;AAED;CACC,YAAY;CACZ,2BAA2B;CAC3B,YAAY;CACZ,mBAAmB;CACnB,UAAU;CACV,QAAQ;CACR;;AAED;CACC,0BAA0B;CAC1B;;AAED;CACC,cAAc;CACd;;AAED;CACC,eAAe;CACf;;AAED;CACC,4BAA4B;CAC5B;;AAED;CACC,sBAAsB;CACtB;;AAED;CACC,mBAAmB;CACnB,WAAW;CACX,SAAS;CACT,UAAU;CACV;;AAED;CACC,YAAY;CACZ,eAAe;CACf,YAAY;CACZ;;AAED;CACC,sBAAsB;CACtB,YAAY;CACZ;;AAED;CACC,sBAAsB;CACtB,YAAY;CACZ,eAAe;CACf;;AAED;CACC,gBAAgB;CAChB,cAAc;CACd;;AAED;CACC,iBAAiB;CACjB,gBAAgB;CAChB;;AAED;;GAEG;;AAEH;CACC,YAAY;CACZ,aAAa;CACb;;AAED;CACC,YAAY;CACZ,iBAAiB;CACjB,WAAW;CACX;;AAED;CACC,iBAAiB;CACjB,eAAe;CACf,aAAa;CACb,sBAAsB;CACtB;;AAED;CACC,oBAAoB;CACpB;;AAED;;GAEG;;AAEH;CACC,mBAAmB;CACnB,eAAe;CACf,YAAY;CACZ,iBAAiB;CACjB,kBAAkB;CAClB;;AAED;CACC,YAAY;CACZ,eAAe;CACf,mBAAmB;CACnB;;AAED;CACC,iBAAiB;CACjB;;AAED;CACC,kBAAkB;CAClB;;AAED;CACC,cAAc;CACd;;AAED;CACC,YAAY;CACZ,aAAa;CACb,mBAAmB;CACnB,sBAAsB;CACtB,oBAAoB;CACpB;;AAED;CACC,YAAY;CACZ,aAAa;CACb,mBAAmB;CACnB,oBAAoB;CACpB,mBAAmB;CACnB;;AAED;CACC,mBAAmB;CACnB;;AAED;CACC,uBAAuB;CACvB,uBAAuB;CACvB,gCAAgC;CAChC,0BAA0B;CAC1B,qCAAqC;CACrC,8BAA8B;CAC9B;;AAED;CACC,WAAW;CACX,aAAa;CACb,cAAc;CACd,2BAA2B;CAC3B,8BAA8B;CAC9B,4BAA4B;CAC5B,gCAAgC;CAChC,YAAY;CACZ,qBAAqB;CACrB,UAAU;CACV,mBAAmB;CACnB;;AAED;CACC,mBAAmB;CACnB;;AAED;CACC,kBAAkB;CAClB;;AAED;CACC,YAAY;CACZ,eAAe;CACf,uBAAuB;CACvB;;AAED,2BAA2B;;AAE3B;CACC,cAAc;CACd;;AAED;CACC,aAAa;CACb,aAAa;CACb,aAAa;CACb,kBAAkB;CAClB,mBAAmB;CACnB;;AAED;CACC,sBAAsB;CACtB,aAAa;CACb,mBAAmB;CACnB,kDAAkD;CAClD,kCAAkC;CAClC;;AAED;CACC,0BAA0B;CAC1B;;AAED;CACC,sBAAsB;CACtB,oMAAoM;CACpM,8CAA8C;CAC9C;;AAED;;GAEG;;AAEH;CACC,sBAAsB;CACtB,YAAY;CACZ;;AAED;CACC,cAAc;CACd;;AAED;CACC,gBAAgB;CAChB,YAAY;CACZ,eAAe;CACf;;AAED;CACC,eAAe;CACf;;AAED;CACC,eAAe;CACf;;AAED;CACC,eAAe;CACf;;AAED;CACC,qBAAqB;CACrB;;AAED;CACC,YAAY;CACZ;;AAED;CACC,kBAAkB;CAClB,kBAAkB;CAClB,YAAY;CACZ;;AAED;CACC,gBAAgB;CAChB,eAAe;CACf,YAAY;CACZ,iBAAiB;CACjB,oBAAoB;CACpB;;AAED;CACC,cAAc;CACd;;AAED;CACC,0BAA0B;CAC1B;;AAED;CACC,eAAe;CACf,eAAe;CACf,YAAY;CACZ;;AAED;CACC,eAAe;CACf,YAAY;CACZ,YAAY;CACZ;;AAED;CACC,YAAY;CACZ;;AAED;CACC,aAAa;CACb,kBAAkB;CAClB;;AAED;CACC,YAAY;CACZ,kBAAkB;CAClB,kBAAkB;CAClB;;AAED;;CAEC,6BAA6B;CAC7B;;AAED;CACC,2BAA2B;CAC3B;;AAED;CACC,iBAAiB;CACjB,YAAY;CACZ,cAAc;CACd,iBAAiB;CACjB;;AAED;CACC,YAAY;CACZ,YAAY;CACZ;;AAED;CACC,cAAc;CACd;;AAED;CACC,iBAAiB;CACjB,aAAa;CACb,YAAY;CACZ,UAAU;CACV;;AAED;CACC,iBAAiB;CACjB,iBAAiB;CACjB;;AAED,+CAA+C;AAC/C;CACC,aAAa;CACb;;AAED;;GAEG;AACH;CACC,2BAA2B;CAC3B,SAAS;CACT,mBAAmB;CACnB,8BAA8B;CAC9B,6BAA6B;CAC7B,eAAe;CACf,2BAA2B;CAC3B;;AAED;CACC,2BAA2B;CAC3B;;AAED;;GAEG;;AAEH,4DAA4D;AAC5D;;CAEC,mBAAmB;CACnB,gBAAgB;CAChB,kBAAkB;CAClB;;AAED,yCAAyC;AACzC;;;;CAIC,mBAAmB;CACnB,iEAAiE;CACjE,4DAA4D;CAC5D,WAAW;CACX,qBAAqB;CACrB;;AAED,wCAAwC;AACxC;;CAEC,mBAAmB;CACnB,aAAa;CACb,UAAU;CACV,mBAAmB;CACnB,oBAAoB;CACpB,cAAc;CACd,aAAa;CACb,cAAc;CACd,mBAAmB;CACnB,uBAAuB;CACvB,yCAAyC;CACzC,YAAY;CACZ,4BAA4B;CAC5B,mBAAmB;CACnB,kBAAkB;CAClB,iBAAiB;CACjB,iBAAiB;CACjB;;AAED;CACC,oBAAoB;CACpB;;AAED,6DAA6D;AAC7D;;CAEC,mBAAmB;CACnB,aAAa;CACb,UAAU;CACV,kBAAkB;CAClB,SAAS;CACT,2BAA2B;CAC3B,4CAA4C;CAC5C,oCAAoC;CACpC,mCAAmC;CACnC,aAAa;CACb,aAAa;CACb,eAAe;CACf;;AAED,mCAAmC;AACnC;;;;;;;;CAQC,oBAAoB;CACpB,mEAAmE;CACnE,8DAA8D;CAC9D,WAAW;CACX;;AAED;;GAEG;;AAEH;;CAEC;EACC,UAAU;EACV,SAAS;EACT,WAAW;EACX;;CAED;EACC,UAAU;EACV,cAAc;EACd,WAAW;EACX;;CAED;EACC,aAAa;EACb,cAAc;EACd,WAAW;EACX;;CAED;EACC,aAAa;EACb,cAAc;EACd,WAAW;EACX;;CAED;;AAED;;CAEC;EACC,yBAAyB;EACzB;;CAED;EACC,4BAA4B;EAC5B;;CAED;;AAED;;CAEC;EACC,yBAAyB;EACzB;;CAED;EACC,4BAA4B;EAC5B;;CAED","file":"smush-3-0-16.min.css","sourcesContent":["/**\n * Autosmush\n */\n.wpo-fieldgroup .autosmush {\n\tdisplay: inline-block;\n\twidth: 100%;\n}\n\n.wpo-fieldgroup .autosmush h3 {\n\tfont-size: 1.2em;\n\tmargin: 3px 18px;\n}\n\n/**\n * Compression Server\n */\n.wpo-fieldgroup .compression_server div {\n\tmax-width: 300px;\n}\n\n.wpo-fieldgroup .compression_server h2 {\n\tmargin: 10px 0;\n}\n\n.wpo-fieldgroup .compression_server h3 {\n\tclear: both;\n\twidth: 100%;\n}\n\n.wpo-fieldgroup .compression_server p {\n\tmargin: 1px;\n}\n\n.wpo-fieldgroup .compression_server p:last-of-type {\n\tmargin-bottom: 10px;\n}\n\n.wpo-fieldgroup .compression_server {\n\tdisplay: -ms-flexbox;\n\tdisplay: flex;\n\t-ms-flex-flow: row wrap;\n\tflex-flow: row wrap;\n}\n\n.wpo-fieldgroup .compression_server > div {\n\t-ms-flex: 1;\n\tflex: 1;\n\tmargin-right: 10px;\n\theight: 100%;\n\tposition: relative;\n}\n\n.wpo-fieldgroup .compression_server input[type=\"radio\"] {\n\tposition: absolute;\n\tz-index: 1;\n\ttop: calc(50% + 2px);\n\tleft: 20px;\n\ttransform: translatey(-50%);\n}\n\n.wpo-fieldgroup .compression_server input[type=\"radio\"] ~ label h4 {\n\tcolor: #23282D;\n\tmargin-top: 0;\n\tmargin-bottom: 0.9em;\n\tfont-size: 1.2em;\n}\n\n.wpo-fieldgroup .compression_server label {\n\tdisplay: block;\n\tposition: relative;\n\tbox-sizing: border-box;\n\theight: 100%;\n\tbackground: #FFF;\n\ttext-align: left;\n\tbox-shadow: 0px 3px 10px -2px hsla(150, 5%, 65%, 0.5);\n}\n\n.wpo-fieldgroup .compression_server input[type=\"radio\"] + label {\n\tpadding: 20px;\n\tborder: 2px solid #FFF;\n\tpadding-left: 65px;\n\tposition: relative;\n\tborder-radius: 5px;\n\tcolor: #82868B;\n}\n\n.wpo-fieldgroup .compression_server input[type=\"radio\"] + label::before {\n\tcontent: '';\n\tdisplay: block;\n\tposition: absolute;\n\ttop: 0;\n\tleft: 52px;\n\theight: 100%;\n\tborder-right: 1px solid #EDEFF0;\n}\n\n.wpo-fieldgroup .save-options {\n\tmargin: 10px 0;\n}\n\n.wpo-fieldgroup .compression_server input[type=\"radio\"]:focus + label,\n.wpo-fieldgroup .compression_server input[type=\"radio\"] + label:hover {\n\tborder-color: rgba(0, 134, 184, 0.38);\n}\n\n.wpo-fieldgroup .compression_server input[type=\"radio\"]:focus + label {\n\tbox-shadow: 0px 3px 10px -2px #5B9DD9;\n}\n\n.wpo-fieldgroup .compression_server input[type=\"radio\"]:focus + label h4 {\n\tcolor: #0086B9;\n}\n\n.wpo-fieldgroup .compression_server input[type=\"radio\"]:checked + label,\n.wpo-fieldgroup .compression_server input[type=\"radio\"]:checked + label:hover {\n\tborder-color: #0086B9;\n}\n\n@media only screen and (max-width: 700px) {\n\n\t.wpo-fieldgroup .compression_server {\n\t\t-ms-flex-direction: column;\n\t\tflex-direction: column;\n\t}\n\n\t.wpo-fieldgroup .compression_server > div {\n\t\tmargin-bottom: 15px;\n\t\tmax-width: 100%;\n\t}\n\n}\n\n/**\n * Compression Options\n */\n.wpo-fieldgroup h4 {\n\tmargin: 1em 0;\n\twidth: 100%;\n}\n\n.wpo-fieldgroup .image_quality input[type=radio] {\n\tposition: absolute;\n\tvisibility: hidden;\n\tdisplay: none;\n}\n\n.wpo-fieldgroup .image_quality label {\n\tcolor: #23282D;\n\tdisplay: inline-block;\n\tcursor: pointer;\n\tfont-weight: bold;\n\tpadding: 5px 20px;\n\tbackground: #F9F9F9;\n\tfloat: left;\n\tmargin: 0 .5px;\n}\n\n.wpo-fieldgroup .image_quality input[type=radio]:checked + label {\n\tcolor: white;\n\tbackground: #0088B9;\n}\n\n.wpo-fieldgroup .image_quality label + .wpo-fieldgroup .image_quality input[type=radio] + label {\n\tborder-left: solid 3px #675F6B;\n}\n\n.wpo-fieldgroup .image_quality.radio-group {\n\tborder: solid .5px #C4C4C4;\n\tdisplay: inline-block;\n\tborder-radius: 5px;\n\toverflow: hidden;\n\tborder-bottom: solid 2px #C4C4C4;\n\tbackground: #C4C4C4;\n}\n\n.wpo-fieldgroup .image_options input {\n\tmin-height: 16px;\n\tmin-width: 16px;\n\tmargin: 3px 2px;\n}\n\nimg#wpo_smush_images_save_options_spinner {\n\tmax-width: 20px;\n\tmax-height: 20px;\n}\n\nspan#wpo_smush_images_save_options_fail {\n\tfont-size: inherit;\n\tcolor: red;\n}\n\nspan#wpo_smush_images_save_options_done {\n\tfont-size: inherit;\n\tcolor: green;\n}\n\n#smush-complete-summary span.clearfix {\n\theight: 10px;\n\tdisplay: block;\n\tclear: both;\n}\n\nspan.close {\n\tdisplay: block;\n\tclear: both;\n\ttext-align: left;\n\tcolor: #DF6927;\n\tborder: 2px solid;\n\tborder-radius: 50%;\n\tcursor: pointer;\n}\n\n.modal-message-text {\n\tmargin: 0 25px;\n}\n\n.smush-options.custom_compression {\n\tmargin: 10px;\n}\n\n#smush-backup-delete-days {\n\twidth: 50px;\n\tmargin: 0 8px;\n}\n\nimg#wpo_smush_delete_backup_spinner {\n\tmax-width: 20px;\n\tmax-height: 20px;\n\tposition: relative;\n\ttop: 4px;\n}\n\nspan#wpo_smush_delete_backup_done {\n\tfont-size: inherit;\n\tcolor: green;\n}\n\n.wpo-fieldgroup .smush-options.custom_compression {\n\tdisplay: flex;\n\talign-items: center;\n\tmargin-left: 24px;\n}\n\n.wpo-fieldgroup .smush-options.custom_compression > span {\n\tdisplay: inline-block;\n\tpadding: 6px;\n\tborder: 1px solid #CFD2D4;\n\tborder-radius: 4px;\n\tfont-size: 0.9em;\n\tposition: relative;\n}\n\n.wpo-fieldgroup .smush-options.custom_compression > span.slider-start::after {\n\tcontent: '';\n\twidth: 6px;\n\theight: 6px;\n\tdisplay: block;\n\tposition: absolute;\n\ttop: 0;\n\tleft: 100%;\n\ttransform: translate(-3px, 8px) rotate(45deg);\n\tborder-right: 1px solid #CFD2D4;\n\tborder-top: 1px solid #CFD2D4;\n\tbackground: #EDEFF0;\n}\n\n.wpo-fieldgroup .smush-options.custom_compression > span.slider-end::before {\n\tcontent: '';\n\twidth: 6px;\n\theight: 6px;\n\tdisplay: block;\n\tposition: absolute;\n\ttop: 0;\n\tright: 100%;\n\ttransform: translate(3px, 8px) rotate(45deg);\n\tborder-left: 1px solid #CFD2D4;\n\tborder-bottom: 1px solid #CFD2D4;\n\tbackground: #EDEFF0;\n}\n\n.wpo-fieldgroup .smush-options.custom_compression > input {\n\tmargin-left: 8px;\n\tmargin-right: 8px;\n}\n\n@media screen and (max-width: 782px) {\n\n\t.wpo-fieldgroup input[type=\"radio\"] {\n\t\theight: 16px;\n\t\twidth: 16px;\n\t}\n\n\t.wpo-fieldgroup\tinput[type=\"radio\"]:checked:before {\n\t\twidth: 6px;\n\t\theight: 6px;\n\t\tmargin: 4px;\n\t}\n\n\t.wpo-fieldgroup .smush-options.custom_compression {\n\t\tflex-direction: column;\n\t}\n\n\t.wpo-fieldgroup .smush-options.custom_compression > input {\n\t\twidth: 100%;\n\t}\n\n\t.wpo-fieldgroup .smush-options.custom_compression > span {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t}\n\n\t.wpo-fieldgroup .smush-options.custom_compression > span.slider-start::after {\n\t\tleft: 0;\n\t\ttransform: translate(7px, 22px) rotate(135deg);\n\t}\n\n\t.wpo-fieldgroup .smush-options.custom_compression > span.slider-end::before {\n\t\tright: auto;\n\t\tleft: 100%;\n\t\ttransform: translate(-14px, -5px) rotate(135deg);\n\t}\n\n}\n\n/**\n * Uncompressed images\n */\n\n#wpo_smush_settings .align-left {\n\tfloat: left;\n}\n\n#wpo_smush_settings .align-right {\n\tfloat: right;\n}\n\n.wpo-fieldgroup .wpo_smush_images_buttons_wrap {\n\twidth: 100%;\n}\n\n.wpo-fieldgroup .smush-refresh-icon,\n.wpo-fieldgroup .smush-select-actions {\n\tfont-size: 15px;\n}\n\n.wpo-fieldgroup img.wpo_smush_images_loader {\n\tdisplay: none;\n\tmin-height: 20px;\n\tmin-width: 20px;\n}\n\n.wpo-fieldgroup .dashicons.dashicons-image-rotate, {\n\tfont-size: 15px;\n}\n\n.wpo-fieldgroup .toggle-smush-advanced {\n\tcursor: pointer;\n\ttext-decoration: underline;\n\tcolor: #0088BC;\n}\n\n.wpo-fieldgroup .button.toggle-smush-advanced {\n\tdisplay: block;\n\twidth: calc(100% + 40px);\n\tmargin-left: -20px;\n\tmargin-right: -20px;\n\tpadding-left: 20px;\n\tpadding-right: 20px;\n\tposition: relative;\n\ttext-decoration: none;\n}\n\n.wpo-fieldgroup .button.toggle-smush-advanced span.dashicons {\n\ttext-decoration: none;\n\tfont-size: 16px;\n\theight: 16px;\n\tvertical-align: middle;\n\tcolor: #444;\n\ttransition: .2s all;\n}\n\n.wpo-fieldgroup .toggle-smush-advanced span.text {\n\tbackground: #F2F4F4;\n\tz-index: 1;\n\tposition: relative;\n\tpadding-right: 5px;\n}\n\n.wpo-fieldgroup .button.toggle-smush-advanced:hover,\n.wpo-fieldgroup .button.toggle-smush-advanced:focus {\n\tbackground: transparent;\n}\n\n.wpo-fieldgroup .button.toggle-smush-advanced .toggle-smush-advanced__text-show {\n\tdisplay: inline-block;\n}\n\n.wpo-fieldgroup .button.toggle-smush-advanced .toggle-smush-advanced__text-hide {\n\tdisplay: none;\n}\n\n.wpo-fieldgroup .button.toggle-smush-advanced.opened .toggle-smush-advanced__text-show {\n\tdisplay: none;\n}\n\n.wpo-fieldgroup .button.toggle-smush-advanced.opened .toggle-smush-advanced__text-hide {\n\tdisplay: inline-block;\n}\n\n.wpo-fieldgroup .button.toggle-smush-advanced.opened::before {\n\tcontent: '';\n\tborder-top: 1px solid #CCC;\n\twidth: 100%;\n\tposition: absolute;\n\ttop: 16px;\n\tleft: 0;\n}\n\n.wpo-fieldgroup .button.toggle-smush-advanced.opened span.dashicons {\n\ttransform: rotate(180deg);\n}\n\n.wpo-fieldgroup .smush-advanced {\n\tdisplay: none;\n}\n\n.wpo-fieldgroup .button.toggle-smush-advanced.opened + .smush-advanced {\n\tdisplay: block;\n}\n\n.wpo_smush_image:focus-within label {\n\tbox-shadow: 0 0 4px #0272AA;\n}\n\n.wpo_smush_image .wpo_smush_image__input:checked + label {\n\tborder-color: #0272AA;\n}\n\n.uncompressed-images input[type=\"checkbox\"] {\n\tposition: absolute;\n\topacity: 0;\n\twidth: 0;\n\theight: 0;\n}\n\n.uncompressed-images small.red {\n\tclear: both;\n\tdisplay: block;\n\tmargin: 5px;\n}\n\n.smush-actions .wpo_primary_small {\n\tdisplay: inline-block;\n\tmargin: 5px;\n}\n\n.smush-actions {\n\tdisplay: inline-block;\n\twidth: 100%;\n\tmargin: 10px 0;\n}\n\n.smush-actions .dashicons.dashicons-yes {\n\tfont-size: 15px;\n\tmargin: 0 5px;\n}\n\n.smush-actions img {\n\tmax-height: 25px;\n\tmax-width: 25px;\n}\n\n/**\n * Log and panels\n */\n\n#smush-log-modal {\n\twidth: 100%;\n\theight: 100%;\n}\n\n#log-panel {\n\theight: 80%;\n\toverflow: scroll;\n\tmargin: 2%;\n}\n\n#log-panel pre {\n\ttext-align: left;\n\toverflow: auto;\n\theight: 100%;\n\tbackground: gainsboro;\n}\n\n.smush-information {\n\tmargin-bottom: 10px;\n}\n\n/**\n * Smush modal progress box & related styling\n */\n\n#smush_stats {\n\ttext-align: center;\n\tmargin: 0 auto;\n\tpadding: 2%;\n\tmin-width: 350px;\n\tfont-size: larger;\n}\n\n#smush_stats .wpo_smush_stats_cta_btn {\n\tclear: both;\n\tdisplay: block;\n\ttext-align: center;\n}\n\n#smush_stats .smush_stats_row td:first-child {\n\ttext-align: left;\n}\n\n#smush_stats tr.smush_stats_row td:last-child {\n\ttext-align: right;\n}\n\n#smush_stats #wpo_smush_images_information_container p {\n\tpadding: 10px;\n}\n\n#smush-complete-summary .checkmark-circle {\n\twidth: 50px;\n\theight: 50px;\n\tposition: relative;\n\tdisplay: inline-block;\n\tvertical-align: top;\n}\n\n#smush-complete-summary .checkmark-circle .background {\n\twidth: 50px;\n\theight: 50px;\n\tborder-radius: 50%;\n\tbackground: #DF6927;\n\tposition: absolute;\n}\n\n#smush-complete-summary .checkmark-circle .checkmark {\n\tborder-radius: 5px;\n}\n\n#smush-complete-summary .checkmark-circle .checkmark.draw:after {\n\tanimation-delay: 100ms;\n\tanimation-duration: 1s;\n\tanimation-timing-function: ease;\n\tanimation-name: checkmark;\n\ttransform: scalex(-1) rotate(135deg);\n\tanimation-fill-mode: forwards;\n}\n\n#smush-complete-summary .checkmark-circle .checkmark:after {\n\topacity: 1;\n\theight: 25px;\n\twidth: 12.5px;\n\ttransform-origin: left top;\n\tborder-right: 5px solid white;\n\tborder-top: 5px solid white;\n\tborder-radius: 2.5px !important;\n\tcontent: '';\n\tleft: 8.3333333333px;\n\ttop: 25px;\n\tposition: absolute;\n}\n\n#smush_stats .wpo_primary_small {\n\ttext-align: center;\n}\n\n#smush-complete-summary #summary-message {\n\tmargin: 15px auto;\n}\n\nimg#wpo_smush_images_clear_stats_spinner {\n\twidth: 20px;\n\tline-height: 1;\n\tvertical-align: middle;\n}\n\n/* Animated progress bar */\n\n#wpo_smush_images_information_container {\n\tpadding: 10px;\n}\n\n#wpo_smush_images_information_wrapper .progress-bar {\n\theight: 25px;\n\tpadding: 1px;\n\twidth: 350px;\n\tmargin: 10px auto;\n\tborder-radius: 5px;\n}\n\n#wpo_smush_images_information_wrapper .progress-bar span {\n\tdisplay: inline-block;\n\theight: 100%;\n\tborder-radius: 3px;\n\tbox-shadow: 0 1px 0 rgba(255, 255, 255, .5) inset;\n\ttransition: width .4s ease-in-out;\n}\n\n#wpo_smush_images_information_wrapper .orange span {\n\tbackground-color: #DF6927;\n}\n\n#wpo_smush_images_information_wrapper .stripes span {\n\tbackground-size: 30px;\n\tbackground-image: linear-gradient(135deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n\tanimation: animate-stripes 3s linear infinite;\n}\n\n/**\n * Smush metabox\n */\n\n#smush-metabox-inside-wrapper {\n\tdisplay: inline-table;\n\twidth: 100%;\n}\n\n#smush-metabox-inside-wrapper h4 {\n\tmargin: 2px 0;\n}\n\n#smush-metabox-inside-wrapper label {\n\tmargin-top: 5px;\n\tclear: left;\n\tdisplay: block;\n}\n\n#smush-metabox-inside-wrapper .wpo_smush_single_image {\n\tdisplay: block;\n}\n\n#smush-metabox-inside-wrapper .wpo_smush_single_image.action_button {\n\tpadding: 5px 0;\n}\n\n#smush-metabox-inside-wrapper fieldset {\n\tmargin: 10px 0;\n}\n\n#smush-metabox-inside-wrapper input[type=\"radio\"] {\n\tmargin: -4px 4px 0 0;\n}\n\n#smush-metabox-inside-wrapper .alignleft {\n\tfloat: left;\n}\n\n#smush-metabox-inside-wrapper p#smush_info {\n\tmargin: 20px auto;\n\tpadding-top: 10px;\n\tclear: both;\n}\n\n#smush-metabox-inside-wrapper .toggle-smush-advanced {\n\tcursor: pointer;\n\tdisplay: block;\n\tclear: both;\n\tmargin-top: 10px;\n\tmargin-bottom: 10px;\n}\n\n#smush-metabox-inside-wrapper .toggle-smush-advanced:not(.opened) ~ .smush-advanced {\n\tdisplay: none;\n}\n\n#smush-metabox-inside-wrapper .toggle-smush-advanced.opened ~ .smush-advanced {\n\tdisplay: block !important;\n}\n\n#smush-metabox-inside-wrapper .smush-options.custom_compression span {\n\tdisplay: block;\n\tmax-width: 30%;\n\tclear: both;\n}\n\n#smush-metabox-inside-wrapper input#custom_compression_slider {\n\tdisplay: block;\n\tclear: both;\n\twidth: 100%;\n}\n\n#smush-metabox-inside-wrapper .smush-options.custom_compression span.alignleft {\n\tfloat: left;\n}\n\n#smush-metabox-inside-wrapper .smush-options.custom_compression span.alignright {\n\tfloat: right;\n\ttext-align: right;\n}\n\n.smush-metabox-dashboard-link {\n\tclear: both;\n\tpadding-top: 15px;\n\ttext-align: right;\n}\n\n.media-frame-content .attachment-compat .compat-item,\n.compat-field-wpo_compress_image {\n\toverflow: visible !important;\n}\n\n.compat-field-wpo_compress_image {\n\tborder-top: 1px solid #DDD;\n}\n\n.compat-field-wpo_compress_image span.dashicons {\n\ttext-align: left;\n\tfloat: none;\n\tmin-height: 0;\n\tpadding-top: 2px;\n}\n\n.compat-field-wpo_compress_image td.field {\n\twidth: auto;\n\tfloat: none;\n}\n\n.compat-field-wpo_compress_image td.field [data-tooltip] {\n\tdisplay: none;\n}\n\n.compat-field-wpo_compress_image th.label {\n\ttext-align: left;\n\tmin-width: 0;\n\tfloat: none;\n\tmargin: 0;\n}\n\n.compat-field-wpo_compress_image th.label label span {\n\tfont-weight: 500;\n\ttext-align: left;\n}\n\n/* fix for elementor restore button position */\n.wpo_restore_single_image .alignright {\n\tfloat: right;\n}\n\n/**\n * Force fix the modals\n */\n.blockUI.blockMsg.blockPage {\n\tz-index: 170000 !important;\n\tright: 0;\n\tleft: 0 !important;\n\tmargin-right: auto !important;\n\tmargin-left: auto !important;\n\tmax-width: 90%;\n\tcursor: default !important;\n}\n\n.blockUI.blockOverlay {\n\tcursor: default !important;\n}\n\n/**\n * Tooltip Styles\n */\n\n/* Add this attribute to the element that needs a tooltip */\n#smush-metabox-inside-wrapper [data-tooltip],\n.wpo-fieldgroup [data-tooltip] {\n\tposition: relative;\n\tcursor: pointer;\n\tline-height: 18px;\n}\n\n/* Hide the tooltip content by default */\n#smush-metabox-inside-wrapper [data-tooltip]:before,\n#smush-metabox-inside-wrapper [data-tooltip]:after,\n.wpo-fieldgroup [data-tooltip]:before,\n.wpo-fieldgroup [data-tooltip]:after {\n\tvisibility: hidden;\n\t-ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n\tfilter: progid: DXImageTransform.Microsoft.Alpha(Opacity=0);\n\topacity: 0;\n\tpointer-events: none;\n}\n\n/* Position tooltip above the element */\n#smush-metabox-inside-wrapper [data-tooltip]:before,\n.wpo-fieldgroup [data-tooltip]:before {\n\tposition: absolute;\n\tbottom: 150%;\n\tleft: 50%;\n\tmargin-bottom: 5px;\n\tmargin-left: -140px;\n\tpadding: 12px;\n\twidth: 275px;\n\tz-index: 9999;\n\tborder-radius: 3px;\n\tbackground-color: #000;\n\tbackground-color: hsla(0, 0%, 20%, 0.95);\n\tcolor: #FFF;\n\tcontent: attr(data-tooltip);\n\ttext-align: center;\n\tfont-size: .85rem;\n\tfont-weight: 400;\n\tline-height: 1.4;\n}\n\n#smush-metabox-inside-wrapper [data-tooltip]:before {\n\tmargin-left: -280px;\n}\n\n/* Triangle hack to make tooltip look like a speech bubble */\n#smush-metabox-inside-wrapper [data-tooltip]:after,\n.wpo-fieldgroup [data-tooltip]:after {\n\tposition: absolute;\n\tbottom: 150%;\n\tleft: 50%;\n\tmargin-left: -5px;\n\twidth: 0;\n\tborder-top: 5px solid #000;\n\tborder-top: 5px solid hsla(0, 0%, 20%, 0.9);\n\tborder-right: 5px solid transparent;\n\tborder-left: 5px solid transparent;\n\tcontent: \" \";\n\tfont-size: 0;\n\tline-height: 0;\n}\n\n/* Show tooltip content on hover */\n#smush-metabox-inside-wrapper [data-tooltip]:hover:before,\n#smush-metabox-inside-wrapper [data-tooltip]:hover:after,\n.wpo-fieldgroup [data-tooltip]:hover:before,\n.wpo-fieldgroup [data-tooltip]:hover:after,\n#smush-metabox-inside-wrapper [data-tooltip]:focus:before,\n#smush-metabox-inside-wrapper [data-tooltip]:focus:after,\n.wpo-fieldgroup [data-tooltip]:focus:before,\n.wpo-fieldgroup [data-tooltip]:focus:after {\n\tvisibility: visible;\n\t-ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)\";\n\tfilter: progid: DXImageTransform.Microsoft.Alpha(Opacity=100);\n\topacity: 1;\n}\n\n/**\n * Animation needed for smush\n */\n\n@keyframes checkmark {\n\n\t0% {\n\t\theight: 0;\n\t\twidth: 0;\n\t\topacity: 1;\n\t}\n\n\t20% {\n\t\theight: 0;\n\t\twidth: 12.5px;\n\t\topacity: 1;\n\t}\n\n\t40% {\n\t\theight: 25px;\n\t\twidth: 12.5px;\n\t\topacity: 1;\n\t}\n\n\t100% {\n\t\theight: 25px;\n\t\twidth: 12.5px;\n\t\topacity: 1;\n\t}\n\n}\n\n@keyframes animate-stripes {\n\n\t0% {\n\t\tbackground-position: 0 0;\n\t}\n\n\t100% {\n\t\tbackground-position: 60px 0;\n\t}\n\n}\n\n@keyframes animate-stripes {\n\n\t0% {\n\t\tbackground-position: 0 0;\n\t}\n\n\t100% {\n\t\tbackground-position: 60px 0;\n\t}\n\n}\n"]}
 
css/smush-3-0-18.min.css ADDED
@@ -0,0 +1,2 @@
 
 
1
+ .wpo-fieldgroup .autosmush{display:inline-block;width:100%}.wpo-fieldgroup .autosmush h3{font-size:1.2em;margin:3px 18px}.wpo-fieldgroup .compression_server div{max-width:300px}.wpo-fieldgroup .compression_server h2{margin:10px 0}.wpo-fieldgroup .compression_server h3{clear:both;width:100%}.wpo-fieldgroup .compression_server p{margin:1px}.wpo-fieldgroup .compression_server p:last-of-type{margin-bottom:10px}.wpo-fieldgroup .compression_server{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap}.wpo-fieldgroup .compression_server>div{-ms-flex:1;flex:1;margin-right:10px;height:100%;position:relative}.wpo-fieldgroup .compression_server input[type="radio"]{position:absolute;z-index:1;top:calc(50% + 2px);left:20px;transform:translatey(-50%)}.wpo-fieldgroup .compression_server input[type="radio"] ~ label h4{color:#23282d;margin-top:0;margin-bottom:.9em;font-size:1.2em}.wpo-fieldgroup .compression_server label{display:block;position:relative;box-sizing:border-box;height:100%;background:#FFF;text-align:left;box-shadow:0 3px 10px -2px hsla(150,5%,65%,0.5)}.wpo-fieldgroup .compression_server input[type="radio"]+label{padding:20px;border:2px solid #FFF;padding-left:65px;position:relative;border-radius:5px;color:#82868b}.wpo-fieldgroup .compression_server input[type="radio"]+label::before{content:'';display:block;position:absolute;top:0;left:52px;height:100%;border-right:1px solid #edeff0}.wpo-fieldgroup .save-options{margin:10px 0}.wpo-fieldgroup .compression_server input[type="radio"]:focus+label,.wpo-fieldgroup .compression_server input[type="radio"]+label:hover{border-color:rgba(0,134,184,0.38)}.wpo-fieldgroup .compression_server input[type="radio"]:focus+label{box-shadow:0 3px 10px -2px #5b9dd9}.wpo-fieldgroup .compression_server input[type="radio"]:focus+label h4{color:#0086b9}.wpo-fieldgroup .compression_server input[type="radio"]:checked+label,.wpo-fieldgroup .compression_server input[type="radio"]:checked+label:hover{border-color:#0086b9}@media only screen and (max-width:700px){.wpo-fieldgroup .compression_server{-ms-flex-direction:column;flex-direction:column}.wpo-fieldgroup .compression_server>div{margin-bottom:15px;max-width:100%}}.wpo-fieldgroup h4{margin:1em 0;width:100%}.wpo-fieldgroup .image_quality input[type=radio]{position:absolute;visibility:hidden;display:none}.wpo-fieldgroup .image_quality label{color:#23282d;display:inline-block;cursor:pointer;font-weight:bold;padding:5px 20px;background:#f9f9f9;float:left;margin:0 .5px}.wpo-fieldgroup .image_quality input[type=radio]:checked+label{color:white;background:#0088b9}.wpo-fieldgroup .image_quality label+.wpo-fieldgroup .image_quality input[type=radio]+label{border-left:solid 3px #675f6b}.wpo-fieldgroup .image_quality.radio-group{border:solid .5px #c4c4c4;display:inline-block;border-radius:5px;overflow:hidden;border-bottom:solid 2px #c4c4c4;background:#c4c4c4}.wpo-fieldgroup .image_options input{min-height:16px;min-width:16px;margin:3px 2px}img#wpo_smush_images_save_options_spinner{max-width:20px;max-height:20px}span#wpo_smush_images_save_options_fail{font-size:inherit;color:red}span#wpo_smush_images_save_options_done{font-size:inherit;color:green}#smush-complete-summary span.clearfix{height:10px;display:block;clear:both}span.close{display:block;clear:both;text-align:left;color:#df6927;border:2px solid;border-radius:50%;cursor:pointer}.modal-message-text{margin:0 25px}.smush-options.custom_compression{margin:10px}#smush-backup-delete-days{width:50px;margin:0 8px}img#wpo_smush_delete_backup_spinner{max-width:20px;max-height:20px;position:relative;top:4px}span#wpo_smush_delete_backup_done{font-size:inherit;color:green}.wpo-fieldgroup .smush-options.custom_compression{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;margin-left:24px}.wpo-fieldgroup .smush-options.custom_compression>span{display:inline-block;padding:6px;border:1px solid #cfd2d4;border-radius:4px;font-size:.9em;position:relative}.wpo-fieldgroup .smush-options.custom_compression>span.slider-start::after{content:'';width:6px;height:6px;display:block;position:absolute;top:0;left:100%;transform:translate(-3px,8px) rotate(45deg);border-right:1px solid #cfd2d4;border-top:1px solid #cfd2d4;background:#edeff0}.wpo-fieldgroup .smush-options.custom_compression>span.slider-end::before{content:'';width:6px;height:6px;display:block;position:absolute;top:0;right:100%;transform:translate(3px,8px) rotate(45deg);border-left:1px solid #cfd2d4;border-bottom:1px solid #cfd2d4;background:#edeff0}.wpo-fieldgroup .smush-options.custom_compression>input{margin-left:8px;margin-right:8px}@media screen and (max-width:782px){.wpo-fieldgroup input[type="radio"]{height:16px;width:16px}.wpo-fieldgroup input[type="radio"]:checked:before{width:6px;height:6px;margin:4px}.wpo-fieldgroup .smush-options.custom_compression{-ms-flex-direction:column;flex-direction:column}.wpo-fieldgroup .smush-options.custom_compression>input{width:100%}.wpo-fieldgroup .smush-options.custom_compression>span{display:block;width:100%}.wpo-fieldgroup .smush-options.custom_compression>span.slider-start::after{left:0;transform:translate(7px,22px) rotate(135deg)}.wpo-fieldgroup .smush-options.custom_compression>span.slider-end::before{right:auto;left:100%;transform:translate(-14px,-5px) rotate(135deg)}}#wpo_smush_settings .align-left{float:left}#wpo_smush_settings .align-right{float:right}.wpo-fieldgroup .wpo_smush_images_buttons_wrap{width:100%}.wpo-fieldgroup .smush-refresh-icon,.wpo-fieldgroup .smush-select-actions{font-size:15px}.wpo-fieldgroup img.wpo_smush_images_loader{display:none;min-height:20px;min-width:20px}.wpo-fieldgroup .dashicons.dashicons-image-rotate,{font-size:15px}.wpo-fieldgroup .wpo-toggle-advanced-options{cursor:pointer;text-decoration:underline;color:#0088bc}.wpo-fieldgroup .button.wpo-toggle-advanced-options{display:block;width:calc(100% + 40px);margin-left:-20px;margin-right:-20px;padding-left:20px;padding-right:20px;position:relative;text-decoration:none}.wpo-fieldgroup .button.wpo-toggle-advanced-options span.dashicons{text-decoration:none;font-size:16px;height:16px;vertical-align:middle;color:#444;transition:.2s all}.wpo-fieldgroup .wpo-toggle-advanced-options span.text{background:#f2f4f4;z-index:1;position:relative;padding-right:5px}.wpo-fieldgroup .button.wpo-toggle-advanced-options:hover,.wpo-fieldgroup .button.wpo-toggle-advanced-options:focus{background:transparent}.wpo-fieldgroup .button.wpo-toggle-advanced-options .wpo-toggle-advanced-options__text-show{display:inline-block}.wpo-fieldgroup .button.wpo-toggle-advanced-options .wpo-toggle-advanced-options__text-hide{display:none}.wpo-fieldgroup .button.wpo-toggle-advanced-options.opened .wpo-toggle-advanced-options__text-show{display:none}.wpo-fieldgroup .button.wpo-toggle-advanced-options.opened .wpo-toggle-advanced-options__text-hide{display:inline-block}.wpo-fieldgroup .button.wpo-toggle-advanced-options.opened::before{content:'';border-top:1px solid #CCC;width:100%;position:absolute;top:16px;left:0}.wpo-fieldgroup .button.wpo-toggle-advanced-options.opened span.dashicons{transform:rotate(180deg)}.wpo-fieldgroup .wpo-advanced-options{display:none}.wpo-advanced-options>fieldset:first-child{margin-top:10px}.wpo-fieldgroup .button.wpo-toggle-advanced-options.opened+.wpo-advanced-options{display:block}.wpo_smush_image:focus-within label{box-shadow:0 0 4px #0272aa}.wpo_smush_image .wpo_smush_image__input:checked+label{border-color:#0272aa}.uncompressed-images input[type="checkbox"]{position:absolute;opacity:0;width:0;height:0}.uncompressed-images small.red{clear:both;display:block;margin:5px}.smush-actions .wpo_primary_small{display:inline-block;margin:5px}.smush-actions{display:inline-block;width:100%;margin:10px 0}.smush-actions .dashicons.dashicons-yes{font-size:15px;margin:0 5px}.smush-actions img{max-height:25px;max-width:25px}#smush-log-modal{width:100%;height:100%}#log-panel{height:80%;overflow:scroll;margin:2%}#log-panel pre{text-align:left;overflow:auto;height:100%;background:gainsboro}.smush-information{margin-bottom:10px}#smush_stats{text-align:center;margin:0 auto;padding:2%;min-width:350px;font-size:larger}#smush_stats .wpo_smush_stats_cta_btn{clear:both;display:block;text-align:center}#smush_stats .smush_stats_row td:first-child{text-align:left}#smush_stats tr.smush_stats_row td:last-child{text-align:right}#smush_stats #wpo_smush_images_information_container p{padding:10px}#smush-complete-summary .checkmark-circle{width:50px;height:50px;position:relative;display:inline-block;vertical-align:top}#smush-complete-summary .checkmark-circle .background{width:50px;height:50px;border-radius:50%;background:#df6927;position:absolute}#smush-complete-summary .checkmark-circle .checkmark{border-radius:5px}#smush-complete-summary .checkmark-circle .checkmark.draw:after{animation-delay:100ms;animation-duration:1s;animation-timing-function:ease;animation-name:checkmark;transform:scalex(-1) rotate(135deg);animation-fill-mode:forwards}#smush-complete-summary .checkmark-circle .checkmark:after{opacity:1;height:25px;width:12.5px;transform-origin:left top;border-right:5px solid white;border-top:5px solid white;border-radius:2.5px !important;content:'';left:8.3333333333px;top:25px;position:absolute}#smush_stats .wpo_primary_small{text-align:center}#smush-complete-summary #summary-message{margin:15px auto}img#wpo_smush_images_clear_stats_spinner{width:20px;line-height:1;vertical-align:middle}#wpo_smush_images_information_container{padding:10px}#wpo_smush_images_information_wrapper .progress-bar{height:25px;padding:1px;width:350px;margin:10px auto;border-radius:5px}#wpo_smush_images_information_wrapper .progress-bar span{display:inline-block;height:100%;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,.5) inset;transition:width .4s ease-in-out}#wpo_smush_images_information_wrapper .orange span{background-color:#df6927}#wpo_smush_images_information_wrapper .stripes span{background-size:30px;background-image:linear-gradient(135deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);animation:animate-stripes 3s linear infinite}#smush-metabox-inside-wrapper{display:inline-table;width:100%}#smush-metabox-inside-wrapper h4{margin:2px 0}#smush-metabox-inside-wrapper label{margin-top:5px;clear:left;display:block}#smush-metabox-inside-wrapper .wpo_smush_single_image{display:block}#smush-metabox-inside-wrapper .wpo_smush_single_image.action_button{padding:5px 0}#smush-metabox-inside-wrapper fieldset{margin:10px 0}#smush-metabox-inside-wrapper input[type="radio"]{margin:-4px 4px 0 0}#smush-metabox-inside-wrapper .alignleft{float:left}#smush-metabox-inside-wrapper p#smush_info{margin:20px auto;padding-top:10px;clear:both}#smush-metabox-inside-wrapper .wpo-toggle-advanced-options{cursor:pointer;display:block;clear:both;margin-top:10px;margin-bottom:10px}#smush-metabox-inside-wrapper .wpo-toggle-advanced-options:not(.opened) ~ .wpo-advanced-options{display:none}#smush-metabox-inside-wrapper .wpo-toggle-advanced-options.opened ~ .wpo-advanced-options{display:block !important}#smush-metabox-inside-wrapper .smush-options.custom_compression span{display:block;max-width:30%;clear:both}#smush-metabox-inside-wrapper input#custom_compression_slider{display:block;clear:both;width:100%}#smush-metabox-inside-wrapper .smush-options.custom_compression span.alignleft{float:left}#smush-metabox-inside-wrapper .smush-options.custom_compression span.alignright{float:right;text-align:right}.smush-metabox-dashboard-link{clear:both;padding-top:15px;text-align:right}.media-frame-content .attachment-compat .compat-item,.compat-field-wpo_compress_image{overflow:visible !important}.compat-field-wpo_compress_image{border-top:1px solid #DDD}.compat-field-wpo_compress_image span.dashicons{text-align:left;float:none;min-height:0;padding-top:2px}.compat-field-wpo_compress_image td.field{width:auto;float:none}.compat-field-wpo_compress_image td.field [data-tooltip]{display:none}.compat-field-wpo_compress_image th.label{text-align:left;min-width:0;float:none;margin:0}.compat-field-wpo_compress_image th.label label span{font-weight:500;text-align:left}.wpo_restore_single_image .alignright{float:right}.blockUI.blockMsg.blockPage{z-index:170000 !important;right:0;left:0 !important;margin-right:auto !important;margin-left:auto !important;max-width:90%;cursor:default !important}.blockUI.blockOverlay{cursor:default !important}#smush-metabox-inside-wrapper [data-tooltip],.wpo-fieldgroup [data-tooltip]{position:relative;cursor:pointer;line-height:18px}#smush-metabox-inside-wrapper [data-tooltip]:before,#smush-metabox-inside-wrapper [data-tooltip]:after,.wpo-fieldgroup [data-tooltip]:before,.wpo-fieldgroup [data-tooltip]:after{visibility:hidden;-ms-filter:"alpha(opacity=0)";filter:alpha(opacity=0);opacity:0;pointer-events:none}#smush-metabox-inside-wrapper [data-tooltip]:before,.wpo-fieldgroup [data-tooltip]:before{position:absolute;bottom:150%;left:50%;margin-bottom:5px;margin-left:-140px;padding:12px;width:275px;z-index:9999;border-radius:3px;background-color:#000;background-color:hsla(0,0%,20%,0.95);color:#FFF;content:attr(data-tooltip);text-align:center;font-size:.85rem;font-weight:400;line-height:1.4}#smush-metabox-inside-wrapper [data-tooltip]:before{margin-left:-280px}#smush-metabox-inside-wrapper [data-tooltip]:after,.wpo-fieldgroup [data-tooltip]:after{position:absolute;bottom:150%;left:50%;margin-left:-5px;width:0;border-top:5px solid #000;border-top:5px solid hsla(0,0%,20%,0.9);border-right:5px solid transparent;border-left:5px solid transparent;content:" ";font-size:0;line-height:0}#smush-metabox-inside-wrapper [data-tooltip]:hover:before,#smush-metabox-inside-wrapper [data-tooltip]:hover:after,.wpo-fieldgroup [data-tooltip]:hover:before,.wpo-fieldgroup [data-tooltip]:hover:after,#smush-metabox-inside-wrapper [data-tooltip]:focus:before,#smush-metabox-inside-wrapper [data-tooltip]:focus:after,.wpo-fieldgroup [data-tooltip]:focus:before,.wpo-fieldgroup [data-tooltip]:focus:after{visibility:visible;-ms-filter:"alpha(opacity=100)";filter:alpha(opacity=100);opacity:1}@keyframes checkmark{0%{height:0;width:0;opacity:1}20%{height:0;width:12.5px;opacity:1}40%{height:25px;width:12.5px;opacity:1}100%{height:25px;width:12.5px;opacity:1}}@keyframes animate-stripes{0%{background-position:0 0}100%{background-position:60px 0}}@keyframes animate-stripes{0%{background-position:0 0}100%{background-position:60px 0}}
2
+ /*# sourceMappingURL=smush-3-0-18.min.css.map */
css/smush-3-0-18.min.css.map ADDED
@@ -0,0 +1 @@
 
1
+ {"version":3,"sources":["css/smush.css"],"names":[],"mappings":"AAAA;;GAEG;AACH;CACC,sBAAsB;CACtB,YAAY;CACZ;;AAED;CACC,iBAAiB;CACjB,iBAAiB;CACjB;;AAED;;GAEG;AACH;CACC,iBAAiB;CACjB;;AAED;CACC,eAAe;CACf;;AAED;CACC,YAAY;CACZ,YAAY;CACZ;;AAED;CACC,YAAY;CACZ;;AAED;CACC,oBAAoB;CACpB;;AAED;CACC,qBAAqB;CACrB,cAAc;CACd,wBAAwB;CACxB,oBAAoB;CACpB;;AAED;CACC,YAAY;CACZ,QAAQ;CACR,mBAAmB;CACnB,aAAa;CACb,mBAAmB;CACnB;;AAED;CACC,mBAAmB;CACnB,WAAW;CACX,qBAAqB;CACrB,WAAW;CACX,4BAA4B;CAC5B;;AAED;CACC,eAAe;CACf,cAAc;CACd,qBAAqB;CACrB,iBAAiB;CACjB;;AAED;CACC,eAAe;CACf,mBAAmB;CACnB,uBAAuB;CACvB,aAAa;CACb,iBAAiB;CACjB,iBAAiB;CACjB,sDAAsD;CACtD;;AAED;CACC,cAAc;CACd,uBAAuB;CACvB,mBAAmB;CACnB,mBAAmB;CACnB,mBAAmB;CACnB,eAAe;CACf;;AAED;CACC,YAAY;CACZ,eAAe;CACf,mBAAmB;CACnB,OAAO;CACP,WAAW;CACX,aAAa;CACb,gCAAgC;CAChC;;AAED;CACC,eAAe;CACf;;AAED;;CAEC,sCAAsC;CACtC;;AAED;CACC,sCAAsC;CACtC;;AAED;CACC,eAAe;CACf;;AAED;;CAEC,sBAAsB;CACtB;;AAED;;CAEC;EACC,2BAA2B;EAC3B,uBAAuB;EACvB;;CAED;EACC,oBAAoB;EACpB,gBAAgB;EAChB;;CAED;;AAED;;GAEG;AACH;CACC,cAAc;CACd,YAAY;CACZ;;AAED;CACC,mBAAmB;CACnB,mBAAmB;CACnB,cAAc;CACd;;AAED;CACC,eAAe;CACf,sBAAsB;CACtB,gBAAgB;CAChB,kBAAkB;CAClB,kBAAkB;CAClB,oBAAoB;CACpB,YAAY;CACZ,eAAe;CACf;;AAED;CACC,aAAa;CACb,oBAAoB;CACpB;;AAED;CACC,+BAA+B;CAC/B;;AAED;CACC,2BAA2B;CAC3B,sBAAsB;CACtB,mBAAmB;CACnB,iBAAiB;CACjB,iCAAiC;CACjC,oBAAoB;CACpB;;AAED;CACC,iBAAiB;CACjB,gBAAgB;CAChB,gBAAgB;CAChB;;AAED;CACC,gBAAgB;CAChB,iBAAiB;CACjB;;AAED;CACC,mBAAmB;CACnB,WAAW;CACX;;AAED;CACC,mBAAmB;CACnB,aAAa;CACb;;AAED;CACC,aAAa;CACb,eAAe;CACf,YAAY;CACZ;;AAED;CACC,eAAe;CACf,YAAY;CACZ,iBAAiB;CACjB,eAAe;CACf,kBAAkB;CAClB,mBAAmB;CACnB,gBAAgB;CAChB;;AAED;CACC,eAAe;CACf;;AAED;CACC,aAAa;CACb;;AAED;CACC,YAAY;CACZ,cAAc;CACd;;AAED;CACC,gBAAgB;CAChB,iBAAiB;CACjB,mBAAmB;CACnB,SAAS;CACT;;AAED;CACC,mBAAmB;CACnB,aAAa;CACb;;AAED;CACC,qBAAc;CAAd,cAAc;CACd,uBAAoB;KAApB,oBAAoB;CACpB,kBAAkB;CAClB;;AAED;CACC,sBAAsB;CACtB,aAAa;CACb,0BAA0B;CAC1B,mBAAmB;CACnB,iBAAiB;CACjB,mBAAmB;CACnB;;AAED;CACC,YAAY;CACZ,WAAW;CACX,YAAY;CACZ,eAAe;CACf,mBAAmB;CACnB,OAAO;CACP,WAAW;CACX,8CAA8C;CAC9C,gCAAgC;CAChC,8BAA8B;CAC9B,oBAAoB;CACpB;;AAED;CACC,YAAY;CACZ,WAAW;CACX,YAAY;CACZ,eAAe;CACf,mBAAmB;CACnB,OAAO;CACP,YAAY;CACZ,6CAA6C;CAC7C,+BAA+B;CAC/B,iCAAiC;CACjC,oBAAoB;CACpB;;AAED;CACC,iBAAiB;CACjB,kBAAkB;CAClB;;AAED;;CAEC;EACC,aAAa;EACb,YAAY;EACZ;;CAED;EACC,WAAW;EACX,YAAY;EACZ,YAAY;EACZ;;CAED;EACC,2BAAuB;MAAvB,uBAAuB;EACvB;;CAED;EACC,YAAY;EACZ;;CAED;EACC,eAAe;EACf,YAAY;EACZ;;CAED;EACC,QAAQ;EACR,+CAA+C;EAC/C;;CAED;EACC,YAAY;EACZ,WAAW;EACX,iDAAiD;EACjD;;CAED;;AAED;;GAEG;;AAEH;CACC,YAAY;CACZ;;AAED;CACC,aAAa;CACb;;AAED;CACC,YAAY;CACZ;;AAED;;CAEC,gBAAgB;CAChB;;AAED;CACC,cAAc;CACd,iBAAiB;CACjB,gBAAgB;CAChB;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,gBAAgB;CAChB,2BAA2B;CAC3B,eAAe;CACf;;AAED;CACC,eAAe;CACf,yBAAyB;CACzB,mBAAmB;CACnB,oBAAoB;CACpB,mBAAmB;CACnB,oBAAoB;CACpB,mBAAmB;CACnB,sBAAsB;CACtB;;AAED;CACC,sBAAsB;CACtB,gBAAgB;CAChB,aAAa;CACb,uBAAuB;CACvB,YAAY;CACZ,oBAAoB;CACpB;;AAED;CACC,oBAAoB;CACpB,WAAW;CACX,mBAAmB;CACnB,mBAAmB;CACnB;;AAED;;CAEC,wBAAwB;CACxB;;AAED;CACC,sBAAsB;CACtB;;AAED;CACC,cAAc;CACd;;AAED;CACC,cAAc;CACd;;AAED;CACC,sBAAsB;CACtB;;AAED;CACC,YAAY;CACZ,2BAA2B;CAC3B,YAAY;CACZ,mBAAmB;CACnB,UAAU;CACV,QAAQ;CACR;;AAED;CACC,0BAA0B;CAC1B;;AAED;CACC,cAAc;CACd;;AAED;CACC,iBAAiB;CACjB;;AAED;CACC,eAAe;CACf;;AAED;CACC,4BAA4B;CAC5B;;AAED;CACC,sBAAsB;CACtB;;AAED;CACC,mBAAmB;CACnB,WAAW;CACX,SAAS;CACT,UAAU;CACV;;AAED;CACC,YAAY;CACZ,eAAe;CACf,YAAY;CACZ;;AAED;CACC,sBAAsB;CACtB,YAAY;CACZ;;AAED;CACC,sBAAsB;CACtB,YAAY;CACZ,eAAe;CACf;;AAED;CACC,gBAAgB;CAChB,cAAc;CACd;;AAED;CACC,iBAAiB;CACjB,gBAAgB;CAChB;;AAED;;GAEG;;AAEH;CACC,YAAY;CACZ,aAAa;CACb;;AAED;CACC,YAAY;CACZ,iBAAiB;CACjB,WAAW;CACX;;AAED;CACC,iBAAiB;CACjB,eAAe;CACf,aAAa;CACb,sBAAsB;CACtB;;AAED;CACC,oBAAoB;CACpB;;AAED;;GAEG;;AAEH;CACC,mBAAmB;CACnB,eAAe;CACf,YAAY;CACZ,iBAAiB;CACjB,kBAAkB;CAClB;;AAED;CACC,YAAY;CACZ,eAAe;CACf,mBAAmB;CACnB;;AAED;CACC,iBAAiB;CACjB;;AAED;CACC,kBAAkB;CAClB;;AAED;CACC,cAAc;CACd;;AAED;CACC,YAAY;CACZ,aAAa;CACb,mBAAmB;CACnB,sBAAsB;CACtB,oBAAoB;CACpB;;AAED;CACC,YAAY;CACZ,aAAa;CACb,mBAAmB;CACnB,oBAAoB;CACpB,mBAAmB;CACnB;;AAED;CACC,mBAAmB;CACnB;;AAED;CACC,uBAAuB;CACvB,uBAAuB;CACvB,gCAAgC;CAChC,0BAA0B;CAC1B,qCAAqC;CACrC,8BAA8B;CAC9B;;AAED;CACC,WAAW;CACX,aAAa;CACb,cAAc;CACd,2BAA2B;CAC3B,8BAA8B;CAC9B,4BAA4B;CAC5B,gCAAgC;CAChC,YAAY;CACZ,qBAAqB;CACrB,UAAU;CACV,mBAAmB;CACnB;;AAED;CACC,mBAAmB;CACnB;;AAED;CACC,kBAAkB;CAClB;;AAED;CACC,YAAY;CACZ,eAAe;CACf,uBAAuB;CACvB;;AAED,2BAA2B;;AAE3B;CACC,cAAc;CACd;;AAED;CACC,aAAa;CACb,aAAa;CACb,aAAa;CACb,kBAAkB;CAClB,mBAAmB;CACnB;;AAED;CACC,sBAAsB;CACtB,aAAa;CACb,mBAAmB;CACnB,kDAAkD;CAClD,kCAAkC;CAClC;;AAED;CACC,0BAA0B;CAC1B;;AAED;CACC,sBAAsB;CACtB,oMAAoM;CACpM,8CAA8C;CAC9C;;AAED;;GAEG;;AAEH;CACC,sBAAsB;CACtB,YAAY;CACZ;;AAED;CACC,cAAc;CACd;;AAED;CACC,gBAAgB;CAChB,YAAY;CACZ,eAAe;CACf;;AAED;CACC,eAAe;CACf;;AAED;CACC,eAAe;CACf;;AAED;CACC,eAAe;CACf;;AAED;CACC,qBAAqB;CACrB;;AAED;CACC,YAAY;CACZ;;AAED;CACC,kBAAkB;CAClB,kBAAkB;CAClB,YAAY;CACZ;;AAED;CACC,gBAAgB;CAChB,eAAe;CACf,YAAY;CACZ,iBAAiB;CACjB,oBAAoB;CACpB;;AAED;CACC,cAAc;CACd;;AAED;CACC,0BAA0B;CAC1B;;AAED;CACC,eAAe;CACf,eAAe;CACf,YAAY;CACZ;;AAED;CACC,eAAe;CACf,YAAY;CACZ,YAAY;CACZ;;AAED;CACC,YAAY;CACZ;;AAED;CACC,aAAa;CACb,kBAAkB;CAClB;;AAED;CACC,YAAY;CACZ,kBAAkB;CAClB,kBAAkB;CAClB;;AAED;;CAEC,6BAA6B;CAC7B;;AAED;CACC,2BAA2B;CAC3B;;AAED;CACC,iBAAiB;CACjB,YAAY;CACZ,cAAc;CACd,iBAAiB;CACjB;;AAED;CACC,YAAY;CACZ,YAAY;CACZ;;AAED;CACC,cAAc;CACd;;AAED;CACC,iBAAiB;CACjB,aAAa;CACb,YAAY;CACZ,UAAU;CACV;;AAED;CACC,iBAAiB;CACjB,iBAAiB;CACjB;;AAED,+CAA+C;AAC/C;CACC,aAAa;CACb;;AAED;;GAEG;AACH;CACC,2BAA2B;CAC3B,SAAS;CACT,mBAAmB;CACnB,8BAA8B;CAC9B,6BAA6B;CAC7B,eAAe;CACf,2BAA2B;CAC3B;;AAED;CACC,2BAA2B;CAC3B;;AAED;;GAEG;;AAEH,4DAA4D;AAC5D;;CAEC,mBAAmB;CACnB,gBAAgB;CAChB,kBAAkB;CAClB;;AAED,yCAAyC;AACzC;;;;CAIC,mBAAmB;CACnB,iEAAiE;CACjE,4DAA4D;CAC5D,WAAW;CACX,qBAAqB;CACrB;;AAED,wCAAwC;AACxC;;CAEC,mBAAmB;CACnB,aAAa;CACb,UAAU;CACV,mBAAmB;CACnB,oBAAoB;CACpB,cAAc;CACd,aAAa;CACb,cAAc;CACd,mBAAmB;CACnB,uBAAuB;CACvB,yCAAyC;CACzC,YAAY;CACZ,4BAA4B;CAC5B,mBAAmB;CACnB,kBAAkB;CAClB,iBAAiB;CACjB,iBAAiB;CACjB;;AAED;CACC,oBAAoB;CACpB;;AAED,6DAA6D;AAC7D;;CAEC,mBAAmB;CACnB,aAAa;CACb,UAAU;CACV,kBAAkB;CAClB,SAAS;CACT,2BAA2B;CAC3B,4CAA4C;CAC5C,oCAAoC;CACpC,mCAAmC;CACnC,aAAa;CACb,aAAa;CACb,eAAe;CACf;;AAED,mCAAmC;AACnC;;;;;;;;CAQC,oBAAoB;CACpB,mEAAmE;CACnE,8DAA8D;CAC9D,WAAW;CACX;;AAED;;GAEG;;AAEH;;CAEC;EACC,UAAU;EACV,SAAS;EACT,WAAW;EACX;;CAED;EACC,UAAU;EACV,cAAc;EACd,WAAW;EACX;;CAED;EACC,aAAa;EACb,cAAc;EACd,WAAW;EACX;;CAED;EACC,aAAa;EACb,cAAc;EACd,WAAW;EACX;;CAED;;AAED;;CAEC;EACC,yBAAyB;EACzB;;CAED;EACC,4BAA4B;EAC5B;;CAED;;AAED;;CAEC;EACC,yBAAyB;EACzB;;CAED;EACC,4BAA4B;EAC5B;;CAED","file":"smush-3-0-18.min.css","sourcesContent":["/**\n * Autosmush\n */\n.wpo-fieldgroup .autosmush {\n\tdisplay: inline-block;\n\twidth: 100%;\n}\n\n.wpo-fieldgroup .autosmush h3 {\n\tfont-size: 1.2em;\n\tmargin: 3px 18px;\n}\n\n/**\n * Compression Server\n */\n.wpo-fieldgroup .compression_server div {\n\tmax-width: 300px;\n}\n\n.wpo-fieldgroup .compression_server h2 {\n\tmargin: 10px 0;\n}\n\n.wpo-fieldgroup .compression_server h3 {\n\tclear: both;\n\twidth: 100%;\n}\n\n.wpo-fieldgroup .compression_server p {\n\tmargin: 1px;\n}\n\n.wpo-fieldgroup .compression_server p:last-of-type {\n\tmargin-bottom: 10px;\n}\n\n.wpo-fieldgroup .compression_server {\n\tdisplay: -ms-flexbox;\n\tdisplay: flex;\n\t-ms-flex-flow: row wrap;\n\tflex-flow: row wrap;\n}\n\n.wpo-fieldgroup .compression_server > div {\n\t-ms-flex: 1;\n\tflex: 1;\n\tmargin-right: 10px;\n\theight: 100%;\n\tposition: relative;\n}\n\n.wpo-fieldgroup .compression_server input[type=\"radio\"] {\n\tposition: absolute;\n\tz-index: 1;\n\ttop: calc(50% + 2px);\n\tleft: 20px;\n\ttransform: translatey(-50%);\n}\n\n.wpo-fieldgroup .compression_server input[type=\"radio\"] ~ label h4 {\n\tcolor: #23282D;\n\tmargin-top: 0;\n\tmargin-bottom: 0.9em;\n\tfont-size: 1.2em;\n}\n\n.wpo-fieldgroup .compression_server label {\n\tdisplay: block;\n\tposition: relative;\n\tbox-sizing: border-box;\n\theight: 100%;\n\tbackground: #FFF;\n\ttext-align: left;\n\tbox-shadow: 0px 3px 10px -2px hsla(150, 5%, 65%, 0.5);\n}\n\n.wpo-fieldgroup .compression_server input[type=\"radio\"] + label {\n\tpadding: 20px;\n\tborder: 2px solid #FFF;\n\tpadding-left: 65px;\n\tposition: relative;\n\tborder-radius: 5px;\n\tcolor: #82868B;\n}\n\n.wpo-fieldgroup .compression_server input[type=\"radio\"] + label::before {\n\tcontent: '';\n\tdisplay: block;\n\tposition: absolute;\n\ttop: 0;\n\tleft: 52px;\n\theight: 100%;\n\tborder-right: 1px solid #EDEFF0;\n}\n\n.wpo-fieldgroup .save-options {\n\tmargin: 10px 0;\n}\n\n.wpo-fieldgroup .compression_server input[type=\"radio\"]:focus + label,\n.wpo-fieldgroup .compression_server input[type=\"radio\"] + label:hover {\n\tborder-color: rgba(0, 134, 184, 0.38);\n}\n\n.wpo-fieldgroup .compression_server input[type=\"radio\"]:focus + label {\n\tbox-shadow: 0px 3px 10px -2px #5B9DD9;\n}\n\n.wpo-fieldgroup .compression_server input[type=\"radio\"]:focus + label h4 {\n\tcolor: #0086B9;\n}\n\n.wpo-fieldgroup .compression_server input[type=\"radio\"]:checked + label,\n.wpo-fieldgroup .compression_server input[type=\"radio\"]:checked + label:hover {\n\tborder-color: #0086B9;\n}\n\n@media only screen and (max-width: 700px) {\n\n\t.wpo-fieldgroup .compression_server {\n\t\t-ms-flex-direction: column;\n\t\tflex-direction: column;\n\t}\n\n\t.wpo-fieldgroup .compression_server > div {\n\t\tmargin-bottom: 15px;\n\t\tmax-width: 100%;\n\t}\n\n}\n\n/**\n * Compression Options\n */\n.wpo-fieldgroup h4 {\n\tmargin: 1em 0;\n\twidth: 100%;\n}\n\n.wpo-fieldgroup .image_quality input[type=radio] {\n\tposition: absolute;\n\tvisibility: hidden;\n\tdisplay: none;\n}\n\n.wpo-fieldgroup .image_quality label {\n\tcolor: #23282D;\n\tdisplay: inline-block;\n\tcursor: pointer;\n\tfont-weight: bold;\n\tpadding: 5px 20px;\n\tbackground: #F9F9F9;\n\tfloat: left;\n\tmargin: 0 .5px;\n}\n\n.wpo-fieldgroup .image_quality input[type=radio]:checked + label {\n\tcolor: white;\n\tbackground: #0088B9;\n}\n\n.wpo-fieldgroup .image_quality label + .wpo-fieldgroup .image_quality input[type=radio] + label {\n\tborder-left: solid 3px #675F6B;\n}\n\n.wpo-fieldgroup .image_quality.radio-group {\n\tborder: solid .5px #C4C4C4;\n\tdisplay: inline-block;\n\tborder-radius: 5px;\n\toverflow: hidden;\n\tborder-bottom: solid 2px #C4C4C4;\n\tbackground: #C4C4C4;\n}\n\n.wpo-fieldgroup .image_options input {\n\tmin-height: 16px;\n\tmin-width: 16px;\n\tmargin: 3px 2px;\n}\n\nimg#wpo_smush_images_save_options_spinner {\n\tmax-width: 20px;\n\tmax-height: 20px;\n}\n\nspan#wpo_smush_images_save_options_fail {\n\tfont-size: inherit;\n\tcolor: red;\n}\n\nspan#wpo_smush_images_save_options_done {\n\tfont-size: inherit;\n\tcolor: green;\n}\n\n#smush-complete-summary span.clearfix {\n\theight: 10px;\n\tdisplay: block;\n\tclear: both;\n}\n\nspan.close {\n\tdisplay: block;\n\tclear: both;\n\ttext-align: left;\n\tcolor: #DF6927;\n\tborder: 2px solid;\n\tborder-radius: 50%;\n\tcursor: pointer;\n}\n\n.modal-message-text {\n\tmargin: 0 25px;\n}\n\n.smush-options.custom_compression {\n\tmargin: 10px;\n}\n\n#smush-backup-delete-days {\n\twidth: 50px;\n\tmargin: 0 8px;\n}\n\nimg#wpo_smush_delete_backup_spinner {\n\tmax-width: 20px;\n\tmax-height: 20px;\n\tposition: relative;\n\ttop: 4px;\n}\n\nspan#wpo_smush_delete_backup_done {\n\tfont-size: inherit;\n\tcolor: green;\n}\n\n.wpo-fieldgroup .smush-options.custom_compression {\n\tdisplay: flex;\n\talign-items: center;\n\tmargin-left: 24px;\n}\n\n.wpo-fieldgroup .smush-options.custom_compression > span {\n\tdisplay: inline-block;\n\tpadding: 6px;\n\tborder: 1px solid #CFD2D4;\n\tborder-radius: 4px;\n\tfont-size: 0.9em;\n\tposition: relative;\n}\n\n.wpo-fieldgroup .smush-options.custom_compression > span.slider-start::after {\n\tcontent: '';\n\twidth: 6px;\n\theight: 6px;\n\tdisplay: block;\n\tposition: absolute;\n\ttop: 0;\n\tleft: 100%;\n\ttransform: translate(-3px, 8px) rotate(45deg);\n\tborder-right: 1px solid #CFD2D4;\n\tborder-top: 1px solid #CFD2D4;\n\tbackground: #EDEFF0;\n}\n\n.wpo-fieldgroup .smush-options.custom_compression > span.slider-end::before {\n\tcontent: '';\n\twidth: 6px;\n\theight: 6px;\n\tdisplay: block;\n\tposition: absolute;\n\ttop: 0;\n\tright: 100%;\n\ttransform: translate(3px, 8px) rotate(45deg);\n\tborder-left: 1px solid #CFD2D4;\n\tborder-bottom: 1px solid #CFD2D4;\n\tbackground: #EDEFF0;\n}\n\n.wpo-fieldgroup .smush-options.custom_compression > input {\n\tmargin-left: 8px;\n\tmargin-right: 8px;\n}\n\n@media screen and (max-width: 782px) {\n\n\t.wpo-fieldgroup input[type=\"radio\"] {\n\t\theight: 16px;\n\t\twidth: 16px;\n\t}\n\n\t.wpo-fieldgroup\tinput[type=\"radio\"]:checked:before {\n\t\twidth: 6px;\n\t\theight: 6px;\n\t\tmargin: 4px;\n\t}\n\n\t.wpo-fieldgroup .smush-options.custom_compression {\n\t\tflex-direction: column;\n\t}\n\n\t.wpo-fieldgroup .smush-options.custom_compression > input {\n\t\twidth: 100%;\n\t}\n\n\t.wpo-fieldgroup .smush-options.custom_compression > span {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t}\n\n\t.wpo-fieldgroup .smush-options.custom_compression > span.slider-start::after {\n\t\tleft: 0;\n\t\ttransform: translate(7px, 22px) rotate(135deg);\n\t}\n\n\t.wpo-fieldgroup .smush-options.custom_compression > span.slider-end::before {\n\t\tright: auto;\n\t\tleft: 100%;\n\t\ttransform: translate(-14px, -5px) rotate(135deg);\n\t}\n\n}\n\n/**\n * Uncompressed images\n */\n\n#wpo_smush_settings .align-left {\n\tfloat: left;\n}\n\n#wpo_smush_settings .align-right {\n\tfloat: right;\n}\n\n.wpo-fieldgroup .wpo_smush_images_buttons_wrap {\n\twidth: 100%;\n}\n\n.wpo-fieldgroup .smush-refresh-icon,\n.wpo-fieldgroup .smush-select-actions {\n\tfont-size: 15px;\n}\n\n.wpo-fieldgroup img.wpo_smush_images_loader {\n\tdisplay: none;\n\tmin-height: 20px;\n\tmin-width: 20px;\n}\n\n.wpo-fieldgroup .dashicons.dashicons-image-rotate, {\n\tfont-size: 15px;\n}\n\n.wpo-fieldgroup .wpo-toggle-advanced-options {\n\tcursor: pointer;\n\ttext-decoration: underline;\n\tcolor: #0088BC;\n}\n\n.wpo-fieldgroup .button.wpo-toggle-advanced-options {\n\tdisplay: block;\n\twidth: calc(100% + 40px);\n\tmargin-left: -20px;\n\tmargin-right: -20px;\n\tpadding-left: 20px;\n\tpadding-right: 20px;\n\tposition: relative;\n\ttext-decoration: none;\n}\n\n.wpo-fieldgroup .button.wpo-toggle-advanced-options span.dashicons {\n\ttext-decoration: none;\n\tfont-size: 16px;\n\theight: 16px;\n\tvertical-align: middle;\n\tcolor: #444;\n\ttransition: .2s all;\n}\n\n.wpo-fieldgroup .wpo-toggle-advanced-options span.text {\n\tbackground: #F2F4F4;\n\tz-index: 1;\n\tposition: relative;\n\tpadding-right: 5px;\n}\n\n.wpo-fieldgroup .button.wpo-toggle-advanced-options:hover,\n.wpo-fieldgroup .button.wpo-toggle-advanced-options:focus {\n\tbackground: transparent;\n}\n\n.wpo-fieldgroup .button.wpo-toggle-advanced-options .wpo-toggle-advanced-options__text-show {\n\tdisplay: inline-block;\n}\n\n.wpo-fieldgroup .button.wpo-toggle-advanced-options .wpo-toggle-advanced-options__text-hide {\n\tdisplay: none;\n}\n\n.wpo-fieldgroup .button.wpo-toggle-advanced-options.opened .wpo-toggle-advanced-options__text-show {\n\tdisplay: none;\n}\n\n.wpo-fieldgroup .button.wpo-toggle-advanced-options.opened .wpo-toggle-advanced-options__text-hide {\n\tdisplay: inline-block;\n}\n\n.wpo-fieldgroup .button.wpo-toggle-advanced-options.opened::before {\n\tcontent: '';\n\tborder-top: 1px solid #CCC;\n\twidth: 100%;\n\tposition: absolute;\n\ttop: 16px;\n\tleft: 0;\n}\n\n.wpo-fieldgroup .button.wpo-toggle-advanced-options.opened span.dashicons {\n\ttransform: rotate(180deg);\n}\n\n.wpo-fieldgroup .wpo-advanced-options {\n\tdisplay: none;\n}\n\n.wpo-advanced-options > fieldset:first-child {\n\tmargin-top: 10px;\n}\n\n.wpo-fieldgroup .button.wpo-toggle-advanced-options.opened + .wpo-advanced-options {\n\tdisplay: block;\n}\n\n.wpo_smush_image:focus-within label {\n\tbox-shadow: 0 0 4px #0272AA;\n}\n\n.wpo_smush_image .wpo_smush_image__input:checked + label {\n\tborder-color: #0272AA;\n}\n\n.uncompressed-images input[type=\"checkbox\"] {\n\tposition: absolute;\n\topacity: 0;\n\twidth: 0;\n\theight: 0;\n}\n\n.uncompressed-images small.red {\n\tclear: both;\n\tdisplay: block;\n\tmargin: 5px;\n}\n\n.smush-actions .wpo_primary_small {\n\tdisplay: inline-block;\n\tmargin: 5px;\n}\n\n.smush-actions {\n\tdisplay: inline-block;\n\twidth: 100%;\n\tmargin: 10px 0;\n}\n\n.smush-actions .dashicons.dashicons-yes {\n\tfont-size: 15px;\n\tmargin: 0 5px;\n}\n\n.smush-actions img {\n\tmax-height: 25px;\n\tmax-width: 25px;\n}\n\n/**\n * Log and panels\n */\n\n#smush-log-modal {\n\twidth: 100%;\n\theight: 100%;\n}\n\n#log-panel {\n\theight: 80%;\n\toverflow: scroll;\n\tmargin: 2%;\n}\n\n#log-panel pre {\n\ttext-align: left;\n\toverflow: auto;\n\theight: 100%;\n\tbackground: gainsboro;\n}\n\n.smush-information {\n\tmargin-bottom: 10px;\n}\n\n/**\n * Smush modal progress box & related styling\n */\n\n#smush_stats {\n\ttext-align: center;\n\tmargin: 0 auto;\n\tpadding: 2%;\n\tmin-width: 350px;\n\tfont-size: larger;\n}\n\n#smush_stats .wpo_smush_stats_cta_btn {\n\tclear: both;\n\tdisplay: block;\n\ttext-align: center;\n}\n\n#smush_stats .smush_stats_row td:first-child {\n\ttext-align: left;\n}\n\n#smush_stats tr.smush_stats_row td:last-child {\n\ttext-align: right;\n}\n\n#smush_stats #wpo_smush_images_information_container p {\n\tpadding: 10px;\n}\n\n#smush-complete-summary .checkmark-circle {\n\twidth: 50px;\n\theight: 50px;\n\tposition: relative;\n\tdisplay: inline-block;\n\tvertical-align: top;\n}\n\n#smush-complete-summary .checkmark-circle .background {\n\twidth: 50px;\n\theight: 50px;\n\tborder-radius: 50%;\n\tbackground: #DF6927;\n\tposition: absolute;\n}\n\n#smush-complete-summary .checkmark-circle .checkmark {\n\tborder-radius: 5px;\n}\n\n#smush-complete-summary .checkmark-circle .checkmark.draw:after {\n\tanimation-delay: 100ms;\n\tanimation-duration: 1s;\n\tanimation-timing-function: ease;\n\tanimation-name: checkmark;\n\ttransform: scalex(-1) rotate(135deg);\n\tanimation-fill-mode: forwards;\n}\n\n#smush-complete-summary .checkmark-circle .checkmark:after {\n\topacity: 1;\n\theight: 25px;\n\twidth: 12.5px;\n\ttransform-origin: left top;\n\tborder-right: 5px solid white;\n\tborder-top: 5px solid white;\n\tborder-radius: 2.5px !important;\n\tcontent: '';\n\tleft: 8.3333333333px;\n\ttop: 25px;\n\tposition: absolute;\n}\n\n#smush_stats .wpo_primary_small {\n\ttext-align: center;\n}\n\n#smush-complete-summary #summary-message {\n\tmargin: 15px auto;\n}\n\nimg#wpo_smush_images_clear_stats_spinner {\n\twidth: 20px;\n\tline-height: 1;\n\tvertical-align: middle;\n}\n\n/* Animated progress bar */\n\n#wpo_smush_images_information_container {\n\tpadding: 10px;\n}\n\n#wpo_smush_images_information_wrapper .progress-bar {\n\theight: 25px;\n\tpadding: 1px;\n\twidth: 350px;\n\tmargin: 10px auto;\n\tborder-radius: 5px;\n}\n\n#wpo_smush_images_information_wrapper .progress-bar span {\n\tdisplay: inline-block;\n\theight: 100%;\n\tborder-radius: 3px;\n\tbox-shadow: 0 1px 0 rgba(255, 255, 255, .5) inset;\n\ttransition: width .4s ease-in-out;\n}\n\n#wpo_smush_images_information_wrapper .orange span {\n\tbackground-color: #DF6927;\n}\n\n#wpo_smush_images_information_wrapper .stripes span {\n\tbackground-size: 30px;\n\tbackground-image: linear-gradient(135deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n\tanimation: animate-stripes 3s linear infinite;\n}\n\n/**\n * Smush metabox\n */\n\n#smush-metabox-inside-wrapper {\n\tdisplay: inline-table;\n\twidth: 100%;\n}\n\n#smush-metabox-inside-wrapper h4 {\n\tmargin: 2px 0;\n}\n\n#smush-metabox-inside-wrapper label {\n\tmargin-top: 5px;\n\tclear: left;\n\tdisplay: block;\n}\n\n#smush-metabox-inside-wrapper .wpo_smush_single_image {\n\tdisplay: block;\n}\n\n#smush-metabox-inside-wrapper .wpo_smush_single_image.action_button {\n\tpadding: 5px 0;\n}\n\n#smush-metabox-inside-wrapper fieldset {\n\tmargin: 10px 0;\n}\n\n#smush-metabox-inside-wrapper input[type=\"radio\"] {\n\tmargin: -4px 4px 0 0;\n}\n\n#smush-metabox-inside-wrapper .alignleft {\n\tfloat: left;\n}\n\n#smush-metabox-inside-wrapper p#smush_info {\n\tmargin: 20px auto;\n\tpadding-top: 10px;\n\tclear: both;\n}\n\n#smush-metabox-inside-wrapper .wpo-toggle-advanced-options {\n\tcursor: pointer;\n\tdisplay: block;\n\tclear: both;\n\tmargin-top: 10px;\n\tmargin-bottom: 10px;\n}\n\n#smush-metabox-inside-wrapper .wpo-toggle-advanced-options:not(.opened) ~ .wpo-advanced-options {\n\tdisplay: none;\n}\n\n#smush-metabox-inside-wrapper .wpo-toggle-advanced-options.opened ~ .wpo-advanced-options {\n\tdisplay: block !important;\n}\n\n#smush-metabox-inside-wrapper .smush-options.custom_compression span {\n\tdisplay: block;\n\tmax-width: 30%;\n\tclear: both;\n}\n\n#smush-metabox-inside-wrapper input#custom_compression_slider {\n\tdisplay: block;\n\tclear: both;\n\twidth: 100%;\n}\n\n#smush-metabox-inside-wrapper .smush-options.custom_compression span.alignleft {\n\tfloat: left;\n}\n\n#smush-metabox-inside-wrapper .smush-options.custom_compression span.alignright {\n\tfloat: right;\n\ttext-align: right;\n}\n\n.smush-metabox-dashboard-link {\n\tclear: both;\n\tpadding-top: 15px;\n\ttext-align: right;\n}\n\n.media-frame-content .attachment-compat .compat-item,\n.compat-field-wpo_compress_image {\n\toverflow: visible !important;\n}\n\n.compat-field-wpo_compress_image {\n\tborder-top: 1px solid #DDD;\n}\n\n.compat-field-wpo_compress_image span.dashicons {\n\ttext-align: left;\n\tfloat: none;\n\tmin-height: 0;\n\tpadding-top: 2px;\n}\n\n.compat-field-wpo_compress_image td.field {\n\twidth: auto;\n\tfloat: none;\n}\n\n.compat-field-wpo_compress_image td.field [data-tooltip] {\n\tdisplay: none;\n}\n\n.compat-field-wpo_compress_image th.label {\n\ttext-align: left;\n\tmin-width: 0;\n\tfloat: none;\n\tmargin: 0;\n}\n\n.compat-field-wpo_compress_image th.label label span {\n\tfont-weight: 500;\n\ttext-align: left;\n}\n\n/* fix for elementor restore button position */\n.wpo_restore_single_image .alignright {\n\tfloat: right;\n}\n\n/**\n * Force fix the modals\n */\n.blockUI.blockMsg.blockPage {\n\tz-index: 170000 !important;\n\tright: 0;\n\tleft: 0 !important;\n\tmargin-right: auto !important;\n\tmargin-left: auto !important;\n\tmax-width: 90%;\n\tcursor: default !important;\n}\n\n.blockUI.blockOverlay {\n\tcursor: default !important;\n}\n\n/**\n * Tooltip Styles\n */\n\n/* Add this attribute to the element that needs a tooltip */\n#smush-metabox-inside-wrapper [data-tooltip],\n.wpo-fieldgroup [data-tooltip] {\n\tposition: relative;\n\tcursor: pointer;\n\tline-height: 18px;\n}\n\n/* Hide the tooltip content by default */\n#smush-metabox-inside-wrapper [data-tooltip]:before,\n#smush-metabox-inside-wrapper [data-tooltip]:after,\n.wpo-fieldgroup [data-tooltip]:before,\n.wpo-fieldgroup [data-tooltip]:after {\n\tvisibility: hidden;\n\t-ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n\tfilter: progid: DXImageTransform.Microsoft.Alpha(Opacity=0);\n\topacity: 0;\n\tpointer-events: none;\n}\n\n/* Position tooltip above the element */\n#smush-metabox-inside-wrapper [data-tooltip]:before,\n.wpo-fieldgroup [data-tooltip]:before {\n\tposition: absolute;\n\tbottom: 150%;\n\tleft: 50%;\n\tmargin-bottom: 5px;\n\tmargin-left: -140px;\n\tpadding: 12px;\n\twidth: 275px;\n\tz-index: 9999;\n\tborder-radius: 3px;\n\tbackground-color: #000;\n\tbackground-color: hsla(0, 0%, 20%, 0.95);\n\tcolor: #FFF;\n\tcontent: attr(data-tooltip);\n\ttext-align: center;\n\tfont-size: .85rem;\n\tfont-weight: 400;\n\tline-height: 1.4;\n}\n\n#smush-metabox-inside-wrapper [data-tooltip]:before {\n\tmargin-left: -280px;\n}\n\n/* Triangle hack to make tooltip look like a speech bubble */\n#smush-metabox-inside-wrapper [data-tooltip]:after,\n.wpo-fieldgroup [data-tooltip]:after {\n\tposition: absolute;\n\tbottom: 150%;\n\tleft: 50%;\n\tmargin-left: -5px;\n\twidth: 0;\n\tborder-top: 5px solid #000;\n\tborder-top: 5px solid hsla(0, 0%, 20%, 0.9);\n\tborder-right: 5px solid transparent;\n\tborder-left: 5px solid transparent;\n\tcontent: \" \";\n\tfont-size: 0;\n\tline-height: 0;\n}\n\n/* Show tooltip content on hover */\n#smush-metabox-inside-wrapper [data-tooltip]:hover:before,\n#smush-metabox-inside-wrapper [data-tooltip]:hover:after,\n.wpo-fieldgroup [data-tooltip]:hover:before,\n.wpo-fieldgroup [data-tooltip]:hover:after,\n#smush-metabox-inside-wrapper [data-tooltip]:focus:before,\n#smush-metabox-inside-wrapper [data-tooltip]:focus:after,\n.wpo-fieldgroup [data-tooltip]:focus:before,\n.wpo-fieldgroup [data-tooltip]:focus:after {\n\tvisibility: visible;\n\t-ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)\";\n\tfilter: progid: DXImageTransform.Microsoft.Alpha(Opacity=100);\n\topacity: 1;\n}\n\n/**\n * Animation needed for smush\n */\n\n@keyframes checkmark {\n\n\t0% {\n\t\theight: 0;\n\t\twidth: 0;\n\t\topacity: 1;\n\t}\n\n\t20% {\n\t\theight: 0;\n\t\twidth: 12.5px;\n\t\topacity: 1;\n\t}\n\n\t40% {\n\t\theight: 25px;\n\t\twidth: 12.5px;\n\t\topacity: 1;\n\t}\n\n\t100% {\n\t\theight: 25px;\n\t\twidth: 12.5px;\n\t\topacity: 1;\n\t}\n\n}\n\n@keyframes animate-stripes {\n\n\t0% {\n\t\tbackground-position: 0 0;\n\t}\n\n\t100% {\n\t\tbackground-position: 60px 0;\n\t}\n\n}\n\n@keyframes animate-stripes {\n\n\t0% {\n\t\tbackground-position: 0 0;\n\t}\n\n\t100% {\n\t\tbackground-position: 60px 0;\n\t}\n\n}\n"]}
css/smush.css CHANGED
@@ -356,13 +356,13 @@ span#wpo_smush_delete_backup_done {
356
  font-size: 15px;
357
  }
358
 
359
- .wpo-fieldgroup .toggle-smush-advanced {
360
  cursor: pointer;
361
  text-decoration: underline;
362
  color: #0088BC;
363
  }
364
 
365
- .wpo-fieldgroup .button.toggle-smush-advanced {
366
  display: block;
367
  width: calc(100% + 40px);
368
  margin-left: -20px;
@@ -373,7 +373,7 @@ span#wpo_smush_delete_backup_done {
373
  text-decoration: none;
374
  }
375
 
376
- .wpo-fieldgroup .button.toggle-smush-advanced span.dashicons {
377
  text-decoration: none;
378
  font-size: 16px;
379
  height: 16px;
@@ -382,35 +382,35 @@ span#wpo_smush_delete_backup_done {
382
  transition: .2s all;
383
  }
384
 
385
- .wpo-fieldgroup .toggle-smush-advanced span.text {
386
  background: #F2F4F4;
387
  z-index: 1;
388
  position: relative;
389
  padding-right: 5px;
390
  }
391
 
392
- .wpo-fieldgroup .button.toggle-smush-advanced:hover,
393
- .wpo-fieldgroup .button.toggle-smush-advanced:focus {
394
  background: transparent;
395
  }
396
 
397
- .wpo-fieldgroup .button.toggle-smush-advanced .toggle-smush-advanced__text-show {
398
  display: inline-block;
399
  }
400
 
401
- .wpo-fieldgroup .button.toggle-smush-advanced .toggle-smush-advanced__text-hide {
402
  display: none;
403
  }
404
 
405
- .wpo-fieldgroup .button.toggle-smush-advanced.opened .toggle-smush-advanced__text-show {
406
  display: none;
407
  }
408
 
409
- .wpo-fieldgroup .button.toggle-smush-advanced.opened .toggle-smush-advanced__text-hide {
410
  display: inline-block;
411
  }
412
 
413
- .wpo-fieldgroup .button.toggle-smush-advanced.opened::before {
414
  content: '';
415
  border-top: 1px solid #CCC;
416
  width: 100%;
@@ -419,15 +419,19 @@ span#wpo_smush_delete_backup_done {
419
  left: 0;
420
  }
421
 
422
- .wpo-fieldgroup .button.toggle-smush-advanced.opened span.dashicons {
423
  transform: rotate(180deg);
424
  }
425
 
426
- .wpo-fieldgroup .smush-advanced {
427
  display: none;
428
  }
429
 
430
- .wpo-fieldgroup .button.toggle-smush-advanced.opened + .smush-advanced {
 
 
 
 
431
  display: block;
432
  }
433
 
@@ -663,7 +667,7 @@ img#wpo_smush_images_clear_stats_spinner {
663
  clear: both;
664
  }
665
 
666
- #smush-metabox-inside-wrapper .toggle-smush-advanced {
667
  cursor: pointer;
668
  display: block;
669
  clear: both;
@@ -671,11 +675,11 @@ img#wpo_smush_images_clear_stats_spinner {
671
  margin-bottom: 10px;
672
  }
673
 
674
- #smush-metabox-inside-wrapper .toggle-smush-advanced:not(.opened) ~ .smush-advanced {
675
  display: none;
676
  }
677
 
678
- #smush-metabox-inside-wrapper .toggle-smush-advanced.opened ~ .smush-advanced {
679
  display: block !important;
680
  }
681
 
356
  font-size: 15px;
357
  }
358
 
359
+ .wpo-fieldgroup .wpo-toggle-advanced-options {
360
  cursor: pointer;
361
  text-decoration: underline;
362
  color: #0088BC;
363
  }
364
 
365
+ .wpo-fieldgroup .button.wpo-toggle-advanced-options {
366
  display: block;
367
  width: calc(100% + 40px);
368
  margin-left: -20px;
373
  text-decoration: none;
374
  }
375
 
376
+ .wpo-fieldgroup .button.wpo-toggle-advanced-options span.dashicons {
377
  text-decoration: none;
378
  font-size: 16px;
379
  height: 16px;
382
  transition: .2s all;
383
  }
384
 
385
+ .wpo-fieldgroup .wpo-toggle-advanced-options span.text {
386
  background: #F2F4F4;
387
  z-index: 1;
388
  position: relative;
389
  padding-right: 5px;
390
  }
391
 
392
+ .wpo-fieldgroup .button.wpo-toggle-advanced-options:hover,
393
+ .wpo-fieldgroup .button.wpo-toggle-advanced-options:focus {
394
  background: transparent;
395
  }
396
 
397
+ .wpo-fieldgroup .button.wpo-toggle-advanced-options .wpo-toggle-advanced-options__text-show {
398
  display: inline-block;
399
  }
400
 
401
+ .wpo-fieldgroup .button.wpo-toggle-advanced-options .wpo-toggle-advanced-options__text-hide {
402
  display: none;
403
  }
404
 
405
+ .wpo-fieldgroup .button.wpo-toggle-advanced-options.opened .wpo-toggle-advanced-options__text-show {
406
  display: none;
407
  }
408
 
409
+ .wpo-fieldgroup .button.wpo-toggle-advanced-options.opened .wpo-toggle-advanced-options__text-hide {
410
  display: inline-block;
411
  }
412
 
413
+ .wpo-fieldgroup .button.wpo-toggle-advanced-options.opened::before {
414
  content: '';
415
  border-top: 1px solid #CCC;
416
  width: 100%;
419
  left: 0;
420
  }
421
 
422
+ .wpo-fieldgroup .button.wpo-toggle-advanced-options.opened span.dashicons {
423
  transform: rotate(180deg);
424
  }
425
 
426
+ .wpo-fieldgroup .wpo-advanced-options {
427
  display: none;
428
  }
429
 
430
+ .wpo-advanced-options > fieldset:first-child {
431
+ margin-top: 10px;
432
+ }
433
+
434
+ .wpo-fieldgroup .button.wpo-toggle-advanced-options.opened + .wpo-advanced-options {
435
  display: block;
436
  }
437
 
667
  clear: both;
668
  }
669
 
670
+ #smush-metabox-inside-wrapper .wpo-toggle-advanced-options {
671
  cursor: pointer;
672
  display: block;
673
  clear: both;
675
  margin-bottom: 10px;
676
  }
677
 
678
+ #smush-metabox-inside-wrapper .wpo-toggle-advanced-options:not(.opened) ~ .wpo-advanced-options {
679
  display: none;
680
  }
681
 
682
+ #smush-metabox-inside-wrapper .wpo-toggle-advanced-options.opened ~ .wpo-advanced-options {
683
  display: block !important;
684
  }
685
 
css/wp-optimize-admin-3-0-16.min.css DELETED
@@ -1,2 +0,0 @@
1
- .wpo_hidden{display:none !important}.wpo_info{background:#FFF;color:#444;font-family:-apple-system,"BlinkMacSystemFont","Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif;margin:2em auto;padding:1em 2em;max-width:700px;box-shadow:0 1px 3px rgba(0,0,0,0.13)}#wp-optimize-wrap .widefat thead th,#wp-optimize-wrap .widefat thead td{border-bottom:1px solid #e1e1e1}#wp-optimize-wrap .widefat td,#wp-optimize-wrap .widefat th{padding:8px 10px}.wpo_primary_big{padding:4px 6px !important;font-size:22px !important;min-height:34px;min-width:200px}.wpo_section{clear:both;padding:0;margin:0}.wp-optimize-settings{margin-bottom:16px}.wp-optimize-settings td>label{font-weight:bold;display:block;margin-bottom:8px}.wpo_col{display:block;float:left;margin:1% 0 1% 1%}.wpo_col:first-child{margin-left:0}.wpo_group:before,.wpo_group:after{content:"";display:table}.wpo_group:after{clear:both}.wpo_half_width{width:48%}.wpo_span_3_of_3{width:100%}.wpo_span_2_of_3{width:65.3%}.wpo_span_1_of_3{width:32.1%}#wp-optimize-wrap .nav-tab-wrapper{margin:0}@media screen and (min-width:549px){.show_on_default_sizes{display:block !important}.show_on_mobile_sizes{display:none !important}}@media screen and (max-width:548px){.show_on_default_sizes{display:none !important}.show_on_mobile_sizes{display:block !important}}@media screen and (max-width:768px){.wpo_col{margin:1% 0}.wpo_span_3_of_3{width:100%}.wpo_span_2_of_3{width:100%}.wpo_span_1_of_3{width:100%}.wpo_half_width{width:100%}}.wp-optimize-setting-is-sensitive td>label::before{content:"\f534";font-family:'dashicons';display:inline-block;margin-right:6px;font-style:normal;line-height:1;vertical-align:middle;width:20px;font-size:18px;height:20px;text-align:center;color:#72777c}.wpo-run-optimizations__container{margin-bottom:15px}td.wp-optimize-settings-optimization-checkbox{width:18px;padding-left:4px;padding-right:0}.wp-optimize-settings-optimization-checkbox input{margin:0;padding:0}#retention-period{width:60px}.wp-optimize-settings-optimization-info{font-size:80%;font-style:italic}img.addons{display:block;margin-left:auto;margin-right:auto;margin-bottom:20px;max-height:44px;height:auto;max-width:100%}.wpo_spinner{width:18px;height:18px;padding-left:10px;display:none;position:relative;top:4px}.optimization_spinner{width:20px;height:20px}#wp-optimize-auto-options{margin:20px 0 0 28px}.display-none{display:none}.visibility-hidden{visibility:hidden}.margin-one-percent{margin:1%}#save_done,.save-done{color:#d94f00;font-size:220% !important}.wp-optimize-settings-optimization-info a{text-decoration:underline}.wp-optimize-settings-optimization-run-spinner{position:relative;top:2px}@media screen and (min-width:782px){td.wp-optimize-settings-optimization-run{width:180px;padding-top:16px}}#wpoptimize_table_list .tablesorter-filter-row{display:none !important}#wpoptimize_table_list .optimization_spinner{position:relative;top:2px;left:5px}#wpoptimize_table_list .optimization_spinner.visibility-hidden{display:none}#wpoptimize_table_list_filter{width:100%;margin-bottom:15px}#wpoptimize_table_list_tables_not_found{display:none;margin:20px 0}div#wpoptimize_table_list_tables_not_found+h3{margin-top:30px}#wpoptimize_table_list tr th:first-child,#wpoptimize_table_list tr td:first-child{display:none}#optimize_form .select2-container,#wp-optimize-auto-options .select2-container{width:50% !important;top:-5px;height:40px;margin-left:10px}#wpoptimize_table_list .optimization_done_icon{color:#009b24;font-size:200%;display:inline-block;position:relative}#wpo_sitelist_show_moreoptions_cron{font-size:13px;line-height:1.5;letter-spacing:1px}#wp-optimize-nav-tab-contents-images .wpo_span_2_of_3 h3{display:inline-block}.wpo_remove_selected_sizes_btn__container{margin-top:20px}.unused-image-sizes__label{display:block;line-height:1.6}@media(max-width:782px){.unused-image-sizes__label{margin-left:30px;margin-bottom:15px;line-height:1;word-break:break-word}.unused-image-sizes__label input[type=checkbox]{margin-left:-30px}body.rtl .unused-image-sizes__label{margin-right:30px;margin-left:0}body.rtl .unused-image-sizes__label input[type=checkbox]{margin-left:4px;margin-right:-30px}}#wp-optimize-nav-tab-contents-tables a{vertical-align:middle}#wpo_sitelist_moreoptions,#wpo_sitelist_moreoptions_cron{margin:4px 16px 6px 0;border:1px dotted;padding:6px 10px;max-height:300px;overflow-y:scroll;overflow-x:hidden}#wpo_sitelist_moreoptions{max-height:150px;margin-right:0}#wpo_settings_sites_list li,#wpo_settings_sites_list li a{font-size:13px;line-height:1.5}#wpo_sitelist_moreoptions_cron li{padding-left:20px}#wpo_import_error_message{display:none;color:#9b0000}#wpo_import_success_message{display:none;color:#46b450}#wp-optimize-logging-options{margin-top:10px}.wpo_logging_header{font-weight:bold;border-top:1px solid #333;border-bottom:1px solid #333;padding:5px 0;margin:0}.wpo_logging_row{border-bottom:1px solid #a1a2a3;padding:5px 0}.wpo_logging_logger_title,.wpo_logging_options_title,.wpo_logging_status_title,.wpo_logging_actions_title,.wpo_logging_logger_row,.wpo_logging_options_row,.wpo_logging_status_row,.wpo_logging_actions_row{display:inline-block;vertical-align:middle}.wpo_logging_logger_title,.wpo_logging_logger_row{width:38%}.wpo_logging_options_title,.wpo_logging_options_row{width:44%}.wpo_logging_status_title,.wpo_logging_status_row{width:8%}.wpo_logging_actions_title,.wpo_logging_actions_row{width:7%}.wpo_logging_actions_row{text-align:right}.wpo_logging_options_row{word-wrap:break-word}.wpo_logging_actions_row .dashicons-no-alt,.wpo_add_logger_form .dashicons-no-alt{background-color:#f06666;color:#FFF;width:20px;height:20px;border-radius:20px;display:inline-block;cursor:pointer;margin-left:5px}.wpo_add_logger_form .dashicons-no-alt{margin-top:12px;margin-right:10px;float:right}.wpo_logger_type{width:90%;margin-top:10px}.wpo_logger_addition_option{width:100%;margin-top:5px}.wpo_alert_notice{background-color:#f06666;color:#FFF;padding:5px;display:block;margin-bottom:5px;border-radius:5px}.wpo_error_field{border-color:#f06666 !important}.save_settings_reminder{display:none;color:#333;padding:15px 20px;background-color:#f0a5a4;border-radius:3px;margin:15px 0}#wpo_remove_selected_sizes{margin-top:20px}.wpo_unused_images_buttons_wrap{float:right;margin-right:20px}.wpo_unused_images_container h3{min-width:150px}#wpo_unused_images,#wpo_smush_images_grid{max-height:500px;overflow-y:auto}#wpo_unused_images a{outline:0}#wp-optimize-nav-tab-wpo_database-tables-contents .wpo-take-a-backup{margin-left:1%}.run-single-table-delete{margin-top:3px}#wpo_browser_cache_output,#wpo_gzip_compression_output,#wpo_advanced_cache_output{background:#f0f0f0;padding:10px;border:1px solid #CCC;white-space:pre-wrap}#wpo_gzip_compression_error_message,.wpo-error{color:#9b0000}.notice.wpo-error__enabling-cache{white-space:pre;margin-bottom:15px}a.loading.wpo-refresh-gzip-status{color:rgba(68,68,68,0.5);text-decoration:none}a.loading.wpo-refresh-gzip-status img.wpo_spinner.display-none{display:inline-block}#wpo_browser_cache_expire_days,#wpo_browser_cache_expire_hours{width:50px}.wpo-enabled .wpo-disabled{display:none}.wpo-disabled .wpo-enabled{display:none}.wpo-button-wrap{margin-top:10px}body[class*="toplevel_page_WP-Optimize"] #wpbody,body[class*="wp-optimize_page_"] #wpbody{padding-right:15px}@media screen and (max-width:768px){body[class*="toplevel_page_WP-Optimize"] #wpbody,body[class*="wp-optimize_page_"] #wpbody{padding-right:0}}body.toplevel_page_WP-Optimize.rtl #wpbody{padding-left:15px;padding-right:0}@media screen and (max-width:768px){body.toplevel_page_WP-Optimize.rtl #wpbody{padding-left:10px}}body[class*="toplevel_page_WP-Optimize"] #wpbody-content,body[class*="wp-optimize_page_"] #wpbody-content{padding-top:80px}@media(max-width:600px){body[class*="toplevel_page_WP-Optimize"] #wpbody-content,body[class*="wp-optimize_page_"] #wpbody-content{padding-top:0}}@media(min-width:820px){body[class*="toplevel_page_WP-Optimize"] #wpbody-content,body[class*="wp-optimize_page_"] #wpbody-content{padding-top:100px}}#wp-optimize-wrap{position:relative;padding-top:20px}@media(max-width:600px){#wp-optimize-wrap{padding-top:110px}}@media(max-width:782px){#wp-optimize-wrap{margin-right:0}}.wpo-main-header{height:77px;position:fixed;top:32px;left:160px;background:#FFF;right:0;z-index:9980}@media(min-width:820px){.wpo-main-header{height:105px}}.wpo-main-header .wpo-logo__container{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;position:relative;height:100%;line-height:1;font-size:1rem;padding-left:50px;margin-left:10px}.wpo-main-header .wpo-logo{position:absolute;left:0;top:50%;transform:translateY(-50%);width:50px}.wpo-main-header .wpo-subheader{margin:0;font-weight:300;color:#72777c;line-height:1.3}@media(max-width:1080px){.wpo-main-header .wpo-subheader{display:none}}.wpo-main-header p.wpo-header-links{margin:0;font-size:.7rem;position:absolute;right:0;padding:6px 15px;background:#edeeef;border-bottom-left-radius:5px;z-index:1}.wpo-main-header p.wpo-header-links a{text-decoration:none}.wpo-main-header p.wpo-header-links .wpo-header-links__label{color:#82868b;position:absolute;right:100%;width:110px;text-align:right;padding-right:10px}@media(max-width:820px){.wpo-main-header p.wpo-header-links{display:none}}.wpo-main-header p.wpo-header-links__mobile{padding:10px;background:#edeeef;margin-bottom:0}@media(min-width:820px){.wpo-main-header p.wpo-header-links__mobile{display:none}}.wpo-main-header p.wpo-header-links__mobile a{display:inline-block;padding:4px;font-size:.8rem}.wpo-main-header p.wpo-header-links__mobile .wpo-header-links__label{color:#82868b}@media(max-width:600px){.wpo-main-header .wpo-logo__container strong{width:140px;display:inline-block}}@media(max-width:960px){body.auto-fold .wpo-main-header{left:36px}}@media(max-width:782px){body.auto-fold .wpo-main-header{left:0;top:46px}}@media(max-width:600px){body.auto-fold .wpo-main-header{position:absolute;left:-10px;right:-10px;top:10px}}@media(max-width:600px){body.auto-fold #screen-meta+#wp-optimize-wrap .wpo-main-header{top:0}}@media(min-width:782px){body.folded .wpo-main-header{left:36px}}body.is-scrolled .wpo-main-header{box-shadow:0 5px 25px rgba(0,0,0,0.17)}body.rtl .wpo-main-header{right:160px;left:0}body.rtl .wpo-main-header .wpo-logo__container{padding-left:10px;padding-right:50px;margin-left:0;margin-right:10px}body.rtl .wpo-main-header .wpo-logo{position:absolute;left:auto;right:0}body.rtl .wpo-main-header p.wpo-header-links{right:auto;left:0;border-bottom-right-radius:5px;border-bottom-left-radius:0}body.rtl .wpo-main-header p.wpo-header-links .wpo-header-links__label{position:absolute;left:100%;right:auto;width:110px;text-align:left;padding-left:10px}@media(max-width:960px){body.rtl.auto-fold .wpo-main-header{right:36px}}@media(max-width:782px){body.rtl.auto-fold .wpo-main-header{right:0;top:46px}}@media(max-width:600px){body.rtl.auto-fold .wpo-main-header{position:absolute;left:-10px;right:-10px;top:10px}}@media(min-width:782px){body.rtl.folded .wpo-main-header{right:36px;left:0}}body.rtl .wpo-page{padding-right:0}@media(min-width:769px){}.wpo-page:not(.active){display:none}.wpo-introduction-notice{padding:15px 20px;margin-top:30px;margin-bottom:30px;background:#FFF url('../images/notices/logo-bg-notice.png') no-repeat 100% 100%}.wpo-introduction-notice h3{font-size:2em}.wpo-introduction-notice p:not(.font-size__normal){font-size:1.2em}.wpo-introduction-notice .wpo-introduction-notice__footer-links{padding-top:20px}.wpo-introduction-notice .wpo-introduction-notice__footer-links>a,.wpo-introduction-notice .wpo-introduction-notice__footer-links>span{display:inline-block;margin-left:5px;margin-right:5px}@media(min-width:1200px){.wpo-tab-postbox.right-col{width:350px;float:right;box-sizing:border-box;margin-top:3.1rem}.right-col+.wpo-main{float:left;box-sizing:border-box;width:calc(100% - 380px)}}@keyframes rotate{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@media(max-width:782px){#wp-optimize-wrap .button-large{display:block;width:100%}}#wp-optimize-wrap .red{color:#e07575}#wp-optimize-wrap div[id*="_notice"] div.updated,#wp-optimize-wrap>.notice{margin-left:0;margin-right:0}.notice.notice-warning.wpo-warning{margin-bottom:18px}.notice.notice-warning.wpo-warning p{padding-left:36px;position:relative}.notice.notice-warning.wpo-warning p>.dashicons{position:absolute;left:0;font-size:26px;top:50%;transform:translateY(-50%);height:26px;color:#ffb900}.button.button-block{display:block;width:100%;text-align:center}.wpo-refresh-button{float:right}.wpo-refresh-button:hover{cursor:pointer}.wpo-refresh-button .dashicons{text-decoration:none;line-height:inherit;font-size:inherit}*[class*="wpo-badge"]{display:inline-block;font-size:.8em;text-transform:uppercase;background:#f2f4f5;padding:3px 5px;line-height:1;border-radius:3px}.wpo-badge__new{background:#dbe3e6;color:#00689a}.wpo-first-child{margin-top:0}#save_done,.save-done{color:#009b24;font-size:250%}p.wpo-take-a-backup{display:inline-block;margin:0;line-height:1;padding-top:8px}@media(min-width:782px){p.wpo-take-a-backup{margin-left:20px}}#wp-optimize-wrap .nav-tab-wrapper ~ .wp-optimize-nav-tab-contents>.postbox{border:0}#wp-optimize-wrap .nav-tab-wrapper ~ .wp-optimize-nav-tab-contents>.postbox>h3:first-child{margin-top:0}.wpo-p25,.postbox.wpo-tab-postbox{padding:25px}.wpo-tab-postbox>h3:first-child{margin-top:0}.wpo-fieldgroup{background:#f2f4f5;border-radius:8px;padding:20px}.wpo-fieldgroup:not(:last-child){margin-bottom:2em}.wpo-fieldgroup>*:first-child{margin-top:0}.wpo-fieldgroup>*:last-child{margin-bottom:0}.wpo-fieldgroup.premium-only{position:relative}.wpo-fieldgroup .switch+label{font-weight:600}.wpo-fieldgroup code{font-size:inherit;background:#d8dbdc;border-radius:3px}.wpo-fieldgroup__subgroup:not(:last-of-type){margin-bottom:20px}#wp-optimize-wrap .switch{position:relative;display:inline-block;width:38px;height:18px;margin-right:6px;box-sizing:border-box}#wp-optimize-wrap .switch input{opacity:0;width:0;height:0}#wp-optimize-wrap .switch .slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#f2f4f5;transition:.2s}#wp-optimize-wrap .switch .slider::before{position:absolute;content:"";height:8px;width:8px;left:2px;bottom:2px;background-color:#555d66;border:1px solid #555d66;transition:all .2s}#wp-optimize-wrap .switch .slider::after{content:'';display:block;position:absolute;height:4px;width:3px;right:4px;top:4px;border-radius:50%;border:1px solid #72777c;box-sizing:content-box}#wp-optimize-wrap .switch .slider.round{border-radius:23px;border:2px solid #555d66}#wp-optimize-wrap .switch .slider.round::before{border-radius:50%}#wp-optimize-wrap .switch input:checked+.slider{background:#0272aa;border-color:#0272aa}#wp-optimize-wrap .switch input:checked+.slider::before{background:#FFF;border-color:#FFF;transform:translateX(20px)}#wp-optimize-wrap .switch input:checked+.slider::after{content:'';display:block;position:absolute;height:6px;width:2px;left:7px;top:4px;background:#FFF;border:0}#wp-optimize-wrap .switch input:focus+.slider{box-shadow:0 0 0 2px #f2f4f5,0 0 0 3px #555d66}#wp-optimize-wrap .switch-container{display:block;clear:both}#wp-optimize-wrap .switch-container label{line-height:1;vertical-align:middle}#wp-optimize-wrap .switch-container+small{margin-left:49px}#wp-optimize-wrap .wpo-fieldgroup>.switch-container:first-child{padding-top:0}.wpo-info{position:relative;display:inline-block}@media(max-width:480px){.wpo-info{display:block}}.wpo-info__content{opacity:0;visibility:hidden;position:absolute;top:100%;left:-25px;background:#FFF;padding:20px;width:380px;max-width:380px;z-index:5;box-shadow:0 11px 25px 0 rgba(0,0,0,0),0 11px 25px 3000px rgba(0,0,0,0);transition:.2s all}@media(max-width:480px){.wpo-info__content{width:auto}}span.wpo-info__close{display:none;margin-left:20px;color:#444}.wpo-info.opened span.wpo-info__close{display:inline-block}.wpo-info.opened .wpo-info__content{opacity:1;visibility:visible;box-shadow:0 11px 25px 0 rgba(0,0,0,0.3),0 11px 25px 3000px rgba(0,0,0,0.3)}.wpo-info.opened a.wpo-info__trigger{z-index:6}.wpo-info__content img,.wpo-info__content iframe{max-width:100%}a.wpo-info__trigger{display:inline-block;text-decoration:none;padding:10px;position:relative;background:#FFF;margin-left:-10px}a.wpo-info__trigger span.dashicons{text-decoration:none;vertical-align:middle}.wpo-rotate{animation:rotate 1s linear infinite;transform-origin:50% 50%}#wp-optimize-wrap h2.nav-tab-wrapper{margin-bottom:0;border-bottom:0;position:relative}#wp-optimize-wrap h2.nav-tab-wrapper .nav-tab,#wp-optimize-wrap h2.nav-tab-wrapper .nav-tab:hover,#wp-optimize-wrap h2.nav-tab-wrapper .nav-tab:focus,#wp-optimize-wrap h2.nav-tab-wrapper .nav-tab:focus:active{border:0;background:transparent;margin:0;border-top:3px solid transparent;padding:7px 15px;color:#0272aa}#wp-optimize-wrap h2.nav-tab-wrapper .nav-tab .dashicons,#wp-optimize-wrap h2.nav-tab-wrapper .nav-tab:hover .dashicons,#wp-optimize-wrap h2.nav-tab-wrapper .nav-tab:focus .dashicons,#wp-optimize-wrap h2.nav-tab-wrapper .nav-tab:focus:active .dashicons{display:block;margin:0 auto;color:#72777c;font-size:30px;width:30px;height:30px}#wp-optimize-wrap h2.nav-tab-wrapper .nav-tab span.premium-only,#wp-optimize-wrap h2.nav-tab-wrapper .nav-tab:hover span.premium-only,#wp-optimize-wrap h2.nav-tab-wrapper .nav-tab:focus span.premium-only,#wp-optimize-wrap h2.nav-tab-wrapper .nav-tab:focus:active span.premium-only{display:inline-block;margin-left:6px;padding:4px;font-size:10px;background:#0272aa;line-height:1;border-radius:3px;color:#FFF;font-weight:300;text-transform:uppercase;letter-spacing:.06em}#wp-optimize-wrap h2.nav-tab-wrapper .nav-tab-active,#wp-optimize-wrap h2.nav-tab-wrapper .nav-tab-active:hover,#wp-optimize-wrap h2.nav-tab-wrapper .nav-tab-active:focus,#wp-optimize-wrap h2.nav-tab-wrapper .nav-tab-active:focus:active{background:#FFF;box-shadow:0 0 1px rgba(0,0,0,0.04);border-top-color:#0272aa}#wp-optimize-wrap h2.nav-tab-wrapper .nav-tab-active .dashicons,#wp-optimize-wrap h2.nav-tab-wrapper .nav-tab-active:hover .dashicons,#wp-optimize-wrap h2.nav-tab-wrapper .nav-tab-active:focus .dashicons,#wp-optimize-wrap h2.nav-tab-wrapper .nav-tab-active:focus:active .dashicons{color:#0272aa}#wp-optimize-wrap h2.nav-tab-wrapper .wpo-feedback{display:block;float:right;position:relative}#wp-optimize-wrap h2.nav-tab-wrapper .wpo-feedback>.nav-tab,#wp-optimize-wrap h2.nav-tab-wrapper .wpo-feedback>.nav-tab:hover,#wp-optimize-wrap h2.nav-tab-wrapper .wpo-feedback>.nav-tab:focus,#wp-optimize-wrap h2.nav-tab-wrapper .wpo-feedback>.nav-tab:focus:active{position:relative}#wp-optimize-wrap h2.nav-tab-wrapper .wpo-feedback>.nav-tab .dashicons,#wp-optimize-wrap h2.nav-tab-wrapper .wpo-feedback>.nav-tab:hover .dashicons,#wp-optimize-wrap h2.nav-tab-wrapper .wpo-feedback>.nav-tab:focus .dashicons,#wp-optimize-wrap h2.nav-tab-wrapper .wpo-feedback>.nav-tab:focus:active .dashicons{display:inline-block;font-size:20px;height:18px;transform:translateY(4px)}#wp-optimize-wrap h2.nav-tab-wrapper .wpo-feedback>div{display:none}#wp-optimize-wrap h2.nav-tab-wrapper .wpo-feedback:hover a.nav-tab::after{content:'';display:block;position:absolute;bottom:0;right:0;height:2px;width:100%;background-color:#0172aa}#wp-optimize-wrap h2.nav-tab-wrapper .wpo-feedback:hover>div{position:absolute;display:block;background:#FFF;padding:15px;right:0;top:100%;z-index:4;box-shadow:0 11px 25px 0 rgba(0,0,0,0.1);width:350px}#wp-optimize-wrap h2.nav-tab-wrapper .wpo-feedback:hover>div a{display:block;font-size:14px;font-weight:normal;padding:6px 3px;text-align:center}@media(max-width:782px){#wp-optimize-wrap h2.nav-tab-wrapper .wpo-feedback{display:none}#wp-optimize-wrap h2.nav-tab-wrapper a:not(.nav-tab-active){display:none}}#wp-optimize-wrap h2.nav-tab-wrapper a[role="toggle-menu"]{display:block;float:right}@media(min-width:782px){#wp-optimize-wrap h2.nav-tab-wrapper a[role="toggle-menu"]{display:none}}#wp-optimize-wrap h2.nav-tab-wrapper a.nav-tab.wp-optimize-nav-tab__back,#wp-optimize-wrap h2.nav-tab-wrapper a.nav-tab.wp-optimize-nav-tab__back:focus:active{text-align:right}#wp-optimize-wrap h2.nav-tab-wrapper a.nav-tab.wp-optimize-nav-tab__back .dashicons,#wp-optimize-wrap h2.nav-tab-wrapper a.nav-tab.wp-optimize-nav-tab__back:focus:active .dashicons{color:#b5b9be;font-size:18px;display:inline-block;height:auto;line-height:inherit;width:20px}@media(min-width:782px){#wp-optimize-wrap h2.nav-tab-wrapper a.nav-tab.wp-optimize-nav-tab__back,#wp-optimize-wrap h2.nav-tab-wrapper a.nav-tab.wp-optimize-nav-tab__back:focus:active{position:absolute;bottom:14px;right:0;font-size:12px;font-weight:400;text-decoration:none;padding:0}#wp-optimize-wrap h2.nav-tab-wrapper a.nav-tab.wp-optimize-nav-tab__back .dashicons,#wp-optimize-wrap h2.nav-tab-wrapper a.nav-tab.wp-optimize-nav-tab__back:focus:active .dashicons{color:#b5b9be;font-size:18px;display:inline-block;height:auto;line-height:inherit;width:20px}}@media(max-width:782px){.wpo-mobile-menu-opened .wpo-main .wpo-tab-postbox{// display:none}.wpo-mobile-menu-opened h2.nav-tab-wrapper a{display:block;float:none}.wpo-mobile-menu-opened h2.nav-tab-wrapper a.nav-tab{display:block !important}.wpo-mobile-menu-opened h2.nav-tab-wrapper a:not(.nav-tab-active){background:#f9f9f9 !important}.wpo-mobile-menu-opened h2.nav-tab-wrapper a.nav-tab-active,.wpo-mobile-menu-opened h2.nav-tab-wrapper a.nav-tab-active:focus{border-top:0;border-left:3px solid}.wpo-mobile-menu-opened h2.nav-tab-wrapper a.nav-tab-active .dashicons,.wpo-mobile-menu-opened h2.nav-tab-wrapper a.nav-tab-active:focus .dashicons,.wpo-mobile-menu-opened h2.nav-tab-wrapper a:focus .dashicons,.wpo-mobile-menu-opened h2.nav-tab-wrapper a:hover .dashicons,.wpo-mobile-menu-opened h2.nav-tab-wrapper a .dashicons{display:inline-block;line-height:inherit}.wpo-mobile-menu-opened h2.nav-tab-wrapper a[role="toggle-menu"]{display:none}}.wpo-pages-menu{position:absolute;bottom:0;right:0;display:none}@media(max-width:820px){.opened+.wpo-pages-menu{display:block;box-shadow:0 5px 25px rgba(0,0,0,0.17)}}@media(min-width:821px){.wpo-pages-menu{display:-ms-flexbox;display:flex;height:77px}}.wpo-pages-menu>a{text-decoration:none;position:relative;color:inherit;text-align:center;box-sizing:border-box;display:block;color:#555d66}@media(min-width:821px){.wpo-pages-menu>a{padding:0 8px;height:77px;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center}.wpo-pages-menu>a>span{display:block;margin:0 auto}}@media(max-width:820px){.wpo-pages-menu>a{padding:15px;font-size:1.2em}}.wpo-pages-menu>a.active::after{content:'';display:block;position:absolute;bottom:0;left:0;width:100%;height:3px;background:#e46b1f;color:#191e23}@media(max-width:820px){.wpo-pages-menu>a.active::after{width:3px;height:100%}}@media(max-width:820px){.wpo-pages-menu>a.active{color:#e46b1f}}.wpo-pages-menu>a:hover{background:#f9f9f9;color:#191e23}.wpo-pages-menu span.separator{display:block;width:2px;background:#efefef;margin-top:18px;margin-bottom:18px;margin-right:5px;margin-left:5px}@media(max-width:820px){.wpo-pages-menu span.separator{width:80%;height:2px;margin:10px 10%}}@media(max-width:820px){.wpo-pages-menu{text-align:center;top:100%;width:100%;bottom:auto;background:#FFF}}body.rtl .wpo-pages-menu{left:0;right:auto}#wp-optimize-nav-page-menu{position:absolute;right:0;bottom:0;display:-ms-flexbox;display:flex;height:77px;-ms-flex-direction:column;flex-direction:column;padding:0 20px;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;text-decoration:none}#wp-optimize-nav-page-menu:not(.opened) .dashicons-no-alt{display:none}#wp-optimize-nav-page-menu.opened .dashicons-menu{display:none}@media(min-width:821px){#wp-optimize-nav-page-menu{display:none}}body.rtl #wp-optimize-nav-page-menu{right:auto;left:0}.wpo-dashboard-pages-menu{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.wpo-dashboard-pages-menu[data-itemscount="1"] .wpo-dashboard-pages-menu__item,.wpo-dashboard-pages-menu[data-itemscount="2"] .wpo-dashboard-pages-menu__item,.wpo-dashboard-pages-menu[data-itemscount="3"] .wpo-dashboard-pages-menu__item{width:calc(33.333% - 13.33333px)}.wpo-dashboard-pages-menu[data-itemscount="4"] .wpo-dashboard-pages-menu__item{width:calc(25% - 15px)}.wpo-dashboard-pages-menu[data-itemscount="5"] .wpo-dashboard-pages-menu__item{width:calc(20% - 16px)}.wpo-dashboard-pages-menu[data-itemscount="6"] .wpo-dashboard-pages-menu__item{width:calc(16.66667% - 16.66667px)}.wpo-dashboard-pages-menu .postbox.wpo-dashboard-pages-menu__item{padding:20px;margin-right:20px;box-sizing:border-box;padding-bottom:60px;min-width:0}.wpo-dashboard-pages-menu .postbox.wpo-dashboard-pages-menu__item:last-child{margin-right:0}.wpo-dashboard-pages-menu .postbox.wpo-dashboard-pages-menu__item h3{margin-top:0}.wpo-dashboard-pages-menu .postbox.wpo-dashboard-pages-menu__item h3 .dashicons{color:#72777c;line-height:1;height:18px;margin-top:-2px;margin-right:10px}.wpo-dashboard-pages-menu .postbox.wpo-dashboard-pages-menu__item a{position:absolute;bottom:20px;left:20px;width:calc(100% - 40px) !important}@media(max-width:782px){.wpo-dashboard-pages-menu .postbox.wpo-dashboard-pages-menu__item{width:100%;margin-right:0;padding-bottom:20px}.wpo-dashboard-pages-menu .postbox.wpo-dashboard-pages-menu__item a.button.button-large{width:auto !important;left:auto;bottom:auto;top:50%;transform:translateY(-50%);right:20px}.wpo-dashboard-pages-menu .postbox.wpo-dashboard-pages-menu__item h3{margin:0}.wpo-dashboard-pages-menu .postbox.wpo-dashboard-pages-menu__item p{display:none}}#wpadminbar .quicklinks .menupop.hover ul li.separator .ab-item.ab-empty-item{height:2px;line-height:2px;background:rgba(255,255,255,0.0902);margin:5px 10px;width:auto;min-width:0}.wpo_unused_image,.wpo_smush_image{position:relative;margin:4px;width:calc(50% - 8px);text-align:center}@media(min-width:500px){.wpo_unused_image,.wpo_smush_image{width:calc(25% - 8px)}}@media(min-width:782px){.wpo_unused_image,.wpo_smush_image{width:calc(16.6666% - 8px)}}@media(min-width:1100px){.wpo_unused_image,.wpo_smush_image{width:calc(12.5% - 8px)}}.wpo_unused_image .wpo_unused_image__input,.wpo_smush_image .wpo_unused_image__input{position:absolute;top:10px;opacity:0;width:0;height:0}.wpo_unused_image label,.wpo_smush_image label{display:block;width:100%;position:relative;padding:1px;border:3px solid #f2f4f5;box-sizing:border-box}.wpo_unused_image label::before,.wpo_smush_image label::before{content:"";display:block;padding-top:100%}.wpo_unused_image label .thumbnail,.wpo_smush_image label .thumbnail{position:absolute;top:1px;left:1px;width:calc(100% - 2px);height:calc(100% - 2px);background-repeat:no-repeat;background-size:cover;background-position:50% 50%;overflow:hidden;background:rgba(220,220,220,0.2)}.wpo_unused_image label .thumbnail img,.wpo_smush_image label .thumbnail img{display:block;margin:0;max-height:100%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.wpo_unused_image label span.dashicons,.wpo_smush_image label span.dashicons{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:25px;width:25px;opacity:.2}.wpo_unused_image .wpo_unused_image__input:checked+label,.wpo_unused_image.selected label,.wpo_smush_image .wpo_unused_image__input:checked+label,.wpo_smush_image.selected label{border-color:#0272aa}.wpo_unused_image:focus-within label,.wpo_smush_image:focus-within label{box-shadow:0 0 4px #0272aa}.wpo_unused_image a,.wpo_unused_image a.button,.wpo_unused_image a.button:active,.wpo_smush_image a,.wpo_smush_image a.button,.wpo_smush_image a.button:active{position:absolute;z-index:2;bottom:13px;left:50%;transform:translateX(-50%);display:none}.wpo_unused_image:hover a,.wpo_unused_image:hover a.button,.wpo_unused_image:hover a.button:active,.wpo_smush_image:hover a,.wpo_smush_image:hover a.button,.wpo_smush_image:hover a.button:active{display:inline-block}#wpo_unused_images,#wpo_unused_images_trash,#wpo_smush_images_grid{width:calc(100% + 8px);margin-left:-4px;margin-right:-4px;max-height:500px;overflow-y:auto;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative}#wpo_unused_images .wpo-fieldgroup,#wpo_unused_images_trash .wpo-fieldgroup,#wpo_smush_images_grid .wpo-fieldgroup{width:100%;margin:4px}#wpo_unused_images a,#wpo_unused_images_trash a{outline:0}.wpo-unused-images__premium-mask,.wpo-unused-image-sizes__premium-mask{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1;background:linear-gradient(to bottom,rgba(255,255,255,0),rgba(255,255,255,0.85));display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.wpo-unused-image-sizes__premium-mask{background:linear-gradient(to bottom,rgba(255,255,255,0.3),rgba(255,255,255,0.85))}a.wpo-unused-images__premium-link{background:#FFF;display:inline-block;padding:10px;border-radius:3px;box-shadow:0 2px 8px rgba(0,0,0,0.3)}p.wpo-plugin-installed{color:#009b24}.wpo-repeater__add{display:inline-block;cursor:pointer;font-weight:bold;text-decoration:none}.wpo-plugin-family__premium h2{margin:0;padding:25px}.wpo-plugin-family__plugins{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:1px;padding-bottom:1px}.wpo-plugin-family__plugin{-ms-flex:auto;flex:auto;width:100%;padding:30px;box-sizing:border-box;border:1px solid #e3e4e7;margin-left:-1px;margin-bottom:-1px}@media(min-width:782px){.wpo-plugin-family__plugin{width:50%}.wpo-plugin-family__free .wpo-plugin-family__plugin{width:100%}}@media(max-width:1080px){.wpo-plugin-family__free .wpo-plugin-family__plugin{width:50%}}@media(max-width:782px){.wpo-plugin-family__free .wpo-plugin-family__plugin{width:100%}}div#wp-optimize-nav-tab-wpo_mayalso-may_also-contents .wpo-tab-postbox{padding:0}.wpo_feature_cont{width:64.5%}.wpo_plugin_family_cont{width:34.5%}@media(max-width:1080px){.wpo_feature_cont,.wpo_plugin_family_cont{width:100%;float:none;margin:0}}.wpo_feature_cont header,.wpo_plugin_family_cont header{padding:20px}@media(max-width:1080px){.wpo_feature_cont header,.wpo_plugin_family_cont header{padding:40px}}.wpo_feature_cont header h2,.wpo_plugin_family_cont header h2{margin:0}.wpo_feature_cont header p,.wpo_plugin_family_cont header p{margin-bottom:0}.wpo_feat_table,.wpo_feat_th,.wpo_feat_table td{border:0;border-collapse:collapse;background-color:white;font-size:120%;text-align:center}.wpo_feat_table td{border:1px solid #f1f1f1;border-bottom-width:4px;padding:15px}.wpo_feat_table td:nth-child(2),.wpo_feat_table td:nth-child(3){background:rgba(241,241,241,0.38)}.wpo_feat_table p{padding:0 10px;margin:5px 0;font-size:13px}.wpo_feat_table h4{margin:5px 0}.wpo_feat_table .dashicons{width:25px;height:25px;font-size:25px;line-height:1}.wpo_feat_table .dashicons-yes,.wpo_feat_table .updraft-yes{color:green}.wpo_feat_table .dashicons-no-alt,.wpo_feat_table .updraft-no{color:red}.wpo_feat_table tr.wpo-main-feature-row td{background:#f1f1f1;border-bottom-color:#fafafa}.wpo_feat_table tr.wpo-main-feature-row td img.wpo-premium-image{width:64px}.wpo-premium-image{display:none}@media screen and (min-width:720px){#wpoptimize_table_list_filter{width:40%}.wpo-premium-image{display:block;float:left;padding:16px 18px;width:30px;height:auto}}@media screen and (min-width:1220px){.wpo_feat_table td:nth-child(2),.wpo_feat_table td:nth-child(3){width:110px}}.other-plugin-title{text-decoration:none}@media screen and (max-width:782px){table.wpo_feat_table{display:block}table.wpo_feat_table tr{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}table.wpo_feat_table td{display:block}table.wpo_feat_table td:first-child{width:100%;border-bottom:0}table.wpo_feat_table td:not(:first-child){width:50%;box-sizing:border-box}table.wpo_feat_table td:first-child:empty{display:none}table.wpo_feat_table td[data-colname]::before{content:attr(data-colname);font-size:.8rem;color:#CCC;line-height:1}}.wpo-cache-feature-image{width:40px;padding:16px 14px}#wp-optimize-wrap .wp-list-table td{word-break:break-all}@media screen and (max-width:782px){#wp-optimize-wrap .wp-list-table.wp-list-table-mobile-labels tbody,#wp-optimize-wrap .wp-list-table.wp-list-table-mobile-labels tbody tr,#wp-optimize-wrap .wp-list-table.wp-list-table-mobile-labels tbody th,#wp-optimize-wrap .wp-list-table.wp-list-table-mobile-labels tbody td{display:block}#wp-optimize-wrap .wp-list-table.wp-list-table-mobile-labels tbody td{padding:3px 8px 3px 35%;word-break:break-word;box-sizing:border-box}#wp-optimize-wrap .wp-list-table.wp-list-table-mobile-labels tbody td::before{color:#b5b9be}#wp-optimize-wrap .wp-list-table.wp-list-table-mobile-labels thead,#wp-optimize-wrap .wp-list-table.wp-list-table-mobile-labels thead tr{display:block}#wp-optimize-wrap .wp-list-table.wp-list-table-mobile-labels thead th.column-primary{display:block;box-sizing:border-box}#wp-optimize-wrap .wp-list-table.wp-list-table-mobile-labels thead th:not(.column-primary){display:none !important}}body.rtl #wp-optimize-wrap .wpo-table-list-filter{text-align:left}@media screen and (max-width:782px){body.rtl #wp-optimize-wrap .wp-list-table.wp-list-table-mobile-labels tbody td{padding:3px 35% 3px 8px}}.tablesorter-headerRow th{vertical-align:top}th:not(.sorter-false) .tablesorter-header-inner{color:#0074ab}th:not(.sorter-false) .tablesorter-header-inner::after{content:'';font-family:'dashicons';font-size:20px;line-height:20px;height:20px;width:20px;display:none;vertical-align:bottom}th.tablesorter-header.tablesorter-headerAsc,th.tablesorter-header.tablesorter-headerDesc{font-weight:500;border-bottom-color:#0272aa}th.tablesorter-header.tablesorter-headerAsc .tablesorter-header-inner::after,th.tablesorter-header.tablesorter-headerDesc .tablesorter-header-inner::after{display:inline-block}th.tablesorter-header.tablesorter-headerDesc .tablesorter-header-inner::after{content:"\f140"}th.tablesorter-header.tablesorter-headerAsc .tablesorter-header-inner::after{content:"\f142"}th.tablesorter-header:focus{outline:0;box-shadow:0 0 3px rgba(0,116,171,0.78)}th.tablesorter-header:focus:not(.tablesorter-headerAsc):not(.tablesorter-headerDesc) .tablesorter-header-inner::after{content:"\f142";opacity:.5}.tablesorter.hasFilters tr.filtered{display:none}.wpo-text__dim .dashicons-info{margin-top:2px;margin-right:5px;border-radius:30px;background:#fff;color:#e07575}#wp-optimize-nav-tab-wpo_cache-advanced-contents textarea{width:100%;border-radius:5px;height:100px;min-height:100px;margin-top:10px;margin-bottom:10px}#page_cache_length_value{height:28px;position:relative;top:2px}#wp_optimize_preload_cache_status{margin-left:10px;display:inline-block;color:#82868b;font-size:smaller}.align-left{margin:10px 10px 0 0;float:left}textarea.cache-settings{display:block;clear:both;min-height:225px;overflow:scroll;min-width:75%;margin:10px 0}#wp-optimize-purge-cache,#wp-optimize-purge-cache ~ span,#wp-optimize-purge-cache ~ img{vertical-align:middle;top:auto}#wp-optimize-nav-tab-wpo_cache-cache-contents .wpo-error{font-size:12px}#wpo_browser_cache_error_message{padding-top:10px;padding-bottom:10px;margin-left:0;margin-bottom:10px}#wpo_browser_cache_error_message:empty{display:none}#wp-optimize-nav-tab-wpo_cache-advanced-contents label,#wp-optimize-nav-tab-wpo_cache-preload-contents label,#wp-optimize-nav-tab-wpo_cache-cache-contents label{font-weight:600}.wpo-gzip-already-enabled span.dashicons.dashicons-yes,.wpo-enabled>span.dashicons.dashicons-yes{font-size:40px;width:40px;height:40px;line-height:40px;vertical-align:middle;color:green}
2
- /*# sourceMappingURL=wp-optimize-admin-3-0-16.min.css.map */
 
 
css/wp-optimize-admin-3-0-16.min.css.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["css/wp-optimize-admin.scss","css/admin.css","css/scss/_layout.scss","css/scss/_common.scss","css/scss/_menu-and-tabs.scss","css/scss/_image-list.scss","css/scss/_plugin-family-tab.scss","css/scss/_table-sorter.scss","css/scss/_cache.scss"],"names":[],"mappings":"AAAA,YAAY;;AAcZ,gBAAgB;;ACdhB;CACC,yBAAyB;CACzB;;AAED;CACC,iBAAiB;CACjB,YAAY;CACZ,2IAA2I;CAC3I,iBAAiB;CACjB,iBAAiB;CACjB,iBAAiB;CAEjB,uCAAuC;CACvC;;AAED;CACC,iCAAiC;CACjC;;AAED;CACC,kBAAkB;CAClB;;AAED,gBAAgB;;AAChB;CACC,4BAA4B;CAC5B,2BAA2B;CAC3B,iBAAiB;CACjB,iBAAiB;CACjB;;AAED,gBAAgB;;AAChB;CACC,YAAY;CACZ,WAAW;CACX,UAAU;CACV;;AAED;CACC,oBAAoB;CACpB;;AAED;CACC,kBAAkB;CAClB,eAAe;CACf,mBAAmB;CACnB;;AAED,oBAAoB;;AACpB;CACC,eAAe;CACf,YAAY;CACZ,mBAAmB;CACnB;;AAED;CACC,eAAe;CACf;;AAED,gBAAgB;;AAChB;;CAEC,YAAY;CACZ,eAAe;CACf;;AAED;CACC,YAAY;CACZ;;AAED;CACC,WAAW;CACX;;AAED,qBAAqB;;AACrB;CACC,YAAY;CACZ;;AAED;CACC,aAAa;CACb;;AAED;CACC,aAAa;CACb;;AAED;CACC,UAAU;CACV;;AAED;;CAEC;EACC,0BAA0B;EAC1B;;CAED;EACC,yBAAyB;EACzB;;CAED;;AAED;;CAEC;EACC,yBAAyB;EACzB;;CAED;EACC,0BAA0B;EAC1B;;CAED;;AAED;;CAEC;EACC,aAAa;EACb;;CAED;EACC,YAAY;EACZ;;CAED;EACC,YAAY;EACZ;;CAED;EACC,YAAY;EACZ;;CAED;EACC,YAAY;EACZ;;CAED;;AAED,qRAAqR;;AAErR;CACC,iBAAiB;CACjB,yBAAyB;CACzB,sBAAsB;CACtB,kBAAkB;CAClB,mBAAmB;CACnB,eAAe;CACf,uBAAuB;CACvB,YAAY;CACZ,gBAAgB;CAChB,aAAa;CACb,mBAAmB;CACnB,eAAe;CACf;;AAED;CACC,oBAAoB;CACpB;;AAED;CACC,YAAY;CACZ,kBAAkB;CAClB,mBAAmB;CACnB;;AAED;CACC,YAAY;CACZ,aAAa;CACb;;AAED;CACC,YAAY;CACZ;;AAED;CACC,eAAe;CACf,mBAAmB;CACnB;;AAED;CACC,kBAAkB;CAClB;;AAED,sCAAsC;;AACtC;CACC,eAAe;CACf,kBAAkB;CAClB,mBAAmB;CACnB,oBAAoB;CACpB,iBAAiB;CACjB,aAAa;CACb,gBAAgB;CAChB;;AAED;CACC,YAAY;CACZ,aAAa;CACb,mBAAmB;CACnB,cAAc;CACd,mBAAmB;CACnB,SAAS;CACT;;AAED;CACC,YAAY;CACZ,aAAa;CACb;;AAED;CACC,sBAAsB;CACtB;;AAED;CACC,cAAc;CACd;;AAED;CACC,mBAAmB;CACnB;;AAED;CACC,WAAW;CACX;;AAED;CACC,eAAe;CACf,2BAA2B;CAC3B;;AAED;CACC,2BAA2B;CAC3B;;AAED;CACC,mBAAmB;CACnB,SAAS;CACT;;AAED;;CAEC;EACC,aAAa;EACb,kBAAkB;EAClB;;CAED;;AAED;CACC,yBAAyB;CACzB;;AAED;CACC,mBAAmB;CACnB,SAAS;CACT,UAAU;CACV;;AAED;CACC,cAAc;CACd;;AAED;CACC,YAAY;CACZ,oBAAoB;CACpB;;AAED;CACC,cAAc;CACd,eAAe;CACf;;AAED;CACC,iBAAiB;CACjB;;AAED,uBAAuB;;AACvB;;CAEC,cAAc;CACd;;AAED;;CAEC,sBAAsB;CACtB,UAAU;CACV,aAAa;CACb,kBAAkB;CAClB;;AAED;CACC,eAAe;CACf,gBAAgB;CAChB,sBAAsB;CACtB,mBAAmB;CACnB;;AAED;CACC,gBAAgB;CAChB,iBAAiB;CACjB,oBAAoB;CACpB;;AAED;CACC,sBAAsB;CACtB;;AAED;CACC,iBAAiB;CACjB;;AAED;CACC,eAAe;CACf,iBAAiB;CACjB;;AAED;;CAEC;EACC,kBAAkB;EAClB,oBAAoB;EACpB,eAAe;EACf,uBAAuB;EACvB;;CAED;EACC,mBAAmB;EACnB;;CAED;EACC,mBAAmB;EACnB,eAAe;EACf;;CAED;EACC,iBAAiB;EACjB,oBAAoB;EACpB;;CAED;;AAED;CACC,uBAAuB;CACvB;;AAED;;CAEC,uBAAuB;CACvB,mBAAmB;CACnB,kBAAkB;CAClB,kBAAkB;CAClB,mBAAmB;CACnB,mBAAmB;CACnB;;AAED;CACC,kBAAkB;CAClB,gBAAgB;CAChB;;AAED;;CAEC,gBAAgB;CAChB,iBAAiB;CACjB;;AAED;CACC,mBAAmB;CACnB;;AAED;CACC,cAAc;CACd,eAAe;CACf;;AAED;CACC,cAAc;CACd,eAAe;CACf;;AAED;CACC,iBAAiB;CACjB;;AAED,oBAAoB;;AACpB;CACC,kBAAkB;CAClB,2BAA2B;CAC3B,8BAA8B;CAC9B,eAAe;CACf,UAAU;CACV;;AAED;CACC,iCAAiC;CACjC,eAAe;CACf;;AAED;;;;;;;;CAQC,sBAAsB;CACtB,uBAAuB;CACvB;;AAED;;CAEC,WAAW;CACX;;AAED;;CAEC,WAAW;CACX;;AAED;;CAEC,UAAU;CACV;;AAED;;CAEC,UAAU;CACV;;AAED;CACC,kBAAkB;CAClB;;AAED;CACC,sBAAsB;CACtB;;AAED;;CAEC,0BAA0B;CAC1B,YAAY;CACZ,YAAY;CACZ,aAAa;CACb,oBAAoB;CACpB,sBAAsB;CACtB,gBAAgB;CAChB,iBAAiB;CACjB;;AAED;CACC,iBAAiB;CACjB,mBAAmB;CACnB,aAAa;CACb;;AAED;CACC,WAAW;CACX,iBAAiB;CACjB;;AAED;CACC,YAAY;CACZ,gBAAgB;CAChB;;AAED;CACC,0BAA0B;CAC1B,YAAY;CACZ,aAAa;CACb,eAAe;CACf,mBAAmB;CACnB,mBAAmB;CACnB;;AAED;CACC,iCAAiC;CACjC;;AAED;CACC,cAAc;CACd,YAAY;CACZ,mBAAmB;CACnB,0BAA0B;CAC1B,mBAAmB;CACnB,eAAe;CACf;;AAED;CACC,iBAAiB;CACjB;;AAED;CACC,aAAa;CACb,mBAAmB;CACnB;;AAED;CACC,iBAAiB;CACjB;;AAED;CACC,kBAAkB;CAClB,iBAAiB;CACjB;;AAED;CACC,cAAc;CACd;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,gBAAgB;CAChB;;AAED;;;CAGC,oBAAoB;CACpB,cAAc;CACd,uBAAuB;CACvB,sBAAsB;CACtB;;AAED;;CAEC,eAAe;CACf;;AAED;CACC,iBAAiB;CACjB,oBAAoB;CACpB;;AAED;CACC,6BAA6B;CAC7B,sBAAsB;CACtB;;AAED;CACC,sBAAsB;CACtB;;AAED;;CAEC,YAAY;CACZ;;AAED;CACC,cAAc;CACd;;AAED;CACC,cAAc;CACd;;AAED;CACC,iBAAiB;CACjB;;ACjjBD;;CAEC,oBAAoB;CAIpB;;AAHA;;CAHD;;EAIE,iBAAiB;EAElB;CADC;;AAGF;CACC,mBAAmB;CACnB,iBAAiB;CAIjB;;AAHA;;CAHD;EAIE,mBAAmB;EAEpB;CADC;;AAGF;;CAEC,kBAAkB;CASlB;;AAPA;;CAJD;;EAKE,eAAe;EAMhB;CALC;;AAED;;CARD;;EASE,mBAAmB;EAEpB;CADC;;AAGF;CACC,mBAAmB;CACnB,kBAAkB;CASlB;;AAPA;;CAJD;EAKE,mBAAmB;EAMpB;CALC;;AAED;;CARD;EASE,gBAAgB;EAEjB;CADC;;AAGF,eAAe;;AAEf;;CAEC,aAAa;CACb,gBAAgB;CAChB,UAAU;CACV,YAAY;CACZ,iBAAiB;CACjB,SAAS;CACT,cAAc;;CAsLd;;AApLA;;CAVD;EAWE,cAAc;EAmLf;CAlLC;;AAED;EACC,qBAAc;EAAd,cAAc;EACd,2BAAuB;MAAvB,uBAAuB;EACvB,sBAAwB;MAAxB,wBAAwB;EACxB,mBAAmB;EACnB,aAAa;EACb,eAAe;EACf,gBAAgB;EAChB,mBAAmB;EACnB,kBAAkB;CAClB;;AAED;EACC,mBAAmB;EACnB,QAAQ;EACR,SAAS;EACT,4BAA4B;EAC5B,YAAY;CACZ;;AAED;EACC,UAAU;EACV,iBAAiB;EACjB,eAA0B;EAC1B,iBAAiB;CAKjB;;AAHA;;CAND;EAOE,cAAc;EAEf;CADC;;AAGF;EACC,UAAU;EACV,kBAAkB;EAClB,mBAAmB;EACnB,SAAS;EACT,kBAAkB;EAClB,oBAAoB;EACpB,+BAA+B;EAC/B,WAAW;CAkBX;;AAhBA;GACC,sBAAsB;GACtB;;AAED;GACC,eAAgC;GAChC,mBAAmB;GACnB,YAAY;GACZ,aAAa;GACb,kBAAkB;GAClB,oBAAoB;GACpB;;AAED;;CAvBD;EAwBE,cAAc;EAEf;CADC;;AAGF;EACC,cAAc;EACd,oBAAoB;EACpB,iBAAiB;CAcjB;;AAbA;;CAJD;EAKE,cAAc;EAYf;CAXC;;AAED;GACC,sBAAsB;GACtB,aAAa;GACb,iBAAiB;CACjB;;AACD;GACC,eAAgC;CAChC;;AAIF;;CAEC;GACC,aAAa;GACb,sBAAsB;EACtB;CAED;;AAGA;;CADD;EAEE,WAAW;EAYZ;CAXC;;AACD;;CAJD;EAKE,QAAQ;EACR,UAAU;EAQX;CAPC;;AACD;;CARD;EASE,mBAAmB;EACnB,YAAY;EACZ,aAAa;EACb,UAAU;EAEX;CADC;;AAID;;CADD;EAEE,OAAO;EAER;CADC;;AAID;;CADD;EAEE,WAAW;EAEZ;CADC;;AAEF;EACC,2CAA2C;CAC3C;;AAED,SAAS;;AACT;EACC,aAAa;EACb,QAAQ;CA8BR;;AA5BA;GACC,mBAAmB;GACnB,oBAAoB;GACpB,eAAe;GACf,mBAAmB;GACnB;;AAED;GACC,mBAAmB;GACnB,WAAW;GACX,SAAS;GACT;;AAED;GACC,YAAY;GACZ,QAAQ;GACR,gCAAgC;GAChC,6BAA6B;GAU7B;;AARA;IACC,mBAAmB;IACnB,WAAW;IACX,YAAY;IACZ,aAAa;IACb,iBAAiB;IACjB,mBAAmB;IACnB;;AAKF;;CADD;EAEE,YAAY;EAYb;CAXC;;AACD;;CAJD;EAKE,SAAS;EACT,UAAU;EAQX;CAPC;;AACD;;CARD;EASE,mBAAmB;EACnB,YAAY;EACZ,aAAa;EACb,UAAU;EAEX;CADC;;AAID;;CADD;EAEE,YAAY;EACZ,QAAQ;EAET;CADC;;AAMF;EACC,iBAAiB;EACjB;;AACD;;CAJD,YAUC;CALC;;AAED;CACC,cAAc;CACd;;AAGF;CACC,mBAAmB;CACnB,iBAAiB;CACjB,oBAAoB;CACpB,iFAAiF;CAkBjF;;AAhBA;EACC,eAAe;EACf;;AAED;EACC,iBAAiB;EACjB;;AAED;EACC,kBAAkB;EAMlB;;AALA;GACC,sBAAsB;GACtB,iBAAiB;GACjB,kBAAkB;GAClB;;AAIH,aAAa;;AACb;;CAEC;EACC,aAAa;EACb,aAAa;EACb,uBAAuB;EACvB,mBAAmB;EACnB;;CAED;EACC,YAAY;EACZ,uBAAuB;EACvB,0BAA0B;EAC1B;;CAED;;AChSD;;CAEC;EACC,qBAAqB;EACrB;;CAED;EACC,0BAA0B;EAC1B;;CAED;;AAED,mBAAmB;;AAGnB,aAAa;;AAKX;;CADD;EAEE,eAAe;EACf,YAAY;EAEb;CADC;;AAGF;EACC,eAAY;CACZ;;AAED;;EAEC,eAAe;EACf,gBAAgB;CAChB;;AAGF;CACC,oBAAoB;CACpB;;AAED;CACC,mBAAmB;CACnB,mBAAmB;CACnB;;AAED;CACC,mBAAmB;CACnB,QAAQ;CACR,gBAAgB;CAChB,SAAS;CACT,4BAA4B;CAC5B,aAAa;CACb,eAAe;CACf;;AAED;CACC,eAAe;CACf,YAAY;CACZ,mBAAmB;CACnB;;AAED;CACC,aAAa;CACb;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,sBAAsB;CACtB,qBAAqB;CACrB,mBAAmB;CACnB;;AAED,oBAAoB;;AAEpB;CACC,sBAAsB;CACtB,gBAAgB;CAChB,0BAA0B;CAC1B,oBAA6B;CAC7B,iBAAiB;CACjB,eAAe;CACf,mBAAmB;CACnB;;AAED;CACC,oBAAoB;CACpB,eAAe;CACf;;AAED;CACC,cAAc;CACd;;AAED;CACC,eAAgB;CAChB,gBAAgB;CAChB;;AAED;CACC,sBAAsB;CACtB,UAAU;CACV,eAAe;CACf,iBAAiB;CAIjB;;AAHA;;CALD;EAME,kBAAkB;EAEnB;CADC;;AAGF,aAAa;;AAEb;CACC,aAAa;;CAMb;;AAJA;EACC,cAAc;EACd;;AAIF;;CAEC,cAAc;CACd;;AAIA;EACC,cAAc;EACd;;AAGF,iBAAiB;;AAEjB;CACC,oBAA6B;CAC7B,mBAAmB;CACnB,aAAc;CA2Bd;;AAzBA;CACC,mBAAmB;CACnB;;AAED;EACC,cAAc;CACd;;AAED;EACC,iBAAiB;CACjB;;AAED;CACC,mBAAmB;CACnB;;AAED;EACC,iBAAiB;CACjB;;AAED;EACC,mBAAmB;EACnB,oBAAoB;EACpB,mBAAmB;CACnB;;AAID;CACC,oBAAoB;CACpB;;AAGF,kBAAkB;;AAGjB;EACC,mBAAmB;EACnB,sBAAsB;EACtB,YAAY;EACZ,aAAa;EACb,kBAAkB;EAClB,uBAAuB;;EAmFvB;;AAjFA,gCAAgC;;AAChC;GACC,WAAW;GACX,SAAS;GACT,UAAU;GACV;;AAED,gBAAgB;;AAChB;GACC,mBAAmB;GACnB,gBAAgB;GAChB,OAAO;GACP,QAAQ;GACR,SAAS;GACT,UAAU;GACV,0BAAmC;GACnC,eAAgB;;GAoChB;;AAlCA;CACC,mBAAmB;CACnB,YAAY;CACZ,YAAY;CACZ,WAAW;CACX,UAAU;CACV,YAAY;CACZ,0BAAgC;CAChC,0BAAgC;CAChC,oBAAoB;CACpB;;AAED;CACC,YAAY;CACZ,eAAe;CACf,mBAAmB;CACnB,YAAY;CACZ,WAAW;CACX,WAAW;CACX,SAAS;CACT,mBAAmB;CACnB,0BAAqC;CACrC,wBAAuB;CACvB;;AAjCF,mCAmCC,qBAAqB;CASrB;;AARA;CACC,oBAAoB;CACpB,0BAAgC;CAIhC;;AAHA;CACA,mBAAmB;CAClB;;AAKH;GACC,oBAAqB;GACrB,qBAAuB;;GAmBvB;;AAlBA;CACC,iBAAiB;CACjB,mBAAmB;CACnB,4BAA4B;CAC5B;;AAED;CACC,YAAY;CACZ,eAAe;CACf,mBAAmB;CACnB,YAAY;CACZ,WAAW;CACX,UAAU;CACV,SAAS;CACT,iBAAiB;CACjB,aAAa;CACb;;AAIF;GACC,iDAAgE;GAChE;;AAIF;EACC,eAAe;EACf,YAAY;EAQZ;;AAPA;GACC,eAAe;GACf,uBAAuB;GACvB;;AACD;CACC,kBAAkB;CAClB;;AAGF;EACC,eAAe;EACf;;AAIF,gBAAgB;;AAEhB;CACC,mBAAmB;CACnB,sBAAsB;CAItB;;AAHA;;CAHD;EAIE,eAAe;EAEhB;CADC;;AAGF;CACC,WAAW;CACX,mBAAmB;CACnB,mBAAmB;CACnB,UAAU;CACV,YAAY;CACZ,iBAAiB;CACjB,cAAc;CACd,aAAa;CACb,iBAAiB;CACjB,WAAW;CACX,sFAAsF;CACtF,qBAAqB;CAKrB;;AAHA;;CAdD;EAeE,YAAY;EAEb;CADC;;AAGF;CACC,cAAc;CACd,kBAAkB;CAClB,YAAY;CACZ;;AAIA;EACC,sBAAsB;EACtB;;AAED;EACC,WAAW;EACX,oBAAoB;EACpB,0FAA0F;EAC1F;;AAED;EACC,WAAW;EACX;;AAIF;;CAEC,gBAAgB;CAChB;;AAED;CACC,sBAAsB;CACtB,sBAAsB;CACtB,cAAc;CACd,mBAAmB;CACnB,iBAAiB;CACjB,mBAAmB;CACnB;;AAED;CACC,sBAAsB;CACtB,uBAAuB;CACvB;;AAED;CACC,qCAAqC;CACrC,0BAA0B;CAC1B;;AC1WD,UAAU;;AAEV;IACI,iBAAiB;CACpB,oBAAoB;CACpB,mBAAmB;CA8JnB;;AA5JA;;;;EAIC,aAAa;EACb,wBAAwB;EACxB,UAAU;EACV,kCAAkC;EAClC,kBAAkB;EAClB,eAAgB;EAwBhB;;AAtBA;GACC,eAAe;GACf,eAAe;GACf,eAA0B;GAC1B,gBAAgB;GAChB,YAAY;GACZ,aAAa;GACb;;AAED;GACC,sBAAsB;GACtB,iBAAiB;GACjB,aAAa;GACb,gBAAgB;GAChB,oBAAqB;GACrB,eAAe;GACf,mBAAmB;GACnB,YAAY;GACZ,iBAAiB;GACjB,0BAA0B;GAC1B,sBAAsB;GACtB;;AAGF;;;;EAIC,iBAAiB;EACjB,wCAAwC;EACxC,0BAA2B;EAK3B;;AAHA;GACC,eAAgB;GAChB;;AAGF;EACC,eAAe;EACf,aAAa;EACb,mBAAmB;EAiDnB;;AA/CA;;;;GAIC,mBAAmB;GAOnB;;AANA;IACC,sBAAsB;IACtB,gBAAgB;IAChB,aAAa;IACb,2BAA2B;IAC3B;;AAGF;GACC,cAAc;GACd;;AAEA;IACC,YAAY;IACZ,eAAe;IACf,mBAAmB;IACnB,UAAU;IACV,SAAS;IACT,YAAY;IACZ,YAAY;IACZ,0BAA0B;CAC1B;;AACD;IACC,mBAAmB;IACnB,eAAe;IACf,iBAAiB;IACjB,cAAc;IACd,SAAS;IACT,UAAU;IACV,WAAW;IACX,iDAAiD;IACjD,aAAa;CASb;;AAPA;KACC,eAAe;KACf,gBAAgB;KAChB,oBAAoB;KACpB,iBAAiB;KACjB,mBAAmB;KACnB;;AAKJ;;CACC;GACC,cAAc;EACd;;CACD;GACC,cAAc;EACd;CACD;;AAED;EACC,eAAe;EACf,aAAa;CAIb;;AAHA;;CAHD;EAIE,cAAc;EAEf;CADC;;AAKD;CAEC,kBAAkB;CA8BlB;;AA5BA;IACC,eAAsB;IACtB,gBAAgB;IAChB,sBAAsB;IACtB,aAAa;IACb,qBAAqB;IACrB,YAAY;CACZ;;AAED;;CAbD;EAcE,mBAAmB;EACnB,aAAa;EACb,SAAS;EACT,gBAAgB;EAChB,iBAAiB;EACjB,sBAAsB;EACtB,WAAW;EAYZ;;CAVC;KACC,eAAsB;KACtB,gBAAgB;KAChB,sBAAsB;KACtB,aAAa;KACb,qBAAqB;KACrB,YAAY;EACZ;CACD;;AAOJ;;EAIE;EACA,iBAAiB;GAChB;;EAED;GACC,eAAe;GACf,WAAY;GA8BZ;;EA5BA;EACC,0BAA0B;EAC1B;;EAED;EACC,+BAA+B;EAC/B;;EAED;;EAEC,iBAAiB;EACjB,uBAAuB;EACvB;;EAOA;KACC,sBAAsB;KACtB,qBAAqB;EACrB;;EAGF;EACC,cAAc;EACd;;CAKH;;AAGD,gBAAgB;;AAEhB;CACC,mBAAmB;CACnB,UAAU;CACV,SAAS;CACT,cAAc;CAkGd;;AAhGA;;CACC;GACC,eAAe;GACf,2CAA2C;EAC3C;CACD;;AAED;;CAbD;EAcE,qBAAc;EAAd,cAAc;EACd,aAAa;EAuFd;CAtFC;;AAED;EACC,sBAAsB;EACtB,mBAAmB;EACnB,eAAe;EACf,mBAAmB;EACnB,uBAAuB;EACvB,eAAe;EACf,eAAqB;CA+CrB;;AA7CA;;CATD;EAUE,eAAe;EACf,aAAa;EACb,qBAAc;EAAd,cAAc;EACd,2BAAuB;MAAvB,uBAAuB;EACvB,sBAAwB;MAAxB,wBAAwB;EAwCzB;;CAtCC;IACC,eAAe;IACf,eAAe;EACf;CACD;;AAED;;CAtBD;EAuBE,cAAc;EACd,iBAAiB;EA8BlB;CA7BC;;AAGA;CACC,YAAY;CACZ,eAAe;CACf,mBAAmB;CACnB,UAAU;CACV,QAAQ;CACR,YAAY;CACZ,YAAY;CACZ,oBAAmB;CACnB,eAAuB;CAOvB;;AALA;;CAXD;EAYE,WAAW;EACX,aAAa;EAGd;CAFC;;AAGF;;CAlBD;EAmBE,eAAc;EAEf;CADC;;AAGF;CACC,oBAAoB;CACpB,eAAuB;CACvB;;AAGF;EACC,eAAe;EACf,WAAW;EACX,oBAAoB;EACpB,iBAAiB;EACjB,oBAAoB;EACpB,kBAAkB;EAClB,iBAAiB;CAMjB;;AALA;;CARD;EASE,WAAW;EACX,YAAY;EACZ,iBAAiB;EAElB;CADC;;AAGF;;CAzFD;EA0FE,mBAAmB;EACnB,UAAU;EACV,YAAY;EACZ,aAAa;EACb,iBAAiB;EAQlB;CANC;;AAED;EACC,QAAQ;EACR,YAAY;CACZ;;AAGF;CACC,mBAAmB;CACnB,SAAS;CACT,UAAU;CACV,qBAAc;CAAd,cAAc;CACd,aAAa;IACV,2BAAuB;QAAvB,uBAAuB;IACvB,gBAAgB;IAChB,uBAAoB;QAApB,oBAAoB;IACpB,sBAAwB;QAAxB,wBAAwB;CAC3B,qBAAsB;CAkBtB;;AAhBA;CACC,cAAc;CACd;;AAED;CACC,cAAc;CACd;;AAED;;CApBD;EAqBE,cAAc;EAOf;CANC;;AAED;EACC,YAAY;EACZ,QAAQ;CACR;;AAGF,oBAAoB;;AAEpB,mDAAmD;;AACnD;CACC,qBAAc;CAAd,cAAc;CACd,oBAAgB;KAAhB,eAAgB;;CAEhB,gCAAgC;;CA2EhC;;AAvEC;GACC,kCAAgC;CAChC;;AAVH,2BAaC,iCAAiC;CAkEjC;;AA/DE;IACC,wBAA8D;CAC9D;;AAFD;IACC,wBAA8D;CAC9D;;AAFD;IACC,oCAA8D;CAC9D;;AAIH;EACC,cAAkB;EAClB,mBAAuB;EACvB,uBAAuB;EACvB,qBAAqB;EACrB,aAAa;CAkDb;;AAhDA;CACC,gBAAgB;CAChB;;AAED;GACC,cAAc;CAUd;;AARA;IACC,eAA0B;IAC1B,eAAe;IACf,aAAa;IACb,iBAAiB;IACjB,kBAAkB;IAClB;;AAIF;GACC,mBAAmB;GACnB,aAAiB;GACjB,WAAe;GACf,oCAA4C;CAC5C;;AAED;;CA/BD;EAgCE,YAAY;EACZ,gBAAgB;EAChB,qBAAqB;EAqBtB;;CAnBC;IACC,uBAAuB;IACvB,WAAW;IACX,aAAa;IACb,SAAS;IACT,4BAA4B;IAC5B,YAAgB;EAChB;;CAED;IACC,UAAU;EACV;;CAED;IACC,cAAc;EACd;CAED;;AAMH,yBAAyB;;AAEzB;IACI,YAAY;IACZ,iBAAiB;IACjB,wCAAsB;IACtB,iBAAiB;IACjB,YAAY;IACZ,aAAa;CAChB;;ACzbD,iDAAiD;;AAEjD;CACC,mBAAmB;CACnB,YAAY;CACZ,uBAAuB;CACvB,mBAAmB;;CAkGnB;;AAhGA;;CAND;EAOE,uBAAuB;EA+FxB;CA9FC;;AAED;;CAVD;EAWE,4BAA4B;EA2F7B;CA1FC;;AAED;;CAdD;EAeE,yBAAyB;EAuF1B;CAtFC;;AAED;EACC,mBAAmB;EACnB,UAAU;EACV,WAAW;EACX,SAAS;EACT,UAAU;CACV;;AAED;EACC,eAAe;EACf,YAAY;EACZ,mBAAmB;EACnB,aAAa;EACb,0BAAmC;EACnC,uBAAuB;CA0CvB;;AAxCA;CACC,YAAY;CACZ,eAAe;CACf,kBAAkB;CAClB;;AAED;GACC,mBAAmB;GACnB,SAAS;GACT,UAAU;GACV,wBAAwB;GACxB,yBAAyB;GACzB,6BAA6B;GAC7B,uBAAuB;GACvB,6BAA6B;GAC7B,iBAAiB;GACjB,qCAAqC;CAarC;;AAXA;IACC,eAAe;IACf,UAAU;IACV,iBAAiB;IACjB,mBAAmB;IACnB,SAAS;IACT,UAAU;IACV,gCAAgC;IAChC,0BAAkB;OAAlB,uBAAkB;QAAlB,sBAAkB;YAAlB,kBAAkB;IAClB;;AAIF;GACC,mBAAmB;GACnB,SAAS;GACT,UAAU;GACV,iCAAiC;GACjC,gBAAgB;GAChB,YAAY;GACZ,YAAY;CACZ;;AAGF;;;;EAEC,sBAAuB;CACvB;;AAED;CACC,4BAA6B;CAC7B;;AAED;EACC,mBAAmB;EACnB,WAAW;EACX,aAAa;EACb,UAAU;EACV,4BAA4B;EAC5B,cAAc;CACd;;AAIA;GACC,sBAAsB;CACtB;;AAMH;CACC,wBAAwB;IACrB,kBAAkB;IAClB,mBAAmB;CACtB,kBAAkB;CAClB,iBAAiB;IACd,qBAAc;IAAd,cAAc;CACjB,oBAAgB;KAAhB,gBAAgB;CAChB,mBAAmB;;CAOnB;;AALA;EACC,YAAY;EACZ,YAAY;EACZ;;AAIF;CACC,cAAc;CACd;;AAED;;CAEC,mBAAmB;CACnB,OAAO;CACP,QAAQ;CACR,YAAY;CACZ,aAAa;CACb,WAAW;CACX,0FAA0F;CAC1F,qBAAc;CAAd,cAAc;CACd,uBAAoB;KAApB,oBAAoB;CACpB,sBAAwB;KAAxB,wBAAwB;CACxB;;AAED;CACC,4FAA4F;CAC5F;;AAED;CACC,iBAAiB;CACjB,sBAAsB;CACtB,cAAc;CACd,mBAAmB;CACnB,yCAAyC;CACzC;;ACvJD,uBAAuB;;AAEvB,8BAA8B;;AAE9B;IACI,eAAgB;CACnB;;AAED,uBAAuB;;AAEvB;CACC,sBAAsB;CACtB,gBAAgB;CAChB,kBAAkB;CAClB,sBAAsB;CACtB;;AAGD,wBAAwB;;AAExB;IACI,UAAU;IACV,cAAc;CACjB;;AAED;IACI,qBAAc;IAAd,cAAc;IACd,oBAAgB;QAAhB,gBAAgB;CACnB,kBAAkB;CAClB,oBAAoB;CACpB;;AAED;IACI,eAAW;QAAX,WAAW;IACX,YAAY;IACZ,cAAc;IACd,uBAAuB;IACvB,0BAA0B;CAC7B,kBAAkB;CAClB,oBAAoB;;CAsBpB;;AApBA;;CATD;EAUE,WAAW;EAmBZ;;CAjBC;GACC,YAAY;EACZ;CACD;;AAED;;CACC;GACC,WAAW;EACX;CACD;;AAED;;CACC;GACC,YAAY;EACZ;CACD;;AAIF;IACI,WAAW;CACd;;AAED,wCAAwC;;AACxC;CACC,aAAa;CACb;;AAED;CACC,aAAa;CACb;;AAED;;CAEC;;EAEC,YAAY;EACZ,YAAY;EACZ,UAAU;EACV;;CAED;;AAKA;EACC,cAAc;;EAcd;;AAZA;;CAHD;EAIE,cAAc;EAWf;CAVC;;AAED;GACC,UAAU;CACV;;AAED;GACC,iBAAiB;CACjB;;AAMH;CACC,aAAa;CACb,0BAA0B;CAC1B,wBAAwB;CACxB,gBAAgB;CAChB,mBAAmB;CACnB;;AAGA;EACC,0BAA0B;EAC1B,yBAAyB;EACzB,cAAc;EACd;;AAED;EACC,sCAAsC;EACtC;;AAED;EACC,kBAAkB;EAClB,gBAAgB;EAChB,gBAAgB;EAChB;;AAED;EACC,gBAAgB;EAChB;;AAED;EACC,YAAY;EACZ,aAAa;EACb,gBAAgB;EAChB,eAAe;EACf;;AAED;EACC,aAAa;EACb;;AAED;EACC,WAAW;EACX;;AAED;EACC,oBAAoB;EACpB,6BAA6B;EAK7B;;AAHA;GACC,YAAY;GACZ;;AAMH;CACC,cAAc;CACd;;AAED;;CAEC;EACC,WAAW;EACX;;CAED;EACC,eAAe;EACf,YAAY;EACZ,mBAAmB;EACnB,YAAY;EACZ,aAAa;EACb;;CAED;;AAED;;CAEC;EACC,aAAa;EACb;;CAED;;AAED;CACC,sBAAsB;CACtB;;AAED;;CAEC;;EAEC,eAAe;EA+Bf;;EA7BA;GACC,qBAAc;GAAd,cAAc;GACd,oBAAgB;OAAhB,gBAAgB;GAChB;;EAED;GACC,cAAe;GAsBf;;EApBA;EACC,YAAY;EACZ,oBAAoB;EACpB;;EAED;EACC,WAAW;EACX,uBAAuB;EACvB;;EAED;EACC,cAAc;EACd;;EAED;EACC,4BAA4B;EAC5B,kBAAkB;EAClB,YAAY;EACZ,eAAe;EACf;;CAIH;;AAED;CACC,YAAY;CACZ,mBAAmB;CACnB;;AC9OD,iBAAiB;;AAMf;GACC,sBAAsB;GACtB;;AAIF;;GAIE;IACC,eAAe;IACf;;GAED;IACC,yBAAyB;IACzB,uBAAuB;IACvB,sBAAuB;;IAMvB;;GAJA;EACC,eAAsB;EACtB;;GAQF;IACC,eAAe;IACf;;GAED;IACC,eAAe;IACf,uBAAuB;IACvB;;GAED;IACC,yBAAyB;IACzB;CAIF;;AAGA;GACC,iBAAiB;GACjB;;AACD;IAEE;KACC,yBAAyB;KACzB;CAEF;;AAIH;CACC,oBAAoB;CACpB;;AAED;;CAEC,cAAe;;CAaf;;AAXA;CACC,YAAY;CACZ,yBAAyB;CACzB,gBAAgB;CAChB,kBAAkB;CAClB,aAAa;CACb,YAAY;CACZ,cAAc;CACd,uBAAuB;CACvB;;AAIF;;IAEI,iBAAiB;IACjB,6BAA8B;CAIjC;;AAHA;EACC,sBAAsB;EACtB;;AAGF;IACI,iBAAiB;CACpB;;AAED;IACI,iBAAiB;CACpB;;AAED;IACI,cAAc;CACjB,2CAA4C;;CAO5C;;AALA;CACC,iBAAiB;CACjB,aAAa;CACb;;AAIF;IACI,cAAc;CACjB;;ACrHC;IACE,gBAAgB;IAChB,kBAAkB;IAClB,oBAAoB;IACpB,iBAAiB;IACjB,eAAY;GACb;;AAID;IACE,YAAY;IACZ,mBAAmB;IACnB,cAAc;IACd,kBAAkB;IAClB,iBAAiB;IACjB,oBAAoB;GACrB;;AAGH;EACE,aAAa;EACb,mBAAmB;EACnB,SAAS;CACV;;AAED;EACE,kBAAkB;EAClB,sBAAsB;EACtB,eAAe;EACf,mBAAmB;CACpB;;AAED;IACI,0BAA0B;IAC1B,YAAY;CACf;;AAED;IACI,eAAe;IACf,YAAY;IACZ,kBAAkB;IAClB,iBAAiB;IACjB,eAAe;IACf,iBAAiB;CACpB;;AAED;;;EAGE,uBAAuB;EACvB,UAAU;CACX;;AAED;EACE,gBAAgB;CACjB;;AAGD;EACE,kBAAkB;EAClB,qBAAqB;EACrB,eAAe;EACf,mBAAoB;CAKrB;;AAHC;CACE,cAAc;CACf;;AAMD;IACE,iBAAiB;GAClB;;AAGH;;EAEE,gBAAgB;EAChB,YAAY;EACZ,aAAa;EACb,kBAAkB;EAClB,uBAAuB;EACvB,aAAa;CACd","file":"wp-optimize-admin-3-0-16.min.css","sourcesContent":["/* COLORS */\n$wp-blue: #0272AA;\n$wp-gray-dark: #555d66;\n$wp-gray-darker: #191e23;\n$wp-secondary-gray: #72777C;\n$wp-secondary-gray-light: #82868B;\n$wp-light-gray: #B5B9BE;\n$wp-lighter-gray: #F2F4F5;\n$success: #009B24;\n$error: #9B3600;\n$red: #E07575;\n$brand: #E46B1F;\n$spacing: 20px; \n\n/* OTHER VARS */\n$breakpoint-small: 782px;\n\n@import \"admin.css\";\n\n@import \"scss/layout\";\n\n@import \"scss/common\";\n\n@import \"scss/menu-and-tabs\";\n\n@import \"scss/image-list\";\n\n@import \"scss/plugin-family-tab\";\n\n@import \"scss/table-sorter\";\n\n@import \"scss/cache\";",".wpo_hidden {\n\tdisplay: none !important;\n}\n\n.wpo_info {\n\tbackground: #FFF;\n\tcolor: #444;\n\tfont-family: -apple-system, \"BlinkMacSystemFont\", \"Segoe UI\", \"Roboto\", \"Oxygen-Sans\", \"Ubuntu\", \"Cantarell\", \"Helvetica Neue\", sans-serif;\n\tmargin: 2em auto;\n\tpadding: 1em 2em;\n\tmax-width: 700px;\n\t-webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.13);\n\tbox-shadow: 0 1px 3px rgba(0,0,0,0.13);\n}\n\n#wp-optimize-wrap .widefat thead th, #wp-optimize-wrap .widefat thead td {\n\tborder-bottom: 1px solid #E1E1E1;\n}\n\n#wp-optimize-wrap .widefat td, #wp-optimize-wrap .widefat th {\n\tpadding: 8px 10px;\n}\n\n/* big button */\n.wpo_primary_big {\n\tpadding: 4px 6px !important;\n\tfont-size: 22px !important;\n\tmin-height: 34px;\n\tmin-width: 200px;\n}\n\n/* SECTIONS */\n.wpo_section {\n\tclear: both;\n\tpadding: 0;\n\tmargin: 0;\n}\n\n.wp-optimize-settings {\n\tmargin-bottom: 16px;\n}\n\n.wp-optimize-settings td > label {\n\tfont-weight: bold;\n\tdisplay: block;\n\tmargin-bottom: 8px;\n}\n\n/* COLUMN SETUP */\n.wpo_col {\n\tdisplay: block;\n\tfloat: left;\n\tmargin: 1% 0 1% 1%;\n}\n\n.wpo_col:first-child {\n\tmargin-left: 0;\n}\n\n/* GROUPING */\n.wpo_group:before,\n.wpo_group:after {\n\tcontent: \"\";\n\tdisplay: table;\n}\n\n.wpo_group:after {\n\tclear: both;\n}\n\n.wpo_half_width {\n\twidth: 48%;\n}\n\n/* GRID OF THREE */\n.wpo_span_3_of_3 {\n\twidth: 100%;\n}\n\n.wpo_span_2_of_3 {\n\twidth: 65.3%;\n}\n\n.wpo_span_1_of_3 {\n\twidth: 32.1%;\n}\n\n#wp-optimize-wrap .nav-tab-wrapper {\n\tmargin: 0;\n}\n\n@media screen and (min-width: 549px) {\n\n\t.show_on_default_sizes {\n\t\tdisplay: block !important;\n\t}\n\n\t.show_on_mobile_sizes {\n\t\tdisplay: none !important;\n\t}\n\n}\n\n@media screen and (max-width: 548px) {\n\n\t.show_on_default_sizes {\n\t\tdisplay: none !important;\n\t}\n\n\t.show_on_mobile_sizes {\n\t\tdisplay: block !important;\n\t}\n\n}\n\n@media screen and (max-width: 768px) {\n\n\t.wpo_col {\n\t\tmargin: 1% 0;\n\t}\n\n\t.wpo_span_3_of_3 {\n\t\twidth: 100%;\n\t}\n\n\t.wpo_span_2_of_3 {\n\t\twidth: 100%;\n\t}\n\n\t.wpo_span_1_of_3 {\n\t\twidth: 100%;\n\t}\n\n\t.wpo_half_width {\n\t\twidth: 100%;\n\t}\n\n}\n\n/* .wp-optimize-settings-clean-transient label, .wp-optimize-settings-clean-pingbacks label, .wp-optimize-settings-clean-trackbacks label, .wp-optimize-settings-clean-postmeta label, .wp-optimize-settings-clean-orphandata label, .wp-optimize-settings-clean-commentmeta label */\n\n.wp-optimize-setting-is-sensitive td > label::before {\n\tcontent: \"\\f534\";\n\tfont-family: 'dashicons';\n\tdisplay: inline-block;\n\tmargin-right: 6px;\n\tfont-style: normal;\n\tline-height: 1;\n\tvertical-align: middle;\n\twidth: 20px;\n\tfont-size: 18px;\n\theight: 20px;\n\ttext-align: center;\n\tcolor: #72777C;\n}\n\n.wpo-run-optimizations__container {\n\tmargin-bottom: 15px;\n}\n\ntd.wp-optimize-settings-optimization-checkbox {\n\twidth: 18px;\n\tpadding-left: 4px;\n\tpadding-right: 0px;\n}\n\n.wp-optimize-settings-optimization-checkbox input {\n\tmargin: 0px;\n\tpadding: 0px;\n}\n\n#retention-period {\n\twidth: 60px;\n}\n\n.wp-optimize-settings-optimization-info {\n\tfont-size: 80%;\n\tfont-style: italic;\n}\n\n.wp-optimize-settings input[type=\"checkbox\"] {\n\t/* width: 18px; */\n}\n\n/* Added for the Image on Addons tab*/\nimg.addons {\n\tdisplay: block;\n\tmargin-left: auto;\n\tmargin-right: auto;\n\tmargin-bottom: 20px;\n\tmax-height: 44px;\n\theight: auto;\n\tmax-width: 100%;\n}\n\n.wpo_spinner {\n\twidth: 18px;\n\theight: 18px;\n\tpadding-left: 10px;\n\tdisplay: none;\n\tposition: relative;\n\ttop: 4px;\n}\n\n.optimization_spinner {\n\twidth: 20px;\n\theight: 20px;\n}\n\n#wp-optimize-auto-options {\n\tmargin: 20px 0 0 28px;\n}\n\n.display-none {\n\tdisplay: none;\n}\n\n.visibility-hidden {\n\tvisibility: hidden;\n}\n\n.margin-one-percent {\n\tmargin: 1%;\n}\n\n#save_done, .save-done {\n\tcolor: #D94F00;\n\tfont-size: 220% !important;\n}\n\n.wp-optimize-settings-optimization-info a {\n\ttext-decoration: underline;\n}\n\n.wp-optimize-settings-optimization-run-spinner {\n\tposition: relative;\n\ttop: 2px;\n}\n\n@media screen and (min-width: 782px) {\n\n\ttd.wp-optimize-settings-optimization-run {\n\t\twidth: 180px;\n\t\tpadding-top: 16px;\n\t}\n\n}\n\n#wpoptimize_table_list .tablesorter-filter-row {\n\tdisplay: none !important;\n}\n\n#wpoptimize_table_list .optimization_spinner {\n\tposition: relative;\n\ttop: 2px;\n\tleft: 5px;\n}\n\n#wpoptimize_table_list .optimization_spinner.visibility-hidden {\n\tdisplay: none;\n}\n\n#wpoptimize_table_list_filter {\n\twidth: 100%;\n\tmargin-bottom: 15px;\n}\n\n#wpoptimize_table_list_tables_not_found {\n\tdisplay: none;\n\tmargin: 20px 0;\n}\n\ndiv#wpoptimize_table_list_tables_not_found + h3 {\n\tmargin-top: 30px;\n}\n\n/* Hide First column */\n#wpoptimize_table_list tr th:first-child,\n#wpoptimize_table_list tr td:first-child {\n\tdisplay: none;\n}\n\n#optimize_form .select2-container,\n#wp-optimize-auto-options .select2-container {\n\twidth: 50% !important;\n\ttop: -5px;\n\theight: 40px;\n\tmargin-left: 10px;\n}\n\n#wpoptimize_table_list .optimization_done_icon {\n\tcolor: #009B24;\n\tfont-size: 200%;\n\tdisplay: inline-block;\n\tposition: relative;\n}\n\n#wpo_sitelist_show_moreoptions_cron {\n\tfont-size: 13px;\n\tline-height: 1.5;\n\tletter-spacing: 1px;\n}\n\n#wp-optimize-nav-tab-contents-images .wpo_span_2_of_3 h3 {\n\tdisplay: inline-block;\n}\n\n.wpo_remove_selected_sizes_btn__container {\n\tmargin-top: 20px;\n}\n\n.unused-image-sizes__label {\n\tdisplay: block;\n\tline-height: 1.6;\n}\n\n@media (max-width: 782px) {\n\n\t.unused-image-sizes__label {\n\t\tmargin-left: 30px;\n\t\tmargin-bottom: 15px;\n\t\tline-height: 1;\n\t\tword-break: break-word;\n\t}\n\n\t.unused-image-sizes__label input[type=checkbox] {\n\t\tmargin-left: -30px;\n\t}\n\n\tbody.rtl .unused-image-sizes__label {\n\t\tmargin-right: 30px;\n\t\tmargin-left: 0;\n\t}\n\n\tbody.rtl .unused-image-sizes__label input[type=checkbox] {\n\t\tmargin-left: 4px;\n\t\tmargin-right: -30px;\n\t}\n\n}\n\n#wp-optimize-nav-tab-contents-tables a {\n\tvertical-align: middle;\n}\n\n#wpo_sitelist_moreoptions,\n#wpo_sitelist_moreoptions_cron {\n\tmargin: 4px 16px 6px 0;\n\tborder: 1px dotted;\n\tpadding: 6px 10px;\n\tmax-height: 300px;\n\toverflow-y: scroll;\n\toverflow-x: hidden;\n}\n\n#wpo_sitelist_moreoptions {\n\tmax-height: 150px;\n\tmargin-right: 0;\n}\n\n#wpo_settings_sites_list li,\n#wpo_settings_sites_list li a {\n\tfont-size: 13px;\n\tline-height: 1.5;\n}\n\n#wpo_sitelist_moreoptions_cron li {\n\tpadding-left: 20px;\n}\n\n#wpo_import_error_message {\n\tdisplay: none;\n\tcolor: #9B0000;\n}\n\n#wpo_import_success_message {\n\tdisplay: none;\n\tcolor: #46B450;\n}\n\n#wp-optimize-logging-options {\n\tmargin-top: 10px;\n}\n\n/* Logger settings*/\n.wpo_logging_header {\n\tfont-weight: bold;\n\tborder-top: 1px solid #333;\n\tborder-bottom: 1px solid #333;\n\tpadding: 5px 0;\n\tmargin: 0;\n}\n\n.wpo_logging_row {\n\tborder-bottom: 1px solid #A1A2A3;\n\tpadding: 5px 0;\n}\n\n.wpo_logging_logger_title,\n.wpo_logging_options_title,\n.wpo_logging_status_title,\n.wpo_logging_actions_title,\n.wpo_logging_logger_row,\n.wpo_logging_options_row,\n.wpo_logging_status_row,\n.wpo_logging_actions_row {\n\tdisplay: inline-block;\n\tvertical-align: middle;\n}\n\n.wpo_logging_logger_title,\n.wpo_logging_logger_row {\n\twidth: 38%;\n}\n\n.wpo_logging_options_title,\n.wpo_logging_options_row {\n\twidth: 44%;\n}\n\n.wpo_logging_status_title,\n.wpo_logging_status_row {\n\twidth: 8%;\n}\n\n.wpo_logging_actions_title,\n.wpo_logging_actions_row {\n\twidth: 7%;\n}\n\n.wpo_logging_actions_row {\n\ttext-align: right;\n}\n\n.wpo_logging_options_row {\n\tword-wrap: break-word;\n}\n\n.wpo_logging_actions_row .dashicons-no-alt,\n.wpo_add_logger_form .dashicons-no-alt {\n\tbackground-color: #F06666;\n\tcolor: #FFF;\n\twidth: 20px;\n\theight: 20px;\n\tborder-radius: 20px;\n\tdisplay: inline-block;\n\tcursor: pointer;\n\tmargin-left: 5px;\n}\n\n.wpo_add_logger_form .dashicons-no-alt {\n\tmargin-top: 12px;\n\tmargin-right: 10px;\n\tfloat: right;\n}\n\n.wpo_logger_type {\n\twidth: 90%;\n\tmargin-top: 10px;\n}\n\n.wpo_logger_addition_option {\n\twidth: 100%;\n\tmargin-top: 5px;\n}\n\n.wpo_alert_notice {\n\tbackground-color: #F06666;\n\tcolor: #FFF;\n\tpadding: 5px;\n\tdisplay: block;\n\tmargin-bottom: 5px;\n\tborder-radius: 5px;\n}\n\n.wpo_error_field {\n\tborder-color: #F06666 !important;\n}\n\n.save_settings_reminder {\n\tdisplay: none;\n\tcolor: #333;\n\tpadding: 15px 20px;\n\tbackground-color: #F0A5A4;\n\tborder-radius: 3px;\n\tmargin: 15px 0;\n}\n\n#wpo_remove_selected_sizes {\n\tmargin-top: 20px;\n}\n\n.wpo_unused_images_buttons_wrap {\n\tfloat: right;\n\tmargin-right: 20px;\n}\n\n.wpo_unused_images_container h3 {\n\tmin-width: 150px;\n}\n\n#wpo_unused_images, #wpo_smush_images_grid {\n\tmax-height: 500px;\n\toverflow-y: auto;\n}\n\n#wpo_unused_images a {\n\toutline: none;\n}\n\n#wp-optimize-nav-tab-wpo_database-tables-contents .wpo-take-a-backup {\n\tmargin-left: 1%;\n}\n\n.run-single-table-delete {\n\tmargin-top: 3px;\n}\n\n#wpo_browser_cache_output,\n#wpo_gzip_compression_output,\n#wpo_advanced_cache_output {\n\tbackground: #F0F0F0;\n\tpadding: 10px;\n\tborder: 1px solid #CCC;\n\twhite-space: pre-wrap;\n}\n\n#wpo_gzip_compression_error_message,\n.wpo-error {\n\tcolor: #9B0000;\n}\n\n.notice.wpo-error__enabling-cache {\n\twhite-space: pre;\n\tmargin-bottom: 15px;\n}\n\na.loading.wpo-refresh-gzip-status {\n\tcolor: rgba(68, 68, 68, 0.5);\n\ttext-decoration: none;\n}\n\na.loading.wpo-refresh-gzip-status img.wpo_spinner.display-none {\n\tdisplay: inline-block;\n}\n\n#wpo_browser_cache_expire_days,\n#wpo_browser_cache_expire_hours {\n\twidth: 50px;\n}\n\n.wpo-enabled .wpo-disabled {\n\tdisplay: none;\n}\n\n.wpo-disabled .wpo-enabled {\n\tdisplay: none;\n}\n\n.wpo-button-wrap {\n\tmargin-top: 10px;\n}","body[class*=\"toplevel_page_WP-Optimize\"] #wpbody,\nbody[class*=\"wp-optimize_page_\"] #wpbody {\n\tpadding-right: 15px;\n\t@media screen and (max-width: 768px) {\n\t\tpadding-right: 0;\n\t}\n}\n\nbody.toplevel_page_WP-Optimize.rtl #wpbody {\n\tpadding-left: 15px;\n\tpadding-right: 0;\n\t@media screen and (max-width: 768px) {\n\t\tpadding-left: 10px;\n\t}\n}\n\nbody[class*=\"toplevel_page_WP-Optimize\"] #wpbody-content,\nbody[class*=\"wp-optimize_page_\"] #wpbody-content {\n\tpadding-top: 80px;\n\n\t@media (max-width: 600px) {\n\t\tpadding-top: 0;\n\t}\t\n\n\t@media (min-width: 820px) {\n\t\tpadding-top: 100px;\n\t}\t\n}\n\n#wp-optimize-wrap {\n\tposition: relative;\n\tpadding-top: 20px;\n\n\t@media (max-width: 600px) {\n\t\tpadding-top: 110px;\n\t}\t\n\n\t@media(max-width: $breakpoint-small) {\n\t\tmargin-right: 0;\n\t}\n}\n\n/* DASHBOARD */\n\n.wpo-main-header {\n\n\theight: 77px;\n\tposition: fixed;\n\ttop: 32px;\n\tleft: 160px;\n\tbackground: #FFF;\n\tright: 0;\n\tz-index: 9980;\n\n\t@media (min-width: 820px) {\n\t\theight: 105px;\n\t}\t\n\n\t.wpo-logo__container {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tjustify-content: center;\n\t\tposition: relative;\n\t\theight: 100%;\n\t\tline-height: 1;\n\t\tfont-size: 1rem;\n\t\tpadding-left: 50px;\n\t\tmargin-left: 10px;\n\t}\n\n\t.wpo-logo {\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\ttop: 50%;\n\t\ttransform: translateY(-50%);\n\t\twidth: 50px;\n\t}\n\n\t.wpo-subheader {\n\t\tmargin: 0;\n\t\tfont-weight: 300;\n\t\tcolor: $wp-secondary-gray;\n\t\tline-height: 1.3;\n\n\t\t@media (max-width: 1080px) {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n\n\tp.wpo-header-links {\n\t\tmargin: 0;\n\t\tfont-size: 0.7rem;\n\t\tposition: absolute;\n\t\tright: 0;\n\t\tpadding: 6px 15px;\n\t\tbackground: #EDEEEF;\n\t\tborder-bottom-left-radius: 5px;\n\t\tz-index: 1;\n\n\t\ta {\n\t\t\ttext-decoration: none;\n\t\t}\n\n\t\t.wpo-header-links__label {\n\t\t\tcolor: $wp-secondary-gray-light;\n\t\t\tposition: absolute;\n\t\t\tright: 100%;\n\t\t\twidth: 110px;\n\t\t\ttext-align: right;\n\t\t\tpadding-right: 10px;\n\t\t}\n\n\t\t@media (max-width: 820px) {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n\n\tp.wpo-header-links__mobile {\n\t\tpadding: 10px;\n\t\tbackground: #EDEEEF;\n\t\tmargin-bottom: 0;\n\t\t@media (min-width: 820px) {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\ta {\n\t\t\tdisplay: inline-block;\n\t\t\tpadding: 4px;\n\t\t\tfont-size: .8rem;\n\t\t}\n\t\t.wpo-header-links__label {\n\t\t\tcolor: $wp-secondary-gray-light;\n\t\t}\n\n\t}\n\n\t@media (max-width: 600px) {\n\t\t\n\t\t.wpo-logo__container strong {\n\t\t\twidth: 140px;\n\t\t\tdisplay: inline-block;\n\t\t}\n\n\t}\n\n\tbody.auto-fold & {\n\t\t@media (max-width: 960px) {\n\t\t\tleft: 36px;\n\t\t}\n\t\t@media (max-width: $breakpoint-small) {\n\t\t\tleft: 0;\n\t\t\ttop: 46px;\n\t\t}\n\t\t@media (max-width: 600px) {\n\t\t\tposition: absolute;\n\t\t\tleft: -10px;\n\t\t\tright: -10px;\n\t\t\ttop: 10px;\n\t\t}\n\t}\n\n\tbody.auto-fold #screen-meta + #wp-optimize-wrap & {\n\t\t@media (max-width: 600px) {\n\t\t\ttop: 0;\n\t\t}\n\t}\n\n\tbody.folded & {\n\t\t@media (min-width: $breakpoint-small) {\n\t\t\tleft: 36px;\n\t\t}\n\t}\n\tbody.is-scrolled & {\n\t\tbox-shadow: 0 5px 25px rgba(0, 0, 0, 0.17);\n\t}\n\n\t/* RTL */\n\tbody.rtl & {\n\t\tright: 160px;\n\t\tleft: 0;\n\n\t\t.wpo-logo__container {\n\t\t\tpadding-left: 10px;\n\t\t\tpadding-right: 50px;\n\t\t\tmargin-left: 0;\n\t\t\tmargin-right: 10px;\n\t\t}\n\t\n\t\t.wpo-logo {\n\t\t\tposition: absolute;\n\t\t\tleft: auto;\n\t\t\tright: 0;\n\t\t}\t\n\n\t\tp.wpo-header-links {\n\t\t\tright: auto;\n\t\t\tleft: 0;\n\t\t\tborder-bottom-right-radius: 5px;\n\t\t\tborder-bottom-left-radius: 0;\n\t\t\n\t\t\t.wpo-header-links__label {\n\t\t\t\tposition: absolute;\n\t\t\t\tleft: 100%;\n\t\t\t\tright: auto;\n\t\t\t\twidth: 110px;\n\t\t\t\ttext-align: left;\n\t\t\t\tpadding-left: 10px;\n\t\t\t}\n\t\t}\n\t}\n\n\tbody.rtl.auto-fold & {\n\t\t@media (max-width: 960px) {\n\t\t\tright: 36px;\n\t\t}\n\t\t@media (max-width: $breakpoint-small) {\n\t\t\tright: 0;\n\t\t\ttop: 46px;\n\t\t}\n\t\t@media (max-width: 600px) {\n\t\t\tposition: absolute;\n\t\t\tleft: -10px;\n\t\t\tright: -10px;\n\t\t\ttop: 10px;\n\t\t}\n\t}\n\n\tbody.rtl.folded & {\n\t\t@media (min-width: $breakpoint-small) {\n\t\t\tright: 36px;\n\t\t\tleft: 0;\n\t\t}\n\t}\n\n}\n\n.wpo-page {\n\tbody.rtl & {\n\t\tpadding-right: 0;\n\t}\n\t@media (min-width: 769px) {\n\t}\n\n\t&:not(.active) {\n\t\tdisplay: none;\n\t}\n}\n\n.wpo-introduction-notice {\n\tpadding: 15px 20px;\n\tmargin-top: 30px;\n\tmargin-bottom: 30px;\n\tbackground: #FFF url('../images/notices/logo-bg-notice.png') no-repeat 100% 100%;\n\n\th3 {\n\t\tfont-size: 2em;\n\t}\n\n\tp:not(.font-size__normal) {\n\t\tfont-size: 1.2em;\n\t}\n\n\t.wpo-introduction-notice__footer-links {\n\t\tpadding-top: 20px;\n\t\t> a, > span {\n\t\t\tdisplay: inline-block;\n\t\t\tmargin-left: 5px;\n\t\t\tmargin-right: 5px;\n\t\t}\n\t}\n}\n\n/* Columns */\n@media (min-width: 1200px) {\n\n\t.wpo-tab-postbox.right-col {\n\t\twidth: 350px;\n\t\tfloat: right;\n\t\tbox-sizing: border-box;\n\t\tmargin-top: 3.1rem;\n\t}\n\n\t.right-col + .wpo-main {\n\t\tfloat: left;\n\t\tbox-sizing: border-box;\n\t\twidth: calc(100% - 380px);\n\t}\n\n}\n","@keyframes rotate {\n\n\t0% {\n\t\ttransform: rotate(0);\n\t}\n\n\t100% {\n\t\ttransform: rotate(360deg);\n\t}\n\n}\n\n/* Common BLOCKS */\n\n\n/* Buttons */\n\n#wp-optimize-wrap {\n\n\t.button-large {\n\t\t@media (max-width: $breakpoint-small) {\n\t\t\tdisplay: block;\n\t\t\twidth: 100%;\n\t\t}\n\t}\n\n\t.red {\n\t\tcolor: $red;\n\t}\n\n\tdiv[id*=\"_notice\"] div.updated,\n\t> .notice {\n\t\tmargin-left: 0;\n\t\tmargin-right: 0;\n\t}\n}\n\n.notice.notice-warning.wpo-warning {\n\tmargin-bottom: 18px;\n}\n\n.notice.notice-warning.wpo-warning p {\n\tpadding-left: 36px;\n\tposition: relative;\n}\n\n.notice.notice-warning.wpo-warning p > .dashicons {\n\tposition: absolute;\n\tleft: 0;\n\tfont-size: 26px;\n\ttop: 50%;\n\ttransform: translateY(-50%);\n\theight: 26px;\n\tcolor: #FFB900;\n}\n\n.button.button-block {\n\tdisplay: block;\n\twidth: 100%;\n\ttext-align: center;\n}\n\n.wpo-refresh-button {\n\tfloat: right;\n}\n\n.wpo-refresh-button:hover {\n\tcursor: pointer;\n}\n\n.wpo-refresh-button .dashicons {\n\ttext-decoration: none;\n\tline-height: inherit;\n\tfont-size: inherit;\n}\n\n/* Helper classes */\n\n*[class*=\"wpo-badge\"] {\n\tdisplay: inline-block;\n\tfont-size: .8em;\n\ttext-transform: uppercase;\n\tbackground: $wp-lighter-gray;\n\tpadding: 3px 5px;\n\tline-height: 1;\n\tborder-radius: 3px;\n}\n\n.wpo-badge__new {\n\tbackground: #DBE3E6;\n\tcolor: #00689a;\n}\n\n.wpo-first-child {\n\tmargin-top: 0;\n}\n\n#save_done, .save-done {\n\tcolor: $success;\n\tfont-size: 250%;\n}\n\np.wpo-take-a-backup {\n\tdisplay: inline-block;\n\tmargin: 0;\n\tline-height: 1;\n\tpadding-top: 8px;\n\t@media (min-width: $breakpoint-small) {\n\t\tmargin-left: 20px;\n\t}\n}\n\n/* Postbox */\n\n#wp-optimize-wrap .nav-tab-wrapper ~ .wp-optimize-nav-tab-contents > .postbox {\n\tborder: none;\n\n\t> h3:first-child {\n\t\tmargin-top: 0;\n\t}\n\n}\n\n.wpo-p25,\n.postbox.wpo-tab-postbox {\n\tpadding: 25px;\n}\n\n.wpo-tab-postbox {\n\t\n\t> h3:first-child {\n\t\tmargin-top: 0;\n\t}\n}\n\n/* Field group */\n\n.wpo-fieldgroup {\n\tbackground: $wp-lighter-gray;\n\tborder-radius: 8px;\n\tpadding: 20px;\n\n\t&:not(:last-child) {\n\t\tmargin-bottom: 2em;\n\t}\n\n\t> *:first-child {\n\t\tmargin-top: 0;\n\t}\n\t\n\t> *:last-child {\n\t\tmargin-bottom: 0;\n\t}\n\n\t&.premium-only {\n\t\tposition: relative;\n\t}\n\n\t.switch + label {\n\t\tfont-weight: 600;\n\t}\n\n\tcode {\n\t\tfont-size: inherit;\n\t\tbackground: #d8dbdc;\n\t\tborder-radius: 3px;\n\t}\n}\n\n.wpo-fieldgroup__subgroup {\n\t&:not(:last-of-type) {\n\t\tmargin-bottom: 20px;\n\t}\n}\n\n/* The switches */\n#wp-optimize-wrap {\n\n\t.switch {\n\t\tposition: relative;\n\t\tdisplay: inline-block;\n\t\twidth: 38px;\n\t\theight: 18px;\n\t\tmargin-right: 6px;\n\t\tbox-sizing: border-box;\n\n\t\t/* Hide default HTML checkbox */\n\t\tinput {\n\t\t\topacity: 0;\n\t\t\twidth: 0;\n\t\t\theight: 0;\n\t\t}\n\n\t\t/* The slider */\n\t\t.slider {\n\t\t\tposition: absolute;\n\t\t\tcursor: pointer;\n\t\t\ttop: 0;\n\t\t\tleft: 0;\n\t\t\tright: 0;\n\t\t\tbottom: 0;\n\t\t\tbackground-color: $wp-lighter-gray;\n\t\t\ttransition: .2s;\n\n\t\t\t&::before {\n\t\t\t\tposition: absolute;\n\t\t\t\tcontent: \"\";\n\t\t\t\theight: 8px;\n\t\t\t\twidth: 8px;\n\t\t\t\tleft: 2px;\n\t\t\t\tbottom: 2px;\n\t\t\t\tbackground-color: $wp-gray-dark;\n\t\t\t\tborder: 1px solid $wp-gray-dark;\n\t\t\t\ttransition: all .2s;\n\t\t\t}\n\n\t\t\t&::after {\n\t\t\t\tcontent: '';\n\t\t\t\tdisplay: block;\n\t\t\t\tposition: absolute;\n\t\t\t\theight: 4px;\n\t\t\t\twidth: 3px;\n\t\t\t\tright: 4px;\n\t\t\t\ttop: 4px;\n\t\t\t\tborder-radius: 50%;\n\t\t\t\tborder: 1px solid $wp-secondary-gray;\n\t\t\t\tbox-sizing: content-box\n\t\t\t}\n\n\t\t\t/* Rounded sliders */\n\t\t\t&.round {\n\t\t\t\tborder-radius: 23px;\n\t\t\t\tborder: 2px solid $wp-gray-dark;\n\t\t\t\t&::before {\n\t\t\t\tborder-radius: 50%;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tinput:checked + .slider {\n\t\t\tbackground: $wp-blue;\n\t\t\tborder-color: $wp-blue;\n\t\t\t&::before {\n\t\t\t\tbackground: #FFF;\n\t\t\t\tborder-color: #FFF;\n\t\t\t\ttransform: translateX(20px);\n\t\t\t}\n\n\t\t\t&::after {\n\t\t\t\tcontent: '';\n\t\t\t\tdisplay: block;\n\t\t\t\tposition: absolute;\n\t\t\t\theight: 6px;\n\t\t\t\twidth: 2px;\n\t\t\t\tleft: 7px;\n\t\t\t\ttop: 4px;\n\t\t\t\tbackground: #FFF;\n\t\t\t\tborder: none;\n\t\t\t}\n\n\t\t}\n\n\t\tinput:focus + .slider {\n\t\t\tbox-shadow: 0 0 0 2px $wp-lighter-gray, 0 0 0 3px $wp-gray-dark;\n\t\t}\n\n\t}\n\n\t.switch-container {\n\t\tdisplay: block;\n\t\tclear: both;\n\t\tlabel {\n\t\t\tline-height: 1;\n\t\t\tvertical-align: middle;\n\t\t}\n\t\t& + small {\n\t\t\tmargin-left: 49px;\n\t\t}\n\t}\n\n\t.wpo-fieldgroup > .switch-container:first-child {\n\t\tpadding-top: 0;\n\t}\n\n}\n\n/* Help popup */\n\n.wpo-info {\n\tposition: relative;\n\tdisplay: inline-block;\n\t@media (max-width:480px) {\n\t\tdisplay: block;\n\t}\n}\n\n.wpo-info__content {\n\topacity: 0;\n\tvisibility: hidden;\n\tposition: absolute;\n\ttop: 100%;\n\tleft: -25px;\n\tbackground: #FFF;\n\tpadding: 20px;\n\twidth: 380px;\n\tmax-width: 380px;\n\tz-index: 5;\n\tbox-shadow: 0px 11px 25px 0px rgba(0, 0, 0, 0), 0px 11px 25px 3000px rgba(0, 0, 0, 0);\n\ttransition: 0.2s all;\n\n\t@media (max-width:480px) {\n\t\twidth: auto;\n\t}\n}\n\nspan.wpo-info__close {\n\tdisplay: none;\n\tmargin-left: 20px;\n\tcolor: #444;\n}\n\n.wpo-info.opened {\n\n\tspan.wpo-info__close {\n\t\tdisplay: inline-block;\n\t}\n\n\t.wpo-info__content {\n\t\topacity: 1;\n\t\tvisibility: visible;\n\t\tbox-shadow: 0px 11px 25px 0px rgba(0, 0, 0, 0.3), 0px 11px 25px 3000px rgba(0, 0, 0, 0.3);\n\t}\n\n\ta.wpo-info__trigger {\n\t\tz-index: 6;\n\t}\n\t\n}\n\n.wpo-info__content img,\n.wpo-info__content iframe {\n\tmax-width: 100%;\n}\n\na.wpo-info__trigger {\n\tdisplay: inline-block;\n\ttext-decoration: none;\n\tpadding: 10px;\n\tposition: relative;\n\tbackground: #FFF;\n\tmargin-left: -10px;\n}\n\na.wpo-info__trigger span.dashicons {\n\ttext-decoration: none;\n\tvertical-align: middle;\n}\n\n.wpo-rotate {\n\tanimation: rotate 1s linear infinite;\n\ttransform-origin: 50% 50%;\n}","/* TABS */\n\n#wp-optimize-wrap h2.nav-tab-wrapper {\n margin-bottom: 0;\n\tborder-bottom: none;\n\tposition: relative;\n\t\n\t.nav-tab,\n\t.nav-tab:hover,\n\t.nav-tab:focus,\n\t.nav-tab:focus:active {\n\t\tborder: none;\n\t\tbackground: transparent;\n\t\tmargin: 0;\n\t\tborder-top: 3px solid transparent;\n\t\tpadding: 7px 15px;\n\t\tcolor: $wp-blue;\n\n\t\t.dashicons {\n\t\t\tdisplay: block;\n\t\t\tmargin: 0 auto;\n\t\t\tcolor: $wp-secondary-gray;\n\t\t\tfont-size: 30px;\n\t\t\twidth: 30px;\n\t\t\theight: 30px;\n\t\t}\n\t\t\n\t\tspan.premium-only {\n\t\t\tdisplay: inline-block;\n\t\t\tmargin-left: 6px;\n\t\t\tpadding: 4px;\n\t\t\tfont-size: 10px;\n\t\t\tbackground: $wp-blue;\n\t\t\tline-height: 1;\n\t\t\tborder-radius: 3px;\n\t\t\tcolor: #FFF;\n\t\t\tfont-weight: 300;\n\t\t\ttext-transform: uppercase;\n\t\t\tletter-spacing: .06em;\n\t\t}\t\t\n\t}\n\t\n\t.nav-tab-active,\n\t.nav-tab-active:hover,\n\t.nav-tab-active:focus,\n\t.nav-tab-active:focus:active {\n\t\tbackground: #FFF;\n\t\tbox-shadow: 0 0 1px rgba(0, 0, 0, 0.04);\n\t\tborder-top-color: $wp-blue;\n\n\t\t.dashicons {\n\t\t\tcolor: $wp-blue;\n\t\t}\n\t}\n\n\t.wpo-feedback {\n\t\tdisplay: block;\n\t\tfloat: right;\n\t\tposition: relative;\n\n\t\t> .nav-tab,\n\t\t> .nav-tab:hover,\n\t\t> .nav-tab:focus,\n\t\t> .nav-tab:focus:active {\n\t\t\tposition: relative;\n\t\t\t.dashicons {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tfont-size: 20px;\n\t\t\t\theight: 18px;\n\t\t\t\ttransform: translateY(4px);\n\t\t\t}\n\t\t}\n\n\t\t> div {\n\t\t\tdisplay: none;\n\t\t}\n\t\t&:hover {\n\t\t\ta.nav-tab::after {\n\t\t\t\tcontent: '';\n\t\t\t\tdisplay: block;\n\t\t\t\tposition: absolute;\n\t\t\t\tbottom: 0;\n\t\t\t\tright: 0;\n\t\t\t\theight: 2px;\n\t\t\t\twidth: 100%;\n\t\t\t\tbackground-color: #0172aa;\n\t\t\t}\n\t\t\t> div {\n\t\t\t\tposition: absolute;\n\t\t\t\tdisplay: block;\n\t\t\t\tbackground: #FFF;\n\t\t\t\tpadding: 15px;\n\t\t\t\tright: 0;\n\t\t\t\ttop: 100%;\n\t\t\t\tz-index: 4;\n\t\t\t\tbox-shadow: 0px 11px 25px 0px rgba(0, 0, 0, 0.1);\n\t\t\t\twidth: 350px;\n\n\t\t\t\ta {\n\t\t\t\t\tdisplay: block;\n\t\t\t\t\tfont-size: 14px;\n\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\tpadding: 6px 3px;\n\t\t\t\t\ttext-align: center;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t@media (max-width: $breakpoint-small) {\n\t\t.wpo-feedback {\n\t\t\tdisplay: none;\n\t\t}\n\t\ta:not(.nav-tab-active) {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n\t\n\ta[role=\"toggle-menu\"] {\n\t\tdisplay: block;\n\t\tfloat: right;\n\t\t@media (min-width: $breakpoint-small) {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n\n\n\ta.nav-tab.wp-optimize-nav-tab__back {\n\t\t&, &:focus:active {\t\n\n\t\t\ttext-align: right;\n\n\t\t\t.dashicons {\n\t\t\t\tcolor: $wp-light-gray;\n\t\t\t\tfont-size: 18px;\n\t\t\t\tdisplay: inline-block;\n\t\t\t\theight: auto;\n\t\t\t\tline-height: inherit;\n\t\t\t\twidth: 20px;\n\t\t\t}\n\n\t\t\t@media (min-width: $breakpoint-small) {\n\t\t\t\tposition: absolute;\n\t\t\t\tbottom: 14px;\n\t\t\t\tright: 0;\n\t\t\t\tfont-size: 12px;\n\t\t\t\tfont-weight: 400;\n\t\t\t\ttext-decoration: none;\n\t\t\t\tpadding: 0;\n\t\t\t\n\t\t\t\t.dashicons {\n\t\t\t\t\tcolor: $wp-light-gray;\n\t\t\t\t\tfont-size: 18px;\n\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\theight: auto;\n\t\t\t\t\tline-height: inherit;\n\t\t\t\t\twidth: 20px;\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t}\n\t\n\t}\n}\n\n@media (max-width: $breakpoint-small) {\n\n\t.wpo-mobile-menu-opened {\n\n\t\t.wpo-main .wpo-tab-postbox {\n\t\t//\tdisplay: none;\n\t\t}\n\n\t\th2.nav-tab-wrapper a {\n\t\t\tdisplay: block;\n\t\t\tfloat: none;\n\n\t\t\t&.nav-tab {\n\t\t\t\tdisplay: block !important;\n\t\t\t}\n\n\t\t\t&:not(.nav-tab-active) {\n\t\t\t\tbackground: #f9f9f9 !important;\n\t\t\t}\n\n\t\t\t&.nav-tab-active,\n\t\t\t&.nav-tab-active:focus {\n\t\t\t\tborder-top: none;\n\t\t\t\tborder-left: 3px solid;\n\t\t\t}\n\n\t\t\t&.nav-tab-active,\n\t\t\t&.nav-tab-active:focus,\n\t\t\t&:focus,\n\t\t\t&:hover,\n\t\t\t& {\n\t\t\t\t.dashicons {\n\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\tline-height: inherit;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t&[role=\"toggle-menu\"] {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\n\t}\n\n}\n\n\n/* Pages MENU */\n\n.wpo-pages-menu {\n\tposition: absolute;\n\tbottom: 0;\n\tright: 0;\n\tdisplay: none;\n\n\t@media (max-width: 820px) {\n\t\t.opened + & {\n\t\t\tdisplay: block;\n\t\t\tbox-shadow: 0 5px 25px rgba(0, 0, 0, 0.17);\n\t\t}\n\t}\n\n\t@media (min-width: 821px) {\n\t\tdisplay: flex;\n\t\theight: 77px;\n\t}\n\n\t> a {\n\t\ttext-decoration: none;\n\t\tposition: relative;\n\t\tcolor: inherit;\n\t\ttext-align: center;\n\t\tbox-sizing: border-box;\n\t\tdisplay: block;\n\t\tcolor: $wp-gray-dark;\n\n\t\t@media (min-width: 821px) {\n\t\t\tpadding: 0 8px;\n\t\t\theight: 77px;\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\tjustify-content: center;\n\n\t\t\t> span {\n\t\t\t\tdisplay: block;\n\t\t\t\tmargin: 0 auto;\n\t\t\t}\n\t\t}\n\n\t\t@media (max-width: 820px) {\n\t\t\tpadding: 15px;\n\t\t\tfont-size: 1.2em;\n\t\t}\n\n\t\t&.active {\n\t\t\t&::after {\n\t\t\t\tcontent: '';\n\t\t\t\tdisplay: block;\n\t\t\t\tposition: absolute;\n\t\t\t\tbottom: 0;\n\t\t\t\tleft: 0;\n\t\t\t\twidth: 100%;\n\t\t\t\theight: 3px;\n\t\t\t\tbackground: $brand;\n\t\t\t\tcolor: $wp-gray-darker;\n\n\t\t\t\t@media (max-width: 820px) {\n\t\t\t\t\twidth: 3px;\n\t\t\t\t\theight: 100%;\n\t\t\t\t}\n\n\t\t\t}\n\t\t\t@media (max-width: 820px) {\n\t\t\t\tcolor: $brand;\n\t\t\t}\n\t\t}\n\n\t\t&:hover {\n\t\t\tbackground: #F9F9F9;\n\t\t\tcolor: $wp-gray-darker;\n\t\t}\n\t}\n\n\tspan.separator {\n\t\tdisplay: block;\n\t\twidth: 2px;\n\t\tbackground: #EFEFEF;\n\t\tmargin-top: 18px;\n\t\tmargin-bottom: 18px;\n\t\tmargin-right: 5px;\n\t\tmargin-left: 5px;\n\t\t@media (max-width: 820px) {\n\t\t\twidth: 80%;\n\t\t\theight: 2px;\n\t\t\tmargin: 10px 10%;\n\t\t}\n\t}\n\n\t@media (max-width: 820px) {\n\t\ttext-align: center;\n\t\ttop: 100%;\n\t\twidth: 100%;\n\t\tbottom: auto;\n\t\tbackground: #FFF;\t\t\n\n\t}\n\n\tbody.rtl & {\n\t\tleft: 0;\n\t\tright: auto;\n\t}\n}\n\n#wp-optimize-nav-page-menu {\n\tposition: absolute;\n\tright: 0;\n\tbottom: 0;\n\tdisplay: flex;\n\theight: 77px;\n flex-direction: column;\n padding: 0 20px;\n align-items: center;\n justify-content: center;\n\ttext-decoration: none;\n\n\t&:not(.opened) .dashicons-no-alt {\n\t\tdisplay: none;\n\t}\n\n\t&.opened .dashicons-menu {\n\t\tdisplay: none;\n\t}\n\n\t@media (min-width: 821px) {\n\t\tdisplay: none;\n\t}\n\n\tbody.rtl & {\n\t\tright: auto;\n\t\tleft: 0;\n\t}\n}\n\n/* DASHBOARD Menu */\n\n/* Calculate column width with a $spacing gutter */\n.wpo-dashboard-pages-menu {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\n\t/* Same size for 1 to 3 items */\n\t&[data-itemscount=\"1\"],\n\t&[data-itemscount=\"2\"],\n\t&[data-itemscount=\"3\"] {\n\t\t.wpo-dashboard-pages-menu__item {\n\t\t\twidth: calc(33.333% - 40px / 3);\n\t\t}\n\t}\n\n\t/* above 3 items, change sizes */\n\t@for $count from 4 to 6 {\n\t\t&[data-itemscount=\"$count\"] {\n\t\t\t.wpo-dashboard-pages-menu__item {\n\t\t\t\twidth: calc(100% / $count - $spacing * ($count - 1) / $count);\n\t\t\t}\n\t\t}\n\t}\n\n\t.postbox.wpo-dashboard-pages-menu__item {\n\t\tpadding: $spacing;\n\t\tmargin-right: $spacing;\n\t\tbox-sizing: border-box;\n\t\tpadding-bottom: 60px;\n\t\tmin-width: 0;\n\t\n\t\t&:last-child {\n\t\t\tmargin-right: 0;\n\t\t}\n\t\n\t\th3 {\n\t\t\tmargin-top: 0;\n\n\t\t\t.dashicons {\n\t\t\t\tcolor: $wp-secondary-gray;\n\t\t\t\tline-height: 1;\n\t\t\t\theight: 18px;\n\t\t\t\tmargin-top: -2px;\n\t\t\t\tmargin-right: 10px\n\t\t\t}\n\n\t\t}\n\n\t\ta {\n\t\t\tposition: absolute;\n\t\t\tbottom: $spacing;\n\t\t\tleft: $spacing;\n\t\t\twidth: calc(100% - $spacing * 2) !important;\n\t\t}\n\n\t\t@media (max-width: $breakpoint-small) {\n\t\t\twidth: 100%;\n\t\t\tmargin-right: 0;\n\t\t\tpadding-bottom: 20px;\n\n\t\t\ta.button.button-large {\n\t\t\t\twidth: auto !important;\n\t\t\t\tleft: auto;\n\t\t\t\tbottom: auto;\n\t\t\t\ttop: 50%;\n\t\t\t\ttransform: translateY(-50%);\n\t\t\t\tright: $spacing;\n\t\t\t}\n\n\t\t\th3 {\n\t\t\t\tmargin: 0;\n\t\t\t}\n\n\t\t\tp {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\n\t\t}\n\t\n\t}\n\n}\n\n/* Admin bar separator */\n\n#wpadminbar .quicklinks .menupop.hover ul li.separator .ab-item.ab-empty-item {\n height: 2px;\n line-height: 2px;\n background: #ffffff17;\n margin: 5px 10px;\n width: auto;\n min-width: 0;\n}","/* Unused images / wpo_smush_image / image grid*/\n\n.wpo_unused_image, .wpo_smush_image {\n\tposition: relative;\n\tmargin: 4px;\n\twidth: calc(50% - 8px);\n\ttext-align: center;\n\n\t@media (min-width: 500px) {\n\t\twidth: calc(25% - 8px);\n\t}\n\n\t@media (min-width: $breakpoint-small) {\n\t\twidth: calc(16.6666% - 8px);\n\t}\n\n\t@media (min-width: 1100px) {\n\t\twidth: calc(12.5% - 8px);\n\t}\n\n\t.wpo_unused_image__input {\n\t\tposition: absolute;\n\t\ttop: 10px;\n\t\topacity: 0;\n\t\twidth: 0;\n\t\theight: 0;\n\t}\n\t\n\tlabel {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t\tposition: relative;\n\t\tpadding: 1px;\n\t\tborder: 3px solid $wp-lighter-gray;\n\t\tbox-sizing: border-box;\n\n\t\t&::before {\n\t\t\tcontent: \"\";\n\t\t\tdisplay: block;\n\t\t\tpadding-top: 100%;\n\t\t}\n\n\t\t.thumbnail {\n\t\t\tposition: absolute;\n\t\t\ttop: 1px;\n\t\t\tleft: 1px;\n\t\t\twidth: calc(100% - 2px);\n\t\t\theight: calc(100% - 2px);\n\t\t\tbackground-repeat: no-repeat;\n\t\t\tbackground-size: cover;\n\t\t\tbackground-position: 50% 50%;\n\t\t\toverflow: hidden;\n\t\t\tbackground: rgba(220, 220, 220, 0.2);\n\n\t\t\timg {\n\t\t\t\tdisplay: block;\n\t\t\t\tmargin: 0;\n\t\t\t\tmax-height: 100%;\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 50%;\n\t\t\t\tleft: 50%;\n\t\t\t\ttransform: translate(-50%,-50%);\n\t\t\t\tuser-select: none;\n\t\t\t}\n\n\t\t}\n\n\t\tspan.dashicons {\n\t\t\tposition: absolute;\n\t\t\ttop: 50%;\n\t\t\tleft: 50%;\n\t\t\ttransform: translate(-50%, -50%);\n\t\t\tfont-size: 25px;\n\t\t\twidth: 25px;\n\t\t\topacity: .2;\n\t\t}\n\t}\n\t\n\t.wpo_unused_image__input:checked + label,\n\t&.selected label {\n\t\tborder-color: $wp-blue;\n\t}\n\n\t&:focus-within label {\n\t\tbox-shadow: 0 0 4px $wp-blue;\n\t}\n\t\n\ta, a.button, a.button:active {\n\t\tposition: absolute;\n\t\tz-index: 2;\n\t\tbottom: 13px;\n\t\tleft: 50%;\n\t\ttransform: translateX(-50%);\n\t\tdisplay: none;\n\t}\n\n\t&:hover {\n\n\t\ta, a.button, a.button:active {\n\t\t\tdisplay: inline-block;\n\t\t}\n\n\t}\n\n}\n\n#wpo_unused_images, #wpo_unused_images_trash, #wpo_smush_images_grid {\n\twidth: calc(100% + 8px);\n margin-left: -4px;\n margin-right: -4px;\n\tmax-height: 500px;\n\toverflow-y: auto;\n display: flex;\n\tflex-wrap: wrap;\n\tposition: relative;\n\n\t.wpo-fieldgroup {\n\t\twidth: 100%;\n\t\tmargin: 4px;\n\t}\n\n}\n\n#wpo_unused_images a, #wpo_unused_images_trash a {\n\toutline: none;\n}\n\n.wpo-unused-images__premium-mask,\n.wpo-unused-image-sizes__premium-mask {\n\tposition: absolute;\n\ttop: 0; \n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n\tz-index: 1;\n\tbackground: linear-gradient(to bottom, rgba(255, 255, 255, 0), rgba(255, 255, 255, 0.85));\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n.wpo-unused-image-sizes__premium-mask {\n\tbackground: linear-gradient(to bottom, rgba(255, 255, 255, 0.3), rgba(255, 255, 255, 0.85));\n}\n\na.wpo-unused-images__premium-link {\n\tbackground: #FFF;\n\tdisplay: inline-block;\n\tpadding: 10px;\n\tborder-radius: 3px;\n\tbox-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);\n}\n","/* More Plugins page */\n\n/* Plugins family / Premium */\n\np.wpo-plugin-installed {\n color: $success;\n}\n\n/* Settings repeater */\n\n.wpo-repeater__add {\n\tdisplay: inline-block;\n\tcursor: pointer;\n\tfont-weight: bold;\n\ttext-decoration: none;\n}\n\n\n/* Plugin familly tab */\n\n.wpo-plugin-family__premium h2 {\n margin: 0;\n padding: 25px;\n}\n\n.wpo-plugin-family__plugins {\n display: flex;\n flex-wrap: wrap;\n\tpadding-left: 1px;\n\tpadding-bottom: 1px;\n}\n\n.wpo-plugin-family__plugin {\n flex: auto;\n width: 100%;\n padding: 30px;\n box-sizing: border-box;\n border: 1px solid #E3E4E7;\n\tmargin-left: -1px;\n\tmargin-bottom: -1px;\n\n\t@media (min-width: $breakpoint-small) {\n\t\twidth: 50%;\n\n\t\t.wpo-plugin-family__free & {\n\t\t\twidth: 100%;\n\t\t}\n\t}\n\n\t@media (max-width: 1080px) {\n\t\t.wpo-plugin-family__free & {\n\t\t\twidth: 50%;\n\t\t}\n\t}\n\n\t@media (max-width: $breakpoint-small) {\n\t\t.wpo-plugin-family__free & {\n\t\t\twidth: 100%;\n\t\t}\n\t}\n\n}\n\ndiv#wp-optimize-nav-tab-wpo_mayalso-may_also-contents .wpo-tab-postbox {\n padding: 0;\n}\n\n/* Added for WPO Premium Features tab */\n.wpo_feature_cont {\n\twidth: 64.5%;\n}\n\n.wpo_plugin_family_cont {\n\twidth: 34.5%;\n}\n\n@media (max-width: 1080px) {\n\n\t.wpo_feature_cont,\n\t.wpo_plugin_family_cont {\n\t\twidth: 100%;\n\t\tfloat: none;\n\t\tmargin: 0;\n\t}\n\n}\n\n.wpo_feature_cont,\n.wpo_plugin_family_cont {\n\n\theader {\n\t\tpadding: 20px;\n\n\t\t@media (max-width: 1080px) {\n\t\t\tpadding: 40px;\t\t\n\t\t}\n\n\t\th2 {\n\t\t\tmargin: 0;\n\t\t}\n\t\n\t\tp {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\n\t}\n\n}\n\n.wpo_feat_table, .wpo_feat_th, .wpo_feat_table td {\n\tborder: none;\n\tborder-collapse: collapse;\n\tbackground-color: white;\n\tfont-size: 120%;\n\ttext-align: center;\n}\n\n.wpo_feat_table {\n\ttd {\n\t\tborder: 1px solid #F1F1F1;\n\t\tborder-bottom-width: 4px;\n\t\tpadding: 15px;\n\t}\n\n\ttd:nth-child(2), td:nth-child(3) {\n\t\tbackground: rgba(241, 241, 241, 0.38);\n\t}\n\n\tp {\n\t\tpadding: 0px 10px;\n\t\tmargin: 5px 0px;\n\t\tfont-size: 13px;\n\t}\n\n\th4 {\n\t\tmargin: 5px 0px;\n\t}\n\n\t.dashicons {\n\t\twidth: 25px;\n\t\theight: 25px;\n\t\tfont-size: 25px;\n\t\tline-height: 1;\n\t}\n\n\t.dashicons-yes, .updraft-yes {\n\t\tcolor: green;\n\t}\n\t\n\t.dashicons-no-alt, .updraft-no {\n\t\tcolor: red;\n\t}\n\t\n\ttr.wpo-main-feature-row td {\n\t\tbackground: #f1f1f1;\n\t\tborder-bottom-color: #fafafa;\n\n\t\timg.wpo-premium-image {\n\t\t\twidth: 64px;\n\t\t}\n\t}\n}\n\n\n\n.wpo-premium-image {\n\tdisplay: none;\n}\n\n@media screen and (min-width: 720px) {\n\n\t#wpoptimize_table_list_filter {\n\t\twidth: 40%;\n\t}\n\n\t.wpo-premium-image {\n\t\tdisplay: block;\n\t\tfloat: left;\n\t\tpadding: 16px 18px;\n\t\twidth: 30px;\n\t\theight: auto;\n\t}\n\n}\n\n@media screen and (min-width: 1220px) {\n\n\t.wpo_feat_table td:nth-child(2), .wpo_feat_table td:nth-child(3) {\n\t\twidth: 110px;\n\t}\n\n}\n\n.other-plugin-title {\n\ttext-decoration: none;\n}\n\n@media screen and (max-width: $breakpoint-small) {\n\n\ttable.wpo_feat_table {\n\n\t\tdisplay: block;\n\n\t\ttr {\n\t\t\tdisplay: flex;\n\t\t\tflex-wrap: wrap;\n\t\t}\n\n\t\ttd {\n\t\t\tdisplay: block;\n\n\t\t\t&:first-child {\n\t\t\t\twidth: 100%;\n\t\t\t\tborder-bottom: none;\n\t\t\t}\n\n\t\t\t&:not(:first-child) {\n\t\t\t\twidth: 50%;\n\t\t\t\tbox-sizing: border-box;\n\t\t\t}\n\n\t\t\t&:first-child:empty {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\n\t\t\t&[data-colname]::before {\n\t\t\t\tcontent: attr(data-colname);\n\t\t\t\tfont-size: 0.8rem;\n\t\t\t\tcolor: #CCC;\n\t\t\t\tline-height: 1;\n\t\t\t}\n\t\t}\n\t}\n\n}\n\n.wpo-cache-feature-image {\n\twidth: 40px;\n\tpadding: 16px 14px;\n}\n","\n/* tablesorter */\n\n#wp-optimize-wrap {\n\n\t.wp-list-table {\n\t\t\n\t\ttd {\n\t\t\tword-break: break-all; \n\t\t}\n\n\t}\n\n\t@media screen and (max-width: $breakpoint-small ) {\n\n\t\t.wp-list-table.wp-list-table-mobile-labels tbody {\n\n\t\t\t&, tr, th, td {\n\t\t\t\tdisplay: block;\n\t\t\t}\n\n\t\t\ttd {\n\t\t\t\tpadding: 3px 8px 3px 35%;\n\t\t\t\tword-break: break-word;\n\t\t\t\tbox-sizing: border-box; \n\n\t\t\t\t&::before {\n\t\t\t\t\tcolor: $wp-light-gray;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\t\t\n\n\t\t.wp-list-table.wp-list-table-mobile-labels thead {\n\n\t\t\t&, tr {\n\t\t\t\tdisplay: block;\n\t\t\t}\n\n\t\t\tth.column-primary {\n\t\t\t\tdisplay: block;\n\t\t\t\tbox-sizing: border-box; \n\t\t\t}\n\n\t\t\tth:not(.column-primary) {\n\t\t\t\tdisplay: none !important; \n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tbody.rtl & {\n\t\t.wpo-table-list-filter {\n\t\t\ttext-align: left;\n\t\t}\n\t\t@media screen and (max-width: $breakpoint-small ) {\n\t\t\t.wp-list-table.wp-list-table-mobile-labels tbody {\n\t\t\t\ttd {\n\t\t\t\t\tpadding: 3px 35% 3px 8px;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n.tablesorter-headerRow th {\n\tvertical-align: top;\n}\n\nth:not(.sorter-false) .tablesorter-header-inner {\n\n\tcolor: #0074ab;\n\n\t&::after {\n\t\tcontent: '';\n\t\tfont-family: 'dashicons';\n\t\tfont-size: 20px;\n\t\tline-height: 20px;\n\t\theight: 20px;\n\t\twidth: 20px;\n\t\tdisplay: none;\n\t\tvertical-align: bottom;\n\t}\n\n}\n\nth.tablesorter-header.tablesorter-headerAsc,\nth.tablesorter-header.tablesorter-headerDesc {\n font-weight: 500;\n border-bottom-color: $wp-blue;\n\t.tablesorter-header-inner::after {\n\t\tdisplay: inline-block;\n\t}\n}\n\nth.tablesorter-header.tablesorter-headerDesc .tablesorter-header-inner::after {\n content: \"\\f140\";\n}\n\nth.tablesorter-header.tablesorter-headerAsc .tablesorter-header-inner::after {\n content: \"\\f142\";\n}\n\nth.tablesorter-header:focus {\n outline: none;\n\tbox-shadow: 0 0 3px rgba(0, 116, 171, 0.78);\n\n\t&:not(.tablesorter-headerAsc):not(.tablesorter-headerDesc) .tablesorter-header-inner::after {\n\t\tcontent: \"\\f142\";\n\t\topacity: 0.5;\n\t}\n\n}\n\n.tablesorter.hasFilters tr.filtered {\n display: none;\n}\n",".wpo-text__dim {\n .dashicons-info {\n margin-top: 2px;\n margin-right: 5px;\n border-radius: 30px;\n background: #fff;\n color: $red;\n }\n}\n\n#wp-optimize-nav-tab-wpo_cache-advanced-contents {\n textarea {\n width: 100%;\n border-radius: 5px;\n height: 100px;\n min-height: 100px;\n margin-top: 10px;\n margin-bottom: 10px;\n }\n}\n\n#page_cache_length_value {\n height: 28px;\n position: relative;\n top: 2px;\n}\n\n#wp_optimize_preload_cache_status {\n margin-left: 10px;\n display: inline-block;\n color: #82868B;\n font-size: smaller;\n}\n\n.align-left {\n margin: 10px 10px 0px 0px;\n float: left;\n}\n\ntextarea.cache-settings {\n display: block;\n clear: both;\n min-height: 225px;\n overflow: scroll;\n min-width: 75%;\n margin: 10px 0px;\n}\n\n#wp-optimize-purge-cache, \n#wp-optimize-purge-cache ~ span, \n#wp-optimize-purge-cache ~ img {\n vertical-align: middle;\n top: auto;\n}\n\n#wp-optimize-nav-tab-wpo_cache-cache-contents .wpo-error {\n font-size: 12px;\n}\n\n\n#wpo_browser_cache_error_message {\n padding-top: 10px;\n padding-bottom: 10px;\n margin-left: 0;\n margin-bottom: 10px;\n \n &:empty {\n display: none;\n }\n}\n\n#wp-optimize-nav-tab-wpo_cache-advanced-contents,\n#wp-optimize-nav-tab-wpo_cache-preload-contents,\n#wp-optimize-nav-tab-wpo_cache-cache-contents {\n label {\n font-weight: 600;\n }\n}\n\n.wpo-gzip-already-enabled span.dashicons.dashicons-yes,\n.wpo-enabled > span.dashicons.dashicons-yes {\n font-size: 40px;\n width: 40px;\n height: 40px;\n line-height: 40px;\n vertical-align: middle;\n color: green;\n}\n"]}
 
css/wp-optimize-admin-3-0-18.min.css ADDED
@@ -0,0 +1,2 @@
 
 
1
+ .wpo_hidden{display:none !important}.wpo_info{background:#FFF;color:#444;font-family:-apple-system,"BlinkMacSystemFont","Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif;margin:2em auto;padding:1em 2em;max-width:700px;box-shadow:0 1px 3px rgba(0,0,0,0.13)}#wp-optimize-wrap .widefat thead th,#wp-optimize-wrap .widefat thead td{border-bottom:1px solid #e1e1e1}#wp-optimize-wrap .widefat td,#wp-optimize-wrap .widefat th{padding:8px 10px}.wpo_primary_big{padding:4px 6px !important;font-size:22px !important;min-height:34px;min-width:200px}.wpo_section{clear:both;padding:0;margin:0}.wp-optimize-settings{margin-bottom:16px}.wp-optimize-settings td>label{font-weight:bold;display:block;margin-bottom:8px}.wpo_col{display:block;float:left;margin:1% 0 1% 1%}.wpo_col:first-child{margin-left:0}.wpo_group:before,.wpo_group:after{content:"";display:table}.wpo_group:after{clear:both}.wpo_half_width{width:48%}.wpo_span_3_of_3{width:100%}.wpo_span_2_of_3{width:65.3%}.wpo_span_1_of_3{width:32.1%}#wp-optimize-wrap .nav-tab-wrapper{margin:0}@media screen and (min-width:549px){.show_on_default_sizes{display:block !important}.show_on_mobile_sizes{display:none !important}}@media screen and (max-width:548px){.show_on_default_sizes{display:none !important}.show_on_mobile_sizes{display:block !important}}@media screen and (max-width:768px){.wpo_col{margin:1% 0}.wpo_span_3_of_3{width:100%}.wpo_span_2_of_3{width:100%}.wpo_span_1_of_3{width:100%}.wpo_half_width{width:100%}}.wp-optimize-setting-is-sensitive td>label::before{content:"\f534";font-family:'dashicons';display:inline-block;margin-right:6px;font-style:normal;line-height:1;vertical-align:middle;width:20px;font-size:18px;height:20px;text-align:center;color:#72777c}.wpo-run-optimizations__container{margin-bottom:15px}.wp-optimize-optimizations-table-placeholder{min-height:80px}td.wp-optimize-settings-optimization-checkbox{width:18px;padding-left:4px;padding-right:0}.wp-optimize-settings-optimization-checkbox input{margin:0;padding:0}#retention-period{width:60px}.wp-optimize-settings-optimization-info{font-size:80%;font-style:italic}img.addons{display:block;margin-left:auto;margin-right:auto;margin-bottom:20px;max-height:44px;height:auto;max-width:100%}.wpo_spinner{width:18px;height:18px;padding-left:10px;display:none;position:relative;top:4px}.optimization_spinner{width:20px;height:20px}#wp-optimize-auto-options{margin:20px 0 0 28px}.display-none{display:none}.visibility-hidden{visibility:hidden}.margin-one-percent{margin:1%}#save_done,.save-done{color:#d94f00;font-size:220% !important}.wp-optimize-settings-optimization-info a{text-decoration:underline}.wp-optimize-settings-optimization-run-spinner{position:relative;top:2px}@media screen and (min-width:782px){td.wp-optimize-settings-optimization-run{width:180px;padding-top:16px}}#wpoptimize_table_list .tablesorter-filter-row{display:none !important}#wpoptimize_table_list .optimization_spinner{position:relative;top:2px;left:5px}#wpoptimize_table_list .optimization_spinner.visibility-hidden{display:none}#wpoptimize_table_list_filter{width:100%;margin-bottom:15px}#wpoptimize_table_list_tables_not_found{display:none;margin:20px 0}div#wpoptimize_table_list_tables_not_found+h3{margin-top:30px}#wpoptimize_table_list tr th:first-child,#wpoptimize_table_list tr td:first-child{display:none}#optimize_form .select2-container,#wp-optimize-auto-options .select2-container{width:50% !important;top:-5px;height:40px;margin-left:10px}#wpoptimize_table_list .optimization_done_icon{color:#009b24;font-size:200%;display:inline-block;position:relative}#wpo_sitelist_show_moreoptions_cron{font-size:13px;line-height:1.5;letter-spacing:1px}#wp-optimize-nav-tab-contents-images .wpo_span_2_of_3 h3{display:inline-block}.wpo_remove_selected_sizes_btn__container{margin-top:20px}.unused-image-sizes__label{display:block;line-height:1.6}@media(max-width:782px){.unused-image-sizes__label{margin-left:30px;margin-bottom:15px;line-height:1;word-break:break-word}.unused-image-sizes__label input[type=checkbox]{margin-left:-30px}body.rtl .unused-image-sizes__label{margin-right:30px;margin-left:0}body.rtl .unused-image-sizes__label input[type=checkbox]{margin-left:4px;margin-right:-30px}}#wp-optimize-nav-tab-contents-tables a{vertical-align:middle}#wpo_sitelist_moreoptions,#wpo_sitelist_moreoptions_cron{margin:4px 16px 6px 0;border:1px dotted;padding:6px 10px;max-height:300px;overflow-y:scroll;overflow-x:hidden}#wpo_sitelist_moreoptions{max-height:150px;margin-right:0}#wpo_settings_sites_list li,#wpo_settings_sites_list li a{font-size:13px;line-height:1.5}#wpo_sitelist_moreoptions_cron li{padding-left:20px}#wpo_import_error_message{display:none;color:#9b0000}#wpo_import_success_message{display:none;color:#46b450}#wp-optimize-logging-options{margin-top:10px}.wpo_logging_header{font-weight:bold;border-top:1px solid #333;border-bottom:1px solid #333;padding:5px 0;margin:0}.wpo_logging_row{border-bottom:1px solid #a1a2a3;padding:5px 0}.wpo_logging_logger_title,.wpo_logging_options_title,.wpo_logging_status_title,.wpo_logging_actions_title,.wpo_logging_logger_row,.wpo_logging_options_row,.wpo_logging_status_row,.wpo_logging_actions_row{display:inline-block;vertical-align:middle}.wpo_logging_logger_title,.wpo_logging_logger_row{width:38%}.wpo_logging_options_title,.wpo_logging_options_row{width:44%}.wpo_logging_status_title,.wpo_logging_status_row{width:8%}.wpo_logging_actions_title,.wpo_logging_actions_row{width:7%}.wpo_logging_actions_row{text-align:right}.wpo_logging_options_row{word-wrap:break-word}.wpo_logging_actions_row .dashicons-no-alt,.wpo_add_logger_form .dashicons-no-alt{background-color:#f06666;color:#FFF;width:20px;height:20px;border-radius:20px;display:inline-block;cursor:pointer;margin-left:5px}.wpo_add_logger_form .dashicons-no-alt{margin-top:12px;margin-right:10px;float:right}.wpo_logger_type{width:90%;margin-top:10px}.wpo_logger_addition_option{width:100%;margin-top:5px}.wpo_alert_notice{background-color:#f06666;color:#FFF;padding:5px;display:block;margin-bottom:5px;border-radius:5px}.wpo_error_field{border-color:#f06666 !important}.save_settings_reminder{display:none;color:#333;padding:15px 20px;background-color:#f0a5a4;border-radius:3px;margin:15px 0}#wpo_remove_selected_sizes{margin-top:20px}.wpo_unused_images_buttons_wrap{float:right;margin-right:20px}.wpo_unused_images_container h3{min-width:150px}#wpo_unused_images,#wpo_smush_images_grid{max-height:500px;overflow-y:auto}#wpo_unused_images a{outline:0}#wp-optimize-nav-tab-wpo_database-tables-contents .wpo-take-a-backup{margin-left:1%}.run-single-table-delete{margin-top:3px}#wpo_browser_cache_output,#wpo_gzip_compression_output,#wpo_advanced_cache_output{background:#f0f0f0;padding:10px;border:1px solid #CCC;white-space:pre-wrap}#wpo_gzip_compression_error_message,.wpo-error{color:#9b0000}.notice.wpo-error__enabling-cache{white-space:pre;margin-bottom:15px}a.loading.wpo-refresh-gzip-status{color:rgba(68,68,68,0.5);text-decoration:none}a.loading.wpo-refresh-gzip-status img.wpo_spinner.display-none{display:inline-block}#wpo_browser_cache_expire_days,#wpo_browser_cache_expire_hours{width:50px}.wpo-enabled .wpo-disabled{display:none}.wpo-disabled .wpo-enabled{display:none}.wpo-button-wrap{margin-top:10px}body[class*="toplevel_page_WP-Optimize"] #wpbody,body[class*="wp-optimize_page_"] #wpbody{padding-right:15px}@media screen and (max-width:768px){body[class*="toplevel_page_WP-Optimize"] #wpbody,body[class*="wp-optimize_page_"] #wpbody{padding-right:0}}body.toplevel_page_WP-Optimize.rtl #wpbody{padding-left:15px;padding-right:0}@media screen and (max-width:768px){body.toplevel_page_WP-Optimize.rtl #wpbody{padding-left:10px}}body[class*="toplevel_page_WP-Optimize"] #wpbody-content,body[class*="wp-optimize_page_"] #wpbody-content{padding-top:80px}@media(max-width:600px){body[class*="toplevel_page_WP-Optimize"] #wpbody-content,body[class*="wp-optimize_page_"] #wpbody-content{padding-top:0}}@media(min-width:820px){body[class*="toplevel_page_WP-Optimize"] #wpbody-content,body[class*="wp-optimize_page_"] #wpbody-content{padding-top:100px}}#wp-optimize-wrap{position:relative;padding-top:20px}@media(max-width:600px){#wp-optimize-wrap{padding-top:110px}}@media(max-width:782px){#wp-optimize-wrap{margin-right:0}}.wpo-main-header{height:77px;position:fixed;top:32px;left:160px;background:#FFF;right:0;z-index:9980}@media(min-width:820px){.wpo-main-header{height:105px}}.wpo-main-header .wpo-logo__container{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;position:relative;height:100%;line-height:1;font-size:1rem;padding-left:50px;margin-left:10px}.wpo-main-header .wpo-logo{position:absolute;left:0;top:50%;transform:translateY(-50%);width:50px}.wpo-main-header .wpo-subheader{margin:0;font-weight:300;color:#72777c;line-height:1.3}@media(max-width:1080px){.wpo-main-header .wpo-subheader{display:none}}.wpo-main-header p.wpo-header-links{margin:0;font-size:.7rem;position:absolute;right:0;padding:6px 15px;background:#edeeef;border-bottom-left-radius:5px;z-index:1}.wpo-main-header p.wpo-header-links a{text-decoration:none}.wpo-main-header p.wpo-header-links .wpo-header-links__label{color:#82868b;position:absolute;right:100%;width:110px;text-align:right;padding-right:10px}@media(max-width:820px){.wpo-main-header p.wpo-header-links{display:none}}.wpo-main-header p.wpo-header-links__mobile{padding:10px;background:#edeeef;margin-bottom:0}@media(min-width:820px){.wpo-main-header p.wpo-header-links__mobile{display:none}}.wpo-main-header p.wpo-header-links__mobile a{display:inline-block;padding:4px;font-size:.8rem}.wpo-main-header p.wpo-header-links__mobile .wpo-header-links__label{color:#82868b}@media(max-width:600px){.wpo-main-header .wpo-logo__container strong{width:140px;display:inline-block}}@media(max-width:960px){body.auto-fold .wpo-main-header{left:36px}}@media(max-width:782px){body.auto-fold .wpo-main-header{left:0;top:46px}}@media(max-width:600px){body.auto-fold .wpo-main-header{position:absolute;left:-10px;right:-10px;top:10px}}@media(max-width:600px){body.auto-fold #screen-meta+#wp-optimize-wrap .wpo-main-header{top:0}}@media(min-width:782px){body.folded .wpo-main-header{left:36px}}body.is-scrolled .wpo-main-header{box-shadow:0 5px 25px rgba(0,0,0,0.17)}body.rtl .wpo-main-header{right:160px;left:0}body.rtl .wpo-main-header .wpo-logo__container{padding-left:10px;padding-right:50px;margin-left:0;margin-right:10px}body.rtl .wpo-main-header .wpo-logo{position:absolute;left:auto;right:0}body.rtl .wpo-main-header p.wpo-header-links{right:auto;left:0;border-bottom-right-radius:5px;border-bottom-left-radius:0}body.rtl .wpo-main-header p.wpo-header-links .wpo-header-links__label{position:absolute;left:100%;right:auto;width:110px;text-align:left;padding-left:10px}@media(max-width:960px){body.rtl.auto-fold .wpo-main-header{right:36px}}@media(max-width:782px){body.rtl.auto-fold .wpo-main-header{right:0;top:46px}}@media(max-width:600px){body.rtl.auto-fold .wpo-main-header{position:absolute;left:-10px;right:-10px;top:10px}}@media(min-width:782px){body.rtl.folded .wpo-main-header{right:36px;left:0}}body.rtl .wpo-page{padding-right:0}@media(min-width:769px){}.wpo-page:not(.active){display:none}.wpo-introduction-notice{padding:15px 20px;margin-top:30px;margin-bottom:30px;background:#FFF url('../images/notices/logo-bg-notice.png') no-repeat 100% 100%}.wpo-introduction-notice h3{font-size:2em}.wpo-introduction-notice p:not(.font-size__normal){font-size:1.2em}.wpo-introduction-notice .wpo-introduction-notice__footer-links{padding-top:20px}.wpo-introduction-notice .wpo-introduction-notice__footer-links>a,.wpo-introduction-notice .wpo-introduction-notice__footer-links>span{display:inline-block;margin-left:5px;margin-right:5px}@media(min-width:1200px){.wpo-tab-postbox.right-col{width:350px;float:right;box-sizing:border-box;margin-top:3.1rem}.right-col+.wpo-main{float:left;box-sizing:border-box;width:calc(100% - 380px)}}@keyframes rotate{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@media(max-width:782px){#wp-optimize-wrap .button-large{display:block;width:100%}}#wp-optimize-wrap .red{color:#e07575}#wp-optimize-wrap div[id*="_notice"] div.updated,#wp-optimize-wrap>.notice{margin-left:0;margin-right:0}#wp-optimize-wrap textarea{width:100%;border-radius:5px;height:100px;min-height:100px;margin-top:10px;margin-bottom:10px}.notice.notice-error.wpo-warning,.notice.notice-warning.wpo-warning{margin-bottom:18px}.notice.notice-warning.wpo-warning p{padding-left:36px;position:relative}.notice.notice-warning.wpo-warning p>.dashicons{position:absolute;left:0;font-size:26px;top:50%;transform:translateY(-50%);height:26px;color:#ffb900}.button.button-block{display:block;width:100%;text-align:center}.wpo-refresh-button{float:right}.wpo-refresh-button:hover{cursor:pointer}.wpo-refresh-button .dashicons{text-decoration:none;line-height:inherit;font-size:inherit}*[class*="wpo-badge"]{display:inline-block;font-size:.8em;text-transform:uppercase;background:#f2f4f5;padding:3px 5px;line-height:1;border-radius:3px}.wpo-badge__new{background:#dbe3e6;color:#00689a}.wpo-first-child{margin-top:0}#save_done,.save-done{color:#009b24;font-size:250%}p.wpo-take-a-backup{display:inline-block;margin:0;line-height:1;padding-top:8px}@media(min-width:782px){.button ~ p.wpo-take-a-backup{margin-left:20px}}#wp-optimize-wrap .nav-tab-wrapper ~ .wp-optimize-nav-tab-contents>.postbox{border:0}#wp-optimize-wrap .nav-tab-wrapper ~ .wp-optimize-nav-tab-contents>.postbox>h3:first-child{margin-top:0}.wpo-p25,.postbox.wpo-tab-postbox{padding:25px}.wpo-tab-postbox>h3:first-child{margin-top:0}.wpo-fieldgroup{background:#f2f4f5;border-radius:8px;padding:20px}.wpo-fieldgroup:not(:last-child){margin-bottom:2em}.wpo-fieldgroup>*:first-child{margin-top:0}.wpo-fieldgroup>*:last-child{margin-bottom:0}.wpo-fieldgroup.premium-only{position:relative}.wpo-fieldgroup .switch+label{font-weight:600}.wpo-fieldgroup code{font-size:inherit;background:#d8dbdc;border-radius:3px}.wpo-fieldgroup fieldset label{display:block;margin-bottom:6px}.wpo-fieldgroup__subgroup:not(:last-of-type){margin-bottom:20px}#wp-optimize-wrap .switch{position:relative;display:inline-block;width:38px;height:18px;margin-right:6px;box-sizing:border-box}#wp-optimize-wrap .switch input{opacity:0;width:0;height:0}#wp-optimize-wrap .switch .slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#f2f4f5;transition:.2s}#wp-optimize-wrap .switch .slider::before{position:absolute;content:"";height:8px;width:8px;left:2px;bottom:2px;background-color:#555d66;border:1px solid #555d66;transition:all .2s}#wp-optimize-wrap .switch .slider::after{content:'';display:block;position:absolute;height:4px;width:3px;right:4px;top:4px;border-radius:50%;border:1px solid #72777c;box-sizing:content-box}#wp-optimize-wrap .switch .slider.round{border-radius:23px;border:2px solid #555d66}#wp-optimize-wrap .switch .slider.round::before{border-radius:50%}#wp-optimize-wrap .switch input:checked+.slider{background:#0272aa;border-color:#0272aa}#wp-optimize-wrap .switch input:checked+.slider::before{background:#FFF;border-color:#FFF;transform:translateX(20px)}#wp-optimize-wrap .switch input:checked+.slider::after{content:'';display:block;position:absolute;height:6px;width:2px;left:7px;top:4px;background:#FFF;border:0}#wp-optimize-wrap .switch input:disabled+.slider,#wp-optimize-wrap .switch input:disabled:checked+.slider{background:#555d66;border-color:#555d66;opacity:.3}#wp-optimize-wrap .switch input:focus+.slider{box-shadow:0 0 0 2px #f2f4f5,0 0 0 3px #555d66}#wp-optimize-wrap .switch-container{display:block;clear:both}#wp-optimize-wrap .switch-container label{line-height:1;vertical-align:middle}#wp-optimize-wrap .switch-container+small{margin-left:49px}#wp-optimize-wrap .switch-container [data-tooltip] .dashicons{transform:translateY(-3px)}#wp-optimize-wrap .wpo-fieldgroup>.switch-container:first-child{padding-top:0}label.wpo-label__bold{font-weight:600}.wpo-info{position:relative;display:inline-block}@media(max-width:480px){.wpo-info{display:block}}.wpo-info__content{opacity:0;visibility:hidden;position:absolute;top:100%;left:-25px;background:#FFF;padding:20px;width:380px;max-width:380px;z-index:5;box-shadow:0 11px 25px 0 rgba(0,0,0,0),0 11px 25px 3000px rgba(0,0,0,0);transition:.2s all}@media(max-width:480px){.wpo-info__content{width:auto}}span.wpo-info__close{display:none;margin-left:20px;color:#444}.wpo-info.opened span.wpo-info__close{display:inline-block}.wpo-info.opened .wpo-info__content{opacity:1;visibility:visible;box-shadow:0 11px 25px 0 rgba(0,0,0,0.3),0 11px 25px 3000px rgba(0,0,0,0.3)}.wpo-info.opened a.wpo-info__trigger{z-index:6}.wpo-info__content img,.wpo-info__content iframe{max-width:100%}a.wpo-info__trigger{display:inline-block;text-decoration:none;padding:10px;position:relative;background:#FFF;margin-left:-10px}a.wpo-info__trigger span.dashicons{text-decoration:none;vertical-align:middle}.wpo_section.wpo_group.wpo-feature-is-disabled>*:not(.wpo-show){opacity:.5}.wpo_shade{display:block;position:absolute;left:0;right:0;top:0;bottom:0;width:100%;height:100%;z-index:9979;opacity:1;background-color:rgba(255,255,255,0.88)}.wpo_shade.hidden{display:none}.wpo_shade_inner{text-align:center;padding-top:80px}.wpo_shade_inner h4{font-size:2em}.wpo_shade_inner .dashicons.dashicons-update-alt{font-size:50px;height:50px;width:50px}.wpo-rotate{animation:rotate 1s linear infinite;transform-origin:50% 50%}#wp-optimize-wrap h2.nav-tab-wrapper{margin-bottom:0;border-bottom:0;position:relative}#wp-optimize-wrap h2.nav-tab-wrapper .nav-tab,#wp-optimize-wrap h2.nav-tab-wrapper .nav-tab:hover,#wp-optimize-wrap h2.nav-tab-wrapper .nav-tab:focus,#wp-optimize-wrap h2.nav-tab-wrapper .nav-tab:focus:active{border:0;background:transparent;margin:0;border-top:3px solid transparent;padding:7px 15px;color:#0272aa}#wp-optimize-wrap h2.nav-tab-wrapper .nav-tab .dashicons,#wp-optimize-wrap h2.nav-tab-wrapper .nav-tab:hover .dashicons,#wp-optimize-wrap h2.nav-tab-wrapper .nav-tab:focus .dashicons,#wp-optimize-wrap h2.nav-tab-wrapper .nav-tab:focus:active .dashicons{display:block;margin:0 auto;color:#72777c;font-size:30px;width:30px;height:30px}#wp-optimize-wrap h2.nav-tab-wrapper .nav-tab span.premium-only,#wp-optimize-wrap h2.nav-tab-wrapper .nav-tab:hover span.premium-only,#wp-optimize-wrap h2.nav-tab-wrapper .nav-tab:focus span.premium-only,#wp-optimize-wrap h2.nav-tab-wrapper .nav-tab:focus:active span.premium-only{display:inline-block;margin-left:6px;padding:4px;font-size:10px;background:#0272aa;line-height:1;border-radius:3px;color:#FFF;font-weight:300;text-transform:uppercase;letter-spacing:.06em}#wp-optimize-wrap h2.nav-tab-wrapper .nav-tab-active,#wp-optimize-wrap h2.nav-tab-wrapper .nav-tab-active:hover,#wp-optimize-wrap h2.nav-tab-wrapper .nav-tab-active:focus,#wp-optimize-wrap h2.nav-tab-wrapper .nav-tab-active:focus:active{background:#FFF;box-shadow:0 0 1px rgba(0,0,0,0.04);border-top-color:#0272aa}#wp-optimize-wrap h2.nav-tab-wrapper .nav-tab-active .dashicons,#wp-optimize-wrap h2.nav-tab-wrapper .nav-tab-active:hover .dashicons,#wp-optimize-wrap h2.nav-tab-wrapper .nav-tab-active:focus .dashicons,#wp-optimize-wrap h2.nav-tab-wrapper .nav-tab-active:focus:active .dashicons{color:#0272aa}#wp-optimize-wrap h2.nav-tab-wrapper .wpo-feedback{display:block;float:right;position:relative}#wp-optimize-wrap h2.nav-tab-wrapper .wpo-feedback>.nav-tab,#wp-optimize-wrap h2.nav-tab-wrapper .wpo-feedback>.nav-tab:hover,#wp-optimize-wrap h2.nav-tab-wrapper .wpo-feedback>.nav-tab:focus,#wp-optimize-wrap h2.nav-tab-wrapper .wpo-feedback>.nav-tab:focus:active{position:relative}#wp-optimize-wrap h2.nav-tab-wrapper .wpo-feedback>.nav-tab .dashicons,#wp-optimize-wrap h2.nav-tab-wrapper .wpo-feedback>.nav-tab:hover .dashicons,#wp-optimize-wrap h2.nav-tab-wrapper .wpo-feedback>.nav-tab:focus .dashicons,#wp-optimize-wrap h2.nav-tab-wrapper .wpo-feedback>.nav-tab:focus:active .dashicons{display:inline-block;font-size:20px;height:18px;transform:translateY(4px)}#wp-optimize-wrap h2.nav-tab-wrapper .wpo-feedback>div{display:none}#wp-optimize-wrap h2.nav-tab-wrapper .wpo-feedback:hover a.nav-tab::after{content:'';display:block;position:absolute;bottom:0;right:0;height:2px;width:100%;background-color:#0172aa}#wp-optimize-wrap h2.nav-tab-wrapper .wpo-feedback:hover>div{position:absolute;display:block;background:#FFF;padding:15px;right:0;top:100%;z-index:4;box-shadow:0 11px 25px 0 rgba(0,0,0,0.1);width:350px}#wp-optimize-wrap h2.nav-tab-wrapper .wpo-feedback:hover>div a{display:block;font-size:14px;font-weight:normal;padding:6px 3px;text-align:center}@media(max-width:782px){#wp-optimize-wrap h2.nav-tab-wrapper .wpo-feedback{display:none}#wp-optimize-wrap h2.nav-tab-wrapper a:not(.nav-tab-active){display:none}}#wp-optimize-wrap h2.nav-tab-wrapper a[role="toggle-menu"]{display:block;float:right}@media(min-width:782px){#wp-optimize-wrap h2.nav-tab-wrapper a[role="toggle-menu"]{display:none}}#wp-optimize-wrap h2.nav-tab-wrapper a.nav-tab.wp-optimize-nav-tab__back,#wp-optimize-wrap h2.nav-tab-wrapper a.nav-tab.wp-optimize-nav-tab__back:focus:active{text-align:right}#wp-optimize-wrap h2.nav-tab-wrapper a.nav-tab.wp-optimize-nav-tab__back .dashicons,#wp-optimize-wrap h2.nav-tab-wrapper a.nav-tab.wp-optimize-nav-tab__back:focus:active .dashicons{color:#b5b9be;font-size:18px;display:inline-block;height:auto;line-height:inherit;width:20px}@media(min-width:782px){#wp-optimize-wrap h2.nav-tab-wrapper a.nav-tab.wp-optimize-nav-tab__back,#wp-optimize-wrap h2.nav-tab-wrapper a.nav-tab.wp-optimize-nav-tab__back:focus:active{position:absolute;bottom:14px;right:0;font-size:12px;font-weight:400;text-decoration:none;padding:0}#wp-optimize-wrap h2.nav-tab-wrapper a.nav-tab.wp-optimize-nav-tab__back .dashicons,#wp-optimize-wrap h2.nav-tab-wrapper a.nav-tab.wp-optimize-nav-tab__back:focus:active .dashicons{color:#b5b9be;font-size:18px;display:inline-block;height:auto;line-height:inherit;width:20px}}@media(max-width:782px){.wpo-mobile-menu-opened .wpo-main .wpo-tab-postbox{// display:none}.wpo-mobile-menu-opened h2.nav-tab-wrapper a{display:block;float:none}.wpo-mobile-menu-opened h2.nav-tab-wrapper a.nav-tab{display:block !important}.wpo-mobile-menu-opened h2.nav-tab-wrapper a:not(.nav-tab-active){background:#f9f9f9 !important}.wpo-mobile-menu-opened h2.nav-tab-wrapper a.nav-tab-active,.wpo-mobile-menu-opened h2.nav-tab-wrapper a.nav-tab-active:focus{border-top:0;border-left:3px solid}.wpo-mobile-menu-opened h2.nav-tab-wrapper a.nav-tab-active .dashicons,.wpo-mobile-menu-opened h2.nav-tab-wrapper a.nav-tab-active:focus .dashicons,.wpo-mobile-menu-opened h2.nav-tab-wrapper a:focus .dashicons,.wpo-mobile-menu-opened h2.nav-tab-wrapper a:hover .dashicons,.wpo-mobile-menu-opened h2.nav-tab-wrapper a .dashicons{display:inline-block;line-height:inherit}.wpo-mobile-menu-opened h2.nav-tab-wrapper a[role="toggle-menu"]{display:none}}.wpo-pages-menu{position:absolute;bottom:0;right:0;display:none}@media(max-width:820px){.opened+.wpo-pages-menu{display:block;box-shadow:0 5px 25px rgba(0,0,0,0.17)}}@media(min-width:821px){.wpo-pages-menu{display:-ms-flexbox;display:flex;height:77px}}.wpo-pages-menu>a{text-decoration:none;position:relative;color:inherit;text-align:center;box-sizing:border-box;display:block;color:#555d66}@media(min-width:821px){.wpo-pages-menu>a{padding:0 8px;height:77px;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center}.wpo-pages-menu>a>span{display:block;margin:0 auto}}@media(max-width:820px){.wpo-pages-menu>a{padding:15px;font-size:1.2em}}.wpo-pages-menu>a.active::after{content:'';display:block;position:absolute;bottom:0;left:0;width:100%;height:3px;background:#e46b1f;color:#191e23}@media(max-width:820px){.wpo-pages-menu>a.active::after{width:3px;height:100%}}@media(max-width:820px){.wpo-pages-menu>a.active{color:#e46b1f}}.wpo-pages-menu>a:hover{background:#f9f9f9;color:#191e23}.wpo-pages-menu span.separator{display:block;width:2px;background:#efefef;margin-top:18px;margin-bottom:18px;margin-right:5px;margin-left:5px}@media(max-width:820px){.wpo-pages-menu span.separator{width:80%;height:2px;margin:10px 10%}}@media(max-width:820px){.wpo-pages-menu{text-align:center;top:100%;width:100%;bottom:auto;background:#FFF}}body.rtl .wpo-pages-menu{left:0;right:auto}#wp-optimize-nav-page-menu{position:absolute;right:0;bottom:0;display:-ms-flexbox;display:flex;height:77px;-ms-flex-direction:column;flex-direction:column;padding:0 20px;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;text-decoration:none}#wp-optimize-nav-page-menu:not(.opened) .dashicons-no-alt{display:none}#wp-optimize-nav-page-menu.opened .dashicons-menu{display:none}@media(min-width:821px){#wp-optimize-nav-page-menu{display:none}}body.rtl #wp-optimize-nav-page-menu{right:auto;left:0}.wpo-dashboard-pages-menu{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.wpo-dashboard-pages-menu[data-itemscount="1"] .wpo-dashboard-pages-menu__item,.wpo-dashboard-pages-menu[data-itemscount="2"] .wpo-dashboard-pages-menu__item,.wpo-dashboard-pages-menu[data-itemscount="3"] .wpo-dashboard-pages-menu__item{width:calc(33.333% - 13.33333px)}.wpo-dashboard-pages-menu[data-itemscount="4"] .wpo-dashboard-pages-menu__item{width:calc(25% - 15px)}.wpo-dashboard-pages-menu[data-itemscount="5"] .wpo-dashboard-pages-menu__item{width:calc(20% - 16px)}.wpo-dashboard-pages-menu[data-itemscount="6"] .wpo-dashboard-pages-menu__item{width:calc(16.66667% - 16.66667px)}.wpo-dashboard-pages-menu .postbox.wpo-dashboard-pages-menu__item{padding:20px;margin-right:20px;box-sizing:border-box;padding-bottom:60px;min-width:0}.wpo-dashboard-pages-menu .postbox.wpo-dashboard-pages-menu__item:last-child{margin-right:0}.wpo-dashboard-pages-menu .postbox.wpo-dashboard-pages-menu__item h3{margin-top:0}.wpo-dashboard-pages-menu .postbox.wpo-dashboard-pages-menu__item h3 .dashicons{color:#72777c;line-height:1;height:18px;margin-top:-2px;margin-right:10px}.wpo-dashboard-pages-menu .postbox.wpo-dashboard-pages-menu__item a{position:absolute;bottom:20px;left:20px;width:calc(100% - 40px) !important}@media(max-width:782px){.wpo-dashboard-pages-menu .postbox.wpo-dashboard-pages-menu__item{width:100%;margin-right:0;padding-bottom:20px}.wpo-dashboard-pages-menu .postbox.wpo-dashboard-pages-menu__item a.button.button-large{width:auto !important;left:auto;bottom:auto;top:50%;transform:translateY(-50%);right:20px}.wpo-dashboard-pages-menu .postbox.wpo-dashboard-pages-menu__item h3{margin:0}.wpo-dashboard-pages-menu .postbox.wpo-dashboard-pages-menu__item p{display:none}}#wpadminbar .quicklinks .menupop.hover ul li.separator .ab-item.ab-empty-item{height:2px;line-height:2px;background:rgba(255,255,255,0.0902);margin:5px 10px;width:auto;min-width:0}.updraft-ad-container.updated,.updraft-ad-container{margin-left:0;margin-right:0;position:relative;padding-right:80px}body[class*=WP-Optimize] .notice,body[class*=WP-Optimize] .error,body[class*=wp-optimize] .notice,body[class*=wp-optimize] .error{margin-left:0;margin-right:0}body.wp-core-ui.is-scrolled .wpo-main-error-notice{position:fixed;top:132px;left:160px;right:0;z-index:20;transition:.2s all}div#wpbody-content>.notice:not(.wpo-notice),div#wpbody-content>.warning:not(.wpo-notice),div#wpbody-content>.updated:not(.wpo-notice),div#wpbody-content>.error:not(.wpo-notice){display:none}.toplevel_page_WP-Optimize.rtl .notice,.toplevel_page_WP-Optimize.rtl div.updated,.toplevel_page_WP-Optimize.rtl div.error,.toplevel_page_WP-Optimize .notice,.toplevel_page_WP-Optimize div.updated,.toplevel_page_WP-Optimize div.error{margin-right:0}body.rtl .updraft-ad-container.updated,body.rtl .updraft-ad-container{padding-right:10px;padding-left:80px}.updraft_notice_container{padding:7px;display:-ms-flexbox;display:flex;-ms-flex-align:left;align-items:left;-ms-flex-direction:column;flex-direction:column;height:auto;overflow:hidden}.updraft_advert_content_left{float:none;width:65px}.updraft_advert_content_right{float:none;width:auto;overflow:hidden}.updraft_advert_bottom{margin:10px 0;padding:10px;font-size:140%;background-color:#FFF;border-color:#e6db55;border:1px solid;border-radius:4px}.updraft-advert-dismiss{position:absolute;font-size:13px;top:5px;right:10px}body.rtl .updraft-advert-dismiss{left:10px;right:auto}h3.updraft_advert_heading{margin-top:5px !important;margin-bottom:5px !important}h4.updraft_advert_heading{margin-top:2px !important;margin-bottom:3px !important}.updraft_center_content{text-align:center;margin-bottom:5px}.updraft_notice_link{padding-left:5px}.updraft_text_center{text-align:center}.wpo-main-header+.updraft-ad-container,.wpo-main-header+.updated{margin-bottom:20px}@media screen and (min-width:560px){.updraft_notice_container{-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center}}@media screen and (max-width:560px){body.rtl .updraft-ad-container.updated,body.rtl .updraft-ad-container{padding-right:10px;padding-left:10px}}@media screen and (max-width:768px){.wpo-main-header+.updraft-ad-container,.wpo-main-header+.updated{margin-right:0}}.wpo_unused_image,.wpo_smush_image{position:relative;margin:4px;width:calc(50% - 8px);text-align:center}@media(min-width:500px){.wpo_unused_image,.wpo_smush_image{width:calc(25% - 8px)}}@media(min-width:782px){.wpo_unused_image,.wpo_smush_image{width:calc(16.6666% - 8px)}}@media(min-width:1100px){.wpo_unused_image,.wpo_smush_image{width:calc(12.5% - 8px)}}.wpo_unused_image .wpo_unused_image__input,.wpo_smush_image .wpo_unused_image__input{position:absolute;top:10px;opacity:0;width:0;height:0}.wpo_unused_image label,.wpo_smush_image label{display:block;width:100%;position:relative;padding:1px;border:3px solid #f2f4f5;box-sizing:border-box}.wpo_unused_image label::before,.wpo_smush_image label::before{content:"";display:block;padding-top:100%}.wpo_unused_image label .thumbnail,.wpo_smush_image label .thumbnail{position:absolute;top:1px;left:1px;width:calc(100% - 2px);height:calc(100% - 2px);background-repeat:no-repeat;background-size:cover;background-position:50% 50%;overflow:hidden;background:rgba(220,220,220,0.2)}.wpo_unused_image label .thumbnail img,.wpo_smush_image label .thumbnail img{display:block;margin:0;max-height:100%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);-webkit-user-select:none;-ms-user-select:none;user-select:none}.wpo_unused_image label span.dashicons,.wpo_smush_image label span.dashicons{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:25px;width:25px;opacity:.2}.wpo_unused_image .wpo_unused_image__input:checked+label,.wpo_unused_image.selected label,.wpo_smush_image .wpo_unused_image__input:checked+label,.wpo_smush_image.selected label{border-color:#0272aa}.wpo_unused_image:focus-within label,.wpo_smush_image:focus-within label{box-shadow:0 0 4px #0272aa}.wpo_unused_image a,.wpo_unused_image a.button,.wpo_unused_image a.button:active,.wpo_smush_image a,.wpo_smush_image a.button,.wpo_smush_image a.button:active{position:absolute;z-index:2;bottom:13px;left:50%;transform:translateX(-50%);display:none}.wpo_unused_image:hover a,.wpo_unused_image:hover a.button,.wpo_unused_image:hover a.button:active,.wpo_smush_image:hover a,.wpo_smush_image:hover a.button,.wpo_smush_image:hover a.button:active{display:inline-block}#wpo_unused_images,#wpo_unused_images_trash,#wpo_smush_images_grid{width:calc(100% + 8px);margin-left:-4px;margin-right:-4px;max-height:500px;overflow-y:auto;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative}#wpo_unused_images .wpo-fieldgroup,#wpo_unused_images_trash .wpo-fieldgroup,#wpo_smush_images_grid .wpo-fieldgroup{width:100%;margin:4px}#wpo_unused_images a,#wpo_unused_images_trash a{outline:0}.wpo-unused-images__premium-mask,.wpo-unused-image-sizes__premium-mask{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1;background:linear-gradient(to bottom,rgba(255,255,255,0),rgba(255,255,255,0.85));display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.wpo-unused-image-sizes__premium-mask{background:linear-gradient(to bottom,rgba(255,255,255,0.3),rgba(255,255,255,0.85))}a.wpo-unused-images__premium-link{background:#FFF;display:inline-block;padding:10px;border-radius:3px;box-shadow:0 2px 8px rgba(0,0,0,0.3)}p.wpo-plugin-installed{color:#009b24}.wpo-repeater__add{display:inline-block;cursor:pointer;font-weight:bold;text-decoration:none}.wpo-plugin-family__premium h2{margin:0;padding:25px}.wpo-plugin-family__plugins{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:1px;padding-bottom:1px}.wpo-plugin-family__plugin{-ms-flex:auto;flex:auto;width:100%;padding:30px;box-sizing:border-box;border:1px solid #e3e4e7;margin-left:-1px;margin-bottom:-1px}@media(min-width:782px){.wpo-plugin-family__plugin{width:50%}.wpo-plugin-family__free .wpo-plugin-family__plugin{width:100%}}@media(max-width:1080px){.wpo-plugin-family__free .wpo-plugin-family__plugin{width:50%}}@media(max-width:782px){.wpo-plugin-family__free .wpo-plugin-family__plugin{width:100%}}div#wp-optimize-nav-tab-wpo_mayalso-may_also-contents .wpo-tab-postbox{padding:0}.wpo_feature_cont{width:64.5%}.wpo_plugin_family_cont{width:34.5%}@media(max-width:1080px){.wpo_feature_cont,.wpo_plugin_family_cont{width:100%;float:none;margin:0}}.wpo_feature_cont header,.wpo_plugin_family_cont header{padding:20px}@media(max-width:1080px){.wpo_feature_cont header,.wpo_plugin_family_cont header{padding:40px}}.wpo_feature_cont header h2,.wpo_plugin_family_cont header h2{margin:0}.wpo_feature_cont header p,.wpo_plugin_family_cont header p{margin-bottom:0}.wpo_feat_table,.wpo_feat_th,.wpo_feat_table td{border:0;border-collapse:collapse;background-color:white;font-size:120%;text-align:center}.wpo_feat_table td{border:1px solid #f1f1f1;border-bottom-width:4px;padding:15px}.wpo_feat_table td:nth-child(2),.wpo_feat_table td:nth-child(3){background:rgba(241,241,241,0.38)}.wpo_feat_table p{padding:0 10px;margin:5px 0;font-size:13px}.wpo_feat_table h4{margin:5px 0}.wpo_feat_table .dashicons{width:25px;height:25px;font-size:25px;line-height:1}.wpo_feat_table .dashicons-yes,.wpo_feat_table .updraft-yes{color:green}.wpo_feat_table .dashicons-no-alt,.wpo_feat_table .updraft-no{color:red}.wpo_feat_table tr.wpo-main-feature-row td{background:#f1f1f1;border-bottom-color:#fafafa}.wpo_feat_table tr.wpo-main-feature-row td img.wpo-premium-image{width:64px}.wpo-premium-image{display:none}@media screen and (min-width:720px){#wpoptimize_table_list_filter{width:40%}.wpo-premium-image{display:block;float:left;padding:16px 18px;width:30px;height:auto}}@media screen and (min-width:1220px){.wpo_feat_table td:nth-child(2),.wpo_feat_table td:nth-child(3){width:110px}}.other-plugin-title{text-decoration:none}@media screen and (max-width:782px){table.wpo_feat_table{display:block}table.wpo_feat_table tr{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}table.wpo_feat_table td{display:block}table.wpo_feat_table td:first-child{width:100%;border-bottom:0}table.wpo_feat_table td:not(:first-child){width:50%;box-sizing:border-box}table.wpo_feat_table td:first-child:empty{display:none}table.wpo_feat_table td[data-colname]::before{content:attr(data-colname);font-size:.8rem;color:#CCC;line-height:1}}.wpo-cache-feature-image{width:40px;padding:16px 14px}#wp-optimize-wrap .wp-list-table td{word-break:break-all}@media screen and (max-width:782px){#wp-optimize-wrap .wp-list-table.wp-list-table-mobile-labels tbody,#wp-optimize-wrap .wp-list-table.wp-list-table-mobile-labels tbody tr,#wp-optimize-wrap .wp-list-table.wp-list-table-mobile-labels tbody th,#wp-optimize-wrap .wp-list-table.wp-list-table-mobile-labels tbody td{display:block}#wp-optimize-wrap .wp-list-table.wp-list-table-mobile-labels tbody td{padding:3px 8px 3px 35%;word-break:break-word;box-sizing:border-box}#wp-optimize-wrap .wp-list-table.wp-list-table-mobile-labels tbody td::before{color:#b5b9be}#wp-optimize-wrap .wp-list-table.wp-list-table-mobile-labels thead,#wp-optimize-wrap .wp-list-table.wp-list-table-mobile-labels thead tr{display:block}#wp-optimize-wrap .wp-list-table.wp-list-table-mobile-labels thead th.column-primary{display:block;box-sizing:border-box}#wp-optimize-wrap .wp-list-table.wp-list-table-mobile-labels thead th:not(.column-primary){display:none !important}}body.rtl #wp-optimize-wrap .wpo-table-list-filter{text-align:left}@media screen and (max-width:782px){body.rtl #wp-optimize-wrap .wp-list-table.wp-list-table-mobile-labels tbody td{padding:3px 35% 3px 8px}}.tablesorter-headerRow th{vertical-align:top}th:not(.sorter-false) .tablesorter-header-inner{color:#0074ab}th:not(.sorter-false) .tablesorter-header-inner::after{content:'';font-family:'dashicons';font-size:20px;line-height:20px;height:20px;width:20px;display:none;vertical-align:bottom}th.tablesorter-header.tablesorter-headerAsc,th.tablesorter-header.tablesorter-headerDesc{font-weight:500;border-bottom-color:#0272aa}th.tablesorter-header.tablesorter-headerAsc .tablesorter-header-inner::after,th.tablesorter-header.tablesorter-headerDesc .tablesorter-header-inner::after{display:inline-block}th.tablesorter-header.tablesorter-headerDesc .tablesorter-header-inner::after{content:"\f140"}th.tablesorter-header.tablesorter-headerAsc .tablesorter-header-inner::after{content:"\f142"}th.tablesorter-header:focus{outline:0;box-shadow:0 0 3px rgba(0,116,171,0.78)}th.tablesorter-header:focus:not(.tablesorter-headerAsc):not(.tablesorter-headerDesc) .tablesorter-header-inner::after{content:"\f142";opacity:.5}.tablesorter.hasFilters tr.filtered{display:none}.wpo-text__dim .dashicons-info{margin-top:2px;margin-right:5px;border-radius:30px;background:#fff;color:#e07575}#page_cache_length_value{height:28px;position:relative;top:2px}#wp_optimize_preload_cache_status{margin-left:10px;display:inline-block;color:#82868b;font-size:smaller}.align-left{margin:10px 10px 0 0;float:left}textarea.cache-settings{display:block;clear:both;min-height:225px;overflow:scroll;min-width:75%;margin:10px 0}#wp-optimize-purge-cache,#wp-optimize-purge-cache ~ span,#wp-optimize-purge-cache ~ img{vertical-align:middle;top:auto}#wp-optimize-nav-tab-wpo_cache-cache-contents .wpo-error{font-size:12px}#wpo_browser_cache_error_message{padding-top:10px;padding-bottom:10px;margin-left:0;margin-bottom:10px}#wpo_browser_cache_error_message:empty{display:none}#wp-optimize-nav-tab-wpo_cache-advanced-contents label,#wp-optimize-nav-tab-wpo_cache-preload-contents label,#wp-optimize-nav-tab-wpo_cache-cache-contents label{font-weight:600}.wpo-gzip-already-enabled span.dashicons.dashicons-yes,.wpo-enabled>span.dashicons.dashicons-yes{font-size:40px;width:40px;height:40px;line-height:40px;vertical-align:middle;color:green}#wp-optimize-wrap .filename{display:inline-block;padding:6px 0}#wp-optimize-wrap .no-files-yet .filename{font-style:italic}#wp-optimize-wrap .processed{margin:0}#wp-optimize-wrap .processed .wpo_min_log{padding:8px;background:white;border:1px solid #cdcdcd;border-radius:4px;line-height:1.5em}#wp-optimize-wrap .processed .wpo_min_log ul{overflow-x:auto}#wp-optimize-wrap .processed .wpo_min_log ul li{white-space:nowrap}#wp-optimize-wrap .processed .wpo_min_log ul li.failed .wpo_min_file_url{color:#dc3232}#wp-optimize-wrap .processed .wpo_min_log h5{margin-top:0;margin-bottom:8px;border-bottom:1px solid #cdcdcd;padding-bottom:6px}#wp-optimize-wrap .processed .wpo_min_log .wpo_min_file_debug{color:#9c9c9c;display:inline-block}#wp-optimize-wrap .processed .wpo_min_log .wpo_min_file_debug::before{content:'—';display:inline-block;margin:0 10px}#wp-optimize-wrap .show-if-enabled{display:none}#wp-optimize-wrap .is-enabled .show-if-enabled{display:block}#wp-optimize-wrap .wpo-fieldgroup__subgroup.wpo_min_enable_minify+.wpo-fieldgroup__subgroup{display:none}#wp-optimize-wrap .wpo-fieldgroup__subgroup.wpo_min_enable_minify.enabled+.wpo-fieldgroup__subgroup{display:block}#wp-optimize-wrap .wpo-fieldgroup__subgroup.wpo_min_enable_minify:not(.enabled){margin-bottom:0}
2
+ /*# sourceMappingURL=wp-optimize-admin-3-0-18.min.css.map */
css/wp-optimize-admin-3-0-18.min.css.map ADDED
@@ -0,0 +1 @@
 
1
+ {"version":3,"sources":["css/wp-optimize-admin.scss","css/admin.css","css/scss/_layout.scss","css/scss/_common.scss","css/scss/_menu-and-tabs.scss","css/scss/_notices.scss","css/scss/_image-list.scss","css/scss/_plugin-family-tab.scss","css/scss/_table-sorter.scss","css/scss/_cache.scss","css/scss/_minify.scss"],"names":[],"mappings":"AAAA,YAAY;;AAcZ,gBAAgB;;ACdhB;CACC,yBAAyB;CACzB;;AAED;CACC,iBAAiB;CACjB,YAAY;CACZ,2IAA2I;CAC3I,iBAAiB;CACjB,iBAAiB;CACjB,iBAAiB;CAEjB,uCAAuC;CACvC;;AAED;CACC,iCAAiC;CACjC;;AAED;CACC,kBAAkB;CAClB;;AAED,gBAAgB;;AAChB;CACC,4BAA4B;CAC5B,2BAA2B;CAC3B,iBAAiB;CACjB,iBAAiB;CACjB;;AAED,gBAAgB;;AAChB;CACC,YAAY;CACZ,WAAW;CACX,UAAU;CACV;;AAED;CACC,oBAAoB;CACpB;;AAED;CACC,kBAAkB;CAClB,eAAe;CACf,mBAAmB;CACnB;;AAED,oBAAoB;;AACpB;CACC,eAAe;CACf,YAAY;CACZ,mBAAmB;CACnB;;AAED;CACC,eAAe;CACf;;AAED,gBAAgB;;AAChB;;CAEC,YAAY;CACZ,eAAe;CACf;;AAED;CACC,YAAY;CACZ;;AAED;CACC,WAAW;CACX;;AAED,qBAAqB;;AACrB;CACC,YAAY;CACZ;;AAED;CACC,aAAa;CACb;;AAED;CACC,aAAa;CACb;;AAED;CACC,UAAU;CACV;;AAED;;CAEC;EACC,0BAA0B;EAC1B;;CAED;EACC,yBAAyB;EACzB;;CAED;;AAED;;CAEC;EACC,yBAAyB;EACzB;;CAED;EACC,0BAA0B;EAC1B;;CAED;;AAED;;CAEC;EACC,aAAa;EACb;;CAED;EACC,YAAY;EACZ;;CAED;EACC,YAAY;EACZ;;CAED;EACC,YAAY;EACZ;;CAED;EACC,YAAY;EACZ;;CAED;;AAED,qRAAqR;;AAErR,uBAAuB;;AAEvB;CACC,iBAAiB;CACjB,yBAAyB;CACzB,sBAAsB;CACtB,kBAAkB;CAClB,mBAAmB;CACnB,eAAe;CACf,uBAAuB;CACvB,YAAY;CACZ,gBAAgB;CAChB,aAAa;CACb,mBAAmB;CACnB,eAAe;CACf;;AAED;CACC,oBAAoB;CACpB;;AAED;CACC,iBAAiB;CACjB;;AAED;CACC,YAAY;CACZ,kBAAkB;CAClB,mBAAmB;CACnB;;AAED;CACC,YAAY;CACZ,aAAa;CACb;;AAED;CACC,YAAY;CACZ;;AAED;CACC,eAAe;CACf,mBAAmB;CACnB;;AAED;CACC,kBAAkB;CAClB;;AAED,sCAAsC;;AACtC;CACC,eAAe;CACf,kBAAkB;CAClB,mBAAmB;CACnB,oBAAoB;CACpB,iBAAiB;CACjB,aAAa;CACb,gBAAgB;CAChB;;AAED;CACC,YAAY;CACZ,aAAa;CACb,mBAAmB;CACnB,cAAc;CACd,mBAAmB;CACnB,SAAS;CACT;;AAED;CACC,YAAY;CACZ,aAAa;CACb;;AAED;CACC,sBAAsB;CACtB;;AAED;CACC,cAAc;CACd;;AAED;CACC,mBAAmB;CACnB;;AAED;CACC,WAAW;CACX;;AAED;CACC,eAAe;CACf,2BAA2B;CAC3B;;AAED;CACC,2BAA2B;CAC3B;;AAED;CACC,mBAAmB;CACnB,SAAS;CACT;;AAED;;CAEC;EACC,aAAa;EACb,kBAAkB;EAClB;;CAED;;AAED;CACC,yBAAyB;CACzB;;AAED;CACC,mBAAmB;CACnB,SAAS;CACT,UAAU;CACV;;AAED;CACC,cAAc;CACd;;AAED;CACC,YAAY;CACZ,oBAAoB;CACpB;;AAED;CACC,cAAc;CACd,eAAe;CACf;;AAED;CACC,iBAAiB;CACjB;;AAED,uBAAuB;;AACvB;;CAEC,cAAc;CACd;;AAED;;CAEC,sBAAsB;CACtB,UAAU;CACV,aAAa;CACb,kBAAkB;CAClB;;AAED;CACC,eAAe;CACf,gBAAgB;CAChB,sBAAsB;CACtB,mBAAmB;CACnB;;AAED;CACC,gBAAgB;CAChB,iBAAiB;CACjB,oBAAoB;CACpB;;AAED;CACC,sBAAsB;CACtB;;AAED;CACC,iBAAiB;CACjB;;AAED;CACC,eAAe;CACf,iBAAiB;CACjB;;AAED;;CAEC;EACC,kBAAkB;EAClB,oBAAoB;EACpB,eAAe;EACf,uBAAuB;EACvB;;CAED;EACC,mBAAmB;EACnB;;CAED;EACC,mBAAmB;EACnB,eAAe;EACf;;CAED;EACC,iBAAiB;EACjB,oBAAoB;EACpB;;CAED;;AAED;CACC,uBAAuB;CACvB;;AAED;;CAEC,uBAAuB;CACvB,mBAAmB;CACnB,kBAAkB;CAClB,kBAAkB;CAClB,mBAAmB;CACnB,mBAAmB;CACnB;;AAED;CACC,kBAAkB;CAClB,gBAAgB;CAChB;;AAED;;CAEC,gBAAgB;CAChB,iBAAiB;CACjB;;AAED;CACC,mBAAmB;CACnB;;AAED;CACC,cAAc;CACd,eAAe;CACf;;AAED;CACC,cAAc;CACd,eAAe;CACf;;AAED;CACC,iBAAiB;CACjB;;AAED,oBAAoB;;AACpB;CACC,kBAAkB;CAClB,2BAA2B;CAC3B,8BAA8B;CAC9B,eAAe;CACf,UAAU;CACV;;AAED;CACC,iCAAiC;CACjC,eAAe;CACf;;AAED;;;;;;;;CAQC,sBAAsB;CACtB,uBAAuB;CACvB;;AAED;;CAEC,WAAW;CACX;;AAED;;CAEC,WAAW;CACX;;AAED;;CAEC,UAAU;CACV;;AAED;;CAEC,UAAU;CACV;;AAED;CACC,kBAAkB;CAClB;;AAED;CACC,sBAAsB;CACtB;;AAED;;CAEC,0BAA0B;CAC1B,YAAY;CACZ,YAAY;CACZ,aAAa;CACb,oBAAoB;CACpB,sBAAsB;CACtB,gBAAgB;CAChB,iBAAiB;CACjB;;AAED;CACC,iBAAiB;CACjB,mBAAmB;CACnB,aAAa;CACb;;AAED;CACC,WAAW;CACX,iBAAiB;CACjB;;AAED;CACC,YAAY;CACZ,gBAAgB;CAChB;;AAED;CACC,0BAA0B;CAC1B,YAAY;CACZ,aAAa;CACb,eAAe;CACf,mBAAmB;CACnB,mBAAmB;CACnB;;AAED;CACC,iCAAiC;CACjC;;AAED;CACC,cAAc;CACd,YAAY;CACZ,mBAAmB;CACnB,0BAA0B;CAC1B,mBAAmB;CACnB,eAAe;CACf;;AAED;CACC,iBAAiB;CACjB;;AAED;CACC,aAAa;CACb,mBAAmB;CACnB;;AAED;CACC,iBAAiB;CACjB;;AAED;CACC,kBAAkB;CAClB,iBAAiB;CACjB;;AAED;CACC,cAAc;CACd;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,gBAAgB;CAChB;;AAED;;;CAGC,oBAAoB;CACpB,cAAc;CACd,uBAAuB;CACvB,sBAAsB;CACtB;;AAED;;CAEC,eAAe;CACf;;AAED;CACC,iBAAiB;CACjB,oBAAoB;CACpB;;AAED;CACC,6BAA6B;CAC7B,sBAAsB;CACtB;;AAED;CACC,sBAAsB;CACtB;;AAED;;CAEC,YAAY;CACZ;;AAED;CACC,cAAc;CACd;;AAED;CACC,cAAc;CACd;;AAED;CACC,iBAAiB;CACjB;;ACvjBD;;CAEC,oBAAoB;CAIpB;;AAHA;;CAHD;;EAIE,iBAAiB;EAElB;CADC;;AAGF;CACC,mBAAmB;CACnB,iBAAiB;CAIjB;;AAHA;;CAHD;EAIE,mBAAmB;EAEpB;CADC;;AAGF;;CAEC,kBAAkB;CASlB;;AAPA;;CAJD;;EAKE,eAAe;EAMhB;CALC;;AAED;;CARD;;EASE,mBAAmB;EAEpB;CADC;;AAGF;CACC,mBAAmB;CACnB,kBAAkB;CASlB;;AAPA;;CAJD;EAKE,mBAAmB;EAMpB;CALC;;AAED;;CARD;EASE,gBAAgB;EAEjB;CADC;;AAGF,eAAe;;AAEf;;CAEC,aAAa;CACb,gBAAgB;CAChB,UAAU;CACV,YAAY;CACZ,iBAAiB;CACjB,SAAS;CACT,cAAc;;CAsLd;;AApLA;;CAVD;EAWE,cAAc;EAmLf;CAlLC;;AAED;EACC,qBAAc;EAAd,cAAc;EACd,2BAAuB;MAAvB,uBAAuB;EACvB,sBAAwB;MAAxB,wBAAwB;EACxB,mBAAmB;EACnB,aAAa;EACb,eAAe;EACf,gBAAgB;EAChB,mBAAmB;EACnB,kBAAkB;CAClB;;AAED;EACC,mBAAmB;EACnB,QAAQ;EACR,SAAS;EACT,4BAA4B;EAC5B,YAAY;CACZ;;AAED;EACC,UAAU;EACV,iBAAiB;EACjB,eAA0B;EAC1B,iBAAiB;CAKjB;;AAHA;;CAND;EAOE,cAAc;EAEf;CADC;;AAGF;EACC,UAAU;EACV,kBAAkB;EAClB,mBAAmB;EACnB,SAAS;EACT,kBAAkB;EAClB,oBAAoB;EACpB,+BAA+B;EAC/B,WAAW;CAkBX;;AAhBA;GACC,sBAAsB;GACtB;;AAED;GACC,eAAgC;GAChC,mBAAmB;GACnB,YAAY;GACZ,aAAa;GACb,kBAAkB;GAClB,oBAAoB;GACpB;;AAED;;CAvBD;EAwBE,cAAc;EAEf;CADC;;AAGF;EACC,cAAc;EACd,oBAAoB;EACpB,iBAAiB;CAcjB;;AAbA;;CAJD;EAKE,cAAc;EAYf;CAXC;;AAED;GACC,sBAAsB;GACtB,aAAa;GACb,iBAAiB;CACjB;;AACD;GACC,eAAgC;CAChC;;AAIF;;CAEC;GACC,aAAa;GACb,sBAAsB;EACtB;CAED;;AAGA;;CADD;EAEE,WAAW;EAYZ;CAXC;;AACD;;CAJD;EAKE,QAAQ;EACR,UAAU;EAQX;CAPC;;AACD;;CARD;EASE,mBAAmB;EACnB,YAAY;EACZ,aAAa;EACb,UAAU;EAEX;CADC;;AAID;;CADD;EAEE,OAAO;EAER;CADC;;AAID;;CADD;EAEE,WAAW;EAEZ;CADC;;AAEF;EACC,2CAA2C;CAC3C;;AAED,SAAS;;AACT;EACC,aAAa;EACb,QAAQ;CA8BR;;AA5BA;GACC,mBAAmB;GACnB,oBAAoB;GACpB,eAAe;GACf,mBAAmB;GACnB;;AAED;GACC,mBAAmB;GACnB,WAAW;GACX,SAAS;GACT;;AAED;GACC,YAAY;GACZ,QAAQ;GACR,gCAAgC;GAChC,6BAA6B;GAU7B;;AARA;IACC,mBAAmB;IACnB,WAAW;IACX,YAAY;IACZ,aAAa;IACb,iBAAiB;IACjB,mBAAmB;IACnB;;AAKF;;CADD;EAEE,YAAY;EAYb;CAXC;;AACD;;CAJD;EAKE,SAAS;EACT,UAAU;EAQX;CAPC;;AACD;;CARD;EASE,mBAAmB;EACnB,YAAY;EACZ,aAAa;EACb,UAAU;EAEX;CADC;;AAID;;CADD;EAEE,YAAY;EACZ,QAAQ;EAET;CADC;;AAMF;EACC,iBAAiB;EACjB;;AACD;;CAJD,YAUC;CALC;;AAED;CACC,cAAc;CACd;;AAGF;CACC,mBAAmB;CACnB,iBAAiB;CACjB,oBAAoB;CACpB,iFAAiF;CAkBjF;;AAhBA;EACC,eAAe;EACf;;AAED;EACC,iBAAiB;EACjB;;AAED;EACC,kBAAkB;EAMlB;;AALA;GACC,sBAAsB;GACtB,iBAAiB;GACjB,kBAAkB;GAClB;;AAIH,aAAa;;AACb;;CAEC;EACC,aAAa;EACb,aAAa;EACb,uBAAuB;EACvB,mBAAmB;EACnB;;CAED;EACC,YAAY;EACZ,uBAAuB;EACvB,0BAA0B;EAC1B;;CAED;;AChSD;;CAEC;EACC,qBAAqB;EACrB;;CAED;EACC,0BAA0B;EAC1B;;CAED;;AAED,mBAAmB;;AAGnB,aAAa;;AAKX;;CADD;EAEE,eAAe;EACf,YAAY;EAEb;CADC;;AAGF;EACC,eAAY;CACZ;;AAED;;EAEC,eAAe;EACf,gBAAgB;CAChB;;AAED;EACC,YAAY;EACZ,mBAAmB;EACnB,cAAc;EACd,kBAAkB;EAClB,iBAAiB;EACjB,oBAAoB;CACpB;;AAIF;;CAEC,oBAAoB;CACpB;;AAED;CACC,mBAAmB;CACnB,mBAAmB;CACnB;;AAED;CACC,mBAAmB;CACnB,QAAQ;CACR,gBAAgB;CAChB,SAAS;CACT,4BAA4B;CAC5B,aAAa;CACb,eAAe;CACf;;AAED;CACC,eAAe;CACf,YAAY;CACZ,mBAAmB;CACnB;;AAED;CACC,aAAa;CACb;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,sBAAsB;CACtB,qBAAqB;CACrB,mBAAmB;CACnB;;AAED,oBAAoB;;AAEpB;CACC,sBAAsB;CACtB,gBAAgB;CAChB,0BAA0B;CAC1B,oBAA6B;CAC7B,iBAAiB;CACjB,eAAe;CACf,mBAAmB;CACnB;;AAED;CACC,oBAAoB;CACpB,eAAe;CACf;;AAED;CACC,cAAc;CACd;;AAED;CACC,eAAgB;CAChB,gBAAgB;CAChB;;AAED;CACC,sBAAsB;CACtB,UAAU;CACV,eAAe;CACf,iBAAiB;CACjB;;AAED;CACC;EACC,kBAAkB;EAClB;CACD;;AAED,aAAa;;AAEb;CACC,aAAa;;CAMb;;AAJA;EACC,cAAc;EACd;;AAIF;;CAEC,cAAc;CACd;;AAIA;EACC,cAAc;EACd;;AAGF,iBAAiB;;AAEjB;CACC,oBAA6B;CAC7B,mBAAmB;CACnB,aAAc;;CAqCd;;AAnCA;CACC,mBAAmB;CACnB;;AAED;EACC,cAAc;CACd;;AAED;EACC,iBAAiB;CACjB;;AAED;CACC,mBAAmB;CACnB;;AAED;EACC,iBAAiB;CACjB;;AAED;EACC,mBAAmB;EACnB,oBAAoB;EACpB,mBAAmB;CACnB;;AAIA;GACC,eAAe;GACf,mBAAmB;GACnB;;AAOF;CACC,oBAAoB;CACpB;;AAGF,kBAAkB;;AAGjB;EACC,mBAAmB;EACnB,sBAAsB;EACtB,YAAY;EACZ,aAAa;EACb,kBAAkB;EAClB,uBAAuB;;EAyFvB;;AAvFA,gCAAgC;;AAChC;GACC,WAAW;GACX,SAAS;GACT,UAAU;GACV;;AAED,gBAAgB;;AAChB;GACC,mBAAmB;GACnB,gBAAgB;GAChB,OAAO;GACP,QAAQ;GACR,SAAS;GACT,UAAU;GACV,0BAAmC;GACnC,eAAgB;;GAoChB;;AAlCA;CACC,mBAAmB;CACnB,YAAY;CACZ,YAAY;CACZ,WAAW;CACX,UAAU;CACV,YAAY;CACZ,0BAAgC;CAChC,0BAAgC;CAChC,oBAAoB;CACpB;;AAED;CACC,YAAY;CACZ,eAAe;CACf,mBAAmB;CACnB,YAAY;CACZ,WAAW;CACX,WAAW;CACX,SAAS;CACT,mBAAmB;CACnB,0BAAqC;CACrC,wBAAuB;CACvB;;AAjCF,mCAmCC,qBAAqB;CASrB;;AARA;CACC,oBAAoB;CACpB,0BAAgC;CAIhC;;AAHA;CACA,mBAAmB;CAClB;;AAKH;GACC,oBAAqB;GACrB,qBAAuB;;GAmBvB;;AAlBA;CACC,iBAAiB;CACjB,mBAAmB;CACnB,4BAA4B;CAC5B;;AAED;CACC,YAAY;CACZ,eAAe;CACf,mBAAmB;CACnB,YAAY;CACZ,WAAW;CACX,UAAU;CACV,SAAS;CACT,iBAAiB;CACjB,aAAa;CACb;;AAGF;;GAEC,oBAA0B;GAC1B,sBAA4B;GAC5B,aAAa;GACb;;AAED;GACC,iDAAgE;GAChE;;AAIF;EACC,eAAe;EACf,YAAY;EAWZ;;AAVA;GACC,eAAe;GACf,uBAAuB;GACvB;;AACD;CACC,kBAAkB;CAClB;;AACD;GACC,4BAA4B;CAC5B;;AAGF;EACC,eAAe;EACf;;AAIF;CACC,iBAAiB;CACjB;;AAED,gBAAgB;;AAEhB;CACC,mBAAmB;CACnB,sBAAsB;CAItB;;AAHA;;CAHD;EAIE,eAAe;EAEhB;CADC;;AAGF;CACC,WAAW;CACX,mBAAmB;CACnB,mBAAmB;CACnB,UAAU;CACV,YAAY;CACZ,iBAAiB;CACjB,cAAc;CACd,aAAa;CACb,iBAAiB;CACjB,WAAW;CACX,sFAAsF;CACtF,qBAAqB;CAKrB;;AAHA;;CAdD;EAeE,YAAY;EAEb;CADC;;AAGF;CACC,cAAc;CACd,kBAAkB;CAClB,YAAY;CACZ;;AAIA;EACC,sBAAsB;EACtB;;AAED;EACC,WAAW;EACX,oBAAoB;EACpB,0FAA0F;EAC1F;;AAED;EACC,WAAW;EACX;;AAIF;;CAEC,gBAAgB;CAChB;;AAED;CACC,sBAAsB;CACtB,sBAAsB;CACtB,cAAc;CACd,mBAAmB;CACnB,iBAAiB;CACjB,mBAAmB;CACnB;;AAED;CACC,sBAAsB;CACtB,uBAAuB;CACvB;;AAED;IACI,aAAa;CAChB;;AAED,qBAAqB;;AAErB;CACC,eAAe;CACf,mBAAmB;CACnB,QAAQ;CACR,SAAS;CACT,OAAO;CACP,UAAU;CACV,YAAY;CACZ,aAAa;CACb,cAAc;CACd,WAAW;CACX,4CAA4C;CAC5C;;AAED;CACC,cAAc;CACd;;AAED;CACC,mBAAmB;CACnB,kBAAkB;CAClB;;AAED;CACC,eAAe;CACf;;AAED;CACC,gBAAgB;CAChB,aAAa;CACb,YAAY;CACZ;;AAED;CACC,qCAAqC;CACrC,0BAA0B;CAC1B;;ACtbD,UAAU;;AAEV;IACI,iBAAiB;CACpB,oBAAoB;CACpB,mBAAmB;CA8JnB;;AA5JA;;;;EAIC,aAAa;EACb,wBAAwB;EACxB,UAAU;EACV,kCAAkC;EAClC,kBAAkB;EAClB,eAAgB;EAwBhB;;AAtBA;GACC,eAAe;GACf,eAAe;GACf,eAA0B;GAC1B,gBAAgB;GAChB,YAAY;GACZ,aAAa;GACb;;AAED;GACC,sBAAsB;GACtB,iBAAiB;GACjB,aAAa;GACb,gBAAgB;GAChB,oBAAqB;GACrB,eAAe;GACf,mBAAmB;GACnB,YAAY;GACZ,iBAAiB;GACjB,0BAA0B;GAC1B,sBAAsB;GACtB;;AAGF;;;;EAIC,iBAAiB;EACjB,wCAAwC;EACxC,0BAA2B;EAK3B;;AAHA;GACC,eAAgB;GAChB;;AAGF;EACC,eAAe;EACf,aAAa;EACb,mBAAmB;EAiDnB;;AA/CA;;;;GAIC,mBAAmB;GAOnB;;AANA;IACC,sBAAsB;IACtB,gBAAgB;IAChB,aAAa;IACb,2BAA2B;IAC3B;;AAGF;GACC,cAAc;GACd;;AAEA;IACC,YAAY;IACZ,eAAe;IACf,mBAAmB;IACnB,UAAU;IACV,SAAS;IACT,YAAY;IACZ,YAAY;IACZ,0BAA0B;CAC1B;;AACD;IACC,mBAAmB;IACnB,eAAe;IACf,iBAAiB;IACjB,cAAc;IACd,SAAS;IACT,UAAU;IACV,WAAW;IACX,iDAAiD;IACjD,aAAa;CASb;;AAPA;KACC,eAAe;KACf,gBAAgB;KAChB,oBAAoB;KACpB,iBAAiB;KACjB,mBAAmB;KACnB;;AAKJ;;CACC;GACC,cAAc;EACd;;CACD;GACC,cAAc;EACd;CACD;;AAED;EACC,eAAe;EACf,aAAa;CAIb;;AAHA;;CAHD;EAIE,cAAc;EAEf;CADC;;AAKD;CAEC,kBAAkB;CA8BlB;;AA5BA;IACC,eAAsB;IACtB,gBAAgB;IAChB,sBAAsB;IACtB,aAAa;IACb,qBAAqB;IACrB,YAAY;CACZ;;AAED;;CAbD;EAcE,mBAAmB;EACnB,aAAa;EACb,SAAS;EACT,gBAAgB;EAChB,iBAAiB;EACjB,sBAAsB;EACtB,WAAW;EAYZ;;CAVC;KACC,eAAsB;KACtB,gBAAgB;KAChB,sBAAsB;KACtB,aAAa;KACb,qBAAqB;KACrB,YAAY;EACZ;CACD;;AAOJ;;EAIE;EACA,iBAAiB;GAChB;;EAED;GACC,eAAe;GACf,WAAY;GA8BZ;;EA5BA;EACC,0BAA0B;EAC1B;;EAED;EACC,+BAA+B;EAC/B;;EAED;;EAEC,iBAAiB;EACjB,uBAAuB;EACvB;;EAOA;KACC,sBAAsB;KACtB,qBAAqB;EACrB;;EAGF;EACC,cAAc;EACd;;CAKH;;AAGD,gBAAgB;;AAEhB;CACC,mBAAmB;CACnB,UAAU;CACV,SAAS;CACT,cAAc;CAkGd;;AAhGA;;CACC;GACC,eAAe;GACf,2CAA2C;EAC3C;CACD;;AAED;;CAbD;EAcE,qBAAc;EAAd,cAAc;EACd,aAAa;EAuFd;CAtFC;;AAED;EACC,sBAAsB;EACtB,mBAAmB;EACnB,eAAe;EACf,mBAAmB;EACnB,uBAAuB;EACvB,eAAe;EACf,eAAqB;CA+CrB;;AA7CA;;CATD;EAUE,eAAe;EACf,aAAa;EACb,qBAAc;EAAd,cAAc;EACd,2BAAuB;MAAvB,uBAAuB;EACvB,sBAAwB;MAAxB,wBAAwB;EAwCzB;;CAtCC;IACC,eAAe;IACf,eAAe;EACf;CACD;;AAED;;CAtBD;EAuBE,cAAc;EACd,iBAAiB;EA8BlB;CA7BC;;AAGA;CACC,YAAY;CACZ,eAAe;CACf,mBAAmB;CACnB,UAAU;CACV,QAAQ;CACR,YAAY;CACZ,YAAY;CACZ,oBAAmB;CACnB,eAAuB;CAOvB;;AALA;;CAXD;EAYE,WAAW;EACX,aAAa;EAGd;CAFC;;AAGF;;CAlBD;EAmBE,eAAc;EAEf;CADC;;AAGF;CACC,oBAAoB;CACpB,eAAuB;CACvB;;AAGF;EACC,eAAe;EACf,WAAW;EACX,oBAAoB;EACpB,iBAAiB;EACjB,oBAAoB;EACpB,kBAAkB;EAClB,iBAAiB;CAMjB;;AALA;;CARD;EASE,WAAW;EACX,YAAY;EACZ,iBAAiB;EAElB;CADC;;AAGF;;CAzFD;EA0FE,mBAAmB;EACnB,UAAU;EACV,YAAY;EACZ,aAAa;EACb,iBAAiB;EAQlB;CANC;;AAED;EACC,QAAQ;EACR,YAAY;CACZ;;AAGF;CACC,mBAAmB;CACnB,SAAS;CACT,UAAU;CACV,qBAAc;CAAd,cAAc;CACd,aAAa;IACV,2BAAuB;QAAvB,uBAAuB;IACvB,gBAAgB;IAChB,uBAAoB;QAApB,oBAAoB;IACpB,sBAAwB;QAAxB,wBAAwB;CAC3B,qBAAsB;CAkBtB;;AAhBA;CACC,cAAc;CACd;;AAED;CACC,cAAc;CACd;;AAED;;CApBD;EAqBE,cAAc;EAOf;CANC;;AAED;EACC,YAAY;EACZ,QAAQ;CACR;;AAGF,oBAAoB;;AAEpB,mDAAmD;;AACnD;CACC,qBAAc;CAAd,cAAc;CACd,oBAAgB;KAAhB,eAAgB;;CAEhB,gCAAgC;;CA2EhC;;AAvEC;GACC,kCAAgC;CAChC;;AAVH,2BAaC,iCAAiC;CAkEjC;;AA/DE;IACC,wBAA8D;CAC9D;;AAFD;IACC,wBAA8D;CAC9D;;AAFD;IACC,oCAA8D;CAC9D;;AAIH;EACC,cAAkB;EAClB,mBAAuB;EACvB,uBAAuB;EACvB,qBAAqB;EACrB,aAAa;CAkDb;;AAhDA;CACC,gBAAgB;CAChB;;AAED;GACC,cAAc;CAUd;;AARA;IACC,eAA0B;IAC1B,eAAe;IACf,aAAa;IACb,iBAAiB;IACjB,kBAAkB;IAClB;;AAIF;GACC,mBAAmB;GACnB,aAAiB;GACjB,WAAe;GACf,oCAA4C;CAC5C;;AAED;;CA/BD;EAgCE,YAAY;EACZ,gBAAgB;EAChB,qBAAqB;EAqBtB;;CAnBC;IACC,uBAAuB;IACvB,WAAW;IACX,aAAa;IACb,SAAS;IACT,4BAA4B;IAC5B,YAAgB;EAChB;;CAED;IACC,UAAU;EACV;;CAED;IACC,cAAc;EACd;CAED;;AAMH,yBAAyB;;AAEzB;IACI,YAAY;IACZ,iBAAiB;IACjB,wCAAsB;IACtB,iBAAiB;IACjB,YAAY;IACZ,aAAa;CAChB;;ACzbD,qBAAqB;;AAErB;;CAEC,iBAAiB;CACjB,kBAAkB;CAClB,mBAAmB;CACnB,oBAAoB;CACpB;;AAED,+CAA+C;;AAI9C;EACC,eAAe;EACf,gBAAgB;EAChB;;AAGF;;EAEE;;AAEF;IACI,eAAe;IACf,WAAW;IACX,YAAY;IACZ,SAAS;IACT,YAAY;IACZ,oBAAoB;CACvB;;AAED,0BAA0B;;AAGzB;;;;EAIC,cAAc;EACd;;AAGF;;;;;;CAMC,gBAAgB;CAChB;;AAED;;CAEC,oBAAoB;CACpB,mBAAmB;CACnB;;AAED;CACC,aAAa;CAEb,qBAAqB;CACrB,cAAc;CAEd,qBAAqB;CACrB,kBAAkB;CAClB,2BAAuB;KAAvB,uBAAuB;CACvB,aAAa;CACb,iBAAiB;CACjB;;AAED;CACC,YAAY;CACZ,YAAY;CACZ;;AAED;CACC,YAAY;CACZ,YAAY;CACZ,iBAAiB;CACjB;;AAED;CACC,eAAe;CACf,cAAc;CACd,gBAAgB;CAChB,uBAAuB;CACvB,sBAAsB;CACtB,kBAAkB;CAClB,mBAAmB;CACnB;;AAED;CACC,mBAAmB;CACnB,gBAAgB;CAChB,SAAS;CACT,YAAY;CACZ;;AAED;CACC,WAAW;CACX,YAAY;CACZ;;AAED;CACC,2BAA2B;CAC3B,8BAA8B;CAC9B;;AAED;CACC,2BAA2B;CAC3B,8BAA8B;CAC9B;;AAED;CACC,mBAAmB;CACnB,mBAAmB;CACnB;;AAED;CACC,kBAAkB;CAClB;;AAED;CACC,mBAAmB;CACnB;;AAED;;CAEC,oBAAoB;CACpB;;AAED;;CAEC;EACC,wBAAoB;MAApB,oBAAoB;EAEpB,uBAAuB;EACvB,oBAAoB;EACpB;;CAED;;AAED;;CAEC;;EAEC,oBAAoB;EACpB,mBAAmB;EACnB;;CAED;;AAED;;CAEC;;EAEC,gBAAgB;EAChB;;CAED;;ACjKD,iDAAiD;;AAEjD;CACC,mBAAmB;CACnB,YAAY;CACZ,uBAAuB;CACvB,mBAAmB;;CAkGnB;;AAhGA;;CAND;EAOE,uBAAuB;EA+FxB;CA9FC;;AAED;;CAVD;EAWE,4BAA4B;EA2F7B;CA1FC;;AAED;;CAdD;EAeE,yBAAyB;EAuF1B;CAtFC;;AAED;EACC,mBAAmB;EACnB,UAAU;EACV,WAAW;EACX,SAAS;EACT,UAAU;CACV;;AAED;EACC,eAAe;EACf,YAAY;EACZ,mBAAmB;EACnB,aAAa;EACb,0BAAmC;EACnC,uBAAuB;CA0CvB;;AAxCA;CACC,YAAY;CACZ,eAAe;CACf,kBAAkB;CAClB;;AAED;GACC,mBAAmB;GACnB,SAAS;GACT,UAAU;GACV,wBAAwB;GACxB,yBAAyB;GACzB,6BAA6B;GAC7B,uBAAuB;GACvB,6BAA6B;GAC7B,iBAAiB;GACjB,qCAAqC;CAarC;;AAXA;IACC,eAAe;IACf,UAAU;IACV,iBAAiB;IACjB,mBAAmB;IACnB,SAAS;IACT,UAAU;IACV,gCAAgC;IAChC,0BAAkB;QAAlB,sBAAkB;YAAlB,kBAAkB;IAClB;;AAIF;GACC,mBAAmB;GACnB,SAAS;GACT,UAAU;GACV,iCAAiC;GACjC,gBAAgB;GAChB,YAAY;GACZ,YAAY;CACZ;;AAGF;;;;EAEC,sBAAuB;CACvB;;AAED;CACC,4BAA6B;CAC7B;;AAED;EACC,mBAAmB;EACnB,WAAW;EACX,aAAa;EACb,UAAU;EACV,4BAA4B;EAC5B,cAAc;CACd;;AAIA;GACC,sBAAsB;CACtB;;AAMH;CACC,wBAAwB;IACrB,kBAAkB;IAClB,mBAAmB;CACtB,kBAAkB;CAClB,iBAAiB;IACd,qBAAc;IAAd,cAAc;CACjB,oBAAgB;KAAhB,gBAAgB;CAChB,mBAAmB;;CAOnB;;AALA;EACC,YAAY;EACZ,YAAY;EACZ;;AAIF;CACC,cAAc;CACd;;AAED;;CAEC,mBAAmB;CACnB,OAAO;CACP,QAAQ;CACR,YAAY;CACZ,aAAa;CACb,WAAW;CACX,0FAA0F;CAC1F,qBAAc;CAAd,cAAc;CACd,uBAAoB;KAApB,oBAAoB;CACpB,sBAAwB;KAAxB,wBAAwB;CACxB;;AAED;CACC,4FAA4F;CAC5F;;AAED;CACC,iBAAiB;CACjB,sBAAsB;CACtB,cAAc;CACd,mBAAmB;CACnB,yCAAyC;CACzC;;ACvJD,uBAAuB;;AAEvB,8BAA8B;;AAE9B;IACI,eAAgB;CACnB;;AAED,uBAAuB;;AAEvB;CACC,sBAAsB;CACtB,gBAAgB;CAChB,kBAAkB;CAClB,sBAAsB;CACtB;;AAGD,wBAAwB;;AAExB;IACI,UAAU;IACV,cAAc;CACjB;;AAED;IACI,qBAAc;IAAd,cAAc;IACd,oBAAgB;QAAhB,gBAAgB;CACnB,kBAAkB;CAClB,oBAAoB;CACpB;;AAED;IACI,eAAW;QAAX,WAAW;IACX,YAAY;IACZ,cAAc;IACd,uBAAuB;IACvB,0BAA0B;CAC7B,kBAAkB;CAClB,oBAAoB;;CAsBpB;;AApBA;;CATD;EAUE,WAAW;EAmBZ;;CAjBC;GACC,YAAY;EACZ;CACD;;AAED;;CACC;GACC,WAAW;EACX;CACD;;AAED;;CACC;GACC,YAAY;EACZ;CACD;;AAIF;IACI,WAAW;CACd;;AAED,wCAAwC;;AACxC;CACC,aAAa;CACb;;AAED;CACC,aAAa;CACb;;AAED;;CAEC;;EAEC,YAAY;EACZ,YAAY;EACZ,UAAU;EACV;;CAED;;AAKA;EACC,cAAc;;EAcd;;AAZA;;CAHD;EAIE,cAAc;EAWf;CAVC;;AAED;GACC,UAAU;CACV;;AAED;GACC,iBAAiB;CACjB;;AAMH;CACC,aAAa;CACb,0BAA0B;CAC1B,wBAAwB;CACxB,gBAAgB;CAChB,mBAAmB;CACnB;;AAGA;EACC,0BAA0B;EAC1B,yBAAyB;EACzB,cAAc;EACd;;AAED;EACC,sCAAsC;EACtC;;AAED;EACC,kBAAkB;EAClB,gBAAgB;EAChB,gBAAgB;EAChB;;AAED;EACC,gBAAgB;EAChB;;AAED;EACC,YAAY;EACZ,aAAa;EACb,gBAAgB;EAChB,eAAe;EACf;;AAED;EACC,aAAa;EACb;;AAED;EACC,WAAW;EACX;;AAED;EACC,oBAAoB;EACpB,6BAA6B;EAK7B;;AAHA;GACC,YAAY;GACZ;;AAMH;CACC,cAAc;CACd;;AAED;;CAEC;EACC,WAAW;EACX;;CAED;EACC,eAAe;EACf,YAAY;EACZ,mBAAmB;EACnB,YAAY;EACZ,aAAa;EACb;;CAED;;AAED;;CAEC;EACC,aAAa;EACb;;CAED;;AAED;CACC,sBAAsB;CACtB;;AAED;;CAEC;;EAEC,eAAe;EA+Bf;;EA7BA;GACC,qBAAc;GAAd,cAAc;GACd,oBAAgB;OAAhB,gBAAgB;GAChB;;EAED;GACC,cAAe;GAsBf;;EApBA;EACC,YAAY;EACZ,oBAAoB;EACpB;;EAED;EACC,WAAW;EACX,uBAAuB;EACvB;;EAED;EACC,cAAc;EACd;;EAED;EACC,4BAA4B;EAC5B,kBAAkB;EAClB,YAAY;EACZ,eAAe;EACf;;CAIH;;AAED;CACC,YAAY;CACZ,mBAAmB;CACnB;;AC9OD,iBAAiB;;AAMf;GACC,sBAAsB;GACtB;;AAIF;;GAIE;IACC,eAAe;IACf;;GAED;IACC,yBAAyB;IACzB,uBAAuB;IACvB,sBAAuB;;IAMvB;;GAJA;EACC,eAAsB;EACtB;;GAQF;IACC,eAAe;IACf;;GAED;IACC,eAAe;IACf,uBAAuB;IACvB;;GAED;IACC,yBAAyB;IACzB;CAIF;;AAGA;GACC,iBAAiB;GACjB;;AACD;IAEE;KACC,yBAAyB;KACzB;CAEF;;AAIH;CACC,oBAAoB;CACpB;;AAED;;CAEC,cAAe;;CAaf;;AAXA;CACC,YAAY;CACZ,yBAAyB;CACzB,gBAAgB;CAChB,kBAAkB;CAClB,aAAa;CACb,YAAY;CACZ,cAAc;CACd,uBAAuB;CACvB;;AAIF;;IAEI,iBAAiB;IACjB,6BAA8B;CAIjC;;AAHA;EACC,sBAAsB;EACtB;;AAGF;IACI,iBAAiB;CACpB;;AAED;IACI,iBAAiB;CACpB;;AAED;IACI,cAAc;CACjB,2CAA4C;;CAO5C;;AALA;CACC,iBAAiB;CACjB,aAAa;CACb;;AAIF;IACI,cAAc;CACjB;;ACrHC;IACE,gBAAgB;IAChB,kBAAkB;IAClB,oBAAoB;IACpB,iBAAiB;IACjB,eAAY;GACb;;AAGH;EACE,aAAa;EACb,mBAAmB;EACnB,SAAS;CACV;;AAED;EACE,kBAAkB;EAClB,sBAAsB;EACtB,eAAe;EACf,mBAAmB;CACpB;;AAED;IACI,0BAA0B;IAC1B,YAAY;CACf;;AAED;IACI,eAAe;IACf,YAAY;IACZ,kBAAkB;IAClB,iBAAiB;IACjB,eAAe;IACf,iBAAiB;CACpB;;AAED;;;EAGE,uBAAuB;EACvB,UAAU;CACX;;AAED;EACE,gBAAgB;CACjB;;AAGD;EACE,kBAAkB;EAClB,qBAAqB;EACrB,eAAe;EACf,mBAAoB;CAKrB;;AAHC;CACE,cAAc;CACf;;AAMD;IACE,iBAAiB;GAClB;;AAGH;;EAEE,gBAAgB;EAChB,YAAY;EACZ,aAAa;EACb,kBAAkB;EAClB,uBAAuB;EACvB,aAAa;CACd;;AC1EA;EACC,sBAAsB;EACtB,eAAe;EACf;;AAED;EACC,mBAAmB;EACnB;;AAED;EACC,UAAU;EACV;;AAED;EACC,aAAa;EACb,kBAAkB;EAClB,0BAA0B;EAC1B,mBAAmB;EACnB,mBAAmB;EAyBnB;;AAxBA;GACC,iBAAiB;GAOjB;;AANA;IACC,mBAAoB;IAIpB;;AAHA;CACC,eAAe;CACf;;AAGH;GACC,cAAc;GACd,mBAAmB;GACnB,iCAAiC;GACjC,oBAAoB;GACpB;;AACD;GACC,eAAe;GACf,qBAAsB;GAMtB;;AALA;CACC,aAAa;CACb,sBAAsB;CACtB,eAAe;CACf;;AAIH;EACC,cAAc;EACd;;AAED;EACC,eAAe;EACf;;AAED;EACC,cAAc;EACd;;AAED;EACC,eAAe;EACf;;AAED;EACC,iBAAiB;EACjB","file":"wp-optimize-admin-3-0-18.min.css","sourcesContent":["/* COLORS */\n$wp-blue: #0272AA;\n$wp-gray-dark: #555d66;\n$wp-gray-darker: #191e23;\n$wp-secondary-gray: #72777C;\n$wp-secondary-gray-light: #82868B;\n$wp-light-gray: #B5B9BE;\n$wp-lighter-gray: #F2F4F5;\n$success: #009B24;\n$error: #9B3600;\n$red: #E07575;\n$brand: #E46B1F;\n$spacing: 20px; \n\n/* OTHER VARS */\n$breakpoint-small: 782px;\n\n@import \"admin.css\";\n\n@import \"scss/layout\";\n\n@import \"scss/common\";\n\n@import \"scss/menu-and-tabs\";\n\n@import \"scss/notices\";\n\n@import \"scss/image-list\";\n\n@import \"scss/plugin-family-tab\";\n\n@import \"scss/table-sorter\";\n\n@import \"scss/cache\";\n\n@import \"scss/minify\";",".wpo_hidden {\n\tdisplay: none !important;\n}\n\n.wpo_info {\n\tbackground: #FFF;\n\tcolor: #444;\n\tfont-family: -apple-system, \"BlinkMacSystemFont\", \"Segoe UI\", \"Roboto\", \"Oxygen-Sans\", \"Ubuntu\", \"Cantarell\", \"Helvetica Neue\", sans-serif;\n\tmargin: 2em auto;\n\tpadding: 1em 2em;\n\tmax-width: 700px;\n\t-webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.13);\n\tbox-shadow: 0 1px 3px rgba(0,0,0,0.13);\n}\n\n#wp-optimize-wrap .widefat thead th, #wp-optimize-wrap .widefat thead td {\n\tborder-bottom: 1px solid #E1E1E1;\n}\n\n#wp-optimize-wrap .widefat td, #wp-optimize-wrap .widefat th {\n\tpadding: 8px 10px;\n}\n\n/* big button */\n.wpo_primary_big {\n\tpadding: 4px 6px !important;\n\tfont-size: 22px !important;\n\tmin-height: 34px;\n\tmin-width: 200px;\n}\n\n/* SECTIONS */\n.wpo_section {\n\tclear: both;\n\tpadding: 0;\n\tmargin: 0;\n}\n\n.wp-optimize-settings {\n\tmargin-bottom: 16px;\n}\n\n.wp-optimize-settings td > label {\n\tfont-weight: bold;\n\tdisplay: block;\n\tmargin-bottom: 8px;\n}\n\n/* COLUMN SETUP */\n.wpo_col {\n\tdisplay: block;\n\tfloat: left;\n\tmargin: 1% 0 1% 1%;\n}\n\n.wpo_col:first-child {\n\tmargin-left: 0;\n}\n\n/* GROUPING */\n.wpo_group:before,\n.wpo_group:after {\n\tcontent: \"\";\n\tdisplay: table;\n}\n\n.wpo_group:after {\n\tclear: both;\n}\n\n.wpo_half_width {\n\twidth: 48%;\n}\n\n/* GRID OF THREE */\n.wpo_span_3_of_3 {\n\twidth: 100%;\n}\n\n.wpo_span_2_of_3 {\n\twidth: 65.3%;\n}\n\n.wpo_span_1_of_3 {\n\twidth: 32.1%;\n}\n\n#wp-optimize-wrap .nav-tab-wrapper {\n\tmargin: 0;\n}\n\n@media screen and (min-width: 549px) {\n\n\t.show_on_default_sizes {\n\t\tdisplay: block !important;\n\t}\n\n\t.show_on_mobile_sizes {\n\t\tdisplay: none !important;\n\t}\n\n}\n\n@media screen and (max-width: 548px) {\n\n\t.show_on_default_sizes {\n\t\tdisplay: none !important;\n\t}\n\n\t.show_on_mobile_sizes {\n\t\tdisplay: block !important;\n\t}\n\n}\n\n@media screen and (max-width: 768px) {\n\n\t.wpo_col {\n\t\tmargin: 1% 0;\n\t}\n\n\t.wpo_span_3_of_3 {\n\t\twidth: 100%;\n\t}\n\n\t.wpo_span_2_of_3 {\n\t\twidth: 100%;\n\t}\n\n\t.wpo_span_1_of_3 {\n\t\twidth: 100%;\n\t}\n\n\t.wpo_half_width {\n\t\twidth: 100%;\n\t}\n\n}\n\n/* .wp-optimize-settings-clean-transient label, .wp-optimize-settings-clean-pingbacks label, .wp-optimize-settings-clean-trackbacks label, .wp-optimize-settings-clean-postmeta label, .wp-optimize-settings-clean-orphandata label, .wp-optimize-settings-clean-commentmeta label */\n\n/* Optimizations tab */\n\n.wp-optimize-setting-is-sensitive td > label::before {\n\tcontent: \"\\f534\";\n\tfont-family: 'dashicons';\n\tdisplay: inline-block;\n\tmargin-right: 6px;\n\tfont-style: normal;\n\tline-height: 1;\n\tvertical-align: middle;\n\twidth: 20px;\n\tfont-size: 18px;\n\theight: 20px;\n\ttext-align: center;\n\tcolor: #72777C;\n}\n\n.wpo-run-optimizations__container {\n\tmargin-bottom: 15px;\n}\n\n.wp-optimize-optimizations-table-placeholder {\n\tmin-height: 80px;\n}\n\ntd.wp-optimize-settings-optimization-checkbox {\n\twidth: 18px;\n\tpadding-left: 4px;\n\tpadding-right: 0px;\n}\n\n.wp-optimize-settings-optimization-checkbox input {\n\tmargin: 0px;\n\tpadding: 0px;\n}\n\n#retention-period {\n\twidth: 60px;\n}\n\n.wp-optimize-settings-optimization-info {\n\tfont-size: 80%;\n\tfont-style: italic;\n}\n\n.wp-optimize-settings input[type=\"checkbox\"] {\n\t/* width: 18px; */\n}\n\n/* Added for the Image on Addons tab*/\nimg.addons {\n\tdisplay: block;\n\tmargin-left: auto;\n\tmargin-right: auto;\n\tmargin-bottom: 20px;\n\tmax-height: 44px;\n\theight: auto;\n\tmax-width: 100%;\n}\n\n.wpo_spinner {\n\twidth: 18px;\n\theight: 18px;\n\tpadding-left: 10px;\n\tdisplay: none;\n\tposition: relative;\n\ttop: 4px;\n}\n\n.optimization_spinner {\n\twidth: 20px;\n\theight: 20px;\n}\n\n#wp-optimize-auto-options {\n\tmargin: 20px 0 0 28px;\n}\n\n.display-none {\n\tdisplay: none;\n}\n\n.visibility-hidden {\n\tvisibility: hidden;\n}\n\n.margin-one-percent {\n\tmargin: 1%;\n}\n\n#save_done, .save-done {\n\tcolor: #D94F00;\n\tfont-size: 220% !important;\n}\n\n.wp-optimize-settings-optimization-info a {\n\ttext-decoration: underline;\n}\n\n.wp-optimize-settings-optimization-run-spinner {\n\tposition: relative;\n\ttop: 2px;\n}\n\n@media screen and (min-width: 782px) {\n\n\ttd.wp-optimize-settings-optimization-run {\n\t\twidth: 180px;\n\t\tpadding-top: 16px;\n\t}\n\n}\n\n#wpoptimize_table_list .tablesorter-filter-row {\n\tdisplay: none !important;\n}\n\n#wpoptimize_table_list .optimization_spinner {\n\tposition: relative;\n\ttop: 2px;\n\tleft: 5px;\n}\n\n#wpoptimize_table_list .optimization_spinner.visibility-hidden {\n\tdisplay: none;\n}\n\n#wpoptimize_table_list_filter {\n\twidth: 100%;\n\tmargin-bottom: 15px;\n}\n\n#wpoptimize_table_list_tables_not_found {\n\tdisplay: none;\n\tmargin: 20px 0;\n}\n\ndiv#wpoptimize_table_list_tables_not_found + h3 {\n\tmargin-top: 30px;\n}\n\n/* Hide First column */\n#wpoptimize_table_list tr th:first-child,\n#wpoptimize_table_list tr td:first-child {\n\tdisplay: none;\n}\n\n#optimize_form .select2-container,\n#wp-optimize-auto-options .select2-container {\n\twidth: 50% !important;\n\ttop: -5px;\n\theight: 40px;\n\tmargin-left: 10px;\n}\n\n#wpoptimize_table_list .optimization_done_icon {\n\tcolor: #009B24;\n\tfont-size: 200%;\n\tdisplay: inline-block;\n\tposition: relative;\n}\n\n#wpo_sitelist_show_moreoptions_cron {\n\tfont-size: 13px;\n\tline-height: 1.5;\n\tletter-spacing: 1px;\n}\n\n#wp-optimize-nav-tab-contents-images .wpo_span_2_of_3 h3 {\n\tdisplay: inline-block;\n}\n\n.wpo_remove_selected_sizes_btn__container {\n\tmargin-top: 20px;\n}\n\n.unused-image-sizes__label {\n\tdisplay: block;\n\tline-height: 1.6;\n}\n\n@media (max-width: 782px) {\n\n\t.unused-image-sizes__label {\n\t\tmargin-left: 30px;\n\t\tmargin-bottom: 15px;\n\t\tline-height: 1;\n\t\tword-break: break-word;\n\t}\n\n\t.unused-image-sizes__label input[type=checkbox] {\n\t\tmargin-left: -30px;\n\t}\n\n\tbody.rtl .unused-image-sizes__label {\n\t\tmargin-right: 30px;\n\t\tmargin-left: 0;\n\t}\n\n\tbody.rtl .unused-image-sizes__label input[type=checkbox] {\n\t\tmargin-left: 4px;\n\t\tmargin-right: -30px;\n\t}\n\n}\n\n#wp-optimize-nav-tab-contents-tables a {\n\tvertical-align: middle;\n}\n\n#wpo_sitelist_moreoptions,\n#wpo_sitelist_moreoptions_cron {\n\tmargin: 4px 16px 6px 0;\n\tborder: 1px dotted;\n\tpadding: 6px 10px;\n\tmax-height: 300px;\n\toverflow-y: scroll;\n\toverflow-x: hidden;\n}\n\n#wpo_sitelist_moreoptions {\n\tmax-height: 150px;\n\tmargin-right: 0;\n}\n\n#wpo_settings_sites_list li,\n#wpo_settings_sites_list li a {\n\tfont-size: 13px;\n\tline-height: 1.5;\n}\n\n#wpo_sitelist_moreoptions_cron li {\n\tpadding-left: 20px;\n}\n\n#wpo_import_error_message {\n\tdisplay: none;\n\tcolor: #9B0000;\n}\n\n#wpo_import_success_message {\n\tdisplay: none;\n\tcolor: #46B450;\n}\n\n#wp-optimize-logging-options {\n\tmargin-top: 10px;\n}\n\n/* Logger settings*/\n.wpo_logging_header {\n\tfont-weight: bold;\n\tborder-top: 1px solid #333;\n\tborder-bottom: 1px solid #333;\n\tpadding: 5px 0;\n\tmargin: 0;\n}\n\n.wpo_logging_row {\n\tborder-bottom: 1px solid #A1A2A3;\n\tpadding: 5px 0;\n}\n\n.wpo_logging_logger_title,\n.wpo_logging_options_title,\n.wpo_logging_status_title,\n.wpo_logging_actions_title,\n.wpo_logging_logger_row,\n.wpo_logging_options_row,\n.wpo_logging_status_row,\n.wpo_logging_actions_row {\n\tdisplay: inline-block;\n\tvertical-align: middle;\n}\n\n.wpo_logging_logger_title,\n.wpo_logging_logger_row {\n\twidth: 38%;\n}\n\n.wpo_logging_options_title,\n.wpo_logging_options_row {\n\twidth: 44%;\n}\n\n.wpo_logging_status_title,\n.wpo_logging_status_row {\n\twidth: 8%;\n}\n\n.wpo_logging_actions_title,\n.wpo_logging_actions_row {\n\twidth: 7%;\n}\n\n.wpo_logging_actions_row {\n\ttext-align: right;\n}\n\n.wpo_logging_options_row {\n\tword-wrap: break-word;\n}\n\n.wpo_logging_actions_row .dashicons-no-alt,\n.wpo_add_logger_form .dashicons-no-alt {\n\tbackground-color: #F06666;\n\tcolor: #FFF;\n\twidth: 20px;\n\theight: 20px;\n\tborder-radius: 20px;\n\tdisplay: inline-block;\n\tcursor: pointer;\n\tmargin-left: 5px;\n}\n\n.wpo_add_logger_form .dashicons-no-alt {\n\tmargin-top: 12px;\n\tmargin-right: 10px;\n\tfloat: right;\n}\n\n.wpo_logger_type {\n\twidth: 90%;\n\tmargin-top: 10px;\n}\n\n.wpo_logger_addition_option {\n\twidth: 100%;\n\tmargin-top: 5px;\n}\n\n.wpo_alert_notice {\n\tbackground-color: #F06666;\n\tcolor: #FFF;\n\tpadding: 5px;\n\tdisplay: block;\n\tmargin-bottom: 5px;\n\tborder-radius: 5px;\n}\n\n.wpo_error_field {\n\tborder-color: #F06666 !important;\n}\n\n.save_settings_reminder {\n\tdisplay: none;\n\tcolor: #333;\n\tpadding: 15px 20px;\n\tbackground-color: #F0A5A4;\n\tborder-radius: 3px;\n\tmargin: 15px 0;\n}\n\n#wpo_remove_selected_sizes {\n\tmargin-top: 20px;\n}\n\n.wpo_unused_images_buttons_wrap {\n\tfloat: right;\n\tmargin-right: 20px;\n}\n\n.wpo_unused_images_container h3 {\n\tmin-width: 150px;\n}\n\n#wpo_unused_images, #wpo_smush_images_grid {\n\tmax-height: 500px;\n\toverflow-y: auto;\n}\n\n#wpo_unused_images a {\n\toutline: none;\n}\n\n#wp-optimize-nav-tab-wpo_database-tables-contents .wpo-take-a-backup {\n\tmargin-left: 1%;\n}\n\n.run-single-table-delete {\n\tmargin-top: 3px;\n}\n\n#wpo_browser_cache_output,\n#wpo_gzip_compression_output,\n#wpo_advanced_cache_output {\n\tbackground: #F0F0F0;\n\tpadding: 10px;\n\tborder: 1px solid #CCC;\n\twhite-space: pre-wrap;\n}\n\n#wpo_gzip_compression_error_message,\n.wpo-error {\n\tcolor: #9B0000;\n}\n\n.notice.wpo-error__enabling-cache {\n\twhite-space: pre;\n\tmargin-bottom: 15px;\n}\n\na.loading.wpo-refresh-gzip-status {\n\tcolor: rgba(68, 68, 68, 0.5);\n\ttext-decoration: none;\n}\n\na.loading.wpo-refresh-gzip-status img.wpo_spinner.display-none {\n\tdisplay: inline-block;\n}\n\n#wpo_browser_cache_expire_days,\n#wpo_browser_cache_expire_hours {\n\twidth: 50px;\n}\n\n.wpo-enabled .wpo-disabled {\n\tdisplay: none;\n}\n\n.wpo-disabled .wpo-enabled {\n\tdisplay: none;\n}\n\n.wpo-button-wrap {\n\tmargin-top: 10px;\n}","body[class*=\"toplevel_page_WP-Optimize\"] #wpbody,\nbody[class*=\"wp-optimize_page_\"] #wpbody {\n\tpadding-right: 15px;\n\t@media screen and (max-width: 768px) {\n\t\tpadding-right: 0;\n\t}\n}\n\nbody.toplevel_page_WP-Optimize.rtl #wpbody {\n\tpadding-left: 15px;\n\tpadding-right: 0;\n\t@media screen and (max-width: 768px) {\n\t\tpadding-left: 10px;\n\t}\n}\n\nbody[class*=\"toplevel_page_WP-Optimize\"] #wpbody-content,\nbody[class*=\"wp-optimize_page_\"] #wpbody-content {\n\tpadding-top: 80px;\n\n\t@media (max-width: 600px) {\n\t\tpadding-top: 0;\n\t}\t\n\n\t@media (min-width: 820px) {\n\t\tpadding-top: 100px;\n\t}\t\n}\n\n#wp-optimize-wrap {\n\tposition: relative;\n\tpadding-top: 20px;\n\n\t@media (max-width: 600px) {\n\t\tpadding-top: 110px;\n\t}\t\n\n\t@media(max-width: $breakpoint-small) {\n\t\tmargin-right: 0;\n\t}\n}\n\n/* DASHBOARD */\n\n.wpo-main-header {\n\n\theight: 77px;\n\tposition: fixed;\n\ttop: 32px;\n\tleft: 160px;\n\tbackground: #FFF;\n\tright: 0;\n\tz-index: 9980;\n\n\t@media (min-width: 820px) {\n\t\theight: 105px;\n\t}\t\n\n\t.wpo-logo__container {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tjustify-content: center;\n\t\tposition: relative;\n\t\theight: 100%;\n\t\tline-height: 1;\n\t\tfont-size: 1rem;\n\t\tpadding-left: 50px;\n\t\tmargin-left: 10px;\n\t}\n\n\t.wpo-logo {\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\ttop: 50%;\n\t\ttransform: translateY(-50%);\n\t\twidth: 50px;\n\t}\n\n\t.wpo-subheader {\n\t\tmargin: 0;\n\t\tfont-weight: 300;\n\t\tcolor: $wp-secondary-gray;\n\t\tline-height: 1.3;\n\n\t\t@media (max-width: 1080px) {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n\n\tp.wpo-header-links {\n\t\tmargin: 0;\n\t\tfont-size: 0.7rem;\n\t\tposition: absolute;\n\t\tright: 0;\n\t\tpadding: 6px 15px;\n\t\tbackground: #EDEEEF;\n\t\tborder-bottom-left-radius: 5px;\n\t\tz-index: 1;\n\n\t\ta {\n\t\t\ttext-decoration: none;\n\t\t}\n\n\t\t.wpo-header-links__label {\n\t\t\tcolor: $wp-secondary-gray-light;\n\t\t\tposition: absolute;\n\t\t\tright: 100%;\n\t\t\twidth: 110px;\n\t\t\ttext-align: right;\n\t\t\tpadding-right: 10px;\n\t\t}\n\n\t\t@media (max-width: 820px) {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n\n\tp.wpo-header-links__mobile {\n\t\tpadding: 10px;\n\t\tbackground: #EDEEEF;\n\t\tmargin-bottom: 0;\n\t\t@media (min-width: 820px) {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\ta {\n\t\t\tdisplay: inline-block;\n\t\t\tpadding: 4px;\n\t\t\tfont-size: .8rem;\n\t\t}\n\t\t.wpo-header-links__label {\n\t\t\tcolor: $wp-secondary-gray-light;\n\t\t}\n\n\t}\n\n\t@media (max-width: 600px) {\n\t\t\n\t\t.wpo-logo__container strong {\n\t\t\twidth: 140px;\n\t\t\tdisplay: inline-block;\n\t\t}\n\n\t}\n\n\tbody.auto-fold & {\n\t\t@media (max-width: 960px) {\n\t\t\tleft: 36px;\n\t\t}\n\t\t@media (max-width: $breakpoint-small) {\n\t\t\tleft: 0;\n\t\t\ttop: 46px;\n\t\t}\n\t\t@media (max-width: 600px) {\n\t\t\tposition: absolute;\n\t\t\tleft: -10px;\n\t\t\tright: -10px;\n\t\t\ttop: 10px;\n\t\t}\n\t}\n\n\tbody.auto-fold #screen-meta + #wp-optimize-wrap & {\n\t\t@media (max-width: 600px) {\n\t\t\ttop: 0;\n\t\t}\n\t}\n\n\tbody.folded & {\n\t\t@media (min-width: $breakpoint-small) {\n\t\t\tleft: 36px;\n\t\t}\n\t}\n\tbody.is-scrolled & {\n\t\tbox-shadow: 0 5px 25px rgba(0, 0, 0, 0.17);\n\t}\n\n\t/* RTL */\n\tbody.rtl & {\n\t\tright: 160px;\n\t\tleft: 0;\n\n\t\t.wpo-logo__container {\n\t\t\tpadding-left: 10px;\n\t\t\tpadding-right: 50px;\n\t\t\tmargin-left: 0;\n\t\t\tmargin-right: 10px;\n\t\t}\n\t\n\t\t.wpo-logo {\n\t\t\tposition: absolute;\n\t\t\tleft: auto;\n\t\t\tright: 0;\n\t\t}\t\n\n\t\tp.wpo-header-links {\n\t\t\tright: auto;\n\t\t\tleft: 0;\n\t\t\tborder-bottom-right-radius: 5px;\n\t\t\tborder-bottom-left-radius: 0;\n\t\t\n\t\t\t.wpo-header-links__label {\n\t\t\t\tposition: absolute;\n\t\t\t\tleft: 100%;\n\t\t\t\tright: auto;\n\t\t\t\twidth: 110px;\n\t\t\t\ttext-align: left;\n\t\t\t\tpadding-left: 10px;\n\t\t\t}\n\t\t}\n\t}\n\n\tbody.rtl.auto-fold & {\n\t\t@media (max-width: 960px) {\n\t\t\tright: 36px;\n\t\t}\n\t\t@media (max-width: $breakpoint-small) {\n\t\t\tright: 0;\n\t\t\ttop: 46px;\n\t\t}\n\t\t@media (max-width: 600px) {\n\t\t\tposition: absolute;\n\t\t\tleft: -10px;\n\t\t\tright: -10px;\n\t\t\ttop: 10px;\n\t\t}\n\t}\n\n\tbody.rtl.folded & {\n\t\t@media (min-width: $breakpoint-small) {\n\t\t\tright: 36px;\n\t\t\tleft: 0;\n\t\t}\n\t}\n\n}\n\n.wpo-page {\n\tbody.rtl & {\n\t\tpadding-right: 0;\n\t}\n\t@media (min-width: 769px) {\n\t}\n\n\t&:not(.active) {\n\t\tdisplay: none;\n\t}\n}\n\n.wpo-introduction-notice {\n\tpadding: 15px 20px;\n\tmargin-top: 30px;\n\tmargin-bottom: 30px;\n\tbackground: #FFF url('../images/notices/logo-bg-notice.png') no-repeat 100% 100%;\n\n\th3 {\n\t\tfont-size: 2em;\n\t}\n\n\tp:not(.font-size__normal) {\n\t\tfont-size: 1.2em;\n\t}\n\n\t.wpo-introduction-notice__footer-links {\n\t\tpadding-top: 20px;\n\t\t> a, > span {\n\t\t\tdisplay: inline-block;\n\t\t\tmargin-left: 5px;\n\t\t\tmargin-right: 5px;\n\t\t}\n\t}\n}\n\n/* Columns */\n@media (min-width: 1200px) {\n\n\t.wpo-tab-postbox.right-col {\n\t\twidth: 350px;\n\t\tfloat: right;\n\t\tbox-sizing: border-box;\n\t\tmargin-top: 3.1rem;\n\t}\n\n\t.right-col + .wpo-main {\n\t\tfloat: left;\n\t\tbox-sizing: border-box;\n\t\twidth: calc(100% - 380px);\n\t}\n\n}\n","@keyframes rotate {\n\n\t0% {\n\t\ttransform: rotate(0);\n\t}\n\n\t100% {\n\t\ttransform: rotate(360deg);\n\t}\n\n}\n\n/* Common BLOCKS */\n\n\n/* Buttons */\n\n#wp-optimize-wrap {\n\n\t.button-large {\n\t\t@media (max-width: $breakpoint-small) {\n\t\t\tdisplay: block;\n\t\t\twidth: 100%;\n\t\t}\n\t}\n\n\t.red {\n\t\tcolor: $red;\n\t}\n\n\tdiv[id*=\"_notice\"] div.updated,\n\t> .notice {\n\t\tmargin-left: 0;\n\t\tmargin-right: 0;\n\t}\n\n\ttextarea {\n\t\twidth: 100%;\n\t\tborder-radius: 5px;\n\t\theight: 100px;\n\t\tmin-height: 100px;\n\t\tmargin-top: 10px;\n\t\tmargin-bottom: 10px;\n\t}\n\t\n}\n\n.notice.notice-error.wpo-warning,\n.notice.notice-warning.wpo-warning {\n\tmargin-bottom: 18px;\n}\n\n.notice.notice-warning.wpo-warning p {\n\tpadding-left: 36px;\n\tposition: relative;\n}\n\n.notice.notice-warning.wpo-warning p > .dashicons {\n\tposition: absolute;\n\tleft: 0;\n\tfont-size: 26px;\n\ttop: 50%;\n\ttransform: translateY(-50%);\n\theight: 26px;\n\tcolor: #FFB900;\n}\n\n.button.button-block {\n\tdisplay: block;\n\twidth: 100%;\n\ttext-align: center;\n}\n\n.wpo-refresh-button {\n\tfloat: right;\n}\n\n.wpo-refresh-button:hover {\n\tcursor: pointer;\n}\n\n.wpo-refresh-button .dashicons {\n\ttext-decoration: none;\n\tline-height: inherit;\n\tfont-size: inherit;\n}\n\n/* Helper classes */\n\n*[class*=\"wpo-badge\"] {\n\tdisplay: inline-block;\n\tfont-size: .8em;\n\ttext-transform: uppercase;\n\tbackground: $wp-lighter-gray;\n\tpadding: 3px 5px;\n\tline-height: 1;\n\tborder-radius: 3px;\n}\n\n.wpo-badge__new {\n\tbackground: #DBE3E6;\n\tcolor: #00689a;\n}\n\n.wpo-first-child {\n\tmargin-top: 0;\n}\n\n#save_done, .save-done {\n\tcolor: $success;\n\tfont-size: 250%;\n}\n\np.wpo-take-a-backup {\n\tdisplay: inline-block;\n\tmargin: 0;\n\tline-height: 1;\n\tpadding-top: 8px;\n}\n\n@media (min-width: $breakpoint-small) {\n\t.button ~ p.wpo-take-a-backup {\n\t\tmargin-left: 20px;\n\t}\n}\n\n/* Postbox */\n\n#wp-optimize-wrap .nav-tab-wrapper ~ .wp-optimize-nav-tab-contents > .postbox {\n\tborder: none;\n\n\t> h3:first-child {\n\t\tmargin-top: 0;\n\t}\n\n}\n\n.wpo-p25,\n.postbox.wpo-tab-postbox {\n\tpadding: 25px;\n}\n\n.wpo-tab-postbox {\n\t\n\t> h3:first-child {\n\t\tmargin-top: 0;\n\t}\n}\n\n/* Field group */\n\n.wpo-fieldgroup {\n\tbackground: $wp-lighter-gray;\n\tborder-radius: 8px;\n\tpadding: 20px;\n\n\t&:not(:last-child) {\n\t\tmargin-bottom: 2em;\n\t}\n\n\t> *:first-child {\n\t\tmargin-top: 0;\n\t}\n\t\n\t> *:last-child {\n\t\tmargin-bottom: 0;\n\t}\n\n\t&.premium-only {\n\t\tposition: relative;\n\t}\n\n\t.switch + label {\n\t\tfont-weight: 600;\n\t}\n\n\tcode {\n\t\tfont-size: inherit;\n\t\tbackground: #d8dbdc;\n\t\tborder-radius: 3px;\n\t}\n\n\tfieldset {\n\n\t\tlabel {\n\t\t\tdisplay: block;\n\t\t\tmargin-bottom: 6px;\n\t\t}\n\n\t}\n\n}\n\n.wpo-fieldgroup__subgroup {\n\t&:not(:last-of-type) {\n\t\tmargin-bottom: 20px;\n\t}\n}\n\n/* The switches */\n#wp-optimize-wrap {\n\n\t.switch {\n\t\tposition: relative;\n\t\tdisplay: inline-block;\n\t\twidth: 38px;\n\t\theight: 18px;\n\t\tmargin-right: 6px;\n\t\tbox-sizing: border-box;\n\n\t\t/* Hide default HTML checkbox */\n\t\tinput {\n\t\t\topacity: 0;\n\t\t\twidth: 0;\n\t\t\theight: 0;\n\t\t}\n\n\t\t/* The slider */\n\t\t.slider {\n\t\t\tposition: absolute;\n\t\t\tcursor: pointer;\n\t\t\ttop: 0;\n\t\t\tleft: 0;\n\t\t\tright: 0;\n\t\t\tbottom: 0;\n\t\t\tbackground-color: $wp-lighter-gray;\n\t\t\ttransition: .2s;\n\n\t\t\t&::before {\n\t\t\t\tposition: absolute;\n\t\t\t\tcontent: \"\";\n\t\t\t\theight: 8px;\n\t\t\t\twidth: 8px;\n\t\t\t\tleft: 2px;\n\t\t\t\tbottom: 2px;\n\t\t\t\tbackground-color: $wp-gray-dark;\n\t\t\t\tborder: 1px solid $wp-gray-dark;\n\t\t\t\ttransition: all .2s;\n\t\t\t}\n\n\t\t\t&::after {\n\t\t\t\tcontent: '';\n\t\t\t\tdisplay: block;\n\t\t\t\tposition: absolute;\n\t\t\t\theight: 4px;\n\t\t\t\twidth: 3px;\n\t\t\t\tright: 4px;\n\t\t\t\ttop: 4px;\n\t\t\t\tborder-radius: 50%;\n\t\t\t\tborder: 1px solid $wp-secondary-gray;\n\t\t\t\tbox-sizing: content-box\n\t\t\t}\n\n\t\t\t/* Rounded sliders */\n\t\t\t&.round {\n\t\t\t\tborder-radius: 23px;\n\t\t\t\tborder: 2px solid $wp-gray-dark;\n\t\t\t\t&::before {\n\t\t\t\tborder-radius: 50%;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tinput:checked + .slider {\n\t\t\tbackground: $wp-blue;\n\t\t\tborder-color: $wp-blue;\n\t\t\t&::before {\n\t\t\t\tbackground: #FFF;\n\t\t\t\tborder-color: #FFF;\n\t\t\t\ttransform: translateX(20px);\n\t\t\t}\n\n\t\t\t&::after {\n\t\t\t\tcontent: '';\n\t\t\t\tdisplay: block;\n\t\t\t\tposition: absolute;\n\t\t\t\theight: 6px;\n\t\t\t\twidth: 2px;\n\t\t\t\tleft: 7px;\n\t\t\t\ttop: 4px;\n\t\t\t\tbackground: #FFF;\n\t\t\t\tborder: none;\n\t\t\t}\n\n\t\t}\n\t\tinput:disabled + .slider,\n\t\tinput:disabled:checked + .slider {\n\t\t\tbackground: $wp-gray-dark;\n\t\t\tborder-color: $wp-gray-dark;\n\t\t\topacity: 0.3;\n\t\t}\t\t\n\n\t\tinput:focus + .slider {\n\t\t\tbox-shadow: 0 0 0 2px $wp-lighter-gray, 0 0 0 3px $wp-gray-dark;\n\t\t}\n\n\t}\n\n\t.switch-container {\n\t\tdisplay: block;\n\t\tclear: both;\n\t\tlabel {\n\t\t\tline-height: 1;\n\t\t\tvertical-align: middle;\n\t\t}\n\t\t& + small {\n\t\t\tmargin-left: 49px;\n\t\t}\n\t\t[data-tooltip] .dashicons {\n\t\t\ttransform: translateY(-3px);\n\t\t}\n\t}\n\n\t.wpo-fieldgroup > .switch-container:first-child {\n\t\tpadding-top: 0;\n\t}\n\n}\n\nlabel.wpo-label__bold {\n\tfont-weight: 600;\n}\n\n/* Help popup */\n\n.wpo-info {\n\tposition: relative;\n\tdisplay: inline-block;\n\t@media (max-width:480px) {\n\t\tdisplay: block;\n\t}\n}\n\n.wpo-info__content {\n\topacity: 0;\n\tvisibility: hidden;\n\tposition: absolute;\n\ttop: 100%;\n\tleft: -25px;\n\tbackground: #FFF;\n\tpadding: 20px;\n\twidth: 380px;\n\tmax-width: 380px;\n\tz-index: 5;\n\tbox-shadow: 0px 11px 25px 0px rgba(0, 0, 0, 0), 0px 11px 25px 3000px rgba(0, 0, 0, 0);\n\ttransition: 0.2s all;\n\n\t@media (max-width:480px) {\n\t\twidth: auto;\n\t}\n}\n\nspan.wpo-info__close {\n\tdisplay: none;\n\tmargin-left: 20px;\n\tcolor: #444;\n}\n\n.wpo-info.opened {\n\n\tspan.wpo-info__close {\n\t\tdisplay: inline-block;\n\t}\n\n\t.wpo-info__content {\n\t\topacity: 1;\n\t\tvisibility: visible;\n\t\tbox-shadow: 0px 11px 25px 0px rgba(0, 0, 0, 0.3), 0px 11px 25px 3000px rgba(0, 0, 0, 0.3);\n\t}\n\n\ta.wpo-info__trigger {\n\t\tz-index: 6;\n\t}\n\t\n}\n\n.wpo-info__content img,\n.wpo-info__content iframe {\n\tmax-width: 100%;\n}\n\na.wpo-info__trigger {\n\tdisplay: inline-block;\n\ttext-decoration: none;\n\tpadding: 10px;\n\tposition: relative;\n\tbackground: #FFF;\n\tmargin-left: -10px;\n}\n\na.wpo-info__trigger span.dashicons {\n\ttext-decoration: none;\n\tvertical-align: middle;\n}\n\n.wpo_section.wpo_group.wpo-feature-is-disabled > *:not(.wpo-show) {\n opacity: 0.5;\n}\n\n/* Custom Block UI */\n\n.wpo_shade {\n\tdisplay: block;\n\tposition: absolute;\n\tleft: 0;\n\tright: 0;\n\ttop: 0;\n\tbottom: 0;\n\twidth: 100%;\n\theight: 100%;\n\tz-index: 9979;\n\topacity: 1;\n\tbackground-color: rgba(255, 255, 255, 0.88);\n}\n\n.wpo_shade.hidden {\n\tdisplay: none;\n}\n\n.wpo_shade_inner {\n\ttext-align: center;\n\tpadding-top: 80px;\n}\n\n.wpo_shade_inner h4 {\n\tfont-size: 2em;\n}\n\n.wpo_shade_inner .dashicons.dashicons-update-alt {\n\tfont-size: 50px;\n\theight: 50px;\n\twidth: 50px;\n}\n\n.wpo-rotate {\n\tanimation: rotate 1s linear infinite;\n\ttransform-origin: 50% 50%;\n}\n","/* TABS */\n\n#wp-optimize-wrap h2.nav-tab-wrapper {\n margin-bottom: 0;\n\tborder-bottom: none;\n\tposition: relative;\n\t\n\t.nav-tab,\n\t.nav-tab:hover,\n\t.nav-tab:focus,\n\t.nav-tab:focus:active {\n\t\tborder: none;\n\t\tbackground: transparent;\n\t\tmargin: 0;\n\t\tborder-top: 3px solid transparent;\n\t\tpadding: 7px 15px;\n\t\tcolor: $wp-blue;\n\n\t\t.dashicons {\n\t\t\tdisplay: block;\n\t\t\tmargin: 0 auto;\n\t\t\tcolor: $wp-secondary-gray;\n\t\t\tfont-size: 30px;\n\t\t\twidth: 30px;\n\t\t\theight: 30px;\n\t\t}\n\t\t\n\t\tspan.premium-only {\n\t\t\tdisplay: inline-block;\n\t\t\tmargin-left: 6px;\n\t\t\tpadding: 4px;\n\t\t\tfont-size: 10px;\n\t\t\tbackground: $wp-blue;\n\t\t\tline-height: 1;\n\t\t\tborder-radius: 3px;\n\t\t\tcolor: #FFF;\n\t\t\tfont-weight: 300;\n\t\t\ttext-transform: uppercase;\n\t\t\tletter-spacing: .06em;\n\t\t}\t\t\n\t}\n\t\n\t.nav-tab-active,\n\t.nav-tab-active:hover,\n\t.nav-tab-active:focus,\n\t.nav-tab-active:focus:active {\n\t\tbackground: #FFF;\n\t\tbox-shadow: 0 0 1px rgba(0, 0, 0, 0.04);\n\t\tborder-top-color: $wp-blue;\n\n\t\t.dashicons {\n\t\t\tcolor: $wp-blue;\n\t\t}\n\t}\n\n\t.wpo-feedback {\n\t\tdisplay: block;\n\t\tfloat: right;\n\t\tposition: relative;\n\n\t\t> .nav-tab,\n\t\t> .nav-tab:hover,\n\t\t> .nav-tab:focus,\n\t\t> .nav-tab:focus:active {\n\t\t\tposition: relative;\n\t\t\t.dashicons {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tfont-size: 20px;\n\t\t\t\theight: 18px;\n\t\t\t\ttransform: translateY(4px);\n\t\t\t}\n\t\t}\n\n\t\t> div {\n\t\t\tdisplay: none;\n\t\t}\n\t\t&:hover {\n\t\t\ta.nav-tab::after {\n\t\t\t\tcontent: '';\n\t\t\t\tdisplay: block;\n\t\t\t\tposition: absolute;\n\t\t\t\tbottom: 0;\n\t\t\t\tright: 0;\n\t\t\t\theight: 2px;\n\t\t\t\twidth: 100%;\n\t\t\t\tbackground-color: #0172aa;\n\t\t\t}\n\t\t\t> div {\n\t\t\t\tposition: absolute;\n\t\t\t\tdisplay: block;\n\t\t\t\tbackground: #FFF;\n\t\t\t\tpadding: 15px;\n\t\t\t\tright: 0;\n\t\t\t\ttop: 100%;\n\t\t\t\tz-index: 4;\n\t\t\t\tbox-shadow: 0px 11px 25px 0px rgba(0, 0, 0, 0.1);\n\t\t\t\twidth: 350px;\n\n\t\t\t\ta {\n\t\t\t\t\tdisplay: block;\n\t\t\t\t\tfont-size: 14px;\n\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\tpadding: 6px 3px;\n\t\t\t\t\ttext-align: center;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t@media (max-width: $breakpoint-small) {\n\t\t.wpo-feedback {\n\t\t\tdisplay: none;\n\t\t}\n\t\ta:not(.nav-tab-active) {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n\t\n\ta[role=\"toggle-menu\"] {\n\t\tdisplay: block;\n\t\tfloat: right;\n\t\t@media (min-width: $breakpoint-small) {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n\n\n\ta.nav-tab.wp-optimize-nav-tab__back {\n\t\t&, &:focus:active {\t\n\n\t\t\ttext-align: right;\n\n\t\t\t.dashicons {\n\t\t\t\tcolor: $wp-light-gray;\n\t\t\t\tfont-size: 18px;\n\t\t\t\tdisplay: inline-block;\n\t\t\t\theight: auto;\n\t\t\t\tline-height: inherit;\n\t\t\t\twidth: 20px;\n\t\t\t}\n\n\t\t\t@media (min-width: $breakpoint-small) {\n\t\t\t\tposition: absolute;\n\t\t\t\tbottom: 14px;\n\t\t\t\tright: 0;\n\t\t\t\tfont-size: 12px;\n\t\t\t\tfont-weight: 400;\n\t\t\t\ttext-decoration: none;\n\t\t\t\tpadding: 0;\n\t\t\t\n\t\t\t\t.dashicons {\n\t\t\t\t\tcolor: $wp-light-gray;\n\t\t\t\t\tfont-size: 18px;\n\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\theight: auto;\n\t\t\t\t\tline-height: inherit;\n\t\t\t\t\twidth: 20px;\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t}\n\t\n\t}\n}\n\n@media (max-width: $breakpoint-small) {\n\n\t.wpo-mobile-menu-opened {\n\n\t\t.wpo-main .wpo-tab-postbox {\n\t\t//\tdisplay: none;\n\t\t}\n\n\t\th2.nav-tab-wrapper a {\n\t\t\tdisplay: block;\n\t\t\tfloat: none;\n\n\t\t\t&.nav-tab {\n\t\t\t\tdisplay: block !important;\n\t\t\t}\n\n\t\t\t&:not(.nav-tab-active) {\n\t\t\t\tbackground: #f9f9f9 !important;\n\t\t\t}\n\n\t\t\t&.nav-tab-active,\n\t\t\t&.nav-tab-active:focus {\n\t\t\t\tborder-top: none;\n\t\t\t\tborder-left: 3px solid;\n\t\t\t}\n\n\t\t\t&.nav-tab-active,\n\t\t\t&.nav-tab-active:focus,\n\t\t\t&:focus,\n\t\t\t&:hover,\n\t\t\t& {\n\t\t\t\t.dashicons {\n\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\tline-height: inherit;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t&[role=\"toggle-menu\"] {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\n\t}\n\n}\n\n\n/* Pages MENU */\n\n.wpo-pages-menu {\n\tposition: absolute;\n\tbottom: 0;\n\tright: 0;\n\tdisplay: none;\n\n\t@media (max-width: 820px) {\n\t\t.opened + & {\n\t\t\tdisplay: block;\n\t\t\tbox-shadow: 0 5px 25px rgba(0, 0, 0, 0.17);\n\t\t}\n\t}\n\n\t@media (min-width: 821px) {\n\t\tdisplay: flex;\n\t\theight: 77px;\n\t}\n\n\t> a {\n\t\ttext-decoration: none;\n\t\tposition: relative;\n\t\tcolor: inherit;\n\t\ttext-align: center;\n\t\tbox-sizing: border-box;\n\t\tdisplay: block;\n\t\tcolor: $wp-gray-dark;\n\n\t\t@media (min-width: 821px) {\n\t\t\tpadding: 0 8px;\n\t\t\theight: 77px;\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\tjustify-content: center;\n\n\t\t\t> span {\n\t\t\t\tdisplay: block;\n\t\t\t\tmargin: 0 auto;\n\t\t\t}\n\t\t}\n\n\t\t@media (max-width: 820px) {\n\t\t\tpadding: 15px;\n\t\t\tfont-size: 1.2em;\n\t\t}\n\n\t\t&.active {\n\t\t\t&::after {\n\t\t\t\tcontent: '';\n\t\t\t\tdisplay: block;\n\t\t\t\tposition: absolute;\n\t\t\t\tbottom: 0;\n\t\t\t\tleft: 0;\n\t\t\t\twidth: 100%;\n\t\t\t\theight: 3px;\n\t\t\t\tbackground: $brand;\n\t\t\t\tcolor: $wp-gray-darker;\n\n\t\t\t\t@media (max-width: 820px) {\n\t\t\t\t\twidth: 3px;\n\t\t\t\t\theight: 100%;\n\t\t\t\t}\n\n\t\t\t}\n\t\t\t@media (max-width: 820px) {\n\t\t\t\tcolor: $brand;\n\t\t\t}\n\t\t}\n\n\t\t&:hover {\n\t\t\tbackground: #F9F9F9;\n\t\t\tcolor: $wp-gray-darker;\n\t\t}\n\t}\n\n\tspan.separator {\n\t\tdisplay: block;\n\t\twidth: 2px;\n\t\tbackground: #EFEFEF;\n\t\tmargin-top: 18px;\n\t\tmargin-bottom: 18px;\n\t\tmargin-right: 5px;\n\t\tmargin-left: 5px;\n\t\t@media (max-width: 820px) {\n\t\t\twidth: 80%;\n\t\t\theight: 2px;\n\t\t\tmargin: 10px 10%;\n\t\t}\n\t}\n\n\t@media (max-width: 820px) {\n\t\ttext-align: center;\n\t\ttop: 100%;\n\t\twidth: 100%;\n\t\tbottom: auto;\n\t\tbackground: #FFF;\t\t\n\n\t}\n\n\tbody.rtl & {\n\t\tleft: 0;\n\t\tright: auto;\n\t}\n}\n\n#wp-optimize-nav-page-menu {\n\tposition: absolute;\n\tright: 0;\n\tbottom: 0;\n\tdisplay: flex;\n\theight: 77px;\n flex-direction: column;\n padding: 0 20px;\n align-items: center;\n justify-content: center;\n\ttext-decoration: none;\n\n\t&:not(.opened) .dashicons-no-alt {\n\t\tdisplay: none;\n\t}\n\n\t&.opened .dashicons-menu {\n\t\tdisplay: none;\n\t}\n\n\t@media (min-width: 821px) {\n\t\tdisplay: none;\n\t}\n\n\tbody.rtl & {\n\t\tright: auto;\n\t\tleft: 0;\n\t}\n}\n\n/* DASHBOARD Menu */\n\n/* Calculate column width with a $spacing gutter */\n.wpo-dashboard-pages-menu {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\n\t/* Same size for 1 to 3 items */\n\t&[data-itemscount=\"1\"],\n\t&[data-itemscount=\"2\"],\n\t&[data-itemscount=\"3\"] {\n\t\t.wpo-dashboard-pages-menu__item {\n\t\t\twidth: calc(33.333% - 40px / 3);\n\t\t}\n\t}\n\n\t/* above 3 items, change sizes */\n\t@for $count from 4 to 6 {\n\t\t&[data-itemscount=\"$count\"] {\n\t\t\t.wpo-dashboard-pages-menu__item {\n\t\t\t\twidth: calc(100% / $count - $spacing * ($count - 1) / $count);\n\t\t\t}\n\t\t}\n\t}\n\n\t.postbox.wpo-dashboard-pages-menu__item {\n\t\tpadding: $spacing;\n\t\tmargin-right: $spacing;\n\t\tbox-sizing: border-box;\n\t\tpadding-bottom: 60px;\n\t\tmin-width: 0;\n\t\n\t\t&:last-child {\n\t\t\tmargin-right: 0;\n\t\t}\n\t\n\t\th3 {\n\t\t\tmargin-top: 0;\n\n\t\t\t.dashicons {\n\t\t\t\tcolor: $wp-secondary-gray;\n\t\t\t\tline-height: 1;\n\t\t\t\theight: 18px;\n\t\t\t\tmargin-top: -2px;\n\t\t\t\tmargin-right: 10px\n\t\t\t}\n\n\t\t}\n\n\t\ta {\n\t\t\tposition: absolute;\n\t\t\tbottom: $spacing;\n\t\t\tleft: $spacing;\n\t\t\twidth: calc(100% - $spacing * 2) !important;\n\t\t}\n\n\t\t@media (max-width: $breakpoint-small) {\n\t\t\twidth: 100%;\n\t\t\tmargin-right: 0;\n\t\t\tpadding-bottom: 20px;\n\n\t\t\ta.button.button-large {\n\t\t\t\twidth: auto !important;\n\t\t\t\tleft: auto;\n\t\t\t\tbottom: auto;\n\t\t\t\ttop: 50%;\n\t\t\t\ttransform: translateY(-50%);\n\t\t\t\tright: $spacing;\n\t\t\t}\n\n\t\t\th3 {\n\t\t\t\tmargin: 0;\n\t\t\t}\n\n\t\t\tp {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\n\t\t}\n\t\n\t}\n\n}\n\n/* Admin bar separator */\n\n#wpadminbar .quicklinks .menupop.hover ul li.separator .ab-item.ab-empty-item {\n height: 2px;\n line-height: 2px;\n background: #ffffff17;\n margin: 5px 10px;\n width: auto;\n min-width: 0;\n}","/* CSS for adverts */\n\n.updraft-ad-container.updated,\n.updraft-ad-container {\n\tmargin-left: 0px;\n\tmargin-right: 0px;\n\tposition: relative;\n\tpadding-right: 80px;\n}\n\n/* General notices (non WPO) on the WPO page */\n\nbody[class*=WP-Optimize],\nbody[class*=wp-optimize] {\n\t.notice, .error {\n\t\tmargin-left: 0;\n\t\tmargin-right: 0;\n\t}\n}\n\n/*\n\tMake the main error notice sticky\n*/\n\nbody.wp-core-ui.is-scrolled .wpo-main-error-notice {\n position:fixed;\n top: 132px;\n left: 160px;\n right: 0;\n z-index: 20;\n transition: .2s all;\n}\n\n/* Remove other notices */\n\ndiv#wpbody-content {\n\t> .notice:not(.wpo-notice),\n\t> .warning:not(.wpo-notice),\n\t> .updated:not(.wpo-notice),\n\t> .error:not(.wpo-notice) {\n\t\tdisplay: none;\n\t}\n}\n\n.toplevel_page_WP-Optimize.rtl .notice,\n.toplevel_page_WP-Optimize.rtl div.updated,\n.toplevel_page_WP-Optimize.rtl div.error,\n.toplevel_page_WP-Optimize .notice,\n.toplevel_page_WP-Optimize div.updated,\n.toplevel_page_WP-Optimize div.error {\n\tmargin-right: 0;\n}\n\nbody.rtl .updraft-ad-container.updated,\nbody.rtl .updraft-ad-container {\n\tpadding-right: 10px;\n\tpadding-left: 80px;\n}\n\n.updraft_notice_container {\n\tpadding: 7px;\n\tdisplay: -webkit-box;\n\tdisplay: -ms-flexbox;\n\tdisplay: flex;\n\t-webkit-box-align: left;\n\t-ms-flex-align: left;\n\talign-items: left;\n\tflex-direction: column;\n\theight: auto;\n\toverflow: hidden;\n}\n\n.updraft_advert_content_left {\n\tfloat: none;\n\twidth: 65px;\n}\n\n.updraft_advert_content_right {\n\tfloat: none;\n\twidth: auto;\n\toverflow: hidden;\n}\n\n.updraft_advert_bottom {\n\tmargin: 10px 0;\n\tpadding: 10px;\n\tfont-size: 140%;\n\tbackground-color: #FFF;\n\tborder-color: #E6DB55;\n\tborder: 1px solid;\n\tborder-radius: 4px;\n}\n\n.updraft-advert-dismiss {\n\tposition: absolute;\n\tfont-size: 13px;\n\ttop: 5px;\n\tright: 10px;\n}\n\nbody.rtl .updraft-advert-dismiss {\n\tleft: 10px;\n\tright: auto;\n}\n\nh3.updraft_advert_heading {\n\tmargin-top: 5px !important;\n\tmargin-bottom: 5px !important;\n}\n\nh4.updraft_advert_heading {\n\tmargin-top: 2px !important;\n\tmargin-bottom: 3px !important;\n}\n\n.updraft_center_content {\n\ttext-align: center;\n\tmargin-bottom: 5px;\n}\n\n.updraft_notice_link {\n\tpadding-left: 5px;\n}\n\n.updraft_text_center {\n\ttext-align: center;\n}\n\n.wpo-main-header + .updraft-ad-container,\n.wpo-main-header + .updated {\n\tmargin-bottom: 20px;\n}\n\n@media screen and (min-width: 560px) {\n\n\t.updraft_notice_container {\n\t\tflex-direction: row;\n\t\t-webkit-box-align: center;\n\t\t-ms-flex-align: center;\n\t\talign-items: center;\n\t}\n\n}\n\n@media screen and (max-width: 560px) {\n\n\tbody.rtl .updraft-ad-container.updated,\n\tbody.rtl .updraft-ad-container {\n\t\tpadding-right: 10px;\n\t\tpadding-left: 10px;\n\t}\n\n}\n\n@media screen and (max-width: 768px) {\n\n\t.wpo-main-header + .updraft-ad-container,\n\t.wpo-main-header + .updated {\n\t\tmargin-right: 0;\n\t}\n\n}\n\n","/* Unused images / wpo_smush_image / image grid*/\n\n.wpo_unused_image, .wpo_smush_image {\n\tposition: relative;\n\tmargin: 4px;\n\twidth: calc(50% - 8px);\n\ttext-align: center;\n\n\t@media (min-width: 500px) {\n\t\twidth: calc(25% - 8px);\n\t}\n\n\t@media (min-width: $breakpoint-small) {\n\t\twidth: calc(16.6666% - 8px);\n\t}\n\n\t@media (min-width: 1100px) {\n\t\twidth: calc(12.5% - 8px);\n\t}\n\n\t.wpo_unused_image__input {\n\t\tposition: absolute;\n\t\ttop: 10px;\n\t\topacity: 0;\n\t\twidth: 0;\n\t\theight: 0;\n\t}\n\t\n\tlabel {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t\tposition: relative;\n\t\tpadding: 1px;\n\t\tborder: 3px solid $wp-lighter-gray;\n\t\tbox-sizing: border-box;\n\n\t\t&::before {\n\t\t\tcontent: \"\";\n\t\t\tdisplay: block;\n\t\t\tpadding-top: 100%;\n\t\t}\n\n\t\t.thumbnail {\n\t\t\tposition: absolute;\n\t\t\ttop: 1px;\n\t\t\tleft: 1px;\n\t\t\twidth: calc(100% - 2px);\n\t\t\theight: calc(100% - 2px);\n\t\t\tbackground-repeat: no-repeat;\n\t\t\tbackground-size: cover;\n\t\t\tbackground-position: 50% 50%;\n\t\t\toverflow: hidden;\n\t\t\tbackground: rgba(220, 220, 220, 0.2);\n\n\t\t\timg {\n\t\t\t\tdisplay: block;\n\t\t\t\tmargin: 0;\n\t\t\t\tmax-height: 100%;\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 50%;\n\t\t\t\tleft: 50%;\n\t\t\t\ttransform: translate(-50%,-50%);\n\t\t\t\tuser-select: none;\n\t\t\t}\n\n\t\t}\n\n\t\tspan.dashicons {\n\t\t\tposition: absolute;\n\t\t\ttop: 50%;\n\t\t\tleft: 50%;\n\t\t\ttransform: translate(-50%, -50%);\n\t\t\tfont-size: 25px;\n\t\t\twidth: 25px;\n\t\t\topacity: .2;\n\t\t}\n\t}\n\t\n\t.wpo_unused_image__input:checked + label,\n\t&.selected label {\n\t\tborder-color: $wp-blue;\n\t}\n\n\t&:focus-within label {\n\t\tbox-shadow: 0 0 4px $wp-blue;\n\t}\n\t\n\ta, a.button, a.button:active {\n\t\tposition: absolute;\n\t\tz-index: 2;\n\t\tbottom: 13px;\n\t\tleft: 50%;\n\t\ttransform: translateX(-50%);\n\t\tdisplay: none;\n\t}\n\n\t&:hover {\n\n\t\ta, a.button, a.button:active {\n\t\t\tdisplay: inline-block;\n\t\t}\n\n\t}\n\n}\n\n#wpo_unused_images, #wpo_unused_images_trash, #wpo_smush_images_grid {\n\twidth: calc(100% + 8px);\n margin-left: -4px;\n margin-right: -4px;\n\tmax-height: 500px;\n\toverflow-y: auto;\n display: flex;\n\tflex-wrap: wrap;\n\tposition: relative;\n\n\t.wpo-fieldgroup {\n\t\twidth: 100%;\n\t\tmargin: 4px;\n\t}\n\n}\n\n#wpo_unused_images a, #wpo_unused_images_trash a {\n\toutline: none;\n}\n\n.wpo-unused-images__premium-mask,\n.wpo-unused-image-sizes__premium-mask {\n\tposition: absolute;\n\ttop: 0; \n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n\tz-index: 1;\n\tbackground: linear-gradient(to bottom, rgba(255, 255, 255, 0), rgba(255, 255, 255, 0.85));\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n.wpo-unused-image-sizes__premium-mask {\n\tbackground: linear-gradient(to bottom, rgba(255, 255, 255, 0.3), rgba(255, 255, 255, 0.85));\n}\n\na.wpo-unused-images__premium-link {\n\tbackground: #FFF;\n\tdisplay: inline-block;\n\tpadding: 10px;\n\tborder-radius: 3px;\n\tbox-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);\n}\n","/* More Plugins page */\n\n/* Plugins family / Premium */\n\np.wpo-plugin-installed {\n color: $success;\n}\n\n/* Settings repeater */\n\n.wpo-repeater__add {\n\tdisplay: inline-block;\n\tcursor: pointer;\n\tfont-weight: bold;\n\ttext-decoration: none;\n}\n\n\n/* Plugin familly tab */\n\n.wpo-plugin-family__premium h2 {\n margin: 0;\n padding: 25px;\n}\n\n.wpo-plugin-family__plugins {\n display: flex;\n flex-wrap: wrap;\n\tpadding-left: 1px;\n\tpadding-bottom: 1px;\n}\n\n.wpo-plugin-family__plugin {\n flex: auto;\n width: 100%;\n padding: 30px;\n box-sizing: border-box;\n border: 1px solid #E3E4E7;\n\tmargin-left: -1px;\n\tmargin-bottom: -1px;\n\n\t@media (min-width: $breakpoint-small) {\n\t\twidth: 50%;\n\n\t\t.wpo-plugin-family__free & {\n\t\t\twidth: 100%;\n\t\t}\n\t}\n\n\t@media (max-width: 1080px) {\n\t\t.wpo-plugin-family__free & {\n\t\t\twidth: 50%;\n\t\t}\n\t}\n\n\t@media (max-width: $breakpoint-small) {\n\t\t.wpo-plugin-family__free & {\n\t\t\twidth: 100%;\n\t\t}\n\t}\n\n}\n\ndiv#wp-optimize-nav-tab-wpo_mayalso-may_also-contents .wpo-tab-postbox {\n padding: 0;\n}\n\n/* Added for WPO Premium Features tab */\n.wpo_feature_cont {\n\twidth: 64.5%;\n}\n\n.wpo_plugin_family_cont {\n\twidth: 34.5%;\n}\n\n@media (max-width: 1080px) {\n\n\t.wpo_feature_cont,\n\t.wpo_plugin_family_cont {\n\t\twidth: 100%;\n\t\tfloat: none;\n\t\tmargin: 0;\n\t}\n\n}\n\n.wpo_feature_cont,\n.wpo_plugin_family_cont {\n\n\theader {\n\t\tpadding: 20px;\n\n\t\t@media (max-width: 1080px) {\n\t\t\tpadding: 40px;\t\t\n\t\t}\n\n\t\th2 {\n\t\t\tmargin: 0;\n\t\t}\n\t\n\t\tp {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\n\t}\n\n}\n\n.wpo_feat_table, .wpo_feat_th, .wpo_feat_table td {\n\tborder: none;\n\tborder-collapse: collapse;\n\tbackground-color: white;\n\tfont-size: 120%;\n\ttext-align: center;\n}\n\n.wpo_feat_table {\n\ttd {\n\t\tborder: 1px solid #F1F1F1;\n\t\tborder-bottom-width: 4px;\n\t\tpadding: 15px;\n\t}\n\n\ttd:nth-child(2), td:nth-child(3) {\n\t\tbackground: rgba(241, 241, 241, 0.38);\n\t}\n\n\tp {\n\t\tpadding: 0px 10px;\n\t\tmargin: 5px 0px;\n\t\tfont-size: 13px;\n\t}\n\n\th4 {\n\t\tmargin: 5px 0px;\n\t}\n\n\t.dashicons {\n\t\twidth: 25px;\n\t\theight: 25px;\n\t\tfont-size: 25px;\n\t\tline-height: 1;\n\t}\n\n\t.dashicons-yes, .updraft-yes {\n\t\tcolor: green;\n\t}\n\t\n\t.dashicons-no-alt, .updraft-no {\n\t\tcolor: red;\n\t}\n\t\n\ttr.wpo-main-feature-row td {\n\t\tbackground: #f1f1f1;\n\t\tborder-bottom-color: #fafafa;\n\n\t\timg.wpo-premium-image {\n\t\t\twidth: 64px;\n\t\t}\n\t}\n}\n\n\n\n.wpo-premium-image {\n\tdisplay: none;\n}\n\n@media screen and (min-width: 720px) {\n\n\t#wpoptimize_table_list_filter {\n\t\twidth: 40%;\n\t}\n\n\t.wpo-premium-image {\n\t\tdisplay: block;\n\t\tfloat: left;\n\t\tpadding: 16px 18px;\n\t\twidth: 30px;\n\t\theight: auto;\n\t}\n\n}\n\n@media screen and (min-width: 1220px) {\n\n\t.wpo_feat_table td:nth-child(2), .wpo_feat_table td:nth-child(3) {\n\t\twidth: 110px;\n\t}\n\n}\n\n.other-plugin-title {\n\ttext-decoration: none;\n}\n\n@media screen and (max-width: $breakpoint-small) {\n\n\ttable.wpo_feat_table {\n\n\t\tdisplay: block;\n\n\t\ttr {\n\t\t\tdisplay: flex;\n\t\t\tflex-wrap: wrap;\n\t\t}\n\n\t\ttd {\n\t\t\tdisplay: block;\n\n\t\t\t&:first-child {\n\t\t\t\twidth: 100%;\n\t\t\t\tborder-bottom: none;\n\t\t\t}\n\n\t\t\t&:not(:first-child) {\n\t\t\t\twidth: 50%;\n\t\t\t\tbox-sizing: border-box;\n\t\t\t}\n\n\t\t\t&:first-child:empty {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\n\t\t\t&[data-colname]::before {\n\t\t\t\tcontent: attr(data-colname);\n\t\t\t\tfont-size: 0.8rem;\n\t\t\t\tcolor: #CCC;\n\t\t\t\tline-height: 1;\n\t\t\t}\n\t\t}\n\t}\n\n}\n\n.wpo-cache-feature-image {\n\twidth: 40px;\n\tpadding: 16px 14px;\n}\n","\n/* tablesorter */\n\n#wp-optimize-wrap {\n\n\t.wp-list-table {\n\t\t\n\t\ttd {\n\t\t\tword-break: break-all; \n\t\t}\n\n\t}\n\n\t@media screen and (max-width: $breakpoint-small ) {\n\n\t\t.wp-list-table.wp-list-table-mobile-labels tbody {\n\n\t\t\t&, tr, th, td {\n\t\t\t\tdisplay: block;\n\t\t\t}\n\n\t\t\ttd {\n\t\t\t\tpadding: 3px 8px 3px 35%;\n\t\t\t\tword-break: break-word;\n\t\t\t\tbox-sizing: border-box; \n\n\t\t\t\t&::before {\n\t\t\t\t\tcolor: $wp-light-gray;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\t\t\n\n\t\t.wp-list-table.wp-list-table-mobile-labels thead {\n\n\t\t\t&, tr {\n\t\t\t\tdisplay: block;\n\t\t\t}\n\n\t\t\tth.column-primary {\n\t\t\t\tdisplay: block;\n\t\t\t\tbox-sizing: border-box; \n\t\t\t}\n\n\t\t\tth:not(.column-primary) {\n\t\t\t\tdisplay: none !important; \n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tbody.rtl & {\n\t\t.wpo-table-list-filter {\n\t\t\ttext-align: left;\n\t\t}\n\t\t@media screen and (max-width: $breakpoint-small ) {\n\t\t\t.wp-list-table.wp-list-table-mobile-labels tbody {\n\t\t\t\ttd {\n\t\t\t\t\tpadding: 3px 35% 3px 8px;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n.tablesorter-headerRow th {\n\tvertical-align: top;\n}\n\nth:not(.sorter-false) .tablesorter-header-inner {\n\n\tcolor: #0074ab;\n\n\t&::after {\n\t\tcontent: '';\n\t\tfont-family: 'dashicons';\n\t\tfont-size: 20px;\n\t\tline-height: 20px;\n\t\theight: 20px;\n\t\twidth: 20px;\n\t\tdisplay: none;\n\t\tvertical-align: bottom;\n\t}\n\n}\n\nth.tablesorter-header.tablesorter-headerAsc,\nth.tablesorter-header.tablesorter-headerDesc {\n font-weight: 500;\n border-bottom-color: $wp-blue;\n\t.tablesorter-header-inner::after {\n\t\tdisplay: inline-block;\n\t}\n}\n\nth.tablesorter-header.tablesorter-headerDesc .tablesorter-header-inner::after {\n content: \"\\f140\";\n}\n\nth.tablesorter-header.tablesorter-headerAsc .tablesorter-header-inner::after {\n content: \"\\f142\";\n}\n\nth.tablesorter-header:focus {\n outline: none;\n\tbox-shadow: 0 0 3px rgba(0, 116, 171, 0.78);\n\n\t&:not(.tablesorter-headerAsc):not(.tablesorter-headerDesc) .tablesorter-header-inner::after {\n\t\tcontent: \"\\f142\";\n\t\topacity: 0.5;\n\t}\n\n}\n\n.tablesorter.hasFilters tr.filtered {\n display: none;\n}\n",".wpo-text__dim {\n .dashicons-info {\n margin-top: 2px;\n margin-right: 5px;\n border-radius: 30px;\n background: #fff;\n color: $red;\n }\n}\n\n#page_cache_length_value {\n height: 28px;\n position: relative;\n top: 2px;\n}\n\n#wp_optimize_preload_cache_status {\n margin-left: 10px;\n display: inline-block;\n color: #82868B;\n font-size: smaller;\n}\n\n.align-left {\n margin: 10px 10px 0px 0px;\n float: left;\n}\n\ntextarea.cache-settings {\n display: block;\n clear: both;\n min-height: 225px;\n overflow: scroll;\n min-width: 75%;\n margin: 10px 0px;\n}\n\n#wp-optimize-purge-cache, \n#wp-optimize-purge-cache ~ span, \n#wp-optimize-purge-cache ~ img {\n vertical-align: middle;\n top: auto;\n}\n\n#wp-optimize-nav-tab-wpo_cache-cache-contents .wpo-error {\n font-size: 12px;\n}\n\n\n#wpo_browser_cache_error_message {\n padding-top: 10px;\n padding-bottom: 10px;\n margin-left: 0;\n margin-bottom: 10px;\n \n &:empty {\n display: none;\n }\n}\n\n#wp-optimize-nav-tab-wpo_cache-advanced-contents,\n#wp-optimize-nav-tab-wpo_cache-preload-contents,\n#wp-optimize-nav-tab-wpo_cache-cache-contents {\n label {\n font-weight: 600;\n }\n}\n\n.wpo-gzip-already-enabled span.dashicons.dashicons-yes,\n.wpo-enabled > span.dashicons.dashicons-yes {\n font-size: 40px;\n width: 40px;\n height: 40px;\n line-height: 40px;\n vertical-align: middle;\n color: green;\n}\n","#wp-optimize-wrap {\n\n\t.filename {\n\t\tdisplay: inline-block;\n\t\tpadding: 6px 0;\n\t}\n\n\t.no-files-yet .filename {\n\t\tfont-style: italic;\n\t}\n\n\t.processed {\n\t\tmargin: 0;\n\t}\n\n\t.processed .wpo_min_log {\n\t\tpadding: 8px;\n\t\tbackground: white;\n\t\tborder: 1px solid #CDCDCD;\n\t\tborder-radius: 4px;\n\t\tline-height: 1.5em;\n\t\tul {\n\t\t\toverflow-x: auto;\n\t\t\tli {\n\t\t\t\twhite-space: nowrap;\n\t\t\t\t&.failed .wpo_min_file_url {\n\t\t\t\t\tcolor: #dc3232;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\th5 {\n\t\t\tmargin-top: 0;\n\t\t\tmargin-bottom: 8px;\n\t\t\tborder-bottom: 1px solid #cdcdcd;\n\t\t\tpadding-bottom: 6px;\n\t\t}\n\t\t.wpo_min_file_debug {\n\t\t\tcolor: #9c9c9c;\n\t\t\tdisplay: inline-block;\n\t\t\t&::before {\n\t\t\t\tcontent: '—';\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tmargin: 0 10px;\n\t\t\t}\n\t\t}\n\t}\n\n\t.show-if-enabled {\n\t\tdisplay: none;\n\t}\n\n\t.is-enabled .show-if-enabled {\n\t\tdisplay: block;\n\t}\n\n\t.wpo-fieldgroup__subgroup.wpo_min_enable_minify + .wpo-fieldgroup__subgroup {\n\t\tdisplay: none;\n\t}\n\t\n\t.wpo-fieldgroup__subgroup.wpo_min_enable_minify.enabled + .wpo-fieldgroup__subgroup {\n\t\tdisplay: block;\n\t}\n\n\t.wpo-fieldgroup__subgroup.wpo_min_enable_minify:not(.enabled) {\n\t\tmargin-bottom: 0;\n\t}\n}\n"]}
css/wp-optimize-admin.css CHANGED
@@ -147,6 +147,8 @@
147
 
148
  /* .wp-optimize-settings-clean-transient label, .wp-optimize-settings-clean-pingbacks label, .wp-optimize-settings-clean-trackbacks label, .wp-optimize-settings-clean-postmeta label, .wp-optimize-settings-clean-orphandata label, .wp-optimize-settings-clean-commentmeta label */
149
 
 
 
150
  .wp-optimize-setting-is-sensitive td > label::before {
151
  content: "\f534";
152
  font-family: 'dashicons';
@@ -166,6 +168,10 @@
166
  margin-bottom: 15px;
167
  }
168
 
 
 
 
 
169
  td.wp-optimize-settings-optimization-checkbox {
170
  width: 18px;
171
  padding-left: 4px;
@@ -960,6 +966,16 @@ body.rtl .wpo-page {
960
  margin-right: 0;
961
  }
962
 
 
 
 
 
 
 
 
 
 
 
963
  .notice.notice-warning.wpo-warning {
964
  margin-bottom: 18px;
965
  }
@@ -1033,8 +1049,7 @@ p.wpo-take-a-backup {
1033
  }
1034
 
1035
  @media (min-width: 782px) {
1036
-
1037
- p.wpo-take-a-backup {
1038
  margin-left: 20px;
1039
  }
1040
  }
@@ -1065,6 +1080,7 @@ p.wpo-take-a-backup {
1065
  background: #F2F4F5;
1066
  border-radius: 8px;
1067
  padding: 20px
 
1068
  }
1069
 
1070
  .wpo-fieldgroup:not(:last-child) {
@@ -1093,6 +1109,11 @@ p.wpo-take-a-backup {
1093
  border-radius: 3px;
1094
  }
1095
 
 
 
 
 
 
1096
  .wpo-fieldgroup__subgroup:not(:last-of-type) {
1097
  margin-bottom: 20px;
1098
  }
@@ -1192,6 +1213,13 @@ p.wpo-take-a-backup {
1192
  border: none;
1193
  }
1194
 
 
 
 
 
 
 
 
1195
  #wp-optimize-wrap .switch input:focus + .slider {
1196
  box-shadow: 0 0 0 2px #F2F4F5, 0 0 0 3px #555d66;
1197
  }
@@ -1210,10 +1238,18 @@ p.wpo-take-a-backup {
1210
  margin-left: 49px;
1211
  }
1212
 
 
 
 
 
1213
  #wp-optimize-wrap .wpo-fieldgroup > .switch-container:first-child {
1214
  padding-top: 0;
1215
  }
1216
 
 
 
 
 
1217
  /* Help popup */
1218
 
1219
  .wpo-info {
@@ -1289,6 +1325,45 @@ a.wpo-info__trigger span.dashicons {
1289
  vertical-align: middle;
1290
  }
1291
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1292
  .wpo-rotate {
1293
  animation: rotate 1s linear infinite;
1294
  transform-origin: 50% 50%;
@@ -1767,6 +1842,163 @@ body.rtl #wp-optimize-nav-page-menu {
1767
  min-width: 0;
1768
  }
1769
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1770
  /* Unused images / wpo_smush_image / image grid*/
1771
 
1772
  .wpo_unused_image, .wpo_smush_image {
@@ -1843,7 +2075,6 @@ body.rtl #wp-optimize-nav-page-menu {
1843
  left: 50%;
1844
  transform: translate(-50%,-50%);
1845
  -webkit-user-select: none;
1846
- -moz-user-select: none;
1847
  -ms-user-select: none;
1848
  user-select: none;
1849
  }
@@ -2288,15 +2519,6 @@ th.tablesorter-header:focus:not(.tablesorter-headerAsc):not(.tablesorter-headerD
2288
  color: #E07575;
2289
  }
2290
 
2291
- #wp-optimize-nav-tab-wpo_cache-advanced-contents textarea {
2292
- width: 100%;
2293
- border-radius: 5px;
2294
- height: 100px;
2295
- min-height: 100px;
2296
- margin-top: 10px;
2297
- margin-bottom: 10px;
2298
- }
2299
-
2300
  #page_cache_length_value {
2301
  height: 28px;
2302
  position: relative;
@@ -2358,4 +2580,75 @@ textarea.cache-settings {
2358
  line-height: 40px;
2359
  vertical-align: middle;
2360
  color: green;
2361
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
147
 
148
  /* .wp-optimize-settings-clean-transient label, .wp-optimize-settings-clean-pingbacks label, .wp-optimize-settings-clean-trackbacks label, .wp-optimize-settings-clean-postmeta label, .wp-optimize-settings-clean-orphandata label, .wp-optimize-settings-clean-commentmeta label */
149
 
150
+ /* Optimizations tab */
151
+
152
  .wp-optimize-setting-is-sensitive td > label::before {
153
  content: "\f534";
154
  font-family: 'dashicons';
168
  margin-bottom: 15px;
169
  }
170
 
171
+ .wp-optimize-optimizations-table-placeholder {
172
+ min-height: 80px;
173
+ }
174
+
175
  td.wp-optimize-settings-optimization-checkbox {
176
  width: 18px;
177
  padding-left: 4px;
966
  margin-right: 0;
967
  }
968
 
969
+ #wp-optimize-wrap textarea {
970
+ width: 100%;
971
+ border-radius: 5px;
972
+ height: 100px;
973
+ min-height: 100px;
974
+ margin-top: 10px;
975
+ margin-bottom: 10px;
976
+ }
977
+
978
+ .notice.notice-error.wpo-warning,
979
  .notice.notice-warning.wpo-warning {
980
  margin-bottom: 18px;
981
  }
1049
  }
1050
 
1051
  @media (min-width: 782px) {
1052
+ .button ~ p.wpo-take-a-backup {
 
1053
  margin-left: 20px;
1054
  }
1055
  }
1080
  background: #F2F4F5;
1081
  border-radius: 8px;
1082
  padding: 20px
1083
+
1084
  }
1085
 
1086
  .wpo-fieldgroup:not(:last-child) {
1109
  border-radius: 3px;
1110
  }
1111
 
1112
+ .wpo-fieldgroup fieldset label {
1113
+ display: block;
1114
+ margin-bottom: 6px;
1115
+ }
1116
+
1117
  .wpo-fieldgroup__subgroup:not(:last-of-type) {
1118
  margin-bottom: 20px;
1119
  }
1213
  border: none;
1214
  }
1215
 
1216
+ #wp-optimize-wrap .switch input:disabled + .slider,
1217
+ #wp-optimize-wrap .switch input:disabled:checked + .slider {
1218
+ background: #555d66;
1219
+ border-color: #555d66;
1220
+ opacity: 0.3;
1221
+ }
1222
+
1223
  #wp-optimize-wrap .switch input:focus + .slider {
1224
  box-shadow: 0 0 0 2px #F2F4F5, 0 0 0 3px #555d66;
1225
  }
1238
  margin-left: 49px;
1239
  }
1240
 
1241
+ #wp-optimize-wrap .switch-container [data-tooltip] .dashicons {
1242
+ transform: translateY(-3px);
1243
+ }
1244
+
1245
  #wp-optimize-wrap .wpo-fieldgroup > .switch-container:first-child {
1246
  padding-top: 0;
1247
  }
1248
 
1249
+ label.wpo-label__bold {
1250
+ font-weight: 600;
1251
+ }
1252
+
1253
  /* Help popup */
1254
 
1255
  .wpo-info {
1325
  vertical-align: middle;
1326
  }
1327
 
1328
+ .wpo_section.wpo_group.wpo-feature-is-disabled > *:not(.wpo-show) {
1329
+ opacity: 0.5;
1330
+ }
1331
+
1332
+ /* Custom Block UI */
1333
+
1334
+ .wpo_shade {
1335
+ display: block;
1336
+ position: absolute;
1337
+ left: 0;
1338
+ right: 0;
1339
+ top: 0;
1340
+ bottom: 0;
1341
+ width: 100%;
1342
+ height: 100%;
1343
+ z-index: 9979;
1344
+ opacity: 1;
1345
+ background-color: rgba(255, 255, 255, 0.88);
1346
+ }
1347
+
1348
+ .wpo_shade.hidden {
1349
+ display: none;
1350
+ }
1351
+
1352
+ .wpo_shade_inner {
1353
+ text-align: center;
1354
+ padding-top: 80px;
1355
+ }
1356
+
1357
+ .wpo_shade_inner h4 {
1358
+ font-size: 2em;
1359
+ }
1360
+
1361
+ .wpo_shade_inner .dashicons.dashicons-update-alt {
1362
+ font-size: 50px;
1363
+ height: 50px;
1364
+ width: 50px;
1365
+ }
1366
+
1367
  .wpo-rotate {
1368
  animation: rotate 1s linear infinite;
1369
  transform-origin: 50% 50%;
1842
  min-width: 0;
1843
  }
1844
 
1845
+ /* CSS for adverts */
1846
+
1847
+ .updraft-ad-container.updated,
1848
+ .updraft-ad-container {
1849
+ margin-left: 0px;
1850
+ margin-right: 0px;
1851
+ position: relative;
1852
+ padding-right: 80px;
1853
+ }
1854
+
1855
+ /* General notices (non WPO) on the WPO page */
1856
+
1857
+ body[class*=WP-Optimize] .notice, body[class*=WP-Optimize] .error, body[class*=wp-optimize] .notice, body[class*=wp-optimize] .error {
1858
+ margin-left: 0;
1859
+ margin-right: 0;
1860
+ }
1861
+
1862
+ /*
1863
+ Make the main error notice sticky
1864
+ */
1865
+
1866
+ body.wp-core-ui.is-scrolled .wpo-main-error-notice {
1867
+ position:fixed;
1868
+ top: 132px;
1869
+ left: 160px;
1870
+ right: 0;
1871
+ z-index: 20;
1872
+ transition: .2s all;
1873
+ }
1874
+
1875
+ /* Remove other notices */
1876
+
1877
+ div#wpbody-content > .notice:not(.wpo-notice),
1878
+ div#wpbody-content > .warning:not(.wpo-notice),
1879
+ div#wpbody-content > .updated:not(.wpo-notice),
1880
+ div#wpbody-content > .error:not(.wpo-notice) {
1881
+ display: none;
1882
+ }
1883
+
1884
+ .toplevel_page_WP-Optimize.rtl .notice,
1885
+ .toplevel_page_WP-Optimize.rtl div.updated,
1886
+ .toplevel_page_WP-Optimize.rtl div.error,
1887
+ .toplevel_page_WP-Optimize .notice,
1888
+ .toplevel_page_WP-Optimize div.updated,
1889
+ .toplevel_page_WP-Optimize div.error {
1890
+ margin-right: 0;
1891
+ }
1892
+
1893
+ body.rtl .updraft-ad-container.updated,
1894
+ body.rtl .updraft-ad-container {
1895
+ padding-right: 10px;
1896
+ padding-left: 80px;
1897
+ }
1898
+
1899
+ .updraft_notice_container {
1900
+ padding: 7px;
1901
+ display: -ms-flexbox;
1902
+ display: flex;
1903
+ -ms-flex-align: left;
1904
+ align-items: left;
1905
+ -ms-flex-direction: column;
1906
+ flex-direction: column;
1907
+ height: auto;
1908
+ overflow: hidden;
1909
+ }
1910
+
1911
+ .updraft_advert_content_left {
1912
+ float: none;
1913
+ width: 65px;
1914
+ }
1915
+
1916
+ .updraft_advert_content_right {
1917
+ float: none;
1918
+ width: auto;
1919
+ overflow: hidden;
1920
+ }
1921
+
1922
+ .updraft_advert_bottom {
1923
+ margin: 10px 0;
1924
+ padding: 10px;
1925
+ font-size: 140%;
1926
+ background-color: #FFF;
1927
+ border-color: #E6DB55;
1928
+ border: 1px solid;
1929
+ border-radius: 4px;
1930
+ }
1931
+
1932
+ .updraft-advert-dismiss {
1933
+ position: absolute;
1934
+ font-size: 13px;
1935
+ top: 5px;
1936
+ right: 10px;
1937
+ }
1938
+
1939
+ body.rtl .updraft-advert-dismiss {
1940
+ left: 10px;
1941
+ right: auto;
1942
+ }
1943
+
1944
+ h3.updraft_advert_heading {
1945
+ margin-top: 5px !important;
1946
+ margin-bottom: 5px !important;
1947
+ }
1948
+
1949
+ h4.updraft_advert_heading {
1950
+ margin-top: 2px !important;
1951
+ margin-bottom: 3px !important;
1952
+ }
1953
+
1954
+ .updraft_center_content {
1955
+ text-align: center;
1956
+ margin-bottom: 5px;
1957
+ }
1958
+
1959
+ .updraft_notice_link {
1960
+ padding-left: 5px;
1961
+ }
1962
+
1963
+ .updraft_text_center {
1964
+ text-align: center;
1965
+ }
1966
+
1967
+ .wpo-main-header + .updraft-ad-container,
1968
+ .wpo-main-header + .updated {
1969
+ margin-bottom: 20px;
1970
+ }
1971
+
1972
+ @media screen and (min-width: 560px) {
1973
+
1974
+ .updraft_notice_container {
1975
+ -ms-flex-direction: row;
1976
+ flex-direction: row;
1977
+ -ms-flex-align: center;
1978
+ align-items: center;
1979
+ }
1980
+
1981
+ }
1982
+
1983
+ @media screen and (max-width: 560px) {
1984
+
1985
+ body.rtl .updraft-ad-container.updated,
1986
+ body.rtl .updraft-ad-container {
1987
+ padding-right: 10px;
1988
+ padding-left: 10px;
1989
+ }
1990
+
1991
+ }
1992
+
1993
+ @media screen and (max-width: 768px) {
1994
+
1995
+ .wpo-main-header + .updraft-ad-container,
1996
+ .wpo-main-header + .updated {
1997
+ margin-right: 0;
1998
+ }
1999
+
2000
+ }
2001
+
2002
  /* Unused images / wpo_smush_image / image grid*/
2003
 
2004
  .wpo_unused_image, .wpo_smush_image {
2075
  left: 50%;
2076
  transform: translate(-50%,-50%);
2077
  -webkit-user-select: none;
 
2078
  -ms-user-select: none;
2079
  user-select: none;
2080
  }
2519
  color: #E07575;
2520
  }
2521
 
 
 
 
 
 
 
 
 
 
2522
  #page_cache_length_value {
2523
  height: 28px;
2524
  position: relative;
2580
  line-height: 40px;
2581
  vertical-align: middle;
2582
  color: green;
2583
+ }
2584
+
2585
+ #wp-optimize-wrap .filename {
2586
+ display: inline-block;
2587
+ padding: 6px 0;
2588
+ }
2589
+
2590
+ #wp-optimize-wrap .no-files-yet .filename {
2591
+ font-style: italic;
2592
+ }
2593
+
2594
+ #wp-optimize-wrap .processed {
2595
+ margin: 0;
2596
+ }
2597
+
2598
+ #wp-optimize-wrap .processed .wpo_min_log {
2599
+ padding: 8px;
2600
+ background: white;
2601
+ border: 1px solid #CDCDCD;
2602
+ border-radius: 4px;
2603
+ line-height: 1.5em;
2604
+ }
2605
+
2606
+ #wp-optimize-wrap .processed .wpo_min_log ul {
2607
+ overflow-x: auto;
2608
+ }
2609
+
2610
+ #wp-optimize-wrap .processed .wpo_min_log ul li {
2611
+ white-space: nowrap
2612
+ }
2613
+
2614
+ #wp-optimize-wrap .processed .wpo_min_log ul li.failed .wpo_min_file_url {
2615
+ color: #dc3232;
2616
+ }
2617
+
2618
+ #wp-optimize-wrap .processed .wpo_min_log h5 {
2619
+ margin-top: 0;
2620
+ margin-bottom: 8px;
2621
+ border-bottom: 1px solid #cdcdcd;
2622
+ padding-bottom: 6px;
2623
+ }
2624
+
2625
+ #wp-optimize-wrap .processed .wpo_min_log .wpo_min_file_debug {
2626
+ color: #9c9c9c;
2627
+ display: inline-block
2628
+ }
2629
+
2630
+ #wp-optimize-wrap .processed .wpo_min_log .wpo_min_file_debug::before {
2631
+ content: '—';
2632
+ display: inline-block;
2633
+ margin: 0 10px;
2634
+ }
2635
+
2636
+ #wp-optimize-wrap .show-if-enabled {
2637
+ display: none;
2638
+ }
2639
+
2640
+ #wp-optimize-wrap .is-enabled .show-if-enabled {
2641
+ display: block;
2642
+ }
2643
+
2644
+ #wp-optimize-wrap .wpo-fieldgroup__subgroup.wpo_min_enable_minify + .wpo-fieldgroup__subgroup {
2645
+ display: none;
2646
+ }
2647
+
2648
+ #wp-optimize-wrap .wpo-fieldgroup__subgroup.wpo_min_enable_minify.enabled + .wpo-fieldgroup__subgroup {
2649
+ display: block;
2650
+ }
2651
+
2652
+ #wp-optimize-wrap .wpo-fieldgroup__subgroup.wpo_min_enable_minify:not(.enabled) {
2653
+ margin-bottom: 0;
2654
+ }
css/wp-optimize-notices-3-0-16.min.css DELETED
@@ -1,2 +0,0 @@
1
- .updraft-ad-container.updated,.updraft-ad-container{margin-left:0;margin-right:0;position:relative;padding-right:80px}body[class*=WP-Optimize] .notice,body[class*=wp-optimize] .notice{margin-left:0;margin-right:0}.toplevel_page_WP-Optimize.rtl .notice,.toplevel_page_WP-Optimize.rtl div.updated,.toplevel_page_WP-Optimize.rtl div.error,.toplevel_page_WP-Optimize .notice,.toplevel_page_WP-Optimize div.updated,.toplevel_page_WP-Optimize div.error{margin-right:0}body.rtl .updraft-ad-container.updated,body.rtl .updraft-ad-container{padding-right:10px;padding-left:80px}.updraft_notice_container{padding:7px;display:-ms-flexbox;display:flex;-ms-flex-align:left;align-items:left;-ms-flex-direction:column;flex-direction:column;height:auto;overflow:hidden}.updraft_advert_content_left{float:none;width:65px}.updraft_advert_content_right{float:none;width:auto;overflow:hidden}.updraft_advert_bottom{margin:10px 0;padding:10px;font-size:140%;background-color:#FFF;border-color:#e6db55;border:1px solid;border-radius:4px}.updraft-advert-dismiss{position:absolute;font-size:13px;top:5px;right:10px}body.rtl .updraft-advert-dismiss{left:10px;right:auto}h3.updraft_advert_heading{margin-top:5px !important;margin-bottom:5px !important}h4.updraft_advert_heading{margin-top:2px !important;margin-bottom:3px !important}.updraft_center_content{text-align:center;margin-bottom:5px}.updraft_notice_link{padding-left:5px}.updraft_text_center{text-align:center}.wpo-main-header+.updraft-ad-container,.wpo-main-header+.updated{margin-bottom:20px}@media screen and (min-width:560px){.updraft_notice_container{-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center}}@media screen and (max-width:560px){body.rtl .updraft-ad-container.updated,body.rtl .updraft-ad-container{padding-right:10px;padding-left:10px}}@media screen and (max-width:768px){.wpo-main-header+.updraft-ad-container,.wpo-main-header+.updated{margin-right:0}}
2
- /*# sourceMappingURL=wp-optimize-notices-3-0-16.min.css.map */
 
 
css/wp-optimize-notices-3-0-16.min.css.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["css/wp-optimize-notices.css"],"names":[],"mappings":"AAAA,qBAAqB;;AAErB;;CAEC,iBAAiB;CACjB,kBAAkB;CAClB,mBAAmB;CACnB,oBAAoB;CACpB;;AAED,+CAA+C;;AAE/C;;CAEC,eAAe;CACf,gBAAgB;CAChB;;AAED;;;;;;CAMC,gBAAgB;CAChB;;AAED;;CAEC,oBAAoB;CACpB,mBAAmB;CACnB;;AAED;CACC,aAAa;CAEb,qBAAqB;CACrB,cAAc;CAEd,qBAAqB;CACrB,kBAAkB;CAClB,2BAAuB;KAAvB,uBAAuB;CACvB,aAAa;CACb,iBAAiB;CACjB;;AAED;CACC,YAAY;CACZ,YAAY;CACZ;;AAED;CACC,YAAY;CACZ,YAAY;CACZ,iBAAiB;CACjB;;AAED;CACC,eAAe;CACf,cAAc;CACd,gBAAgB;CAChB,uBAAuB;CACvB,sBAAsB;CACtB,kBAAkB;CAClB,mBAAmB;CACnB;;AAED;CACC,mBAAmB;CACnB,gBAAgB;CAChB,SAAS;CACT,YAAY;CACZ;;AAED;CACC,WAAW;CACX,YAAY;CACZ;;AAED;CACC,2BAA2B;CAC3B,8BAA8B;CAC9B;;AAED;CACC,2BAA2B;CAC3B,8BAA8B;CAC9B;;AAED;CACC,mBAAmB;CACnB,mBAAmB;CACnB;;AAED;CACC,kBAAkB;CAClB;;AAED;CACC,mBAAmB;CACnB;;AAED;;CAEC,oBAAoB;CACpB;;AAED;;CAEC;EACC,wBAAoB;MAApB,oBAAoB;EAEpB,uBAAuB;EACvB,oBAAoB;EACpB;;CAED;;AAED;;CAEC;;EAEC,oBAAoB;EACpB,mBAAmB;EACnB;;CAED;;AAED;;CAEC;;EAEC,gBAAgB;EAChB;;CAED","file":"wp-optimize-notices-3-0-16.min.css","sourcesContent":["/* CSS for adverts */\n\n.updraft-ad-container.updated,\n.updraft-ad-container {\n\tmargin-left: 0px;\n\tmargin-right: 0px;\n\tposition: relative;\n\tpadding-right: 80px;\n}\n\n/* General notices (non WPO) on the WPO page */\n\nbody[class*=WP-Optimize] .notice,\nbody[class*=wp-optimize] .notice {\n\tmargin-left: 0;\n\tmargin-right: 0;\n}\n\n.toplevel_page_WP-Optimize.rtl .notice,\n.toplevel_page_WP-Optimize.rtl div.updated,\n.toplevel_page_WP-Optimize.rtl div.error,\n.toplevel_page_WP-Optimize .notice,\n.toplevel_page_WP-Optimize div.updated,\n.toplevel_page_WP-Optimize div.error {\n\tmargin-right: 0;\n}\n\nbody.rtl .updraft-ad-container.updated,\nbody.rtl .updraft-ad-container {\n\tpadding-right: 10px;\n\tpadding-left: 80px;\n}\n\n.updraft_notice_container {\n\tpadding: 7px;\n\tdisplay: -webkit-box;\n\tdisplay: -ms-flexbox;\n\tdisplay: flex;\n\t-webkit-box-align: left;\n\t-ms-flex-align: left;\n\talign-items: left;\n\tflex-direction: column;\n\theight: auto;\n\toverflow: hidden;\n}\n\n.updraft_advert_content_left {\n\tfloat: none;\n\twidth: 65px;\n}\n\n.updraft_advert_content_right {\n\tfloat: none;\n\twidth: auto;\n\toverflow: hidden;\n}\n\n.updraft_advert_bottom {\n\tmargin: 10px 0;\n\tpadding: 10px;\n\tfont-size: 140%;\n\tbackground-color: #FFF;\n\tborder-color: #E6DB55;\n\tborder: 1px solid;\n\tborder-radius: 4px;\n}\n\n.updraft-advert-dismiss {\n\tposition: absolute;\n\tfont-size: 13px;\n\ttop: 5px;\n\tright: 10px;\n}\n\nbody.rtl .updraft-advert-dismiss {\n\tleft: 10px;\n\tright: auto;\n}\n\nh3.updraft_advert_heading {\n\tmargin-top: 5px !important;\n\tmargin-bottom: 5px !important;\n}\n\nh4.updraft_advert_heading {\n\tmargin-top: 2px !important;\n\tmargin-bottom: 3px !important;\n}\n\n.updraft_center_content {\n\ttext-align: center;\n\tmargin-bottom: 5px;\n}\n\n.updraft_notice_link {\n\tpadding-left: 5px;\n}\n\n.updraft_text_center {\n\ttext-align: center;\n}\n\n.wpo-main-header + .updraft-ad-container,\n.wpo-main-header + .updated {\n\tmargin-bottom: 20px;\n}\n\n@media screen and (min-width: 560px) {\n\n\t.updraft_notice_container {\n\t\tflex-direction: row;\n\t\t-webkit-box-align: center;\n\t\t-ms-flex-align: center;\n\t\talign-items: center;\n\t}\n\n}\n\n@media screen and (max-width: 560px) {\n\n\tbody.rtl .updraft-ad-container.updated,\n\tbody.rtl .updraft-ad-container {\n\t\tpadding-right: 10px;\n\t\tpadding-left: 10px;\n\t}\n\n}\n\n@media screen and (max-width: 768px) {\n\n\t.wpo-main-header + .updraft-ad-container,\n\t.wpo-main-header + .updated {\n\t\tmargin-right: 0;\n\t}\n\n}\n\n"]}
 
css/wp-optimize-notices.css DELETED
@@ -1,136 +0,0 @@
1
- /* CSS for adverts */
2
-
3
- .updraft-ad-container.updated,
4
- .updraft-ad-container {
5
- margin-left: 0px;
6
- margin-right: 0px;
7
- position: relative;
8
- padding-right: 80px;
9
- }
10
-
11
- /* General notices (non WPO) on the WPO page */
12
-
13
- body[class*=WP-Optimize] .notice,
14
- body[class*=wp-optimize] .notice {
15
- margin-left: 0;
16
- margin-right: 0;
17
- }
18
-
19
- .toplevel_page_WP-Optimize.rtl .notice,
20
- .toplevel_page_WP-Optimize.rtl div.updated,
21
- .toplevel_page_WP-Optimize.rtl div.error,
22
- .toplevel_page_WP-Optimize .notice,
23
- .toplevel_page_WP-Optimize div.updated,
24
- .toplevel_page_WP-Optimize div.error {
25
- margin-right: 0;
26
- }
27
-
28
- body.rtl .updraft-ad-container.updated,
29
- body.rtl .updraft-ad-container {
30
- padding-right: 10px;
31
- padding-left: 80px;
32
- }
33
-
34
- .updraft_notice_container {
35
- padding: 7px;
36
- display: -ms-flexbox;
37
- display: flex;
38
- -ms-flex-align: left;
39
- align-items: left;
40
- -ms-flex-direction: column;
41
- flex-direction: column;
42
- height: auto;
43
- overflow: hidden;
44
- }
45
-
46
- .updraft_advert_content_left {
47
- float: none;
48
- width: 65px;
49
- }
50
-
51
- .updraft_advert_content_right {
52
- float: none;
53
- width: auto;
54
- overflow: hidden;
55
- }
56
-
57
- .updraft_advert_bottom {
58
- margin: 10px 0;
59
- padding: 10px;
60
- font-size: 140%;
61
- background-color: #FFF;
62
- border-color: #E6DB55;
63
- border: 1px solid;
64
- border-radius: 4px;
65
- }
66
-
67
- .updraft-advert-dismiss {
68
- position: absolute;
69
- font-size: 13px;
70
- top: 5px;
71
- right: 10px;
72
- }
73
-
74
- body.rtl .updraft-advert-dismiss {
75
- left: 10px;
76
- right: auto;
77
- }
78
-
79
- h3.updraft_advert_heading {
80
- margin-top: 5px !important;
81
- margin-bottom: 5px !important;
82
- }
83
-
84
- h4.updraft_advert_heading {
85
- margin-top: 2px !important;
86
- margin-bottom: 3px !important;
87
- }
88
-
89
- .updraft_center_content {
90
- text-align: center;
91
- margin-bottom: 5px;
92
- }
93
-
94
- .updraft_notice_link {
95
- padding-left: 5px;
96
- }
97
-
98
- .updraft_text_center {
99
- text-align: center;
100
- }
101
-
102
- .wpo-main-header + .updraft-ad-container,
103
- .wpo-main-header + .updated {
104
- margin-bottom: 20px;
105
- }
106
-
107
- @media screen and (min-width: 560px) {
108
-
109
- .updraft_notice_container {
110
- -ms-flex-direction: row;
111
- flex-direction: row;
112
- -ms-flex-align: center;
113
- align-items: center;
114
- }
115
-
116
- }
117
-
118
- @media screen and (max-width: 560px) {
119
-
120
- body.rtl .updraft-ad-container.updated,
121
- body.rtl .updraft-ad-container {
122
- padding-right: 10px;
123
- padding-left: 10px;
124
- }
125
-
126
- }
127
-
128
- @media screen and (max-width: 768px) {
129
-
130
- .wpo-main-header + .updraft-ad-container,
131
- .wpo-main-header + .updated {
132
- margin-right: 0;
133
- }
134
-
135
- }
136
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
google-fonts.json ADDED
@@ -0,0 +1 @@
 
1
+ ["abeezee","abel","abhaya libre","abril fatface","aclonica","acme","actor","adamina","advent pro","aguafina script","akronim","aladin","alata","alatsi","aldrich","alef","alegreya","alegreya sc","alegreya sans","alegreya sans sc","aleo","alex brush","alfa slab one","alice","alike","alike angular","allan","allerta","allerta stencil","allura","almarai","almendra","almendra display","almendra sc","amarante","amaranth","amatic sc","amethysta","amiko","amiri","amita","anaheim","andada","andika","angkor","annie use your telescope","anonymous pro","antic","antic didone","antic slab","anton","arapey","arbutus","arbutus slab","architects daughter","archivo","archivo black","archivo narrow","aref ruqaa","arima madurai","arimo","arizonia","armata","arsenal","artifika","arvo","arya","asap","asap condensed","asar","asset","assistant","astloch","asul","athiti","atma","atomic age","aubrey","audiowide","autour one","average","average sans","averia gruesa libre","averia libre","averia sans libre","averia serif libre","b612","b612 mono","bad script","bahiana","bahianita","bai jamjuree","baloo 2","baloo bhai 2","baloo bhaina 2","baloo chettan 2","baloo da 2","baloo paaji 2","baloo tamma 2","baloo tammudu 2","baloo thambi 2","balthazar","bangers","barlow","barlow condensed","barlow semi condensed","barriecito","barrio","basic","baskervville","battambang","baumans","bayon","be vietnam","bebas neue","belgrano","bellefair","belleza","bellota","bellota text","benchnine","bentham","berkshire swash","beth ellen","bevan","big shoulders display","big shoulders text","bigelow rules","bigshot one","bilbo","bilbo swash caps","biorhyme","biorhyme expanded","biryani","bitter","black and white picture","black han sans","black ops one","blinker","bokor","bonbon","boogaloo","bowlby one","bowlby one sc","brawler","bree serif","bubblegum sans","bubbler one","buda","buenard","bungee","bungee hairline","bungee inline","bungee outline","bungee shade","butcherman","butterfly kids","cabin","cabin condensed","cabin sketch","caesar dressing","cagliostro","cairo","caladea","calistoga","calligraffitti","cambay","cambo","candal","cantarell","cantata one","cantora one","capriola","cardo","carme","carrois gothic","carrois gothic sc","carter one","catamaran","caudex","caveat","caveat brush","cedarville cursive","ceviche one","chakra petch","changa","changa one","chango","charm","charmonman","chathura","chau philomene one","chela one","chelsea market","chenla","cherry cream soda","cherry swash","chewy","chicle","chilanka","chivo","chonburi","cinzel","cinzel decorative","clicker script","coda","coda caption","codystar","coiny","combo","comfortaa","comic neue","coming soon","concert one","condiment","content","contrail one","convergence","cookie","copse","corben","cormorant","cormorant garamond","cormorant infant","cormorant sc","cormorant unicase","cormorant upright","courgette","courier prime","cousine","coustard","covered by your grace","crafty girls","creepster","crete round","crimson pro","crimson text","croissant one","crushed","cuprum","cute font","cutive","cutive mono","dm sans","dm serif display","dm serif text","damion","dancing script","dangrek","darker grotesque","david libre","dawning of a new day","days one","dekko","delius","delius swash caps","delius unicase","della respira","denk one","devonshire","dhurjati","didact gothic","diplomata","diplomata sc","do hyeon","dokdo","domine","donegal one","doppio one","dorsa","dosis","dr sugiyama","duru sans","dynalight","eb garamond","eagle lake","east sea dokdo","eater","economica","eczar","el messiri","electrolize","elsie","elsie swash caps","emblema one","emilys candy","encode sans","encode sans condensed","encode sans expanded","encode sans semi condensed","encode sans semi expanded","engagement","englebert","enriqueta","erica one","esteban","euphoria script","ewert","exo","exo 2","expletus sans","fahkwang","fanwood text","farro","farsan","fascinate","fascinate inline","faster one","fasthand","fauna one","faustina","federant","federo","felipa","fenix","finger paint","fira code","fira mono","fira sans","fira sans condensed","fira sans extra condensed","fjalla one","fjord one","flamenco","flavors","fondamento","fontdiner swanky","forum","francois one","frank ruhl libre","freckle face","fredericka the great","fredoka one","freehand","fresca","frijole","fruktur","fugaz one","gfs didot","gfs neohellenic","gabriela","gaegu","gafata","galada","galdeano","galindo","gamja flower","gayathri","gelasio","gentium basic","gentium book basic","geo","geostar","geostar fill","germania one","gidugu","gilda display","girassol","give you glory","glass antiqua","glegoo","gloria hallelujah","goblin one","gochi hand","gorditas","gothic a1","gotu","goudy bookletter 1911","graduate","grand hotel","gravitas one","great vibes","grenze","griffy","gruppo","gudea","gugi","gupter","gurajada","habibi","halant","hammersmith one","hanalei","hanalei fill","handlee","hanuman","happy monkey","harmattan","headland one","heebo","henny penny","hepta slab","herr von muellerhoff","hi melody","hind","hind guntur","hind madurai","hind siliguri","hind vadodara","holtwood one sc","homemade apple","homenaje","ibm plex mono","ibm plex sans","ibm plex sans condensed","ibm plex serif","im fell dw pica","im fell dw pica sc","im fell double pica","im fell double pica sc","im fell english","im fell english sc","im fell french canon","im fell french canon sc","im fell great primer","im fell great primer sc","ibarra real nova","iceberg","iceland","imprima","inconsolata","inder","indie flower","inika","inknut antiqua","inria sans","inria serif","inter","irish grover","istok web","italiana","italianno","itim","jacques francois","jacques francois shadow","jaldi","jim nightshade","jockey one","jolly lodger","jomhuria","jomolhari","josefin sans","josefin slab","joti one","jua","judson","julee","julius sans one","junge","jura","just another hand","just me again down here","k2d","kadwa","kalam","kameron","kanit","kantumruy","karla","karma","katibeh","kaushan script","kavivanar","kavoon","kdam thmor","keania one","kelly slab","kenia","khand","khmer","khula","kirang haerang","kite one","knewave","koho","kodchasan","kosugi","kosugi maru","kotta one","koulen","kranky","kreon","kristi","krona one","krub","kulim park","kumar one","kumar one outline","kurale","la belle aurore","lacquer","laila","lakki reddy","lalezar","lancelot","lateef","lato","league script","leckerli one","ledger","lekton","lemon","lemonada","lexend deca","lexend exa","lexend giga","lexend mega","lexend peta","lexend tera","lexend zetta","libre barcode 128","libre barcode 128 text","libre barcode 39","libre barcode 39 extended","libre barcode 39 extended text","libre barcode 39 text","libre baskerville","libre caslon display","libre caslon text","libre franklin","life savers","lilita one","lily script one","limelight","linden hill","literata","liu jian mao cao","livvic","lobster","lobster two","londrina outline","londrina shadow","londrina sketch","londrina solid","long cang","lora","love ya like a sister","loved by the king","lovers quarrel","luckiest guy","lusitana","lustria","m plus 1p","m plus rounded 1c","ma shan zheng","macondo","macondo swash caps","mada","magra","maiden orange","maitree","major mono display","mako","mali","mallanna","mandali","manjari","mansalva","manuale","marcellus","marcellus sc","marck script","margarine","markazi text","marko one","marmelad","martel","martel sans","marvel","mate","mate sc","maven pro","mclaren","meddon","medievalsharp","medula one","meera inimai","megrim","meie script","merienda","merienda one","merriweather","merriweather sans","metal","metal mania","metamorphous","metrophobic","michroma","milonga","miltonian","miltonian tattoo","mina","miniver","miriam libre","mirza","miss fajardose","mitr","modak","modern antiqua","mogra","molengo","molle","monda","monofett","monoton","monsieur la doulaise","montaga","montez","montserrat","montserrat alternates","montserrat subrayada","moul","moulpali","mountains of christmas","mouse memoirs","mr bedfort","mr dafoe","mr de haviland","mrs saint delafield","mrs sheppards","mukta","mukta mahee","mukta malar","mukta vaani","muli","mystery quest","ntr","nanum brush script","nanum gothic","nanum gothic coding","nanum myeongjo","nanum pen script","neucha","neuton","new rocker","news cycle","niconne","niramit","nixie one","nobile","nokora","norican","nosifer","notable","nothing you could do","noticia text","noto sans","noto sans hk","noto sans jp","noto sans kr","noto sans sc","noto sans tc","noto serif","noto serif jp","noto serif kr","noto serif sc","noto serif tc","nova cut","nova flat","nova mono","nova oval","nova round","nova script","nova slim","nova square","numans","nunito","nunito sans","odibee sans","odor mean chey","offside","old standard tt","oldenburg","oleo script","oleo script swash caps","open sans","open sans condensed","oranienbaum","orbitron","oregano","orienta","original surfer","oswald","over the rainbow","overlock","overlock sc","overpass","overpass mono","ovo","oxanium","oxygen","oxygen mono","pt mono","pt sans","pt sans caption","pt sans narrow","pt serif","pt serif caption","pacifico","padauk","palanquin","palanquin dark","pangolin","paprika","parisienne","passero one","passion one","pathway gothic one","patrick hand","patrick hand sc","pattaya","patua one","pavanam","paytone one","peddana","peralta","permanent marker","petit formal script","petrona","philosopher","piedra","pinyon script","pirata one","plaster","play","playball","playfair display","playfair display sc","podkova","poiret one","poller one","poly","pompiere","pontano sans","poor story","poppins","port lligat sans","port lligat slab","pragati narrow","prata","preahvihear","press start 2p","pridi","princess sofia","prociono","prompt","prosto one","proza libre","public sans","puritan","purple purse","quando","quantico","quattrocento","quattrocento sans","questrial","quicksand","quintessential","qwigley","racing sans one","radley","rajdhani","rakkas","raleway","raleway dots","ramabhadra","ramaraja","rambla","rammetto one","ranchers","rancho","ranga","rasa","rationale","ravi prakash","red hat display","red hat text","redressed","reem kufi","reenie beanie","revalia","rhodium libre","ribeye","ribeye marrow","righteous","risque","roboto","roboto condensed","roboto mono","roboto slab","rochester","rock salt","rokkitt","romanesco","ropa sans","rosario","rosarivo","rouge script","rozha one","rubik","rubik mono one","ruda","rufina","ruge boogie","ruluko","rum raisin","ruslan display","russo one","ruthie","rye","sacramento","sahitya","sail","saira","saira condensed","saira extra condensed","saira semi condensed","saira stencil one","salsa","sanchez","sancreek","sansita","sarabun","sarala","sarina","sarpanch","satisfy","sawarabi gothic","sawarabi mincho","scada","scheherazade","schoolbell","scope one","seaweed script","secular one","sedgwick ave","sedgwick ave display","sen","sevillana","seymour one","shadows into light","shadows into light two","shanti","share","share tech","share tech mono","shojumaru","short stack","shrikhand","siemreap","sigmar one","signika","signika negative","simonetta","single day","sintony","sirin stencil","six caps","skranji","slabo 13px","slabo 27px","slackey","smokum","smythe","sniglet","snippet","snowburst one","sofadi one","sofia","solway","song myung","sonsie one","sorts mill goudy","source code pro","source sans pro","source serif pro","space mono","spartan","special elite","spectral","spectral sc","spicy rice","spinnaker","spirax","squada one","sree krushnadevaraya","sriracha","srisakdi","staatliches","stalemate","stalinist one","stardos stencil","stint ultra condensed","stint ultra expanded","stoke","strait","stylish","sue ellen francisco","suez one","sulphur point","sumana","sunflower","sunshiney","supermercado one","sura","suranna","suravaram","suwannaphum","swanky and moo moo","syncopate","tajawal","tangerine","taprom","tauri","taviraj","teko","telex","tenali ramakrishna","tenor sans","text me one","thasadith","the girl next door","tienne","tillana","timmana","tinos","titan one","titillium web","tomorrow","trade winds","trirong","trocchi","trochut","trykker","tulpen one","turret road","ubuntu","ubuntu condensed","ubuntu mono","ultra","uncial antiqua","underdog","unica one","unifrakturcook","unifrakturmaguntia","unkempt","unlock","unna","vt323","vampiro one","varela","varela round","vast shadow","vesper libre","viaoda libre","vibes","vibur","vidaloka","viga","voces","volkhov","vollkorn","vollkorn sc","voltaire","waiting for the sunrise","wallpoet","walter turncoat","warnes","wellfleet","wendy one","wire one","work sans","yanone kaffeesatz","yantramanav","yatra one","yellowtail","yeon sung","yeseva one","yesteryear","yrsa","zcool kuaile","zcool qingke huangyou","zcool xiaowei","zeyada","zhi mang xing","zilla slab","zilla slab highlight"]
includes/class-commands.php CHANGED
@@ -37,7 +37,7 @@ class WP_Optimize_Commands {
37
  }
38
 
39
  public function get_status_box_contents() {
40
- return WP_Optimize()->include_template('settings/status-box-contents.php', true, array('optimize_db' => false));
41
  }
42
 
43
  public function get_optimizations_table() {
@@ -51,8 +51,10 @@ class WP_Optimize_Commands {
51
  * @return array An array containing the WPO translations and the "WP Optimize" tab's rendered contents
52
  */
53
  public function get_wp_optimize_contents() {
54
- $content = WP_Optimize()->include_template('database/optimize-table.php', true, array('optimize_db' => false));
55
- $content .= $this->get_status_box_contents();
 
 
56
 
57
  return array(
58
  'content' => $content,
@@ -67,7 +69,7 @@ class WP_Optimize_Commands {
67
  * @return array An array containing the WPO translations and the "Table Information" tab's rendered contents
68
  */
69
  public function get_table_information_contents() {
70
- $content = WP_Optimize()->include_template('database/tables.php', true, array('optimize_db' => false));
71
 
72
  return array(
73
  'content' => $content,
@@ -83,8 +85,8 @@ class WP_Optimize_Commands {
83
  */
84
  public function get_settings_contents() {
85
  $admin_settings = '<form action="#" method="post" enctype="multipart/form-data" name="settings_form" id="settings_form">';
86
- $admin_settings .= WP_Optimize()->include_template('settings/settings-general.php', true, array('optimize_db' => false));
87
- $admin_settings .= WP_Optimize()->include_template('settings/settings-auto-cleanup.php', true, array('optimize_db' => false));
88
  $admin_settings .= WP_Optimize()->include_template('settings/settings-logging.php', true, array('optimize_db' => false));
89
  $admin_settings .= '<input id="wp-optimize-settings-save" class="button button-primary" type="submit" name="wp-optimize-settings" value="' . esc_attr('Save settings', 'wp-optimize') .'" />';
90
  $admin_settings .= '</form>';
@@ -295,15 +297,29 @@ class WP_Optimize_Commands {
295
 
296
  return $results;
297
  }
298
-
 
 
 
 
 
299
  public function get_table_list() {
300
 
301
  list ($total_size, $part2) = $this->optimizer->get_current_db_size();
302
 
303
- return array(
304
  'table_list' => WP_Optimize()->include_template('database/tables-body.php', true, array('optimize_db' => false)),
305
  'total_size' => $total_size
306
- );
 
 
 
 
 
 
 
 
 
307
  }
308
 
309
  /**
37
  }
38
 
39
  public function get_status_box_contents() {
40
+ return WP_Optimize()->include_template('database/status-box-contents.php', true, array('optimize_db' => false));
41
  }
42
 
43
  public function get_optimizations_table() {
51
  * @return array An array containing the WPO translations and the "WP Optimize" tab's rendered contents
52
  */
53
  public function get_wp_optimize_contents() {
54
+ $content = WP_Optimize()->include_template('database/optimize-table.php', true, array('optimize_db' => false, 'load_data' => WP_Optimize()->template_should_include_data()));
55
+ if (WP_Optimize()->is_updraft_central_request()) {
56
+ $content .= $this->get_status_box_contents();
57
+ }
58
 
59
  return array(
60
  'content' => $content,
69
  * @return array An array containing the WPO translations and the "Table Information" tab's rendered contents
70
  */
71
  public function get_table_information_contents() {
72
+ $content = WP_Optimize()->include_template('database/tables.php', true, array('optimize_db' => false, 'load_data' => WP_Optimize()->template_should_include_data()));
73
 
74
  return array(
75
  'content' => $content,
85
  */
86
  public function get_settings_contents() {
87
  $admin_settings = '<form action="#" method="post" enctype="multipart/form-data" name="settings_form" id="settings_form">';
88
+ $admin_settings .= WP_Optimize()->include_template('database/settings-general.php', true, array('optimize_db' => false));
89
+ $admin_settings .= WP_Optimize()->include_template('database/settings-auto-cleanup.php', true, array('optimize_db' => false, 'show_innodb_option' => WP_Optimize()->template_should_include_data() && $this->optimizer->show_innodb_force_optimize()));
90
  $admin_settings .= WP_Optimize()->include_template('settings/settings-logging.php', true, array('optimize_db' => false));
91
  $admin_settings .= '<input id="wp-optimize-settings-save" class="button button-primary" type="submit" name="wp-optimize-settings" value="' . esc_attr('Save settings', 'wp-optimize') .'" />';
92
  $admin_settings .= '</form>';
297
 
298
  return $results;
299
  }
300
+
301
+ /**
302
+ * Get the data for the tables tab
303
+ *
304
+ * @return array
305
+ */
306
  public function get_table_list() {
307
 
308
  list ($total_size, $part2) = $this->optimizer->get_current_db_size();
309
 
310
+ return apply_filters('wpo_get_tables_data', array(
311
  'table_list' => WP_Optimize()->include_template('database/tables-body.php', true, array('optimize_db' => false)),
312
  'total_size' => $total_size
313
+ ));
314
+ }
315
+
316
+ /**
317
+ * Get the database tabs information
318
+ *
319
+ * @return array
320
+ */
321
+ public function get_database_tabs() {
322
+ return array_merge(array('optimizations' => $this->get_optimizations_table()), $this->get_table_list());
323
  }
324
 
325
  /**
includes/class-updraft-php-logger.php CHANGED
@@ -3,6 +3,7 @@
3
  if (!defined('ABSPATH')) die('No direct access allowed');
4
 
5
  if (class_exists('Updraft_PHP_Logger')) return;
 
6
 
7
  /**
8
  * Class Updraft_PHP_Logger
3
  if (!defined('ABSPATH')) die('No direct access allowed');
4
 
5
  if (class_exists('Updraft_PHP_Logger')) return;
6
+ if (!class_exists('Updraft_Abstract_Logger')) require_once('class-updraft-abstract-logger.php');
7
 
8
  /**
9
  * Class Updraft_PHP_Logger
includes/class-updraft-smush-manager-commands.php CHANGED
@@ -119,6 +119,7 @@ class Updraft_Smush_Manager_Commands extends Updraft_Task_Manager_Commands_1_0 {
119
 
120
  $response['status'] = true;
121
  $response['operation'] = 'restore';
 
122
  $response['image'] = $image_id;
123
  $response['success'] = $success;
124
  $response['summary'] = __('The image was restored successfully', 'wp-optimize');
119
 
120
  $response['status'] = true;
121
  $response['operation'] = 'restore';
122
+ $response['blog_id'] = $blog_id;
123
  $response['image'] = $image_id;
124
  $response['success'] = $success;
125
  $response['summary'] = __('The image was restored successfully', 'wp-optimize');
includes/class-updraft-smush-manager.php CHANGED
@@ -248,25 +248,25 @@ class Updraft_Smush_Manager extends Updraft_Task_Manager_1_2 {
248
  $backup_path = get_post_meta($image_id, 'original-file', true);
249
 
250
  // If the file doesn't exist, check if it's relative
251
- if (!file_exists($backup_path)) {
252
  $uploads_dir = wp_upload_dir();
253
  $uploads_basedir = trailingslashit($uploads_dir['basedir']);
254
 
255
- if (file_exists($uploads_basedir . $backup_path)) {
256
  $backup_path = $uploads_basedir . $backup_path;
257
  }
258
  }
259
 
260
  // If the file still doesn't exist, the record could be an absolute path from a migrated site
261
  // Use the current Uploads path
262
- if (!file_exists($backup_path)) {
263
  $current_uploads_dir_folder = trailingslashit(substr($uploads_basedir, strlen(ABSPATH)));
264
  // A strict operator (!==) needs to be used, as 0 is a positive result.
265
  if (false !== strpos($backup_path, $current_uploads_dir_folder)) {
266
  $temp_relative_backup_path = substr($backup_path, strpos($backup_path, $current_uploads_dir_folder) + strlen($current_uploads_dir_folder));
267
  }
268
 
269
- if (file_exists($uploads_basedir . $temp_relative_backup_path)) {
270
  $backup_path = $uploads_basedir . $temp_relative_backup_path;
271
  }
272
 
@@ -274,7 +274,7 @@ class Updraft_Smush_Manager extends Updraft_Task_Manager_1_2 {
274
 
275
  // If the file still doesn't exist, the record could be an absolute path from a migrated site
276
  // The current Uploads path failed, so try with the default uploads directory value
277
- if (!file_exists($backup_path)) {
278
  // A strict operator (!==) needs to be used, as 0 is a positive result.
279
  if (false !== strpos($backup_path, 'wp-content/uploads/')) {
280
  $backup_path = substr($backup_path, strpos($backup_path, 'wp-content/uploads/') + strlen('wp-content/uploads/'));
@@ -282,7 +282,7 @@ class Updraft_Smush_Manager extends Updraft_Task_Manager_1_2 {
282
  }
283
  }
284
 
285
- if (!file_exists($backup_path)) {
286
  // Delete information about backup.
287
  delete_post_meta($image_id, 'original-file');
288
  $error = new WP_Error('restore_backup_not_found', __('The backup was not found; it may have been deleted or was already restored', 'wp-optimize'));
@@ -1022,7 +1022,7 @@ class Updraft_Smush_Manager extends Updraft_Task_Manager_1_2 {
1022
  $log_header[] = "\n";
1023
  $log_header[] = "Header for logs at time: ".date('r')." on ".network_site_url();
1024
  $log_header[] = "WP: ".$wp_version;
1025
- $log_header[] = "PHP: ".phpversion()." (".PHP_SAPI.", ".@php_uname().")";
1026
  $log_header[] = "MySQL: $mysql_version";
1027
  $log_header[] = "WPLANG: ".get_locale();
1028
  $log_header[] = "Server: ".$_SERVER["SERVER_SOFTWARE"];
@@ -1067,7 +1067,7 @@ class Updraft_Smush_Manager extends Updraft_Task_Manager_1_2 {
1067
 
1068
  if (!$got_wp_version) {
1069
  global $wp_version;
1070
- @include(ABSPATH.WPINC.'/version.php');
1071
  $got_wp_version = $wp_version;
1072
  }
1073
 
@@ -1113,7 +1113,7 @@ class Updraft_Smush_Manager extends Updraft_Task_Manager_1_2 {
1113
  * @return Integer - 1 or 0
1114
  */
1115
  public function detect_safe_mode() {
1116
- return (@ini_get('safe_mode') && strtolower(@ini_get('safe_mode')) != "off") ? 1 : 0;
1117
  }
1118
 
1119
  /**
@@ -1352,7 +1352,7 @@ class Updraft_Smush_Manager extends Updraft_Task_Manager_1_2 {
1352
  public function unscheduled_original_file_deletion($post_id) {
1353
  $the_original_file = get_post_meta($post_id, 'original-file', true);
1354
  if ('' != $the_original_file && file_exists($the_original_file)) {
1355
- @unlink($the_original_file);
1356
  }
1357
  }
1358
 
248
  $backup_path = get_post_meta($image_id, 'original-file', true);
249
 
250
  // If the file doesn't exist, check if it's relative
251
+ if (!is_file($backup_path)) {
252
  $uploads_dir = wp_upload_dir();
253
  $uploads_basedir = trailingslashit($uploads_dir['basedir']);
254
 
255
+ if (is_file($uploads_basedir . $backup_path)) {
256
  $backup_path = $uploads_basedir . $backup_path;
257
  }
258
  }
259
 
260
  // If the file still doesn't exist, the record could be an absolute path from a migrated site
261
  // Use the current Uploads path
262
+ if (!is_file($backup_path)) {
263
  $current_uploads_dir_folder = trailingslashit(substr($uploads_basedir, strlen(ABSPATH)));
264
  // A strict operator (!==) needs to be used, as 0 is a positive result.
265
  if (false !== strpos($backup_path, $current_uploads_dir_folder)) {
266
  $temp_relative_backup_path = substr($backup_path, strpos($backup_path, $current_uploads_dir_folder) + strlen($current_uploads_dir_folder));
267
  }
268
 
269
+ if (is_file($uploads_basedir . $temp_relative_backup_path)) {
270
  $backup_path = $uploads_basedir . $temp_relative_backup_path;
271
  }
272
 
274
 
275
  // If the file still doesn't exist, the record could be an absolute path from a migrated site
276
  // The current Uploads path failed, so try with the default uploads directory value
277
+ if (!is_file($backup_path)) {
278
  // A strict operator (!==) needs to be used, as 0 is a positive result.
279
  if (false !== strpos($backup_path, 'wp-content/uploads/')) {
280
  $backup_path = substr($backup_path, strpos($backup_path, 'wp-content/uploads/') + strlen('wp-content/uploads/'));
282
  }
283
  }
284
 
285
+ if (!is_file($backup_path)) {
286
  // Delete information about backup.
287
  delete_post_meta($image_id, 'original-file');
288
  $error = new WP_Error('restore_backup_not_found', __('The backup was not found; it may have been deleted or was already restored', 'wp-optimize'));
1022
  $log_header[] = "\n";
1023
  $log_header[] = "Header for logs at time: ".date('r')." on ".network_site_url();
1024
  $log_header[] = "WP: ".$wp_version;
1025
+ $log_header[] = "PHP: ".phpversion()." (".PHP_SAPI.", ".@php_uname().")";// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged
1026
  $log_header[] = "MySQL: $mysql_version";
1027
  $log_header[] = "WPLANG: ".get_locale();
1028
  $log_header[] = "Server: ".$_SERVER["SERVER_SOFTWARE"];
1067
 
1068
  if (!$got_wp_version) {
1069
  global $wp_version;
1070
+ @include(ABSPATH.WPINC.'/version.php');// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged
1071
  $got_wp_version = $wp_version;
1072
  }
1073
 
1113
  * @return Integer - 1 or 0
1114
  */
1115
  public function detect_safe_mode() {
1116
+ return (@ini_get('safe_mode') && strtolower(@ini_get('safe_mode')) != "off") ? 1 : 0;// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged
1117
  }
1118
 
1119
  /**
1352
  public function unscheduled_original_file_deletion($post_id) {
1353
  $the_original_file = get_post_meta($post_id, 'original-file', true);
1354
  if ('' != $the_original_file && file_exists($the_original_file)) {
1355
+ @unlink($the_original_file);// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged
1356
  }
1357
  }
1358
 
includes/class-wp-optimize-options.php CHANGED
@@ -408,7 +408,7 @@ class WP_Optimize_Options {
408
  // Save additional auto backup option values.
409
  foreach ($settings as $key => $value) {
410
  if (preg_match('/enable\-auto\-backup\-/', $key)) {
411
- $value = ('0' != $value) ? 'true' : 'false';
412
  $this->update_option($key, $value);
413
  }
414
  }
408
  // Save additional auto backup option values.
409
  foreach ($settings as $key => $value) {
410
  if (preg_match('/enable\-auto\-backup\-/', $key)) {
411
+ $value = ('true' == $value) ? 'true' : 'false';
412
  $this->update_option($key, $value);
413
  }
414
  }
includes/class-wp-optimize-updates.php CHANGED
@@ -22,6 +22,7 @@ class WP_Optimize_Updates {
22
  */
23
  private static $updates = array(
24
  '3.0.12' => array('delete_old_locks'),
 
25
  );
26
 
27
  /**
@@ -65,6 +66,13 @@ class WP_Optimize_Updates {
65
 
66
  $wpdb->query($query);
67
  }
 
 
 
 
 
 
 
68
  }
69
 
70
  endif;
22
  */
23
  private static $updates = array(
24
  '3.0.12' => array('delete_old_locks'),
25
+ '3.0.17' => array('disable_cache_directories_viewing'),
26
  );
27
 
28
  /**
66
 
67
  $wpdb->query($query);
68
  }
69
+
70
+ /**
71
+ * Disable cache directories viewing.
72
+ */
73
+ public static function disable_cache_directories_viewing() {
74
+ wpo_disable_cache_directories_viewing();
75
+ }
76
  }
77
 
78
  endif;
includes/class-wp-optimizer.php CHANGED
@@ -458,9 +458,14 @@ class WP_Optimizer {
458
  /**
459
  * This function will return total database size and a possible gain of db in KB.
460
  *
 
461
  * @return string total db size gained.
462
  */
463
- public function get_current_db_size() {
 
 
 
 
464
 
465
  $wp_optimize = WP_Optimize();
466
 
@@ -487,7 +492,9 @@ class WP_Optimizer {
487
  }
488
 
489
  $total_size = ($data_usage + $index_usage);
490
- return array($wp_optimize->format_size($total_size), $wp_optimize->format_size($total_gain));
 
 
491
  }
492
 
493
  /**
@@ -537,4 +544,14 @@ class WP_Optimizer {
537
 
538
  return array('output' => $output);
539
  }
 
 
 
 
 
 
 
 
 
 
540
  }
458
  /**
459
  * This function will return total database size and a possible gain of db in KB.
460
  *
461
+ * @param boolean $update - Wether to update the values or not
462
  * @return string total db size gained.
463
  */
464
+ public function get_current_db_size($update = false) {
465
+
466
+ if (!$update && $db_size = get_transient('wpo_get_current_db_size')) {
467
+ return $db_size;
468
+ }
469
 
470
  $wp_optimize = WP_Optimize();
471
 
492
  }
493
 
494
  $total_size = ($data_usage + $index_usage);
495
+ $db_size = array($wp_optimize->format_size($total_size), $wp_optimize->format_size($total_gain));
496
+ set_transient('wpo_get_current_db_size', $db_size, 3600);
497
+ return $db_size;
498
  }
499
 
500
  /**
544
 
545
  return array('output' => $output);
546
  }
547
+
548
+ /**
549
+ * Wether InnoDB tables require confirmation to be optimized
550
+ *
551
+ * @return boolean
552
+ */
553
+ public function show_innodb_force_optimize() {
554
+ $tablesstatus = $this->get_table_information();
555
+ return false === $tablesstatus['is_optimizable'] && $tablesstatus['inno_db_tables'] > 0;
556
+ }
557
  }
includes/wp-optimize-notices.php CHANGED
@@ -17,7 +17,7 @@ class WP_Optimize_Notices extends Updraft_Notices_1_0 {
17
  /**
18
  * Creates and returns the only notice instance
19
  *
20
- * @return a WP_Optimize_Notices instance
21
  */
22
  public static function instance() {
23
  if (empty(self::$_instance)) {
@@ -123,17 +123,17 @@ class WP_Optimize_Notices extends Updraft_Notices_1_0 {
123
  'supported_positions' => $this->anywhere,
124
  'validity_function' => 'is_wpo_premium_installed',
125
  ),
126
- 'meta-slider' => array(
127
- 'prefix' => '',
128
- 'title' => __("MetaSlider: the world's #1 slider plugin from the makers of WP-Optimize", "wp-optimize"),
129
- 'text' => __("With MetaSlider, you can easily add style and flare with beautifully-designed sliders.", "wp-optimize"),
130
- 'button_link' => 'https://www.metaslider.com',
131
- 'button_meta' => 'metaslider',
132
- 'image' => 'notices/metaslider_logo.png',
133
- 'dismiss_time' => 'dismiss_notice',
134
- 'supported_positions' => $this->anywhere,
135
- 'validity_function' => 'is_metaslider_installed',
136
- ),
137
 
138
  // The sale adverts content starts here
139
  'blackfriday' => array(
@@ -218,9 +218,6 @@ class WP_Optimize_Notices extends Updraft_Notices_1_0 {
218
  if ($this->initialized) return;
219
  $this->initialized = true;
220
  $this->notices_content = (defined('WP_OPTIMIZE_NOADS_B') && WP_OPTIMIZE_NOADS_B) ? array() : $this->populate_notices_content();
221
- $our_version = (defined('SCRIPT_DEBUG') && SCRIPT_DEBUG) ? WPO_VERSION.'.'.time() : WPO_VERSION;
222
- $min_or_not_internal = (defined('SCRIPT_DEBUG') && SCRIPT_DEBUG) ? '' : '-'. str_replace('.', '-', WPO_VERSION). '.min';
223
- wp_enqueue_style('wp-optimize-notices-css', WPO_PLUGIN_URL.'/css/wp-optimize-notices'.$min_or_not_internal.'.css', array(), $our_version);
224
  }
225
 
226
  /**
17
  /**
18
  * Creates and returns the only notice instance
19
  *
20
+ * @return object WP_Optimize_Notices instance
21
  */
22
  public static function instance() {
23
  if (empty(self::$_instance)) {
123
  'supported_positions' => $this->anywhere,
124
  'validity_function' => 'is_wpo_premium_installed',
125
  ),
126
+ // 'meta-slider' => array(
127
+ // 'prefix' => '',
128
+ // 'title' => __("MetaSlider: the world's #1 slider plugin from the makers of WP-Optimize", "wp-optimize"),
129
+ // 'text' => __("With MetaSlider, you can easily add style and flare with beautifully-designed sliders.", "wp-optimize"),
130
+ // 'button_link' => 'https://www.metaslider.com',
131
+ // 'button_meta' => 'metaslider',
132
+ // 'image' => 'notices/metaslider_logo.png',
133
+ // 'dismiss_time' => 'dismiss_notice',
134
+ // 'supported_positions' => $this->anywhere,
135
+ // 'validity_function' => 'is_metaslider_installed',
136
+ // ),
137
 
138
  // The sale adverts content starts here
139
  'blackfriday' => array(
218
  if ($this->initialized) return;
219
  $this->initialized = true;
220
  $this->notices_content = (defined('WP_OPTIMIZE_NOADS_B') && WP_OPTIMIZE_NOADS_B) ? array() : $this->populate_notices_content();
 
 
 
221
  }
222
 
223
  /**
js/cache-3-0-16.min.js DELETED
@@ -1 +0,0 @@
1
- var WP_Optimize_Cache=function(e){function a(){var e={};return s(".cache-settings").each(function(){var a=s(this),o=a.attr("name");a.is('input[type="checkbox"]')?e[o]=a.is(":checked")?1:0:a.is("textarea")?e[o]=a.val().split("\n"):e[o]=a.val()}),e}function o(){d||(d=setInterval(function(){t()},5e3))}function t(){e("get_cache_preload_status",null,function(e){e.done?(_.val(wpoptimize.run_now),_.data("running",!1),clearInterval(d),d=null):(_.val(wpoptimize.cancel),_.data("running",!0)),l.text(e.message),r(e)})}function r(e){s("#wpo_current_cache_size_information").text(wpoptimize.current_cache_size+" "+e.size),s("#wpo_current_cache_file_count").text(wpoptimize.number_of_files+" "+e.file_count)}var s=jQuery,i=s("#wp_optimize_browser_cache_enable"),n=s("#wp-optimize-purge-cache"),p=s("#enable_page_caching"),c=s("#page_cache_length_value");n.click(function(){var a=s(this),t=a.next(),i=t.next();t.show(),e("purge_page_cache",{},function(e){t.hide(),i.show(),setTimeout(function(){i.fadeOut("slow",function(){i.hide()}),o()},5e3),r(e)})}),s("body").on("wpo_purge_cache",function(){n.trigger("click")}),i.closest("form").submit(function(e){return e.preventDefault(),i.trigger("click"),!1}),c.on("change",function(){var e=parseInt(c.val(),10);s('#preload_schedule_type option[value="wpo_use_cache_lifespan"]').prop("disabled",isNaN(e)||e<=0)}),s("#wp_optimize_gzip_compression_enable").on("click",function(){var a=s(this),o=a.next();o.show(),e("enable_gzip_compression",{enable:a.data("enable")},function(e){var t=s("#wpo_gzip_compression_status");e?(e.enabled?(a.text(wpoptimize.disable),a.data("enable","0"),t.removeClass("wpo-disabled").addClass("wpo-enabled")):(a.text(wpoptimize.enable),a.data("enable","1"),t.addClass("wpo-disabled").removeClass("wpo-enabled")),e.message?s("#wpo_gzip_compression_error_message").text(e.message).show():s("#wpo_gzip_compression_error_message").hide(),e.output?s("#wpo_gzip_compression_output").html(e.output).show():s("#wpo_gzip_compression_output").hide()):alert(wpoptimize.error_unexpected_response),o.hide()}).fail(function(){alert(wpoptimize.error_unexpected_response),o.hide()})}),s(".wpo-refresh-gzip-status").on("click",function(a){a.preventDefault(),$link=s(this),$link.addClass("loading"),e("get_gzip_compression_status",null,function(e){$link.removeClass("loading");var a=s("#wpo_gzip_compression_status");e.hasOwnProperty("status")?e.status?a.removeClass("wpo-disabled").addClass("wpo-enabled"):a.addClass("wpo-disabled").removeClass("wpo-enabled"):e.hasOwnProperty("error")&&(alert(e.error),console.log("Gzip status error code: "+e.code),console.log("Gzip status error message: "+e.message))})}),i.on("click",function(){var a=s("#wpo_browser_cache_expire_days"),o=s("#wpo_browser_cache_expire_hours"),t=parseInt(a.val(),10),r=parseInt(o.val(),10),i=s(this),n=i.next();return isNaN(t)&&(t=0),isNaN(r)&&(r=0),t<0||r<0?(s("#wpo_browser_cache_error_message").text(wpoptimize.please_use_positive_integers).show(),!1):r>23?(s("#wpo_browser_cache_error_message").text(wpoptimize.please_use_valid_values).show(),!1):(s("#wpo_browser_cache_error_message").hide(),a.val(t),o.val(r),n.show(),void e("enable_browser_cache",{browser_cache_expire_days:t,browser_cache_expire_hours:r},function(e){var a=s("#wpo_browser_cache_status");e?(e.enabled?(i.text(wpoptimize.update),a.removeClass("wpo-disabled").addClass("wpo-enabled")):(i.text(wpoptimize.enable),a.addClass("wpo-disabled").removeClass("wpo-enabled")),e.message?s("#wpo_browser_cache_message").text(e.message).show():s("#wpo_browser_cache_message").hide(),e.error_message?s("#wpo_browser_cache_error_message").text(e.error_message).show():s("#wpo_browser_cache_error_message").hide(),e.output?s("#wpo_browser_cache_output").html(e.output).show():s("#wpo_browser_cache_output").hide()):alert(wpoptimize.error_unexpected_response),n.hide()}).fail(function(){alert(wpoptimize.error_unexpected_response),n.hide()}))}),s("#wp-optimize-save-cache-settings, #wp-optimize-save-cache-advanced-rules, #wp-optimize-save-cache-preload-settings").click(function(){var o=s(this),t=o.next(),r=t.next();t.show(),s.blockUI(),e("save_cache_settings",{"cache-settings":a()},function(e){e.hasOwnProperty("error")?(console.log(e.error),s(".wpo-error__enabling-cache").removeClass("wpo_hidden").find("p").text(e.error.message)):s(".wpo-error__enabling-cache").addClass("wpo_hidden").find("p").text(""),e.hasOwnProperty("advanced_cache_file_writing_error")?s("#wpo_advanced_cache_output").text(e.advanced_cache_file_content).show():s("#wpo_advanced_cache_output").hide(),s.unblockUI(),t.hide(),p.prop("checked",e.enabled),r.show(),p.is(":checked")?(s(".purge-cache").show(),s("#wp_optimize_run_cache_preload").removeProp("disabled")):(s(".purge-cache").hide(),s("#wp_optimize_run_cache_preload").prop("disabled",!0)),setTimeout(function(){r.fadeOut("slow",function(){r.hide()})},5e3)})}),p.on("change",function(){s("#wp-optimize-save-cache-settings").trigger("click")});var _=s("#wp_optimize_run_cache_preload"),l=s("#wp_optimize_preload_cache_status"),d=null,u=s("#enable_schedule_preload"),w=s("#preload_schedule_type");u.change(function(){u.prop("checked")?w.prop("disabled",!1):w.prop("disabled",!0)}),u.trigger("change"),_.on("click",function(){var a=s(this),t=a.data("running"),r=l.text();a.prop("disabled",!0),t?(a.data("running",!1),clearInterval(d),d=null,e("cancel_cache_preload",null,function(e){e&&e.hasOwnProperty("message")&&l.text(e.message)}).always(function(){a.val(wpoptimize.run_now),a.prop("disabled",!1)})):(l.text(wpoptimize.starting_preload),a.data("running",!0),e("run_cache_preload",null,null,!0,{timeout:3e3}).always(function(e){try{var t=wpo_parse_json(e)}catch(s){}return t&&t.error?(alert(t.error),l.text(r),a.prop("disabled",!1),void a.data("running",!1)):(l.text(wpoptimize.loading_urls),a.val(wpoptimize.cancel),a.prop("disabled",!1),void o())}))}),_.data("running")&&o()};
 
js/cache-3-0-18.min.js ADDED
@@ -0,0 +1 @@
 
1
+ var WP_Optimize_Cache=function(){function e(){var e={};return r(".cache-settings").each(function(){var a=r(this),o=a.attr("name");a.is('input[type="checkbox"]')?e[o]=a.is(":checked")?1:0:a.is("textarea")?e[o]=a.val().split("\n"):e[o]=a.val()}),e}function a(){d||(d=setInterval(function(){o()},5e3))}function o(){s("get_cache_preload_status",null,function(e){e.done?(_.val(wpoptimize.run_now),_.data("running",!1),clearInterval(d),d=null):(_.val(wpoptimize.cancel),_.data("running",!0)),l.text(e.message),t(e)})}function t(e){r("#wpo_current_cache_size_information").text(wpoptimize.current_cache_size+" "+e.size),r("#wpo_current_cache_file_count").text(wpoptimize.number_of_files+" "+e.file_count)}var r=jQuery,s=wp_optimize.send_command,i=r("#wp_optimize_browser_cache_enable"),n=r("#wp-optimize-purge-cache"),p=r("#enable_page_caching"),c=r("#page_cache_length_value");n.click(function(){var e=r(this),o=e.next(),i=o.next();o.show(),s("purge_page_cache",{},function(e){o.hide(),i.show(),setTimeout(function(){i.fadeOut("slow",function(){i.hide()}),a()},5e3),t(e)})}),r("body").on("wpo_purge_cache",function(){n.trigger("click")}),i.closest("form").submit(function(e){return e.preventDefault(),i.trigger("click"),!1}),c.on("change",function(){var e=parseInt(c.val(),10);r('#preload_schedule_type option[value="wpo_use_cache_lifespan"]').prop("disabled",isNaN(e)||e<=0)}),r("#wp_optimize_gzip_compression_enable").on("click",function(){var e=r(this),a=e.next();a.show(),s("enable_gzip_compression",{enable:e.data("enable")},function(o){var t=r("#wpo_gzip_compression_status");o?(o.enabled?(e.text(wpoptimize.disable),e.data("enable","0"),t.removeClass("wpo-disabled").addClass("wpo-enabled")):(e.text(wpoptimize.enable),e.data("enable","1"),t.addClass("wpo-disabled").removeClass("wpo-enabled")),o.message?r("#wpo_gzip_compression_error_message").text(o.message).show():r("#wpo_gzip_compression_error_message").hide(),o.output?r("#wpo_gzip_compression_output").html(o.output).show():r("#wpo_gzip_compression_output").hide()):alert(wpoptimize.error_unexpected_response),a.hide()}).fail(function(){alert(wpoptimize.error_unexpected_response),a.hide()})}),r(".wpo-refresh-gzip-status").on("click",function(e){e.preventDefault(),$link=r(this),$link.addClass("loading"),s("get_gzip_compression_status",null,function(e){$link.removeClass("loading");var a=r("#wpo_gzip_compression_status");e.hasOwnProperty("status")?e.status?a.removeClass("wpo-disabled").addClass("wpo-enabled"):a.addClass("wpo-disabled").removeClass("wpo-enabled"):e.hasOwnProperty("error")&&(alert(e.error),console.log("Gzip status error code: "+e.code),console.log("Gzip status error message: "+e.message))})}),i.on("click",function(){var e=r("#wpo_browser_cache_expire_days"),a=r("#wpo_browser_cache_expire_hours"),o=parseInt(e.val(),10),t=parseInt(a.val(),10),i=r(this),n=i.next();return isNaN(o)&&(o=0),isNaN(t)&&(t=0),o<0||t<0?(r("#wpo_browser_cache_error_message").text(wpoptimize.please_use_positive_integers).show(),!1):t>23?(r("#wpo_browser_cache_error_message").text(wpoptimize.please_use_valid_values).show(),!1):(r("#wpo_browser_cache_error_message").hide(),e.val(o),a.val(t),n.show(),void s("enable_browser_cache",{browser_cache_expire_days:o,browser_cache_expire_hours:t},function(e){var a=r("#wpo_browser_cache_status");e?(e.enabled?(i.text(wpoptimize.update),a.removeClass("wpo-disabled").addClass("wpo-enabled")):(i.text(wpoptimize.enable),a.addClass("wpo-disabled").removeClass("wpo-enabled")),e.message?r("#wpo_browser_cache_message").text(e.message).show():r("#wpo_browser_cache_message").hide(),e.error_message?r("#wpo_browser_cache_error_message").text(e.error_message).show():r("#wpo_browser_cache_error_message").hide(),e.output?r("#wpo_browser_cache_output").html(e.output).show():r("#wpo_browser_cache_output").hide()):alert(wpoptimize.error_unexpected_response),n.hide()}).fail(function(){alert(wpoptimize.error_unexpected_response),n.hide()}))}),r("#wp-optimize-save-cache-settings, #wp-optimize-save-cache-advanced-rules, #wp-optimize-save-cache-preload-settings").click(function(){var a=r(this),o=a.next(),t=o.next();o.show(),r.blockUI(),s("save_cache_settings",{"cache-settings":e()},function(e){e.hasOwnProperty("error")?(console.log(e.error),r(".wpo-error__enabling-cache").removeClass("wpo_hidden").find("p").text(e.error.message)):r(".wpo-error__enabling-cache").addClass("wpo_hidden").find("p").text(""),e.hasOwnProperty("advanced_cache_file_writing_error")?r("#wpo_advanced_cache_output").text(e.advanced_cache_file_content).show():r("#wpo_advanced_cache_output").hide(),p.prop("checked",e.enabled),t.show(),p.is(":checked")?(r(".purge-cache").show(),r("#wp_optimize_run_cache_preload").removeProp("disabled")):(r(".purge-cache").hide(),r("#wp_optimize_run_cache_preload").prop("disabled",!0)),setTimeout(function(){t.fadeOut("slow",function(){t.hide()})},5e3)}).always(function(){r.unblockUI(),o.hide()})}),p.on("change",function(){r("#wp-optimize-save-cache-settings").trigger("click")});var _=r("#wp_optimize_run_cache_preload"),l=r("#wp_optimize_preload_cache_status"),d=null,u=r("#enable_schedule_preload"),w=r("#preload_schedule_type");u.change(function(){u.prop("checked")?w.prop("disabled",!1):w.prop("disabled",!0)}),u.trigger("change"),_.on("click",function(){var e=r(this),o=e.data("running"),t=l.text();e.prop("disabled",!0),o?(e.data("running",!1),clearInterval(d),d=null,s("cancel_cache_preload",null,function(e){e&&e.hasOwnProperty("message")&&l.text(e.message)}).always(function(){e.val(wpoptimize.run_now),e.prop("disabled",!1)})):(l.text(wpoptimize.starting_preload),e.data("running",!0),s("run_cache_preload",null,null,!0,{timeout:3e3}).always(function(o){try{var r=wpo_parse_json(o)}catch(s){}return r&&r.error?(alert(r.error),l.text(t),e.prop("disabled",!1),void e.data("running",!1)):(l.text(wpoptimize.loading_urls),e.val(wpoptimize.cancel),e.prop("disabled",!1),void a())}))}),_.data("running")&&a()};
js/cache.js CHANGED
@@ -1,6 +1,7 @@
1
- var WP_Optimize_Cache = function (send_command) {
2
 
3
  var $ = jQuery;
 
4
 
5
  var browser_cache_enable_btn = $('#wp_optimize_browser_cache_enable'),
6
  purge_cache_btn = $('#wp-optimize-purge-cache'),
@@ -251,8 +252,6 @@ var WP_Optimize_Cache = function (send_command) {
251
  $('#wpo_advanced_cache_output').hide();
252
  }
253
 
254
- $.unblockUI();
255
- spinner.hide();
256
  // update the toggle state depending on response.enabled
257
  enable_page_caching_switch.prop('checked', response.enabled);
258
  success_icon.show();
@@ -273,6 +272,9 @@ var WP_Optimize_Cache = function (send_command) {
273
  success_icon.hide();
274
  });
275
  }, 5000);
 
 
 
276
  });
277
  });
278
 
1
+ var WP_Optimize_Cache = function () {
2
 
3
  var $ = jQuery;
4
+ var send_command = wp_optimize.send_command;
5
 
6
  var browser_cache_enable_btn = $('#wp_optimize_browser_cache_enable'),
7
  purge_cache_btn = $('#wp-optimize-purge-cache'),
252
  $('#wpo_advanced_cache_output').hide();
253
  }
254
 
 
 
255
  // update the toggle state depending on response.enabled
256
  enable_page_caching_switch.prop('checked', response.enabled);
257
  success_icon.show();
272
  success_icon.hide();
273
  });
274
  }, 5000);
275
+ }).always(function() {
276
+ $.unblockUI();
277
+ spinner.hide();
278
  });
279
  });
280
 
js/handlebars/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (C) 2011-2017 by Yehuda Katz
2
 
3
  Permission is hereby granted, free of charge, to any person obtaining a copy
4
  of this software and associated documentation files (the "Software"), to deal
1
+ Copyright (C) 2011-2019 by Yehuda Katz
2
 
3
  Permission is hereby granted, free of charge, to any person obtaining a copy
4
  of this software and associated documentation files (the "Software"), to deal
js/handlebars/handlebars.js CHANGED
@@ -1,9 +1,9 @@
1
  /**!
2
 
3
  @license
4
- handlebars v4.5.3
5
 
6
- Copyright (C) 2011-2017 by Yehuda Katz
7
 
8
  Permission is hereby granted, free of charge, to any person obtaining a copy
9
  of this software and associated documentation files (the "Software"), to deal
@@ -92,23 +92,23 @@ return /******/ (function(modules) { // webpackBootstrap
92
 
93
  // Compiler imports
94
 
95
- var _handlebarsCompilerAst = __webpack_require__(40);
96
 
97
  var _handlebarsCompilerAst2 = _interopRequireDefault(_handlebarsCompilerAst);
98
 
99
- var _handlebarsCompilerBase = __webpack_require__(41);
100
 
101
- var _handlebarsCompilerCompiler = __webpack_require__(46);
102
 
103
- var _handlebarsCompilerJavascriptCompiler = __webpack_require__(49);
104
 
105
  var _handlebarsCompilerJavascriptCompiler2 = _interopRequireDefault(_handlebarsCompilerJavascriptCompiler);
106
 
107
- var _handlebarsCompilerVisitor = __webpack_require__(44);
108
 
109
  var _handlebarsCompilerVisitor2 = _interopRequireDefault(_handlebarsCompilerVisitor);
110
 
111
- var _handlebarsNoConflict = __webpack_require__(39);
112
 
113
  var _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);
114
 
@@ -178,7 +178,7 @@ return /******/ (function(modules) { // webpackBootstrap
178
  // Each of these augment the Handlebars object. No need to setup here.
179
  // (This is done to easily share code between commonjs and browse envs)
180
 
181
- var _handlebarsSafeString = __webpack_require__(33);
182
 
183
  var _handlebarsSafeString2 = _interopRequireDefault(_handlebarsSafeString);
184
 
@@ -190,11 +190,11 @@ return /******/ (function(modules) { // webpackBootstrap
190
 
191
  var Utils = _interopRequireWildcard(_handlebarsUtils);
192
 
193
- var _handlebarsRuntime = __webpack_require__(34);
194
 
195
  var runtime = _interopRequireWildcard(_handlebarsRuntime);
196
 
197
- var _handlebarsNoConflict = __webpack_require__(39);
198
 
199
  var _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);
200
 
@@ -276,7 +276,9 @@ return /******/ (function(modules) { // webpackBootstrap
276
 
277
  var _logger2 = _interopRequireDefault(_logger);
278
 
279
- var VERSION = '4.5.3';
 
 
280
  exports.VERSION = VERSION;
281
  var COMPILER_REVISION = 8;
282
  exports.COMPILER_REVISION = COMPILER_REVISION;
@@ -352,6 +354,13 @@ return /******/ (function(modules) { // webpackBootstrap
352
  },
353
  unregisterDecorator: function unregisterDecorator(name) {
354
  delete this.decorators[name];
 
 
 
 
 
 
 
355
  }
356
  };
357
 
@@ -375,7 +384,6 @@ return /******/ (function(modules) { // webpackBootstrap
375
  exports.createFrame = createFrame;
376
  exports.blockParams = blockParams;
377
  exports.appendContextPath = appendContextPath;
378
-
379
  var escape = {
380
  '&': '&amp;',
381
  '<': '&lt;',
@@ -499,7 +507,6 @@ return /******/ (function(modules) { // webpackBootstrap
499
  var _Object$defineProperty = __webpack_require__(7)['default'];
500
 
501
  exports.__esModule = true;
502
-
503
  var errorProps = ['description', 'fileName', 'lineNumber', 'endLineNumber', 'message', 'name', 'number', 'stack'];
504
 
505
  function Exception(message, node) {
@@ -1047,7 +1054,11 @@ return /******/ (function(modules) { // webpackBootstrap
1047
  if (arguments.length != 2) {
1048
  throw new _exception2['default']('#unless requires exactly one argument');
1049
  }
1050
- return instance.helpers['if'].call(this, conditional, { fn: options.inverse, inverse: options.fn, hash: options.hash });
 
 
 
 
1051
  });
1052
  };
1053
 
@@ -1090,22 +1101,19 @@ return /******/ (function(modules) { // webpackBootstrap
1090
  'use strict';
1091
 
1092
  exports.__esModule = true;
1093
- var dangerousPropertyRegex = /^(constructor|__defineGetter__|__defineSetter__|__lookupGetter__|__proto__)$/;
1094
-
1095
- exports.dangerousPropertyRegex = dangerousPropertyRegex;
1096
 
1097
  exports['default'] = function (instance) {
1098
- instance.registerHelper('lookup', function (obj, field) {
1099
  if (!obj) {
 
1100
  return obj;
1101
  }
1102
- if (dangerousPropertyRegex.test(String(field)) && !Object.prototype.propertyIsEnumerable.call(obj, field)) {
1103
- return undefined;
1104
- }
1105
- return obj[field];
1106
  });
1107
  };
1108
 
 
 
1109
  /***/ }),
1110
  /* 29 */
1111
  /***/ (function(module, exports, __webpack_require__) {
@@ -1238,8 +1246,8 @@ return /******/ (function(modules) { // webpackBootstrap
1238
 
1239
  if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) {
1240
  var method = logger.methodMap[level];
 
1241
  if (!console[method]) {
1242
- // eslint-disable-line no-console
1243
  method = 'log';
1244
  }
1245
 
@@ -1257,6 +1265,129 @@ return /******/ (function(modules) { // webpackBootstrap
1257
 
1258
  /***/ }),
1259
  /* 33 */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1260
  /***/ (function(module, exports) {
1261
 
1262
  // Build out our basic SafeString type
@@ -1275,12 +1406,14 @@ return /******/ (function(modules) { // webpackBootstrap
1275
  module.exports = exports['default'];
1276
 
1277
  /***/ }),
1278
- /* 34 */
1279
  /***/ (function(module, exports, __webpack_require__) {
1280
 
1281
  'use strict';
1282
 
1283
- var _Object$seal = __webpack_require__(35)['default'];
 
 
1284
 
1285
  var _interopRequireWildcard = __webpack_require__(3)['default'];
1286
 
@@ -1306,6 +1439,10 @@ return /******/ (function(modules) { // webpackBootstrap
1306
 
1307
  var _helpers = __webpack_require__(10);
1308
 
 
 
 
 
1309
  function checkRevision(compilerInfo) {
1310
  var compilerRevision = compilerInfo && compilerInfo[0] || 1,
1311
  currentRevision = _base.COMPILER_REVISION;
@@ -1325,7 +1462,6 @@ return /******/ (function(modules) { // webpackBootstrap
1325
  }
1326
 
1327
  function template(templateSpec, env) {
1328
-
1329
  /* istanbul ignore next */
1330
  if (!env) {
1331
  throw new _exception2['default']('No environment passed to template');
@@ -1352,13 +1488,16 @@ return /******/ (function(modules) { // webpackBootstrap
1352
  }
1353
  partial = env.VM.resolvePartial.call(this, partial, context, options);
1354
 
1355
- var optionsWithHooks = Utils.extend({}, options, { hooks: this.hooks });
 
 
 
1356
 
1357
- var result = env.VM.invokePartial.call(this, partial, context, optionsWithHooks);
1358
 
1359
  if (result == null && env.compile) {
1360
  options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);
1361
- result = options.partials[options.name](context, optionsWithHooks);
1362
  }
1363
  if (result != null) {
1364
  if (options.indent) {
@@ -1382,14 +1521,31 @@ return /******/ (function(modules) { // webpackBootstrap
1382
  var container = {
1383
  strict: function strict(obj, name, loc) {
1384
  if (!obj || !(name in obj)) {
1385
- throw new _exception2['default']('"' + name + '" not defined in ' + obj, { loc: loc });
 
 
1386
  }
1387
  return obj[name];
1388
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1389
  lookup: function lookup(depths, name) {
1390
  var len = depths.length;
1391
  for (var i = 0; i < len; i++) {
1392
- if (depths[i] && depths[i][name] != null) {
 
1393
  return depths[i][name];
1394
  }
1395
  }
@@ -1425,6 +1581,15 @@ return /******/ (function(modules) { // webpackBootstrap
1425
  }
1426
  return value;
1427
  },
 
 
 
 
 
 
 
 
 
1428
  // An empty object to use as replacement for null-contexts
1429
  nullContext: _Object$seal({}),
1430
 
@@ -1454,28 +1619,35 @@ return /******/ (function(modules) { // webpackBootstrap
1454
  function main(context /*, options*/) {
1455
  return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths);
1456
  }
 
1457
  main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams);
1458
  return main(context, options);
1459
  }
 
1460
  ret.isTop = true;
1461
 
1462
  ret._setup = function (options) {
1463
  if (!options.partial) {
1464
- container.helpers = Utils.extend({}, env.helpers, options.helpers);
 
 
1465
 
1466
  if (templateSpec.usePartial) {
1467
- container.partials = Utils.extend({}, env.partials, options.partials);
 
1468
  }
1469
  if (templateSpec.usePartial || templateSpec.useDecorators) {
1470
  container.decorators = Utils.extend({}, env.decorators, options.decorators);
1471
  }
1472
 
1473
  container.hooks = {};
 
1474
 
1475
  var keepHelperInHelpers = options.allowCallsToHelperMissing || templateWasPrecompiledWithCompilerV7;
1476
  _helpers.moveHelperToHooks(container, 'helperMissing', keepHelperInHelpers);
1477
  _helpers.moveHelperToHooks(container, 'blockHelperMissing', keepHelperInHelpers);
1478
  } else {
 
1479
  container.helpers = options.helpers;
1480
  container.partials = options.partials;
1481
  container.decorators = options.decorators;
@@ -1596,25 +1768,39 @@ return /******/ (function(modules) { // webpackBootstrap
1596
  return prog;
1597
  }
1598
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1599
  /***/ }),
1600
- /* 35 */
1601
  /***/ (function(module, exports, __webpack_require__) {
1602
 
1603
- module.exports = { "default": __webpack_require__(36), __esModule: true };
1604
 
1605
  /***/ }),
1606
- /* 36 */
1607
  /***/ (function(module, exports, __webpack_require__) {
1608
 
1609
- __webpack_require__(37);
1610
  module.exports = __webpack_require__(21).Object.seal;
1611
 
1612
  /***/ }),
1613
- /* 37 */
1614
  /***/ (function(module, exports, __webpack_require__) {
1615
 
1616
  // 19.1.2.17 Object.seal(O)
1617
- var isObject = __webpack_require__(38);
1618
 
1619
  __webpack_require__(18)('seal', function($seal){
1620
  return function seal(it){
@@ -1623,7 +1809,7 @@ return /******/ (function(modules) { // webpackBootstrap
1623
  });
1624
 
1625
  /***/ }),
1626
- /* 38 */
1627
  /***/ (function(module, exports) {
1628
 
1629
  module.exports = function(it){
@@ -1631,12 +1817,34 @@ return /******/ (function(modules) { // webpackBootstrap
1631
  };
1632
 
1633
  /***/ }),
1634
- /* 39 */
1635
  /***/ (function(module, exports) {
1636
 
1637
- /* WEBPACK VAR INJECTION */(function(global) {/* global window */
1638
  'use strict';
1639
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1640
  exports.__esModule = true;
1641
 
1642
  exports['default'] = function (Handlebars) {
@@ -1656,7 +1864,7 @@ return /******/ (function(modules) { // webpackBootstrap
1656
  /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
1657
 
1658
  /***/ }),
1659
- /* 40 */
1660
  /***/ (function(module, exports) {
1661
 
1662
  'use strict';
@@ -1691,7 +1899,7 @@ return /******/ (function(modules) { // webpackBootstrap
1691
  module.exports = exports['default'];
1692
 
1693
  /***/ }),
1694
- /* 41 */
1695
  /***/ (function(module, exports, __webpack_require__) {
1696
 
1697
  'use strict';
@@ -1704,15 +1912,15 @@ return /******/ (function(modules) { // webpackBootstrap
1704
  exports.parseWithoutProcessing = parseWithoutProcessing;
1705
  exports.parse = parse;
1706
 
1707
- var _parser = __webpack_require__(42);
1708
 
1709
  var _parser2 = _interopRequireDefault(_parser);
1710
 
1711
- var _whitespaceControl = __webpack_require__(43);
1712
 
1713
  var _whitespaceControl2 = _interopRequireDefault(_whitespaceControl);
1714
 
1715
- var _helpers = __webpack_require__(45);
1716
 
1717
  var Helpers = _interopRequireWildcard(_helpers);
1718
 
@@ -1749,7 +1957,7 @@ return /******/ (function(modules) { // webpackBootstrap
1749
  }
1750
 
1751
  /***/ }),
1752
- /* 42 */
1753
  /***/ (function(module, exports) {
1754
 
1755
  // File ignored in coverage tests via setting in .istanbul.yml
@@ -2490,7 +2698,7 @@ return /******/ (function(modules) { // webpackBootstrap
2490
  module.exports = exports["default"];
2491
 
2492
  /***/ }),
2493
- /* 43 */
2494
  /***/ (function(module, exports, __webpack_require__) {
2495
 
2496
  'use strict';
@@ -2499,7 +2707,7 @@ return /******/ (function(modules) { // webpackBootstrap
2499
 
2500
  exports.__esModule = true;
2501
 
2502
- var _visitor = __webpack_require__(44);
2503
 
2504
  var _visitor2 = _interopRequireDefault(_visitor);
2505
 
@@ -2714,7 +2922,7 @@ return /******/ (function(modules) { // webpackBootstrap
2714
  module.exports = exports['default'];
2715
 
2716
  /***/ }),
2717
- /* 44 */
2718
  /***/ (function(module, exports, __webpack_require__) {
2719
 
2720
  'use strict';
@@ -2857,7 +3065,7 @@ return /******/ (function(modules) { // webpackBootstrap
2857
  module.exports = exports['default'];
2858
 
2859
  /***/ }),
2860
- /* 45 */
2861
  /***/ (function(module, exports, __webpack_require__) {
2862
 
2863
  'use strict';
@@ -3088,14 +3296,14 @@ return /******/ (function(modules) { // webpackBootstrap
3088
  }
3089
 
3090
  /***/ }),
3091
- /* 46 */
3092
  /***/ (function(module, exports, __webpack_require__) {
3093
 
3094
  /* eslint-disable new-cap */
3095
 
3096
  'use strict';
3097
 
3098
- var _Object$create = __webpack_require__(47)['default'];
3099
 
3100
  var _interopRequireDefault = __webpack_require__(1)['default'];
3101
 
@@ -3110,7 +3318,7 @@ return /******/ (function(modules) { // webpackBootstrap
3110
 
3111
  var _utils = __webpack_require__(5);
3112
 
3113
- var _ast = __webpack_require__(40);
3114
 
3115
  var _ast2 = _interopRequireDefault(_ast);
3116
 
@@ -3165,14 +3373,14 @@ return /******/ (function(modules) { // webpackBootstrap
3165
  options.blockParams = options.blockParams || [];
3166
 
3167
  options.knownHelpers = _utils.extend(_Object$create(null), {
3168
- 'helperMissing': true,
3169
- 'blockHelperMissing': true,
3170
- 'each': true,
3171
  'if': true,
3172
- 'unless': true,
3173
  'with': true,
3174
- 'log': true,
3175
- 'lookup': true
3176
  }, options.knownHelpers);
3177
 
3178
  return this.accept(program);
@@ -3439,7 +3647,11 @@ return /******/ (function(modules) { // webpackBootstrap
3439
 
3440
  // HELPERS
3441
  opcode: function opcode(name) {
3442
- this.opcodes.push({ opcode: name, args: slice.call(arguments, 1), loc: this.sourceNode[0].loc });
 
 
 
 
3443
  },
3444
 
3445
  addDepth: function addDepth(depth) {
@@ -3655,22 +3867,7 @@ return /******/ (function(modules) { // webpackBootstrap
3655
  }
3656
 
3657
  /***/ }),
3658
- /* 47 */
3659
- /***/ (function(module, exports, __webpack_require__) {
3660
-
3661
- module.exports = { "default": __webpack_require__(48), __esModule: true };
3662
-
3663
- /***/ }),
3664
- /* 48 */
3665
- /***/ (function(module, exports, __webpack_require__) {
3666
-
3667
- var $ = __webpack_require__(9);
3668
- module.exports = function create(P, D){
3669
- return $.create(P, D);
3670
- };
3671
-
3672
- /***/ }),
3673
- /* 49 */
3674
  /***/ (function(module, exports, __webpack_require__) {
3675
 
3676
  'use strict';
@@ -3689,12 +3886,10 @@ return /******/ (function(modules) { // webpackBootstrap
3689
 
3690
  var _utils = __webpack_require__(5);
3691
 
3692
- var _codeGen = __webpack_require__(50);
3693
 
3694
  var _codeGen2 = _interopRequireDefault(_codeGen);
3695
 
3696
- var _helpersLookup = __webpack_require__(28);
3697
-
3698
  function Literal(value) {
3699
  this.value = value;
3700
  }
@@ -3704,20 +3899,8 @@ return /******/ (function(modules) { // webpackBootstrap
3704
  JavaScriptCompiler.prototype = {
3705
  // PUBLIC API: You can override these methods in a subclass to provide
3706
  // alternative compiled forms for name lookup and buffering semantics
3707
- nameLookup: function nameLookup(parent, name /* , type*/) {
3708
- if (_helpersLookup.dangerousPropertyRegex.test(name)) {
3709
- var isEnumerable = [this.aliasable('container.propertyIsEnumerable'), '.call(', parent, ',', JSON.stringify(name), ')'];
3710
- return ['(', isEnumerable, '?', _actualLookup(), ' : undefined)'];
3711
- }
3712
- return _actualLookup();
3713
-
3714
- function _actualLookup() {
3715
- if (JavaScriptCompiler.isValidJavaScriptVariableName(name)) {
3716
- return [parent, '.', name];
3717
- } else {
3718
- return [parent, '[', JSON.stringify(name), ']'];
3719
- }
3720
- }
3721
  },
3722
  depthedLookup: function depthedLookup(name) {
3723
  return [this.aliasable('container.lookup'), '(depths, "', name, '")'];
@@ -3753,6 +3936,12 @@ return /******/ (function(modules) { // webpackBootstrap
3753
  return this.quotedString('');
3754
  },
3755
  // END PUBLIC API
 
 
 
 
 
 
3756
 
3757
  compile: function compile(environment, options, context, asObject) {
3758
  this.environment = environment;
@@ -3811,7 +4000,7 @@ return /******/ (function(modules) { // webpackBootstrap
3811
  if (!this.decorators.isEmpty()) {
3812
  this.useDecorators = true;
3813
 
3814
- this.decorators.prepend('var decorators = container.decorators;\n');
3815
  this.decorators.push('return fn;');
3816
 
3817
  if (asObject) {
@@ -3924,6 +4113,10 @@ return /******/ (function(modules) { // webpackBootstrap
3924
  }
3925
  });
3926
 
 
 
 
 
3927
  var params = ['container', 'depth0', 'helpers', 'partials', 'data'];
3928
 
3929
  if (this.useBlockParams || this.useDepths) {
@@ -4002,6 +4195,10 @@ return /******/ (function(modules) { // webpackBootstrap
4002
  return this.source.merge();
4003
  },
4004
 
 
 
 
 
4005
  // [blockValue]
4006
  //
4007
  // On stack, before: hash, inverse, program, value
@@ -4804,6 +5001,9 @@ return /******/ (function(modules) { // webpackBootstrap
4804
  }
4805
  })();
4806
 
 
 
 
4807
  JavaScriptCompiler.isValidJavaScriptVariableName = function (name) {
4808
  return !JavaScriptCompiler.RESERVED_WORDS[name] && /^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(name);
4809
  };
@@ -4831,7 +5031,7 @@ return /******/ (function(modules) { // webpackBootstrap
4831
  module.exports = exports['default'];
4832
 
4833
  /***/ }),
4834
- /* 50 */
4835
  /***/ (function(module, exports, __webpack_require__) {
4836
 
4837
  /* global define */
1
  /**!
2
 
3
  @license
4
+ handlebars v4.7.3
5
 
6
+ Copyright (C) 2011-2019 by Yehuda Katz
7
 
8
  Permission is hereby granted, free of charge, to any person obtaining a copy
9
  of this software and associated documentation files (the "Software"), to deal
92
 
93
  // Compiler imports
94
 
95
+ var _handlebarsCompilerAst = __webpack_require__(45);
96
 
97
  var _handlebarsCompilerAst2 = _interopRequireDefault(_handlebarsCompilerAst);
98
 
99
+ var _handlebarsCompilerBase = __webpack_require__(46);
100
 
101
+ var _handlebarsCompilerCompiler = __webpack_require__(51);
102
 
103
+ var _handlebarsCompilerJavascriptCompiler = __webpack_require__(52);
104
 
105
  var _handlebarsCompilerJavascriptCompiler2 = _interopRequireDefault(_handlebarsCompilerJavascriptCompiler);
106
 
107
+ var _handlebarsCompilerVisitor = __webpack_require__(49);
108
 
109
  var _handlebarsCompilerVisitor2 = _interopRequireDefault(_handlebarsCompilerVisitor);
110
 
111
+ var _handlebarsNoConflict = __webpack_require__(44);
112
 
113
  var _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);
114
 
178
  // Each of these augment the Handlebars object. No need to setup here.
179
  // (This is done to easily share code between commonjs and browse envs)
180
 
181
+ var _handlebarsSafeString = __webpack_require__(37);
182
 
183
  var _handlebarsSafeString2 = _interopRequireDefault(_handlebarsSafeString);
184
 
190
 
191
  var Utils = _interopRequireWildcard(_handlebarsUtils);
192
 
193
+ var _handlebarsRuntime = __webpack_require__(38);
194
 
195
  var runtime = _interopRequireWildcard(_handlebarsRuntime);
196
 
197
+ var _handlebarsNoConflict = __webpack_require__(44);
198
 
199
  var _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);
200
 
276
 
277
  var _logger2 = _interopRequireDefault(_logger);
278
 
279
+ var _internalProtoAccess = __webpack_require__(33);
280
+
281
+ var VERSION = '4.7.3';
282
  exports.VERSION = VERSION;
283
  var COMPILER_REVISION = 8;
284
  exports.COMPILER_REVISION = COMPILER_REVISION;
354
  },
355
  unregisterDecorator: function unregisterDecorator(name) {
356
  delete this.decorators[name];
357
+ },
358
+ /**
359
+ * Reset the memory of illegal property accesses that have already been logged.
360
+ * @deprecated should only be used in handlebars test-cases
361
+ */
362
+ resetLoggedPropertyAccesses: function resetLoggedPropertyAccesses() {
363
+ _internalProtoAccess.resetLoggedProperties();
364
  }
365
  };
366
 
384
  exports.createFrame = createFrame;
385
  exports.blockParams = blockParams;
386
  exports.appendContextPath = appendContextPath;
 
387
  var escape = {
388
  '&': '&amp;',
389
  '<': '&lt;',
507
  var _Object$defineProperty = __webpack_require__(7)['default'];
508
 
509
  exports.__esModule = true;
 
510
  var errorProps = ['description', 'fileName', 'lineNumber', 'endLineNumber', 'message', 'name', 'number', 'stack'];
511
 
512
  function Exception(message, node) {
1054
  if (arguments.length != 2) {
1055
  throw new _exception2['default']('#unless requires exactly one argument');
1056
  }
1057
+ return instance.helpers['if'].call(this, conditional, {
1058
+ fn: options.inverse,
1059
+ inverse: options.fn,
1060
+ hash: options.hash
1061
+ });
1062
  });
1063
  };
1064
 
1101
  'use strict';
1102
 
1103
  exports.__esModule = true;
 
 
 
1104
 
1105
  exports['default'] = function (instance) {
1106
+ instance.registerHelper('lookup', function (obj, field, options) {
1107
  if (!obj) {
1108
+ // Note for 5.0: Change to "obj == null" in 5.0
1109
  return obj;
1110
  }
1111
+ return options.lookupProperty(obj, field);
 
 
 
1112
  });
1113
  };
1114
 
1115
+ module.exports = exports['default'];
1116
+
1117
  /***/ }),
1118
  /* 29 */
1119
  /***/ (function(module, exports, __webpack_require__) {
1246
 
1247
  if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) {
1248
  var method = logger.methodMap[level];
1249
+ // eslint-disable-next-line no-console
1250
  if (!console[method]) {
 
1251
  method = 'log';
1252
  }
1253
 
1265
 
1266
  /***/ }),
1267
  /* 33 */
1268
+ /***/ (function(module, exports, __webpack_require__) {
1269
+
1270
+ 'use strict';
1271
+
1272
+ var _Object$create = __webpack_require__(34)['default'];
1273
+
1274
+ var _Object$keys = __webpack_require__(13)['default'];
1275
+
1276
+ var _interopRequireWildcard = __webpack_require__(3)['default'];
1277
+
1278
+ exports.__esModule = true;
1279
+ exports.createProtoAccessControl = createProtoAccessControl;
1280
+ exports.resultIsAllowed = resultIsAllowed;
1281
+ exports.resetLoggedProperties = resetLoggedProperties;
1282
+
1283
+ var _createNewLookupObject = __webpack_require__(36);
1284
+
1285
+ var _logger = __webpack_require__(32);
1286
+
1287
+ var logger = _interopRequireWildcard(_logger);
1288
+
1289
+ var loggedProperties = _Object$create(null);
1290
+
1291
+ function createProtoAccessControl(runtimeOptions) {
1292
+ var defaultMethodWhiteList = _Object$create(null);
1293
+ defaultMethodWhiteList['constructor'] = false;
1294
+ defaultMethodWhiteList['__defineGetter__'] = false;
1295
+ defaultMethodWhiteList['__defineSetter__'] = false;
1296
+ defaultMethodWhiteList['__lookupGetter__'] = false;
1297
+
1298
+ var defaultPropertyWhiteList = _Object$create(null);
1299
+ // eslint-disable-next-line no-proto
1300
+ defaultPropertyWhiteList['__proto__'] = false;
1301
+
1302
+ return {
1303
+ properties: {
1304
+ whitelist: _createNewLookupObject.createNewLookupObject(defaultPropertyWhiteList, runtimeOptions.allowedProtoProperties),
1305
+ defaultValue: runtimeOptions.allowProtoPropertiesByDefault
1306
+ },
1307
+ methods: {
1308
+ whitelist: _createNewLookupObject.createNewLookupObject(defaultMethodWhiteList, runtimeOptions.allowedProtoMethods),
1309
+ defaultValue: runtimeOptions.allowProtoMethodsByDefault
1310
+ }
1311
+ };
1312
+ }
1313
+
1314
+ function resultIsAllowed(result, protoAccessControl, propertyName) {
1315
+ if (typeof result === 'function') {
1316
+ return checkWhiteList(protoAccessControl.methods, propertyName);
1317
+ } else {
1318
+ return checkWhiteList(protoAccessControl.properties, propertyName);
1319
+ }
1320
+ }
1321
+
1322
+ function checkWhiteList(protoAccessControlForType, propertyName) {
1323
+ if (protoAccessControlForType.whitelist[propertyName] !== undefined) {
1324
+ return protoAccessControlForType.whitelist[propertyName] === true;
1325
+ }
1326
+ if (protoAccessControlForType.defaultValue !== undefined) {
1327
+ return protoAccessControlForType.defaultValue;
1328
+ }
1329
+ logUnexpecedPropertyAccessOnce(propertyName);
1330
+ return false;
1331
+ }
1332
+
1333
+ function logUnexpecedPropertyAccessOnce(propertyName) {
1334
+ if (loggedProperties[propertyName] !== true) {
1335
+ loggedProperties[propertyName] = true;
1336
+ logger.log('error', 'Handlebars: Access has been denied to resolve the property "' + propertyName + '" because it is not an "own property" of its parent.\n' + 'You can add a runtime option to disable the check or this warning:\n' + 'See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details');
1337
+ }
1338
+ }
1339
+
1340
+ function resetLoggedProperties() {
1341
+ _Object$keys(loggedProperties).forEach(function (propertyName) {
1342
+ delete loggedProperties[propertyName];
1343
+ });
1344
+ }
1345
+
1346
+ /***/ }),
1347
+ /* 34 */
1348
+ /***/ (function(module, exports, __webpack_require__) {
1349
+
1350
+ module.exports = { "default": __webpack_require__(35), __esModule: true };
1351
+
1352
+ /***/ }),
1353
+ /* 35 */
1354
+ /***/ (function(module, exports, __webpack_require__) {
1355
+
1356
+ var $ = __webpack_require__(9);
1357
+ module.exports = function create(P, D){
1358
+ return $.create(P, D);
1359
+ };
1360
+
1361
+ /***/ }),
1362
+ /* 36 */
1363
+ /***/ (function(module, exports, __webpack_require__) {
1364
+
1365
+ 'use strict';
1366
+
1367
+ var _Object$create = __webpack_require__(34)['default'];
1368
+
1369
+ exports.__esModule = true;
1370
+ exports.createNewLookupObject = createNewLookupObject;
1371
+
1372
+ var _utils = __webpack_require__(5);
1373
+
1374
+ /**
1375
+ * Create a new object with "null"-prototype to avoid truthy results on prototype properties.
1376
+ * The resulting object can be used with "object[property]" to check if a property exists
1377
+ * @param {...object} sources a varargs parameter of source objects that will be merged
1378
+ * @returns {object}
1379
+ */
1380
+
1381
+ function createNewLookupObject() {
1382
+ for (var _len = arguments.length, sources = Array(_len), _key = 0; _key < _len; _key++) {
1383
+ sources[_key] = arguments[_key];
1384
+ }
1385
+
1386
+ return _utils.extend.apply(undefined, [_Object$create(null)].concat(sources));
1387
+ }
1388
+
1389
+ /***/ }),
1390
+ /* 37 */
1391
  /***/ (function(module, exports) {
1392
 
1393
  // Build out our basic SafeString type
1406
  module.exports = exports['default'];
1407
 
1408
  /***/ }),
1409
+ /* 38 */
1410
  /***/ (function(module, exports, __webpack_require__) {
1411
 
1412
  'use strict';
1413
 
1414
+ var _Object$seal = __webpack_require__(39)['default'];
1415
+
1416
+ var _Object$keys = __webpack_require__(13)['default'];
1417
 
1418
  var _interopRequireWildcard = __webpack_require__(3)['default'];
1419
 
1439
 
1440
  var _helpers = __webpack_require__(10);
1441
 
1442
+ var _internalWrapHelper = __webpack_require__(43);
1443
+
1444
+ var _internalProtoAccess = __webpack_require__(33);
1445
+
1446
  function checkRevision(compilerInfo) {
1447
  var compilerRevision = compilerInfo && compilerInfo[0] || 1,
1448
  currentRevision = _base.COMPILER_REVISION;
1462
  }
1463
 
1464
  function template(templateSpec, env) {
 
1465
  /* istanbul ignore next */
1466
  if (!env) {
1467
  throw new _exception2['default']('No environment passed to template');
1488
  }
1489
  partial = env.VM.resolvePartial.call(this, partial, context, options);
1490
 
1491
+ var extendedOptions = Utils.extend({}, options, {
1492
+ hooks: this.hooks,
1493
+ protoAccessControl: this.protoAccessControl
1494
+ });
1495
 
1496
+ var result = env.VM.invokePartial.call(this, partial, context, extendedOptions);
1497
 
1498
  if (result == null && env.compile) {
1499
  options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);
1500
+ result = options.partials[options.name](context, extendedOptions);
1501
  }
1502
  if (result != null) {
1503
  if (options.indent) {
1521
  var container = {
1522
  strict: function strict(obj, name, loc) {
1523
  if (!obj || !(name in obj)) {
1524
+ throw new _exception2['default']('"' + name + '" not defined in ' + obj, {
1525
+ loc: loc
1526
+ });
1527
  }
1528
  return obj[name];
1529
  },
1530
+ lookupProperty: function lookupProperty(parent, propertyName) {
1531
+ var result = parent[propertyName];
1532
+ if (result == null) {
1533
+ return result;
1534
+ }
1535
+ if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
1536
+ return result;
1537
+ }
1538
+
1539
+ if (_internalProtoAccess.resultIsAllowed(result, container.protoAccessControl, propertyName)) {
1540
+ return result;
1541
+ }
1542
+ return undefined;
1543
+ },
1544
  lookup: function lookup(depths, name) {
1545
  var len = depths.length;
1546
  for (var i = 0; i < len; i++) {
1547
+ var result = depths[i] && container.lookupProperty(depths[i], name);
1548
+ if (result != null) {
1549
  return depths[i][name];
1550
  }
1551
  }
1581
  }
1582
  return value;
1583
  },
1584
+ mergeIfNeeded: function mergeIfNeeded(param, common) {
1585
+ var obj = param || common;
1586
+
1587
+ if (param && common && param !== common) {
1588
+ obj = Utils.extend({}, common, param);
1589
+ }
1590
+
1591
+ return obj;
1592
+ },
1593
  // An empty object to use as replacement for null-contexts
1594
  nullContext: _Object$seal({}),
1595
 
1619
  function main(context /*, options*/) {
1620
  return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths);
1621
  }
1622
+
1623
  main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams);
1624
  return main(context, options);
1625
  }
1626
+
1627
  ret.isTop = true;
1628
 
1629
  ret._setup = function (options) {
1630
  if (!options.partial) {
1631
+ var mergedHelpers = Utils.extend({}, env.helpers, options.helpers);
1632
+ wrapHelpersToPassLookupProperty(mergedHelpers, container);
1633
+ container.helpers = mergedHelpers;
1634
 
1635
  if (templateSpec.usePartial) {
1636
+ // Use mergeIfNeeded here to prevent compiling global partials multiple times
1637
+ container.partials = container.mergeIfNeeded(options.partials, env.partials);
1638
  }
1639
  if (templateSpec.usePartial || templateSpec.useDecorators) {
1640
  container.decorators = Utils.extend({}, env.decorators, options.decorators);
1641
  }
1642
 
1643
  container.hooks = {};
1644
+ container.protoAccessControl = _internalProtoAccess.createProtoAccessControl(options);
1645
 
1646
  var keepHelperInHelpers = options.allowCallsToHelperMissing || templateWasPrecompiledWithCompilerV7;
1647
  _helpers.moveHelperToHooks(container, 'helperMissing', keepHelperInHelpers);
1648
  _helpers.moveHelperToHooks(container, 'blockHelperMissing', keepHelperInHelpers);
1649
  } else {
1650
+ container.protoAccessControl = options.protoAccessControl; // internal option
1651
  container.helpers = options.helpers;
1652
  container.partials = options.partials;
1653
  container.decorators = options.decorators;
1768
  return prog;
1769
  }
1770
 
1771
+ function wrapHelpersToPassLookupProperty(mergedHelpers, container) {
1772
+ _Object$keys(mergedHelpers).forEach(function (helperName) {
1773
+ var helper = mergedHelpers[helperName];
1774
+ mergedHelpers[helperName] = passLookupPropertyOption(helper, container);
1775
+ });
1776
+ }
1777
+
1778
+ function passLookupPropertyOption(helper, container) {
1779
+ var lookupProperty = container.lookupProperty;
1780
+ return _internalWrapHelper.wrapHelper(helper, function (options) {
1781
+ return Utils.extend({ lookupProperty: lookupProperty }, options);
1782
+ });
1783
+ }
1784
+
1785
  /***/ }),
1786
+ /* 39 */
1787
  /***/ (function(module, exports, __webpack_require__) {
1788
 
1789
+ module.exports = { "default": __webpack_require__(40), __esModule: true };
1790
 
1791
  /***/ }),
1792
+ /* 40 */
1793
  /***/ (function(module, exports, __webpack_require__) {
1794
 
1795
+ __webpack_require__(41);
1796
  module.exports = __webpack_require__(21).Object.seal;
1797
 
1798
  /***/ }),
1799
+ /* 41 */
1800
  /***/ (function(module, exports, __webpack_require__) {
1801
 
1802
  // 19.1.2.17 Object.seal(O)
1803
+ var isObject = __webpack_require__(42);
1804
 
1805
  __webpack_require__(18)('seal', function($seal){
1806
  return function seal(it){
1809
  });
1810
 
1811
  /***/ }),
1812
+ /* 42 */
1813
  /***/ (function(module, exports) {
1814
 
1815
  module.exports = function(it){
1817
  };
1818
 
1819
  /***/ }),
1820
+ /* 43 */
1821
  /***/ (function(module, exports) {
1822
 
 
1823
  'use strict';
1824
 
1825
+ exports.__esModule = true;
1826
+ exports.wrapHelper = wrapHelper;
1827
+
1828
+ function wrapHelper(helper, transformOptionsFn) {
1829
+ if (typeof helper !== 'function') {
1830
+ // This should not happen, but apparently it does in https://github.com/wycats/handlebars.js/issues/1639
1831
+ // We try to make the wrapper least-invasive by not wrapping it, if the helper is not a function.
1832
+ return helper;
1833
+ }
1834
+ var wrapper = function wrapper() /* dynamic arguments */{
1835
+ var options = arguments[arguments.length - 1];
1836
+ arguments[arguments.length - 1] = transformOptionsFn(options);
1837
+ return helper.apply(this, arguments);
1838
+ };
1839
+ return wrapper;
1840
+ }
1841
+
1842
+ /***/ }),
1843
+ /* 44 */
1844
+ /***/ (function(module, exports) {
1845
+
1846
+ /* WEBPACK VAR INJECTION */(function(global) {'use strict';
1847
+
1848
  exports.__esModule = true;
1849
 
1850
  exports['default'] = function (Handlebars) {
1864
  /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
1865
 
1866
  /***/ }),
1867
+ /* 45 */
1868
  /***/ (function(module, exports) {
1869
 
1870
  'use strict';
1899
  module.exports = exports['default'];
1900
 
1901
  /***/ }),
1902
+ /* 46 */
1903
  /***/ (function(module, exports, __webpack_require__) {
1904
 
1905
  'use strict';
1912
  exports.parseWithoutProcessing = parseWithoutProcessing;
1913
  exports.parse = parse;
1914
 
1915
+ var _parser = __webpack_require__(47);
1916
 
1917
  var _parser2 = _interopRequireDefault(_parser);
1918
 
1919
+ var _whitespaceControl = __webpack_require__(48);
1920
 
1921
  var _whitespaceControl2 = _interopRequireDefault(_whitespaceControl);
1922
 
1923
+ var _helpers = __webpack_require__(50);
1924
 
1925
  var Helpers = _interopRequireWildcard(_helpers);
1926
 
1957
  }
1958
 
1959
  /***/ }),
1960
+ /* 47 */
1961
  /***/ (function(module, exports) {
1962
 
1963
  // File ignored in coverage tests via setting in .istanbul.yml
2698
  module.exports = exports["default"];
2699
 
2700
  /***/ }),
2701
+ /* 48 */
2702
  /***/ (function(module, exports, __webpack_require__) {
2703
 
2704
  'use strict';
2707
 
2708
  exports.__esModule = true;
2709
 
2710
+ var _visitor = __webpack_require__(49);
2711
 
2712
  var _visitor2 = _interopRequireDefault(_visitor);
2713
 
2922
  module.exports = exports['default'];
2923
 
2924
  /***/ }),
2925
+ /* 49 */
2926
  /***/ (function(module, exports, __webpack_require__) {
2927
 
2928
  'use strict';
3065
  module.exports = exports['default'];
3066
 
3067
  /***/ }),
3068
+ /* 50 */
3069
  /***/ (function(module, exports, __webpack_require__) {
3070
 
3071
  'use strict';
3296
  }
3297
 
3298
  /***/ }),
3299
+ /* 51 */
3300
  /***/ (function(module, exports, __webpack_require__) {
3301
 
3302
  /* eslint-disable new-cap */
3303
 
3304
  'use strict';
3305
 
3306
+ var _Object$create = __webpack_require__(34)['default'];
3307
 
3308
  var _interopRequireDefault = __webpack_require__(1)['default'];
3309
 
3318
 
3319
  var _utils = __webpack_require__(5);
3320
 
3321
+ var _ast = __webpack_require__(45);
3322
 
3323
  var _ast2 = _interopRequireDefault(_ast);
3324
 
3373
  options.blockParams = options.blockParams || [];
3374
 
3375
  options.knownHelpers = _utils.extend(_Object$create(null), {
3376
+ helperMissing: true,
3377
+ blockHelperMissing: true,
3378
+ each: true,
3379
  'if': true,
3380
+ unless: true,
3381
  'with': true,
3382
+ log: true,
3383
+ lookup: true
3384
  }, options.knownHelpers);
3385
 
3386
  return this.accept(program);
3647
 
3648
  // HELPERS
3649
  opcode: function opcode(name) {
3650
+ this.opcodes.push({
3651
+ opcode: name,
3652
+ args: slice.call(arguments, 1),
3653
+ loc: this.sourceNode[0].loc
3654
+ });
3655
  },
3656
 
3657
  addDepth: function addDepth(depth) {
3867
  }
3868
 
3869
  /***/ }),
3870
+ /* 52 */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3871
  /***/ (function(module, exports, __webpack_require__) {
3872
 
3873
  'use strict';
3886
 
3887
  var _utils = __webpack_require__(5);
3888
 
3889
+ var _codeGen = __webpack_require__(53);
3890
 
3891
  var _codeGen2 = _interopRequireDefault(_codeGen);
3892
 
 
 
3893
  function Literal(value) {
3894
  this.value = value;
3895
  }
3899
  JavaScriptCompiler.prototype = {
3900
  // PUBLIC API: You can override these methods in a subclass to provide
3901
  // alternative compiled forms for name lookup and buffering semantics
3902
+ nameLookup: function nameLookup(parent, name /*, type */) {
3903
+ return this.internalNameLookup(parent, name);
 
 
 
 
 
 
 
 
 
 
 
 
3904
  },
3905
  depthedLookup: function depthedLookup(name) {
3906
  return [this.aliasable('container.lookup'), '(depths, "', name, '")'];
3936
  return this.quotedString('');
3937
  },
3938
  // END PUBLIC API
3939
+ internalNameLookup: function internalNameLookup(parent, name) {
3940
+ this.lookupPropertyFunctionIsUsed = true;
3941
+ return ['lookupProperty(', parent, ',', JSON.stringify(name), ')'];
3942
+ },
3943
+
3944
+ lookupPropertyFunctionIsUsed: false,
3945
 
3946
  compile: function compile(environment, options, context, asObject) {
3947
  this.environment = environment;
4000
  if (!this.decorators.isEmpty()) {
4001
  this.useDecorators = true;
4002
 
4003
+ this.decorators.prepend(['var decorators = container.decorators, ', this.lookupPropertyFunctionVarDeclaration(), ';\n']);
4004
  this.decorators.push('return fn;');
4005
 
4006
  if (asObject) {
4113
  }
4114
  });
4115
 
4116
+ if (this.lookupPropertyFunctionIsUsed) {
4117
+ varDeclarations += ', ' + this.lookupPropertyFunctionVarDeclaration();
4118
+ }
4119
+
4120
  var params = ['container', 'depth0', 'helpers', 'partials', 'data'];
4121
 
4122
  if (this.useBlockParams || this.useDepths) {
4195
  return this.source.merge();
4196
  },
4197
 
4198
+ lookupPropertyFunctionVarDeclaration: function lookupPropertyFunctionVarDeclaration() {
4199
+ return '\n lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n }\n '.trim();
4200
+ },
4201
+
4202
  // [blockValue]
4203
  //
4204
  // On stack, before: hash, inverse, program, value
5001
  }
5002
  })();
5003
 
5004
+ /**
5005
+ * @deprecated May be removed in the next major version
5006
+ */
5007
  JavaScriptCompiler.isValidJavaScriptVariableName = function (name) {
5008
  return !JavaScriptCompiler.RESERVED_WORDS[name] && /^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(name);
5009
  };
5031
  module.exports = exports['default'];
5032
 
5033
  /***/ }),
5034
+ /* 53 */
5035
  /***/ (function(module, exports, __webpack_require__) {
5036
 
5037
  /* global define */
js/handlebars/handlebars.min.js CHANGED
@@ -1,9 +1,9 @@
1
  /**!
2
 
3
  @license
4
- handlebars v4.5.3
5
 
6
- Copyright (C) 2011-2017 by Yehuda Katz
7
 
8
  Permission is hereby granted, free of charge, to any person obtaining a copy
9
  of this software and associated documentation files (the "Software"), to deal
@@ -24,6 +24,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24
  THE SOFTWARE.
25
 
26
  */
27
- !function(a,b){"object"==typeof exports&&"object"==typeof module?module.exports=b():"function"==typeof define&&define.amd?define([],b):"object"==typeof exports?exports.Handlebars=b():a.Handlebars=b()}(this,function(){return function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={exports:{},id:d,loaded:!1};return a[d].call(e.exports,e,e.exports,b),e.loaded=!0,e.exports}var c={};return b.m=a,b.c=c,b.p="",b(0)}([function(a,b,c){"use strict";function d(){var a=r();return a.compile=function(b,c){return k.compile(b,c,a)},a.precompile=function(b,c){return k.precompile(b,c,a)},a.AST=i["default"],a.Compiler=k.Compiler,a.JavaScriptCompiler=m["default"],a.Parser=j.parser,a.parse=j.parse,a.parseWithoutProcessing=j.parseWithoutProcessing,a}var e=c(1)["default"];b.__esModule=!0;var f=c(2),g=e(f),h=c(40),i=e(h),j=c(41),k=c(46),l=c(49),m=e(l),n=c(44),o=e(n),p=c(39),q=e(p),r=g["default"].create,s=d();s.create=d,q["default"](s),s.Visitor=o["default"],s["default"]=s,b["default"]=s,a.exports=b["default"]},function(a,b){"use strict";b["default"]=function(a){return a&&a.__esModule?a:{"default":a}},b.__esModule=!0},function(a,b,c){"use strict";function d(){var a=new h.HandlebarsEnvironment;return n.extend(a,h),a.SafeString=j["default"],a.Exception=l["default"],a.Utils=n,a.escapeExpression=n.escapeExpression,a.VM=p,a.template=function(b){return p.template(b,a)},a}var e=c(3)["default"],f=c(1)["default"];b.__esModule=!0;var g=c(4),h=e(g),i=c(33),j=f(i),k=c(6),l=f(k),m=c(5),n=e(m),o=c(34),p=e(o),q=c(39),r=f(q),s=d();s.create=d,r["default"](s),s["default"]=s,b["default"]=s,a.exports=b["default"]},function(a,b){"use strict";b["default"]=function(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b},b.__esModule=!0},function(a,b,c){"use strict";function d(a,b,c){this.helpers=a||{},this.partials=b||{},this.decorators=c||{},i.registerDefaultHelpers(this),j.registerDefaultDecorators(this)}var e=c(1)["default"];b.__esModule=!0,b.HandlebarsEnvironment=d;var f=c(5),g=c(6),h=e(g),i=c(10),j=c(30),k=c(32),l=e(k),m="4.5.3";b.VERSION=m;var n=8;b.COMPILER_REVISION=n;var o=7;b.LAST_COMPATIBLE_COMPILER_REVISION=o;var p={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:"== 1.x.x",5:"== 2.0.0-alpha.x",6:">= 2.0.0-beta.1",7:">= 4.0.0 <4.3.0",8:">= 4.3.0"};b.REVISION_CHANGES=p;var q="[object Object]";d.prototype={constructor:d,logger:l["default"],log:l["default"].log,registerHelper:function(a,b){if(f.toString.call(a)===q){if(b)throw new h["default"]("Arg not supported with multiple helpers");f.extend(this.helpers,a)}else this.helpers[a]=b},unregisterHelper:function(a){delete this.helpers[a]},registerPartial:function(a,b){if(f.toString.call(a)===q)f.extend(this.partials,a);else{if("undefined"==typeof b)throw new h["default"]('Attempting to register a partial called "'+a+'" as undefined');this.partials[a]=b}},unregisterPartial:function(a){delete this.partials[a]},registerDecorator:function(a,b){if(f.toString.call(a)===q){if(b)throw new h["default"]("Arg not supported with multiple decorators");f.extend(this.decorators,a)}else this.decorators[a]=b},unregisterDecorator:function(a){delete this.decorators[a]}};var r=l["default"].log;b.log=r,b.createFrame=f.createFrame,b.logger=l["default"]},function(a,b){"use strict";function c(a){return k[a]}function d(a){for(var b=1;b<arguments.length;b++)for(var c in arguments[b])Object.prototype.hasOwnProperty.call(arguments[b],c)&&(a[c]=arguments[b][c]);return a}function e(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1}function f(a){if("string"!=typeof a){if(a&&a.toHTML)return a.toHTML();if(null==a)return"";if(!a)return a+"";a=""+a}return m.test(a)?a.replace(l,c):a}function g(a){return!a&&0!==a||!(!p(a)||0!==a.length)}function h(a){var b=d({},a);return b._parent=a,b}function i(a,b){return a.path=b,a}function j(a,b){return(a?a+".":"")+b}b.__esModule=!0,b.extend=d,b.indexOf=e,b.escapeExpression=f,b.isEmpty=g,b.createFrame=h,b.blockParams=i,b.appendContextPath=j;var k={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;","=":"&#x3D;"},l=/[&<>"'`=]/g,m=/[&<>"'`=]/,n=Object.prototype.toString;b.toString=n;var o=function(a){return"function"==typeof a};o(/x/)&&(b.isFunction=o=function(a){return"function"==typeof a&&"[object Function]"===n.call(a)}),b.isFunction=o;var p=Array.isArray||function(a){return!(!a||"object"!=typeof a)&&"[object Array]"===n.call(a)};b.isArray=p},function(a,b,c){"use strict";function d(a,b){var c=b&&b.loc,g=void 0,h=void 0,i=void 0,j=void 0;c&&(g=c.start.line,h=c.end.line,i=c.start.column,j=c.end.column,a+=" - "+g+":"+i);for(var k=Error.prototype.constructor.call(this,a),l=0;l<f.length;l++)this[f[l]]=k[f[l]];Error.captureStackTrace&&Error.captureStackTrace(this,d);try{c&&(this.lineNumber=g,this.endLineNumber=h,e?(Object.defineProperty(this,"column",{value:i,enumerable:!0}),Object.defineProperty(this,"endColumn",{value:j,enumerable:!0})):(this.column=i,this.endColumn=j))}catch(m){}}var e=c(7)["default"];b.__esModule=!0;var f=["description","fileName","lineNumber","endLineNumber","message","name","number","stack"];d.prototype=new Error,b["default"]=d,a.exports=b["default"]},function(a,b,c){a.exports={"default":c(8),__esModule:!0}},function(a,b,c){var d=c(9);a.exports=function(a,b,c){return d.setDesc(a,b,c)}},function(a,b){var c=Object;a.exports={create:c.create,getProto:c.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:c.getOwnPropertyDescriptor,setDesc:c.defineProperty,setDescs:c.defineProperties,getKeys:c.keys,getNames:c.getOwnPropertyNames,getSymbols:c.getOwnPropertySymbols,each:[].forEach}},function(a,b,c){"use strict";function d(a){h["default"](a),j["default"](a),l["default"](a),n["default"](a),p["default"](a),r["default"](a),t["default"](a)}function e(a,b,c){a.helpers[b]&&(a.hooks[b]=a.helpers[b],c||delete a.helpers[b])}var f=c(1)["default"];b.__esModule=!0,b.registerDefaultHelpers=d,b.moveHelperToHooks=e;var g=c(11),h=f(g),i=c(12),j=f(i),k=c(25),l=f(k),m=c(26),n=f(m),o=c(27),p=f(o),q=c(28),r=f(q),s=c(29),t=f(s)},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5);b["default"]=function(a){a.registerHelper("blockHelperMissing",function(b,c){var e=c.inverse,f=c.fn;if(b===!0)return f(this);if(b===!1||null==b)return e(this);if(d.isArray(b))return b.length>0?(c.ids&&(c.ids=[c.name]),a.helpers.each(b,c)):e(this);if(c.data&&c.ids){var g=d.createFrame(c.data);g.contextPath=d.appendContextPath(c.data.contextPath,c.name),c={data:g}}return f(b,c)})},a.exports=b["default"]},function(a,b,c){(function(d){"use strict";var e=c(13)["default"],f=c(1)["default"];b.__esModule=!0;var g=c(5),h=c(6),i=f(h);b["default"]=function(a){a.registerHelper("each",function(a,b){function c(b,c,d){l&&(l.key=b,l.index=c,l.first=0===c,l.last=!!d,m&&(l.contextPath=m+b)),k+=f(a[b],{data:l,blockParams:g.blockParams([a[b],b],[m+b,null])})}if(!b)throw new i["default"]("Must pass iterator to #each");var f=b.fn,h=b.inverse,j=0,k="",l=void 0,m=void 0;if(b.data&&b.ids&&(m=g.appendContextPath(b.data.contextPath,b.ids[0])+"."),g.isFunction(a)&&(a=a.call(this)),b.data&&(l=g.createFrame(b.data)),a&&"object"==typeof a)if(g.isArray(a))for(var n=a.length;j<n;j++)j in a&&c(j,j,j===a.length-1);else if(d.Symbol&&a[d.Symbol.iterator]){for(var o=[],p=a[d.Symbol.iterator](),q=p.next();!q.done;q=p.next())o.push(q.value);a=o;for(var n=a.length;j<n;j++)c(j,j,j===a.length-1)}else!function(){var b=void 0;e(a).forEach(function(a){void 0!==b&&c(b,j-1),b=a,j++}),void 0!==b&&c(b,j-1,!0)}();return 0===j&&(k=h(this)),k})},a.exports=b["default"]}).call(b,function(){return this}())},function(a,b,c){a.exports={"default":c(14),__esModule:!0}},function(a,b,c){c(15),a.exports=c(21).Object.keys},function(a,b,c){var d=c(16);c(18)("keys",function(a){return function(b){return a(d(b))}})},function(a,b,c){var d=c(17);a.exports=function(a){return Object(d(a))}},function(a,b){a.exports=function(a){if(void 0==a)throw TypeError("Can't call method on "+a);return a}},function(a,b,c){var d=c(19),e=c(21),f=c(24);a.exports=function(a,b){var c=(e.Object||{})[a]||Object[a],g={};g[a]=b(c),d(d.S+d.F*f(function(){c(1)}),"Object",g)}},function(a,b,c){var d=c(20),e=c(21),f=c(22),g="prototype",h=function(a,b,c){var i,j,k,l=a&h.F,m=a&h.G,n=a&h.S,o=a&h.P,p=a&h.B,q=a&h.W,r=m?e:e[b]||(e[b]={}),s=m?d:n?d[b]:(d[b]||{})[g];m&&(c=b);for(i in c)j=!l&&s&&i in s,j&&i in r||(k=j?s[i]:c[i],r[i]=m&&"function"!=typeof s[i]?c[i]:p&&j?f(k,d):q&&s[i]==k?function(a){var b=function(b){return this instanceof a?new a(b):a(b)};return b[g]=a[g],b}(k):o&&"function"==typeof k?f(Function.call,k):k,o&&((r[g]||(r[g]={}))[i]=k))};h.F=1,h.G=2,h.S=4,h.P=8,h.B=16,h.W=32,a.exports=h},function(a,b){var c=a.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=c)},function(a,b){var c=a.exports={version:"1.2.6"};"number"==typeof __e&&(__e=c)},function(a,b,c){var d=c(23);a.exports=function(a,b,c){if(d(a),void 0===b)return a;switch(c){case 1:return function(c){return a.call(b,c)};case 2:return function(c,d){return a.call(b,c,d)};case 3:return function(c,d,e){return a.call(b,c,d,e)}}return function(){return a.apply(b,arguments)}}},function(a,b){a.exports=function(a){if("function"!=typeof a)throw TypeError(a+" is not a function!");return a}},function(a,b){a.exports=function(a){try{return!!a()}catch(b){return!0}}},function(a,b,c){"use strict";var d=c(1)["default"];b.__esModule=!0;var e=c(6),f=d(e);b["default"]=function(a){a.registerHelper("helperMissing",function(){if(1!==arguments.length)throw new f["default"]('Missing helper: "'+arguments[arguments.length-1].name+'"')})},a.exports=b["default"]},function(a,b,c){"use strict";var d=c(1)["default"];b.__esModule=!0;var e=c(5),f=c(6),g=d(f);b["default"]=function(a){a.registerHelper("if",function(a,b){if(2!=arguments.length)throw new g["default"]("#if requires exactly one argument");return e.isFunction(a)&&(a=a.call(this)),!b.hash.includeZero&&!a||e.isEmpty(a)?b.inverse(this):b.fn(this)}),a.registerHelper("unless",function(b,c){if(2!=arguments.length)throw new g["default"]("#unless requires exactly one argument");return a.helpers["if"].call(this,b,{fn:c.inverse,inverse:c.fn,hash:c.hash})})},a.exports=b["default"]},function(a,b){"use strict";b.__esModule=!0,b["default"]=function(a){a.registerHelper("log",function(){for(var b=[void 0],c=arguments[arguments.length-1],d=0;d<arguments.length-1;d++)b.push(arguments[d]);var e=1;null!=c.hash.level?e=c.hash.level:c.data&&null!=c.data.level&&(e=c.data.level),b[0]=e,a.log.apply(a,b)})},a.exports=b["default"]},function(a,b){"use strict";b.__esModule=!0;var c=/^(constructor|__defineGetter__|__defineSetter__|__lookupGetter__|__proto__)$/;b.dangerousPropertyRegex=c,b["default"]=function(a){a.registerHelper("lookup",function(a,b){if(!a)return a;if(!c.test(String(b))||Object.prototype.propertyIsEnumerable.call(a,b))return a[b]})}},function(a,b,c){"use strict";var d=c(1)["default"];b.__esModule=!0;var e=c(5),f=c(6),g=d(f);b["default"]=function(a){a.registerHelper("with",function(a,b){if(2!=arguments.length)throw new g["default"]("#with requires exactly one argument");e.isFunction(a)&&(a=a.call(this));var c=b.fn;if(e.isEmpty(a))return b.inverse(this);var d=b.data;return b.data&&b.ids&&(d=e.createFrame(b.data),d.contextPath=e.appendContextPath(b.data.contextPath,b.ids[0])),c(a,{data:d,blockParams:e.blockParams([a],[d&&d.contextPath])})})},a.exports=b["default"]},function(a,b,c){"use strict";function d(a){g["default"](a)}var e=c(1)["default"];b.__esModule=!0,b.registerDefaultDecorators=d;var f=c(31),g=e(f)},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5);b["default"]=function(a){a.registerDecorator("inline",function(a,b,c,e){var f=a;return b.partials||(b.partials={},f=function(e,f){var g=c.partials;c.partials=d.extend({},g,b.partials);var h=a(e,f);return c.partials=g,h}),b.partials[e.args[0]]=e.fn,f})},a.exports=b["default"]},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5),e={methodMap:["debug","info","warn","error"],level:"info",lookupLevel:function(a){if("string"==typeof a){var b=d.indexOf(e.methodMap,a.toLowerCase());a=b>=0?b:parseInt(a,10)}return a},log:function(a){if(a=e.lookupLevel(a),"undefined"!=typeof console&&e.lookupLevel(e.level)<=a){var b=e.methodMap[a];console[b]||(b="log");for(var c=arguments.length,d=Array(c>1?c-1:0),f=1;f<c;f++)d[f-1]=arguments[f];console[b].apply(console,d)}}};b["default"]=e,a.exports=b["default"]},function(a,b){"use strict";function c(a){this.string=a}b.__esModule=!0,c.prototype.toString=c.prototype.toHTML=function(){return""+this.string},b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(a){var b=a&&a[0]||1,c=s.COMPILER_REVISION;if(!(b>=s.LAST_COMPATIBLE_COMPILER_REVISION&&b<=s.COMPILER_REVISION)){if(b<s.LAST_COMPATIBLE_COMPILER_REVISION){var d=s.REVISION_CHANGES[c],e=s.REVISION_CHANGES[b];throw new r["default"]("Template was precompiled with an older version of Handlebars than the current runtime. Please update your precompiler to a newer version ("+d+") or downgrade your runtime to an older version ("+e+").")}throw new r["default"]("Template was precompiled with a newer version of Handlebars than the current runtime. Please update your runtime to a newer version ("+a[1]+").")}}function e(a,b){function c(c,d,e){e.hash&&(d=p.extend({},d,e.hash),e.ids&&(e.ids[0]=!0)),c=b.VM.resolvePartial.call(this,c,d,e);var f=p.extend({},e,{hooks:this.hooks}),g=b.VM.invokePartial.call(this,c,d,f);if(null==g&&b.compile&&(e.partials[e.name]=b.compile(c,a.compilerOptions,b),g=e.partials[e.name](d,f)),null!=g){if(e.indent){for(var h=g.split("\n"),i=0,j=h.length;i<j&&(h[i]||i+1!==j);i++)h[i]=e.indent+h[i];g=h.join("\n")}return g}throw new r["default"]("The partial "+e.name+" could not be compiled when running in runtime-only mode")}function d(b){function c(b){return""+a.main(g,b,g.helpers,g.partials,f,i,h)}var e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],f=e.data;d._setup(e),!e.partial&&a.useData&&(f=j(b,f));var h=void 0,i=a.useBlockParams?[]:void 0;return a.useDepths&&(h=e.depths?b!=e.depths[0]?[b].concat(e.depths):e.depths:[b]),(c=k(a.main,c,g,e.depths||[],f,i))(b,e)}if(!b)throw new r["default"]("No environment passed to template");if(!a||!a.main)throw new r["default"]("Unknown template object: "+typeof a);a.main.decorator=a.main_d,b.VM.checkRevision(a.compiler);var e=a.compiler&&7===a.compiler[0],g={strict:function(a,b,c){if(!(a&&b in a))throw new r["default"]('"'+b+'" not defined in '+a,{loc:c});return a[b]},lookup:function(a,b){for(var c=a.length,d=0;d<c;d++)if(a[d]&&null!=a[d][b])return a[d][b]},lambda:function(a,b){return"function"==typeof a?a.call(b):a},escapeExpression:p.escapeExpression,invokePartial:c,fn:function(b){var c=a[b];return c.decorator=a[b+"_d"],c},programs:[],program:function(a,b,c,d,e){var g=this.programs[a],h=this.fn(a);return b||e||d||c?g=f(this,a,h,b,c,d,e):g||(g=this.programs[a]=f(this,a,h)),g},data:function(a,b){for(;a&&b--;)a=a._parent;return a},nullContext:l({}),noop:b.VM.noop,compilerInfo:a.compiler};return d.isTop=!0,d._setup=function(c){if(c.partial)g.helpers=c.helpers,g.partials=c.partials,g.decorators=c.decorators,g.hooks=c.hooks;else{g.helpers=p.extend({},b.helpers,c.helpers),a.usePartial&&(g.partials=p.extend({},b.partials,c.partials)),(a.usePartial||a.useDecorators)&&(g.decorators=p.extend({},b.decorators,c.decorators)),g.hooks={};var d=c.allowCallsToHelperMissing||e;t.moveHelperToHooks(g,"helperMissing",d),t.moveHelperToHooks(g,"blockHelperMissing",d)}},d._child=function(b,c,d,e){if(a.useBlockParams&&!d)throw new r["default"]("must pass block params");if(a.useDepths&&!e)throw new r["default"]("must pass parent depths");return f(g,b,a[b],c,0,d,e)},d}function f(a,b,c,d,e,f,g){function h(b){var e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],h=g;return!g||b==g[0]||b===a.nullContext&&null===g[0]||(h=[b].concat(g)),c(a,b,a.helpers,a.partials,e.data||d,f&&[e.blockParams].concat(f),h)}return h=k(c,h,a,g,d,f),h.program=b,h.depth=g?g.length:0,h.blockParams=e||0,h}function g(a,b,c){return a?a.call||c.name||(c.name=a,a=c.partials[a]):a="@partial-block"===c.name?c.data["partial-block"]:c.partials[c.name],a}function h(a,b,c){var d=c.data&&c.data["partial-block"];c.partial=!0,c.ids&&(c.data.contextPath=c.ids[0]||c.data.contextPath);var e=void 0;if(c.fn&&c.fn!==i&&!function(){c.data=s.createFrame(c.data);var a=c.fn;e=c.data["partial-block"]=function(b){var c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];return c.data=s.createFrame(c.data),c.data["partial-block"]=d,a(b,c)},a.partials&&(c.partials=p.extend({},c.partials,a.partials))}(),void 0===a&&e&&(a=e),void 0===a)throw new r["default"]("The partial "+c.name+" could not be found");if(a instanceof Function)return a(b,c)}function i(){return""}function j(a,b){return b&&"root"in b||(b=b?s.createFrame(b):{},b.root=a),b}function k(a,b,c,d,e,f){if(a.decorator){var g={};b=a.decorator(b,g,c,d&&d[0],e,f,d),p.extend(b,g)}return b}var l=c(35)["default"],m=c(3)["default"],n=c(1)["default"];b.__esModule=!0,b.checkRevision=d,b.template=e,b.wrapProgram=f,b.resolvePartial=g,b.invokePartial=h,b.noop=i;var o=c(5),p=m(o),q=c(6),r=n(q),s=c(4),t=c(10)},function(a,b,c){a.exports={"default":c(36),__esModule:!0}},function(a,b,c){c(37),a.exports=c(21).Object.seal},function(a,b,c){var d=c(38);c(18)("seal",function(a){return function(b){return a&&d(b)?a(b):b}})},function(a,b){a.exports=function(a){return"object"==typeof a?null!==a:"function"==typeof a}},function(a,b){(function(c){"use strict";b.__esModule=!0,b["default"]=function(a){var b="undefined"!=typeof c?c:window,d=b.Handlebars;a.noConflict=function(){return b.Handlebars===a&&(b.Handlebars=d),a}},a.exports=b["default"]}).call(b,function(){return this}())},function(a,b){"use strict";b.__esModule=!0;var c={helpers:{helperExpression:function(a){return"SubExpression"===a.type||("MustacheStatement"===a.type||"BlockStatement"===a.type)&&!!(a.params&&a.params.length||a.hash)},scopedId:function(a){return/^\.|this\b/.test(a.original)},simpleId:function(a){return 1===a.parts.length&&!c.helpers.scopedId(a)&&!a.depth}}};b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(a,b){if("Program"===a.type)return a;i["default"].yy=o,o.locInfo=function(a){return new o.SourceLocation(b&&b.srcName,a)};var c=i["default"].parse(a);return c}function e(a,b){var c=d(a,b),e=new k["default"](b);return e.accept(c)}var f=c(1)["default"],g=c(3)["default"];b.__esModule=!0,b.parseWithoutProcessing=d,b.parse=e;var h=c(42),i=f(h),j=c(43),k=f(j),l=c(45),m=g(l),n=c(5);b.parser=i["default"];var o={};n.extend(o,m)},function(a,b){"use strict";b.__esModule=!0;var c=function(){function a(){this.yy={}}var b={trace:function(){},yy:{},symbols_:{error:2,root:3,program:4,EOF:5,program_repetition0:6,statement:7,mustache:8,block:9,rawBlock:10,partial:11,partialBlock:12,content:13,COMMENT:14,CONTENT:15,openRawBlock:16,rawBlock_repetition0:17,END_RAW_BLOCK:18,OPEN_RAW_BLOCK:19,helperName:20,openRawBlock_repetition0:21,openRawBlock_option0:22,CLOSE_RAW_BLOCK:23,openBlock:24,block_option0:25,closeBlock:26,openInverse:27,block_option1:28,OPEN_BLOCK:29,openBlock_repetition0:30,openBlock_option0:31,openBlock_option1:32,CLOSE:33,OPEN_INVERSE:34,openInverse_repetition0:35,openInverse_option0:36,openInverse_option1:37,openInverseChain:38,OPEN_INVERSE_CHAIN:39,openInverseChain_repetition0:40,openInverseChain_option0:41,openInverseChain_option1:42,inverseAndProgram:43,INVERSE:44,inverseChain:45,inverseChain_option0:46,OPEN_ENDBLOCK:47,OPEN:48,mustache_repetition0:49,mustache_option0:50,OPEN_UNESCAPED:51,mustache_repetition1:52,mustache_option1:53,CLOSE_UNESCAPED:54,OPEN_PARTIAL:55,partialName:56,partial_repetition0:57,partial_option0:58,openPartialBlock:59,OPEN_PARTIAL_BLOCK:60,openPartialBlock_repetition0:61,openPartialBlock_option0:62,param:63,sexpr:64,OPEN_SEXPR:65,sexpr_repetition0:66,sexpr_option0:67,CLOSE_SEXPR:68,hash:69,hash_repetition_plus0:70,hashSegment:71,ID:72,EQUALS:73,blockParams:74,OPEN_BLOCK_PARAMS:75,blockParams_repetition_plus0:76,CLOSE_BLOCK_PARAMS:77,path:78,dataName:79,STRING:80,NUMBER:81,BOOLEAN:82,UNDEFINED:83,NULL:84,DATA:85,pathSegments:86,SEP:87,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",14:"COMMENT",15:"CONTENT",18:"END_RAW_BLOCK",19:"OPEN_RAW_BLOCK",23:"CLOSE_RAW_BLOCK",29:"OPEN_BLOCK",33:"CLOSE",34:"OPEN_INVERSE",39:"OPEN_INVERSE_CHAIN",44:"INVERSE",47:"OPEN_ENDBLOCK",48:"OPEN",51:"OPEN_UNESCAPED",54:"CLOSE_UNESCAPED",55:"OPEN_PARTIAL",60:"OPEN_PARTIAL_BLOCK",65:"OPEN_SEXPR",68:"CLOSE_SEXPR",72:"ID",73:"EQUALS",75:"OPEN_BLOCK_PARAMS",77:"CLOSE_BLOCK_PARAMS",80:"STRING",81:"NUMBER",82:"BOOLEAN",83:"UNDEFINED",84:"NULL",85:"DATA",87:"SEP"},productions_:[0,[3,2],[4,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[13,1],[10,3],[16,5],[9,4],[9,4],[24,6],[27,6],[38,6],[43,2],[45,3],[45,1],[26,3],[8,5],[8,5],[11,5],[12,3],[59,5],[63,1],[63,1],[64,5],[69,1],[71,3],[74,3],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[56,1],[56,1],[79,2],[78,1],[86,3],[86,1],[6,0],[6,2],[17,0],[17,2],[21,0],[21,2],[22,0],[22,1],[25,0],[25,1],[28,0],[28,1],[30,0],[30,2],[31,0],[31,1],[32,0],[32,1],[35,0],[35,2],[36,0],[36,1],[37,0],[37,1],[40,0],[40,2],[41,0],[41,1],[42,0],[42,1],[46,0],[46,1],[49,0],[49,2],[50,0],[50,1],[52,0],[52,2],[53,0],[53,1],[57,0],[57,2],[58,0],[58,1],[61,0],[61,2],[62,0],[62,1],[66,0],[66,2],[67,0],[67,1],[70,1],[70,2],[76,1],[76,2]],performAction:function(a,b,c,d,e,f,g){var h=f.length-1;switch(e){case 1:return f[h-1];case 2:this.$=d.prepareProgram(f[h]);break;case 3:this.$=f[h];break;case 4:this.$=f[h];break;case 5:this.$=f[h];break;case 6:this.$=f[h];break;case 7:this.$=f[h];break;case 8:this.$=f[h];break;case 9:this.$={type:"CommentStatement",value:d.stripComment(f[h]),strip:d.stripFlags(f[h],f[h]),loc:d.locInfo(this._$)};break;case 10:this.$={type:"ContentStatement",original:f[h],value:f[h],loc:d.locInfo(this._$)};break;case 11:this.$=d.prepareRawBlock(f[h-2],f[h-1],f[h],this._$);break;case 12:this.$={path:f[h-3],params:f[h-2],hash:f[h-1]};break;case 13:this.$=d.prepareBlock(f[h-3],f[h-2],f[h-1],f[h],!1,this._$);break;case 14:this.$=d.prepareBlock(f[h-3],f[h-2],f[h-1],f[h],!0,this._$);break;case 15:this.$={open:f[h-5],path:f[h-4],params:f[h-3],hash:f[h-2],blockParams:f[h-1],strip:d.stripFlags(f[h-5],f[h])};break;case 16:this.$={path:f[h-4],params:f[h-3],hash:f[h-2],blockParams:f[h-1],strip:d.stripFlags(f[h-5],f[h])};break;case 17:this.$={path:f[h-4],params:f[h-3],hash:f[h-2],blockParams:f[h-1],strip:d.stripFlags(f[h-5],f[h])};break;case 18:this.$={strip:d.stripFlags(f[h-1],f[h-1]),program:f[h]};break;case 19:var i=d.prepareBlock(f[h-2],f[h-1],f[h],f[h],!1,this._$),j=d.prepareProgram([i],f[h-1].loc);j.chained=!0,this.$={strip:f[h-2].strip,program:j,chain:!0};break;case 20:this.$=f[h];break;case 21:this.$={path:f[h-1],strip:d.stripFlags(f[h-2],f[h])};break;case 22:this.$=d.prepareMustache(f[h-3],f[h-2],f[h-1],f[h-4],d.stripFlags(f[h-4],f[h]),this._$);break;case 23:this.$=d.prepareMustache(f[h-3],f[h-2],f[h-1],f[h-4],d.stripFlags(f[h-4],f[h]),this._$);break;case 24:this.$={type:"PartialStatement",name:f[h-3],params:f[h-2],hash:f[h-1],indent:"",strip:d.stripFlags(f[h-4],f[h]),loc:d.locInfo(this._$)};break;case 25:this.$=d.preparePartialBlock(f[h-2],f[h-1],f[h],this._$);break;case 26:this.$={path:f[h-3],params:f[h-2],hash:f[h-1],strip:d.stripFlags(f[h-4],f[h])};break;case 27:this.$=f[h];break;case 28:this.$=f[h];break;case 29:this.$={type:"SubExpression",path:f[h-3],params:f[h-2],hash:f[h-1],loc:d.locInfo(this._$)};break;case 30:this.$={type:"Hash",pairs:f[h],loc:d.locInfo(this._$)};break;case 31:this.$={type:"HashPair",key:d.id(f[h-2]),value:f[h],loc:d.locInfo(this._$)};break;case 32:this.$=d.id(f[h-1]);break;case 33:this.$=f[h];break;case 34:this.$=f[h];break;case 35:this.$={type:"StringLiteral",value:f[h],original:f[h],loc:d.locInfo(this._$)};break;case 36:this.$={type:"NumberLiteral",value:Number(f[h]),original:Number(f[h]),loc:d.locInfo(this._$)};break;case 37:this.$={type:"BooleanLiteral",value:"true"===f[h],original:"true"===f[h],loc:d.locInfo(this._$)};break;case 38:this.$={type:"UndefinedLiteral",original:void 0,value:void 0,loc:d.locInfo(this._$)};break;case 39:this.$={type:"NullLiteral",original:null,value:null,loc:d.locInfo(this._$)};break;case 40:this.$=f[h];break;case 41:this.$=f[h];break;case 42:this.$=d.preparePath(!0,f[h],this._$);break;case 43:this.$=d.preparePath(!1,f[h],this._$);break;case 44:f[h-2].push({part:d.id(f[h]),original:f[h],separator:f[h-1]}),this.$=f[h-2];break;case 45:this.$=[{part:d.id(f[h]),original:f[h]}];break;case 46:this.$=[];break;case 47:f[h-1].push(f[h]);break;case 48:this.$=[];break;case 49:f[h-1].push(f[h]);break;case 50:this.$=[];break;case 51:f[h-1].push(f[h]);break;case 58:this.$=[];break;case 59:f[h-1].push(f[h]);break;case 64:this.$=[];break;case 65:f[h-1].push(f[h]);break;case 70:this.$=[];break;case 71:f[h-1].push(f[h]);break;case 78:this.$=[];break;case 79:f[h-1].push(f[h]);break;case 82:this.$=[];break;case 83:f[h-1].push(f[h]);break;case 86:this.$=[];break;case 87:f[h-1].push(f[h]);break;case 90:this.$=[];break;case 91:f[h-1].push(f[h]);break;case 94:this.$=[];break;case 95:f[h-1].push(f[h]);break;case 98:this.$=[f[h]];break;case 99:f[h-1].push(f[h]);break;case 100:this.$=[f[h]];break;case 101:f[h-1].push(f[h])}},table:[{3:1,4:2,5:[2,46],6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{1:[3]},{5:[1,4]},{5:[2,2],7:5,8:6,9:7,10:8,11:9,12:10,13:11,14:[1,12],15:[1,20],16:17,19:[1,23],24:15,27:16,29:[1,21],34:[1,22],39:[2,2],44:[2,2],47:[2,2],48:[1,13],51:[1,14],55:[1,18],59:19,60:[1,24]},{1:[2,1]},{5:[2,47],14:[2,47],15:[2,47],19:[2,47],29:[2,47],34:[2,47],39:[2,47],44:[2,47],47:[2,47],48:[2,47],51:[2,47],55:[2,47],60:[2,47]},{5:[2,3],14:[2,3],15:[2,3],19:[2,3],29:[2,3],34:[2,3],39:[2,3],44:[2,3],47:[2,3],48:[2,3],51:[2,3],55:[2,3],60:[2,3]},{5:[2,4],14:[2,4],15:[2,4],19:[2,4],29:[2,4],34:[2,4],39:[2,4],44:[2,4],47:[2,4],48:[2,4],51:[2,4],55:[2,4],60:[2,4]},{5:[2,5],14:[2,5],15:[2,5],19:[2,5],29:[2,5],34:[2,5],39:[2,5],44:[2,5],47:[2,5],48:[2,5],51:[2,5],55:[2,5],60:[2,5]},{5:[2,6],14:[2,6],15:[2,6],19:[2,6],29:[2,6],34:[2,6],39:[2,6],44:[2,6],47:[2,6],48:[2,6],51:[2,6],55:[2,6],60:[2,6]},{5:[2,7],14:[2,7],15:[2,7],19:[2,7],29:[2,7],34:[2,7],39:[2,7],44:[2,7],47:[2,7],48:[2,7],51:[2,7],55:[2,7],60:[2,7]},{5:[2,8],14:[2,8],15:[2,8],19:[2,8],29:[2,8],34:[2,8],39:[2,8],44:[2,8],47:[2,8],48:[2,8],51:[2,8],55:[2,8],60:[2,8]},{5:[2,9],14:[2,9],15:[2,9],19:[2,9],29:[2,9],34:[2,9],39:[2,9],44:[2,9],47:[2,9],48:[2,9],51:[2,9],55:[2,9],60:[2,9]},{20:25,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:36,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:37,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],39:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{4:38,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{15:[2,48],17:39,18:[2,48]},{20:41,56:40,64:42,65:[1,43],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:44,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{5:[2,10],14:[2,10],15:[2,10],18:[2,10],19:[2,10],29:[2,10],34:[2,10],39:[2,10],44:[2,10],47:[2,10],48:[2,10],51:[2,10],55:[2,10],60:[2,10]},{20:45,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:46,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:47,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:41,56:48,64:42,65:[1,43],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[2,78],49:49,65:[2,78],72:[2,78],80:[2,78],81:[2,78],82:[2,78],83:[2,78],84:[2,78],85:[2,78]},{23:[2,33],33:[2,33],54:[2,33],65:[2,33],68:[2,33],72:[2,33],75:[2,33],80:[2,33],81:[2,33],82:[2,33],83:[2,33],84:[2,33],85:[2,33]},{23:[2,34],33:[2,34],54:[2,34],65:[2,34],68:[2,34],72:[2,34],75:[2,34],80:[2,34],81:[2,34],82:[2,34],83:[2,34],84:[2,34],85:[2,34]},{23:[2,35],33:[2,35],54:[2,35],65:[2,35],68:[2,35],72:[2,35],75:[2,35],80:[2,35],81:[2,35],82:[2,35],83:[2,35],84:[2,35],85:[2,35]},{23:[2,36],33:[2,36],54:[2,36],65:[2,36],68:[2,36],72:[2,36],75:[2,36],80:[2,36],81:[2,36],82:[2,36],83:[2,36],84:[2,36],85:[2,36]},{23:[2,37],33:[2,37],54:[2,37],65:[2,37],68:[2,37],72:[2,37],75:[2,37],80:[2,37],81:[2,37],82:[2,37],83:[2,37],84:[2,37],85:[2,37]},{23:[2,38],33:[2,38],54:[2,38],65:[2,38],68:[2,38],72:[2,38],75:[2,38],80:[2,38],81:[2,38],82:[2,38],83:[2,38],84:[2,38],85:[2,38]},{23:[2,39],33:[2,39],54:[2,39],65:[2,39],68:[2,39],72:[2,39],75:[2,39],80:[2,39],81:[2,39],82:[2,39],83:[2,39],84:[2,39],85:[2,39]},{23:[2,43],33:[2,43],54:[2,43],65:[2,43],68:[2,43],72:[2,43],75:[2,43],80:[2,43],81:[2,43],82:[2,43],83:[2,43],84:[2,43],85:[2,43],87:[1,50]},{72:[1,35],86:51},{23:[2,45],33:[2,45],54:[2,45],65:[2,45],68:[2,45],72:[2,45],75:[2,45],80:[2,45],81:[2,45],82:[2,45],83:[2,45],84:[2,45],85:[2,45],87:[2,45]},{52:52,54:[2,82],65:[2,82],72:[2,82],80:[2,82],81:[2,82],82:[2,82],83:[2,82],84:[2,82],85:[2,82]},{25:53,38:55,39:[1,57],43:56,44:[1,58],45:54,47:[2,54]},{28:59,43:60,44:[1,58],47:[2,56]},{13:62,15:[1,20],18:[1,61]},{33:[2,86],57:63,65:[2,86],72:[2,86],80:[2,86],81:[2,86],82:[2,86],83:[2,86],84:[2,86],85:[2,86]},{33:[2,40],65:[2,40],72:[2,40],80:[2,40],81:[2,40],82:[2,40],83:[2,40],84:[2,40],85:[2,40]},{33:[2,41],65:[2,41],72:[2,41],80:[2,41],81:[2,41],82:[2,41],83:[2,41],84:[2,41],85:[2,41]},{20:64,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{26:65,47:[1,66]},{30:67,33:[2,58],65:[2,58],72:[2,58],75:[2,58],80:[2,58],81:[2,58],82:[2,58],83:[2,58],84:[2,58],85:[2,58]},{33:[2,64],35:68,65:[2,64],72:[2,64],75:[2,64],80:[2,64],81:[2,64],82:[2,64],83:[2,64],84:[2,64],85:[2,64]},{21:69,23:[2,50],65:[2,50],72:[2,50],80:[2,50],81:[2,50],82:[2,50],83:[2,50],84:[2,50],85:[2,50]},{33:[2,90],61:70,65:[2,90],72:[2,90],80:[2,90],81:[2,90],82:[2,90],83:[2,90],84:[2,90],85:[2,90]},{20:74,33:[2,80],50:71,63:72,64:75,65:[1,43],69:73,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{72:[1,79]},{23:[2,42],33:[2,42],54:[2,42],65:[2,42],68:[2,42],72:[2,42],75:[2,42],80:[2,42],81:[2,42],82:[2,42],83:[2,42],84:[2,42],85:[2,42],87:[1,50]},{20:74,53:80,54:[2,84],63:81,64:75,65:[1,43],69:82,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{26:83,47:[1,66]},{47:[2,55]},{4:84,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],39:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{47:[2,20]},{20:85,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:86,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{26:87,47:[1,66]},{47:[2,57]},{5:[2,11],14:[2,11],15:[2,11],19:[2,11],29:[2,11],34:[2,11],39:[2,11],44:[2,11],47:[2,11],48:[2,11],51:[2,11],55:[2,11],60:[2,11]},{15:[2,49],18:[2,49]},{20:74,33:[2,88],58:88,63:89,64:75,65:[1,43],69:90,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{65:[2,94],66:91,68:[2,94],72:[2,94],80:[2,94],81:[2,94],82:[2,94],83:[2,94],84:[2,94],85:[2,94]},{5:[2,25],14:[2,25],15:[2,25],19:[2,25],29:[2,25],34:[2,25],39:[2,25],44:[2,25],47:[2,25],48:[2,25],51:[2,25],55:[2,25],60:[2,25]},{20:92,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:74,31:93,33:[2,60],63:94,64:75,65:[1,43],69:95,70:76,71:77,72:[1,78],75:[2,60],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:74,33:[2,66],36:96,63:97,64:75,65:[1,43],69:98,70:76,71:77,72:[1,78],75:[2,66],78:26,79:27,80:[1,28],
28
- 81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:74,22:99,23:[2,52],63:100,64:75,65:[1,43],69:101,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:74,33:[2,92],62:102,63:103,64:75,65:[1,43],69:104,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[1,105]},{33:[2,79],65:[2,79],72:[2,79],80:[2,79],81:[2,79],82:[2,79],83:[2,79],84:[2,79],85:[2,79]},{33:[2,81]},{23:[2,27],33:[2,27],54:[2,27],65:[2,27],68:[2,27],72:[2,27],75:[2,27],80:[2,27],81:[2,27],82:[2,27],83:[2,27],84:[2,27],85:[2,27]},{23:[2,28],33:[2,28],54:[2,28],65:[2,28],68:[2,28],72:[2,28],75:[2,28],80:[2,28],81:[2,28],82:[2,28],83:[2,28],84:[2,28],85:[2,28]},{23:[2,30],33:[2,30],54:[2,30],68:[2,30],71:106,72:[1,107],75:[2,30]},{23:[2,98],33:[2,98],54:[2,98],68:[2,98],72:[2,98],75:[2,98]},{23:[2,45],33:[2,45],54:[2,45],65:[2,45],68:[2,45],72:[2,45],73:[1,108],75:[2,45],80:[2,45],81:[2,45],82:[2,45],83:[2,45],84:[2,45],85:[2,45],87:[2,45]},{23:[2,44],33:[2,44],54:[2,44],65:[2,44],68:[2,44],72:[2,44],75:[2,44],80:[2,44],81:[2,44],82:[2,44],83:[2,44],84:[2,44],85:[2,44],87:[2,44]},{54:[1,109]},{54:[2,83],65:[2,83],72:[2,83],80:[2,83],81:[2,83],82:[2,83],83:[2,83],84:[2,83],85:[2,83]},{54:[2,85]},{5:[2,13],14:[2,13],15:[2,13],19:[2,13],29:[2,13],34:[2,13],39:[2,13],44:[2,13],47:[2,13],48:[2,13],51:[2,13],55:[2,13],60:[2,13]},{38:55,39:[1,57],43:56,44:[1,58],45:111,46:110,47:[2,76]},{33:[2,70],40:112,65:[2,70],72:[2,70],75:[2,70],80:[2,70],81:[2,70],82:[2,70],83:[2,70],84:[2,70],85:[2,70]},{47:[2,18]},{5:[2,14],14:[2,14],15:[2,14],19:[2,14],29:[2,14],34:[2,14],39:[2,14],44:[2,14],47:[2,14],48:[2,14],51:[2,14],55:[2,14],60:[2,14]},{33:[1,113]},{33:[2,87],65:[2,87],72:[2,87],80:[2,87],81:[2,87],82:[2,87],83:[2,87],84:[2,87],85:[2,87]},{33:[2,89]},{20:74,63:115,64:75,65:[1,43],67:114,68:[2,96],69:116,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[1,117]},{32:118,33:[2,62],74:119,75:[1,120]},{33:[2,59],65:[2,59],72:[2,59],75:[2,59],80:[2,59],81:[2,59],82:[2,59],83:[2,59],84:[2,59],85:[2,59]},{33:[2,61],75:[2,61]},{33:[2,68],37:121,74:122,75:[1,120]},{33:[2,65],65:[2,65],72:[2,65],75:[2,65],80:[2,65],81:[2,65],82:[2,65],83:[2,65],84:[2,65],85:[2,65]},{33:[2,67],75:[2,67]},{23:[1,123]},{23:[2,51],65:[2,51],72:[2,51],80:[2,51],81:[2,51],82:[2,51],83:[2,51],84:[2,51],85:[2,51]},{23:[2,53]},{33:[1,124]},{33:[2,91],65:[2,91],72:[2,91],80:[2,91],81:[2,91],82:[2,91],83:[2,91],84:[2,91],85:[2,91]},{33:[2,93]},{5:[2,22],14:[2,22],15:[2,22],19:[2,22],29:[2,22],34:[2,22],39:[2,22],44:[2,22],47:[2,22],48:[2,22],51:[2,22],55:[2,22],60:[2,22]},{23:[2,99],33:[2,99],54:[2,99],68:[2,99],72:[2,99],75:[2,99]},{73:[1,108]},{20:74,63:125,64:75,65:[1,43],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{5:[2,23],14:[2,23],15:[2,23],19:[2,23],29:[2,23],34:[2,23],39:[2,23],44:[2,23],47:[2,23],48:[2,23],51:[2,23],55:[2,23],60:[2,23]},{47:[2,19]},{47:[2,77]},{20:74,33:[2,72],41:126,63:127,64:75,65:[1,43],69:128,70:76,71:77,72:[1,78],75:[2,72],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{5:[2,24],14:[2,24],15:[2,24],19:[2,24],29:[2,24],34:[2,24],39:[2,24],44:[2,24],47:[2,24],48:[2,24],51:[2,24],55:[2,24],60:[2,24]},{68:[1,129]},{65:[2,95],68:[2,95],72:[2,95],80:[2,95],81:[2,95],82:[2,95],83:[2,95],84:[2,95],85:[2,95]},{68:[2,97]},{5:[2,21],14:[2,21],15:[2,21],19:[2,21],29:[2,21],34:[2,21],39:[2,21],44:[2,21],47:[2,21],48:[2,21],51:[2,21],55:[2,21],60:[2,21]},{33:[1,130]},{33:[2,63]},{72:[1,132],76:131},{33:[1,133]},{33:[2,69]},{15:[2,12],18:[2,12]},{14:[2,26],15:[2,26],19:[2,26],29:[2,26],34:[2,26],47:[2,26],48:[2,26],51:[2,26],55:[2,26],60:[2,26]},{23:[2,31],33:[2,31],54:[2,31],68:[2,31],72:[2,31],75:[2,31]},{33:[2,74],42:134,74:135,75:[1,120]},{33:[2,71],65:[2,71],72:[2,71],75:[2,71],80:[2,71],81:[2,71],82:[2,71],83:[2,71],84:[2,71],85:[2,71]},{33:[2,73],75:[2,73]},{23:[2,29],33:[2,29],54:[2,29],65:[2,29],68:[2,29],72:[2,29],75:[2,29],80:[2,29],81:[2,29],82:[2,29],83:[2,29],84:[2,29],85:[2,29]},{14:[2,15],15:[2,15],19:[2,15],29:[2,15],34:[2,15],39:[2,15],44:[2,15],47:[2,15],48:[2,15],51:[2,15],55:[2,15],60:[2,15]},{72:[1,137],77:[1,136]},{72:[2,100],77:[2,100]},{14:[2,16],15:[2,16],19:[2,16],29:[2,16],34:[2,16],44:[2,16],47:[2,16],48:[2,16],51:[2,16],55:[2,16],60:[2,16]},{33:[1,138]},{33:[2,75]},{33:[2,32]},{72:[2,101],77:[2,101]},{14:[2,17],15:[2,17],19:[2,17],29:[2,17],34:[2,17],39:[2,17],44:[2,17],47:[2,17],48:[2,17],51:[2,17],55:[2,17],60:[2,17]}],defaultActions:{4:[2,1],54:[2,55],56:[2,20],60:[2,57],73:[2,81],82:[2,85],86:[2,18],90:[2,89],101:[2,53],104:[2,93],110:[2,19],111:[2,77],116:[2,97],119:[2,63],122:[2,69],135:[2,75],136:[2,32]},parseError:function(a,b){throw new Error(a)},parse:function(a){function b(){var a;return a=c.lexer.lex()||1,"number"!=typeof a&&(a=c.symbols_[a]||a),a}var c=this,d=[0],e=[null],f=[],g=this.table,h="",i=0,j=0,k=0;this.lexer.setInput(a),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,this.yy.parser=this,"undefined"==typeof this.lexer.yylloc&&(this.lexer.yylloc={});var l=this.lexer.yylloc;f.push(l);var m=this.lexer.options&&this.lexer.options.ranges;"function"==typeof this.yy.parseError&&(this.parseError=this.yy.parseError);for(var n,o,p,q,r,s,t,u,v,w={};;){if(p=d[d.length-1],this.defaultActions[p]?q=this.defaultActions[p]:(null!==n&&"undefined"!=typeof n||(n=b()),q=g[p]&&g[p][n]),"undefined"==typeof q||!q.length||!q[0]){var x="";if(!k){v=[];for(s in g[p])this.terminals_[s]&&s>2&&v.push("'"+this.terminals_[s]+"'");x=this.lexer.showPosition?"Parse error on line "+(i+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+v.join(", ")+", got '"+(this.terminals_[n]||n)+"'":"Parse error on line "+(i+1)+": Unexpected "+(1==n?"end of input":"'"+(this.terminals_[n]||n)+"'"),this.parseError(x,{text:this.lexer.match,token:this.terminals_[n]||n,line:this.lexer.yylineno,loc:l,expected:v})}}if(q[0]instanceof Array&&q.length>1)throw new Error("Parse Error: multiple actions possible at state: "+p+", token: "+n);switch(q[0]){case 1:d.push(n),e.push(this.lexer.yytext),f.push(this.lexer.yylloc),d.push(q[1]),n=null,o?(n=o,o=null):(j=this.lexer.yyleng,h=this.lexer.yytext,i=this.lexer.yylineno,l=this.lexer.yylloc,k>0&&k--);break;case 2:if(t=this.productions_[q[1]][1],w.$=e[e.length-t],w._$={first_line:f[f.length-(t||1)].first_line,last_line:f[f.length-1].last_line,first_column:f[f.length-(t||1)].first_column,last_column:f[f.length-1].last_column},m&&(w._$.range=[f[f.length-(t||1)].range[0],f[f.length-1].range[1]]),r=this.performAction.call(w,h,j,i,this.yy,q[1],e,f),"undefined"!=typeof r)return r;t&&(d=d.slice(0,-1*t*2),e=e.slice(0,-1*t),f=f.slice(0,-1*t)),d.push(this.productions_[q[1]][0]),e.push(w.$),f.push(w._$),u=g[d[d.length-2]][d[d.length-1]],d.push(u);break;case 3:return!0}}return!0}},c=function(){var a={EOF:1,parseError:function(a,b){if(!this.yy.parser)throw new Error(a);this.yy.parser.parseError(a,b)},setInput:function(a){return this._input=a,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var a=this._input[0];this.yytext+=a,this.yyleng++,this.offset++,this.match+=a,this.matched+=a;var b=a.match(/(?:\r\n?|\n).*/g);return b?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),a},unput:function(a){var b=a.length,c=a.split(/(?:\r\n?|\n)/g);this._input=a+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-b-1),this.offset-=b;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),c.length-1&&(this.yylineno-=c.length-1);var e=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:c?(c.length===d.length?this.yylloc.first_column:0)+d[d.length-c.length].length-c[0].length:this.yylloc.first_column-b},this.options.ranges&&(this.yylloc.range=[e[0],e[0]+this.yyleng-b]),this},more:function(){return this._more=!0,this},less:function(a){this.unput(this.match.slice(a))},pastInput:function(){var a=this.matched.substr(0,this.matched.length-this.match.length);return(a.length>20?"...":"")+a.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var a=this.match;return a.length<20&&(a+=this._input.substr(0,20-a.length)),(a.substr(0,20)+(a.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var a=this.pastInput(),b=new Array(a.length+1).join("-");return a+this.upcomingInput()+"\n"+b+"^"},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var a,b,c,d,e;this._more||(this.yytext="",this.match="");for(var f=this._currentRules(),g=0;g<f.length&&(c=this._input.match(this.rules[f[g]]),!c||b&&!(c[0].length>b[0].length)||(b=c,d=g,this.options.flex));g++);return b?(e=b[0].match(/(?:\r\n?|\n).*/g),e&&(this.yylineno+=e.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:e?e[e.length-1].length-e[e.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+b[0].length},this.yytext+=b[0],this.match+=b[0],this.matches=b,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._input=this._input.slice(b[0].length),this.matched+=b[0],a=this.performAction.call(this,this.yy,this,f[d],this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),a?a:void 0):""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var a=this.next();return"undefined"!=typeof a?a:this.lex()},begin:function(a){this.conditionStack.push(a)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules},topState:function(){return this.conditionStack[this.conditionStack.length-2]},pushState:function(a){this.begin(a)}};return a.options={},a.performAction=function(a,b,c,d){function e(a,c){return b.yytext=b.yytext.substring(a,b.yyleng-c+a)}switch(c){case 0:if("\\\\"===b.yytext.slice(-2)?(e(0,1),this.begin("mu")):"\\"===b.yytext.slice(-1)?(e(0,1),this.begin("emu")):this.begin("mu"),b.yytext)return 15;break;case 1:return 15;case 2:return this.popState(),15;case 3:return this.begin("raw"),15;case 4:return this.popState(),"raw"===this.conditionStack[this.conditionStack.length-1]?15:(e(5,9),"END_RAW_BLOCK");case 5:return 15;case 6:return this.popState(),14;case 7:return 65;case 8:return 68;case 9:return 19;case 10:return this.popState(),this.begin("raw"),23;case 11:return 55;case 12:return 60;case 13:return 29;case 14:return 47;case 15:return this.popState(),44;case 16:return this.popState(),44;case 17:return 34;case 18:return 39;case 19:return 51;case 20:return 48;case 21:this.unput(b.yytext),this.popState(),this.begin("com");break;case 22:return this.popState(),14;case 23:return 48;case 24:return 73;case 25:return 72;case 26:return 72;case 27:return 87;case 28:break;case 29:return this.popState(),54;case 30:return this.popState(),33;case 31:return b.yytext=e(1,2).replace(/\\"/g,'"'),80;case 32:return b.yytext=e(1,2).replace(/\\'/g,"'"),80;case 33:return 85;case 34:return 82;case 35:return 82;case 36:return 83;case 37:return 84;case 38:return 81;case 39:return 75;case 40:return 77;case 41:return 72;case 42:return b.yytext=b.yytext.replace(/\\([\\\]])/g,"$1"),72;case 43:return"INVALID";case 44:return 5}},a.rules=[/^(?:[^\x00]*?(?=(\{\{)))/,/^(?:[^\x00]+)/,/^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/,/^(?:\{\{\{\{(?=[^\/]))/,/^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/,/^(?:[^\x00]+?(?=(\{\{\{\{)))/,/^(?:[\s\S]*?--(~)?\}\})/,/^(?:\()/,/^(?:\))/,/^(?:\{\{\{\{)/,/^(?:\}\}\}\})/,/^(?:\{\{(~)?>)/,/^(?:\{\{(~)?#>)/,/^(?:\{\{(~)?#\*?)/,/^(?:\{\{(~)?\/)/,/^(?:\{\{(~)?\^\s*(~)?\}\})/,/^(?:\{\{(~)?\s*else\s*(~)?\}\})/,/^(?:\{\{(~)?\^)/,/^(?:\{\{(~)?\s*else\b)/,/^(?:\{\{(~)?\{)/,/^(?:\{\{(~)?&)/,/^(?:\{\{(~)?!--)/,/^(?:\{\{(~)?![\s\S]*?\}\})/,/^(?:\{\{(~)?\*?)/,/^(?:=)/,/^(?:\.\.)/,/^(?:\.(?=([=~}\s\/.)|])))/,/^(?:[\/.])/,/^(?:\s+)/,/^(?:\}(~)?\}\})/,/^(?:(~)?\}\})/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:@)/,/^(?:true(?=([~}\s)])))/,/^(?:false(?=([~}\s)])))/,/^(?:undefined(?=([~}\s)])))/,/^(?:null(?=([~}\s)])))/,/^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/,/^(?:as\s+\|)/,/^(?:\|)/,/^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/,/^(?:\[(\\\]|[^\]])*\])/,/^(?:.)/,/^(?:$)/],a.conditions={mu:{rules:[7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],inclusive:!1},emu:{rules:[2],inclusive:!1},com:{rules:[6],inclusive:!1},raw:{rules:[3,4,5],inclusive:!1},INITIAL:{rules:[0,1,44],inclusive:!0}},a}();return b.lexer=c,a.prototype=b,b.Parser=a,new a}();b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(){var a=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];this.options=a}function e(a,b,c){void 0===b&&(b=a.length);var d=a[b-1],e=a[b-2];return d?"ContentStatement"===d.type?(e||!c?/\r?\n\s*?$/:/(^|\r?\n)\s*?$/).test(d.original):void 0:c}function f(a,b,c){void 0===b&&(b=-1);var d=a[b+1],e=a[b+2];return d?"ContentStatement"===d.type?(e||!c?/^\s*?\r?\n/:/^\s*?(\r?\n|$)/).test(d.original):void 0:c}function g(a,b,c){var d=a[null==b?0:b+1];if(d&&"ContentStatement"===d.type&&(c||!d.rightStripped)){var e=d.value;d.value=d.value.replace(c?/^\s+/:/^[ \t]*\r?\n?/,""),d.rightStripped=d.value!==e}}function h(a,b,c){var d=a[null==b?a.length-1:b-1];if(d&&"ContentStatement"===d.type&&(c||!d.leftStripped)){var e=d.value;return d.value=d.value.replace(c?/\s+$/:/[ \t]+$/,""),d.leftStripped=d.value!==e,d.leftStripped}}var i=c(1)["default"];b.__esModule=!0;var j=c(44),k=i(j);d.prototype=new k["default"],d.prototype.Program=function(a){var b=!this.options.ignoreStandalone,c=!this.isRootSeen;this.isRootSeen=!0;for(var d=a.body,i=0,j=d.length;i<j;i++){var k=d[i],l=this.accept(k);if(l){var m=e(d,i,c),n=f(d,i,c),o=l.openStandalone&&m,p=l.closeStandalone&&n,q=l.inlineStandalone&&m&&n;l.close&&g(d,i,!0),l.open&&h(d,i,!0),b&&q&&(g(d,i),h(d,i)&&"PartialStatement"===k.type&&(k.indent=/([ \t]+$)/.exec(d[i-1].original)[1])),b&&o&&(g((k.program||k.inverse).body),h(d,i)),b&&p&&(g(d,i),h((k.inverse||k.program).body))}}return a},d.prototype.BlockStatement=d.prototype.DecoratorBlock=d.prototype.PartialBlockStatement=function(a){this.accept(a.program),this.accept(a.inverse);var b=a.program||a.inverse,c=a.program&&a.inverse,d=c,i=c;if(c&&c.chained)for(d=c.body[0].program;i.chained;)i=i.body[i.body.length-1].program;var j={open:a.openStrip.open,close:a.closeStrip.close,openStandalone:f(b.body),closeStandalone:e((d||b).body)};if(a.openStrip.close&&g(b.body,null,!0),c){var k=a.inverseStrip;k.open&&h(b.body,null,!0),k.close&&g(d.body,null,!0),a.closeStrip.open&&h(i.body,null,!0),!this.options.ignoreStandalone&&e(b.body)&&f(d.body)&&(h(b.body),g(d.body))}else a.closeStrip.open&&h(b.body,null,!0);return j},d.prototype.Decorator=d.prototype.MustacheStatement=function(a){return a.strip},d.prototype.PartialStatement=d.prototype.CommentStatement=function(a){var b=a.strip||{};return{inlineStandalone:!0,open:b.open,close:b.close}},b["default"]=d,a.exports=b["default"]},function(a,b,c){"use strict";function d(){this.parents=[]}function e(a){this.acceptRequired(a,"path"),this.acceptArray(a.params),this.acceptKey(a,"hash")}function f(a){e.call(this,a),this.acceptKey(a,"program"),this.acceptKey(a,"inverse")}function g(a){this.acceptRequired(a,"name"),this.acceptArray(a.params),this.acceptKey(a,"hash")}var h=c(1)["default"];b.__esModule=!0;var i=c(6),j=h(i);d.prototype={constructor:d,mutating:!1,acceptKey:function(a,b){var c=this.accept(a[b]);if(this.mutating){if(c&&!d.prototype[c.type])throw new j["default"]('Unexpected node type "'+c.type+'" found when accepting '+b+" on "+a.type);a[b]=c}},acceptRequired:function(a,b){if(this.acceptKey(a,b),!a[b])throw new j["default"](a.type+" requires "+b)},acceptArray:function(a){for(var b=0,c=a.length;b<c;b++)this.acceptKey(a,b),a[b]||(a.splice(b,1),b--,c--)},accept:function(a){if(a){if(!this[a.type])throw new j["default"]("Unknown type: "+a.type,a);this.current&&this.parents.unshift(this.current),this.current=a;var b=this[a.type](a);return this.current=this.parents.shift(),!this.mutating||b?b:b!==!1?a:void 0}},Program:function(a){this.acceptArray(a.body)},MustacheStatement:e,Decorator:e,BlockStatement:f,DecoratorBlock:f,PartialStatement:g,PartialBlockStatement:function(a){g.call(this,a),this.acceptKey(a,"program")},ContentStatement:function(){},CommentStatement:function(){},SubExpression:e,PathExpression:function(){},StringLiteral:function(){},NumberLiteral:function(){},BooleanLiteral:function(){},UndefinedLiteral:function(){},NullLiteral:function(){},Hash:function(a){this.acceptArray(a.pairs)},HashPair:function(a){this.acceptRequired(a,"value")}},b["default"]=d,a.exports=b["default"]},function(a,b,c){"use strict";function d(a,b){if(b=b.path?b.path.original:b,a.path.original!==b){var c={loc:a.path.loc};throw new q["default"](a.path.original+" doesn't match "+b,c)}}function e(a,b){this.source=a,this.start={line:b.first_line,column:b.first_column},this.end={line:b.last_line,column:b.last_column}}function f(a){return/^\[.*\]$/.test(a)?a.substring(1,a.length-1):a}function g(a,b){return{open:"~"===a.charAt(2),close:"~"===b.charAt(b.length-3)}}function h(a){return a.replace(/^\{\{~?!-?-?/,"").replace(/-?-?~?\}\}$/,"")}function i(a,b,c){c=this.locInfo(c);for(var d=a?"@":"",e=[],f=0,g=0,h=b.length;g<h;g++){var i=b[g].part,j=b[g].original!==i;if(d+=(b[g].separator||"")+i,j||".."!==i&&"."!==i&&"this"!==i)e.push(i);else{if(e.length>0)throw new q["default"]("Invalid path: "+d,{loc:c});".."===i&&f++}}return{type:"PathExpression",data:a,depth:f,parts:e,original:d,loc:c}}function j(a,b,c,d,e,f){var g=d.charAt(3)||d.charAt(2),h="{"!==g&&"&"!==g,i=/\*/.test(d);return{type:i?"Decorator":"MustacheStatement",path:a,params:b,hash:c,escaped:h,strip:e,loc:this.locInfo(f)}}function k(a,b,c,e){d(a,c),e=this.locInfo(e);var f={type:"Program",body:b,strip:{},loc:e};return{type:"BlockStatement",path:a.path,params:a.params,hash:a.hash,program:f,openStrip:{},inverseStrip:{},closeStrip:{},loc:e}}function l(a,b,c,e,f,g){e&&e.path&&d(a,e);var h=/\*/.test(a.open);b.blockParams=a.blockParams;var i=void 0,j=void 0;if(c){if(h)throw new q["default"]("Unexpected inverse block on decorator",c);c.chain&&(c.program.body[0].closeStrip=e.strip),j=c.strip,i=c.program}return f&&(f=i,i=b,b=f),{type:h?"DecoratorBlock":"BlockStatement",path:a.path,params:a.params,hash:a.hash,program:b,inverse:i,openStrip:a.strip,inverseStrip:j,closeStrip:e&&e.strip,loc:this.locInfo(g)}}function m(a,b){if(!b&&a.length){var c=a[0].loc,d=a[a.length-1].loc;c&&d&&(b={source:c.source,start:{line:c.start.line,column:c.start.column},end:{line:d.end.line,column:d.end.column}})}return{type:"Program",body:a,strip:{},loc:b}}function n(a,b,c,e){return d(a,c),{type:"PartialBlockStatement",name:a.path,params:a.params,hash:a.hash,program:b,openStrip:a.strip,closeStrip:c&&c.strip,loc:this.locInfo(e)}}var o=c(1)["default"];b.__esModule=!0,b.SourceLocation=e,b.id=f,b.stripFlags=g,b.stripComment=h,b.preparePath=i,b.prepareMustache=j,b.prepareRawBlock=k,b.prepareBlock=l,b.prepareProgram=m,b.preparePartialBlock=n;var p=c(6),q=o(p)},function(a,b,c){"use strict";function d(){}function e(a,b,c){if(null==a||"string"!=typeof a&&"Program"!==a.type)throw new l["default"]("You must pass a string or Handlebars AST to Handlebars.precompile. You passed "+a);b=b||{},"data"in b||(b.data=!0),b.compat&&(b.useDepths=!0);var d=c.parse(a,b),e=(new c.Compiler).compile(d,b);return(new c.JavaScriptCompiler).compile(e,b)}function f(a,b,c){function d(){var d=c.parse(a,b),e=(new c.Compiler).compile(d,b),f=(new c.JavaScriptCompiler).compile(e,b,void 0,!0);return c.template(f)}function e(a,b){return f||(f=d()),f.call(this,a,b)}if(void 0===b&&(b={}),null==a||"string"!=typeof a&&"Program"!==a.type)throw new l["default"]("You must pass a string or Handlebars AST to Handlebars.compile. You passed "+a);b=m.extend({},b),"data"in b||(b.data=!0),b.compat&&(b.useDepths=!0);var f=void 0;return e._setup=function(a){return f||(f=d()),f._setup(a)},e._child=function(a,b,c,e){return f||(f=d()),f._child(a,b,c,e)},e}function g(a,b){if(a===b)return!0;if(m.isArray(a)&&m.isArray(b)&&a.length===b.length){for(var c=0;c<a.length;c++)if(!g(a[c],b[c]))return!1;return!0}}function h(a){if(!a.path.parts){var b=a.path;a.path={type:"PathExpression",data:!1,depth:0,parts:[b.original+""],original:b.original+"",loc:b.loc}}}var i=c(47)["default"],j=c(1)["default"];b.__esModule=!0,b.Compiler=d,b.precompile=e,b.compile=f;var k=c(6),l=j(k),m=c(5),n=c(40),o=j(n),p=[].slice;d.prototype={compiler:d,equals:function(a){var b=this.opcodes.length;if(a.opcodes.length!==b)return!1;for(var c=0;c<b;c++){var d=this.opcodes[c],e=a.opcodes[c];if(d.opcode!==e.opcode||!g(d.args,e.args))return!1}b=this.children.length;for(var c=0;c<b;c++)if(!this.children[c].equals(a.children[c]))return!1;return!0},guid:0,compile:function(a,b){return this.sourceNode=[],this.opcodes=[],this.children=[],this.options=b,this.stringParams=b.stringParams,this.trackIds=b.trackIds,b.blockParams=b.blockParams||[],b.knownHelpers=m.extend(i(null),{helperMissing:!0,blockHelperMissing:!0,each:!0,"if":!0,unless:!0,"with":!0,log:!0,lookup:!0},b.knownHelpers),this.accept(a)},compileProgram:function(a){var b=new this.compiler,c=b.compile(a,this.options),d=this.guid++;return this.usePartial=this.usePartial||c.usePartial,this.children[d]=c,this.useDepths=this.useDepths||c.useDepths,d},accept:function(a){if(!this[a.type])throw new l["default"]("Unknown type: "+a.type,a);this.sourceNode.unshift(a);var b=this[a.type](a);return this.sourceNode.shift(),b},Program:function(a){this.options.blockParams.unshift(a.blockParams);for(var b=a.body,c=b.length,d=0;d<c;d++)this.accept(b[d]);return this.options.blockParams.shift(),this.isSimple=1===c,this.blockParams=a.blockParams?a.blockParams.length:0,this},BlockStatement:function(a){h(a);var b=a.program,c=a.inverse;b=b&&this.compileProgram(b),c=c&&this.compileProgram(c);var d=this.classifySexpr(a);"helper"===d?this.helperSexpr(a,b,c):"simple"===d?(this.simpleSexpr(a),this.opcode("pushProgram",b),this.opcode("pushProgram",c),this.opcode("emptyHash"),this.opcode("blockValue",a.path.original)):(this.ambiguousSexpr(a,b,c),this.opcode("pushProgram",b),this.opcode("pushProgram",c),this.opcode("emptyHash"),this.opcode("ambiguousBlockValue")),this.opcode("append")},DecoratorBlock:function(a){var b=a.program&&this.compileProgram(a.program),c=this.setupFullMustacheParams(a,b,void 0),d=a.path;this.useDecorators=!0,this.opcode("registerDecorator",c.length,d.original)},PartialStatement:function(a){this.usePartial=!0;var b=a.program;b&&(b=this.compileProgram(a.program));var c=a.params;if(c.length>1)throw new l["default"]("Unsupported number of partial arguments: "+c.length,a);c.length||(this.options.explicitPartialContext?this.opcode("pushLiteral","undefined"):c.push({type:"PathExpression",parts:[],depth:0}));var d=a.name.original,e="SubExpression"===a.name.type;e&&this.accept(a.name),this.setupFullMustacheParams(a,b,void 0,!0);var f=a.indent||"";this.options.preventIndent&&f&&(this.opcode("appendContent",f),f=""),this.opcode("invokePartial",e,d,f),this.opcode("append")},PartialBlockStatement:function(a){this.PartialStatement(a)},MustacheStatement:function(a){this.SubExpression(a),a.escaped&&!this.options.noEscape?this.opcode("appendEscaped"):this.opcode("append")},Decorator:function(a){this.DecoratorBlock(a)},ContentStatement:function(a){a.value&&this.opcode("appendContent",a.value)},CommentStatement:function(){},SubExpression:function(a){h(a);var b=this.classifySexpr(a);"simple"===b?this.simpleSexpr(a):"helper"===b?this.helperSexpr(a):this.ambiguousSexpr(a)},ambiguousSexpr:function(a,b,c){var d=a.path,e=d.parts[0],f=null!=b||null!=c;this.opcode("getContext",d.depth),this.opcode("pushProgram",b),this.opcode("pushProgram",c),d.strict=!0,this.accept(d),this.opcode("invokeAmbiguous",e,f)},simpleSexpr:function(a){var b=a.path;b.strict=!0,this.accept(b),this.opcode("resolvePossibleLambda")},helperSexpr:function(a,b,c){var d=this.setupFullMustacheParams(a,b,c),e=a.path,f=e.parts[0];if(this.options.knownHelpers[f])this.opcode("invokeKnownHelper",d.length,f);else{if(this.options.knownHelpersOnly)throw new l["default"]("You specified knownHelpersOnly, but used the unknown helper "+f,a);e.strict=!0,e.falsy=!0,this.accept(e),this.opcode("invokeHelper",d.length,e.original,o["default"].helpers.simpleId(e))}},PathExpression:function(a){this.addDepth(a.depth),this.opcode("getContext",a.depth);var b=a.parts[0],c=o["default"].helpers.scopedId(a),d=!a.depth&&!c&&this.blockParamIndex(b);d?this.opcode("lookupBlockParam",d,a.parts):b?a.data?(this.options.data=!0,this.opcode("lookupData",a.depth,a.parts,a.strict)):this.opcode("lookupOnContext",a.parts,a.falsy,a.strict,c):this.opcode("pushContext")},StringLiteral:function(a){this.opcode("pushString",a.value)},NumberLiteral:function(a){this.opcode("pushLiteral",a.value)},BooleanLiteral:function(a){this.opcode("pushLiteral",a.value)},UndefinedLiteral:function(){this.opcode("pushLiteral","undefined")},NullLiteral:function(){this.opcode("pushLiteral","null")},Hash:function(a){var b=a.pairs,c=0,d=b.length;for(this.opcode("pushHash");c<d;c++)this.pushParam(b[c].value);for(;c--;)this.opcode("assignToHash",b[c].key);this.opcode("popHash")},opcode:function(a){this.opcodes.push({opcode:a,args:p.call(arguments,1),loc:this.sourceNode[0].loc})},addDepth:function(a){a&&(this.useDepths=!0)},classifySexpr:function(a){var b=o["default"].helpers.simpleId(a.path),c=b&&!!this.blockParamIndex(a.path.parts[0]),d=!c&&o["default"].helpers.helperExpression(a),e=!c&&(d||b);if(e&&!d){var f=a.path.parts[0],g=this.options;g.knownHelpers[f]?d=!0:g.knownHelpersOnly&&(e=!1)}return d?"helper":e?"ambiguous":"simple"},pushParams:function(a){for(var b=0,c=a.length;b<c;b++)this.pushParam(a[b])},pushParam:function(a){var b=null!=a.value?a.value:a.original||"";if(this.stringParams)b.replace&&(b=b.replace(/^(\.?\.\/)*/g,"").replace(/\//g,".")),a.depth&&this.addDepth(a.depth),this.opcode("getContext",a.depth||0),this.opcode("pushStringParam",b,a.type),"SubExpression"===a.type&&this.accept(a);else{if(this.trackIds){var c=void 0;if(!a.parts||o["default"].helpers.scopedId(a)||a.depth||(c=this.blockParamIndex(a.parts[0])),c){var d=a.parts.slice(1).join(".");this.opcode("pushId","BlockParam",c,d)}else b=a.original||b,b.replace&&(b=b.replace(/^this(?:\.|$)/,"").replace(/^\.\//,"").replace(/^\.$/,"")),this.opcode("pushId",a.type,b)}this.accept(a)}},setupFullMustacheParams:function(a,b,c,d){var e=a.params;return this.pushParams(e),this.opcode("pushProgram",b),this.opcode("pushProgram",c),a.hash?this.accept(a.hash):this.opcode("emptyHash",d),e},blockParamIndex:function(a){for(var b=0,c=this.options.blockParams.length;b<c;b++){var d=this.options.blockParams[b],e=d&&m.indexOf(d,a);if(d&&e>=0)return[b,e]}}}},function(a,b,c){a.exports={"default":c(48),__esModule:!0}},function(a,b,c){var d=c(9);a.exports=function(a,b){return d.create(a,b)}},function(a,b,c){"use strict";function d(a){this.value=a}function e(){}function f(a,b,c,d){var e=b.popStack(),f=0,g=c.length;for(a&&g--;f<g;f++)e=b.nameLookup(e,c[f],d);return a?[b.aliasable("container.strict"),"(",e,", ",b.quotedString(c[f]),", ",JSON.stringify(b.source.currentLocation)," )"]:e}var g=c(13)["default"],h=c(1)["default"];b.__esModule=!0;var i=c(4),j=c(6),k=h(j),l=c(5),m=c(50),n=h(m),o=c(28);e.prototype={nameLookup:function(a,b){function c(){return e.isValidJavaScriptVariableName(b)?[a,".",b]:[a,"[",JSON.stringify(b),"]"]}if(o.dangerousPropertyRegex.test(b)){var d=[this.aliasable("container.propertyIsEnumerable"),".call(",a,",",JSON.stringify(b),")"];return["(",d,"?",c()," : undefined)"]}return c()},depthedLookup:function(a){return[this.aliasable("container.lookup"),'(depths, "',a,'")']},compilerInfo:function(){var a=i.COMPILER_REVISION,b=i.REVISION_CHANGES[a];return[a,b]},appendToBuffer:function(a,b,c){return l.isArray(a)||(a=[a]),a=this.source.wrap(a,b),this.environment.isSimple?["return ",a,";"]:c?["buffer += ",a,";"]:(a.appendToBuffer=!0,a)},initializeBuffer:function(){return this.quotedString("")},compile:function(a,b,c,d){this.environment=a,this.options=b,this.stringParams=this.options.stringParams,this.trackIds=this.options.trackIds,this.precompile=!d,this.name=this.environment.name,this.isChild=!!c,this.context=c||{decorators:[],programs:[],environments:[]},this.preamble(),this.stackSlot=0,this.stackVars=[],this.aliases={},this.registers={list:[]},this.hashes=[],this.compileStack=[],this.inlineStack=[],this.blockParams=[],this.compileChildren(a,b),this.useDepths=this.useDepths||a.useDepths||a.useDecorators||this.options.compat,this.useBlockParams=this.useBlockParams||a.useBlockParams;var e=a.opcodes,f=void 0,g=void 0,h=void 0,i=void 0;for(h=0,i=e.length;h<i;h++)f=e[h],this.source.currentLocation=f.loc,g=g||f.loc,this[f.opcode].apply(this,f.args);if(this.source.currentLocation=g,this.pushSource(""),this.stackSlot||this.inlineStack.length||this.compileStack.length)throw new k["default"]("Compile completed with content left on stack");this.decorators.isEmpty()?this.decorators=void 0:(this.useDecorators=!0,this.decorators.prepend("var decorators = container.decorators;\n"),this.decorators.push("return fn;"),d?this.decorators=Function.apply(this,["fn","props","container","depth0","data","blockParams","depths",this.decorators.merge()]):(this.decorators.prepend("function(fn, props, container, depth0, data, blockParams, depths) {\n"),this.decorators.push("}\n"),this.decorators=this.decorators.merge()));var j=this.createFunctionContext(d);if(this.isChild)return j;var l={compiler:this.compilerInfo(),main:j};this.decorators&&(l.main_d=this.decorators,l.useDecorators=!0);var m=this.context,n=m.programs,o=m.decorators;for(h=0,i=n.length;h<i;h++)n[h]&&(l[h]=n[h],o[h]&&(l[h+"_d"]=o[h],l.useDecorators=!0));return this.environment.usePartial&&(l.usePartial=!0),this.options.data&&(l.useData=!0),this.useDepths&&(l.useDepths=!0),this.useBlockParams&&(l.useBlockParams=!0),this.options.compat&&(l.compat=!0),d?l.compilerOptions=this.options:(l.compiler=JSON.stringify(l.compiler),this.source.currentLocation={start:{line:1,column:0}},l=this.objectLiteral(l),b.srcName?(l=l.toStringWithSourceMap({file:b.destName}),l.map=l.map&&l.map.toString()):l=l.toString()),l},preamble:function(){this.lastContext=0,this.source=new n["default"](this.options.srcName),this.decorators=new n["default"](this.options.srcName)},createFunctionContext:function(a){var b=this,c="",d=this.stackVars.concat(this.registers.list);d.length>0&&(c+=", "+d.join(", "));var e=0;g(this.aliases).forEach(function(a){var d=b.aliases[a];d.children&&d.referenceCount>1&&(c+=", alias"+ ++e+"="+a,d.children[0]="alias"+e)});var f=["container","depth0","helpers","partials","data"];(this.useBlockParams||this.useDepths)&&f.push("blockParams"),this.useDepths&&f.push("depths");var h=this.mergeSource(c);return a?(f.push(h),Function.apply(this,f)):this.source.wrap(["function(",f.join(","),") {\n ",h,"}"])},mergeSource:function(a){var b=this.environment.isSimple,c=!this.forceBuffer,d=void 0,e=void 0,f=void 0,g=void 0;return this.source.each(function(a){a.appendToBuffer?(f?a.prepend(" + "):f=a,g=a):(f&&(e?f.prepend("buffer += "):d=!0,g.add(";"),f=g=void 0),e=!0,b||(c=!1))}),c?f?(f.prepend("return "),g.add(";")):e||this.source.push('return "";'):(a+=", buffer = "+(d?"":this.initializeBuffer()),
29
- f?(f.prepend("return buffer + "),g.add(";")):this.source.push("return buffer;")),a&&this.source.prepend("var "+a.substring(2)+(d?"":";\n")),this.source.merge()},blockValue:function(a){var b=this.aliasable("container.hooks.blockHelperMissing"),c=[this.contextName(0)];this.setupHelperArgs(a,0,c);var d=this.popStack();c.splice(1,0,d),this.push(this.source.functionCall(b,"call",c))},ambiguousBlockValue:function(){var a=this.aliasable("container.hooks.blockHelperMissing"),b=[this.contextName(0)];this.setupHelperArgs("",0,b,!0),this.flushInline();var c=this.topStack();b.splice(1,0,c),this.pushSource(["if (!",this.lastHelper,") { ",c," = ",this.source.functionCall(a,"call",b),"}"])},appendContent:function(a){this.pendingContent?a=this.pendingContent+a:this.pendingLocation=this.source.currentLocation,this.pendingContent=a},append:function(){if(this.isInline())this.replaceStack(function(a){return[" != null ? ",a,' : ""']}),this.pushSource(this.appendToBuffer(this.popStack()));else{var a=this.popStack();this.pushSource(["if (",a," != null) { ",this.appendToBuffer(a,void 0,!0)," }"]),this.environment.isSimple&&this.pushSource(["else { ",this.appendToBuffer("''",void 0,!0)," }"])}},appendEscaped:function(){this.pushSource(this.appendToBuffer([this.aliasable("container.escapeExpression"),"(",this.popStack(),")"]))},getContext:function(a){this.lastContext=a},pushContext:function(){this.pushStackLiteral(this.contextName(this.lastContext))},lookupOnContext:function(a,b,c,d){var e=0;d||!this.options.compat||this.lastContext?this.pushContext():this.push(this.depthedLookup(a[e++])),this.resolvePath("context",a,e,b,c)},lookupBlockParam:function(a,b){this.useBlockParams=!0,this.push(["blockParams[",a[0],"][",a[1],"]"]),this.resolvePath("context",b,1)},lookupData:function(a,b,c){a?this.pushStackLiteral("container.data(data, "+a+")"):this.pushStackLiteral("data"),this.resolvePath("data",b,0,!0,c)},resolvePath:function(a,b,c,d,e){var g=this;if(this.options.strict||this.options.assumeObjects)return void this.push(f(this.options.strict&&e,this,b,a));for(var h=b.length;c<h;c++)this.replaceStack(function(e){var f=g.nameLookup(e,b[c],a);return d?[" && ",f]:[" != null ? ",f," : ",e]})},resolvePossibleLambda:function(){this.push([this.aliasable("container.lambda"),"(",this.popStack(),", ",this.contextName(0),")"])},pushStringParam:function(a,b){this.pushContext(),this.pushString(b),"SubExpression"!==b&&("string"==typeof a?this.pushString(a):this.pushStackLiteral(a))},emptyHash:function(a){this.trackIds&&this.push("{}"),this.stringParams&&(this.push("{}"),this.push("{}")),this.pushStackLiteral(a?"undefined":"{}")},pushHash:function(){this.hash&&this.hashes.push(this.hash),this.hash={values:{},types:[],contexts:[],ids:[]}},popHash:function(){var a=this.hash;this.hash=this.hashes.pop(),this.trackIds&&this.push(this.objectLiteral(a.ids)),this.stringParams&&(this.push(this.objectLiteral(a.contexts)),this.push(this.objectLiteral(a.types))),this.push(this.objectLiteral(a.values))},pushString:function(a){this.pushStackLiteral(this.quotedString(a))},pushLiteral:function(a){this.pushStackLiteral(a)},pushProgram:function(a){null!=a?this.pushStackLiteral(this.programExpression(a)):this.pushStackLiteral(null)},registerDecorator:function(a,b){var c=this.nameLookup("decorators",b,"decorator"),d=this.setupHelperArgs(b,a);this.decorators.push(["fn = ",this.decorators.functionCall(c,"",["fn","props","container",d])," || fn;"])},invokeHelper:function(a,b,c){var d=this.popStack(),e=this.setupHelper(a,b),f=[];c&&f.push(e.name),f.push(d),this.options.strict||f.push(this.aliasable("container.hooks.helperMissing"));var g=["(",this.itemsSeparatedBy(f,"||"),")"],h=this.source.functionCall(g,"call",e.callParams);this.push(h)},itemsSeparatedBy:function(a,b){var c=[];c.push(a[0]);for(var d=1;d<a.length;d++)c.push(b,a[d]);return c},invokeKnownHelper:function(a,b){var c=this.setupHelper(a,b);this.push(this.source.functionCall(c.name,"call",c.callParams))},invokeAmbiguous:function(a,b){this.useRegister("helper");var c=this.popStack();this.emptyHash();var d=this.setupHelper(0,a,b),e=this.lastHelper=this.nameLookup("helpers",a,"helper"),f=["(","(helper = ",e," || ",c,")"];this.options.strict||(f[0]="(helper = ",f.push(" != null ? helper : ",this.aliasable("container.hooks.helperMissing"))),this.push(["(",f,d.paramsInit?["),(",d.paramsInit]:[],"),","(typeof helper === ",this.aliasable('"function"')," ? ",this.source.functionCall("helper","call",d.callParams)," : helper))"])},invokePartial:function(a,b,c){var d=[],e=this.setupParams(b,1,d);a&&(b=this.popStack(),delete e.name),c&&(e.indent=JSON.stringify(c)),e.helpers="helpers",e.partials="partials",e.decorators="container.decorators",a?d.unshift(b):d.unshift(this.nameLookup("partials",b,"partial")),this.options.compat&&(e.depths="depths"),e=this.objectLiteral(e),d.push(e),this.push(this.source.functionCall("container.invokePartial","",d))},assignToHash:function(a){var b=this.popStack(),c=void 0,d=void 0,e=void 0;this.trackIds&&(e=this.popStack()),this.stringParams&&(d=this.popStack(),c=this.popStack());var f=this.hash;c&&(f.contexts[a]=c),d&&(f.types[a]=d),e&&(f.ids[a]=e),f.values[a]=b},pushId:function(a,b,c){"BlockParam"===a?this.pushStackLiteral("blockParams["+b[0]+"].path["+b[1]+"]"+(c?" + "+JSON.stringify("."+c):"")):"PathExpression"===a?this.pushString(b):"SubExpression"===a?this.pushStackLiteral("true"):this.pushStackLiteral("null")},compiler:e,compileChildren:function(a,b){for(var c=a.children,d=void 0,e=void 0,f=0,g=c.length;f<g;f++){d=c[f],e=new this.compiler;var h=this.matchExistingProgram(d);if(null==h){this.context.programs.push("");var i=this.context.programs.length;d.index=i,d.name="program"+i,this.context.programs[i]=e.compile(d,b,this.context,!this.precompile),this.context.decorators[i]=e.decorators,this.context.environments[i]=d,this.useDepths=this.useDepths||e.useDepths,this.useBlockParams=this.useBlockParams||e.useBlockParams,d.useDepths=this.useDepths,d.useBlockParams=this.useBlockParams}else d.index=h.index,d.name="program"+h.index,this.useDepths=this.useDepths||h.useDepths,this.useBlockParams=this.useBlockParams||h.useBlockParams}},matchExistingProgram:function(a){for(var b=0,c=this.context.environments.length;b<c;b++){var d=this.context.environments[b];if(d&&d.equals(a))return d}},programExpression:function(a){var b=this.environment.children[a],c=[b.index,"data",b.blockParams];return(this.useBlockParams||this.useDepths)&&c.push("blockParams"),this.useDepths&&c.push("depths"),"container.program("+c.join(", ")+")"},useRegister:function(a){this.registers[a]||(this.registers[a]=!0,this.registers.list.push(a))},push:function(a){return a instanceof d||(a=this.source.wrap(a)),this.inlineStack.push(a),a},pushStackLiteral:function(a){this.push(new d(a))},pushSource:function(a){this.pendingContent&&(this.source.push(this.appendToBuffer(this.source.quotedString(this.pendingContent),this.pendingLocation)),this.pendingContent=void 0),a&&this.source.push(a)},replaceStack:function(a){var b=["("],c=void 0,e=void 0,f=void 0;if(!this.isInline())throw new k["default"]("replaceStack on non-inline");var g=this.popStack(!0);if(g instanceof d)c=[g.value],b=["(",c],f=!0;else{e=!0;var h=this.incrStack();b=["((",this.push(h)," = ",g,")"],c=this.topStack()}var i=a.call(this,c);f||this.popStack(),e&&this.stackSlot--,this.push(b.concat(i,")"))},incrStack:function(){return this.stackSlot++,this.stackSlot>this.stackVars.length&&this.stackVars.push("stack"+this.stackSlot),this.topStackName()},topStackName:function(){return"stack"+this.stackSlot},flushInline:function(){var a=this.inlineStack;this.inlineStack=[];for(var b=0,c=a.length;b<c;b++){var e=a[b];if(e instanceof d)this.compileStack.push(e);else{var f=this.incrStack();this.pushSource([f," = ",e,";"]),this.compileStack.push(f)}}},isInline:function(){return this.inlineStack.length},popStack:function(a){var b=this.isInline(),c=(b?this.inlineStack:this.compileStack).pop();if(!a&&c instanceof d)return c.value;if(!b){if(!this.stackSlot)throw new k["default"]("Invalid stack pop");this.stackSlot--}return c},topStack:function(){var a=this.isInline()?this.inlineStack:this.compileStack,b=a[a.length-1];return b instanceof d?b.value:b},contextName:function(a){return this.useDepths&&a?"depths["+a+"]":"depth"+a},quotedString:function(a){return this.source.quotedString(a)},objectLiteral:function(a){return this.source.objectLiteral(a)},aliasable:function(a){var b=this.aliases[a];return b?(b.referenceCount++,b):(b=this.aliases[a]=this.source.wrap(a),b.aliasable=!0,b.referenceCount=1,b)},setupHelper:function(a,b,c){var d=[],e=this.setupHelperArgs(b,a,d,c),f=this.nameLookup("helpers",b,"helper"),g=this.aliasable(this.contextName(0)+" != null ? "+this.contextName(0)+" : (container.nullContext || {})");return{params:d,paramsInit:e,name:f,callParams:[g].concat(d)}},setupParams:function(a,b,c){var d={},e=[],f=[],g=[],h=!c,i=void 0;h&&(c=[]),d.name=this.quotedString(a),d.hash=this.popStack(),this.trackIds&&(d.hashIds=this.popStack()),this.stringParams&&(d.hashTypes=this.popStack(),d.hashContexts=this.popStack());var j=this.popStack(),k=this.popStack();(k||j)&&(d.fn=k||"container.noop",d.inverse=j||"container.noop");for(var l=b;l--;)i=this.popStack(),c[l]=i,this.trackIds&&(g[l]=this.popStack()),this.stringParams&&(f[l]=this.popStack(),e[l]=this.popStack());return h&&(d.args=this.source.generateArray(c)),this.trackIds&&(d.ids=this.source.generateArray(g)),this.stringParams&&(d.types=this.source.generateArray(f),d.contexts=this.source.generateArray(e)),this.options.data&&(d.data="data"),this.useBlockParams&&(d.blockParams="blockParams"),d},setupHelperArgs:function(a,b,c,d){var e=this.setupParams(a,b,c);return e.loc=JSON.stringify(this.source.currentLocation),e=this.objectLiteral(e),d?(this.useRegister("options"),c.push("options"),["options=",e]):c?(c.push(e),""):e}},function(){for(var a="break else new var case finally return void catch for switch while continue function this with default if throw delete in try do instanceof typeof abstract enum int short boolean export interface static byte extends long super char final native synchronized class float package throws const goto private transient debugger implements protected volatile double import public let yield await null true false".split(" "),b=e.RESERVED_WORDS={},c=0,d=a.length;c<d;c++)b[a[c]]=!0}(),e.isValidJavaScriptVariableName=function(a){return!e.RESERVED_WORDS[a]&&/^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(a)},b["default"]=e,a.exports=b["default"]},function(a,b,c){"use strict";function d(a,b,c){if(g.isArray(a)){for(var d=[],e=0,f=a.length;e<f;e++)d.push(b.wrap(a[e],c));return d}return"boolean"==typeof a||"number"==typeof a?a+"":a}function e(a){this.srcFile=a,this.source=[]}var f=c(13)["default"];b.__esModule=!0;var g=c(5),h=void 0;try{}catch(i){}h||(h=function(a,b,c,d){this.src="",d&&this.add(d)},h.prototype={add:function(a){g.isArray(a)&&(a=a.join("")),this.src+=a},prepend:function(a){g.isArray(a)&&(a=a.join("")),this.src=a+this.src},toStringWithSourceMap:function(){return{code:this.toString()}},toString:function(){return this.src}}),e.prototype={isEmpty:function(){return!this.source.length},prepend:function(a,b){this.source.unshift(this.wrap(a,b))},push:function(a,b){this.source.push(this.wrap(a,b))},merge:function(){var a=this.empty();return this.each(function(b){a.add([" ",b,"\n"])}),a},each:function(a){for(var b=0,c=this.source.length;b<c;b++)a(this.source[b])},empty:function(){var a=this.currentLocation||{start:{}};return new h(a.start.line,a.start.column,this.srcFile)},wrap:function(a){var b=arguments.length<=1||void 0===arguments[1]?this.currentLocation||{start:{}}:arguments[1];return a instanceof h?a:(a=d(a,this,b),new h(b.start.line,b.start.column,this.srcFile,a))},functionCall:function(a,b,c){return c=this.generateList(c),this.wrap([a,b?"."+b+"(":"(",c,")"])},quotedString:function(a){return'"'+(a+"").replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")+'"'},objectLiteral:function(a){var b=this,c=[];f(a).forEach(function(e){var f=d(a[e],b);"undefined"!==f&&c.push([b.quotedString(e),":",f])});var e=this.generateList(c);return e.prepend("{"),e.add("}"),e},generateList:function(a){for(var b=this.empty(),c=0,e=a.length;c<e;c++)c&&b.add(","),b.add(d(a[c],this));return b},generateArray:function(a){var b=this.generateList(a);return b.prepend("["),b.add("]"),b}},b["default"]=e,a.exports=b["default"]}])});
1
  /**!
2
 
3
  @license
4
+ handlebars v4.7.3
5
 
6
+ Copyright (C) 2011-2019 by Yehuda Katz
7
 
8
  Permission is hereby granted, free of charge, to any person obtaining a copy
9
  of this software and associated documentation files (the "Software"), to deal
24
  THE SOFTWARE.
25
 
26
  */
27
+ !function(a,b){"object"==typeof exports&&"object"==typeof module?module.exports=b():"function"==typeof define&&define.amd?define([],b):"object"==typeof exports?exports.Handlebars=b():a.Handlebars=b()}(this,function(){return function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={exports:{},id:d,loaded:!1};return a[d].call(e.exports,e,e.exports,b),e.loaded=!0,e.exports}var c={};return b.m=a,b.c=c,b.p="",b(0)}([function(a,b,c){"use strict";function d(){var a=r();return a.compile=function(b,c){return k.compile(b,c,a)},a.precompile=function(b,c){return k.precompile(b,c,a)},a.AST=i["default"],a.Compiler=k.Compiler,a.JavaScriptCompiler=m["default"],a.Parser=j.parser,a.parse=j.parse,a.parseWithoutProcessing=j.parseWithoutProcessing,a}var e=c(1)["default"];b.__esModule=!0;var f=c(2),g=e(f),h=c(45),i=e(h),j=c(46),k=c(51),l=c(52),m=e(l),n=c(49),o=e(n),p=c(44),q=e(p),r=g["default"].create,s=d();s.create=d,q["default"](s),s.Visitor=o["default"],s["default"]=s,b["default"]=s,a.exports=b["default"]},function(a,b){"use strict";b["default"]=function(a){return a&&a.__esModule?a:{"default":a}},b.__esModule=!0},function(a,b,c){"use strict";function d(){var a=new h.HandlebarsEnvironment;return n.extend(a,h),a.SafeString=j["default"],a.Exception=l["default"],a.Utils=n,a.escapeExpression=n.escapeExpression,a.VM=p,a.template=function(b){return p.template(b,a)},a}var e=c(3)["default"],f=c(1)["default"];b.__esModule=!0;var g=c(4),h=e(g),i=c(37),j=f(i),k=c(6),l=f(k),m=c(5),n=e(m),o=c(38),p=e(o),q=c(44),r=f(q),s=d();s.create=d,r["default"](s),s["default"]=s,b["default"]=s,a.exports=b["default"]},function(a,b){"use strict";b["default"]=function(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b},b.__esModule=!0},function(a,b,c){"use strict";function d(a,b,c){this.helpers=a||{},this.partials=b||{},this.decorators=c||{},i.registerDefaultHelpers(this),j.registerDefaultDecorators(this)}var e=c(1)["default"];b.__esModule=!0,b.HandlebarsEnvironment=d;var f=c(5),g=c(6),h=e(g),i=c(10),j=c(30),k=c(32),l=e(k),m=c(33),n="4.7.3";b.VERSION=n;var o=8;b.COMPILER_REVISION=o;var p=7;b.LAST_COMPATIBLE_COMPILER_REVISION=p;var q={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:"== 1.x.x",5:"== 2.0.0-alpha.x",6:">= 2.0.0-beta.1",7:">= 4.0.0 <4.3.0",8:">= 4.3.0"};b.REVISION_CHANGES=q;var r="[object Object]";d.prototype={constructor:d,logger:l["default"],log:l["default"].log,registerHelper:function(a,b){if(f.toString.call(a)===r){if(b)throw new h["default"]("Arg not supported with multiple helpers");f.extend(this.helpers,a)}else this.helpers[a]=b},unregisterHelper:function(a){delete this.helpers[a]},registerPartial:function(a,b){if(f.toString.call(a)===r)f.extend(this.partials,a);else{if("undefined"==typeof b)throw new h["default"]('Attempting to register a partial called "'+a+'" as undefined');this.partials[a]=b}},unregisterPartial:function(a){delete this.partials[a]},registerDecorator:function(a,b){if(f.toString.call(a)===r){if(b)throw new h["default"]("Arg not supported with multiple decorators");f.extend(this.decorators,a)}else this.decorators[a]=b},unregisterDecorator:function(a){delete this.decorators[a]},resetLoggedPropertyAccesses:function(){m.resetLoggedProperties()}};var s=l["default"].log;b.log=s,b.createFrame=f.createFrame,b.logger=l["default"]},function(a,b){"use strict";function c(a){return k[a]}function d(a){for(var b=1;b<arguments.length;b++)for(var c in arguments[b])Object.prototype.hasOwnProperty.call(arguments[b],c)&&(a[c]=arguments[b][c]);return a}function e(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1}function f(a){if("string"!=typeof a){if(a&&a.toHTML)return a.toHTML();if(null==a)return"";if(!a)return a+"";a=""+a}return m.test(a)?a.replace(l,c):a}function g(a){return!a&&0!==a||!(!p(a)||0!==a.length)}function h(a){var b=d({},a);return b._parent=a,b}function i(a,b){return a.path=b,a}function j(a,b){return(a?a+".":"")+b}b.__esModule=!0,b.extend=d,b.indexOf=e,b.escapeExpression=f,b.isEmpty=g,b.createFrame=h,b.blockParams=i,b.appendContextPath=j;var k={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;","=":"&#x3D;"},l=/[&<>"'`=]/g,m=/[&<>"'`=]/,n=Object.prototype.toString;b.toString=n;var o=function(a){return"function"==typeof a};o(/x/)&&(b.isFunction=o=function(a){return"function"==typeof a&&"[object Function]"===n.call(a)}),b.isFunction=o;var p=Array.isArray||function(a){return!(!a||"object"!=typeof a)&&"[object Array]"===n.call(a)};b.isArray=p},function(a,b,c){"use strict";function d(a,b){var c=b&&b.loc,g=void 0,h=void 0,i=void 0,j=void 0;c&&(g=c.start.line,h=c.end.line,i=c.start.column,j=c.end.column,a+=" - "+g+":"+i);for(var k=Error.prototype.constructor.call(this,a),l=0;l<f.length;l++)this[f[l]]=k[f[l]];Error.captureStackTrace&&Error.captureStackTrace(this,d);try{c&&(this.lineNumber=g,this.endLineNumber=h,e?(Object.defineProperty(this,"column",{value:i,enumerable:!0}),Object.defineProperty(this,"endColumn",{value:j,enumerable:!0})):(this.column=i,this.endColumn=j))}catch(m){}}var e=c(7)["default"];b.__esModule=!0;var f=["description","fileName","lineNumber","endLineNumber","message","name","number","stack"];d.prototype=new Error,b["default"]=d,a.exports=b["default"]},function(a,b,c){a.exports={"default":c(8),__esModule:!0}},function(a,b,c){var d=c(9);a.exports=function(a,b,c){return d.setDesc(a,b,c)}},function(a,b){var c=Object;a.exports={create:c.create,getProto:c.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:c.getOwnPropertyDescriptor,setDesc:c.defineProperty,setDescs:c.defineProperties,getKeys:c.keys,getNames:c.getOwnPropertyNames,getSymbols:c.getOwnPropertySymbols,each:[].forEach}},function(a,b,c){"use strict";function d(a){h["default"](a),j["default"](a),l["default"](a),n["default"](a),p["default"](a),r["default"](a),t["default"](a)}function e(a,b,c){a.helpers[b]&&(a.hooks[b]=a.helpers[b],c||delete a.helpers[b])}var f=c(1)["default"];b.__esModule=!0,b.registerDefaultHelpers=d,b.moveHelperToHooks=e;var g=c(11),h=f(g),i=c(12),j=f(i),k=c(25),l=f(k),m=c(26),n=f(m),o=c(27),p=f(o),q=c(28),r=f(q),s=c(29),t=f(s)},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5);b["default"]=function(a){a.registerHelper("blockHelperMissing",function(b,c){var e=c.inverse,f=c.fn;if(b===!0)return f(this);if(b===!1||null==b)return e(this);if(d.isArray(b))return b.length>0?(c.ids&&(c.ids=[c.name]),a.helpers.each(b,c)):e(this);if(c.data&&c.ids){var g=d.createFrame(c.data);g.contextPath=d.appendContextPath(c.data.contextPath,c.name),c={data:g}}return f(b,c)})},a.exports=b["default"]},function(a,b,c){(function(d){"use strict";var e=c(13)["default"],f=c(1)["default"];b.__esModule=!0;var g=c(5),h=c(6),i=f(h);b["default"]=function(a){a.registerHelper("each",function(a,b){function c(b,c,d){l&&(l.key=b,l.index=c,l.first=0===c,l.last=!!d,m&&(l.contextPath=m+b)),k+=f(a[b],{data:l,blockParams:g.blockParams([a[b],b],[m+b,null])})}if(!b)throw new i["default"]("Must pass iterator to #each");var f=b.fn,h=b.inverse,j=0,k="",l=void 0,m=void 0;if(b.data&&b.ids&&(m=g.appendContextPath(b.data.contextPath,b.ids[0])+"."),g.isFunction(a)&&(a=a.call(this)),b.data&&(l=g.createFrame(b.data)),a&&"object"==typeof a)if(g.isArray(a))for(var n=a.length;j<n;j++)j in a&&c(j,j,j===a.length-1);else if(d.Symbol&&a[d.Symbol.iterator]){for(var o=[],p=a[d.Symbol.iterator](),q=p.next();!q.done;q=p.next())o.push(q.value);a=o;for(var n=a.length;j<n;j++)c(j,j,j===a.length-1)}else!function(){var b=void 0;e(a).forEach(function(a){void 0!==b&&c(b,j-1),b=a,j++}),void 0!==b&&c(b,j-1,!0)}();return 0===j&&(k=h(this)),k})},a.exports=b["default"]}).call(b,function(){return this}())},function(a,b,c){a.exports={"default":c(14),__esModule:!0}},function(a,b,c){c(15),a.exports=c(21).Object.keys},function(a,b,c){var d=c(16);c(18)("keys",function(a){return function(b){return a(d(b))}})},function(a,b,c){var d=c(17);a.exports=function(a){return Object(d(a))}},function(a,b){a.exports=function(a){if(void 0==a)throw TypeError("Can't call method on "+a);return a}},function(a,b,c){var d=c(19),e=c(21),f=c(24);a.exports=function(a,b){var c=(e.Object||{})[a]||Object[a],g={};g[a]=b(c),d(d.S+d.F*f(function(){c(1)}),"Object",g)}},function(a,b,c){var d=c(20),e=c(21),f=c(22),g="prototype",h=function(a,b,c){var i,j,k,l=a&h.F,m=a&h.G,n=a&h.S,o=a&h.P,p=a&h.B,q=a&h.W,r=m?e:e[b]||(e[b]={}),s=m?d:n?d[b]:(d[b]||{})[g];m&&(c=b);for(i in c)j=!l&&s&&i in s,j&&i in r||(k=j?s[i]:c[i],r[i]=m&&"function"!=typeof s[i]?c[i]:p&&j?f(k,d):q&&s[i]==k?function(a){var b=function(b){return this instanceof a?new a(b):a(b)};return b[g]=a[g],b}(k):o&&"function"==typeof k?f(Function.call,k):k,o&&((r[g]||(r[g]={}))[i]=k))};h.F=1,h.G=2,h.S=4,h.P=8,h.B=16,h.W=32,a.exports=h},function(a,b){var c=a.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=c)},function(a,b){var c=a.exports={version:"1.2.6"};"number"==typeof __e&&(__e=c)},function(a,b,c){var d=c(23);a.exports=function(a,b,c){if(d(a),void 0===b)return a;switch(c){case 1:return function(c){return a.call(b,c)};case 2:return function(c,d){return a.call(b,c,d)};case 3:return function(c,d,e){return a.call(b,c,d,e)}}return function(){return a.apply(b,arguments)}}},function(a,b){a.exports=function(a){if("function"!=typeof a)throw TypeError(a+" is not a function!");return a}},function(a,b){a.exports=function(a){try{return!!a()}catch(b){return!0}}},function(a,b,c){"use strict";var d=c(1)["default"];b.__esModule=!0;var e=c(6),f=d(e);b["default"]=function(a){a.registerHelper("helperMissing",function(){if(1!==arguments.length)throw new f["default"]('Missing helper: "'+arguments[arguments.length-1].name+'"')})},a.exports=b["default"]},function(a,b,c){"use strict";var d=c(1)["default"];b.__esModule=!0;var e=c(5),f=c(6),g=d(f);b["default"]=function(a){a.registerHelper("if",function(a,b){if(2!=arguments.length)throw new g["default"]("#if requires exactly one argument");return e.isFunction(a)&&(a=a.call(this)),!b.hash.includeZero&&!a||e.isEmpty(a)?b.inverse(this):b.fn(this)}),a.registerHelper("unless",function(b,c){if(2!=arguments.length)throw new g["default"]("#unless requires exactly one argument");return a.helpers["if"].call(this,b,{fn:c.inverse,inverse:c.fn,hash:c.hash})})},a.exports=b["default"]},function(a,b){"use strict";b.__esModule=!0,b["default"]=function(a){a.registerHelper("log",function(){for(var b=[void 0],c=arguments[arguments.length-1],d=0;d<arguments.length-1;d++)b.push(arguments[d]);var e=1;null!=c.hash.level?e=c.hash.level:c.data&&null!=c.data.level&&(e=c.data.level),b[0]=e,a.log.apply(a,b)})},a.exports=b["default"]},function(a,b){"use strict";b.__esModule=!0,b["default"]=function(a){a.registerHelper("lookup",function(a,b,c){return a?c.lookupProperty(a,b):a})},a.exports=b["default"]},function(a,b,c){"use strict";var d=c(1)["default"];b.__esModule=!0;var e=c(5),f=c(6),g=d(f);b["default"]=function(a){a.registerHelper("with",function(a,b){if(2!=arguments.length)throw new g["default"]("#with requires exactly one argument");e.isFunction(a)&&(a=a.call(this));var c=b.fn;if(e.isEmpty(a))return b.inverse(this);var d=b.data;return b.data&&b.ids&&(d=e.createFrame(b.data),d.contextPath=e.appendContextPath(b.data.contextPath,b.ids[0])),c(a,{data:d,blockParams:e.blockParams([a],[d&&d.contextPath])})})},a.exports=b["default"]},function(a,b,c){"use strict";function d(a){g["default"](a)}var e=c(1)["default"];b.__esModule=!0,b.registerDefaultDecorators=d;var f=c(31),g=e(f)},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5);b["default"]=function(a){a.registerDecorator("inline",function(a,b,c,e){var f=a;return b.partials||(b.partials={},f=function(e,f){var g=c.partials;c.partials=d.extend({},g,b.partials);var h=a(e,f);return c.partials=g,h}),b.partials[e.args[0]]=e.fn,f})},a.exports=b["default"]},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5),e={methodMap:["debug","info","warn","error"],level:"info",lookupLevel:function(a){if("string"==typeof a){var b=d.indexOf(e.methodMap,a.toLowerCase());a=b>=0?b:parseInt(a,10)}return a},log:function(a){if(a=e.lookupLevel(a),"undefined"!=typeof console&&e.lookupLevel(e.level)<=a){var b=e.methodMap[a];console[b]||(b="log");for(var c=arguments.length,d=Array(c>1?c-1:0),f=1;f<c;f++)d[f-1]=arguments[f];console[b].apply(console,d)}}};b["default"]=e,a.exports=b["default"]},function(a,b,c){"use strict";function d(a){var b=i(null);b.constructor=!1,b.__defineGetter__=!1,b.__defineSetter__=!1,b.__lookupGetter__=!1;var c=i(null);return c.__proto__=!1,{properties:{whitelist:l.createNewLookupObject(c,a.allowedProtoProperties),defaultValue:a.allowProtoPropertiesByDefault},methods:{whitelist:l.createNewLookupObject(b,a.allowedProtoMethods),defaultValue:a.allowProtoMethodsByDefault}}}function e(a,b,c){return"function"==typeof a?f(b.methods,c):f(b.properties,c)}function f(a,b){return void 0!==a.whitelist[b]?a.whitelist[b]===!0:void 0!==a.defaultValue?a.defaultValue:(g(b),!1)}function g(a){o[a]!==!0&&(o[a]=!0,n.log("error",'Handlebars: Access has been denied to resolve the property "'+a+'" because it is not an "own property" of its parent.\nYou can add a runtime option to disable the check or this warning:\nSee https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details'))}function h(){j(o).forEach(function(a){delete o[a]})}var i=c(34)["default"],j=c(13)["default"],k=c(3)["default"];b.__esModule=!0,b.createProtoAccessControl=d,b.resultIsAllowed=e,b.resetLoggedProperties=h;var l=c(36),m=c(32),n=k(m),o=i(null)},function(a,b,c){a.exports={"default":c(35),__esModule:!0}},function(a,b,c){var d=c(9);a.exports=function(a,b){return d.create(a,b)}},function(a,b,c){"use strict";function d(){for(var a=arguments.length,b=Array(a),c=0;c<a;c++)b[c]=arguments[c];return f.extend.apply(void 0,[e(null)].concat(b))}var e=c(34)["default"];b.__esModule=!0,b.createNewLookupObject=d;var f=c(5)},function(a,b){"use strict";function c(a){this.string=a}b.__esModule=!0,c.prototype.toString=c.prototype.toHTML=function(){return""+this.string},b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(a){var b=a&&a[0]||1,c=v.COMPILER_REVISION;if(!(b>=v.LAST_COMPATIBLE_COMPILER_REVISION&&b<=v.COMPILER_REVISION)){if(b<v.LAST_COMPATIBLE_COMPILER_REVISION){var d=v.REVISION_CHANGES[c],e=v.REVISION_CHANGES[b];throw new u["default"]("Template was precompiled with an older version of Handlebars than the current runtime. Please update your precompiler to a newer version ("+d+") or downgrade your runtime to an older version ("+e+").")}throw new u["default"]("Template was precompiled with a newer version of Handlebars than the current runtime. Please update your runtime to a newer version ("+a[1]+").")}}function e(a,b){function c(c,d,e){e.hash&&(d=s.extend({},d,e.hash),e.ids&&(e.ids[0]=!0)),c=b.VM.resolvePartial.call(this,c,d,e);var f=s.extend({},e,{hooks:this.hooks,protoAccessControl:this.protoAccessControl}),g=b.VM.invokePartial.call(this,c,d,f);if(null==g&&b.compile&&(e.partials[e.name]=b.compile(c,a.compilerOptions,b),g=e.partials[e.name](d,f)),null!=g){if(e.indent){for(var h=g.split("\n"),i=0,j=h.length;i<j&&(h[i]||i+1!==j);i++)h[i]=e.indent+h[i];g=h.join("\n")}return g}throw new u["default"]("The partial "+e.name+" could not be compiled when running in runtime-only mode")}function d(b){function c(b){return""+a.main(g,b,g.helpers,g.partials,f,i,h)}var e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],f=e.data;d._setup(e),!e.partial&&a.useData&&(f=j(b,f));var h=void 0,i=a.useBlockParams?[]:void 0;return a.useDepths&&(h=e.depths?b!=e.depths[0]?[b].concat(e.depths):e.depths:[b]),(c=k(a.main,c,g,e.depths||[],f,i))(b,e)}if(!b)throw new u["default"]("No environment passed to template");if(!a||!a.main)throw new u["default"]("Unknown template object: "+typeof a);a.main.decorator=a.main_d,b.VM.checkRevision(a.compiler);var e=a.compiler&&7===a.compiler[0],g={strict:function(a,b,c){if(!(a&&b in a))throw new u["default"]('"'+b+'" not defined in '+a,{loc:c});return a[b]},lookupProperty:function(a,b){var c=a[b];return null==c?c:Object.prototype.hasOwnProperty.call(a,b)?c:y.resultIsAllowed(c,g.protoAccessControl,b)?c:void 0},lookup:function(a,b){for(var c=a.length,d=0;d<c;d++){var e=a[d]&&g.lookupProperty(a[d],b);if(null!=e)return a[d][b]}},lambda:function(a,b){return"function"==typeof a?a.call(b):a},escapeExpression:s.escapeExpression,invokePartial:c,fn:function(b){var c=a[b];return c.decorator=a[b+"_d"],c},programs:[],program:function(a,b,c,d,e){var g=this.programs[a],h=this.fn(a);return b||e||d||c?g=f(this,a,h,b,c,d,e):g||(g=this.programs[a]=f(this,a,h)),g},data:function(a,b){for(;a&&b--;)a=a._parent;return a},mergeIfNeeded:function(a,b){var c=a||b;return a&&b&&a!==b&&(c=s.extend({},b,a)),c},nullContext:n({}),noop:b.VM.noop,compilerInfo:a.compiler};return d.isTop=!0,d._setup=function(c){if(c.partial)g.protoAccessControl=c.protoAccessControl,g.helpers=c.helpers,g.partials=c.partials,g.decorators=c.decorators,g.hooks=c.hooks;else{var d=s.extend({},b.helpers,c.helpers);l(d,g),g.helpers=d,a.usePartial&&(g.partials=g.mergeIfNeeded(c.partials,b.partials)),(a.usePartial||a.useDecorators)&&(g.decorators=s.extend({},b.decorators,c.decorators)),g.hooks={},g.protoAccessControl=y.createProtoAccessControl(c);var f=c.allowCallsToHelperMissing||e;w.moveHelperToHooks(g,"helperMissing",f),w.moveHelperToHooks(g,"blockHelperMissing",f)}},d._child=function(b,c,d,e){if(a.useBlockParams&&!d)throw new u["default"]("must pass block params");if(a.useDepths&&!e)throw new u["default"]("must pass parent depths");return f(g,b,a[b],c,0,d,e)},d}function f(a,b,c,d,e,f,g){function h(b){var e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],h=g;return!g||b==g[0]||b===a.nullContext&&null===g[0]||(h=[b].concat(g)),c(a,b,a.helpers,a.partials,e.data||d,f&&[e.blockParams].concat(f),h)}return h=k(c,h,a,g,d,f),h.program=b,h.depth=g?g.length:0,h.blockParams=e||0,h}function g(a,b,c){return a?a.call||c.name||(c.name=a,a=c.partials[a]):a="@partial-block"===c.name?c.data["partial-block"]:c.partials[c.name],a}function h(a,b,c){var d=c.data&&c.data["partial-block"];c.partial=!0,c.ids&&(c.data.contextPath=c.ids[0]||c.data.contextPath);var e=void 0;if(c.fn&&c.fn!==i&&!function(){c.data=v.createFrame(c.data);var a=c.fn;e=c.data["partial-block"]=function(b){var c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];return c.data=v.createFrame(c.data),c.data["partial-block"]=d,a(b,c)},a.partials&&(c.partials=s.extend({},c.partials,a.partials))}(),void 0===a&&e&&(a=e),void 0===a)throw new u["default"]("The partial "+c.name+" could not be found");if(a instanceof Function)return a(b,c)}function i(){return""}function j(a,b){return b&&"root"in b||(b=b?v.createFrame(b):{},b.root=a),b}function k(a,b,c,d,e,f){if(a.decorator){var g={};b=a.decorator(b,g,c,d&&d[0],e,f,d),s.extend(b,g)}return b}function l(a,b){o(a).forEach(function(c){var d=a[c];a[c]=m(d,b)})}function m(a,b){var c=b.lookupProperty;return x.wrapHelper(a,function(a){return s.extend({lookupProperty:c},a)})}var n=c(39)["default"],o=c(13)["default"],p=c(3)["default"],q=c(1)["default"];b.__esModule=!0,b.checkRevision=d,b.template=e,b.wrapProgram=f,b.resolvePartial=g,b.invokePartial=h,b.noop=i;var r=c(5),s=p(r),t=c(6),u=q(t),v=c(4),w=c(10),x=c(43),y=c(33)},function(a,b,c){a.exports={"default":c(40),__esModule:!0}},function(a,b,c){c(41),a.exports=c(21).Object.seal},function(a,b,c){var d=c(42);c(18)("seal",function(a){return function(b){return a&&d(b)?a(b):b}})},function(a,b){a.exports=function(a){return"object"==typeof a?null!==a:"function"==typeof a}},function(a,b){"use strict";function c(a,b){if("function"!=typeof a)return a;var c=function(){var c=arguments[arguments.length-1];return arguments[arguments.length-1]=b(c),a.apply(this,arguments)};return c}b.__esModule=!0,b.wrapHelper=c},function(a,b){(function(c){"use strict";b.__esModule=!0,b["default"]=function(a){var b="undefined"!=typeof c?c:window,d=b.Handlebars;a.noConflict=function(){return b.Handlebars===a&&(b.Handlebars=d),a}},a.exports=b["default"]}).call(b,function(){return this}())},function(a,b){"use strict";b.__esModule=!0;var c={helpers:{helperExpression:function(a){return"SubExpression"===a.type||("MustacheStatement"===a.type||"BlockStatement"===a.type)&&!!(a.params&&a.params.length||a.hash)},scopedId:function(a){return/^\.|this\b/.test(a.original)},simpleId:function(a){return 1===a.parts.length&&!c.helpers.scopedId(a)&&!a.depth}}};b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(a,b){if("Program"===a.type)return a;i["default"].yy=o,o.locInfo=function(a){return new o.SourceLocation(b&&b.srcName,a)};var c=i["default"].parse(a);return c}function e(a,b){var c=d(a,b),e=new k["default"](b);return e.accept(c)}var f=c(1)["default"],g=c(3)["default"];b.__esModule=!0,b.parseWithoutProcessing=d,b.parse=e;var h=c(47),i=f(h),j=c(48),k=f(j),l=c(50),m=g(l),n=c(5);b.parser=i["default"];var o={};n.extend(o,m)},function(a,b){"use strict";b.__esModule=!0;var c=function(){function a(){this.yy={}}var b={trace:function(){},yy:{},symbols_:{error:2,root:3,program:4,EOF:5,program_repetition0:6,statement:7,mustache:8,block:9,rawBlock:10,partial:11,partialBlock:12,content:13,COMMENT:14,CONTENT:15,openRawBlock:16,rawBlock_repetition0:17,END_RAW_BLOCK:18,OPEN_RAW_BLOCK:19,helperName:20,openRawBlock_repetition0:21,openRawBlock_option0:22,CLOSE_RAW_BLOCK:23,openBlock:24,block_option0:25,closeBlock:26,openInverse:27,block_option1:28,OPEN_BLOCK:29,openBlock_repetition0:30,openBlock_option0:31,openBlock_option1:32,CLOSE:33,OPEN_INVERSE:34,openInverse_repetition0:35,openInverse_option0:36,openInverse_option1:37,openInverseChain:38,OPEN_INVERSE_CHAIN:39,openInverseChain_repetition0:40,openInverseChain_option0:41,openInverseChain_option1:42,inverseAndProgram:43,INVERSE:44,inverseChain:45,inverseChain_option0:46,OPEN_ENDBLOCK:47,OPEN:48,mustache_repetition0:49,mustache_option0:50,OPEN_UNESCAPED:51,mustache_repetition1:52,mustache_option1:53,CLOSE_UNESCAPED:54,OPEN_PARTIAL:55,partialName:56,partial_repetition0:57,partial_option0:58,openPartialBlock:59,OPEN_PARTIAL_BLOCK:60,openPartialBlock_repetition0:61,openPartialBlock_option0:62,param:63,sexpr:64,OPEN_SEXPR:65,sexpr_repetition0:66,sexpr_option0:67,CLOSE_SEXPR:68,hash:69,hash_repetition_plus0:70,hashSegment:71,ID:72,EQUALS:73,blockParams:74,OPEN_BLOCK_PARAMS:75,blockParams_repetition_plus0:76,CLOSE_BLOCK_PARAMS:77,path:78,dataName:79,STRING:80,NUMBER:81,BOOLEAN:82,UNDEFINED:83,NULL:84,DATA:85,pathSegments:86,SEP:87,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",14:"COMMENT",15:"CONTENT",18:"END_RAW_BLOCK",19:"OPEN_RAW_BLOCK",23:"CLOSE_RAW_BLOCK",29:"OPEN_BLOCK",33:"CLOSE",34:"OPEN_INVERSE",39:"OPEN_INVERSE_CHAIN",44:"INVERSE",47:"OPEN_ENDBLOCK",48:"OPEN",51:"OPEN_UNESCAPED",54:"CLOSE_UNESCAPED",55:"OPEN_PARTIAL",60:"OPEN_PARTIAL_BLOCK",65:"OPEN_SEXPR",68:"CLOSE_SEXPR",72:"ID",73:"EQUALS",75:"OPEN_BLOCK_PARAMS",77:"CLOSE_BLOCK_PARAMS",80:"STRING",81:"NUMBER",82:"BOOLEAN",83:"UNDEFINED",84:"NULL",85:"DATA",87:"SEP"},productions_:[0,[3,2],[4,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[13,1],[10,3],[16,5],[9,4],[9,4],[24,6],[27,6],[38,6],[43,2],[45,3],[45,1],[26,3],[8,5],[8,5],[11,5],[12,3],[59,5],[63,1],[63,1],[64,5],[69,1],[71,3],[74,3],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[56,1],[56,1],[79,2],[78,1],[86,3],[86,1],[6,0],[6,2],[17,0],[17,2],[21,0],[21,2],[22,0],[22,1],[25,0],[25,1],[28,0],[28,1],[30,0],[30,2],[31,0],[31,1],[32,0],[32,1],[35,0],[35,2],[36,0],[36,1],[37,0],[37,1],[40,0],[40,2],[41,0],[41,1],[42,0],[42,1],[46,0],[46,1],[49,0],[49,2],[50,0],[50,1],[52,0],[52,2],[53,0],[53,1],[57,0],[57,2],[58,0],[58,1],[61,0],[61,2],[62,0],[62,1],[66,0],[66,2],[67,0],[67,1],[70,1],[70,2],[76,1],[76,2]],performAction:function(a,b,c,d,e,f,g){var h=f.length-1;switch(e){case 1:return f[h-1];case 2:this.$=d.prepareProgram(f[h]);break;case 3:this.$=f[h];break;case 4:this.$=f[h];break;case 5:this.$=f[h];break;case 6:this.$=f[h];break;case 7:this.$=f[h];break;case 8:this.$=f[h];break;case 9:this.$={type:"CommentStatement",value:d.stripComment(f[h]),strip:d.stripFlags(f[h],f[h]),loc:d.locInfo(this._$)};break;case 10:this.$={type:"ContentStatement",original:f[h],value:f[h],loc:d.locInfo(this._$)};break;case 11:this.$=d.prepareRawBlock(f[h-2],f[h-1],f[h],this._$);break;case 12:this.$={path:f[h-3],params:f[h-2],hash:f[h-1]};break;case 13:this.$=d.prepareBlock(f[h-3],f[h-2],f[h-1],f[h],!1,this._$);break;case 14:this.$=d.prepareBlock(f[h-3],f[h-2],f[h-1],f[h],!0,this._$);break;case 15:this.$={open:f[h-5],path:f[h-4],params:f[h-3],hash:f[h-2],blockParams:f[h-1],strip:d.stripFlags(f[h-5],f[h])};break;case 16:this.$={path:f[h-4],params:f[h-3],hash:f[h-2],blockParams:f[h-1],strip:d.stripFlags(f[h-5],f[h])};break;case 17:this.$={path:f[h-4],params:f[h-3],hash:f[h-2],blockParams:f[h-1],strip:d.stripFlags(f[h-5],f[h])};break;case 18:this.$={strip:d.stripFlags(f[h-1],f[h-1]),program:f[h]};break;case 19:var i=d.prepareBlock(f[h-2],f[h-1],f[h],f[h],!1,this._$),j=d.prepareProgram([i],f[h-1].loc);j.chained=!0,this.$={strip:f[h-2].strip,program:j,chain:!0};break;case 20:this.$=f[h];break;case 21:this.$={path:f[h-1],strip:d.stripFlags(f[h-2],f[h])};break;case 22:this.$=d.prepareMustache(f[h-3],f[h-2],f[h-1],f[h-4],d.stripFlags(f[h-4],f[h]),this._$);break;case 23:this.$=d.prepareMustache(f[h-3],f[h-2],f[h-1],f[h-4],d.stripFlags(f[h-4],f[h]),this._$);break;case 24:this.$={type:"PartialStatement",name:f[h-3],params:f[h-2],hash:f[h-1],indent:"",strip:d.stripFlags(f[h-4],f[h]),loc:d.locInfo(this._$)};break;case 25:this.$=d.preparePartialBlock(f[h-2],f[h-1],f[h],this._$);break;case 26:this.$={path:f[h-3],params:f[h-2],hash:f[h-1],strip:d.stripFlags(f[h-4],f[h])};break;case 27:this.$=f[h];break;case 28:this.$=f[h];break;case 29:this.$={type:"SubExpression",path:f[h-3],params:f[h-2],hash:f[h-1],loc:d.locInfo(this._$)};break;case 30:this.$={type:"Hash",pairs:f[h],loc:d.locInfo(this._$)};break;case 31:this.$={type:"HashPair",key:d.id(f[h-2]),value:f[h],loc:d.locInfo(this._$)};break;case 32:this.$=d.id(f[h-1]);break;case 33:this.$=f[h];break;case 34:this.$=f[h];break;case 35:this.$={type:"StringLiteral",value:f[h],original:f[h],loc:d.locInfo(this._$)};break;case 36:this.$={type:"NumberLiteral",value:Number(f[h]),original:Number(f[h]),loc:d.locInfo(this._$)};break;case 37:this.$={type:"BooleanLiteral",value:"true"===f[h],original:"true"===f[h],loc:d.locInfo(this._$)};break;case 38:this.$={type:"UndefinedLiteral",original:void 0,value:void 0,loc:d.locInfo(this._$)};break;case 39:this.$={type:"NullLiteral",original:null,value:null,loc:d.locInfo(this._$)};break;case 40:this.$=f[h];break;case 41:this.$=f[h];break;case 42:this.$=d.preparePath(!0,f[h],this._$);break;case 43:this.$=d.preparePath(!1,f[h],this._$);break;case 44:f[h-2].push({part:d.id(f[h]),original:f[h],separator:f[h-1]}),this.$=f[h-2];break;case 45:this.$=[{part:d.id(f[h]),original:f[h]}];break;case 46:this.$=[];break;case 47:f[h-1].push(f[h]);break;case 48:this.$=[];break;case 49:f[h-1].push(f[h]);break;case 50:this.$=[];break;case 51:f[h-1].push(f[h]);break;case 58:this.$=[];break;case 59:f[h-1].push(f[h]);break;case 64:this.$=[];break;case 65:f[h-1].push(f[h]);break;case 70:this.$=[];break;case 71:f[h-1].push(f[h]);break;case 78:this.$=[];break;case 79:f[h-1].push(f[h]);break;case 82:this.$=[];break;case 83:f[h-1].push(f[h]);break;case 86:this.$=[];break;case 87:f[h-1].push(f[h]);break;case 90:this.$=[];break;case 91:f[h-1].push(f[h]);break;case 94:this.$=[];break;case 95:f[h-1].push(f[h]);break;case 98:this.$=[f[h]];break;case 99:f[h-1].push(f[h]);break;case 100:this.$=[f[h]];break;case 101:f[h-1].push(f[h])}},table:[{3:1,4:2,5:[2,46],6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{1:[3]},{5:[1,4]},{5:[2,2],7:5,8:6,9:7,10:8,11:9,12:10,13:11,14:[1,12],15:[1,20],16:17,19:[1,23],24:15,27:16,29:[1,21],34:[1,22],39:[2,2],44:[2,2],47:[2,2],48:[1,13],51:[1,14],55:[1,18],59:19,60:[1,24]},{1:[2,1]},{5:[2,47],14:[2,47],15:[2,47],19:[2,47],29:[2,47],34:[2,47],39:[2,47],44:[2,47],47:[2,47],48:[2,47],51:[2,47],55:[2,47],60:[2,47]},{5:[2,3],14:[2,3],15:[2,3],19:[2,3],29:[2,3],34:[2,3],39:[2,3],44:[2,3],47:[2,3],48:[2,3],51:[2,3],55:[2,3],60:[2,3]},{5:[2,4],14:[2,4],15:[2,4],19:[2,4],29:[2,4],34:[2,4],39:[2,4],44:[2,4],47:[2,4],48:[2,4],51:[2,4],55:[2,4],60:[2,4]},{5:[2,5],14:[2,5],15:[2,5],19:[2,5],29:[2,5],34:[2,5],39:[2,5],44:[2,5],47:[2,5],48:[2,5],51:[2,5],55:[2,5],60:[2,5]},{5:[2,6],14:[2,6],15:[2,6],19:[2,6],29:[2,6],34:[2,6],39:[2,6],44:[2,6],47:[2,6],48:[2,6],51:[2,6],55:[2,6],60:[2,6]},{5:[2,7],14:[2,7],15:[2,7],19:[2,7],29:[2,7],34:[2,7],39:[2,7],44:[2,7],47:[2,7],48:[2,7],51:[2,7],55:[2,7],60:[2,7]},{5:[2,8],14:[2,8],15:[2,8],19:[2,8],29:[2,8],34:[2,8],39:[2,8],44:[2,8],47:[2,8],48:[2,8],51:[2,8],55:[2,8],60:[2,8]},{5:[2,9],14:[2,9],15:[2,9],19:[2,9],29:[2,9],34:[2,9],39:[2,9],44:[2,9],47:[2,9],48:[2,9],51:[2,9],55:[2,9],60:[2,9]},{20:25,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:36,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:37,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],39:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{4:38,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{15:[2,48],17:39,18:[2,48]},{20:41,56:40,64:42,65:[1,43],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:44,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{5:[2,10],14:[2,10],15:[2,10],18:[2,10],19:[2,10],29:[2,10],34:[2,10],39:[2,10],44:[2,10],47:[2,10],48:[2,10],51:[2,10],55:[2,10],60:[2,10]},{20:45,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:46,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:47,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:41,56:48,64:42,65:[1,43],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[2,78],49:49,65:[2,78],72:[2,78],80:[2,78],81:[2,78],82:[2,78],83:[2,78],84:[2,78],85:[2,78]},{23:[2,33],33:[2,33],54:[2,33],65:[2,33],68:[2,33],72:[2,33],75:[2,33],80:[2,33],81:[2,33],82:[2,33],83:[2,33],84:[2,33],85:[2,33]},{23:[2,34],33:[2,34],54:[2,34],65:[2,34],68:[2,34],72:[2,34],75:[2,34],80:[2,34],81:[2,34],82:[2,34],83:[2,34],84:[2,34],85:[2,34]},{23:[2,35],33:[2,35],54:[2,35],65:[2,35],68:[2,35],72:[2,35],75:[2,35],80:[2,35],81:[2,35],82:[2,35],83:[2,35],84:[2,35],85:[2,35]},{23:[2,36],33:[2,36],54:[2,36],65:[2,36],68:[2,36],72:[2,36],75:[2,36],80:[2,36],81:[2,36],82:[2,36],83:[2,36],84:[2,36],85:[2,36]},{23:[2,37],33:[2,37],54:[2,37],65:[2,37],68:[2,37],72:[2,37],75:[2,37],80:[2,37],81:[2,37],82:[2,37],83:[2,37],84:[2,37],85:[2,37]},{23:[2,38],33:[2,38],54:[2,38],65:[2,38],68:[2,38],72:[2,38],75:[2,38],80:[2,38],81:[2,38],82:[2,38],83:[2,38],84:[2,38],85:[2,38]},{23:[2,39],33:[2,39],54:[2,39],65:[2,39],68:[2,39],72:[2,39],75:[2,39],80:[2,39],81:[2,39],82:[2,39],83:[2,39],84:[2,39],85:[2,39]},{23:[2,43],33:[2,43],54:[2,43],65:[2,43],68:[2,43],72:[2,43],75:[2,43],80:[2,43],81:[2,43],82:[2,43],83:[2,43],84:[2,43],85:[2,43],87:[1,50]},{72:[1,35],86:51},{23:[2,45],33:[2,45],54:[2,45],65:[2,45],68:[2,45],72:[2,45],75:[2,45],80:[2,45],81:[2,45],82:[2,45],83:[2,45],84:[2,45],85:[2,45],87:[2,45]},{52:52,54:[2,82],65:[2,82],72:[2,82],80:[2,82],81:[2,82],82:[2,82],83:[2,82],84:[2,82],85:[2,82]},{25:53,38:55,39:[1,57],43:56,44:[1,58],45:54,47:[2,54]},{28:59,43:60,44:[1,58],47:[2,56]},{13:62,15:[1,20],18:[1,61]},{33:[2,86],57:63,65:[2,86],72:[2,86],80:[2,86],81:[2,86],82:[2,86],83:[2,86],84:[2,86],85:[2,86]},{33:[2,40],65:[2,40],72:[2,40],80:[2,40],81:[2,40],82:[2,40],83:[2,40],84:[2,40],85:[2,40]},{33:[2,41],65:[2,41],
28
+ 72:[2,41],80:[2,41],81:[2,41],82:[2,41],83:[2,41],84:[2,41],85:[2,41]},{20:64,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{26:65,47:[1,66]},{30:67,33:[2,58],65:[2,58],72:[2,58],75:[2,58],80:[2,58],81:[2,58],82:[2,58],83:[2,58],84:[2,58],85:[2,58]},{33:[2,64],35:68,65:[2,64],72:[2,64],75:[2,64],80:[2,64],81:[2,64],82:[2,64],83:[2,64],84:[2,64],85:[2,64]},{21:69,23:[2,50],65:[2,50],72:[2,50],80:[2,50],81:[2,50],82:[2,50],83:[2,50],84:[2,50],85:[2,50]},{33:[2,90],61:70,65:[2,90],72:[2,90],80:[2,90],81:[2,90],82:[2,90],83:[2,90],84:[2,90],85:[2,90]},{20:74,33:[2,80],50:71,63:72,64:75,65:[1,43],69:73,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{72:[1,79]},{23:[2,42],33:[2,42],54:[2,42],65:[2,42],68:[2,42],72:[2,42],75:[2,42],80:[2,42],81:[2,42],82:[2,42],83:[2,42],84:[2,42],85:[2,42],87:[1,50]},{20:74,53:80,54:[2,84],63:81,64:75,65:[1,43],69:82,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{26:83,47:[1,66]},{47:[2,55]},{4:84,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],39:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{47:[2,20]},{20:85,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:86,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{26:87,47:[1,66]},{47:[2,57]},{5:[2,11],14:[2,11],15:[2,11],19:[2,11],29:[2,11],34:[2,11],39:[2,11],44:[2,11],47:[2,11],48:[2,11],51:[2,11],55:[2,11],60:[2,11]},{15:[2,49],18:[2,49]},{20:74,33:[2,88],58:88,63:89,64:75,65:[1,43],69:90,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{65:[2,94],66:91,68:[2,94],72:[2,94],80:[2,94],81:[2,94],82:[2,94],83:[2,94],84:[2,94],85:[2,94]},{5:[2,25],14:[2,25],15:[2,25],19:[2,25],29:[2,25],34:[2,25],39:[2,25],44:[2,25],47:[2,25],48:[2,25],51:[2,25],55:[2,25],60:[2,25]},{20:92,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:74,31:93,33:[2,60],63:94,64:75,65:[1,43],69:95,70:76,71:77,72:[1,78],75:[2,60],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:74,33:[2,66],36:96,63:97,64:75,65:[1,43],69:98,70:76,71:77,72:[1,78],75:[2,66],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:74,22:99,23:[2,52],63:100,64:75,65:[1,43],69:101,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:74,33:[2,92],62:102,63:103,64:75,65:[1,43],69:104,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[1,105]},{33:[2,79],65:[2,79],72:[2,79],80:[2,79],81:[2,79],82:[2,79],83:[2,79],84:[2,79],85:[2,79]},{33:[2,81]},{23:[2,27],33:[2,27],54:[2,27],65:[2,27],68:[2,27],72:[2,27],75:[2,27],80:[2,27],81:[2,27],82:[2,27],83:[2,27],84:[2,27],85:[2,27]},{23:[2,28],33:[2,28],54:[2,28],65:[2,28],68:[2,28],72:[2,28],75:[2,28],80:[2,28],81:[2,28],82:[2,28],83:[2,28],84:[2,28],85:[2,28]},{23:[2,30],33:[2,30],54:[2,30],68:[2,30],71:106,72:[1,107],75:[2,30]},{23:[2,98],33:[2,98],54:[2,98],68:[2,98],72:[2,98],75:[2,98]},{23:[2,45],33:[2,45],54:[2,45],65:[2,45],68:[2,45],72:[2,45],73:[1,108],75:[2,45],80:[2,45],81:[2,45],82:[2,45],83:[2,45],84:[2,45],85:[2,45],87:[2,45]},{23:[2,44],33:[2,44],54:[2,44],65:[2,44],68:[2,44],72:[2,44],75:[2,44],80:[2,44],81:[2,44],82:[2,44],83:[2,44],84:[2,44],85:[2,44],87:[2,44]},{54:[1,109]},{54:[2,83],65:[2,83],72:[2,83],80:[2,83],81:[2,83],82:[2,83],83:[2,83],84:[2,83],85:[2,83]},{54:[2,85]},{5:[2,13],14:[2,13],15:[2,13],19:[2,13],29:[2,13],34:[2,13],39:[2,13],44:[2,13],47:[2,13],48:[2,13],51:[2,13],55:[2,13],60:[2,13]},{38:55,39:[1,57],43:56,44:[1,58],45:111,46:110,47:[2,76]},{33:[2,70],40:112,65:[2,70],72:[2,70],75:[2,70],80:[2,70],81:[2,70],82:[2,70],83:[2,70],84:[2,70],85:[2,70]},{47:[2,18]},{5:[2,14],14:[2,14],15:[2,14],19:[2,14],29:[2,14],34:[2,14],39:[2,14],44:[2,14],47:[2,14],48:[2,14],51:[2,14],55:[2,14],60:[2,14]},{33:[1,113]},{33:[2,87],65:[2,87],72:[2,87],80:[2,87],81:[2,87],82:[2,87],83:[2,87],84:[2,87],85:[2,87]},{33:[2,89]},{20:74,63:115,64:75,65:[1,43],67:114,68:[2,96],69:116,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[1,117]},{32:118,33:[2,62],74:119,75:[1,120]},{33:[2,59],65:[2,59],72:[2,59],75:[2,59],80:[2,59],81:[2,59],82:[2,59],83:[2,59],84:[2,59],85:[2,59]},{33:[2,61],75:[2,61]},{33:[2,68],37:121,74:122,75:[1,120]},{33:[2,65],65:[2,65],72:[2,65],75:[2,65],80:[2,65],81:[2,65],82:[2,65],83:[2,65],84:[2,65],85:[2,65]},{33:[2,67],75:[2,67]},{23:[1,123]},{23:[2,51],65:[2,51],72:[2,51],80:[2,51],81:[2,51],82:[2,51],83:[2,51],84:[2,51],85:[2,51]},{23:[2,53]},{33:[1,124]},{33:[2,91],65:[2,91],72:[2,91],80:[2,91],81:[2,91],82:[2,91],83:[2,91],84:[2,91],85:[2,91]},{33:[2,93]},{5:[2,22],14:[2,22],15:[2,22],19:[2,22],29:[2,22],34:[2,22],39:[2,22],44:[2,22],47:[2,22],48:[2,22],51:[2,22],55:[2,22],60:[2,22]},{23:[2,99],33:[2,99],54:[2,99],68:[2,99],72:[2,99],75:[2,99]},{73:[1,108]},{20:74,63:125,64:75,65:[1,43],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{5:[2,23],14:[2,23],15:[2,23],19:[2,23],29:[2,23],34:[2,23],39:[2,23],44:[2,23],47:[2,23],48:[2,23],51:[2,23],55:[2,23],60:[2,23]},{47:[2,19]},{47:[2,77]},{20:74,33:[2,72],41:126,63:127,64:75,65:[1,43],69:128,70:76,71:77,72:[1,78],75:[2,72],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{5:[2,24],14:[2,24],15:[2,24],19:[2,24],29:[2,24],34:[2,24],39:[2,24],44:[2,24],47:[2,24],48:[2,24],51:[2,24],55:[2,24],60:[2,24]},{68:[1,129]},{65:[2,95],68:[2,95],72:[2,95],80:[2,95],81:[2,95],82:[2,95],83:[2,95],84:[2,95],85:[2,95]},{68:[2,97]},{5:[2,21],14:[2,21],15:[2,21],19:[2,21],29:[2,21],34:[2,21],39:[2,21],44:[2,21],47:[2,21],48:[2,21],51:[2,21],55:[2,21],60:[2,21]},{33:[1,130]},{33:[2,63]},{72:[1,132],76:131},{33:[1,133]},{33:[2,69]},{15:[2,12],18:[2,12]},{14:[2,26],15:[2,26],19:[2,26],29:[2,26],34:[2,26],47:[2,26],48:[2,26],51:[2,26],55:[2,26],60:[2,26]},{23:[2,31],33:[2,31],54:[2,31],68:[2,31],72:[2,31],75:[2,31]},{33:[2,74],42:134,74:135,75:[1,120]},{33:[2,71],65:[2,71],72:[2,71],75:[2,71],80:[2,71],81:[2,71],82:[2,71],83:[2,71],84:[2,71],85:[2,71]},{33:[2,73],75:[2,73]},{23:[2,29],33:[2,29],54:[2,29],65:[2,29],68:[2,29],72:[2,29],75:[2,29],80:[2,29],81:[2,29],82:[2,29],83:[2,29],84:[2,29],85:[2,29]},{14:[2,15],15:[2,15],19:[2,15],29:[2,15],34:[2,15],39:[2,15],44:[2,15],47:[2,15],48:[2,15],51:[2,15],55:[2,15],60:[2,15]},{72:[1,137],77:[1,136]},{72:[2,100],77:[2,100]},{14:[2,16],15:[2,16],19:[2,16],29:[2,16],34:[2,16],44:[2,16],47:[2,16],48:[2,16],51:[2,16],55:[2,16],60:[2,16]},{33:[1,138]},{33:[2,75]},{33:[2,32]},{72:[2,101],77:[2,101]},{14:[2,17],15:[2,17],19:[2,17],29:[2,17],34:[2,17],39:[2,17],44:[2,17],47:[2,17],48:[2,17],51:[2,17],55:[2,17],60:[2,17]}],defaultActions:{4:[2,1],54:[2,55],56:[2,20],60:[2,57],73:[2,81],82:[2,85],86:[2,18],90:[2,89],101:[2,53],104:[2,93],110:[2,19],111:[2,77],116:[2,97],119:[2,63],122:[2,69],135:[2,75],136:[2,32]},parseError:function(a,b){throw new Error(a)},parse:function(a){function b(){var a;return a=c.lexer.lex()||1,"number"!=typeof a&&(a=c.symbols_[a]||a),a}var c=this,d=[0],e=[null],f=[],g=this.table,h="",i=0,j=0,k=0;this.lexer.setInput(a),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,this.yy.parser=this,"undefined"==typeof this.lexer.yylloc&&(this.lexer.yylloc={});var l=this.lexer.yylloc;f.push(l);var m=this.lexer.options&&this.lexer.options.ranges;"function"==typeof this.yy.parseError&&(this.parseError=this.yy.parseError);for(var n,o,p,q,r,s,t,u,v,w={};;){if(p=d[d.length-1],this.defaultActions[p]?q=this.defaultActions[p]:(null!==n&&"undefined"!=typeof n||(n=b()),q=g[p]&&g[p][n]),"undefined"==typeof q||!q.length||!q[0]){var x="";if(!k){v=[];for(s in g[p])this.terminals_[s]&&s>2&&v.push("'"+this.terminals_[s]+"'");x=this.lexer.showPosition?"Parse error on line "+(i+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+v.join(", ")+", got '"+(this.terminals_[n]||n)+"'":"Parse error on line "+(i+1)+": Unexpected "+(1==n?"end of input":"'"+(this.terminals_[n]||n)+"'"),this.parseError(x,{text:this.lexer.match,token:this.terminals_[n]||n,line:this.lexer.yylineno,loc:l,expected:v})}}if(q[0]instanceof Array&&q.length>1)throw new Error("Parse Error: multiple actions possible at state: "+p+", token: "+n);switch(q[0]){case 1:d.push(n),e.push(this.lexer.yytext),f.push(this.lexer.yylloc),d.push(q[1]),n=null,o?(n=o,o=null):(j=this.lexer.yyleng,h=this.lexer.yytext,i=this.lexer.yylineno,l=this.lexer.yylloc,k>0&&k--);break;case 2:if(t=this.productions_[q[1]][1],w.$=e[e.length-t],w._$={first_line:f[f.length-(t||1)].first_line,last_line:f[f.length-1].last_line,first_column:f[f.length-(t||1)].first_column,last_column:f[f.length-1].last_column},m&&(w._$.range=[f[f.length-(t||1)].range[0],f[f.length-1].range[1]]),r=this.performAction.call(w,h,j,i,this.yy,q[1],e,f),"undefined"!=typeof r)return r;t&&(d=d.slice(0,-1*t*2),e=e.slice(0,-1*t),f=f.slice(0,-1*t)),d.push(this.productions_[q[1]][0]),e.push(w.$),f.push(w._$),u=g[d[d.length-2]][d[d.length-1]],d.push(u);break;case 3:return!0}}return!0}},c=function(){var a={EOF:1,parseError:function(a,b){if(!this.yy.parser)throw new Error(a);this.yy.parser.parseError(a,b)},setInput:function(a){return this._input=a,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var a=this._input[0];this.yytext+=a,this.yyleng++,this.offset++,this.match+=a,this.matched+=a;var b=a.match(/(?:\r\n?|\n).*/g);return b?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),a},unput:function(a){var b=a.length,c=a.split(/(?:\r\n?|\n)/g);this._input=a+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-b-1),this.offset-=b;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),c.length-1&&(this.yylineno-=c.length-1);var e=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:c?(c.length===d.length?this.yylloc.first_column:0)+d[d.length-c.length].length-c[0].length:this.yylloc.first_column-b},this.options.ranges&&(this.yylloc.range=[e[0],e[0]+this.yyleng-b]),this},more:function(){return this._more=!0,this},less:function(a){this.unput(this.match.slice(a))},pastInput:function(){var a=this.matched.substr(0,this.matched.length-this.match.length);return(a.length>20?"...":"")+a.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var a=this.match;return a.length<20&&(a+=this._input.substr(0,20-a.length)),(a.substr(0,20)+(a.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var a=this.pastInput(),b=new Array(a.length+1).join("-");return a+this.upcomingInput()+"\n"+b+"^"},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var a,b,c,d,e;this._more||(this.yytext="",this.match="");for(var f=this._currentRules(),g=0;g<f.length&&(c=this._input.match(this.rules[f[g]]),!c||b&&!(c[0].length>b[0].length)||(b=c,d=g,this.options.flex));g++);return b?(e=b[0].match(/(?:\r\n?|\n).*/g),e&&(this.yylineno+=e.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:e?e[e.length-1].length-e[e.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+b[0].length},this.yytext+=b[0],this.match+=b[0],this.matches=b,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._input=this._input.slice(b[0].length),this.matched+=b[0],a=this.performAction.call(this,this.yy,this,f[d],this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),a?a:void 0):""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var a=this.next();return"undefined"!=typeof a?a:this.lex()},begin:function(a){this.conditionStack.push(a)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules},topState:function(){return this.conditionStack[this.conditionStack.length-2]},pushState:function(a){this.begin(a)}};return a.options={},a.performAction=function(a,b,c,d){function e(a,c){return b.yytext=b.yytext.substring(a,b.yyleng-c+a)}switch(c){case 0:if("\\\\"===b.yytext.slice(-2)?(e(0,1),this.begin("mu")):"\\"===b.yytext.slice(-1)?(e(0,1),this.begin("emu")):this.begin("mu"),b.yytext)return 15;break;case 1:return 15;case 2:return this.popState(),15;case 3:return this.begin("raw"),15;case 4:return this.popState(),"raw"===this.conditionStack[this.conditionStack.length-1]?15:(e(5,9),"END_RAW_BLOCK");case 5:return 15;case 6:return this.popState(),14;case 7:return 65;case 8:return 68;case 9:return 19;case 10:return this.popState(),this.begin("raw"),23;case 11:return 55;case 12:return 60;case 13:return 29;case 14:return 47;case 15:return this.popState(),44;case 16:return this.popState(),44;case 17:return 34;case 18:return 39;case 19:return 51;case 20:return 48;case 21:this.unput(b.yytext),this.popState(),this.begin("com");break;case 22:return this.popState(),14;case 23:return 48;case 24:return 73;case 25:return 72;case 26:return 72;case 27:return 87;case 28:break;case 29:return this.popState(),54;case 30:return this.popState(),33;case 31:return b.yytext=e(1,2).replace(/\\"/g,'"'),80;case 32:return b.yytext=e(1,2).replace(/\\'/g,"'"),80;case 33:return 85;case 34:return 82;case 35:return 82;case 36:return 83;case 37:return 84;case 38:return 81;case 39:return 75;case 40:return 77;case 41:return 72;case 42:return b.yytext=b.yytext.replace(/\\([\\\]])/g,"$1"),72;case 43:return"INVALID";case 44:return 5}},a.rules=[/^(?:[^\x00]*?(?=(\{\{)))/,/^(?:[^\x00]+)/,/^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/,/^(?:\{\{\{\{(?=[^\/]))/,/^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/,/^(?:[^\x00]+?(?=(\{\{\{\{)))/,/^(?:[\s\S]*?--(~)?\}\})/,/^(?:\()/,/^(?:\))/,/^(?:\{\{\{\{)/,/^(?:\}\}\}\})/,/^(?:\{\{(~)?>)/,/^(?:\{\{(~)?#>)/,/^(?:\{\{(~)?#\*?)/,/^(?:\{\{(~)?\/)/,/^(?:\{\{(~)?\^\s*(~)?\}\})/,/^(?:\{\{(~)?\s*else\s*(~)?\}\})/,/^(?:\{\{(~)?\^)/,/^(?:\{\{(~)?\s*else\b)/,/^(?:\{\{(~)?\{)/,/^(?:\{\{(~)?&)/,/^(?:\{\{(~)?!--)/,/^(?:\{\{(~)?![\s\S]*?\}\})/,/^(?:\{\{(~)?\*?)/,/^(?:=)/,/^(?:\.\.)/,/^(?:\.(?=([=~}\s\/.)|])))/,/^(?:[\/.])/,/^(?:\s+)/,/^(?:\}(~)?\}\})/,/^(?:(~)?\}\})/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:@)/,/^(?:true(?=([~}\s)])))/,/^(?:false(?=([~}\s)])))/,/^(?:undefined(?=([~}\s)])))/,/^(?:null(?=([~}\s)])))/,/^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/,/^(?:as\s+\|)/,/^(?:\|)/,/^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/,/^(?:\[(\\\]|[^\]])*\])/,/^(?:.)/,/^(?:$)/],a.conditions={mu:{rules:[7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],inclusive:!1},emu:{rules:[2],inclusive:!1},com:{rules:[6],inclusive:!1},raw:{rules:[3,4,5],inclusive:!1},INITIAL:{rules:[0,1,44],inclusive:!0}},a}();return b.lexer=c,a.prototype=b,b.Parser=a,new a}();b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(){var a=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];this.options=a}function e(a,b,c){void 0===b&&(b=a.length);var d=a[b-1],e=a[b-2];return d?"ContentStatement"===d.type?(e||!c?/\r?\n\s*?$/:/(^|\r?\n)\s*?$/).test(d.original):void 0:c}function f(a,b,c){void 0===b&&(b=-1);var d=a[b+1],e=a[b+2];return d?"ContentStatement"===d.type?(e||!c?/^\s*?\r?\n/:/^\s*?(\r?\n|$)/).test(d.original):void 0:c}function g(a,b,c){var d=a[null==b?0:b+1];if(d&&"ContentStatement"===d.type&&(c||!d.rightStripped)){var e=d.value;d.value=d.value.replace(c?/^\s+/:/^[ \t]*\r?\n?/,""),d.rightStripped=d.value!==e}}function h(a,b,c){var d=a[null==b?a.length-1:b-1];if(d&&"ContentStatement"===d.type&&(c||!d.leftStripped)){var e=d.value;return d.value=d.value.replace(c?/\s+$/:/[ \t]+$/,""),d.leftStripped=d.value!==e,d.leftStripped}}var i=c(1)["default"];b.__esModule=!0;var j=c(49),k=i(j);d.prototype=new k["default"],d.prototype.Program=function(a){var b=!this.options.ignoreStandalone,c=!this.isRootSeen;this.isRootSeen=!0;for(var d=a.body,i=0,j=d.length;i<j;i++){var k=d[i],l=this.accept(k);if(l){var m=e(d,i,c),n=f(d,i,c),o=l.openStandalone&&m,p=l.closeStandalone&&n,q=l.inlineStandalone&&m&&n;l.close&&g(d,i,!0),l.open&&h(d,i,!0),b&&q&&(g(d,i),h(d,i)&&"PartialStatement"===k.type&&(k.indent=/([ \t]+$)/.exec(d[i-1].original)[1])),b&&o&&(g((k.program||k.inverse).body),h(d,i)),b&&p&&(g(d,i),h((k.inverse||k.program).body))}}return a},d.prototype.BlockStatement=d.prototype.DecoratorBlock=d.prototype.PartialBlockStatement=function(a){this.accept(a.program),this.accept(a.inverse);var b=a.program||a.inverse,c=a.program&&a.inverse,d=c,i=c;if(c&&c.chained)for(d=c.body[0].program;i.chained;)i=i.body[i.body.length-1].program;var j={open:a.openStrip.open,close:a.closeStrip.close,openStandalone:f(b.body),closeStandalone:e((d||b).body)};if(a.openStrip.close&&g(b.body,null,!0),c){var k=a.inverseStrip;k.open&&h(b.body,null,!0),k.close&&g(d.body,null,!0),a.closeStrip.open&&h(i.body,null,!0),!this.options.ignoreStandalone&&e(b.body)&&f(d.body)&&(h(b.body),g(d.body))}else a.closeStrip.open&&h(b.body,null,!0);return j},d.prototype.Decorator=d.prototype.MustacheStatement=function(a){return a.strip},d.prototype.PartialStatement=d.prototype.CommentStatement=function(a){var b=a.strip||{};return{inlineStandalone:!0,open:b.open,close:b.close}},b["default"]=d,a.exports=b["default"]},function(a,b,c){"use strict";function d(){this.parents=[]}function e(a){this.acceptRequired(a,"path"),this.acceptArray(a.params),this.acceptKey(a,"hash")}function f(a){e.call(this,a),this.acceptKey(a,"program"),this.acceptKey(a,"inverse")}function g(a){this.acceptRequired(a,"name"),this.acceptArray(a.params),this.acceptKey(a,"hash")}var h=c(1)["default"];b.__esModule=!0;var i=c(6),j=h(i);d.prototype={constructor:d,mutating:!1,acceptKey:function(a,b){var c=this.accept(a[b]);if(this.mutating){if(c&&!d.prototype[c.type])throw new j["default"]('Unexpected node type "'+c.type+'" found when accepting '+b+" on "+a.type);a[b]=c}},acceptRequired:function(a,b){if(this.acceptKey(a,b),!a[b])throw new j["default"](a.type+" requires "+b)},acceptArray:function(a){for(var b=0,c=a.length;b<c;b++)this.acceptKey(a,b),a[b]||(a.splice(b,1),b--,c--)},accept:function(a){if(a){if(!this[a.type])throw new j["default"]("Unknown type: "+a.type,a);this.current&&this.parents.unshift(this.current),this.current=a;var b=this[a.type](a);return this.current=this.parents.shift(),!this.mutating||b?b:b!==!1?a:void 0}},Program:function(a){this.acceptArray(a.body)},MustacheStatement:e,Decorator:e,BlockStatement:f,DecoratorBlock:f,PartialStatement:g,PartialBlockStatement:function(a){g.call(this,a),this.acceptKey(a,"program")},ContentStatement:function(){},CommentStatement:function(){},SubExpression:e,PathExpression:function(){},StringLiteral:function(){},NumberLiteral:function(){},BooleanLiteral:function(){},UndefinedLiteral:function(){},NullLiteral:function(){},Hash:function(a){this.acceptArray(a.pairs)},HashPair:function(a){this.acceptRequired(a,"value")}},b["default"]=d,a.exports=b["default"]},function(a,b,c){"use strict";function d(a,b){if(b=b.path?b.path.original:b,a.path.original!==b){var c={loc:a.path.loc};throw new q["default"](a.path.original+" doesn't match "+b,c)}}function e(a,b){this.source=a,this.start={line:b.first_line,column:b.first_column},this.end={line:b.last_line,column:b.last_column}}function f(a){return/^\[.*\]$/.test(a)?a.substring(1,a.length-1):a}function g(a,b){return{open:"~"===a.charAt(2),close:"~"===b.charAt(b.length-3)}}function h(a){return a.replace(/^\{\{~?!-?-?/,"").replace(/-?-?~?\}\}$/,"")}function i(a,b,c){c=this.locInfo(c);for(var d=a?"@":"",e=[],f=0,g=0,h=b.length;g<h;g++){var i=b[g].part,j=b[g].original!==i;if(d+=(b[g].separator||"")+i,j||".."!==i&&"."!==i&&"this"!==i)e.push(i);else{if(e.length>0)throw new q["default"]("Invalid path: "+d,{loc:c});".."===i&&f++}}return{type:"PathExpression",data:a,depth:f,parts:e,original:d,loc:c}}function j(a,b,c,d,e,f){var g=d.charAt(3)||d.charAt(2),h="{"!==g&&"&"!==g,i=/\*/.test(d);return{type:i?"Decorator":"MustacheStatement",path:a,params:b,hash:c,escaped:h,strip:e,loc:this.locInfo(f)}}function k(a,b,c,e){d(a,c),e=this.locInfo(e);var f={type:"Program",body:b,strip:{},loc:e};return{type:"BlockStatement",path:a.path,params:a.params,hash:a.hash,program:f,openStrip:{},inverseStrip:{},closeStrip:{},loc:e}}function l(a,b,c,e,f,g){e&&e.path&&d(a,e);var h=/\*/.test(a.open);b.blockParams=a.blockParams;var i=void 0,j=void 0;if(c){if(h)throw new q["default"]("Unexpected inverse block on decorator",c);c.chain&&(c.program.body[0].closeStrip=e.strip),j=c.strip,i=c.program}return f&&(f=i,i=b,b=f),{type:h?"DecoratorBlock":"BlockStatement",path:a.path,params:a.params,hash:a.hash,program:b,inverse:i,openStrip:a.strip,inverseStrip:j,closeStrip:e&&e.strip,loc:this.locInfo(g)}}function m(a,b){if(!b&&a.length){var c=a[0].loc,d=a[a.length-1].loc;c&&d&&(b={source:c.source,start:{line:c.start.line,column:c.start.column},end:{line:d.end.line,column:d.end.column}})}return{type:"Program",body:a,strip:{},loc:b}}function n(a,b,c,e){return d(a,c),{type:"PartialBlockStatement",name:a.path,params:a.params,hash:a.hash,program:b,openStrip:a.strip,closeStrip:c&&c.strip,loc:this.locInfo(e)}}var o=c(1)["default"];b.__esModule=!0,b.SourceLocation=e,b.id=f,b.stripFlags=g,b.stripComment=h,b.preparePath=i,b.prepareMustache=j,b.prepareRawBlock=k,b.prepareBlock=l,b.prepareProgram=m,b.preparePartialBlock=n;var p=c(6),q=o(p)},function(a,b,c){"use strict";function d(){}function e(a,b,c){if(null==a||"string"!=typeof a&&"Program"!==a.type)throw new l["default"]("You must pass a string or Handlebars AST to Handlebars.precompile. You passed "+a);b=b||{},"data"in b||(b.data=!0),b.compat&&(b.useDepths=!0);var d=c.parse(a,b),e=(new c.Compiler).compile(d,b);return(new c.JavaScriptCompiler).compile(e,b)}function f(a,b,c){function d(){var d=c.parse(a,b),e=(new c.Compiler).compile(d,b),f=(new c.JavaScriptCompiler).compile(e,b,void 0,!0);return c.template(f)}function e(a,b){return f||(f=d()),f.call(this,a,b)}if(void 0===b&&(b={}),null==a||"string"!=typeof a&&"Program"!==a.type)throw new l["default"]("You must pass a string or Handlebars AST to Handlebars.compile. You passed "+a);b=m.extend({},b),"data"in b||(b.data=!0),b.compat&&(b.useDepths=!0);var f=void 0;return e._setup=function(a){return f||(f=d()),f._setup(a)},e._child=function(a,b,c,e){return f||(f=d()),f._child(a,b,c,e)},e}function g(a,b){if(a===b)return!0;if(m.isArray(a)&&m.isArray(b)&&a.length===b.length){for(var c=0;c<a.length;c++)if(!g(a[c],b[c]))return!1;return!0}}function h(a){if(!a.path.parts){var b=a.path;a.path={type:"PathExpression",data:!1,depth:0,parts:[b.original+""],original:b.original+"",loc:b.loc}}}var i=c(34)["default"],j=c(1)["default"];b.__esModule=!0,b.Compiler=d,b.precompile=e,b.compile=f;var k=c(6),l=j(k),m=c(5),n=c(45),o=j(n),p=[].slice;d.prototype={compiler:d,equals:function(a){var b=this.opcodes.length;if(a.opcodes.length!==b)return!1;for(var c=0;c<b;c++){var d=this.opcodes[c],e=a.opcodes[c];if(d.opcode!==e.opcode||!g(d.args,e.args))return!1}b=this.children.length;for(var c=0;c<b;c++)if(!this.children[c].equals(a.children[c]))return!1;return!0},guid:0,compile:function(a,b){return this.sourceNode=[],this.opcodes=[],this.children=[],this.options=b,this.stringParams=b.stringParams,this.trackIds=b.trackIds,b.blockParams=b.blockParams||[],b.knownHelpers=m.extend(i(null),{helperMissing:!0,blockHelperMissing:!0,each:!0,"if":!0,unless:!0,"with":!0,log:!0,lookup:!0},b.knownHelpers),this.accept(a)},compileProgram:function(a){var b=new this.compiler,c=b.compile(a,this.options),d=this.guid++;return this.usePartial=this.usePartial||c.usePartial,this.children[d]=c,this.useDepths=this.useDepths||c.useDepths,d},accept:function(a){if(!this[a.type])throw new l["default"]("Unknown type: "+a.type,a);this.sourceNode.unshift(a);var b=this[a.type](a);return this.sourceNode.shift(),b},Program:function(a){this.options.blockParams.unshift(a.blockParams);for(var b=a.body,c=b.length,d=0;d<c;d++)this.accept(b[d]);return this.options.blockParams.shift(),this.isSimple=1===c,this.blockParams=a.blockParams?a.blockParams.length:0,this},BlockStatement:function(a){h(a);var b=a.program,c=a.inverse;b=b&&this.compileProgram(b),c=c&&this.compileProgram(c);var d=this.classifySexpr(a);"helper"===d?this.helperSexpr(a,b,c):"simple"===d?(this.simpleSexpr(a),this.opcode("pushProgram",b),this.opcode("pushProgram",c),this.opcode("emptyHash"),this.opcode("blockValue",a.path.original)):(this.ambiguousSexpr(a,b,c),this.opcode("pushProgram",b),this.opcode("pushProgram",c),this.opcode("emptyHash"),this.opcode("ambiguousBlockValue")),this.opcode("append")},DecoratorBlock:function(a){var b=a.program&&this.compileProgram(a.program),c=this.setupFullMustacheParams(a,b,void 0),d=a.path;this.useDecorators=!0,this.opcode("registerDecorator",c.length,d.original)},PartialStatement:function(a){this.usePartial=!0;var b=a.program;b&&(b=this.compileProgram(a.program));var c=a.params;if(c.length>1)throw new l["default"]("Unsupported number of partial arguments: "+c.length,a);c.length||(this.options.explicitPartialContext?this.opcode("pushLiteral","undefined"):c.push({type:"PathExpression",parts:[],depth:0}));var d=a.name.original,e="SubExpression"===a.name.type;e&&this.accept(a.name),this.setupFullMustacheParams(a,b,void 0,!0);var f=a.indent||"";this.options.preventIndent&&f&&(this.opcode("appendContent",f),f=""),this.opcode("invokePartial",e,d,f),this.opcode("append")},PartialBlockStatement:function(a){this.PartialStatement(a)},MustacheStatement:function(a){this.SubExpression(a),a.escaped&&!this.options.noEscape?this.opcode("appendEscaped"):this.opcode("append")},Decorator:function(a){this.DecoratorBlock(a)},ContentStatement:function(a){a.value&&this.opcode("appendContent",a.value)},CommentStatement:function(){},SubExpression:function(a){h(a);var b=this.classifySexpr(a);"simple"===b?this.simpleSexpr(a):"helper"===b?this.helperSexpr(a):this.ambiguousSexpr(a)},ambiguousSexpr:function(a,b,c){var d=a.path,e=d.parts[0],f=null!=b||null!=c;this.opcode("getContext",d.depth),this.opcode("pushProgram",b),this.opcode("pushProgram",c),d.strict=!0,this.accept(d),this.opcode("invokeAmbiguous",e,f)},simpleSexpr:function(a){var b=a.path;b.strict=!0,this.accept(b),this.opcode("resolvePossibleLambda")},helperSexpr:function(a,b,c){var d=this.setupFullMustacheParams(a,b,c),e=a.path,f=e.parts[0];if(this.options.knownHelpers[f])this.opcode("invokeKnownHelper",d.length,f);else{if(this.options.knownHelpersOnly)throw new l["default"]("You specified knownHelpersOnly, but used the unknown helper "+f,a);e.strict=!0,e.falsy=!0,this.accept(e),this.opcode("invokeHelper",d.length,e.original,o["default"].helpers.simpleId(e))}},PathExpression:function(a){this.addDepth(a.depth),this.opcode("getContext",a.depth);var b=a.parts[0],c=o["default"].helpers.scopedId(a),d=!a.depth&&!c&&this.blockParamIndex(b);d?this.opcode("lookupBlockParam",d,a.parts):b?a.data?(this.options.data=!0,this.opcode("lookupData",a.depth,a.parts,a.strict)):this.opcode("lookupOnContext",a.parts,a.falsy,a.strict,c):this.opcode("pushContext")},StringLiteral:function(a){this.opcode("pushString",a.value)},NumberLiteral:function(a){this.opcode("pushLiteral",a.value)},BooleanLiteral:function(a){this.opcode("pushLiteral",a.value)},UndefinedLiteral:function(){this.opcode("pushLiteral","undefined")},NullLiteral:function(){this.opcode("pushLiteral","null")},Hash:function(a){var b=a.pairs,c=0,d=b.length;for(this.opcode("pushHash");c<d;c++)this.pushParam(b[c].value);for(;c--;)this.opcode("assignToHash",b[c].key);this.opcode("popHash")},opcode:function(a){this.opcodes.push({opcode:a,args:p.call(arguments,1),loc:this.sourceNode[0].loc})},addDepth:function(a){a&&(this.useDepths=!0)},classifySexpr:function(a){var b=o["default"].helpers.simpleId(a.path),c=b&&!!this.blockParamIndex(a.path.parts[0]),d=!c&&o["default"].helpers.helperExpression(a),e=!c&&(d||b);if(e&&!d){var f=a.path.parts[0],g=this.options;g.knownHelpers[f]?d=!0:g.knownHelpersOnly&&(e=!1)}return d?"helper":e?"ambiguous":"simple"},pushParams:function(a){for(var b=0,c=a.length;b<c;b++)this.pushParam(a[b])},pushParam:function(a){var b=null!=a.value?a.value:a.original||"";if(this.stringParams)b.replace&&(b=b.replace(/^(\.?\.\/)*/g,"").replace(/\//g,".")),a.depth&&this.addDepth(a.depth),this.opcode("getContext",a.depth||0),this.opcode("pushStringParam",b,a.type),"SubExpression"===a.type&&this.accept(a);else{if(this.trackIds){var c=void 0;if(!a.parts||o["default"].helpers.scopedId(a)||a.depth||(c=this.blockParamIndex(a.parts[0])),c){var d=a.parts.slice(1).join(".");this.opcode("pushId","BlockParam",c,d)}else b=a.original||b,b.replace&&(b=b.replace(/^this(?:\.|$)/,"").replace(/^\.\//,"").replace(/^\.$/,"")),this.opcode("pushId",a.type,b)}this.accept(a)}},setupFullMustacheParams:function(a,b,c,d){var e=a.params;return this.pushParams(e),this.opcode("pushProgram",b),this.opcode("pushProgram",c),a.hash?this.accept(a.hash):this.opcode("emptyHash",d),e},blockParamIndex:function(a){for(var b=0,c=this.options.blockParams.length;b<c;b++){var d=this.options.blockParams[b],e=d&&m.indexOf(d,a);if(d&&e>=0)return[b,e]}}}},function(a,b,c){"use strict";function d(a){this.value=a}function e(){}function f(a,b,c,d){var e=b.popStack(),f=0,g=c.length;for(a&&g--;f<g;f++)e=b.nameLookup(e,c[f],d);return a?[b.aliasable("container.strict"),"(",e,", ",b.quotedString(c[f]),", ",JSON.stringify(b.source.currentLocation)," )"]:e}var g=c(13)["default"],h=c(1)["default"];b.__esModule=!0;var i=c(4),j=c(6),k=h(j),l=c(5),m=c(53),n=h(m);e.prototype={nameLookup:function(a,b){return this.internalNameLookup(a,b)},depthedLookup:function(a){return[this.aliasable("container.lookup"),'(depths, "',a,'")']},compilerInfo:function(){var a=i.COMPILER_REVISION,b=i.REVISION_CHANGES[a];return[a,b]},appendToBuffer:function(a,b,c){return l.isArray(a)||(a=[a]),a=this.source.wrap(a,b),this.environment.isSimple?["return ",a,";"]:c?["buffer += ",a,";"]:(a.appendToBuffer=!0,a)},initializeBuffer:function(){return this.quotedString("")},internalNameLookup:function(a,b){return this.lookupPropertyFunctionIsUsed=!0,["lookupProperty(",a,",",JSON.stringify(b),")"]},lookupPropertyFunctionIsUsed:!1,compile:function(a,b,c,d){this.environment=a,this.options=b,this.stringParams=this.options.stringParams,this.trackIds=this.options.trackIds,this.precompile=!d,this.name=this.environment.name,this.isChild=!!c,this.context=c||{decorators:[],programs:[],environments:[]},this.preamble(),this.stackSlot=0,this.stackVars=[],this.aliases={},this.registers={list:[]},this.hashes=[],this.compileStack=[],this.inlineStack=[],this.blockParams=[],this.compileChildren(a,b),this.useDepths=this.useDepths||a.useDepths||a.useDecorators||this.options.compat,this.useBlockParams=this.useBlockParams||a.useBlockParams;var e=a.opcodes,f=void 0,g=void 0,h=void 0,i=void 0;for(h=0,i=e.length;h<i;h++)f=e[h],this.source.currentLocation=f.loc,g=g||f.loc,this[f.opcode].apply(this,f.args);if(this.source.currentLocation=g,this.pushSource(""),this.stackSlot||this.inlineStack.length||this.compileStack.length)throw new k["default"]("Compile completed with content left on stack");this.decorators.isEmpty()?this.decorators=void 0:(this.useDecorators=!0,this.decorators.prepend(["var decorators = container.decorators, ",this.lookupPropertyFunctionVarDeclaration(),";\n"]),
29
+ this.decorators.push("return fn;"),d?this.decorators=Function.apply(this,["fn","props","container","depth0","data","blockParams","depths",this.decorators.merge()]):(this.decorators.prepend("function(fn, props, container, depth0, data, blockParams, depths) {\n"),this.decorators.push("}\n"),this.decorators=this.decorators.merge()));var j=this.createFunctionContext(d);if(this.isChild)return j;var l={compiler:this.compilerInfo(),main:j};this.decorators&&(l.main_d=this.decorators,l.useDecorators=!0);var m=this.context,n=m.programs,o=m.decorators;for(h=0,i=n.length;h<i;h++)n[h]&&(l[h]=n[h],o[h]&&(l[h+"_d"]=o[h],l.useDecorators=!0));return this.environment.usePartial&&(l.usePartial=!0),this.options.data&&(l.useData=!0),this.useDepths&&(l.useDepths=!0),this.useBlockParams&&(l.useBlockParams=!0),this.options.compat&&(l.compat=!0),d?l.compilerOptions=this.options:(l.compiler=JSON.stringify(l.compiler),this.source.currentLocation={start:{line:1,column:0}},l=this.objectLiteral(l),b.srcName?(l=l.toStringWithSourceMap({file:b.destName}),l.map=l.map&&l.map.toString()):l=l.toString()),l},preamble:function(){this.lastContext=0,this.source=new n["default"](this.options.srcName),this.decorators=new n["default"](this.options.srcName)},createFunctionContext:function(a){var b=this,c="",d=this.stackVars.concat(this.registers.list);d.length>0&&(c+=", "+d.join(", "));var e=0;g(this.aliases).forEach(function(a){var d=b.aliases[a];d.children&&d.referenceCount>1&&(c+=", alias"+ ++e+"="+a,d.children[0]="alias"+e)}),this.lookupPropertyFunctionIsUsed&&(c+=", "+this.lookupPropertyFunctionVarDeclaration());var f=["container","depth0","helpers","partials","data"];(this.useBlockParams||this.useDepths)&&f.push("blockParams"),this.useDepths&&f.push("depths");var h=this.mergeSource(c);return a?(f.push(h),Function.apply(this,f)):this.source.wrap(["function(",f.join(","),") {\n ",h,"}"])},mergeSource:function(a){var b=this.environment.isSimple,c=!this.forceBuffer,d=void 0,e=void 0,f=void 0,g=void 0;return this.source.each(function(a){a.appendToBuffer?(f?a.prepend(" + "):f=a,g=a):(f&&(e?f.prepend("buffer += "):d=!0,g.add(";"),f=g=void 0),e=!0,b||(c=!1))}),c?f?(f.prepend("return "),g.add(";")):e||this.source.push('return "";'):(a+=", buffer = "+(d?"":this.initializeBuffer()),f?(f.prepend("return buffer + "),g.add(";")):this.source.push("return buffer;")),a&&this.source.prepend("var "+a.substring(2)+(d?"":";\n")),this.source.merge()},lookupPropertyFunctionVarDeclaration:function(){return"\n lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n }\n ".trim()},blockValue:function(a){var b=this.aliasable("container.hooks.blockHelperMissing"),c=[this.contextName(0)];this.setupHelperArgs(a,0,c);var d=this.popStack();c.splice(1,0,d),this.push(this.source.functionCall(b,"call",c))},ambiguousBlockValue:function(){var a=this.aliasable("container.hooks.blockHelperMissing"),b=[this.contextName(0)];this.setupHelperArgs("",0,b,!0),this.flushInline();var c=this.topStack();b.splice(1,0,c),this.pushSource(["if (!",this.lastHelper,") { ",c," = ",this.source.functionCall(a,"call",b),"}"])},appendContent:function(a){this.pendingContent?a=this.pendingContent+a:this.pendingLocation=this.source.currentLocation,this.pendingContent=a},append:function(){if(this.isInline())this.replaceStack(function(a){return[" != null ? ",a,' : ""']}),this.pushSource(this.appendToBuffer(this.popStack()));else{var a=this.popStack();this.pushSource(["if (",a," != null) { ",this.appendToBuffer(a,void 0,!0)," }"]),this.environment.isSimple&&this.pushSource(["else { ",this.appendToBuffer("''",void 0,!0)," }"])}},appendEscaped:function(){this.pushSource(this.appendToBuffer([this.aliasable("container.escapeExpression"),"(",this.popStack(),")"]))},getContext:function(a){this.lastContext=a},pushContext:function(){this.pushStackLiteral(this.contextName(this.lastContext))},lookupOnContext:function(a,b,c,d){var e=0;d||!this.options.compat||this.lastContext?this.pushContext():this.push(this.depthedLookup(a[e++])),this.resolvePath("context",a,e,b,c)},lookupBlockParam:function(a,b){this.useBlockParams=!0,this.push(["blockParams[",a[0],"][",a[1],"]"]),this.resolvePath("context",b,1)},lookupData:function(a,b,c){a?this.pushStackLiteral("container.data(data, "+a+")"):this.pushStackLiteral("data"),this.resolvePath("data",b,0,!0,c)},resolvePath:function(a,b,c,d,e){var g=this;if(this.options.strict||this.options.assumeObjects)return void this.push(f(this.options.strict&&e,this,b,a));for(var h=b.length;c<h;c++)this.replaceStack(function(e){var f=g.nameLookup(e,b[c],a);return d?[" && ",f]:[" != null ? ",f," : ",e]})},resolvePossibleLambda:function(){this.push([this.aliasable("container.lambda"),"(",this.popStack(),", ",this.contextName(0),")"])},pushStringParam:function(a,b){this.pushContext(),this.pushString(b),"SubExpression"!==b&&("string"==typeof a?this.pushString(a):this.pushStackLiteral(a))},emptyHash:function(a){this.trackIds&&this.push("{}"),this.stringParams&&(this.push("{}"),this.push("{}")),this.pushStackLiteral(a?"undefined":"{}")},pushHash:function(){this.hash&&this.hashes.push(this.hash),this.hash={values:{},types:[],contexts:[],ids:[]}},popHash:function(){var a=this.hash;this.hash=this.hashes.pop(),this.trackIds&&this.push(this.objectLiteral(a.ids)),this.stringParams&&(this.push(this.objectLiteral(a.contexts)),this.push(this.objectLiteral(a.types))),this.push(this.objectLiteral(a.values))},pushString:function(a){this.pushStackLiteral(this.quotedString(a))},pushLiteral:function(a){this.pushStackLiteral(a)},pushProgram:function(a){null!=a?this.pushStackLiteral(this.programExpression(a)):this.pushStackLiteral(null)},registerDecorator:function(a,b){var c=this.nameLookup("decorators",b,"decorator"),d=this.setupHelperArgs(b,a);this.decorators.push(["fn = ",this.decorators.functionCall(c,"",["fn","props","container",d])," || fn;"])},invokeHelper:function(a,b,c){var d=this.popStack(),e=this.setupHelper(a,b),f=[];c&&f.push(e.name),f.push(d),this.options.strict||f.push(this.aliasable("container.hooks.helperMissing"));var g=["(",this.itemsSeparatedBy(f,"||"),")"],h=this.source.functionCall(g,"call",e.callParams);this.push(h)},itemsSeparatedBy:function(a,b){var c=[];c.push(a[0]);for(var d=1;d<a.length;d++)c.push(b,a[d]);return c},invokeKnownHelper:function(a,b){var c=this.setupHelper(a,b);this.push(this.source.functionCall(c.name,"call",c.callParams))},invokeAmbiguous:function(a,b){this.useRegister("helper");var c=this.popStack();this.emptyHash();var d=this.setupHelper(0,a,b),e=this.lastHelper=this.nameLookup("helpers",a,"helper"),f=["(","(helper = ",e," || ",c,")"];this.options.strict||(f[0]="(helper = ",f.push(" != null ? helper : ",this.aliasable("container.hooks.helperMissing"))),this.push(["(",f,d.paramsInit?["),(",d.paramsInit]:[],"),","(typeof helper === ",this.aliasable('"function"')," ? ",this.source.functionCall("helper","call",d.callParams)," : helper))"])},invokePartial:function(a,b,c){var d=[],e=this.setupParams(b,1,d);a&&(b=this.popStack(),delete e.name),c&&(e.indent=JSON.stringify(c)),e.helpers="helpers",e.partials="partials",e.decorators="container.decorators",a?d.unshift(b):d.unshift(this.nameLookup("partials",b,"partial")),this.options.compat&&(e.depths="depths"),e=this.objectLiteral(e),d.push(e),this.push(this.source.functionCall("container.invokePartial","",d))},assignToHash:function(a){var b=this.popStack(),c=void 0,d=void 0,e=void 0;this.trackIds&&(e=this.popStack()),this.stringParams&&(d=this.popStack(),c=this.popStack());var f=this.hash;c&&(f.contexts[a]=c),d&&(f.types[a]=d),e&&(f.ids[a]=e),f.values[a]=b},pushId:function(a,b,c){"BlockParam"===a?this.pushStackLiteral("blockParams["+b[0]+"].path["+b[1]+"]"+(c?" + "+JSON.stringify("."+c):"")):"PathExpression"===a?this.pushString(b):"SubExpression"===a?this.pushStackLiteral("true"):this.pushStackLiteral("null")},compiler:e,compileChildren:function(a,b){for(var c=a.children,d=void 0,e=void 0,f=0,g=c.length;f<g;f++){d=c[f],e=new this.compiler;var h=this.matchExistingProgram(d);if(null==h){this.context.programs.push("");var i=this.context.programs.length;d.index=i,d.name="program"+i,this.context.programs[i]=e.compile(d,b,this.context,!this.precompile),this.context.decorators[i]=e.decorators,this.context.environments[i]=d,this.useDepths=this.useDepths||e.useDepths,this.useBlockParams=this.useBlockParams||e.useBlockParams,d.useDepths=this.useDepths,d.useBlockParams=this.useBlockParams}else d.index=h.index,d.name="program"+h.index,this.useDepths=this.useDepths||h.useDepths,this.useBlockParams=this.useBlockParams||h.useBlockParams}},matchExistingProgram:function(a){for(var b=0,c=this.context.environments.length;b<c;b++){var d=this.context.environments[b];if(d&&d.equals(a))return d}},programExpression:function(a){var b=this.environment.children[a],c=[b.index,"data",b.blockParams];return(this.useBlockParams||this.useDepths)&&c.push("blockParams"),this.useDepths&&c.push("depths"),"container.program("+c.join(", ")+")"},useRegister:function(a){this.registers[a]||(this.registers[a]=!0,this.registers.list.push(a))},push:function(a){return a instanceof d||(a=this.source.wrap(a)),this.inlineStack.push(a),a},pushStackLiteral:function(a){this.push(new d(a))},pushSource:function(a){this.pendingContent&&(this.source.push(this.appendToBuffer(this.source.quotedString(this.pendingContent),this.pendingLocation)),this.pendingContent=void 0),a&&this.source.push(a)},replaceStack:function(a){var b=["("],c=void 0,e=void 0,f=void 0;if(!this.isInline())throw new k["default"]("replaceStack on non-inline");var g=this.popStack(!0);if(g instanceof d)c=[g.value],b=["(",c],f=!0;else{e=!0;var h=this.incrStack();b=["((",this.push(h)," = ",g,")"],c=this.topStack()}var i=a.call(this,c);f||this.popStack(),e&&this.stackSlot--,this.push(b.concat(i,")"))},incrStack:function(){return this.stackSlot++,this.stackSlot>this.stackVars.length&&this.stackVars.push("stack"+this.stackSlot),this.topStackName()},topStackName:function(){return"stack"+this.stackSlot},flushInline:function(){var a=this.inlineStack;this.inlineStack=[];for(var b=0,c=a.length;b<c;b++){var e=a[b];if(e instanceof d)this.compileStack.push(e);else{var f=this.incrStack();this.pushSource([f," = ",e,";"]),this.compileStack.push(f)}}},isInline:function(){return this.inlineStack.length},popStack:function(a){var b=this.isInline(),c=(b?this.inlineStack:this.compileStack).pop();if(!a&&c instanceof d)return c.value;if(!b){if(!this.stackSlot)throw new k["default"]("Invalid stack pop");this.stackSlot--}return c},topStack:function(){var a=this.isInline()?this.inlineStack:this.compileStack,b=a[a.length-1];return b instanceof d?b.value:b},contextName:function(a){return this.useDepths&&a?"depths["+a+"]":"depth"+a},quotedString:function(a){return this.source.quotedString(a)},objectLiteral:function(a){return this.source.objectLiteral(a)},aliasable:function(a){var b=this.aliases[a];return b?(b.referenceCount++,b):(b=this.aliases[a]=this.source.wrap(a),b.aliasable=!0,b.referenceCount=1,b)},setupHelper:function(a,b,c){var d=[],e=this.setupHelperArgs(b,a,d,c),f=this.nameLookup("helpers",b,"helper"),g=this.aliasable(this.contextName(0)+" != null ? "+this.contextName(0)+" : (container.nullContext || {})");return{params:d,paramsInit:e,name:f,callParams:[g].concat(d)}},setupParams:function(a,b,c){var d={},e=[],f=[],g=[],h=!c,i=void 0;h&&(c=[]),d.name=this.quotedString(a),d.hash=this.popStack(),this.trackIds&&(d.hashIds=this.popStack()),this.stringParams&&(d.hashTypes=this.popStack(),d.hashContexts=this.popStack());var j=this.popStack(),k=this.popStack();(k||j)&&(d.fn=k||"container.noop",d.inverse=j||"container.noop");for(var l=b;l--;)i=this.popStack(),c[l]=i,this.trackIds&&(g[l]=this.popStack()),this.stringParams&&(f[l]=this.popStack(),e[l]=this.popStack());return h&&(d.args=this.source.generateArray(c)),this.trackIds&&(d.ids=this.source.generateArray(g)),this.stringParams&&(d.types=this.source.generateArray(f),d.contexts=this.source.generateArray(e)),this.options.data&&(d.data="data"),this.useBlockParams&&(d.blockParams="blockParams"),d},setupHelperArgs:function(a,b,c,d){var e=this.setupParams(a,b,c);return e.loc=JSON.stringify(this.source.currentLocation),e=this.objectLiteral(e),d?(this.useRegister("options"),c.push("options"),["options=",e]):c?(c.push(e),""):e}},function(){for(var a="break else new var case finally return void catch for switch while continue function this with default if throw delete in try do instanceof typeof abstract enum int short boolean export interface static byte extends long super char final native synchronized class float package throws const goto private transient debugger implements protected volatile double import public let yield await null true false".split(" "),b=e.RESERVED_WORDS={},c=0,d=a.length;c<d;c++)b[a[c]]=!0}(),e.isValidJavaScriptVariableName=function(a){return!e.RESERVED_WORDS[a]&&/^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(a)},b["default"]=e,a.exports=b["default"]},function(a,b,c){"use strict";function d(a,b,c){if(g.isArray(a)){for(var d=[],e=0,f=a.length;e<f;e++)d.push(b.wrap(a[e],c));return d}return"boolean"==typeof a||"number"==typeof a?a+"":a}function e(a){this.srcFile=a,this.source=[]}var f=c(13)["default"];b.__esModule=!0;var g=c(5),h=void 0;try{}catch(i){}h||(h=function(a,b,c,d){this.src="",d&&this.add(d)},h.prototype={add:function(a){g.isArray(a)&&(a=a.join("")),this.src+=a},prepend:function(a){g.isArray(a)&&(a=a.join("")),this.src=a+this.src},toStringWithSourceMap:function(){return{code:this.toString()}},toString:function(){return this.src}}),e.prototype={isEmpty:function(){return!this.source.length},prepend:function(a,b){this.source.unshift(this.wrap(a,b))},push:function(a,b){this.source.push(this.wrap(a,b))},merge:function(){var a=this.empty();return this.each(function(b){a.add([" ",b,"\n"])}),a},each:function(a){for(var b=0,c=this.source.length;b<c;b++)a(this.source[b])},empty:function(){var a=this.currentLocation||{start:{}};return new h(a.start.line,a.start.column,this.srcFile)},wrap:function(a){var b=arguments.length<=1||void 0===arguments[1]?this.currentLocation||{start:{}}:arguments[1];return a instanceof h?a:(a=d(a,this,b),new h(b.start.line,b.start.column,this.srcFile,a))},functionCall:function(a,b,c){return c=this.generateList(c),this.wrap([a,b?"."+b+"(":"(",c,")"])},quotedString:function(a){return'"'+(a+"").replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")+'"'},objectLiteral:function(a){var b=this,c=[];f(a).forEach(function(e){var f=d(a[e],b);"undefined"!==f&&c.push([b.quotedString(e),":",f])});var e=this.generateList(c);return e.prepend("{"),e.add("}"),e},generateList:function(a){for(var b=this.empty(),c=0,e=a.length;c<e;c++)c&&b.add(","),b.add(d(a[c],this));return b},generateArray:function(a){var b=this.generateList(a);return b.prepend("["),b.add("]"),b}},b["default"]=e,a.exports=b["default"]}])});
js/handlebars/handlebars.runtime.js CHANGED
@@ -1,9 +1,9 @@
1
  /**!
2
 
3
  @license
4
- handlebars v4.5.3
5
 
6
- Copyright (C) 2011-2017 by Yehuda Katz
7
 
8
  Permission is hereby granted, free of charge, to any person obtaining a copy
9
  of this software and associated documentation files (the "Software"), to deal
@@ -95,7 +95,7 @@ return /******/ (function(modules) { // webpackBootstrap
95
  // Each of these augment the Handlebars object. No need to setup here.
96
  // (This is done to easily share code between commonjs and browse envs)
97
 
98
- var _handlebarsSafeString = __webpack_require__(32);
99
 
100
  var _handlebarsSafeString2 = _interopRequireDefault(_handlebarsSafeString);
101
 
@@ -107,11 +107,11 @@ return /******/ (function(modules) { // webpackBootstrap
107
 
108
  var Utils = _interopRequireWildcard(_handlebarsUtils);
109
 
110
- var _handlebarsRuntime = __webpack_require__(33);
111
 
112
  var runtime = _interopRequireWildcard(_handlebarsRuntime);
113
 
114
- var _handlebarsNoConflict = __webpack_require__(38);
115
 
116
  var _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);
117
 
@@ -207,7 +207,9 @@ return /******/ (function(modules) { // webpackBootstrap
207
 
208
  var _logger2 = _interopRequireDefault(_logger);
209
 
210
- var VERSION = '4.5.3';
 
 
211
  exports.VERSION = VERSION;
212
  var COMPILER_REVISION = 8;
213
  exports.COMPILER_REVISION = COMPILER_REVISION;
@@ -283,6 +285,13 @@ return /******/ (function(modules) { // webpackBootstrap
283
  },
284
  unregisterDecorator: function unregisterDecorator(name) {
285
  delete this.decorators[name];
 
 
 
 
 
 
 
286
  }
287
  };
288
 
@@ -306,7 +315,6 @@ return /******/ (function(modules) { // webpackBootstrap
306
  exports.createFrame = createFrame;
307
  exports.blockParams = blockParams;
308
  exports.appendContextPath = appendContextPath;
309
-
310
  var escape = {
311
  '&': '&amp;',
312
  '<': '&lt;',
@@ -430,7 +438,6 @@ return /******/ (function(modules) { // webpackBootstrap
430
  var _Object$defineProperty = __webpack_require__(6)['default'];
431
 
432
  exports.__esModule = true;
433
-
434
  var errorProps = ['description', 'fileName', 'lineNumber', 'endLineNumber', 'message', 'name', 'number', 'stack'];
435
 
436
  function Exception(message, node) {
@@ -978,7 +985,11 @@ return /******/ (function(modules) { // webpackBootstrap
978
  if (arguments.length != 2) {
979
  throw new _exception2['default']('#unless requires exactly one argument');
980
  }
981
- return instance.helpers['if'].call(this, conditional, { fn: options.inverse, inverse: options.fn, hash: options.hash });
 
 
 
 
982
  });
983
  };
984
 
@@ -1021,22 +1032,19 @@ return /******/ (function(modules) { // webpackBootstrap
1021
  'use strict';
1022
 
1023
  exports.__esModule = true;
1024
- var dangerousPropertyRegex = /^(constructor|__defineGetter__|__defineSetter__|__lookupGetter__|__proto__)$/;
1025
-
1026
- exports.dangerousPropertyRegex = dangerousPropertyRegex;
1027
 
1028
  exports['default'] = function (instance) {
1029
- instance.registerHelper('lookup', function (obj, field) {
1030
  if (!obj) {
 
1031
  return obj;
1032
  }
1033
- if (dangerousPropertyRegex.test(String(field)) && !Object.prototype.propertyIsEnumerable.call(obj, field)) {
1034
- return undefined;
1035
- }
1036
- return obj[field];
1037
  });
1038
  };
1039
 
 
 
1040
  /***/ }),
1041
  /* 28 */
1042
  /***/ (function(module, exports, __webpack_require__) {
@@ -1169,8 +1177,8 @@ return /******/ (function(modules) { // webpackBootstrap
1169
 
1170
  if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) {
1171
  var method = logger.methodMap[level];
 
1172
  if (!console[method]) {
1173
- // eslint-disable-line no-console
1174
  method = 'log';
1175
  }
1176
 
@@ -1188,6 +1196,129 @@ return /******/ (function(modules) { // webpackBootstrap
1188
 
1189
  /***/ }),
1190
  /* 32 */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1191
  /***/ (function(module, exports) {
1192
 
1193
  // Build out our basic SafeString type
@@ -1206,12 +1337,14 @@ return /******/ (function(modules) { // webpackBootstrap
1206
  module.exports = exports['default'];
1207
 
1208
  /***/ }),
1209
- /* 33 */
1210
  /***/ (function(module, exports, __webpack_require__) {
1211
 
1212
  'use strict';
1213
 
1214
- var _Object$seal = __webpack_require__(34)['default'];
 
 
1215
 
1216
  var _interopRequireWildcard = __webpack_require__(1)['default'];
1217
 
@@ -1237,6 +1370,10 @@ return /******/ (function(modules) { // webpackBootstrap
1237
 
1238
  var _helpers = __webpack_require__(9);
1239
 
 
 
 
 
1240
  function checkRevision(compilerInfo) {
1241
  var compilerRevision = compilerInfo && compilerInfo[0] || 1,
1242
  currentRevision = _base.COMPILER_REVISION;
@@ -1256,7 +1393,6 @@ return /******/ (function(modules) { // webpackBootstrap
1256
  }
1257
 
1258
  function template(templateSpec, env) {
1259
-
1260
  /* istanbul ignore next */
1261
  if (!env) {
1262
  throw new _exception2['default']('No environment passed to template');
@@ -1283,13 +1419,16 @@ return /******/ (function(modules) { // webpackBootstrap
1283
  }
1284
  partial = env.VM.resolvePartial.call(this, partial, context, options);
1285
 
1286
- var optionsWithHooks = Utils.extend({}, options, { hooks: this.hooks });
 
 
 
1287
 
1288
- var result = env.VM.invokePartial.call(this, partial, context, optionsWithHooks);
1289
 
1290
  if (result == null && env.compile) {
1291
  options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);
1292
- result = options.partials[options.name](context, optionsWithHooks);
1293
  }
1294
  if (result != null) {
1295
  if (options.indent) {
@@ -1313,14 +1452,31 @@ return /******/ (function(modules) { // webpackBootstrap
1313
  var container = {
1314
  strict: function strict(obj, name, loc) {
1315
  if (!obj || !(name in obj)) {
1316
- throw new _exception2['default']('"' + name + '" not defined in ' + obj, { loc: loc });
 
 
1317
  }
1318
  return obj[name];
1319
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1320
  lookup: function lookup(depths, name) {
1321
  var len = depths.length;
1322
  for (var i = 0; i < len; i++) {
1323
- if (depths[i] && depths[i][name] != null) {
 
1324
  return depths[i][name];
1325
  }
1326
  }
@@ -1356,6 +1512,15 @@ return /******/ (function(modules) { // webpackBootstrap
1356
  }
1357
  return value;
1358
  },
 
 
 
 
 
 
 
 
 
1359
  // An empty object to use as replacement for null-contexts
1360
  nullContext: _Object$seal({}),
1361
 
@@ -1385,28 +1550,35 @@ return /******/ (function(modules) { // webpackBootstrap
1385
  function main(context /*, options*/) {
1386
  return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths);
1387
  }
 
1388
  main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams);
1389
  return main(context, options);
1390
  }
 
1391
  ret.isTop = true;
1392
 
1393
  ret._setup = function (options) {
1394
  if (!options.partial) {
1395
- container.helpers = Utils.extend({}, env.helpers, options.helpers);
 
 
1396
 
1397
  if (templateSpec.usePartial) {
1398
- container.partials = Utils.extend({}, env.partials, options.partials);
 
1399
  }
1400
  if (templateSpec.usePartial || templateSpec.useDecorators) {
1401
  container.decorators = Utils.extend({}, env.decorators, options.decorators);
1402
  }
1403
 
1404
  container.hooks = {};
 
1405
 
1406
  var keepHelperInHelpers = options.allowCallsToHelperMissing || templateWasPrecompiledWithCompilerV7;
1407
  _helpers.moveHelperToHooks(container, 'helperMissing', keepHelperInHelpers);
1408
  _helpers.moveHelperToHooks(container, 'blockHelperMissing', keepHelperInHelpers);
1409
  } else {
 
1410
  container.helpers = options.helpers;
1411
  container.partials = options.partials;
1412
  container.decorators = options.decorators;
@@ -1527,25 +1699,39 @@ return /******/ (function(modules) { // webpackBootstrap
1527
  return prog;
1528
  }
1529
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1530
  /***/ }),
1531
- /* 34 */
1532
  /***/ (function(module, exports, __webpack_require__) {
1533
 
1534
- module.exports = { "default": __webpack_require__(35), __esModule: true };
1535
 
1536
  /***/ }),
1537
- /* 35 */
1538
  /***/ (function(module, exports, __webpack_require__) {
1539
 
1540
- __webpack_require__(36);
1541
  module.exports = __webpack_require__(20).Object.seal;
1542
 
1543
  /***/ }),
1544
- /* 36 */
1545
  /***/ (function(module, exports, __webpack_require__) {
1546
 
1547
  // 19.1.2.17 Object.seal(O)
1548
- var isObject = __webpack_require__(37);
1549
 
1550
  __webpack_require__(17)('seal', function($seal){
1551
  return function seal(it){
@@ -1554,7 +1740,7 @@ return /******/ (function(modules) { // webpackBootstrap
1554
  });
1555
 
1556
  /***/ }),
1557
- /* 37 */
1558
  /***/ (function(module, exports) {
1559
 
1560
  module.exports = function(it){
@@ -1562,12 +1748,34 @@ return /******/ (function(modules) { // webpackBootstrap
1562
  };
1563
 
1564
  /***/ }),
1565
- /* 38 */
1566
  /***/ (function(module, exports) {
1567
 
1568
- /* WEBPACK VAR INJECTION */(function(global) {/* global window */
1569
  'use strict';
1570
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1571
  exports.__esModule = true;
1572
 
1573
  exports['default'] = function (Handlebars) {
1
  /**!
2
 
3
  @license
4
+ handlebars v4.7.3
5
 
6
+ Copyright (C) 2011-2019 by Yehuda Katz
7
 
8
  Permission is hereby granted, free of charge, to any person obtaining a copy
9
  of this software and associated documentation files (the "Software"), to deal
95
  // Each of these augment the Handlebars object. No need to setup here.
96
  // (This is done to easily share code between commonjs and browse envs)
97
 
98
+ var _handlebarsSafeString = __webpack_require__(36);
99
 
100
  var _handlebarsSafeString2 = _interopRequireDefault(_handlebarsSafeString);
101
 
107
 
108
  var Utils = _interopRequireWildcard(_handlebarsUtils);
109
 
110
+ var _handlebarsRuntime = __webpack_require__(37);
111
 
112
  var runtime = _interopRequireWildcard(_handlebarsRuntime);
113
 
114
+ var _handlebarsNoConflict = __webpack_require__(43);
115
 
116
  var _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);
117
 
207
 
208
  var _logger2 = _interopRequireDefault(_logger);
209
 
210
+ var _internalProtoAccess = __webpack_require__(32);
211
+
212
+ var VERSION = '4.7.3';
213
  exports.VERSION = VERSION;
214
  var COMPILER_REVISION = 8;
215
  exports.COMPILER_REVISION = COMPILER_REVISION;
285
  },
286
  unregisterDecorator: function unregisterDecorator(name) {
287
  delete this.decorators[name];
288
+ },
289
+ /**
290
+ * Reset the memory of illegal property accesses that have already been logged.
291
+ * @deprecated should only be used in handlebars test-cases
292
+ */
293
+ resetLoggedPropertyAccesses: function resetLoggedPropertyAccesses() {
294
+ _internalProtoAccess.resetLoggedProperties();
295
  }
296
  };
297
 
315
  exports.createFrame = createFrame;
316
  exports.blockParams = blockParams;
317
  exports.appendContextPath = appendContextPath;
 
318
  var escape = {
319
  '&': '&amp;',
320
  '<': '&lt;',
438
  var _Object$defineProperty = __webpack_require__(6)['default'];
439
 
440
  exports.__esModule = true;
 
441
  var errorProps = ['description', 'fileName', 'lineNumber', 'endLineNumber', 'message', 'name', 'number', 'stack'];
442
 
443
  function Exception(message, node) {
985
  if (arguments.length != 2) {
986
  throw new _exception2['default']('#unless requires exactly one argument');
987
  }
988
+ return instance.helpers['if'].call(this, conditional, {
989
+ fn: options.inverse,
990
+ inverse: options.fn,
991
+ hash: options.hash
992
+ });
993
  });
994
  };
995
 
1032
  'use strict';
1033
 
1034
  exports.__esModule = true;
 
 
 
1035
 
1036
  exports['default'] = function (instance) {
1037
+ instance.registerHelper('lookup', function (obj, field, options) {
1038
  if (!obj) {
1039
+ // Note for 5.0: Change to "obj == null" in 5.0
1040
  return obj;
1041
  }
1042
+ return options.lookupProperty(obj, field);
 
 
 
1043
  });
1044
  };
1045
 
1046
+ module.exports = exports['default'];
1047
+
1048
  /***/ }),
1049
  /* 28 */
1050
  /***/ (function(module, exports, __webpack_require__) {
1177
 
1178
  if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) {
1179
  var method = logger.methodMap[level];
1180
+ // eslint-disable-next-line no-console
1181
  if (!console[method]) {
 
1182
  method = 'log';
1183
  }
1184
 
1196
 
1197
  /***/ }),
1198
  /* 32 */
1199
+ /***/ (function(module, exports, __webpack_require__) {
1200
+
1201
+ 'use strict';
1202
+
1203
+ var _Object$create = __webpack_require__(33)['default'];
1204
+
1205
+ var _Object$keys = __webpack_require__(12)['default'];
1206
+
1207
+ var _interopRequireWildcard = __webpack_require__(1)['default'];
1208
+
1209
+ exports.__esModule = true;
1210
+ exports.createProtoAccessControl = createProtoAccessControl;
1211
+ exports.resultIsAllowed = resultIsAllowed;
1212
+ exports.resetLoggedProperties = resetLoggedProperties;
1213
+
1214
+ var _createNewLookupObject = __webpack_require__(35);
1215
+
1216
+ var _logger = __webpack_require__(31);
1217
+
1218
+ var logger = _interopRequireWildcard(_logger);
1219
+
1220
+ var loggedProperties = _Object$create(null);
1221
+
1222
+ function createProtoAccessControl(runtimeOptions) {
1223
+ var defaultMethodWhiteList = _Object$create(null);
1224
+ defaultMethodWhiteList['constructor'] = false;
1225
+ defaultMethodWhiteList['__defineGetter__'] = false;
1226
+ defaultMethodWhiteList['__defineSetter__'] = false;
1227
+ defaultMethodWhiteList['__lookupGetter__'] = false;
1228
+
1229
+ var defaultPropertyWhiteList = _Object$create(null);
1230
+ // eslint-disable-next-line no-proto
1231
+ defaultPropertyWhiteList['__proto__'] = false;
1232
+
1233
+ return {
1234
+ properties: {
1235
+ whitelist: _createNewLookupObject.createNewLookupObject(defaultPropertyWhiteList, runtimeOptions.allowedProtoProperties),
1236
+ defaultValue: runtimeOptions.allowProtoPropertiesByDefault
1237
+ },
1238
+ methods: {
1239
+ whitelist: _createNewLookupObject.createNewLookupObject(defaultMethodWhiteList, runtimeOptions.allowedProtoMethods),
1240
+ defaultValue: runtimeOptions.allowProtoMethodsByDefault
1241
+ }
1242
+ };
1243
+ }
1244
+
1245
+ function resultIsAllowed(result, protoAccessControl, propertyName) {
1246
+ if (typeof result === 'function') {
1247
+ return checkWhiteList(protoAccessControl.methods, propertyName);
1248
+ } else {
1249
+ return checkWhiteList(protoAccessControl.properties, propertyName);
1250
+ }
1251
+ }
1252
+
1253
+ function checkWhiteList(protoAccessControlForType, propertyName) {
1254
+ if (protoAccessControlForType.whitelist[propertyName] !== undefined) {
1255
+ return protoAccessControlForType.whitelist[propertyName] === true;
1256
+ }
1257
+ if (protoAccessControlForType.defaultValue !== undefined) {
1258
+ return protoAccessControlForType.defaultValue;
1259
+ }
1260
+ logUnexpecedPropertyAccessOnce(propertyName);
1261
+ return false;
1262
+ }
1263
+
1264
+ function logUnexpecedPropertyAccessOnce(propertyName) {
1265
+ if (loggedProperties[propertyName] !== true) {
1266
+ loggedProperties[propertyName] = true;
1267
+ logger.log('error', 'Handlebars: Access has been denied to resolve the property "' + propertyName + '" because it is not an "own property" of its parent.\n' + 'You can add a runtime option to disable the check or this warning:\n' + 'See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details');
1268
+ }
1269
+ }
1270
+
1271
+ function resetLoggedProperties() {
1272
+ _Object$keys(loggedProperties).forEach(function (propertyName) {
1273
+ delete loggedProperties[propertyName];
1274
+ });
1275
+ }
1276
+
1277
+ /***/ }),
1278
+ /* 33 */
1279
+ /***/ (function(module, exports, __webpack_require__) {
1280
+
1281
+ module.exports = { "default": __webpack_require__(34), __esModule: true };
1282
+
1283
+ /***/ }),
1284
+ /* 34 */
1285
+ /***/ (function(module, exports, __webpack_require__) {
1286
+
1287
+ var $ = __webpack_require__(8);
1288
+ module.exports = function create(P, D){
1289
+ return $.create(P, D);
1290
+ };
1291
+
1292
+ /***/ }),
1293
+ /* 35 */
1294
+ /***/ (function(module, exports, __webpack_require__) {
1295
+
1296
+ 'use strict';
1297
+
1298
+ var _Object$create = __webpack_require__(33)['default'];
1299
+
1300
+ exports.__esModule = true;
1301
+ exports.createNewLookupObject = createNewLookupObject;
1302
+
1303
+ var _utils = __webpack_require__(4);
1304
+
1305
+ /**
1306
+ * Create a new object with "null"-prototype to avoid truthy results on prototype properties.
1307
+ * The resulting object can be used with "object[property]" to check if a property exists
1308
+ * @param {...object} sources a varargs parameter of source objects that will be merged
1309
+ * @returns {object}
1310
+ */
1311
+
1312
+ function createNewLookupObject() {
1313
+ for (var _len = arguments.length, sources = Array(_len), _key = 0; _key < _len; _key++) {
1314
+ sources[_key] = arguments[_key];
1315
+ }
1316
+
1317
+ return _utils.extend.apply(undefined, [_Object$create(null)].concat(sources));
1318
+ }
1319
+
1320
+ /***/ }),
1321
+ /* 36 */
1322
  /***/ (function(module, exports) {
1323
 
1324
  // Build out our basic SafeString type
1337
  module.exports = exports['default'];
1338
 
1339
  /***/ }),
1340
+ /* 37 */
1341
  /***/ (function(module, exports, __webpack_require__) {
1342
 
1343
  'use strict';
1344
 
1345
+ var _Object$seal = __webpack_require__(38)['default'];
1346
+
1347
+ var _Object$keys = __webpack_require__(12)['default'];
1348
 
1349
  var _interopRequireWildcard = __webpack_require__(1)['default'];
1350
 
1370
 
1371
  var _helpers = __webpack_require__(9);
1372
 
1373
+ var _internalWrapHelper = __webpack_require__(42);
1374
+
1375
+ var _internalProtoAccess = __webpack_require__(32);
1376
+
1377
  function checkRevision(compilerInfo) {
1378
  var compilerRevision = compilerInfo && compilerInfo[0] || 1,
1379
  currentRevision = _base.COMPILER_REVISION;
1393
  }
1394
 
1395
  function template(templateSpec, env) {
 
1396
  /* istanbul ignore next */
1397
  if (!env) {
1398
  throw new _exception2['default']('No environment passed to template');
1419
  }
1420
  partial = env.VM.resolvePartial.call(this, partial, context, options);
1421
 
1422
+ var extendedOptions = Utils.extend({}, options, {
1423
+ hooks: this.hooks,
1424
+ protoAccessControl: this.protoAccessControl
1425
+ });
1426
 
1427
+ var result = env.VM.invokePartial.call(this, partial, context, extendedOptions);
1428
 
1429
  if (result == null && env.compile) {
1430
  options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);
1431
+ result = options.partials[options.name](context, extendedOptions);
1432
  }
1433
  if (result != null) {
1434
  if (options.indent) {
1452
  var container = {
1453
  strict: function strict(obj, name, loc) {
1454
  if (!obj || !(name in obj)) {
1455
+ throw new _exception2['default']('"' + name + '" not defined in ' + obj, {
1456
+ loc: loc
1457
+ });
1458
  }
1459
  return obj[name];
1460
  },
1461
+ lookupProperty: function lookupProperty(parent, propertyName) {
1462
+ var result = parent[propertyName];
1463
+ if (result == null) {
1464
+ return result;
1465
+ }
1466
+ if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
1467
+ return result;
1468
+ }
1469
+
1470
+ if (_internalProtoAccess.resultIsAllowed(result, container.protoAccessControl, propertyName)) {
1471
+ return result;
1472
+ }
1473
+ return undefined;
1474
+ },
1475
  lookup: function lookup(depths, name) {
1476
  var len = depths.length;
1477
  for (var i = 0; i < len; i++) {
1478
+ var result = depths[i] && container.lookupProperty(depths[i], name);
1479
+ if (result != null) {
1480
  return depths[i][name];
1481
  }
1482
  }
1512
  }
1513
  return value;
1514
  },
1515
+ mergeIfNeeded: function mergeIfNeeded(param, common) {
1516
+ var obj = param || common;
1517
+
1518
+ if (param && common && param !== common) {
1519
+ obj = Utils.extend({}, common, param);
1520
+ }
1521
+
1522
+ return obj;
1523
+ },
1524
  // An empty object to use as replacement for null-contexts
1525
  nullContext: _Object$seal({}),
1526
 
1550
  function main(context /*, options*/) {
1551
  return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths);
1552
  }
1553
+
1554
  main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams);
1555
  return main(context, options);
1556
  }
1557
+
1558
  ret.isTop = true;
1559
 
1560
  ret._setup = function (options) {
1561
  if (!options.partial) {
1562
+ var mergedHelpers = Utils.extend({}, env.helpers, options.helpers);
1563
+ wrapHelpersToPassLookupProperty(mergedHelpers, container);
1564
+ container.helpers = mergedHelpers;
1565
 
1566
  if (templateSpec.usePartial) {
1567
+ // Use mergeIfNeeded here to prevent compiling global partials multiple times
1568
+ container.partials = container.mergeIfNeeded(options.partials, env.partials);
1569
  }
1570
  if (templateSpec.usePartial || templateSpec.useDecorators) {
1571
  container.decorators = Utils.extend({}, env.decorators, options.decorators);
1572
  }
1573
 
1574
  container.hooks = {};
1575
+ container.protoAccessControl = _internalProtoAccess.createProtoAccessControl(options);
1576
 
1577
  var keepHelperInHelpers = options.allowCallsToHelperMissing || templateWasPrecompiledWithCompilerV7;
1578
  _helpers.moveHelperToHooks(container, 'helperMissing', keepHelperInHelpers);
1579
  _helpers.moveHelperToHooks(container, 'blockHelperMissing', keepHelperInHelpers);
1580
  } else {
1581
+ container.protoAccessControl = options.protoAccessControl; // internal option
1582
  container.helpers = options.helpers;
1583
  container.partials = options.partials;
1584
  container.decorators = options.decorators;
1699
  return prog;
1700
  }
1701
 
1702
+ function wrapHelpersToPassLookupProperty(mergedHelpers, container) {
1703
+ _Object$keys(mergedHelpers).forEach(function (helperName) {
1704
+ var helper = mergedHelpers[helperName];
1705
+ mergedHelpers[helperName] = passLookupPropertyOption(helper, container);
1706
+ });
1707
+ }
1708
+
1709
+ function passLookupPropertyOption(helper, container) {
1710
+ var lookupProperty = container.lookupProperty;
1711
+ return _internalWrapHelper.wrapHelper(helper, function (options) {
1712
+ return Utils.extend({ lookupProperty: lookupProperty }, options);
1713
+ });
1714
+ }
1715
+
1716
  /***/ }),
1717
+ /* 38 */
1718
  /***/ (function(module, exports, __webpack_require__) {
1719
 
1720
+ module.exports = { "default": __webpack_require__(39), __esModule: true };
1721
 
1722
  /***/ }),
1723
+ /* 39 */
1724
  /***/ (function(module, exports, __webpack_require__) {
1725
 
1726
+ __webpack_require__(40);
1727
  module.exports = __webpack_require__(20).Object.seal;
1728
 
1729
  /***/ }),
1730
+ /* 40 */
1731
  /***/ (function(module, exports, __webpack_require__) {
1732
 
1733
  // 19.1.2.17 Object.seal(O)
1734
+ var isObject = __webpack_require__(41);
1735
 
1736
  __webpack_require__(17)('seal', function($seal){
1737
  return function seal(it){
1740
  });
1741
 
1742
  /***/ }),
1743
+ /* 41 */
1744
  /***/ (function(module, exports) {
1745
 
1746
  module.exports = function(it){
1748
  };
1749
 
1750
  /***/ }),
1751
+ /* 42 */
1752
  /***/ (function(module, exports) {
1753
 
 
1754
  'use strict';
1755
 
1756
+ exports.__esModule = true;
1757
+ exports.wrapHelper = wrapHelper;
1758
+
1759
+ function wrapHelper(helper, transformOptionsFn) {
1760
+ if (typeof helper !== 'function') {
1761
+ // This should not happen, but apparently it does in https://github.com/wycats/handlebars.js/issues/1639
1762
+ // We try to make the wrapper least-invasive by not wrapping it, if the helper is not a function.
1763
+ return helper;
1764
+ }
1765
+ var wrapper = function wrapper() /* dynamic arguments */{
1766
+ var options = arguments[arguments.length - 1];
1767
+ arguments[arguments.length - 1] = transformOptionsFn(options);
1768
+ return helper.apply(this, arguments);
1769
+ };
1770
+ return wrapper;
1771
+ }
1772
+
1773
+ /***/ }),
1774
+ /* 43 */
1775
+ /***/ (function(module, exports) {
1776
+
1777
+ /* WEBPACK VAR INJECTION */(function(global) {'use strict';
1778
+
1779
  exports.__esModule = true;
1780
 
1781
  exports['default'] = function (Handlebars) {
js/handlebars/handlebars.runtime.min.js CHANGED
@@ -1,9 +1,9 @@
1
  /**!
2
 
3
  @license
4
- handlebars v4.5.3
5
 
6
- Copyright (C) 2011-2017 by Yehuda Katz
7
 
8
  Permission is hereby granted, free of charge, to any person obtaining a copy
9
  of this software and associated documentation files (the "Software"), to deal
@@ -24,4 +24,4 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24
  THE SOFTWARE.
25
 
26
  */
27
- !function(a,b){"object"==typeof exports&&"object"==typeof module?module.exports=b():"function"==typeof define&&define.amd?define([],b):"object"==typeof exports?exports.Handlebars=b():a.Handlebars=b()}(this,function(){return function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={exports:{},id:d,loaded:!1};return a[d].call(e.exports,e,e.exports,b),e.loaded=!0,e.exports}var c={};return b.m=a,b.c=c,b.p="",b(0)}([function(a,b,c){"use strict";function d(){var a=new h.HandlebarsEnvironment;return n.extend(a,h),a.SafeString=j["default"],a.Exception=l["default"],a.Utils=n,a.escapeExpression=n.escapeExpression,a.VM=p,a.template=function(b){return p.template(b,a)},a}var e=c(1)["default"],f=c(2)["default"];b.__esModule=!0;var g=c(3),h=e(g),i=c(32),j=f(i),k=c(5),l=f(k),m=c(4),n=e(m),o=c(33),p=e(o),q=c(38),r=f(q),s=d();s.create=d,r["default"](s),s["default"]=s,b["default"]=s,a.exports=b["default"]},function(a,b){"use strict";b["default"]=function(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b},b.__esModule=!0},function(a,b){"use strict";b["default"]=function(a){return a&&a.__esModule?a:{"default":a}},b.__esModule=!0},function(a,b,c){"use strict";function d(a,b,c){this.helpers=a||{},this.partials=b||{},this.decorators=c||{},i.registerDefaultHelpers(this),j.registerDefaultDecorators(this)}var e=c(2)["default"];b.__esModule=!0,b.HandlebarsEnvironment=d;var f=c(4),g=c(5),h=e(g),i=c(9),j=c(29),k=c(31),l=e(k),m="4.5.3";b.VERSION=m;var n=8;b.COMPILER_REVISION=n;var o=7;b.LAST_COMPATIBLE_COMPILER_REVISION=o;var p={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:"== 1.x.x",5:"== 2.0.0-alpha.x",6:">= 2.0.0-beta.1",7:">= 4.0.0 <4.3.0",8:">= 4.3.0"};b.REVISION_CHANGES=p;var q="[object Object]";d.prototype={constructor:d,logger:l["default"],log:l["default"].log,registerHelper:function(a,b){if(f.toString.call(a)===q){if(b)throw new h["default"]("Arg not supported with multiple helpers");f.extend(this.helpers,a)}else this.helpers[a]=b},unregisterHelper:function(a){delete this.helpers[a]},registerPartial:function(a,b){if(f.toString.call(a)===q)f.extend(this.partials,a);else{if("undefined"==typeof b)throw new h["default"]('Attempting to register a partial called "'+a+'" as undefined');this.partials[a]=b}},unregisterPartial:function(a){delete this.partials[a]},registerDecorator:function(a,b){if(f.toString.call(a)===q){if(b)throw new h["default"]("Arg not supported with multiple decorators");f.extend(this.decorators,a)}else this.decorators[a]=b},unregisterDecorator:function(a){delete this.decorators[a]}};var r=l["default"].log;b.log=r,b.createFrame=f.createFrame,b.logger=l["default"]},function(a,b){"use strict";function c(a){return k[a]}function d(a){for(var b=1;b<arguments.length;b++)for(var c in arguments[b])Object.prototype.hasOwnProperty.call(arguments[b],c)&&(a[c]=arguments[b][c]);return a}function e(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1}function f(a){if("string"!=typeof a){if(a&&a.toHTML)return a.toHTML();if(null==a)return"";if(!a)return a+"";a=""+a}return m.test(a)?a.replace(l,c):a}function g(a){return!a&&0!==a||!(!p(a)||0!==a.length)}function h(a){var b=d({},a);return b._parent=a,b}function i(a,b){return a.path=b,a}function j(a,b){return(a?a+".":"")+b}b.__esModule=!0,b.extend=d,b.indexOf=e,b.escapeExpression=f,b.isEmpty=g,b.createFrame=h,b.blockParams=i,b.appendContextPath=j;var k={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;","=":"&#x3D;"},l=/[&<>"'`=]/g,m=/[&<>"'`=]/,n=Object.prototype.toString;b.toString=n;var o=function(a){return"function"==typeof a};o(/x/)&&(b.isFunction=o=function(a){return"function"==typeof a&&"[object Function]"===n.call(a)}),b.isFunction=o;var p=Array.isArray||function(a){return!(!a||"object"!=typeof a)&&"[object Array]"===n.call(a)};b.isArray=p},function(a,b,c){"use strict";function d(a,b){var c=b&&b.loc,g=void 0,h=void 0,i=void 0,j=void 0;c&&(g=c.start.line,h=c.end.line,i=c.start.column,j=c.end.column,a+=" - "+g+":"+i);for(var k=Error.prototype.constructor.call(this,a),l=0;l<f.length;l++)this[f[l]]=k[f[l]];Error.captureStackTrace&&Error.captureStackTrace(this,d);try{c&&(this.lineNumber=g,this.endLineNumber=h,e?(Object.defineProperty(this,"column",{value:i,enumerable:!0}),Object.defineProperty(this,"endColumn",{value:j,enumerable:!0})):(this.column=i,this.endColumn=j))}catch(m){}}var e=c(6)["default"];b.__esModule=!0;var f=["description","fileName","lineNumber","endLineNumber","message","name","number","stack"];d.prototype=new Error,b["default"]=d,a.exports=b["default"]},function(a,b,c){a.exports={"default":c(7),__esModule:!0}},function(a,b,c){var d=c(8);a.exports=function(a,b,c){return d.setDesc(a,b,c)}},function(a,b){var c=Object;a.exports={create:c.create,getProto:c.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:c.getOwnPropertyDescriptor,setDesc:c.defineProperty,setDescs:c.defineProperties,getKeys:c.keys,getNames:c.getOwnPropertyNames,getSymbols:c.getOwnPropertySymbols,each:[].forEach}},function(a,b,c){"use strict";function d(a){h["default"](a),j["default"](a),l["default"](a),n["default"](a),p["default"](a),r["default"](a),t["default"](a)}function e(a,b,c){a.helpers[b]&&(a.hooks[b]=a.helpers[b],c||delete a.helpers[b])}var f=c(2)["default"];b.__esModule=!0,b.registerDefaultHelpers=d,b.moveHelperToHooks=e;var g=c(10),h=f(g),i=c(11),j=f(i),k=c(24),l=f(k),m=c(25),n=f(m),o=c(26),p=f(o),q=c(27),r=f(q),s=c(28),t=f(s)},function(a,b,c){"use strict";b.__esModule=!0;var d=c(4);b["default"]=function(a){a.registerHelper("blockHelperMissing",function(b,c){var e=c.inverse,f=c.fn;if(b===!0)return f(this);if(b===!1||null==b)return e(this);if(d.isArray(b))return b.length>0?(c.ids&&(c.ids=[c.name]),a.helpers.each(b,c)):e(this);if(c.data&&c.ids){var g=d.createFrame(c.data);g.contextPath=d.appendContextPath(c.data.contextPath,c.name),c={data:g}}return f(b,c)})},a.exports=b["default"]},function(a,b,c){(function(d){"use strict";var e=c(12)["default"],f=c(2)["default"];b.__esModule=!0;var g=c(4),h=c(5),i=f(h);b["default"]=function(a){a.registerHelper("each",function(a,b){function c(b,c,d){l&&(l.key=b,l.index=c,l.first=0===c,l.last=!!d,m&&(l.contextPath=m+b)),k+=f(a[b],{data:l,blockParams:g.blockParams([a[b],b],[m+b,null])})}if(!b)throw new i["default"]("Must pass iterator to #each");var f=b.fn,h=b.inverse,j=0,k="",l=void 0,m=void 0;if(b.data&&b.ids&&(m=g.appendContextPath(b.data.contextPath,b.ids[0])+"."),g.isFunction(a)&&(a=a.call(this)),b.data&&(l=g.createFrame(b.data)),a&&"object"==typeof a)if(g.isArray(a))for(var n=a.length;j<n;j++)j in a&&c(j,j,j===a.length-1);else if(d.Symbol&&a[d.Symbol.iterator]){for(var o=[],p=a[d.Symbol.iterator](),q=p.next();!q.done;q=p.next())o.push(q.value);a=o;for(var n=a.length;j<n;j++)c(j,j,j===a.length-1)}else!function(){var b=void 0;e(a).forEach(function(a){void 0!==b&&c(b,j-1),b=a,j++}),void 0!==b&&c(b,j-1,!0)}();return 0===j&&(k=h(this)),k})},a.exports=b["default"]}).call(b,function(){return this}())},function(a,b,c){a.exports={"default":c(13),__esModule:!0}},function(a,b,c){c(14),a.exports=c(20).Object.keys},function(a,b,c){var d=c(15);c(17)("keys",function(a){return function(b){return a(d(b))}})},function(a,b,c){var d=c(16);a.exports=function(a){return Object(d(a))}},function(a,b){a.exports=function(a){if(void 0==a)throw TypeError("Can't call method on "+a);return a}},function(a,b,c){var d=c(18),e=c(20),f=c(23);a.exports=function(a,b){var c=(e.Object||{})[a]||Object[a],g={};g[a]=b(c),d(d.S+d.F*f(function(){c(1)}),"Object",g)}},function(a,b,c){var d=c(19),e=c(20),f=c(21),g="prototype",h=function(a,b,c){var i,j,k,l=a&h.F,m=a&h.G,n=a&h.S,o=a&h.P,p=a&h.B,q=a&h.W,r=m?e:e[b]||(e[b]={}),s=m?d:n?d[b]:(d[b]||{})[g];m&&(c=b);for(i in c)j=!l&&s&&i in s,j&&i in r||(k=j?s[i]:c[i],r[i]=m&&"function"!=typeof s[i]?c[i]:p&&j?f(k,d):q&&s[i]==k?function(a){var b=function(b){return this instanceof a?new a(b):a(b)};return b[g]=a[g],b}(k):o&&"function"==typeof k?f(Function.call,k):k,o&&((r[g]||(r[g]={}))[i]=k))};h.F=1,h.G=2,h.S=4,h.P=8,h.B=16,h.W=32,a.exports=h},function(a,b){var c=a.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=c)},function(a,b){var c=a.exports={version:"1.2.6"};"number"==typeof __e&&(__e=c)},function(a,b,c){var d=c(22);a.exports=function(a,b,c){if(d(a),void 0===b)return a;switch(c){case 1:return function(c){return a.call(b,c)};case 2:return function(c,d){return a.call(b,c,d)};case 3:return function(c,d,e){return a.call(b,c,d,e)}}return function(){return a.apply(b,arguments)}}},function(a,b){a.exports=function(a){if("function"!=typeof a)throw TypeError(a+" is not a function!");return a}},function(a,b){a.exports=function(a){try{return!!a()}catch(b){return!0}}},function(a,b,c){"use strict";var d=c(2)["default"];b.__esModule=!0;var e=c(5),f=d(e);b["default"]=function(a){a.registerHelper("helperMissing",function(){if(1!==arguments.length)throw new f["default"]('Missing helper: "'+arguments[arguments.length-1].name+'"')})},a.exports=b["default"]},function(a,b,c){"use strict";var d=c(2)["default"];b.__esModule=!0;var e=c(4),f=c(5),g=d(f);b["default"]=function(a){a.registerHelper("if",function(a,b){if(2!=arguments.length)throw new g["default"]("#if requires exactly one argument");return e.isFunction(a)&&(a=a.call(this)),!b.hash.includeZero&&!a||e.isEmpty(a)?b.inverse(this):b.fn(this)}),a.registerHelper("unless",function(b,c){if(2!=arguments.length)throw new g["default"]("#unless requires exactly one argument");return a.helpers["if"].call(this,b,{fn:c.inverse,inverse:c.fn,hash:c.hash})})},a.exports=b["default"]},function(a,b){"use strict";b.__esModule=!0,b["default"]=function(a){a.registerHelper("log",function(){for(var b=[void 0],c=arguments[arguments.length-1],d=0;d<arguments.length-1;d++)b.push(arguments[d]);var e=1;null!=c.hash.level?e=c.hash.level:c.data&&null!=c.data.level&&(e=c.data.level),b[0]=e,a.log.apply(a,b)})},a.exports=b["default"]},function(a,b){"use strict";b.__esModule=!0;var c=/^(constructor|__defineGetter__|__defineSetter__|__lookupGetter__|__proto__)$/;b.dangerousPropertyRegex=c,b["default"]=function(a){a.registerHelper("lookup",function(a,b){if(!a)return a;if(!c.test(String(b))||Object.prototype.propertyIsEnumerable.call(a,b))return a[b]})}},function(a,b,c){"use strict";var d=c(2)["default"];b.__esModule=!0;var e=c(4),f=c(5),g=d(f);b["default"]=function(a){a.registerHelper("with",function(a,b){if(2!=arguments.length)throw new g["default"]("#with requires exactly one argument");e.isFunction(a)&&(a=a.call(this));var c=b.fn;if(e.isEmpty(a))return b.inverse(this);var d=b.data;return b.data&&b.ids&&(d=e.createFrame(b.data),d.contextPath=e.appendContextPath(b.data.contextPath,b.ids[0])),c(a,{data:d,blockParams:e.blockParams([a],[d&&d.contextPath])})})},a.exports=b["default"]},function(a,b,c){"use strict";function d(a){g["default"](a)}var e=c(2)["default"];b.__esModule=!0,b.registerDefaultDecorators=d;var f=c(30),g=e(f)},function(a,b,c){"use strict";b.__esModule=!0;var d=c(4);b["default"]=function(a){a.registerDecorator("inline",function(a,b,c,e){var f=a;return b.partials||(b.partials={},f=function(e,f){var g=c.partials;c.partials=d.extend({},g,b.partials);var h=a(e,f);return c.partials=g,h}),b.partials[e.args[0]]=e.fn,f})},a.exports=b["default"]},function(a,b,c){"use strict";b.__esModule=!0;var d=c(4),e={methodMap:["debug","info","warn","error"],level:"info",lookupLevel:function(a){if("string"==typeof a){var b=d.indexOf(e.methodMap,a.toLowerCase());a=b>=0?b:parseInt(a,10)}return a},log:function(a){if(a=e.lookupLevel(a),"undefined"!=typeof console&&e.lookupLevel(e.level)<=a){var b=e.methodMap[a];console[b]||(b="log");for(var c=arguments.length,d=Array(c>1?c-1:0),f=1;f<c;f++)d[f-1]=arguments[f];console[b].apply(console,d)}}};b["default"]=e,a.exports=b["default"]},function(a,b){"use strict";function c(a){this.string=a}b.__esModule=!0,c.prototype.toString=c.prototype.toHTML=function(){return""+this.string},b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(a){var b=a&&a[0]||1,c=s.COMPILER_REVISION;if(!(b>=s.LAST_COMPATIBLE_COMPILER_REVISION&&b<=s.COMPILER_REVISION)){if(b<s.LAST_COMPATIBLE_COMPILER_REVISION){var d=s.REVISION_CHANGES[c],e=s.REVISION_CHANGES[b];throw new r["default"]("Template was precompiled with an older version of Handlebars than the current runtime. Please update your precompiler to a newer version ("+d+") or downgrade your runtime to an older version ("+e+").")}throw new r["default"]("Template was precompiled with a newer version of Handlebars than the current runtime. Please update your runtime to a newer version ("+a[1]+").")}}function e(a,b){function c(c,d,e){e.hash&&(d=p.extend({},d,e.hash),e.ids&&(e.ids[0]=!0)),c=b.VM.resolvePartial.call(this,c,d,e);var f=p.extend({},e,{hooks:this.hooks}),g=b.VM.invokePartial.call(this,c,d,f);if(null==g&&b.compile&&(e.partials[e.name]=b.compile(c,a.compilerOptions,b),g=e.partials[e.name](d,f)),null!=g){if(e.indent){for(var h=g.split("\n"),i=0,j=h.length;i<j&&(h[i]||i+1!==j);i++)h[i]=e.indent+h[i];g=h.join("\n")}return g}throw new r["default"]("The partial "+e.name+" could not be compiled when running in runtime-only mode")}function d(b){function c(b){return""+a.main(g,b,g.helpers,g.partials,f,i,h)}var e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],f=e.data;d._setup(e),!e.partial&&a.useData&&(f=j(b,f));var h=void 0,i=a.useBlockParams?[]:void 0;return a.useDepths&&(h=e.depths?b!=e.depths[0]?[b].concat(e.depths):e.depths:[b]),(c=k(a.main,c,g,e.depths||[],f,i))(b,e)}if(!b)throw new r["default"]("No environment passed to template");if(!a||!a.main)throw new r["default"]("Unknown template object: "+typeof a);a.main.decorator=a.main_d,b.VM.checkRevision(a.compiler);var e=a.compiler&&7===a.compiler[0],g={strict:function(a,b,c){if(!(a&&b in a))throw new r["default"]('"'+b+'" not defined in '+a,{loc:c});return a[b]},lookup:function(a,b){for(var c=a.length,d=0;d<c;d++)if(a[d]&&null!=a[d][b])return a[d][b]},lambda:function(a,b){return"function"==typeof a?a.call(b):a},escapeExpression:p.escapeExpression,invokePartial:c,fn:function(b){var c=a[b];return c.decorator=a[b+"_d"],c},programs:[],program:function(a,b,c,d,e){var g=this.programs[a],h=this.fn(a);return b||e||d||c?g=f(this,a,h,b,c,d,e):g||(g=this.programs[a]=f(this,a,h)),g},data:function(a,b){for(;a&&b--;)a=a._parent;return a},nullContext:l({}),noop:b.VM.noop,compilerInfo:a.compiler};return d.isTop=!0,d._setup=function(c){if(c.partial)g.helpers=c.helpers,g.partials=c.partials,g.decorators=c.decorators,g.hooks=c.hooks;else{g.helpers=p.extend({},b.helpers,c.helpers),a.usePartial&&(g.partials=p.extend({},b.partials,c.partials)),(a.usePartial||a.useDecorators)&&(g.decorators=p.extend({},b.decorators,c.decorators)),g.hooks={};var d=c.allowCallsToHelperMissing||e;t.moveHelperToHooks(g,"helperMissing",d),t.moveHelperToHooks(g,"blockHelperMissing",d)}},d._child=function(b,c,d,e){if(a.useBlockParams&&!d)throw new r["default"]("must pass block params");if(a.useDepths&&!e)throw new r["default"]("must pass parent depths");return f(g,b,a[b],c,0,d,e)},d}function f(a,b,c,d,e,f,g){function h(b){var e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],h=g;return!g||b==g[0]||b===a.nullContext&&null===g[0]||(h=[b].concat(g)),c(a,b,a.helpers,a.partials,e.data||d,f&&[e.blockParams].concat(f),h)}return h=k(c,h,a,g,d,f),h.program=b,h.depth=g?g.length:0,h.blockParams=e||0,h}function g(a,b,c){return a?a.call||c.name||(c.name=a,a=c.partials[a]):a="@partial-block"===c.name?c.data["partial-block"]:c.partials[c.name],a}function h(a,b,c){var d=c.data&&c.data["partial-block"];c.partial=!0,c.ids&&(c.data.contextPath=c.ids[0]||c.data.contextPath);var e=void 0;if(c.fn&&c.fn!==i&&!function(){c.data=s.createFrame(c.data);var a=c.fn;e=c.data["partial-block"]=function(b){var c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];return c.data=s.createFrame(c.data),c.data["partial-block"]=d,a(b,c)},a.partials&&(c.partials=p.extend({},c.partials,a.partials))}(),void 0===a&&e&&(a=e),void 0===a)throw new r["default"]("The partial "+c.name+" could not be found");if(a instanceof Function)return a(b,c)}function i(){return""}function j(a,b){return b&&"root"in b||(b=b?s.createFrame(b):{},b.root=a),b}function k(a,b,c,d,e,f){if(a.decorator){var g={};b=a.decorator(b,g,c,d&&d[0],e,f,d),p.extend(b,g)}return b}var l=c(34)["default"],m=c(1)["default"],n=c(2)["default"];b.__esModule=!0,b.checkRevision=d,b.template=e,b.wrapProgram=f,b.resolvePartial=g,b.invokePartial=h,b.noop=i;var o=c(4),p=m(o),q=c(5),r=n(q),s=c(3),t=c(9)},function(a,b,c){a.exports={"default":c(35),__esModule:!0}},function(a,b,c){c(36),a.exports=c(20).Object.seal},function(a,b,c){var d=c(37);c(17)("seal",function(a){return function(b){return a&&d(b)?a(b):b}})},function(a,b){a.exports=function(a){return"object"==typeof a?null!==a:"function"==typeof a}},function(a,b){(function(c){"use strict";b.__esModule=!0,b["default"]=function(a){var b="undefined"!=typeof c?c:window,d=b.Handlebars;a.noConflict=function(){return b.Handlebars===a&&(b.Handlebars=d),a}},a.exports=b["default"]}).call(b,function(){return this}())}])});
1
  /**!
2
 
3
  @license
4
+ handlebars v4.7.3
5
 
6
+ Copyright (C) 2011-2019 by Yehuda Katz
7
 
8
  Permission is hereby granted, free of charge, to any person obtaining a copy
9
  of this software and associated documentation files (the "Software"), to deal
24
  THE SOFTWARE.
25
 
26
  */
27
+ !function(a,b){"object"==typeof exports&&"object"==typeof module?module.exports=b():"function"==typeof define&&define.amd?define([],b):"object"==typeof exports?exports.Handlebars=b():a.Handlebars=b()}(this,function(){return function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={exports:{},id:d,loaded:!1};return a[d].call(e.exports,e,e.exports,b),e.loaded=!0,e.exports}var c={};return b.m=a,b.c=c,b.p="",b(0)}([function(a,b,c){"use strict";function d(){var a=new h.HandlebarsEnvironment;return n.extend(a,h),a.SafeString=j["default"],a.Exception=l["default"],a.Utils=n,a.escapeExpression=n.escapeExpression,a.VM=p,a.template=function(b){return p.template(b,a)},a}var e=c(1)["default"],f=c(2)["default"];b.__esModule=!0;var g=c(3),h=e(g),i=c(36),j=f(i),k=c(5),l=f(k),m=c(4),n=e(m),o=c(37),p=e(o),q=c(43),r=f(q),s=d();s.create=d,r["default"](s),s["default"]=s,b["default"]=s,a.exports=b["default"]},function(a,b){"use strict";b["default"]=function(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b},b.__esModule=!0},function(a,b){"use strict";b["default"]=function(a){return a&&a.__esModule?a:{"default":a}},b.__esModule=!0},function(a,b,c){"use strict";function d(a,b,c){this.helpers=a||{},this.partials=b||{},this.decorators=c||{},i.registerDefaultHelpers(this),j.registerDefaultDecorators(this)}var e=c(2)["default"];b.__esModule=!0,b.HandlebarsEnvironment=d;var f=c(4),g=c(5),h=e(g),i=c(9),j=c(29),k=c(31),l=e(k),m=c(32),n="4.7.3";b.VERSION=n;var o=8;b.COMPILER_REVISION=o;var p=7;b.LAST_COMPATIBLE_COMPILER_REVISION=p;var q={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:"== 1.x.x",5:"== 2.0.0-alpha.x",6:">= 2.0.0-beta.1",7:">= 4.0.0 <4.3.0",8:">= 4.3.0"};b.REVISION_CHANGES=q;var r="[object Object]";d.prototype={constructor:d,logger:l["default"],log:l["default"].log,registerHelper:function(a,b){if(f.toString.call(a)===r){if(b)throw new h["default"]("Arg not supported with multiple helpers");f.extend(this.helpers,a)}else this.helpers[a]=b},unregisterHelper:function(a){delete this.helpers[a]},registerPartial:function(a,b){if(f.toString.call(a)===r)f.extend(this.partials,a);else{if("undefined"==typeof b)throw new h["default"]('Attempting to register a partial called "'+a+'" as undefined');this.partials[a]=b}},unregisterPartial:function(a){delete this.partials[a]},registerDecorator:function(a,b){if(f.toString.call(a)===r){if(b)throw new h["default"]("Arg not supported with multiple decorators");f.extend(this.decorators,a)}else this.decorators[a]=b},unregisterDecorator:function(a){delete this.decorators[a]},resetLoggedPropertyAccesses:function(){m.resetLoggedProperties()}};var s=l["default"].log;b.log=s,b.createFrame=f.createFrame,b.logger=l["default"]},function(a,b){"use strict";function c(a){return k[a]}function d(a){for(var b=1;b<arguments.length;b++)for(var c in arguments[b])Object.prototype.hasOwnProperty.call(arguments[b],c)&&(a[c]=arguments[b][c]);return a}function e(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1}function f(a){if("string"!=typeof a){if(a&&a.toHTML)return a.toHTML();if(null==a)return"";if(!a)return a+"";a=""+a}return m.test(a)?a.replace(l,c):a}function g(a){return!a&&0!==a||!(!p(a)||0!==a.length)}function h(a){var b=d({},a);return b._parent=a,b}function i(a,b){return a.path=b,a}function j(a,b){return(a?a+".":"")+b}b.__esModule=!0,b.extend=d,b.indexOf=e,b.escapeExpression=f,b.isEmpty=g,b.createFrame=h,b.blockParams=i,b.appendContextPath=j;var k={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;","=":"&#x3D;"},l=/[&<>"'`=]/g,m=/[&<>"'`=]/,n=Object.prototype.toString;b.toString=n;var o=function(a){return"function"==typeof a};o(/x/)&&(b.isFunction=o=function(a){return"function"==typeof a&&"[object Function]"===n.call(a)}),b.isFunction=o;var p=Array.isArray||function(a){return!(!a||"object"!=typeof a)&&"[object Array]"===n.call(a)};b.isArray=p},function(a,b,c){"use strict";function d(a,b){var c=b&&b.loc,g=void 0,h=void 0,i=void 0,j=void 0;c&&(g=c.start.line,h=c.end.line,i=c.start.column,j=c.end.column,a+=" - "+g+":"+i);for(var k=Error.prototype.constructor.call(this,a),l=0;l<f.length;l++)this[f[l]]=k[f[l]];Error.captureStackTrace&&Error.captureStackTrace(this,d);try{c&&(this.lineNumber=g,this.endLineNumber=h,e?(Object.defineProperty(this,"column",{value:i,enumerable:!0}),Object.defineProperty(this,"endColumn",{value:j,enumerable:!0})):(this.column=i,this.endColumn=j))}catch(m){}}var e=c(6)["default"];b.__esModule=!0;var f=["description","fileName","lineNumber","endLineNumber","message","name","number","stack"];d.prototype=new Error,b["default"]=d,a.exports=b["default"]},function(a,b,c){a.exports={"default":c(7),__esModule:!0}},function(a,b,c){var d=c(8);a.exports=function(a,b,c){return d.setDesc(a,b,c)}},function(a,b){var c=Object;a.exports={create:c.create,getProto:c.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:c.getOwnPropertyDescriptor,setDesc:c.defineProperty,setDescs:c.defineProperties,getKeys:c.keys,getNames:c.getOwnPropertyNames,getSymbols:c.getOwnPropertySymbols,each:[].forEach}},function(a,b,c){"use strict";function d(a){h["default"](a),j["default"](a),l["default"](a),n["default"](a),p["default"](a),r["default"](a),t["default"](a)}function e(a,b,c){a.helpers[b]&&(a.hooks[b]=a.helpers[b],c||delete a.helpers[b])}var f=c(2)["default"];b.__esModule=!0,b.registerDefaultHelpers=d,b.moveHelperToHooks=e;var g=c(10),h=f(g),i=c(11),j=f(i),k=c(24),l=f(k),m=c(25),n=f(m),o=c(26),p=f(o),q=c(27),r=f(q),s=c(28),t=f(s)},function(a,b,c){"use strict";b.__esModule=!0;var d=c(4);b["default"]=function(a){a.registerHelper("blockHelperMissing",function(b,c){var e=c.inverse,f=c.fn;if(b===!0)return f(this);if(b===!1||null==b)return e(this);if(d.isArray(b))return b.length>0?(c.ids&&(c.ids=[c.name]),a.helpers.each(b,c)):e(this);if(c.data&&c.ids){var g=d.createFrame(c.data);g.contextPath=d.appendContextPath(c.data.contextPath,c.name),c={data:g}}return f(b,c)})},a.exports=b["default"]},function(a,b,c){(function(d){"use strict";var e=c(12)["default"],f=c(2)["default"];b.__esModule=!0;var g=c(4),h=c(5),i=f(h);b["default"]=function(a){a.registerHelper("each",function(a,b){function c(b,c,d){l&&(l.key=b,l.index=c,l.first=0===c,l.last=!!d,m&&(l.contextPath=m+b)),k+=f(a[b],{data:l,blockParams:g.blockParams([a[b],b],[m+b,null])})}if(!b)throw new i["default"]("Must pass iterator to #each");var f=b.fn,h=b.inverse,j=0,k="",l=void 0,m=void 0;if(b.data&&b.ids&&(m=g.appendContextPath(b.data.contextPath,b.ids[0])+"."),g.isFunction(a)&&(a=a.call(this)),b.data&&(l=g.createFrame(b.data)),a&&"object"==typeof a)if(g.isArray(a))for(var n=a.length;j<n;j++)j in a&&c(j,j,j===a.length-1);else if(d.Symbol&&a[d.Symbol.iterator]){for(var o=[],p=a[d.Symbol.iterator](),q=p.next();!q.done;q=p.next())o.push(q.value);a=o;for(var n=a.length;j<n;j++)c(j,j,j===a.length-1)}else!function(){var b=void 0;e(a).forEach(function(a){void 0!==b&&c(b,j-1),b=a,j++}),void 0!==b&&c(b,j-1,!0)}();return 0===j&&(k=h(this)),k})},a.exports=b["default"]}).call(b,function(){return this}())},function(a,b,c){a.exports={"default":c(13),__esModule:!0}},function(a,b,c){c(14),a.exports=c(20).Object.keys},function(a,b,c){var d=c(15);c(17)("keys",function(a){return function(b){return a(d(b))}})},function(a,b,c){var d=c(16);a.exports=function(a){return Object(d(a))}},function(a,b){a.exports=function(a){if(void 0==a)throw TypeError("Can't call method on "+a);return a}},function(a,b,c){var d=c(18),e=c(20),f=c(23);a.exports=function(a,b){var c=(e.Object||{})[a]||Object[a],g={};g[a]=b(c),d(d.S+d.F*f(function(){c(1)}),"Object",g)}},function(a,b,c){var d=c(19),e=c(20),f=c(21),g="prototype",h=function(a,b,c){var i,j,k,l=a&h.F,m=a&h.G,n=a&h.S,o=a&h.P,p=a&h.B,q=a&h.W,r=m?e:e[b]||(e[b]={}),s=m?d:n?d[b]:(d[b]||{})[g];m&&(c=b);for(i in c)j=!l&&s&&i in s,j&&i in r||(k=j?s[i]:c[i],r[i]=m&&"function"!=typeof s[i]?c[i]:p&&j?f(k,d):q&&s[i]==k?function(a){var b=function(b){return this instanceof a?new a(b):a(b)};return b[g]=a[g],b}(k):o&&"function"==typeof k?f(Function.call,k):k,o&&((r[g]||(r[g]={}))[i]=k))};h.F=1,h.G=2,h.S=4,h.P=8,h.B=16,h.W=32,a.exports=h},function(a,b){var c=a.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=c)},function(a,b){var c=a.exports={version:"1.2.6"};"number"==typeof __e&&(__e=c)},function(a,b,c){var d=c(22);a.exports=function(a,b,c){if(d(a),void 0===b)return a;switch(c){case 1:return function(c){return a.call(b,c)};case 2:return function(c,d){return a.call(b,c,d)};case 3:return function(c,d,e){return a.call(b,c,d,e)}}return function(){return a.apply(b,arguments)}}},function(a,b){a.exports=function(a){if("function"!=typeof a)throw TypeError(a+" is not a function!");return a}},function(a,b){a.exports=function(a){try{return!!a()}catch(b){return!0}}},function(a,b,c){"use strict";var d=c(2)["default"];b.__esModule=!0;var e=c(5),f=d(e);b["default"]=function(a){a.registerHelper("helperMissing",function(){if(1!==arguments.length)throw new f["default"]('Missing helper: "'+arguments[arguments.length-1].name+'"')})},a.exports=b["default"]},function(a,b,c){"use strict";var d=c(2)["default"];b.__esModule=!0;var e=c(4),f=c(5),g=d(f);b["default"]=function(a){a.registerHelper("if",function(a,b){if(2!=arguments.length)throw new g["default"]("#if requires exactly one argument");return e.isFunction(a)&&(a=a.call(this)),!b.hash.includeZero&&!a||e.isEmpty(a)?b.inverse(this):b.fn(this)}),a.registerHelper("unless",function(b,c){if(2!=arguments.length)throw new g["default"]("#unless requires exactly one argument");return a.helpers["if"].call(this,b,{fn:c.inverse,inverse:c.fn,hash:c.hash})})},a.exports=b["default"]},function(a,b){"use strict";b.__esModule=!0,b["default"]=function(a){a.registerHelper("log",function(){for(var b=[void 0],c=arguments[arguments.length-1],d=0;d<arguments.length-1;d++)b.push(arguments[d]);var e=1;null!=c.hash.level?e=c.hash.level:c.data&&null!=c.data.level&&(e=c.data.level),b[0]=e,a.log.apply(a,b)})},a.exports=b["default"]},function(a,b){"use strict";b.__esModule=!0,b["default"]=function(a){a.registerHelper("lookup",function(a,b,c){return a?c.lookupProperty(a,b):a})},a.exports=b["default"]},function(a,b,c){"use strict";var d=c(2)["default"];b.__esModule=!0;var e=c(4),f=c(5),g=d(f);b["default"]=function(a){a.registerHelper("with",function(a,b){if(2!=arguments.length)throw new g["default"]("#with requires exactly one argument");e.isFunction(a)&&(a=a.call(this));var c=b.fn;if(e.isEmpty(a))return b.inverse(this);var d=b.data;return b.data&&b.ids&&(d=e.createFrame(b.data),d.contextPath=e.appendContextPath(b.data.contextPath,b.ids[0])),c(a,{data:d,blockParams:e.blockParams([a],[d&&d.contextPath])})})},a.exports=b["default"]},function(a,b,c){"use strict";function d(a){g["default"](a)}var e=c(2)["default"];b.__esModule=!0,b.registerDefaultDecorators=d;var f=c(30),g=e(f)},function(a,b,c){"use strict";b.__esModule=!0;var d=c(4);b["default"]=function(a){a.registerDecorator("inline",function(a,b,c,e){var f=a;return b.partials||(b.partials={},f=function(e,f){var g=c.partials;c.partials=d.extend({},g,b.partials);var h=a(e,f);return c.partials=g,h}),b.partials[e.args[0]]=e.fn,f})},a.exports=b["default"]},function(a,b,c){"use strict";b.__esModule=!0;var d=c(4),e={methodMap:["debug","info","warn","error"],level:"info",lookupLevel:function(a){if("string"==typeof a){var b=d.indexOf(e.methodMap,a.toLowerCase());a=b>=0?b:parseInt(a,10)}return a},log:function(a){if(a=e.lookupLevel(a),"undefined"!=typeof console&&e.lookupLevel(e.level)<=a){var b=e.methodMap[a];console[b]||(b="log");for(var c=arguments.length,d=Array(c>1?c-1:0),f=1;f<c;f++)d[f-1]=arguments[f];console[b].apply(console,d)}}};b["default"]=e,a.exports=b["default"]},function(a,b,c){"use strict";function d(a){var b=i(null);b.constructor=!1,b.__defineGetter__=!1,b.__defineSetter__=!1,b.__lookupGetter__=!1;var c=i(null);return c.__proto__=!1,{properties:{whitelist:l.createNewLookupObject(c,a.allowedProtoProperties),defaultValue:a.allowProtoPropertiesByDefault},methods:{whitelist:l.createNewLookupObject(b,a.allowedProtoMethods),defaultValue:a.allowProtoMethodsByDefault}}}function e(a,b,c){return"function"==typeof a?f(b.methods,c):f(b.properties,c)}function f(a,b){return void 0!==a.whitelist[b]?a.whitelist[b]===!0:void 0!==a.defaultValue?a.defaultValue:(g(b),!1)}function g(a){o[a]!==!0&&(o[a]=!0,n.log("error",'Handlebars: Access has been denied to resolve the property "'+a+'" because it is not an "own property" of its parent.\nYou can add a runtime option to disable the check or this warning:\nSee https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details'))}function h(){j(o).forEach(function(a){delete o[a]})}var i=c(33)["default"],j=c(12)["default"],k=c(1)["default"];b.__esModule=!0,b.createProtoAccessControl=d,b.resultIsAllowed=e,b.resetLoggedProperties=h;var l=c(35),m=c(31),n=k(m),o=i(null)},function(a,b,c){a.exports={"default":c(34),__esModule:!0}},function(a,b,c){var d=c(8);a.exports=function(a,b){return d.create(a,b)}},function(a,b,c){"use strict";function d(){for(var a=arguments.length,b=Array(a),c=0;c<a;c++)b[c]=arguments[c];return f.extend.apply(void 0,[e(null)].concat(b))}var e=c(33)["default"];b.__esModule=!0,b.createNewLookupObject=d;var f=c(4)},function(a,b){"use strict";function c(a){this.string=a}b.__esModule=!0,c.prototype.toString=c.prototype.toHTML=function(){return""+this.string},b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(a){var b=a&&a[0]||1,c=v.COMPILER_REVISION;if(!(b>=v.LAST_COMPATIBLE_COMPILER_REVISION&&b<=v.COMPILER_REVISION)){if(b<v.LAST_COMPATIBLE_COMPILER_REVISION){var d=v.REVISION_CHANGES[c],e=v.REVISION_CHANGES[b];throw new u["default"]("Template was precompiled with an older version of Handlebars than the current runtime. Please update your precompiler to a newer version ("+d+") or downgrade your runtime to an older version ("+e+").")}throw new u["default"]("Template was precompiled with a newer version of Handlebars than the current runtime. Please update your runtime to a newer version ("+a[1]+").")}}function e(a,b){function c(c,d,e){e.hash&&(d=s.extend({},d,e.hash),e.ids&&(e.ids[0]=!0)),c=b.VM.resolvePartial.call(this,c,d,e);var f=s.extend({},e,{hooks:this.hooks,protoAccessControl:this.protoAccessControl}),g=b.VM.invokePartial.call(this,c,d,f);if(null==g&&b.compile&&(e.partials[e.name]=b.compile(c,a.compilerOptions,b),g=e.partials[e.name](d,f)),null!=g){if(e.indent){for(var h=g.split("\n"),i=0,j=h.length;i<j&&(h[i]||i+1!==j);i++)h[i]=e.indent+h[i];g=h.join("\n")}return g}throw new u["default"]("The partial "+e.name+" could not be compiled when running in runtime-only mode")}function d(b){function c(b){return""+a.main(g,b,g.helpers,g.partials,f,i,h)}var e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],f=e.data;d._setup(e),!e.partial&&a.useData&&(f=j(b,f));var h=void 0,i=a.useBlockParams?[]:void 0;return a.useDepths&&(h=e.depths?b!=e.depths[0]?[b].concat(e.depths):e.depths:[b]),(c=k(a.main,c,g,e.depths||[],f,i))(b,e)}if(!b)throw new u["default"]("No environment passed to template");if(!a||!a.main)throw new u["default"]("Unknown template object: "+typeof a);a.main.decorator=a.main_d,b.VM.checkRevision(a.compiler);var e=a.compiler&&7===a.compiler[0],g={strict:function(a,b,c){if(!(a&&b in a))throw new u["default"]('"'+b+'" not defined in '+a,{loc:c});return a[b]},lookupProperty:function(a,b){var c=a[b];return null==c?c:Object.prototype.hasOwnProperty.call(a,b)?c:y.resultIsAllowed(c,g.protoAccessControl,b)?c:void 0},lookup:function(a,b){for(var c=a.length,d=0;d<c;d++){var e=a[d]&&g.lookupProperty(a[d],b);if(null!=e)return a[d][b]}},lambda:function(a,b){return"function"==typeof a?a.call(b):a},escapeExpression:s.escapeExpression,invokePartial:c,fn:function(b){var c=a[b];return c.decorator=a[b+"_d"],c},programs:[],program:function(a,b,c,d,e){var g=this.programs[a],h=this.fn(a);return b||e||d||c?g=f(this,a,h,b,c,d,e):g||(g=this.programs[a]=f(this,a,h)),g},data:function(a,b){for(;a&&b--;)a=a._parent;return a},mergeIfNeeded:function(a,b){var c=a||b;return a&&b&&a!==b&&(c=s.extend({},b,a)),c},nullContext:n({}),noop:b.VM.noop,compilerInfo:a.compiler};return d.isTop=!0,d._setup=function(c){if(c.partial)g.protoAccessControl=c.protoAccessControl,g.helpers=c.helpers,g.partials=c.partials,g.decorators=c.decorators,g.hooks=c.hooks;else{var d=s.extend({},b.helpers,c.helpers);l(d,g),g.helpers=d,a.usePartial&&(g.partials=g.mergeIfNeeded(c.partials,b.partials)),(a.usePartial||a.useDecorators)&&(g.decorators=s.extend({},b.decorators,c.decorators)),g.hooks={},g.protoAccessControl=y.createProtoAccessControl(c);var f=c.allowCallsToHelperMissing||e;w.moveHelperToHooks(g,"helperMissing",f),w.moveHelperToHooks(g,"blockHelperMissing",f)}},d._child=function(b,c,d,e){if(a.useBlockParams&&!d)throw new u["default"]("must pass block params");if(a.useDepths&&!e)throw new u["default"]("must pass parent depths");return f(g,b,a[b],c,0,d,e)},d}function f(a,b,c,d,e,f,g){function h(b){var e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],h=g;return!g||b==g[0]||b===a.nullContext&&null===g[0]||(h=[b].concat(g)),c(a,b,a.helpers,a.partials,e.data||d,f&&[e.blockParams].concat(f),h)}return h=k(c,h,a,g,d,f),h.program=b,h.depth=g?g.length:0,h.blockParams=e||0,h}function g(a,b,c){return a?a.call||c.name||(c.name=a,a=c.partials[a]):a="@partial-block"===c.name?c.data["partial-block"]:c.partials[c.name],a}function h(a,b,c){var d=c.data&&c.data["partial-block"];c.partial=!0,c.ids&&(c.data.contextPath=c.ids[0]||c.data.contextPath);var e=void 0;if(c.fn&&c.fn!==i&&!function(){c.data=v.createFrame(c.data);var a=c.fn;e=c.data["partial-block"]=function(b){var c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];return c.data=v.createFrame(c.data),c.data["partial-block"]=d,a(b,c)},a.partials&&(c.partials=s.extend({},c.partials,a.partials))}(),void 0===a&&e&&(a=e),void 0===a)throw new u["default"]("The partial "+c.name+" could not be found");if(a instanceof Function)return a(b,c)}function i(){return""}function j(a,b){return b&&"root"in b||(b=b?v.createFrame(b):{},b.root=a),b}function k(a,b,c,d,e,f){if(a.decorator){var g={};b=a.decorator(b,g,c,d&&d[0],e,f,d),s.extend(b,g)}return b}function l(a,b){o(a).forEach(function(c){var d=a[c];a[c]=m(d,b)})}function m(a,b){var c=b.lookupProperty;return x.wrapHelper(a,function(a){return s.extend({lookupProperty:c},a)})}var n=c(38)["default"],o=c(12)["default"],p=c(1)["default"],q=c(2)["default"];b.__esModule=!0,b.checkRevision=d,b.template=e,b.wrapProgram=f,b.resolvePartial=g,b.invokePartial=h,b.noop=i;var r=c(4),s=p(r),t=c(5),u=q(t),v=c(3),w=c(9),x=c(42),y=c(32)},function(a,b,c){a.exports={"default":c(39),__esModule:!0}},function(a,b,c){c(40),a.exports=c(20).Object.seal},function(a,b,c){var d=c(41);c(17)("seal",function(a){return function(b){return a&&d(b)?a(b):b}})},function(a,b){a.exports=function(a){return"object"==typeof a?null!==a:"function"==typeof a}},function(a,b){"use strict";function c(a,b){if("function"!=typeof a)return a;var c=function(){var c=arguments[arguments.length-1];return arguments[arguments.length-1]=b(c),a.apply(this,arguments)};return c}b.__esModule=!0,b.wrapHelper=c},function(a,b){(function(c){"use strict";b.__esModule=!0,b["default"]=function(a){var b="undefined"!=typeof c?c:window,d=b.Handlebars;a.noConflict=function(){return b.Handlebars===a&&(b.Handlebars=d),a}},a.exports=b["default"]}).call(b,function(){return this}())}])});
js/loadAsync-3-0-18.min.js ADDED
@@ -0,0 +1 @@
 
1
+ function loadAsync(e,t){var a,n=!1;a=document.createElement("script"),a.type="text/javascript",a.src=e,a.onreadystatechange=function(){n||this.readyState&&"complete"!=this.readyState||(n=!0,"function"==typeof t&&t())},a.onload=a.onreadystatechange,document.getElementsByTagName("head")[0].appendChild(a)}
js/loadAsync.js ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * This function will work cross-browser for loading scripts asynchronously
3
+ */
4
+ function loadAsync(src, callback) {
5
+ var scriptTag,
6
+ ready = false;
7
+
8
+ scriptTag = document.createElement('script');
9
+ scriptTag.type = 'text/javascript';
10
+ scriptTag.src = src;
11
+ scriptTag.onreadystatechange = function() {
12
+ // console.log( this.readyState ); //uncomment this line to see which ready states are called.
13
+ if (!ready
14
+ && (!this.readyState || this.readyState == 'complete')
15
+ ) {
16
+ ready = true;
17
+ typeof callback === 'function' && callback();
18
+ }
19
+ };
20
+ scriptTag.onload = scriptTag.onreadystatechange
21
+
22
+ document.getElementsByTagName("head")[0].appendChild(scriptTag)
23
+ }
js/loadCSS-3-0-18.min.js ADDED
@@ -0,0 +1 @@
 
1
+ !function(e){"use strict";var t=function(t,n,o,r){function i(e){return l.body?e():void setTimeout(function(){i(e)})}function d(){s.addEventListener&&s.removeEventListener("load",d),s.media=o||"all"}var a,l=e.document,s=l.createElement("link");if(n)a=n;else{var f=(l.body||l.getElementsByTagName("head")[0]).childNodes;a=f[f.length-1]}var u=l.styleSheets;if(r)for(var c in r)r.hasOwnProperty(c)&&s.setAttribute(c,r[c]);s.rel="stylesheet",s.href=t,s.media="only x",i(function(){a.parentNode.insertBefore(s,n?a:a.nextSibling)});var v=function(e){for(var t=s.href,n=u.length;n--;)if(u[n].href===t)return e();setTimeout(function(){v(e)})};return s.addEventListener&&s.addEventListener("load",d),s.onloadcssdefined=v,v(d),s};"undefined"!=typeof exports?exports.loadCSS=t:e.loadCSS=t}("undefined"!=typeof global?global:this);
js/loadCSS.js ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // phpcs:disable
2
+ /*! loadCSS. [c]2017 Filament Group, Inc. MIT License */
3
+ (function(w){
4
+ "use strict";
5
+ /* exported loadCSS */
6
+ var loadCSS = function( href, before, media, attributes ){
7
+ // Arguments explained:
8
+ // `href` [REQUIRED] is the URL for your CSS file.
9
+ // `before` [OPTIONAL] is the element the script should use as a reference for injecting our stylesheet <link> before
10
+ // By default, loadCSS attempts to inject the link after the last stylesheet or script in the DOM. However, you might desire a more specific location in your document.
11
+ // `media` [OPTIONAL] is the media type or query of the stylesheet. By default it will be 'all'
12
+ // `attributes` [OPTIONAL] is the Object of attribute name/attribute value pairs to set on the stylesheet's DOM Element.
13
+ var doc = w.document;
14
+ var ss = doc.createElement( "link" );
15
+ var ref;
16
+ if( before ){
17
+ ref = before;
18
+ }
19
+ else {
20
+ var refs = ( doc.body || doc.getElementsByTagName( "head" )[ 0 ] ).childNodes;
21
+ ref = refs[ refs.length - 1];
22
+ }
23
+
24
+ var sheets = doc.styleSheets;
25
+ // Set any of the provided attributes to the stylesheet DOM Element.
26
+ if( attributes ){
27
+ for( var attributeName in attributes ){
28
+ if( attributes.hasOwnProperty( attributeName ) ){
29
+ ss.setAttribute( attributeName, attributes[attributeName] );
30
+ }
31
+ }
32
+ }
33
+ ss.rel = "stylesheet";
34
+ ss.href = href;
35
+ // temporarily set media to something inapplicable to ensure it'll fetch without blocking render
36
+ ss.media = "only x";
37
+
38
+ // wait until body is defined before injecting link. This ensures a non-blocking load in IE11.
39
+ function ready( cb ){
40
+ if( doc.body ){
41
+ return cb();
42
+ }
43
+ setTimeout(function(){
44
+ ready( cb );
45
+ });
46
+ }
47
+ // Inject link
48
+ // Note: the ternary preserves the existing behavior of "before" argument, but we could choose to change the argument to "after" in a later release and standardize on ref.nextSibling for all refs
49
+ // Note: `insertBefore` is used instead of `appendChild`, for safety re: http://www.paulirish.com/2011/surefire-dom-element-insertion/
50
+ ready( function(){
51
+ ref.parentNode.insertBefore( ss, ( before ? ref : ref.nextSibling ) );
52
+ });
53
+ // A method (exposed on return object for external use) that mimics onload by polling document.styleSheets until it includes the new sheet.
54
+ var onloadcssdefined = function( cb ){
55
+ var resolvedHref = ss.href;
56
+ var i = sheets.length;
57
+ while( i-- ){
58
+ if( sheets[ i ].href === resolvedHref ){
59
+ return cb();
60
+ }
61
+ }
62
+ setTimeout(function() {
63
+ onloadcssdefined( cb );
64
+ });
65
+ };
66
+
67
+ function loadCB(){
68
+ if( ss.addEventListener ){
69
+ ss.removeEventListener( "load", loadCB );
70
+ }
71
+ ss.media = media || "all";
72
+ }
73
+
74
+ // once loaded, set link's media back to `all` so that the stylesheet applies once it loads
75
+ if( ss.addEventListener ){
76
+ ss.addEventListener( "load", loadCB);
77
+ }
78
+ ss.onloadcssdefined = onloadcssdefined;
79
+ onloadcssdefined( loadCB );
80
+ return ss;
81
+ };
82
+ // commonjs
83
+ if( typeof exports !== "undefined" ){
84
+ exports.loadCSS = loadCSS;
85
+ }
86
+ else {
87
+ w.loadCSS = loadCSS;
88
+ }
89
+ }( typeof global !== "undefined" ? global : this ));
js/minify-3-0-18.min.js ADDED
@@ -0,0 +1 @@
 
1
+ !function(e){var i=window.wp_optimize||{},t=i.send_command,n=wpoptimize.refresh_frequency||6e3;if(!t)return void console.error("WP-Optimize Minify: wp_optimize.send_command is required.");var s={};s.init=function(){var i=this;return this.enabled=!1,e(document).on("wp-optimize/minify/toggle-status",function(t,n){n.hasOwnProperty("enabled")&&(e('[data-whichpage="wpo_minify"]').toggleClass("is-enabled",n.enabled),i.enabled=n.enabled,i.enabled&&i.getFiles())}),e(".purge_minify_cache").click(function(){e.blockUI(),t("purge_minify_cache",null,function(e){console.log(e)}).always(function(){e.unblockUI()})}),e(".purge_all_minify_cache").click(function(){e.blockUI(),t("purge_all_minify_cache",null,function(e){console.log(e)}).always(function(){e.unblockUI()})}),e(".minify_increment_cache").click(function(){e.blockUI(),t("minify_increment_cache",null,function(e){console.log(e)}).always(function(){e.unblockUI()})}),e("input[type=checkbox].wpo-save-setting").on("change",function(i){var n=e(this),s=n.prop("checked"),o=n.prop("name"),c={};c[o]=s,e.blockUI(),t("save_minify_settings",c,function(e){e.success?n.trigger("wp-optimize/minify/saved_setting"):console.log("Settings not saved",c)}).always(function(){e.unblockUI()})}),e("#wpo_min_enable_minify").on("wp-optimize/minify/saved_setting",function(){this.enabled=e(this).prop("checked"),e(document).trigger("wp-optimize/minify/toggle-status",{enabled:this.enabled})}),e("#wpo_min_enable_minify, #wpo_min_enable_minify_css, #wpo_min_enable_minify_js, #wpo_min_enable_minify_html").on("wp-optimize/minify/saved_setting",function(){e(this).closest(".wpo_section").toggleClass("wpo-feature-is-disabled",!e(this).is(":checked"))}),e("#wpo_min_enable_minify_debug").on("wp-optimize/minify/saved_setting",function(){e.blockUI({message:"<h1>"+wpoptimize.page_refresh+"</h1>"}),location.href=e("#wp-optimize-nav-tab-wpo_minify-advanced").prop("href")}),e("#wpo_min_edit_default_exclutions").on("wp-optimize/minify/saved_setting",function(){e(".wpo-minify-default-exclusions").toggleClass("hidden",!e(this).prop("checked"))}),e(".wp-optimize-save-minify-settings").click(function(i){i.preventDefault();var n=e(this),s=n.closest("form"),o=n.next(),c=o.next();o.show(),e.blockUI();var l=e(s).serializeArray().reduce(function(e,i){return e[i.name]=i.value,e},{});e(s).find('input[type="checkbox"]').each(function(i){var t=e(this).attr("name");l[t]=e(this).is(":checked")?"true":"false"}),t("save_minify_settings",l,function(i){i.hasOwnProperty("error")?(console.log(i.error),e(".wpo-error__enabling-cache").removeClass("wpo_hidden").find("p").text(i.error.message)):e(".wpo-error__enabling-cache").addClass("wpo_hidden").find("p").text(""),o.hide(),c.show(),setTimeout(function(){c.fadeOut("slow",function(){c.hide()})},5e3)}).always(function(){e.unblockUI()})}),e(".wp-optimize-minify-status-information-notice").on("click",".notice-dismiss",function(e){e.preventDefault(),t("hide_minify_notice")}),e("#wpo_min_jsprocessed, #wpo_min_cssprocessed").on("click",".log",function(i){i.preventDefault(),e(this).nextAll(".wpo_min_log").slideToggle("fast")}),this.enabled=e("#wpo_min_enable_minify").prop("checked"),e(document).trigger("wp-optimize/minify/toggle-status",{enabled:this.enabled}),this},s.getFiles=function(){if(this.enabled){var i={stamp:(new Date).getTime()};t("get_minify_cached_files",i,function(i){i.cachesize.length>0&&(e("#wpo_min_cache_size").html(i.cachesize),e("#wpo_min_cache_time").html(i.cacheTime),e("#wpo_min_cache_path").html(i.cachePath));var t=[];i.js.length>0&&e(i.js).each(function(){t.push(this.uid),0==e("#"+this.uid).length&&e("#wpo_min_jsprocessed ul.processed").append('\t\t\t\t\t\t<li id="'+this.uid+'">\t\t\t\t\t\t\t<span class="filename">'+this.filename+" ("+this.fsize+')</span>\t\t\t\t\t\t\t<a href="#" class="log">'+wpoptimize.toggle_info+'</a>\t\t\t\t\t\t\t<div class="hidden wpo_min_log">'+this.log+"</div>\t\t\t\t\t\t</li>\t\t\t\t\t")}),e("#wpo_min_jsprocessed ul.processed .no-files-yet").toggle(!i.js.length),i.css.length>0&&e(i.css).each(function(){t.push(this.uid),0==e("#"+this.uid).length&&e("#wpo_min_cssprocessed ul.processed").append('\t\t\t\t\t\t<li id="'+this.uid+'">\t\t\t\t\t\t\t<span class="filename">'+this.filename+" ("+this.fsize+')</span>\t\t\t\t\t\t\t<a href="#" class="log">'+wpoptimize.toggle_info+'</a>\t\t\t\t\t\t\t<div class="hidden wpo_min_log">'+this.log+"</div>\t\t\t\t\t\t</li>\t\t\t\t\t")}),e("#wpo_min_cssprocessed ul.processed .no-files-yet").toggle(!i.css.length),e("#wpo_min_jsprocessed ul.processed > li, #wpo_min_cssprocessed ul.processed > li").each(function(){-1==jQuery.inArray(e(this).attr("id"),t)&&(e(this).is(".no-files-yet")||e(this).remove())})}),n&&setTimeout(s.getFiles.bind(this),n)}},i.minify=s}(jQuery);
js/minify-admin-purge-3-0-18.min.js ADDED
@@ -0,0 +1 @@
 
1
+ jQuery(document).ready(function(e){e("#wp-admin-bar-purge_minify_cache").click(function(n){n.preventDefault(),wp_optimize.send_command("purge_minify_cache",null,function(e){console.log(e),e.hasOwnProperty("error")&&alert(e.error),e.hasOwnProperty("message")&&alert(e.notice)}).always(function(){e.unblockUI()})})});
js/minify-admin-purge.js ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ jQuery(document).ready(function ($) {
2
+ $('#wp-admin-bar-purge_minify_cache').click(function(e) {
3
+ e.preventDefault();
4
+ wp_optimize.send_command('purge_minify_cache', null, function(response) {
5
+ console.log(response)
6
+ if (response.hasOwnProperty('error')) {
7
+ alert(response.error);
8
+ }
9
+ if (response.hasOwnProperty('message')) {
10
+ alert(response.notice);
11
+ }
12
+ }).always(function() {
13
+ $.unblockUI();
14
+ });
15
+ })
16
+ });
js/minify.js ADDED
@@ -0,0 +1,244 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function ($) {
2
+ var wp_optimize = window.wp_optimize || {};
3
+ var send_command = wp_optimize.send_command;
4
+ var refresh_frequency = wpoptimize.refresh_frequency || 6000;
5
+
6
+ if (!send_command) {
7
+ console.error('WP-Optimize Minify: wp_optimize.send_command is required.');
8
+ return;
9
+ }
10
+
11
+ var minify = {};
12
+
13
+ /**
14
+ * Initializing the minify feature and events
15
+ */
16
+ minify.init = function () {
17
+
18
+ var minify = this;
19
+ this.enabled = false;
20
+
21
+ $(document).on('wp-optimize/minify/toggle-status', function(e, params) {
22
+ if (params.hasOwnProperty('enabled')) {
23
+ $('[data-whichpage="wpo_minify"]').toggleClass('is-enabled', params.enabled)
24
+ minify.enabled = params.enabled;
25
+ if (minify.enabled) minify.getFiles();
26
+ }
27
+ });
28
+
29
+ /**
30
+ * The standard handler for clearing the cache. Safe to use
31
+ */
32
+ $('.purge_minify_cache').click(function() {
33
+ $.blockUI();
34
+ send_command('purge_minify_cache', null, function(response) {
35
+ console.log(response)
36
+ }).always(function() {
37
+ $.unblockUI();
38
+ });
39
+ });
40
+
41
+ /**
42
+ * Removes the entire cache dir.
43
+ * Use with caution, as cached html may still reference those files.
44
+ */
45
+ $('.purge_all_minify_cache').click(function() {
46
+ $.blockUI();
47
+ send_command('purge_all_minify_cache', null, function(response) {
48
+ console.log(response)
49
+
50
+ }).always(function() {
51
+ $.unblockUI();
52
+ });
53
+ });
54
+
55
+ /**
56
+ * Forces minifiy to create a new cache, safe to use
57
+ */
58
+ $('.minify_increment_cache').click(function() {
59
+ $.blockUI();
60
+ send_command('minify_increment_cache', null, function(response) {
61
+ console.log(response)
62
+ }).always(function() {
63
+ $.unblockUI();
64
+ });
65
+ });
66
+
67
+
68
+ // ======= SLIDERS ========
69
+ // Generic slider save
70
+ $('input[type=checkbox].wpo-save-setting').on('change', function(e) {
71
+ var input = $(this),
72
+ val = input.prop('checked'),
73
+ name = input.prop('name'),
74
+ data = {};
75
+ data[name] = val;
76
+ $.blockUI();
77
+ send_command('save_minify_settings', data, function(response) {
78
+ if (response.success) {
79
+ input.trigger('wp-optimize/minify/saved_setting');
80
+ } else {
81
+ console.log('Settings not saved', data)
82
+ }
83
+ }).always(function() {
84
+ $.unblockUI();
85
+ });
86
+ });
87
+
88
+ // Slider enable minify
89
+ $('#wpo_min_enable_minify').on('wp-optimize/minify/saved_setting', function() {
90
+ this.enabled = $(this).prop('checked');
91
+ $(document).trigger('wp-optimize/minify/toggle-status', {enabled: this.enabled});
92
+ });
93
+
94
+ // Toggle wpo-feature-is-disabled class
95
+ $('#wpo_min_enable_minify, #wpo_min_enable_minify_css, #wpo_min_enable_minify_js, #wpo_min_enable_minify_html').on('wp-optimize/minify/saved_setting', function() {
96
+ $(this).closest('.wpo_section').toggleClass('wpo-feature-is-disabled', !$(this).is(':checked'));
97
+ });
98
+
99
+ // slider enable Debug mode
100
+ $('#wpo_min_enable_minify_debug').on('wp-optimize/minify/saved_setting', function() {
101
+ // Refresh the page as it's needed to show the extra options
102
+ $.blockUI({message: '<h1>'+wpoptimize.page_refresh+'</h1>'});
103
+ location.href = $('#wp-optimize-nav-tab-wpo_minify-advanced').prop('href');
104
+ });
105
+
106
+ // Edit default exclusions
107
+ $('#wpo_min_edit_default_exclutions').on('wp-optimize/minify/saved_setting', function() {
108
+ // Show exclusions section
109
+ $('.wpo-minify-default-exclusions').toggleClass('hidden', !$(this).prop('checked'));
110
+ });
111
+
112
+ // Save settings
113
+ $('.wp-optimize-save-minify-settings').click(function(e) {
114
+ e.preventDefault();
115
+ var btn = $(this),
116
+ form = btn.closest('form'),
117
+ spinner = btn.next(),
118
+ success_icon = spinner.next();
119
+
120
+ spinner.show();
121
+ $.blockUI();
122
+
123
+ var data = $(form).serializeArray().reduce(function(collection, item) {
124
+ collection[item.name] = item.value;
125
+ return collection;
126
+ }, {});
127
+
128
+ $(form).find('input[type="checkbox"]').each(function(i) {
129
+ var name = $(this).attr("name");
130
+ data[name] = $(this).is(':checked') ? 'true' : 'false';
131
+ });
132
+
133
+ send_command('save_minify_settings', data, function(response) {
134
+ if (response.hasOwnProperty('error')) {
135
+ // show error
136
+ console.log(response.error);
137
+ $('.wpo-error__enabling-cache').removeClass('wpo_hidden').find('p').text(response.error.message);
138
+ } else {
139
+ $('.wpo-error__enabling-cache').addClass('wpo_hidden').find('p').text('');
140
+ }
141
+ spinner.hide();
142
+ success_icon.show();
143
+ setTimeout(function() {
144
+ success_icon.fadeOut('slow', function() {
145
+ success_icon.hide();
146
+ });
147
+ }, 5000);
148
+ }).always(function() {
149
+ $.unblockUI();
150
+ });
151
+ })
152
+
153
+ // Dismiss information notice
154
+ $('.wp-optimize-minify-status-information-notice').on('click', '.notice-dismiss', function(e) {
155
+ e.preventDefault();
156
+ send_command('hide_minify_notice');
157
+ });
158
+
159
+ // Show logs
160
+ $('#wpo_min_jsprocessed, #wpo_min_cssprocessed').on('click', '.log', function(e) {
161
+ e.preventDefault();
162
+ $(this).nextAll('.wpo_min_log').slideToggle('fast');
163
+ });
164
+
165
+ // Set the initial `enabled` value
166
+ this.enabled = $('#wpo_min_enable_minify').prop('checked');
167
+ $(document).trigger('wp-optimize/minify/toggle-status', {enabled: this.enabled});
168
+
169
+ return this;
170
+ }
171
+
172
+ /**
173
+ * Get the list of files generated by Minify and update the markup.
174
+ */
175
+ minify.getFiles = function() {
176
+ // Only run if the feature is enabled
177
+ if (!this.enabled) return;
178
+
179
+ var data = {
180
+ stamp: new Date().getTime()
181
+ };
182
+
183
+ send_command('get_minify_cached_files', data, function(response) {
184
+ if (response.cachesize.length > 0) {
185
+ $("#wpo_min_cache_size").html(response.cachesize);
186
+ $("#wpo_min_cache_time").html(response.cacheTime);
187
+ $("#wpo_min_cache_path").html(response.cachePath);
188
+ }
189
+
190
+ // reset
191
+ var wpominarr = [];
192
+
193
+ // js
194
+ if (response.js.length > 0) {
195
+ $(response.js).each(function () {
196
+ wpominarr.push(this.uid);
197
+ if ($('#'+this.uid).length == 0) {
198
+ $('#wpo_min_jsprocessed ul.processed').append('\
199
+ <li id="'+this.uid+'">\
200
+ <span class="filename">'+this.filename+' ('+this.fsize+')</span>\
201
+ <a href="#" class="log">' + wpoptimize.toggle_info + '</a>\
202
+ <div class="hidden wpo_min_log">'+this.log+'</div>\
203
+ </li>\
204
+ ');
205
+ }
206
+ });
207
+ }
208
+
209
+ $('#wpo_min_jsprocessed ul.processed .no-files-yet').toggle(!response.js.length);
210
+
211
+ // css
212
+ if (response.css.length > 0) {
213
+ $(response.css).each(function () {
214
+ wpominarr.push(this.uid);
215
+ if ($('#'+this.uid).length == 0) {
216
+ $('#wpo_min_cssprocessed ul.processed').append('\
217
+ <li id="'+this.uid+'">\
218
+ <span class="filename">'+this.filename+' ('+this.fsize+')</span>\
219
+ <a href="#" class="log">' + wpoptimize.toggle_info + '</a>\
220
+ <div class="hidden wpo_min_log">'+this.log+'</div>\
221
+ </li>\
222
+ ');
223
+ }
224
+ });
225
+ }
226
+
227
+ $('#wpo_min_cssprocessed ul.processed .no-files-yet').toggle(!response.css.length);
228
+
229
+ // Remove <li> if it's not in the files array
230
+ $('#wpo_min_jsprocessed ul.processed > li, #wpo_min_cssprocessed ul.processed > li').each(function () {
231
+ if (-1 == jQuery.inArray($(this).attr('id'), wpominarr)) {
232
+ if (!$(this).is('.no-files-yet')) {
233
+ $(this).remove();
234
+ }
235
+ }
236
+ });
237
+ });
238
+
239
+ if (refresh_frequency) setTimeout(minify.getFiles.bind(this), refresh_frequency);
240
+ }
241
+
242
+ wp_optimize.minify = minify;
243
+
244
+ })(jQuery);
js/{queue-3-0-16.min.js → queue-3-0-18.min.js} RENAMED
File without changes
js/send-command-3-0-18.min.js ADDED
@@ -0,0 +1 @@
 
1
+ var wp_optimize=window.wp_optimize||{};wp_optimize.send_command=function(e,o,i,t,r){t="undefined"==typeof t||t,o||(o={}),o.hasOwnProperty("include_ui_elements")||(o.include_ui_elements=!0);var n={action:"wp_optimize_ajax",subaction:e,nonce:wp_optimize_ajax_nonce,data:o},s={type:"post",data:n,success:function(e){if(t){try{var o=wpo_parse_json(e)}catch(r){return console.log(r),console.log(e),void alert(wpoptimize.error_unexpected_response)}if(!o.result&&o.hasOwnProperty("error_code")&&o.error_code)return void wp_optimize.notices.show_notice(o.error_code,o.error_message);"function"==typeof i&&i(o)}else{if(!e.result&&e.hasOwnProperty("error_code")&&e.error_code)return void wp_optimize.notices.show_notice(e.error_code,e.error_message);"function"==typeof i&&i(e)}}};return"object"==typeof r&&r.hasOwnProperty("timeout")&&(s.timeout=r.timeout),jQuery.ajax(ajaxurl,s)},wp_optimize.notices={errors:[],show_notice:function(e,o){jQuery("#wp-optimize-wrap").length?(this.notice||this.add_notice(),this.notice.show(),this.errors[e]||(this.errors[e]=jQuery("<p/>").html(o).appendTo(this.notice).data("error_code",e))):window.wp&&wp.hasOwnProperty("data")?wp.data.dispatch("core/notices").createNotice("error","WP-Optimize: "+o,{isDismissible:!0}):alert("WP-Optimize: "+o)},add_notice:function(){this.notice_container=jQuery('<div class="wpo-main-error-notice"></div>').prependTo("#wp-optimize-wrap"),this.notice=jQuery('<div class="notice notice-error wpo-notice is-dismissible"><button type="button" class="notice-dismiss"><span class="screen-reader-text">'+commonL10n.dismiss+"</span></button></div>"),this.notice.appendTo(this.notice_container),this.notice.on("click",".notice-dismiss",function(e){this.notice.hide().find("p").remove(),this.errors=[]}.bind(this))}};
js/send-command.js ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ var wp_optimize = window.wp_optimize || {};
2
+
3
+ /**
4
+ * Send an action via admin-ajax.php.
5
+ *
6
+ * @param {string} action The action to send
7
+ * @param {[type]} data Data to send
8
+ * @param {Function} callback Will be called with the results
9
+ * @param {boolean} json_parse JSON parse the results
10
+ * @param {object} options Optional extra options; current properties supported are 'timeout' (in milliseconds)
11
+ *
12
+ * @return {JSON}
13
+ */
14
+ wp_optimize.send_command = function (action, data, callback, json_parse, options) {
15
+
16
+ json_parse = ('undefined' === typeof json_parse) ? true : json_parse;
17
+
18
+ if (!data) data = {};
19
+ // If the command doesn't have the property, default to true
20
+ if (!data.hasOwnProperty('include_ui_elements')) {
21
+ data.include_ui_elements = true;
22
+ }
23
+
24
+ var ajax_data = {
25
+ action: 'wp_optimize_ajax',
26
+ subaction: action,
27
+ nonce: wp_optimize_ajax_nonce,
28
+ data: data
29
+ };
30
+
31
+ var args = {
32
+ type: 'post',
33
+ data: ajax_data,
34
+ success: function (response) {
35
+ if (json_parse) {
36
+ try {
37
+ var resp = wpo_parse_json(response);
38
+ } catch (e) {
39
+ console.log(e);
40
+ console.log(response);
41
+ alert(wpoptimize.error_unexpected_response);
42
+ return;
43
+ }
44
+ // If result == false and and error code is provided, show the error and return.
45
+ if (!resp.result && resp.hasOwnProperty('error_code') && resp.error_code) {
46
+ wp_optimize.notices.show_notice(resp.error_code, resp.error_message);
47
+ return;
48
+ }
49
+ if ('function' === typeof callback) callback(resp);
50
+ } else {
51
+ if (!response.result && response.hasOwnProperty('error_code') && response.error_code) {
52
+ wp_optimize.notices.show_notice(response.error_code, response.error_message);
53
+ return;
54
+ }
55
+ if ('function' === typeof callback) callback(response);
56
+ }
57
+ }
58
+ };
59
+
60
+ // Eventually merge options
61
+ if ('object' === typeof options) {
62
+ if (options.hasOwnProperty('timeout')) { args.timeout = options.timeout; }
63
+ }
64
+
65
+ return jQuery.ajax(ajaxurl, args);
66
+ };
67
+
68
+
69
+ /**
70
+ * JS notices
71
+ */
72
+ wp_optimize.notices = {
73
+ errors: [],
74
+ show_notice: function(error_code, error_message) {
75
+ // WPO main page
76
+ if (jQuery('#wp-optimize-wrap').length) {
77
+ if (!this.notice) this.add_notice();
78
+ this.notice.show();
79
+ if (!this.errors[error_code]) {
80
+ this.errors[error_code] = jQuery('<p/>').html(error_message).appendTo(this.notice).data('error_code', error_code);
81
+ }
82
+ // Post edit page
83
+ } else if (window.wp && wp.hasOwnProperty('data')) {
84
+ wp.data.dispatch('core/notices').createNotice(
85
+ 'error',
86
+ 'WP-Optimize: ' + error_message,
87
+ {
88
+ isDismissible: true
89
+ }
90
+ );
91
+ // Other locations
92
+ } else {
93
+ alert('WP-Optimize: ' + error_message);
94
+ }
95
+ },
96
+ add_notice: function() {
97
+ this.notice_container = jQuery('<div class="wpo-main-error-notice"></div>').prependTo('#wp-optimize-wrap');
98
+ this.notice = jQuery('<div class="notice notice-error wpo-notice is-dismissible"><button type="button" class="notice-dismiss"><span class="screen-reader-text">'+commonL10n.dismiss+'</span></button></div>');
99
+ this.notice.appendTo(this.notice_container);
100
+ this.notice.on('click', '.notice-dismiss', function(e) {
101
+ this.notice.hide().find('p').remove();
102
+ this.errors = [];
103
+ }.bind(this));
104
+ }
105
+ };
js/tablesorter/jquery.tablesorter.js CHANGED
@@ -1,2916 +1,2916 @@
1
  (function(factory){if (typeof define === 'function' && define.amd){define(['jquery'], factory);} else if (typeof module === 'object' && typeof module.exports === 'object'){module.exports = factory(require('jquery'));} else {factory(jQuery);}}(function(jQuery){
2
- /*! TableSorter (FORK) v2.31.2 *//*
3
- * Client-side table sorting with ease!
4
- * @requires jQuery v1.2.6+
5
- *
6
- * Copyright (c) 2007 Christian Bach
7
- * fork maintained by Rob Garrison
8
- *
9
- * Examples and original docs at: http://tablesorter.com
10
- * Dual licensed under the MIT and GPL licenses:
11
- * http://www.opensource.org/licenses/mit-license.php
12
- * http://www.gnu.org/licenses/gpl.html
13
- *
14
- * @type jQuery
15
- * @name tablesorter (FORK)
16
- * @cat Plugins/Tablesorter
17
- * @author Christian Bach - christian.bach@polyester.se
18
- * @contributor Rob Garrison - https://github.com/Mottie/tablesorter
19
- * @docs (fork) - https://mottie.github.io/tablesorter/docs/
20
- */
21
- /*jshint browser:true, jquery:true, unused:false, expr: true */
22
- ;( function( $ ) {
23
- 'use strict';
24
- var ts = $.tablesorter = {
25
-
26
- version : '2.31.2',
27
-
28
- parsers : [],
29
- widgets : [],
30
- defaults : {
31
-
32
- // *** appearance
33
- theme : 'default', // adds tablesorter-{theme} to the table for styling
34
- widthFixed : false, // adds colgroup to fix widths of columns
35
- showProcessing : false, // show an indeterminate timer icon in the header when the table is sorted or filtered.
36
-
37
- headerTemplate : '{content}',// header layout template (HTML ok); {content} = innerHTML, {icon} = <i/> // class from cssIcon
38
- onRenderTemplate : null, // function( index, template ) { return template; }, // template is a string
39
- onRenderHeader : null, // function( index ) {}, // nothing to return
40
-
41
- // *** functionality
42
- cancelSelection : true, // prevent text selection in the header
43
- tabIndex : true, // add tabindex to header for keyboard accessibility
44
- dateFormat : 'mmddyyyy', // other options: 'ddmmyyy' or 'yyyymmdd'
45
- sortMultiSortKey : 'shiftKey', // key used to select additional columns
46
- sortResetKey : 'ctrlKey', // key used to remove sorting on a column
47
- usNumberFormat : true, // false for German '1.234.567,89' or French '1 234 567,89'
48
- delayInit : false, // if false, the parsed table contents will not update until the first sort
49
- serverSideSorting: false, // if true, server-side sorting should be performed because client-side sorting will be disabled, but the ui and events will still be used.
50
- resort : true, // default setting to trigger a resort after an 'update', 'addRows', 'updateCell', etc has completed
51
-
52
- // *** sort options
53
- headers : {}, // set sorter, string, empty, locked order, sortInitialOrder, filter, etc.
54
- ignoreCase : true, // ignore case while sorting
55
- sortForce : null, // column(s) first sorted; always applied
56
- sortList : [], // Initial sort order; applied initially; updated when manually sorted
57
- sortAppend : null, // column(s) sorted last; always applied
58
- sortStable : false, // when sorting two rows with exactly the same content, the original sort order is maintained
59
-
60
- sortInitialOrder : 'asc', // sort direction on first click
61
- sortLocaleCompare: false, // replace equivalent character (accented characters)
62
- sortReset : false, // third click on the header will reset column to default - unsorted
63
- sortRestart : false, // restart sort to 'sortInitialOrder' when clicking on previously unsorted columns
64
-
65
- emptyTo : 'bottom', // sort empty cell to bottom, top, none, zero, emptyMax, emptyMin
66
- stringTo : 'max', // sort strings in numerical column as max, min, top, bottom, zero
67
- duplicateSpan : true, // colspan cells in the tbody will have duplicated content in the cache for each spanned column
68
- textExtraction : 'basic', // text extraction method/function - function( node, table, cellIndex ) {}
69
- textAttribute : 'data-text',// data-attribute that contains alternate cell text (used in default textExtraction function)
70
- textSorter : null, // choose overall or specific column sorter function( a, b, direction, table, columnIndex ) [alt: ts.sortText]
71
- numberSorter : null, // choose overall numeric sorter function( a, b, direction, maxColumnValue )
72
-
73
- // *** widget options
74
- initWidgets : true, // apply widgets on tablesorter initialization
75
- widgetClass : 'widget-{name}', // table class name template to match to include a widget
76
- widgets : [], // method to add widgets, e.g. widgets: ['zebra']
77
- widgetOptions : {
78
- zebra : [ 'even', 'odd' ] // zebra widget alternating row class names
79
- },
80
-
81
- // *** callbacks
82
- initialized : null, // function( table ) {},
83
-
84
- // *** extra css class names
85
- tableClass : '',
86
- cssAsc : '',
87
- cssDesc : '',
88
- cssNone : '',
89
- cssHeader : '',
90
- cssHeaderRow : '',
91
- cssProcessing : '', // processing icon applied to header during sort/filter
92
-
93
- cssChildRow : 'tablesorter-childRow', // class name indiciating that a row is to be attached to its parent
94
- cssInfoBlock : 'tablesorter-infoOnly', // don't sort tbody with this class name (only one class name allowed here!)
95
- cssNoSort : 'tablesorter-noSort', // class name added to element inside header; clicking on it won't cause a sort
96
- cssIgnoreRow : 'tablesorter-ignoreRow',// header row to ignore; cells within this row will not be added to c.$headers
97
-
98
- cssIcon : 'tablesorter-icon', // if this class does not exist, the {icon} will not be added from the headerTemplate
99
- cssIconNone : '', // class name added to the icon when there is no column sort
100
- cssIconAsc : '', // class name added to the icon when the column has an ascending sort
101
- cssIconDesc : '', // class name added to the icon when the column has a descending sort
102
- cssIconDisabled : '', // class name added to the icon when the column has a disabled sort
103
-
104
- // *** events
105
- pointerClick : 'click',
106
- pointerDown : 'mousedown',
107
- pointerUp : 'mouseup',
108
-
109
- // *** selectors
110
- selectorHeaders : '> thead th, > thead td',
111
- selectorSort : 'th, td', // jQuery selector of content within selectorHeaders that is clickable to trigger a sort
112
- selectorRemove : '.remove-me',
113
-
114
- // *** advanced
115
- debug : false,
116
-
117
- // *** Internal variables
118
- headerList: [],
119
- empties: {},
120
- strings: {},
121
- parsers: [],
122
-
123
- // *** parser options for validator; values must be falsy!
124
- globalize: 0,
125
- imgAttr: 0
126
-
127
- // removed: widgetZebra: { css: ['even', 'odd'] }
128
-
129
- },
130
-
131
- // internal css classes - these will ALWAYS be added to
132
- // the table and MUST only contain one class name - fixes #381
133
- css : {
134
- table : 'tablesorter',
135
- cssHasChild: 'tablesorter-hasChildRow',
136
- childRow : 'tablesorter-childRow',
137
- colgroup : 'tablesorter-colgroup',
138
- header : 'tablesorter-header',
139
- headerRow : 'tablesorter-headerRow',
140
- headerIn : 'tablesorter-header-inner',
141
- icon : 'tablesorter-icon',
142
- processing : 'tablesorter-processing',
143
- sortAsc : 'tablesorter-headerAsc',
144
- sortDesc : 'tablesorter-headerDesc',
145
- sortNone : 'tablesorter-headerUnSorted'
146
- },
147
-
148
- // labels applied to sortable headers for accessibility (aria) support
149
- language : {
150
- sortAsc : 'Ascending sort applied, ',
151
- sortDesc : 'Descending sort applied, ',
152
- sortNone : 'No sort applied, ',
153
- sortDisabled : 'sorting is disabled',
154
- nextAsc : 'activate to apply an ascending sort',
155
- nextDesc : 'activate to apply a descending sort',
156
- nextNone : 'activate to remove the sort'
157
- },
158
-
159
- regex : {
160
- templateContent : /\{content\}/g,
161
- templateIcon : /\{icon\}/g,
162
- templateName : /\{name\}/i,
163
- spaces : /\s+/g,
164
- nonWord : /\W/g,
165
- formElements : /(input|select|button|textarea)/i,
166
-
167
- // *** sort functions ***
168
- // regex used in natural sort
169
- // chunk/tokenize numbers & letters
170
- chunk : /(^([+\-]?(?:\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?)?$|^0x[0-9a-f]+$|\d+)/gi,
171
- // replace chunks @ ends
172
- chunks : /(^\\0|\\0$)/,
173
- hex : /^0x[0-9a-f]+$/i,
174
-
175
- // *** formatFloat ***
176
- comma : /,/g,
177
- digitNonUS : /[\s|\.]/g,
178
- digitNegativeTest : /^\s*\([.\d]+\)/,
179
- digitNegativeReplace : /^\s*\(([.\d]+)\)/,
180
-
181
- // *** isDigit ***
182
- digitTest : /^[\-+(]?\d+[)]?$/,
183
- digitReplace : /[,.'"\s]/g
184
-
185
- },
186
-
187
- // digit sort, text location
188
- string : {
189
- max : 1,
190
- min : -1,
191
- emptymin : 1,
192
- emptymax : -1,
193
- zero : 0,
194
- none : 0,
195
- 'null' : 0,
196
- top : true,
197
- bottom : false
198
- },
199
-
200
- keyCodes : {
201
- enter : 13
202
- },
203
-
204
- // placeholder date parser data (globalize)
205
- dates : {},
206
-
207
- // These methods can be applied on table.config instance
208
- instanceMethods : {},
209
-
210
- /*
211
- ▄█████ ██████ ██████ ██ ██ █████▄
212
- ▀█▄ ██▄▄ ██ ██ ██ ██▄▄██
213
- ▀█▄ ██▀▀ ██ ██ ██ ██▀▀▀
214
- █████▀ ██████ ██ ▀████▀ ██
215
- */
216
-
217
- setup : function( table, c ) {
218
- // if no thead or tbody, or tablesorter is already present, quit
219
- if ( !table || !table.tHead || table.tBodies.length === 0 || table.hasInitialized === true ) {
220
- if ( ts.debug(c, 'core') ) {
221
- if ( table.hasInitialized ) {
222
- console.warn( 'Stopping initialization. Tablesorter has already been initialized' );
223
- } else {
224
- console.error( 'Stopping initialization! No table, thead or tbody', table );
225
- }
226
- }
227
- return;
228
- }
229
-
230
- var tmp = '',
231
- $table = $( table ),
232
- meta = $.metadata;
233
- // initialization flag
234
- table.hasInitialized = false;
235
- // table is being processed flag
236
- table.isProcessing = true;
237
- // make sure to store the config object
238
- table.config = c;
239
- // save the settings where they read
240
- $.data( table, 'tablesorter', c );
241
- if ( ts.debug(c, 'core') ) {
242
- console[ console.group ? 'group' : 'log' ]( 'Initializing tablesorter v' + ts.version );
243
- $.data( table, 'startoveralltimer', new Date() );
244
- }
245
-
246
- // removing this in version 3 (only supports jQuery 1.7+)
247
- c.supportsDataObject = ( function( version ) {
248
- version[ 0 ] = parseInt( version[ 0 ], 10 );
249
- return ( version[ 0 ] > 1 ) || ( version[ 0 ] === 1 && parseInt( version[ 1 ], 10 ) >= 4 );
250
- })( $.fn.jquery.split( '.' ) );
251
- // ensure case insensitivity
252
- c.emptyTo = c.emptyTo.toLowerCase();
253
- c.stringTo = c.stringTo.toLowerCase();
254
- c.last = { sortList : [], clickedIndex : -1 };
255
- // add table theme class only if there isn't already one there
256
- if ( !/tablesorter\-/.test( $table.attr( 'class' ) ) ) {
257
- tmp = ( c.theme !== '' ? ' tablesorter-' + c.theme : '' );
258
- }
259
-
260
- // give the table a unique id, which will be used in namespace binding
261
- if ( !c.namespace ) {
262
- c.namespace = '.tablesorter' + Math.random().toString( 16 ).slice( 2 );
263
- } else {
264
- // make sure namespace starts with a period & doesn't have weird characters
265
- c.namespace = '.' + c.namespace.replace( ts.regex.nonWord, '' );
266
- }
267
-
268
- c.table = table;
269
- c.$table = $table
270
- // add namespace to table to allow bindings on extra elements to target
271
- // the parent table (e.g. parser-input-select)
272
- .addClass( ts.css.table + ' ' + c.tableClass + tmp + ' ' + c.namespace.slice(1) )
273
- .attr( 'role', 'grid' );
274
- c.$headers = $table.find( c.selectorHeaders );
275
-
276
- c.$table.children().children( 'tr' ).attr( 'role', 'row' );
277
- c.$tbodies = $table.children( 'tbody:not(.' + c.cssInfoBlock + ')' ).attr({
278
- 'aria-live' : 'polite',
279
- 'aria-relevant' : 'all'
280
- });
281
- if ( c.$table.children( 'caption' ).length ) {
282
- tmp = c.$table.children( 'caption' )[ 0 ];
283
- if ( !tmp.id ) { tmp.id = c.namespace.slice( 1 ) + 'caption'; }
284
- c.$table.attr( 'aria-labelledby', tmp.id );
285
- }
286
- c.widgetInit = {}; // keep a list of initialized widgets
287
- // change textExtraction via data-attribute
288
- c.textExtraction = c.$table.attr( 'data-text-extraction' ) || c.textExtraction || 'basic';
289
- // build headers
290
- ts.buildHeaders( c );
291
- // fixate columns if the users supplies the fixedWidth option
292
- // do this after theme has been applied
293
- ts.fixColumnWidth( table );
294
- // add widgets from class name
295
- ts.addWidgetFromClass( table );
296
- // add widget options before parsing (e.g. grouping widget has parser settings)
297
- ts.applyWidgetOptions( table );
298
- // try to auto detect column type, and store in tables config
299
- ts.setupParsers( c );
300
- // start total row count at zero
301
- c.totalRows = 0;
302
- // only validate options while debugging. See #1528
303
- if (c.debug) {
304
- ts.validateOptions( c );
305
- }
306
- // build the cache for the tbody cells
307
- // delayInit will delay building the cache until the user starts a sort
308
- if ( !c.delayInit ) { ts.buildCache( c ); }
309
- // bind all header events and methods
310
- ts.bindEvents( table, c.$headers, true );
311
- ts.bindMethods( c );
312
- // get sort list from jQuery data or metadata
313
- // in jQuery < 1.4, an error occurs when calling $table.data()
314
- if ( c.supportsDataObject && typeof $table.data().sortlist !== 'undefined' ) {
315
- c.sortList = $table.data().sortlist;
316
- } else if ( meta && ( $table.metadata() && $table.metadata().sortlist ) ) {
317
- c.sortList = $table.metadata().sortlist;
318
- }
319
- // apply widget init code
320
- ts.applyWidget( table, true );
321
- // if user has supplied a sort list to constructor
322
- if ( c.sortList.length > 0 ) {
323
- // save sortList before any sortAppend is added
324
- c.last.sortList = c.sortList;
325
- ts.sortOn( c, c.sortList, {}, !c.initWidgets );
326
- } else {
327
- ts.setHeadersCss( c );
328
- if ( c.initWidgets ) {
329
- // apply widget format
330
- ts.applyWidget( table, false );
331
- }
332
- }
333
-
334
- // show processesing icon
335
- if ( c.showProcessing ) {
336
- $table
337
- .unbind( 'sortBegin' + c.namespace + ' sortEnd' + c.namespace )
338
- .bind( 'sortBegin' + c.namespace + ' sortEnd' + c.namespace, function( e ) {
339
- clearTimeout( c.timerProcessing );
340
- ts.isProcessing( table );
341
- if ( e.type === 'sortBegin' ) {
342
- c.timerProcessing = setTimeout( function() {
343
- ts.isProcessing( table, true );
344
- }, 500 );
345
- }
346
- });
347
- }
348
-
349
- // initialized
350
- table.hasInitialized = true;
351
- table.isProcessing = false;
352
- if ( ts.debug(c, 'core') ) {
353
- console.log( 'Overall initialization time:' + ts.benchmark( $.data( table, 'startoveralltimer' ) ) );
354
- if ( ts.debug(c, 'core') && console.groupEnd ) { console.groupEnd(); }
355
- }
356
- $table.triggerHandler( 'tablesorter-initialized', table );
357
- if ( typeof c.initialized === 'function' ) {
358
- c.initialized( table );
359
- }
360
- },
361
-
362
- bindMethods : function( c ) {
363
- var $table = c.$table,
364
- namespace = c.namespace,
365
- events = ( 'sortReset update updateRows updateAll updateHeaders addRows updateCell updateComplete ' +
366
- 'sorton appendCache updateCache applyWidgetId applyWidgets refreshWidgets destroy mouseup ' +
367
- 'mouseleave ' ).split( ' ' )
368
- .join( namespace + ' ' );
369
- // apply easy methods that trigger bound events
370
- $table
371
- .unbind( events.replace( ts.regex.spaces, ' ' ) )
372
- .bind( 'sortReset' + namespace, function( e, callback ) {
373
- e.stopPropagation();
374
- // using this.config to ensure functions are getting a non-cached version of the config
375
- ts.sortReset( this.config, function( table ) {
376
- if (table.isApplyingWidgets) {
377
- // multiple triggers in a row... filterReset, then sortReset - see #1361
378
- // wait to update widgets
379
- setTimeout( function() {
380
- ts.applyWidget( table, '', callback );
381
- }, 100 );
382
- } else {
383
- ts.applyWidget( table, '', callback );
384
- }
385
- });
386
- })
387
- .bind( 'updateAll' + namespace, function( e, resort, callback ) {
388
- e.stopPropagation();
389
- ts.updateAll( this.config, resort, callback );
390
- })
391
- .bind( 'update' + namespace + ' updateRows' + namespace, function( e, resort, callback ) {
392
- e.stopPropagation();
393
- ts.update( this.config, resort, callback );
394
- })
395
- .bind( 'updateHeaders' + namespace, function( e, callback ) {
396
- e.stopPropagation();
397
- ts.updateHeaders( this.config, callback );
398
- })
399
- .bind( 'updateCell' + namespace, function( e, cell, resort, callback ) {
400
- e.stopPropagation();
401
- ts.updateCell( this.config, cell, resort, callback );
402
- })
403
- .bind( 'addRows' + namespace, function( e, $row, resort, callback ) {
404
- e.stopPropagation();
405
- ts.addRows( this.config, $row, resort, callback );
406
- })
407
- .bind( 'updateComplete' + namespace, function() {
408
- this.isUpdating = false;
409
- })
410
- .bind( 'sorton' + namespace, function( e, list, callback, init ) {
411
- e.stopPropagation();
412
- ts.sortOn( this.config, list, callback, init );
413
- })
414
- .bind( 'appendCache' + namespace, function( e, callback, init ) {
415
- e.stopPropagation();
416
- ts.appendCache( this.config, init );
417
- if ( $.isFunction( callback ) ) {
418
- callback( this );
419
- }
420
- })
421
- // $tbodies variable is used by the tbody sorting widget
422
- .bind( 'updateCache' + namespace, function( e, callback, $tbodies ) {
423
- e.stopPropagation();
424
- ts.updateCache( this.config, callback, $tbodies );
425
- })
426
- .bind( 'applyWidgetId' + namespace, function( e, id ) {
427
- e.stopPropagation();
428
- ts.applyWidgetId( this, id );
429
- })
430
- .bind( 'applyWidgets' + namespace, function( e, callback ) {
431
- e.stopPropagation();
432
- // apply widgets (false = not initializing)
433
- ts.applyWidget( this, false, callback );
434
- })
435
- .bind( 'refreshWidgets' + namespace, function( e, all, dontapply ) {
436
- e.stopPropagation();
437
- ts.refreshWidgets( this, all, dontapply );
438
- })
439
- .bind( 'removeWidget' + namespace, function( e, name, refreshing ) {
440
- e.stopPropagation();
441
- ts.removeWidget( this, name, refreshing );
442
- })
443
- .bind( 'destroy' + namespace, function( e, removeClasses, callback ) {
444
- e.stopPropagation();
445
- ts.destroy( this, removeClasses, callback );
446
- })
447
- .bind( 'resetToLoadState' + namespace, function( e ) {
448
- e.stopPropagation();
449
- // remove all widgets
450
- ts.removeWidget( this, true, false );
451
- var tmp = $.extend( true, {}, c.originalSettings );
452
- // restore original settings; this clears out current settings, but does not clear
453
- // values saved to storage.
454
- c = $.extend( true, {}, ts.defaults, tmp );
455
- c.originalSettings = tmp;
456
- this.hasInitialized = false;
457
- // setup the entire table again
458
- ts.setup( this, c );
459
- });
460
- },
461
-
462
- bindEvents : function( table, $headers, core ) {
463
- table = $( table )[ 0 ];
464
- var tmp,
465
- c = table.config,
466
- namespace = c.namespace,
467
- downTarget = null;
468
- if ( core !== true ) {
469
- $headers.addClass( namespace.slice( 1 ) + '_extra_headers' );
470
- tmp = ts.getClosest( $headers, 'table' );
471
- if ( tmp.length && tmp[ 0 ].nodeName === 'TABLE' && tmp[ 0 ] !== table ) {
472
- $( tmp[ 0 ] ).addClass( namespace.slice( 1 ) + '_extra_table' );
473
- }
474
- }
475
- tmp = ( c.pointerDown + ' ' + c.pointerUp + ' ' + c.pointerClick + ' sort keyup ' )
476
- .replace( ts.regex.spaces, ' ' )
477
- .split( ' ' )
478
- .join( namespace + ' ' );
479
- // apply event handling to headers and/or additional headers (stickyheaders, scroller, etc)
480
- $headers
481
- // http://stackoverflow.com/questions/5312849/jquery-find-self;
482
- .find( c.selectorSort )
483
- .add( $headers.filter( c.selectorSort ) )
484
- .unbind( tmp )
485
- .bind( tmp, function( e, external ) {
486
- var $cell, cell, temp,
487
- $target = $( e.target ),
488
- // wrap event type in spaces, so the match doesn't trigger on inner words
489
- type = ' ' + e.type + ' ';
490
- // only recognize left clicks
491
- if ( ( ( e.which || e.button ) !== 1 && !type.match( ' ' + c.pointerClick + ' | sort | keyup ' ) ) ||
492
- // allow pressing enter
493
- ( type === ' keyup ' && e.which !== ts.keyCodes.enter ) ||
494
- // allow triggering a click event (e.which is undefined) & ignore physical clicks
495
- ( type.match( ' ' + c.pointerClick + ' ' ) && typeof e.which !== 'undefined' ) ) {
496
- return;
497
- }
498
- // ignore mouseup if mousedown wasn't on the same target
499
- if ( type.match( ' ' + c.pointerUp + ' ' ) && downTarget !== e.target && external !== true ) {
500
- return;
501
- }
502
- // set target on mousedown
503
- if ( type.match( ' ' + c.pointerDown + ' ' ) ) {
504
- downTarget = e.target;
505
- // preventDefault needed or jQuery v1.3.2 and older throws an
506
- // "Uncaught TypeError: handler.apply is not a function" error
507
- temp = $target.jquery.split( '.' );
508
- if ( temp[ 0 ] === '1' && temp[ 1 ] < 4 ) { e.preventDefault(); }
509
- return;
510
- }
511
- downTarget = null;
512
- $cell = ts.getClosest( $( this ), '.' + ts.css.header );
513
- // prevent sort being triggered on form elements
514
- if ( ts.regex.formElements.test( e.target.nodeName ) ||
515
- // nosort class name, or elements within a nosort container
516
- $target.hasClass( c.cssNoSort ) || $target.parents( '.' + c.cssNoSort ).length > 0 ||
517
- // disabled cell directly clicked
518
- $cell.hasClass( 'sorter-false' ) ||
519
- // elements within a button
520
- $target.parents( 'button' ).length > 0 ) {
521
- return !c.cancelSelection;
522
- }
523
- if ( c.delayInit && ts.isEmptyObject( c.cache ) ) {
524
- ts.buildCache( c );
525
- }
526
- // use column index from data-attribute or index of current row; fixes #1116
527
- c.last.clickedIndex = $cell.attr( 'data-column' ) || $cell.index();
528
- cell = c.$headerIndexed[ c.last.clickedIndex ][0];
529
- if ( cell && !cell.sortDisabled ) {
530
- ts.initSort( c, cell, e );
531
- }
532
- });
533
- if ( c.cancelSelection ) {
534
- // cancel selection
535
- $headers
536
- .attr( 'unselectable', 'on' )
537
- .bind( 'selectstart', false )
538
- .css({
539
- 'user-select' : 'none',
540
- 'MozUserSelect' : 'none' // not needed for jQuery 1.8+
541
- });
542
- }
543
- },
544
-
545
- buildHeaders : function( c ) {
546
- var $temp, icon, timer, indx;
547
- c.headerList = [];
548
- c.headerContent = [];
549
- c.sortVars = [];
550
- if ( ts.debug(c, 'core') ) {
551
- timer = new Date();
552
- }
553
- // children tr in tfoot - see issue #196 & #547
554
- // don't pass table.config to computeColumnIndex here - widgets (math) pass it to "quickly" index tbody cells
555
- c.columns = ts.computeColumnIndex( c.$table.children( 'thead, tfoot' ).children( 'tr' ) );
556
- // add icon if cssIcon option exists
557
- icon = c.cssIcon ?
558
- '<i class="' + ( c.cssIcon === ts.css.icon ? ts.css.icon : c.cssIcon + ' ' + ts.css.icon ) + '"></i>' :
559
- '';
560
- // redefine c.$headers here in case of an updateAll that replaces or adds an entire header cell - see #683
561
- c.$headers = $( $.map( c.$table.find( c.selectorHeaders ), function( elem, index ) {
562
- var configHeaders, header, column, template, tmp,
563
- $elem = $( elem );
564
- // ignore cell (don't add it to c.$headers) if row has ignoreRow class
565
- if ( ts.getClosest( $elem, 'tr' ).hasClass( c.cssIgnoreRow ) ) { return; }
566
- // transfer data-column to element if not th/td - #1459
567
- if ( !/(th|td)/i.test( elem.nodeName ) ) {
568
- tmp = ts.getClosest( $elem, 'th, td' );
569
- $elem.attr( 'data-column', tmp.attr( 'data-column' ) );
570
- }
571
- // make sure to get header cell & not column indexed cell
572
- configHeaders = ts.getColumnData( c.table, c.headers, index, true );
573
- // save original header content
574
- c.headerContent[ index ] = $elem.html();
575
- // if headerTemplate is empty, don't reformat the header cell
576
- if ( c.headerTemplate !== '' && !$elem.find( '.' + ts.css.headerIn ).length ) {
577
- // set up header template
578
- template = c.headerTemplate
579
- .replace( ts.regex.templateContent, $elem.html() )
580
- .replace( ts.regex.templateIcon, $elem.find( '.' + ts.css.icon ).length ? '' : icon );
581
- if ( c.onRenderTemplate ) {
582
- header = c.onRenderTemplate.apply( $elem, [ index, template ] );
583
- // only change t if something is returned
584
- if ( header && typeof header === 'string' ) {
585
- template = header;
586
- }
587
- }
588
- $elem.html( '<div class="' + ts.css.headerIn + '">' + template + '</div>' ); // faster than wrapInner
589
- }
590
- if ( c.onRenderHeader ) {
591
- c.onRenderHeader.apply( $elem, [ index, c, c.$table ] );
592
- }
593
- column = parseInt( $elem.attr( 'data-column' ), 10 );
594
- elem.column = column;
595
- tmp = ts.getOrder( ts.getData( $elem, configHeaders, 'sortInitialOrder' ) || c.sortInitialOrder );
596
- // this may get updated numerous times if there are multiple rows
597
- c.sortVars[ column ] = {
598
- count : -1, // set to -1 because clicking on the header automatically adds one
599
- order : tmp ?
600
- ( c.sortReset ? [ 1, 0, 2 ] : [ 1, 0 ] ) : // desc, asc, unsorted
601
- ( c.sortReset ? [ 0, 1, 2 ] : [ 0, 1 ] ), // asc, desc, unsorted
602
- lockedOrder : false,
603
- sortedBy : ''
604
- };
605
- tmp = ts.getData( $elem, configHeaders, 'lockedOrder' ) || false;
606
- if ( typeof tmp !== 'undefined' && tmp !== false ) {
607
- c.sortVars[ column ].lockedOrder = true;
608
- c.sortVars[ column ].order = ts.getOrder( tmp ) ? [ 1, 1 ] : [ 0, 0 ];
609
- }
610
- // add cell to headerList
611
- c.headerList[ index ] = elem;
612
- $elem.addClass( ts.css.header + ' ' + c.cssHeader );
613
- // add to parent in case there are multiple rows
614
- ts.getClosest( $elem, 'tr' )
615
- .addClass( ts.css.headerRow + ' ' + c.cssHeaderRow )
616
- .attr( 'role', 'row' );
617
- // allow keyboard cursor to focus on element
618
- if ( c.tabIndex ) {
619
- $elem.attr( 'tabindex', 0 );
620
- }
621
- return elem;
622
- }) );
623
- // cache headers per column
624
- c.$headerIndexed = [];
625
- for ( indx = 0; indx < c.columns; indx++ ) {
626
- // colspan in header making a column undefined
627
- if ( ts.isEmptyObject( c.sortVars[ indx ] ) ) {
628
- c.sortVars[ indx ] = {};
629
- }
630
- // Use c.$headers.parent() in case selectorHeaders doesn't point to the th/td
631
- $temp = c.$headers.filter( '[data-column="' + indx + '"]' );
632
- // target sortable column cells, unless there are none, then use non-sortable cells
633
- // .last() added in jQuery 1.4; use .filter(':last') to maintain compatibility with jQuery v1.2.6
634
- c.$headerIndexed[ indx ] = $temp.length ?
635
- $temp.not( '.sorter-false' ).length ?
636
- $temp.not( '.sorter-false' ).filter( ':last' ) :
637
- $temp.filter( ':last' ) :
638
- $();
639
- }
640
- c.$table.find( c.selectorHeaders ).attr({
641
- scope: 'col',
642
- role : 'columnheader'
643
- });
644
- // enable/disable sorting
645
- ts.updateHeader( c );
646
- if ( ts.debug(c, 'core') ) {
647
- console.log( 'Built headers:' + ts.benchmark( timer ) );
648
- console.log( c.$headers );
649
- }
650
- },
651
-
652
- // Use it to add a set of methods to table.config which will be available for all tables.
653
- // This should be done before table initialization
654
- addInstanceMethods : function( methods ) {
655
- $.extend( ts.instanceMethods, methods );
656
- },
657
-
658
- /*
659
- █████▄ ▄████▄ █████▄ ▄█████ ██████ █████▄ ▄█████
660
- ██▄▄██ ██▄▄██ ██▄▄██ ▀█▄ ██▄▄ ██▄▄██ ▀█▄
661
- ██▀▀▀ ██▀▀██ ██▀██ ▀█▄ ██▀▀ ██▀██ ▀█▄
662
- ██ ██ ██ ██ ██ █████▀ ██████ ██ ██ █████▀
663
- */
664
- setupParsers : function( c, $tbodies ) {
665
- var rows, list, span, max, colIndex, indx, header, configHeaders,
666
- noParser, parser, extractor, time, tbody, len,
667
- table = c.table,
668
- tbodyIndex = 0,
669
- debug = ts.debug(c, 'core'),
670
- debugOutput = {};
671
- // update table bodies in case we start with an empty table
672
- c.$tbodies = c.$table.children( 'tbody:not(.' + c.cssInfoBlock + ')' );
673
- tbody = typeof $tbodies === 'undefined' ? c.$tbodies : $tbodies;
674
- len = tbody.length;
675
- if ( len === 0 ) {
676
- return debug ? console.warn( 'Warning: *Empty table!* Not building a parser cache' ) : '';
677
- } else if ( debug ) {
678
- time = new Date();
679
- console[ console.group ? 'group' : 'log' ]( 'Detecting parsers for each column' );
680
- }
681
- list = {
682
- extractors: [],
683
- parsers: []
684
- };
685
- while ( tbodyIndex < len ) {
686
- rows = tbody[ tbodyIndex ].rows;
687
- if ( rows.length ) {
688
- colIndex = 0;
689
- max = c.columns;
690
- for ( indx = 0; indx < max; indx++ ) {
691
- header = c.$headerIndexed[ colIndex ];
692
- if ( header && header.length ) {
693
- // get column indexed table cell; adding true parameter fixes #1362 but
694
- // it would break backwards compatibility...
695
- configHeaders = ts.getColumnData( table, c.headers, colIndex ); // , true );
696
- // get column parser/extractor
697
- extractor = ts.getParserById( ts.getData( header, configHeaders, 'extractor' ) );
698
- parser = ts.getParserById( ts.getData( header, configHeaders, 'sorter' ) );
699
- noParser = ts.getData( header, configHeaders, 'parser' ) === 'false';
700
- // empty cells behaviour - keeping emptyToBottom for backwards compatibility
701
- c.empties[colIndex] = (
702
- ts.getData( header, configHeaders, 'empty' ) ||
703
- c.emptyTo || ( c.emptyToBottom ? 'bottom' : 'top' ) ).toLowerCase();
704
- // text strings behaviour in numerical sorts
705
- c.strings[colIndex] = (
706
- ts.getData( header, configHeaders, 'string' ) ||
707
- c.stringTo ||
708
- 'max' ).toLowerCase();
709
- if ( noParser ) {
710
- parser = ts.getParserById( 'no-parser' );
711
- }
712
- if ( !extractor ) {
713
- // For now, maybe detect someday
714
- extractor = false;
715
- }
716
- if ( !parser ) {
717
- parser = ts.detectParserForColumn( c, rows, -1, colIndex );
718
- }
719
- if ( debug ) {
720
- debugOutput[ '(' + colIndex + ') ' + header.text() ] = {
721
- parser : parser.id,
722
- extractor : extractor ? extractor.id : 'none',
723
- string : c.strings[ colIndex ],
724
- empty : c.empties[ colIndex ]
725
- };
726
- }
727
- list.parsers[ colIndex ] = parser;
728
- list.extractors[ colIndex ] = extractor;
729
- span = header[ 0 ].colSpan - 1;
730
- if ( span > 0 ) {
731
- colIndex += span;
732
- max += span;
733
- while ( span + 1 > 0 ) {
734
- // set colspan columns to use the same parsers & extractors
735
- list.parsers[ colIndex - span ] = parser;
736
- list.extractors[ colIndex - span ] = extractor;
737
- span--;
738
- }
739
- }
740
- }
741
- colIndex++;
742
- }
743
- }
744
- tbodyIndex += ( list.parsers.length ) ? len : 1;
745
- }
746
- if ( debug ) {
747
- if ( !ts.isEmptyObject( debugOutput ) ) {
748
- console[ console.table ? 'table' : 'log' ]( debugOutput );
749
- } else {
750
- console.warn( ' No parsers detected!' );
751
- }
752
- console.log( 'Completed detecting parsers' + ts.benchmark( time ) );
753
- if ( console.groupEnd ) { console.groupEnd(); }
754
- }
755
- c.parsers = list.parsers;
756
- c.extractors = list.extractors;
757
- },
758
-
759
- addParser : function( parser ) {
760
- var indx,
761
- len = ts.parsers.length,
762
- add = true;
763
- for ( indx = 0; indx < len; indx++ ) {
764
- if ( ts.parsers[ indx ].id.toLowerCase() === parser.id.toLowerCase() ) {
765
- add = false;
766
- }
767
- }
768
- if ( add ) {
769
- ts.parsers[ ts.parsers.length ] = parser;
770
- }
771
- },
772
-
773
- getParserById : function( name ) {
774
- /*jshint eqeqeq:false */ // eslint-disable-next-line eqeqeq
775
- if ( name == 'false' ) { return false; }
776
- var indx,
777
- len = ts.parsers.length;
778
- for ( indx = 0; indx < len; indx++ ) {
779
- if ( ts.parsers[ indx ].id.toLowerCase() === ( name.toString() ).toLowerCase() ) {
780
- return ts.parsers[ indx ];
781
- }
782
- }
783
- return false;
784
- },
785
-
786
- detectParserForColumn : function( c, rows, rowIndex, cellIndex ) {
787
- var cur, $node, row,
788
- indx = ts.parsers.length,
789
- node = false,
790
- nodeValue = '',
791
- debug = ts.debug(c, 'core'),
792
- keepLooking = true;
793
- while ( nodeValue === '' && keepLooking ) {
794
- rowIndex++;
795
- row = rows[ rowIndex ];
796
- // stop looking after 50 empty rows
797
- if ( row && rowIndex < 50 ) {
798
- if ( row.className.indexOf( ts.cssIgnoreRow ) < 0 ) {
799
- node = rows[ rowIndex ].cells[ cellIndex ];
800
- nodeValue = ts.getElementText( c, node, cellIndex );
801
- $node = $( node );
802
- if ( debug ) {
803
- console.log( 'Checking if value was empty on row ' + rowIndex + ', column: ' +
804
- cellIndex + ': "' + nodeValue + '"' );
805
- }
806
- }
807
- } else {
808
- keepLooking = false;
809
- }
810
- }
811
- while ( --indx >= 0 ) {
812
- cur = ts.parsers[ indx ];
813
- // ignore the default text parser because it will always be true
814
- if ( cur && cur.id !== 'text' && cur.is && cur.is( nodeValue, c.table, node, $node ) ) {
815
- return cur;
816
- }
817
- }
818
- // nothing found, return the generic parser (text)
819
- return ts.getParserById( 'text' );
820
- },
821
-
822
- getElementText : function( c, node, cellIndex ) {
823
- if ( !node ) { return ''; }
824
- var tmp,
825
- extract = c.textExtraction || '',
826
- // node could be a jquery object
827
- // http://jsperf.com/jquery-vs-instanceof-jquery/2
828
- $node = node.jquery ? node : $( node );
829
- if ( typeof extract === 'string' ) {
830
- // check data-attribute first when set to 'basic'; don't use node.innerText - it's really slow!
831
- // http://www.kellegous.com/j/2013/02/27/innertext-vs-textcontent/
832
- if ( extract === 'basic' && typeof ( tmp = $node.attr( c.textAttribute ) ) !== 'undefined' ) {
833
- return $.trim( tmp );
834
- }
835
- return $.trim( node.textContent || $node.text() );
836
- } else {
837
- if ( typeof extract === 'function' ) {
838
- return $.trim( extract( $node[ 0 ], c.table, cellIndex ) );
839
- } else if ( typeof ( tmp = ts.getColumnData( c.table, extract, cellIndex ) ) === 'function' ) {
840
- return $.trim( tmp( $node[ 0 ], c.table, cellIndex ) );
841
- }
842
- }
843
- // fallback
844
- return $.trim( $node[ 0 ].textContent || $node.text() );
845
- },
846
-
847
- // centralized function to extract/parse cell contents
848
- getParsedText : function( c, cell, colIndex, txt ) {
849
- if ( typeof txt === 'undefined' ) {
850
- txt = ts.getElementText( c, cell, colIndex );
851
- }
852
- // if no parser, make sure to return the txt
853
- var val = '' + txt,
854
- parser = c.parsers[ colIndex ],
855
- extractor = c.extractors[ colIndex ];
856
- if ( parser ) {
857
- // do extract before parsing, if there is one
858
- if ( extractor && typeof extractor.format === 'function' ) {
859
- txt = extractor.format( txt, c.table, cell, colIndex );
860
- }
861
- // allow parsing if the string is empty, previously parsing would change it to zero,
862
- // in case the parser needs to extract data from the table cell attributes
863
- val = parser.id === 'no-parser' ? '' :
864
- // make sure txt is a string (extractor may have converted it)
865
- parser.format( '' + txt, c.table, cell, colIndex );
866
- if ( c.ignoreCase && typeof val === 'string' ) {
867
- val = val.toLowerCase();
868
- }
869
- }
870
- return val;
871
- },
872
-
873
- /*
874
- ▄████▄ ▄████▄ ▄████▄ ██ ██ ██████
875
- ██ ▀▀ ██▄▄██ ██ ▀▀ ██▄▄██ ██▄▄
876
- ██ ▄▄ ██▀▀██ ██ ▄▄ ██▀▀██ ██▀▀
877
- ▀████▀ ██ ██ ▀████▀ ██ ██ ██████
878
- */
879
- buildCache : function( c, callback, $tbodies ) {
880
- var cache, val, txt, rowIndex, colIndex, tbodyIndex, $tbody, $row,
881
- cols, $cells, cell, cacheTime, totalRows, rowData, prevRowData,
882
- colMax, span, cacheIndex, hasParser, max, len, index,
883
- table = c.table,
884
- parsers = c.parsers,
885
- debug = ts.debug(c, 'core');
886
- // update tbody variable
887
- c.$tbodies = c.$table.children( 'tbody:not(.' + c.cssInfoBlock + ')' );
888
- $tbody = typeof $tbodies === 'undefined' ? c.$tbodies : $tbodies,
889
- c.cache = {};
890
- c.totalRows = 0;
891
- // if no parsers found, return - it's an empty table.
892
- if ( !parsers ) {
893
- return debug ? console.warn( 'Warning: *Empty table!* Not building a cache' ) : '';
894
- }
895
- if ( debug ) {
896
- cacheTime = new Date();
897
- }
898
- // processing icon
899
- if ( c.showProcessing ) {
900
- ts.isProcessing( table, true );
901
- }
902
- for ( tbodyIndex = 0; tbodyIndex < $tbody.length; tbodyIndex++ ) {
903
- colMax = []; // column max value per tbody
904
- cache = c.cache[ tbodyIndex ] = {
905
- normalized: [] // array of normalized row data; last entry contains 'rowData' above
906
- // colMax: # // added at the end
907
- };
908
-
909
- totalRows = ( $tbody[ tbodyIndex ] && $tbody[ tbodyIndex ].rows.length ) || 0;
910
- for ( rowIndex = 0; rowIndex < totalRows; ++rowIndex ) {
911
- rowData = {
912
- // order: original row order #
913
- // $row : jQuery Object[]
914
- child: [], // child row text (filter widget)
915
- raw: [] // original row text
916
- };
917
- /** Add the table data to main data array */
918
- $row = $( $tbody[ tbodyIndex ].rows[ rowIndex ] );
919
- cols = [];
920
- // ignore "remove-me" rows
921
- if ( $row.hasClass( c.selectorRemove.slice(1) ) ) {
922
- continue;
923
- }
924
- // if this is a child row, add it to the last row's children and continue to the next row
925
- // ignore child row class, if it is the first row
926
- if ( $row.hasClass( c.cssChildRow ) && rowIndex !== 0 ) {
927
- len = cache.normalized.length - 1;
928
- prevRowData = cache.normalized[ len ][ c.columns ];
929
- prevRowData.$row = prevRowData.$row.add( $row );
930
- // add 'hasChild' class name to parent row
931
- if ( !$row.prev().hasClass( c.cssChildRow ) ) {
932
- $row.prev().addClass( ts.css.cssHasChild );
933
- }
934
- // save child row content (un-parsed!)
935
- $cells = $row.children( 'th, td' );
936
- len = prevRowData.child.length;
937
- prevRowData.child[ len ] = [];
938
- // child row content does not account for colspans/rowspans; so indexing may be off
939
- cacheIndex = 0;
940
- max = c.columns;
941
- for ( colIndex = 0; colIndex < max; colIndex++ ) {
942
- cell = $cells[ colIndex ];
943
- if ( cell ) {
944
- prevRowData.child[ len ][ colIndex ] = ts.getParsedText( c, cell, colIndex );
945
- span = $cells[ colIndex ].colSpan - 1;
946
- if ( span > 0 ) {
947
- cacheIndex += span;
948
- max += span;
949
- }
950
- }
951
- cacheIndex++;
952
- }
953
- // go to the next for loop
954
- continue;
955
- }
956
- rowData.$row = $row;
957
- rowData.order = rowIndex; // add original row position to rowCache
958
- cacheIndex = 0;
959
- max = c.columns;
960
- for ( colIndex = 0; colIndex < max; ++colIndex ) {
961
- cell = $row[ 0 ].cells[ colIndex ];
962
- if ( cell && cacheIndex < c.columns ) {
963
- hasParser = typeof parsers[ cacheIndex ] !== 'undefined';
964
- if ( !hasParser && debug ) {
965
- console.warn( 'No parser found for row: ' + rowIndex + ', column: ' + colIndex +
966
- '; cell containing: "' + $(cell).text() + '"; does it have a header?' );
967
- }
968
- val = ts.getElementText( c, cell, cacheIndex );
969
- rowData.raw[ cacheIndex ] = val; // save original row text
970
- // save raw column text even if there is no parser set
971
- txt = ts.getParsedText( c, cell, cacheIndex, val );
972
- cols[ cacheIndex ] = txt;
973
- if ( hasParser && ( parsers[ cacheIndex ].type || '' ).toLowerCase() === 'numeric' ) {
974
- // determine column max value (ignore sign)
975
- colMax[ cacheIndex ] = Math.max( Math.abs( txt ) || 0, colMax[ cacheIndex ] || 0 );
976
- }
977
- // allow colSpan in tbody
978
- span = cell.colSpan - 1;
979
- if ( span > 0 ) {
980
- index = 0;
981
- while ( index <= span ) {
982
- // duplicate text (or not) to spanned columns
983
- // instead of setting duplicate span to empty string, use textExtraction to try to get a value
984
- // see http://stackoverflow.com/q/36449711/145346
985
- txt = c.duplicateSpan || index === 0 ?
986
- val :
987
- typeof c.textExtraction !== 'string' ?
988
- ts.getElementText( c, cell, cacheIndex + index ) || '' :
989
- '';
990
- rowData.raw[ cacheIndex + index ] = txt;
991
- cols[ cacheIndex + index ] = txt;
992
- index++;
993
- }
994
- cacheIndex += span;
995
- max += span;
996
- }
997
- }
998
- cacheIndex++;
999
- }
1000
- // ensure rowData is always in the same location (after the last column)
1001
- cols[ c.columns ] = rowData;
1002
- cache.normalized[ cache.normalized.length ] = cols;
1003
- }
1004
- cache.colMax = colMax;
1005
- // total up rows, not including child rows
1006
- c.totalRows += cache.normalized.length;
1007
-
1008
- }
1009
- if ( c.showProcessing ) {
1010
- ts.isProcessing( table ); // remove processing icon
1011
- }
1012
- if ( debug ) {
1013
- len = Math.min( 5, c.cache[ 0 ].normalized.length );
1014
- console[ console.group ? 'group' : 'log' ]( 'Building cache for ' + c.totalRows +
1015
- ' rows (showing ' + len + ' rows in log) and ' + c.columns + ' columns' +
1016
- ts.benchmark( cacheTime ) );
1017
- val = {};
1018
- for ( colIndex = 0; colIndex < c.columns; colIndex++ ) {
1019
- for ( cacheIndex = 0; cacheIndex < len; cacheIndex++ ) {
1020
- if ( !val[ 'row: ' + cacheIndex ] ) {
1021
- val[ 'row: ' + cacheIndex ] = {};
1022
- }
1023
- val[ 'row: ' + cacheIndex ][ c.$headerIndexed[ colIndex ].text() ] =
1024
- c.cache[ 0 ].normalized[ cacheIndex ][ colIndex ];
1025
- }
1026
- }
1027
- console[ console.table ? 'table' : 'log' ]( val );
1028
- if ( console.groupEnd ) { console.groupEnd(); }
1029
- }
1030
- if ( $.isFunction( callback ) ) {
1031
- callback( table );
1032
- }
1033
- },
1034
-
1035
- getColumnText : function( table, column, callback, rowFilter ) {
1036
- table = $( table )[0];
1037
- var tbodyIndex, rowIndex, cache, row, tbodyLen, rowLen, raw, parsed, $cell, result,
1038
- hasCallback = typeof callback === 'function',
1039
- allColumns = column === 'all',
1040
- data = { raw : [], parsed: [], $cell: [] },
1041
- c = table.config;
1042
- if ( ts.isEmptyObject( c ) ) {
1043
- if ( ts.debug(c, 'core') ) {
1044
- console.warn( 'No cache found - aborting getColumnText function!' );
1045
- }
1046
- } else {
1047
- tbodyLen = c.$tbodies.length;
1048
- for ( tbodyIndex = 0; tbodyIndex < tbodyLen; tbodyIndex++ ) {
1049
- cache = c.cache[ tbodyIndex ].normalized;
1050
- rowLen = cache.length;
1051
- for ( rowIndex = 0; rowIndex < rowLen; rowIndex++ ) {
1052
- row = cache[ rowIndex ];
1053
- if ( rowFilter && !row[ c.columns ].$row.is( rowFilter ) ) {
1054
- continue;
1055
- }
1056
- result = true;
1057
- parsed = ( allColumns ) ? row.slice( 0, c.columns ) : row[ column ];
1058
- row = row[ c.columns ];
1059
- raw = ( allColumns ) ? row.raw : row.raw[ column ];
1060
- $cell = ( allColumns ) ? row.$row.children() : row.$row.children().eq( column );
1061
- if ( hasCallback ) {
1062
- result = callback({
1063
- tbodyIndex : tbodyIndex,
1064
- rowIndex : rowIndex,
1065
- parsed : parsed,
1066
- raw : raw,
1067
- $row : row.$row,
1068
- $cell : $cell
1069
- });
1070
- }
1071
- if ( result !== false ) {
1072
- data.parsed[ data.parsed.length ] = parsed;
1073
- data.raw[ data.raw.length ] = raw;
1074
- data.$cell[ data.$cell.length ] = $cell;
1075
- }
1076
- }
1077
- }
1078
- // return everything
1079
- return data;
1080
- }
1081
- },
1082
-
1083
- /*
1084
- ██ ██ █████▄ █████▄ ▄████▄ ██████ ██████
1085
- ██ ██ ██▄▄██ ██ ██ ██▄▄██ ██ ██▄▄
1086
- ██ ██ ██▀▀▀ ██ ██ ██▀▀██ ██ ██▀▀
1087
- ▀████▀ ██ █████▀ ██ ██ ██ ██████
1088
- */
1089
- setHeadersCss : function( c ) {
1090
- var indx, column,
1091
- list = c.sortList,
1092
- len = list.length,
1093
- none = ts.css.sortNone + ' ' + c.cssNone,
1094
- css = [ ts.css.sortAsc + ' ' + c.cssAsc, ts.css.sortDesc + ' ' + c.cssDesc ],
1095
- cssIcon = [ c.cssIconAsc, c.cssIconDesc, c.cssIconNone ],
1096
- aria = [ 'ascending', 'descending' ],
1097
- updateColumnSort = function($el, index) {
1098
- $el
1099
- .removeClass( none )
1100
- .addClass( css[ index ] )
1101
- .attr( 'aria-sort', aria[ index ] )
1102
- .find( '.' + ts.css.icon )
1103
- .removeClass( cssIcon[ 2 ] )
1104
- .addClass( cssIcon[ index ] );
1105
- },
1106
- // find the footer
1107
- $extras = c.$table
1108
- .find( 'tfoot tr' )
1109
- .children( 'td, th' )
1110
- .add( $( c.namespace + '_extra_headers' ) )
1111
- .removeClass( css.join( ' ' ) ),
1112
- // remove all header information
1113
- $sorted = c.$headers
1114
- .add( $( 'thead ' + c.namespace + '_extra_headers' ) )
1115
- .removeClass( css.join( ' ' ) )
1116
- .addClass( none )
1117
- .attr( 'aria-sort', 'none' )
1118
- .find( '.' + ts.css.icon )
1119
- .removeClass( cssIcon.join( ' ' ) )
1120
- .end();
1121
- // add css none to all sortable headers
1122
- $sorted
1123
- .not( '.sorter-false' )
1124
- .find( '.' + ts.css.icon )
1125
- .addClass( cssIcon[ 2 ] );
1126
- // add disabled css icon class
1127
- if ( c.cssIconDisabled ) {
1128
- $sorted
1129
- .filter( '.sorter-false' )
1130
- .find( '.' + ts.css.icon )
1131
- .addClass( c.cssIconDisabled );
1132
- }
1133
- for ( indx = 0; indx < len; indx++ ) {
1134
- // direction = 2 means reset!
1135
- if ( list[ indx ][ 1 ] !== 2 ) {
1136
- // multicolumn sorting updating - see #1005
1137
- // .not(function() {}) needs jQuery 1.4
1138
- // filter(function(i, el) {}) <- el is undefined in jQuery v1.2.6
1139
- $sorted = c.$headers.filter( function( i ) {
1140
- // only include headers that are in the sortList (this includes colspans)
1141
- var include = true,
1142
- $el = c.$headers.eq( i ),
1143
- col = parseInt( $el.attr( 'data-column' ), 10 ),
1144
- end = col + ts.getClosest( $el, 'th, td' )[0].colSpan;
1145
- for ( ; col < end; col++ ) {
1146
- include = include ? include || ts.isValueInArray( col, c.sortList ) > -1 : false;
1147
- }
1148
- return include;
1149
- });
1150
-
1151
- // choose the :last in case there are nested columns
1152
- $sorted = $sorted
1153
- .not( '.sorter-false' )
1154
- .filter( '[data-column="' + list[ indx ][ 0 ] + '"]' + ( len === 1 ? ':last' : '' ) );
1155
- if ( $sorted.length ) {
1156
- for ( column = 0; column < $sorted.length; column++ ) {
1157
- if ( !$sorted[ column ].sortDisabled ) {
1158
- updateColumnSort( $sorted.eq( column ), list[ indx ][ 1 ] );
1159
- }
1160
- }
1161
- }
1162
- // add sorted class to footer & extra headers, if they exist
1163
- if ( $extras.length ) {
1164
- updateColumnSort( $extras.filter( '[data-column="' + list[ indx ][ 0 ] + '"]' ), list[ indx ][ 1 ] );
1165
- }
1166
- }
1167
- }
1168
- // add verbose aria labels
1169
- len = c.$headers.length;
1170
- for ( indx = 0; indx < len; indx++ ) {
1171
- ts.setColumnAriaLabel( c, c.$headers.eq( indx ) );
1172
- }
1173
- },
1174
-
1175
- getClosest : function( $el, selector ) {
1176
- // jQuery v1.2.6 doesn't have closest()
1177
- if ( $.fn.closest ) {
1178
- return $el.closest( selector );
1179
- }
1180
- return $el.is( selector ) ?
1181
- $el :
1182
- $el.parents( selector ).filter( ':first' );
1183
- },
1184
-
1185
- // nextSort (optional), lets you disable next sort text
1186
- setColumnAriaLabel : function( c, $header, nextSort ) {
1187
- if ( $header.length ) {
1188
- var column = parseInt( $header.attr( 'data-column' ), 10 ),
1189
- vars = c.sortVars[ column ],
1190
- tmp = $header.hasClass( ts.css.sortAsc ) ?
1191
- 'sortAsc' :
1192
- $header.hasClass( ts.css.sortDesc ) ? 'sortDesc' : 'sortNone',
1193
- txt = $.trim( $header.text() ) + ': ' + ts.language[ tmp ];
1194
- if ( $header.hasClass( 'sorter-false' ) || nextSort === false ) {
1195
- txt += ts.language.sortDisabled;
1196
- } else {
1197
- tmp = ( vars.count + 1 ) % vars.order.length;
1198
- nextSort = vars.order[ tmp ];
1199
- // if nextSort
1200
- txt += ts.language[ nextSort === 0 ? 'nextAsc' : nextSort === 1 ? 'nextDesc' : 'nextNone' ];
1201
- }
1202
- $header.attr( 'aria-label', txt );
1203
- if (vars.sortedBy) {
1204
- $header.attr( 'data-sortedBy', vars.sortedBy );
1205
- } else {
1206
- $header.removeAttr('data-sortedBy');
1207
- }
1208
- }
1209
- },
1210
-
1211
- updateHeader : function( c ) {
1212
- var index, isDisabled, $header, col,
1213
- table = c.table,
1214
- len = c.$headers.length;
1215
- for ( index = 0; index < len; index++ ) {
1216
- $header = c.$headers.eq( index );
1217
- col = ts.getColumnData( table, c.headers, index, true );
1218
- // add 'sorter-false' class if 'parser-false' is set
1219
- isDisabled = ts.getData( $header, col, 'sorter' ) === 'false' || ts.getData( $header, col, 'parser' ) === 'false';
1220
- ts.setColumnSort( c, $header, isDisabled );
1221
- }
1222
- },
1223
-
1224
- setColumnSort : function( c, $header, isDisabled ) {
1225
- var id = c.table.id;
1226
- $header[ 0 ].sortDisabled = isDisabled;
1227
- $header[ isDisabled ? 'addClass' : 'removeClass' ]( 'sorter-false' )
1228
- .attr( 'aria-disabled', '' + isDisabled );
1229
- // disable tab index on disabled cells
1230
- if ( c.tabIndex ) {
1231
- if ( isDisabled ) {
1232
- $header.removeAttr( 'tabindex' );
1233
- } else {
1234
- $header.attr( 'tabindex', '0' );
1235
- }
1236
- }
1237
- // aria-controls - requires table ID
1238
- if ( id ) {
1239
- if ( isDisabled ) {
1240
- $header.removeAttr( 'aria-controls' );
1241
- } else {
1242
- $header.attr( 'aria-controls', id );
1243
- }
1244
- }
1245
- },
1246
-
1247
- updateHeaderSortCount : function( c, list ) {
1248
- var col, dir, group, indx, primary, temp, val, order,
1249
- sortList = list || c.sortList,
1250
- len = sortList.length;
1251
- c.sortList = [];
1252
- for ( indx = 0; indx < len; indx++ ) {
1253
- val = sortList[ indx ];
1254
- // ensure all sortList values are numeric - fixes #127
1255
- col = parseInt( val[ 0 ], 10 );
1256
- // prevents error if sorton array is wrong
1257
- if ( col < c.columns ) {
1258
-
1259
- // set order if not already defined - due to colspan header without associated header cell
1260
- // adding this check prevents a javascript error
1261
- if ( !c.sortVars[ col ].order ) {
1262
- if ( ts.getOrder( c.sortInitialOrder ) ) {
1263
- order = c.sortReset ? [ 1, 0, 2 ] : [ 1, 0 ];
1264
- } else {
1265
- order = c.sortReset ? [ 0, 1, 2 ] : [ 0, 1 ];
1266
- }
1267
- c.sortVars[ col ].order = order;
1268
- c.sortVars[ col ].count = 0;
1269
- }
1270
-
1271
- order = c.sortVars[ col ].order;
1272
- dir = ( '' + val[ 1 ] ).match( /^(1|d|s|o|n)/ );
1273
- dir = dir ? dir[ 0 ] : '';
1274
- // 0/(a)sc (default), 1/(d)esc, (s)ame, (o)pposite, (n)ext
1275
- switch ( dir ) {
1276
- case '1' : case 'd' : // descending
1277
- dir = 1;
1278
- break;
1279
- case 's' : // same direction (as primary column)
1280
- // if primary sort is set to 's', make it ascending
1281
- dir = primary || 0;
1282
- break;
1283
- case 'o' :
1284
- temp = order[ ( primary || 0 ) % order.length ];
1285
- // opposite of primary column; but resets if primary resets
1286
- dir = temp === 0 ? 1 : temp === 1 ? 0 : 2;
1287
- break;
1288
- case 'n' :
1289
- dir = order[ ( ++c.sortVars[ col ].count ) % order.length ];
1290
- break;
1291
- default : // ascending
1292
- dir = 0;
1293
- break;
1294
- }
1295
- primary = indx === 0 ? dir : primary;
1296
- group = [ col, parseInt( dir, 10 ) || 0 ];
1297
- c.sortList[ c.sortList.length ] = group;
1298
- dir = $.inArray( group[ 1 ], order ); // fixes issue #167
1299
- c.sortVars[ col ].count = dir >= 0 ? dir : group[ 1 ] % order.length;
1300
- }
1301
- }
1302
- },
1303
-
1304
- updateAll : function( c, resort, callback ) {
1305
- var table = c.table;
1306
- table.isUpdating = true;
1307
- ts.refreshWidgets( table, true, true );
1308
- ts.buildHeaders( c );
1309
- ts.bindEvents( table, c.$headers, true );
1310
- ts.bindMethods( c );
1311
- ts.commonUpdate( c, resort, callback );
1312
- },
1313
-
1314
- update : function( c, resort, callback ) {
1315
- var table = c.table;
1316
- table.isUpdating = true;
1317
- // update sorting (if enabled/disabled)
1318
- ts.updateHeader( c );
1319
- ts.commonUpdate( c, resort, callback );
1320
- },
1321
-
1322
- // simple header update - see #989
1323
- updateHeaders : function( c, callback ) {
1324
- c.table.isUpdating = true;
1325
- ts.buildHeaders( c );
1326
- ts.bindEvents( c.table, c.$headers, true );
1327
- ts.resortComplete( c, callback );
1328
- },
1329
-
1330
- updateCell : function( c, cell, resort, callback ) {
1331
- // updateCell for child rows is a mess - we'll ignore them for now
1332
- // eventually I'll break out the "update" row cache code to make everything consistent
1333
- if ( $( cell ).closest( 'tr' ).hasClass( c.cssChildRow ) ) {
1334
- console.warn('Tablesorter Warning! "updateCell" for child row content has been disabled, use "update" instead');
1335
- return;
1336
- }
1337
- if ( ts.isEmptyObject( c.cache ) ) {
1338
- // empty table, do an update instead - fixes #1099
1339
- ts.updateHeader( c );
1340
- ts.commonUpdate( c, resort, callback );
1341
- return;
1342
- }
1343
- c.table.isUpdating = true;
1344
- c.$table.find( c.selectorRemove ).remove();
1345
- // get position from the dom
1346
- var tmp, indx, row, icell, cache, len,
1347
- $tbodies = c.$tbodies,
1348
- $cell = $( cell ),
1349
- // update cache - format: function( s, table, cell, cellIndex )
1350
- // no closest in jQuery v1.2.6
1351
- tbodyIndex = $tbodies.index( ts.getClosest( $cell, 'tbody' ) ),
1352
- tbcache = c.cache[ tbodyIndex ],
1353
- $row = ts.getClosest( $cell, 'tr' );
1354
- cell = $cell[ 0 ]; // in case cell is a jQuery object
1355
- // tbody may not exist if update is initialized while tbody is removed for processing
1356
- if ( $tbodies.length && tbodyIndex >= 0 ) {
1357
- row = $tbodies.eq( tbodyIndex ).find( 'tr' ).not( '.' + c.cssChildRow ).index( $row );
1358
- cache = tbcache.normalized[ row ];
1359
- len = $row[ 0 ].cells.length;
1360
- if ( len !== c.columns ) {
1361
- // colspan in here somewhere!
1362
- icell = 0;
1363
- tmp = false;
1364
- for ( indx = 0; indx < len; indx++ ) {
1365
- if ( !tmp && $row[ 0 ].cells[ indx ] !== cell ) {
1366
- icell += $row[ 0 ].cells[ indx ].colSpan;
1367
- } else {
1368
- tmp = true;
1369
- }
1370
- }
1371
- } else {
1372
- icell = $cell.index();
1373
- }
1374
- tmp = ts.getElementText( c, cell, icell ); // raw
1375
- cache[ c.columns ].raw[ icell ] = tmp;
1376
- tmp = ts.getParsedText( c, cell, icell, tmp );
1377
- cache[ icell ] = tmp; // parsed
1378
- if ( ( c.parsers[ icell ].type || '' ).toLowerCase() === 'numeric' ) {
1379
- // update column max value (ignore sign)
1380
- tbcache.colMax[ icell ] = Math.max( Math.abs( tmp ) || 0, tbcache.colMax[ icell ] || 0 );
1381
- }
1382
- tmp = resort !== 'undefined' ? resort : c.resort;
1383
- if ( tmp !== false ) {
1384
- // widgets will be reapplied
1385
- ts.checkResort( c, tmp, callback );
1386
- } else {
1387
- // don't reapply widgets is resort is false, just in case it causes
1388
- // problems with element focus
1389
- ts.resortComplete( c, callback );
1390
- }
1391
- } else {
1392
- if ( ts.debug(c, 'core') ) {
1393
- console.error( 'updateCell aborted, tbody missing or not within the indicated table' );
1394
- }
1395
- c.table.isUpdating = false;
1396
- }
1397
- },
1398
-
1399
- addRows : function( c, $row, resort, callback ) {
1400
- var txt, val, tbodyIndex, rowIndex, rows, cellIndex, len, order,
1401
- cacheIndex, rowData, cells, cell, span,
1402
- // allow passing a row string if only one non-info tbody exists in the table
1403
- valid = typeof $row === 'string' && c.$tbodies.length === 1 && /<tr/.test( $row || '' ),
1404
- table = c.table;
1405
- if ( valid ) {
1406
- $row = $( $row );
1407
- c.$tbodies.append( $row );
1408
- } else if (
1409
- !$row ||
1410
- // row is a jQuery object?
1411
- !( $row instanceof $ ) ||
1412
- // row contained in the table?
1413
- ( ts.getClosest( $row, 'table' )[ 0 ] !== c.table )
1414
- ) {
1415
- if ( ts.debug(c, 'core') ) {
1416
- console.error( 'addRows method requires (1) a jQuery selector reference to rows that have already ' +
1417
- 'been added to the table, or (2) row HTML string to be added to a table with only one tbody' );
1418
- }
1419
- return false;
1420
- }
1421
- table.isUpdating = true;
1422
- if ( ts.isEmptyObject( c.cache ) ) {
1423
- // empty table, do an update instead - fixes #450
1424
- ts.updateHeader( c );
1425
- ts.commonUpdate( c, resort, callback );
1426
- } else {
1427
- rows = $row.filter( 'tr' ).attr( 'role', 'row' ).length;
1428
- tbodyIndex = c.$tbodies.index( $row.parents( 'tbody' ).filter( ':first' ) );
1429
- // fixes adding rows to an empty table - see issue #179
1430
- if ( !( c.parsers && c.parsers.length ) ) {
1431
- ts.setupParsers( c );
1432
- }
1433
- // add each row
1434
- for ( rowIndex = 0; rowIndex < rows; rowIndex++ ) {
1435
- cacheIndex = 0;
1436
- len = $row[ rowIndex ].cells.length;
1437
- order = c.cache[ tbodyIndex ].normalized.length;
1438
- cells = [];
1439
- rowData = {
1440
- child : [],
1441
- raw : [],
1442
- $row : $row.eq( rowIndex ),
1443
- order : order
1444
- };
1445
- // add each cell
1446
- for ( cellIndex = 0; cellIndex < len; cellIndex++ ) {
1447
- cell = $row[ rowIndex ].cells[ cellIndex ];
1448
- txt = ts.getElementText( c, cell, cacheIndex );
1449
- rowData.raw[ cacheIndex ] = txt;
1450
- val = ts.getParsedText( c, cell, cacheIndex, txt );
1451
- cells[ cacheIndex ] = val;
1452
- if ( ( c.parsers[ cacheIndex ].type || '' ).toLowerCase() === 'numeric' ) {
1453
- // update column max value (ignore sign)
1454
- c.cache[ tbodyIndex ].colMax[ cacheIndex ] =
1455
- Math.max( Math.abs( val ) || 0, c.cache[ tbodyIndex ].colMax[ cacheIndex ] || 0 );
1456
- }
1457
- span = cell.colSpan - 1;
1458
- if ( span > 0 ) {
1459
- cacheIndex += span;
1460
- }
1461
- cacheIndex++;
1462
- }
1463
- // add the row data to the end
1464
- cells[ c.columns ] = rowData;
1465
- // update cache
1466
- c.cache[ tbodyIndex ].normalized[ order ] = cells;
1467
- }
1468
- // resort using current settings
1469
- ts.checkResort( c, resort, callback );
1470
- }
1471
- },
1472
-
1473
- updateCache : function( c, callback, $tbodies ) {
1474
- // rebuild parsers
1475
- if ( !( c.parsers && c.parsers.length ) ) {
1476
- ts.setupParsers( c, $tbodies );
1477
- }
1478
- // rebuild the cache map
1479
- ts.buildCache( c, callback, $tbodies );
1480
- },
1481
-
1482
- // init flag (true) used by pager plugin to prevent widget application
1483
- // renamed from appendToTable
1484
- appendCache : function( c, init ) {
1485
- var parsed, totalRows, $tbody, $curTbody, rowIndex, tbodyIndex, appendTime,
1486
- table = c.table,
1487
- $tbodies = c.$tbodies,
1488
- rows = [],
1489
- cache = c.cache;
1490
- // empty table - fixes #206/#346
1491
- if ( ts.isEmptyObject( cache ) ) {
1492
- // run pager appender in case the table was just emptied
1493
- return c.appender ? c.appender( table, rows ) :
1494
- table.isUpdating ? c.$table.triggerHandler( 'updateComplete', table ) : ''; // Fixes #532
1495
- }
1496
- if ( ts.debug(c, 'core') ) {
1497
- appendTime = new Date();
1498
- }
1499
- for ( tbodyIndex = 0; tbodyIndex < $tbodies.length; tbodyIndex++ ) {
1500
- $tbody = $tbodies.eq( tbodyIndex );
1501
- if ( $tbody.length ) {
1502
- // detach tbody for manipulation
1503
- $curTbody = ts.processTbody( table, $tbody, true );
1504
- parsed = cache[ tbodyIndex ].normalized;
1505
- totalRows = parsed.length;
1506
- for ( rowIndex = 0; rowIndex < totalRows; rowIndex++ ) {
1507
- rows[rows.length] = parsed[ rowIndex ][ c.columns ].$row;
1508
- // removeRows used by the pager plugin; don't render if using ajax - fixes #411
1509
- if ( !c.appender || ( c.pager && !c.pager.removeRows && !c.pager.ajax ) ) {
1510
- $curTbody.append( parsed[ rowIndex ][ c.columns ].$row );
1511
- }
1512
- }
1513
- // restore tbody
1514
- ts.processTbody( table, $curTbody, false );
1515
- }
1516
- }
1517
- if ( c.appender ) {
1518
- c.appender( table, rows );
1519
- }
1520
- if ( ts.debug(c, 'core') ) {
1521
- console.log( 'Rebuilt table' + ts.benchmark( appendTime ) );
1522
- }
1523
- // apply table widgets; but not before ajax completes
1524
- if ( !init && !c.appender ) {
1525
- ts.applyWidget( table );
1526
- }
1527
- if ( table.isUpdating ) {
1528
- c.$table.triggerHandler( 'updateComplete', table );
1529
- }
1530
- },
1531
-
1532
- commonUpdate : function( c, resort, callback ) {
1533
- // remove rows/elements before update
1534
- c.$table.find( c.selectorRemove ).remove();
1535
- // rebuild parsers
1536
- ts.setupParsers( c );
1537
- // rebuild the cache map
1538
- ts.buildCache( c );
1539
- ts.checkResort( c, resort, callback );
1540
- },
1541
-
1542
- /*
1543
- ▄█████ ▄████▄ █████▄ ██████ ██ █████▄ ▄████▄
1544
- ▀█▄ ██ ██ ██▄▄██ ██ ██ ██ ██ ██ ▄▄▄
1545
- ▀█▄ ██ ██ ██▀██ ██ ██ ██ ██ ██ ▀██
1546
- █████▀ ▀████▀ ██ ██ ██ ██ ██ ██ ▀████▀
1547
- */
1548
- initSort : function( c, cell, event ) {
1549
- if ( c.table.isUpdating ) {
1550
- // let any updates complete before initializing a sort
1551
- return setTimeout( function() {
1552
- ts.initSort( c, cell, event );
1553
- }, 50 );
1554
- }
1555
-
1556
- var arry, indx, headerIndx, dir, temp, tmp, $header,
1557
- notMultiSort = !event[ c.sortMultiSortKey ],
1558
- table = c.table,
1559
- len = c.$headers.length,
1560
- th = ts.getClosest( $( cell ), 'th, td' ),
1561
- col = parseInt( th.attr( 'data-column' ), 10 ),
1562
- sortedBy = event.type === 'mouseup' ? 'user' : event.type,
1563
- order = c.sortVars[ col ].order;
1564
- th = th[0];
1565
- // Only call sortStart if sorting is enabled
1566
- c.$table.triggerHandler( 'sortStart', table );
1567
- // get current column sort order
1568
- tmp = ( c.sortVars[ col ].count + 1 ) % order.length;
1569
- c.sortVars[ col ].count = event[ c.sortResetKey ] ? 2 : tmp;
1570
- // reset all sorts on non-current column - issue #30
1571
- if ( c.sortRestart ) {
1572
- for ( headerIndx = 0; headerIndx < len; headerIndx++ ) {
1573
- $header = c.$headers.eq( headerIndx );
1574
- tmp = parseInt( $header.attr( 'data-column' ), 10 );
1575
- // only reset counts on columns that weren't just clicked on and if not included in a multisort
1576
- if ( col !== tmp && ( notMultiSort || $header.hasClass( ts.css.sortNone ) ) ) {
1577
- c.sortVars[ tmp ].count = -1;
1578
- }
1579
- }
1580
- }
1581
- // user only wants to sort on one column
1582
- if ( notMultiSort ) {
1583
- $.each( c.sortVars, function( i ) {
1584
- c.sortVars[ i ].sortedBy = '';
1585
- });
1586
- // flush the sort list
1587
- c.sortList = [];
1588
- c.last.sortList = [];
1589
- if ( c.sortForce !== null ) {
1590
- arry = c.sortForce;
1591
- for ( indx = 0; indx < arry.length; indx++ ) {
1592
- if ( arry[ indx ][ 0 ] !== col ) {
1593
- c.sortList[ c.sortList.length ] = arry[ indx ];
1594
- c.sortVars[ arry[ indx ][ 0 ] ].sortedBy = 'sortForce';
1595
- }
1596
- }
1597
- }
1598
- // add column to sort list
1599
- dir = order[ c.sortVars[ col ].count ];
1600
- if ( dir < 2 ) {
1601
- c.sortList[ c.sortList.length ] = [ col, dir ];
1602
- c.sortVars[ col ].sortedBy = sortedBy;
1603
- // add other columns if header spans across multiple
1604
- if ( th.colSpan > 1 ) {
1605
- for ( indx = 1; indx < th.colSpan; indx++ ) {
1606
- c.sortList[ c.sortList.length ] = [ col + indx, dir ];
1607
- // update count on columns in colSpan
1608
- c.sortVars[ col + indx ].count = $.inArray( dir, order );
1609
- c.sortVars[ col + indx ].sortedBy = sortedBy;
1610
- }
1611
- }
1612
- }
1613
- // multi column sorting
1614
- } else {
1615
- // get rid of the sortAppend before adding more - fixes issue #115 & #523
1616
- c.sortList = $.extend( [], c.last.sortList );
1617
-
1618
- // the user has clicked on an already sorted column
1619
- if ( ts.isValueInArray( col, c.sortList ) >= 0 ) {
1620
- // reverse the sorting direction
1621
- c.sortVars[ col ].sortedBy = sortedBy;
1622
- for ( indx = 0; indx < c.sortList.length; indx++ ) {
1623
- tmp = c.sortList[ indx ];
1624
- if ( tmp[ 0 ] === col ) {
1625
- // order.count seems to be incorrect when compared to cell.count
1626
- tmp[ 1 ] = order[ c.sortVars[ col ].count ];
1627
- if ( tmp[1] === 2 ) {
1628
- c.sortList.splice( indx, 1 );
1629
- c.sortVars[ col ].count = -1;
1630
- }
1631
- }
1632
- }
1633
- } else {
1634
- // add column to sort list array
1635
- dir = order[ c.sortVars[ col ].count ];
1636
- c.sortVars[ col ].sortedBy = sortedBy;
1637
- if ( dir < 2 ) {
1638
- c.sortList[ c.sortList.length ] = [ col, dir ];
1639
- // add other columns if header spans across multiple
1640
- if ( th.colSpan > 1 ) {
1641
- for ( indx = 1; indx < th.colSpan; indx++ ) {
1642
- c.sortList[ c.sortList.length ] = [ col + indx, dir ];
1643
- // update count on columns in colSpan
1644
- c.sortVars[ col + indx ].count = $.inArray( dir, order );
1645
- c.sortVars[ col + indx ].sortedBy = sortedBy;
1646
- }
1647
- }
1648
- }
1649
- }
1650
- }
1651
- // save sort before applying sortAppend
1652
- c.last.sortList = $.extend( [], c.sortList );
1653
- if ( c.sortList.length && c.sortAppend ) {
1654
- arry = $.isArray( c.sortAppend ) ? c.sortAppend : c.sortAppend[ c.sortList[ 0 ][ 0 ] ];
1655
- if ( !ts.isEmptyObject( arry ) ) {
1656
- for ( indx = 0; indx < arry.length; indx++ ) {
1657
- if ( arry[ indx ][ 0 ] !== col && ts.isValueInArray( arry[ indx ][ 0 ], c.sortList ) < 0 ) {
1658
- dir = arry[ indx ][ 1 ];
1659
- temp = ( '' + dir ).match( /^(a|d|s|o|n)/ );
1660
- if ( temp ) {
1661
- tmp = c.sortList[ 0 ][ 1 ];
1662
- switch ( temp[ 0 ] ) {
1663
- case 'd' :
1664
- dir = 1;
1665
- break;
1666
- case 's' :
1667
- dir = tmp;
1668
- break;
1669
- case 'o' :
1670
- dir = tmp === 0 ? 1 : 0;
1671
- break;
1672
- case 'n' :
1673
- dir = ( tmp + 1 ) % order.length;
1674
- break;
1675
- default:
1676
- dir = 0;
1677
- break;
1678
- }
1679
- }
1680
- c.sortList[ c.sortList.length ] = [ arry[ indx ][ 0 ], dir ];
1681
- c.sortVars[ arry[ indx ][ 0 ] ].sortedBy = 'sortAppend';
1682
- }
1683
- }
1684
- }
1685
- }
1686
- // sortBegin event triggered immediately before the sort
1687
- c.$table.triggerHandler( 'sortBegin', table );
1688
- // setTimeout needed so the processing icon shows up
1689
- setTimeout( function() {
1690
- // set css for headers
1691
- ts.setHeadersCss( c );
1692
- ts.multisort( c );
1693
- ts.appendCache( c );
1694
- c.$table.triggerHandler( 'sortBeforeEnd', table );
1695
- c.$table.triggerHandler( 'sortEnd', table );
1696
- }, 1 );
1697
- },
1698
-
1699
- // sort multiple columns
1700
- multisort : function( c ) { /*jshint loopfunc:true */
1701
- var tbodyIndex, sortTime, colMax, rows, tmp,
1702
- table = c.table,
1703
- sorter = [],
1704
- dir = 0,
1705
- textSorter = c.textSorter || '',
1706
- sortList = c.sortList,
1707
- sortLen = sortList.length,
1708
- len = c.$tbodies.length;
1709
- if ( c.serverSideSorting || ts.isEmptyObject( c.cache ) ) {
1710
- // empty table - fixes #206/#346
1711
- return;
1712
- }
1713
- if ( ts.debug(c, 'core') ) { sortTime = new Date(); }
1714
- // cache textSorter to optimize speed
1715
- if ( typeof textSorter === 'object' ) {
1716
- colMax = c.columns;
1717
- while ( colMax-- ) {
1718
- tmp = ts.getColumnData( table, textSorter, colMax );
1719
- if ( typeof tmp === 'function' ) {
1720
- sorter[ colMax ] = tmp;
1721
- }
1722
- }
1723
- }
1724
- for ( tbodyIndex = 0; tbodyIndex < len; tbodyIndex++ ) {
1725
- colMax = c.cache[ tbodyIndex ].colMax;
1726
- rows = c.cache[ tbodyIndex ].normalized;
1727
-
1728
- rows.sort( function( a, b ) {
1729
- var sortIndex, num, col, order, sort, x, y;
1730
- // rows is undefined here in IE, so don't use it!
1731
- for ( sortIndex = 0; sortIndex < sortLen; sortIndex++ ) {
1732
- col = sortList[ sortIndex ][ 0 ];
1733
- order = sortList[ sortIndex ][ 1 ];
1734
- // sort direction, true = asc, false = desc
1735
- dir = order === 0;
1736
-
1737
- if ( c.sortStable && a[ col ] === b[ col ] && sortLen === 1 ) {
1738
- return a[ c.columns ].order - b[ c.columns ].order;
1739
- }
1740
-
1741
- // fallback to natural sort since it is more robust
1742
- num = /n/i.test( ts.getSortType( c.parsers, col ) );
1743
- if ( num && c.strings[ col ] ) {
1744
- // sort strings in numerical columns
1745
- if ( typeof ( ts.string[ c.strings[ col ] ] ) === 'boolean' ) {
1746
- num = ( dir ? 1 : -1 ) * ( ts.string[ c.strings[ col ] ] ? -1 : 1 );
1747
- } else {
1748
- num = ( c.strings[ col ] ) ? ts.string[ c.strings[ col ] ] || 0 : 0;
1749
- }
1750
- // fall back to built-in numeric sort
1751
- // var sort = $.tablesorter['sort' + s]( a[col], b[col], dir, colMax[col], table );
1752
- sort = c.numberSorter ? c.numberSorter( a[ col ], b[ col ], dir, colMax[ col ], table ) :
1753
- ts[ 'sortNumeric' + ( dir ? 'Asc' : 'Desc' ) ]( a[ col ], b[ col ], num, colMax[ col ], col, c );
1754
- } else {
1755
- // set a & b depending on sort direction
1756
- x = dir ? a : b;
1757
- y = dir ? b : a;
1758
- // text sort function
1759
- if ( typeof textSorter === 'function' ) {
1760
- // custom OVERALL text sorter
1761
- sort = textSorter( x[ col ], y[ col ], dir, col, table );
1762
- } else if ( typeof sorter[ col ] === 'function' ) {
1763
- // custom text sorter for a SPECIFIC COLUMN
1764
- sort = sorter[ col ]( x[ col ], y[ col ], dir, col, table );
1765
- } else {
1766
- // fall back to natural sort
1767
- sort = ts[ 'sortNatural' + ( dir ? 'Asc' : 'Desc' ) ]( a[ col ] || '', b[ col ] || '', col, c );
1768
- }
1769
- }
1770
- if ( sort ) { return sort; }
1771
- }
1772
- return a[ c.columns ].order - b[ c.columns ].order;
1773
- });
1774
- }
1775
- if ( ts.debug(c, 'core') ) {
1776
- console.log( 'Applying sort ' + sortList.toString() + ts.benchmark( sortTime ) );
1777
- }
1778
- },
1779
-
1780
- resortComplete : function( c, callback ) {
1781
- if ( c.table.isUpdating ) {
1782
- c.$table.triggerHandler( 'updateComplete', c.table );
1783
- }
1784
- if ( $.isFunction( callback ) ) {
1785
- callback( c.table );
1786
- }
1787
- },
1788
-
1789
- checkResort : function( c, resort, callback ) {
1790
- var sortList = $.isArray( resort ) ? resort : c.sortList,
1791
- // if no resort parameter is passed, fallback to config.resort (true by default)
1792
- resrt = typeof resort === 'undefined' ? c.resort : resort;
1793
- // don't try to resort if the table is still processing
1794
- // this will catch spamming of the updateCell method
1795
- if ( resrt !== false && !c.serverSideSorting && !c.table.isProcessing ) {
1796
- if ( sortList.length ) {
1797
- ts.sortOn( c, sortList, function() {
1798
- ts.resortComplete( c, callback );
1799
- }, true );
1800
- } else {
1801
- ts.sortReset( c, function() {
1802
- ts.resortComplete( c, callback );
1803
- ts.applyWidget( c.table, false );
1804
- } );
1805
- }
1806
- } else {
1807
- ts.resortComplete( c, callback );
1808
- ts.applyWidget( c.table, false );
1809
- }
1810
- },
1811
-
1812
- sortOn : function( c, list, callback, init ) {
1813
- var indx,
1814
- table = c.table;
1815
- c.$table.triggerHandler( 'sortStart', table );
1816
- for (indx = 0; indx < c.columns; indx++) {
1817
- c.sortVars[ indx ].sortedBy = ts.isValueInArray( indx, list ) > -1 ? 'sorton' : '';
1818
- }
1819
- // update header count index
1820
- ts.updateHeaderSortCount( c, list );
1821
- // set css for headers
1822
- ts.setHeadersCss( c );
1823
- // fixes #346
1824
- if ( c.delayInit && ts.isEmptyObject( c.cache ) ) {
1825
- ts.buildCache( c );
1826
- }
1827
- c.$table.triggerHandler( 'sortBegin', table );
1828
- // sort the table and append it to the dom
1829
- ts.multisort( c );
1830
- ts.appendCache( c, init );
1831
- c.$table.triggerHandler( 'sortBeforeEnd', table );
1832
- c.$table.triggerHandler( 'sortEnd', table );
1833
- ts.applyWidget( table );
1834
- if ( $.isFunction( callback ) ) {
1835
- callback( table );
1836
- }
1837
- },
1838
-
1839
- sortReset : function( c, callback ) {
1840
- c.sortList = [];
1841
- var indx;
1842
- for (indx = 0; indx < c.columns; indx++) {
1843
- c.sortVars[ indx ].count = -1;
1844
- c.sortVars[ indx ].sortedBy = '';
1845
- }
1846
- ts.setHeadersCss( c );
1847
- ts.multisort( c );
1848
- ts.appendCache( c );
1849
- if ( $.isFunction( callback ) ) {
1850
- callback( c.table );
1851
- }
1852
- },
1853
-
1854
- getSortType : function( parsers, column ) {
1855
- return ( parsers && parsers[ column ] ) ? parsers[ column ].type || '' : '';
1856
- },
1857
-
1858
- getOrder : function( val ) {
1859
- // look for 'd' in 'desc' order; return true
1860
- return ( /^d/i.test( val ) || val === 1 );
1861
- },
1862
-
1863
- // Natural sort - https://github.com/overset/javascript-natural-sort (date sorting removed)
1864
- sortNatural : function( a, b ) {
1865
- if ( a === b ) { return 0; }
1866
- a = ( a || '' ).toString();
1867
- b = ( b || '' ).toString();
1868
- var aNum, bNum, aFloat, bFloat, indx, max,
1869
- regex = ts.regex;
1870
- // first try and sort Hex codes
1871
- if ( regex.hex.test( b ) ) {
1872
- aNum = parseInt( a.match( regex.hex ), 16 );
1873
- bNum = parseInt( b.match( regex.hex ), 16 );
1874
- if ( aNum < bNum ) { return -1; }
1875
- if ( aNum > bNum ) { return 1; }
1876
- }
1877
- // chunk/tokenize
1878
- aNum = a.replace( regex.chunk, '\\0$1\\0' ).replace( regex.chunks, '' ).split( '\\0' );
1879
- bNum = b.replace( regex.chunk, '\\0$1\\0' ).replace( regex.chunks, '' ).split( '\\0' );
1880
- max = Math.max( aNum.length, bNum.length );
1881
- // natural sorting through split numeric strings and default strings
1882
- for ( indx = 0; indx < max; indx++ ) {
1883
- // find floats not starting with '0', string or 0 if not defined
1884
- aFloat = isNaN( aNum[ indx ] ) ? aNum[ indx ] || 0 : parseFloat( aNum[ indx ] ) || 0;
1885
- bFloat = isNaN( bNum[ indx ] ) ? bNum[ indx ] || 0 : parseFloat( bNum[ indx ] ) || 0;
1886
- // handle numeric vs string comparison - number < string - (Kyle Adams)
1887
- if ( isNaN( aFloat ) !== isNaN( bFloat ) ) { return isNaN( aFloat ) ? 1 : -1; }
1888
- // rely on string comparison if different types - i.e. '02' < 2 != '02' < '2'
1889
- if ( typeof aFloat !== typeof bFloat ) {
1890
- aFloat += '';
1891
- bFloat += '';
1892
- }
1893
- if ( aFloat < bFloat ) { return -1; }
1894
- if ( aFloat > bFloat ) { return 1; }
1895
- }
1896
- return 0;
1897
- },
1898
-
1899
- sortNaturalAsc : function( a, b, col, c ) {
1900
- if ( a === b ) { return 0; }
1901
- var empty = ts.string[ ( c.empties[ col ] || c.emptyTo ) ];
1902
- if ( a === '' && empty !== 0 ) { return typeof empty === 'boolean' ? ( empty ? -1 : 1 ) : -empty || -1; }
1903
- if ( b === '' && empty !== 0 ) { return typeof empty === 'boolean' ? ( empty ? 1 : -1 ) : empty || 1; }
1904
- return ts.sortNatural( a, b );
1905
- },
1906
-
1907
- sortNaturalDesc : function( a, b, col, c ) {
1908
- if ( a === b ) { return 0; }
1909
- var empty = ts.string[ ( c.empties[ col ] || c.emptyTo ) ];
1910
- if ( a === '' && empty !== 0 ) { return typeof empty === 'boolean' ? ( empty ? -1 : 1 ) : empty || 1; }
1911
- if ( b === '' && empty !== 0 ) { return typeof empty === 'boolean' ? ( empty ? 1 : -1 ) : -empty || -1; }
1912
- return ts.sortNatural( b, a );
1913
- },
1914
-
1915
- // basic alphabetical sort
1916
- sortText : function( a, b ) {
1917
- return a > b ? 1 : ( a < b ? -1 : 0 );
1918
- },
1919
-
1920
- // return text string value by adding up ascii value
1921
- // so the text is somewhat sorted when using a digital sort
1922
- // this is NOT an alphanumeric sort
1923
- getTextValue : function( val, num, max ) {
1924
- if ( max ) {
1925
- // make sure the text value is greater than the max numerical value (max)
1926
- var indx,
1927
- len = val ? val.length : 0,
1928
- n = max + num;
1929
- for ( indx = 0; indx < len; indx++ ) {
1930
- n += val.charCodeAt( indx );
1931
- }
1932
- return num * n;
1933
- }
1934
- return 0;
1935
- },
1936
-
1937
- sortNumericAsc : function( a, b, num, max, col, c ) {
1938
- if ( a === b ) { return 0; }
1939
- var empty = ts.string[ ( c.empties[ col ] || c.emptyTo ) ];
1940
- if ( a === '' && empty !== 0 ) { return typeof empty === 'boolean' ? ( empty ? -1 : 1 ) : -empty || -1; }
1941
- if ( b === '' && empty !== 0 ) { return typeof empty === 'boolean' ? ( empty ? 1 : -1 ) : empty || 1; }
1942
- if ( isNaN( a ) ) { a = ts.getTextValue( a, num, max ); }
1943
- if ( isNaN( b ) ) { b = ts.getTextValue( b, num, max ); }
1944
- return a - b;
1945
- },
1946
-
1947
- sortNumericDesc : function( a, b, num, max, col, c ) {
1948
- if ( a === b ) { return 0; }
1949
- var empty = ts.string[ ( c.empties[ col ] || c.emptyTo ) ];
1950
- if ( a === '' && empty !== 0 ) { return typeof empty === 'boolean' ? ( empty ? -1 : 1 ) : empty || 1; }
1951
- if ( b === '' && empty !== 0 ) { return typeof empty === 'boolean' ? ( empty ? 1 : -1 ) : -empty || -1; }
1952
- if ( isNaN( a ) ) { a = ts.getTextValue( a, num, max ); }
1953
- if ( isNaN( b ) ) { b = ts.getTextValue( b, num, max ); }
1954
- return b - a;
1955
- },
1956
-
1957
- sortNumeric : function( a, b ) {
1958
- return a - b;
1959
- },
1960
-
1961
- /*
1962
- ██ ██ ██ ██ █████▄ ▄████▄ ██████ ██████ ▄█████
1963
- ██ ██ ██ ██ ██ ██ ██ ▄▄▄ ██▄▄ ██ ▀█▄
1964
- ██ ██ ██ ██ ██ ██ ██ ▀██ ██▀▀ ██ ▀█▄
1965
- ███████▀ ██ █████▀ ▀████▀ ██████ ██ █████▀
1966
- */
1967
- addWidget : function( widget ) {
1968
- if ( widget.id && !ts.isEmptyObject( ts.getWidgetById( widget.id ) ) ) {
1969
- console.warn( '"' + widget.id + '" widget was loaded more than once!' );
1970
- }
1971
- ts.widgets[ ts.widgets.length ] = widget;
1972
- },
1973
-
1974
- hasWidget : function( $table, name ) {
1975
- $table = $( $table );
1976
- return $table.length && $table[ 0 ].config && $table[ 0 ].config.widgetInit[ name ] || false;
1977
- },
1978
-
1979
- getWidgetById : function( name ) {
1980
- var indx, widget,
1981
- len = ts.widgets.length;
1982
- for ( indx = 0; indx < len; indx++ ) {
1983
- widget = ts.widgets[ indx ];
1984
- if ( widget && widget.id && widget.id.toLowerCase() === name.toLowerCase() ) {
1985
- return widget;
1986
- }
1987
- }
1988
- },
1989
-
1990
- applyWidgetOptions : function( table ) {
1991
- var indx, widget, wo,
1992
- c = table.config,
1993
- len = c.widgets.length;
1994
- if ( len ) {
1995
- for ( indx = 0; indx < len; indx++ ) {
1996
- widget = ts.getWidgetById( c.widgets[ indx ] );
1997
- if ( widget && widget.options ) {
1998
- wo = $.extend( true, {}, widget.options );
1999
- c.widgetOptions = $.extend( true, wo, c.widgetOptions );
2000
- // add widgetOptions to defaults for option validator
2001
- $.extend( true, ts.defaults.widgetOptions, widget.options );
2002
- }
2003
- }
2004
- }
2005
- },
2006
-
2007
- addWidgetFromClass : function( table ) {
2008
- var len, indx,
2009
- c = table.config,
2010
- // look for widgets to apply from table class
2011
- // don't match from 'ui-widget-content'; use \S instead of \w to include widgets
2012
- // with dashes in the name, e.g. "widget-test-2" extracts out "test-2"
2013
- regex = '^' + c.widgetClass.replace( ts.regex.templateName, '(\\S+)+' ) + '$',
2014
- widgetClass = new RegExp( regex, 'g' ),
2015
- // split up table class (widget id's can include dashes) - stop using match
2016
- // otherwise only one widget gets extracted, see #1109
2017
- widgets = ( table.className || '' ).split( ts.regex.spaces );
2018
- if ( widgets.length ) {
2019
- len = widgets.length;
2020
- for ( indx = 0; indx < len; indx++ ) {
2021
- if ( widgets[ indx ].match( widgetClass ) ) {
2022
- c.widgets[ c.widgets.length ] = widgets[ indx ].replace( widgetClass, '$1' );
2023
- }
2024
- }
2025
- }
2026
- },
2027
-
2028
- applyWidgetId : function( table, id, init ) {
2029
- table = $(table)[0];
2030
- var applied, time, name,
2031
- c = table.config,
2032
- wo = c.widgetOptions,
2033
- debug = ts.debug(c, 'core'),
2034
- widget = ts.getWidgetById( id );
2035
- if ( widget ) {
2036
- name = widget.id;
2037
- applied = false;
2038
- // add widget name to option list so it gets reapplied after sorting, filtering, etc
2039
- if ( $.inArray( name, c.widgets ) < 0 ) {
2040
- c.widgets[ c.widgets.length ] = name;
2041
- }
2042
- if ( debug ) { time = new Date(); }
2043
-
2044
- if ( init || !( c.widgetInit[ name ] ) ) {
2045
- // set init flag first to prevent calling init more than once (e.g. pager)
2046
- c.widgetInit[ name ] = true;
2047
- if ( table.hasInitialized ) {
2048
- // don't reapply widget options on tablesorter init
2049
- ts.applyWidgetOptions( table );
2050
- }
2051
- if ( typeof widget.init === 'function' ) {
2052
- applied = true;
2053
- if ( debug ) {
2054
- console[ console.group ? 'group' : 'log' ]( 'Initializing ' + name + ' widget' );
2055
- }
2056
- widget.init( table, widget, c, wo );
2057
- }
2058
- }
2059
- if ( !init && typeof widget.format === 'function' ) {
2060
- applied = true;
2061
- if ( debug ) {
2062
- console[ console.group ? 'group' : 'log' ]( 'Updating ' + name + ' widget' );
2063
- }
2064
- widget.format( table, c, wo, false );
2065
- }
2066
- if ( debug ) {
2067
- if ( applied ) {
2068
- console.log( 'Completed ' + ( init ? 'initializing ' : 'applying ' ) + name + ' widget' + ts.benchmark( time ) );
2069
- if ( console.groupEnd ) { console.groupEnd(); }
2070
- }
2071
- }
2072
- }
2073
- },
2074
-
2075
- applyWidget : function( table, init, callback ) {
2076
- table = $( table )[ 0 ]; // in case this is called externally
2077
- var indx, len, names, widget, time,
2078
- c = table.config,
2079
- debug = ts.debug(c, 'core'),
2080
- widgets = [];
2081
- // prevent numerous consecutive widget applications
2082
- if ( init !== false && table.hasInitialized && ( table.isApplyingWidgets || table.isUpdating ) ) {
2083
- return;
2084
- }
2085
- if ( debug ) { time = new Date(); }
2086
- ts.addWidgetFromClass( table );
2087
- // prevent "tablesorter-ready" from firing multiple times in a row
2088
- clearTimeout( c.timerReady );
2089
- if ( c.widgets.length ) {
2090
- table.isApplyingWidgets = true;
2091
- // ensure unique widget ids
2092
- c.widgets = $.grep( c.widgets, function( val, index ) {
2093
- return $.inArray( val, c.widgets ) === index;
2094
- });
2095
- names = c.widgets || [];
2096
- len = names.length;
2097
- // build widget array & add priority as needed
2098
- for ( indx = 0; indx < len; indx++ ) {
2099
- widget = ts.getWidgetById( names[ indx ] );
2100
- if ( widget && widget.id ) {
2101
- // set priority to 10 if not defined
2102
- if ( !widget.priority ) { widget.priority = 10; }
2103
- widgets[ indx ] = widget;
2104
- } else if ( debug ) {
2105
- console.warn( '"' + names[ indx ] + '" was enabled, but the widget code has not been loaded!' );
2106
- }
2107
- }
2108
- // sort widgets by priority
2109
- widgets.sort( function( a, b ) {
2110
- return a.priority < b.priority ? -1 : a.priority === b.priority ? 0 : 1;
2111
- });
2112
- // add/update selected widgets
2113
- len = widgets.length;
2114
- if ( debug ) {
2115
- console[ console.group ? 'group' : 'log' ]( 'Start ' + ( init ? 'initializing' : 'applying' ) + ' widgets' );
2116
- }
2117
- for ( indx = 0; indx < len; indx++ ) {
2118
- widget = widgets[ indx ];
2119
- if ( widget && widget.id ) {
2120
- ts.applyWidgetId( table, widget.id, init );
2121
- }
2122
- }
2123
- if ( debug && console.groupEnd ) { console.groupEnd(); }
2124
- }
2125
- c.timerReady = setTimeout( function() {
2126
- table.isApplyingWidgets = false;
2127
- $.data( table, 'lastWidgetApplication', new Date() );
2128
- c.$table.triggerHandler( 'tablesorter-ready' );
2129
- // callback executed on init only
2130
- if ( !init && typeof callback === 'function' ) {
2131
- callback( table );
2132
- }
2133
- if ( debug ) {
2134
- widget = c.widgets.length;
2135
- console.log( 'Completed ' +
2136
- ( init === true ? 'initializing ' : 'applying ' ) + widget +
2137
- ' widget' + ( widget !== 1 ? 's' : '' ) + ts.benchmark( time ) );
2138
- }
2139
- }, 10 );
2140
- },
2141
-
2142
- removeWidget : function( table, name, refreshing ) {
2143
- table = $( table )[ 0 ];
2144
- var index, widget, indx, len,
2145
- c = table.config;
2146
- // if name === true, add all widgets from $.tablesorter.widgets
2147
- if ( name === true ) {
2148
- name = [];
2149
- len = ts.widgets.length;
2150
- for ( indx = 0; indx < len; indx++ ) {
2151
- widget = ts.widgets[ indx ];
2152
- if ( widget && widget.id ) {
2153
- name[ name.length ] = widget.id;
2154
- }
2155
- }
2156
- } else {
2157
- // name can be either an array of widgets names,
2158
- // or a space/comma separated list of widget names
2159
- name = ( $.isArray( name ) ? name.join( ',' ) : name || '' ).toLowerCase().split( /[\s,]+/ );
2160
- }
2161
- len = name.length;
2162
- for ( index = 0; index < len; index++ ) {
2163
- widget = ts.getWidgetById( name[ index ] );
2164
- indx = $.inArray( name[ index ], c.widgets );
2165
- // don't remove the widget from config.widget if refreshing
2166
- if ( indx >= 0 && refreshing !== true ) {
2167
- c.widgets.splice( indx, 1 );
2168
- }
2169
- if ( widget && widget.remove ) {
2170
- if ( ts.debug(c, 'core') ) {
2171
- console.log( ( refreshing ? 'Refreshing' : 'Removing' ) + ' "' + name[ index ] + '" widget' );
2172
- }
2173
- widget.remove( table, c, c.widgetOptions, refreshing );
2174
- c.widgetInit[ name[ index ] ] = false;
2175
- }
2176
- }
2177
- c.$table.triggerHandler( 'widgetRemoveEnd', table );
2178
- },
2179
-
2180
- refreshWidgets : function( table, doAll, dontapply ) {
2181
- table = $( table )[ 0 ]; // see issue #243
2182
- var indx, widget,
2183
- c = table.config,
2184
- curWidgets = c.widgets,
2185
- widgets = ts.widgets,
2186
- len = widgets.length,
2187
- list = [],
2188
- callback = function( table ) {
2189
- $( table ).triggerHandler( 'refreshComplete' );
2190
- };
2191
- // remove widgets not defined in config.widgets, unless doAll is true
2192
- for ( indx = 0; indx < len; indx++ ) {
2193
- widget = widgets[ indx ];
2194
- if ( widget && widget.id && ( doAll || $.inArray( widget.id, curWidgets ) < 0 ) ) {
2195
- list[ list.length ] = widget.id;
2196
- }
2197
- }
2198
- ts.removeWidget( table, list.join( ',' ), true );
2199
- if ( dontapply !== true ) {
2200
- // call widget init if
2201
- ts.applyWidget( table, doAll || false, callback );
2202
- if ( doAll ) {
2203
- // apply widget format
2204
- ts.applyWidget( table, false, callback );
2205
- }
2206
- } else {
2207
- callback( table );
2208
- }
2209
- },
2210
-
2211
- /*
2212
- ██ ██ ██████ ██ ██ ██ ██████ ██ ██████ ▄█████
2213
- ██ ██ ██ ██ ██ ██ ██ ██ ██▄▄ ▀█▄
2214
- ██ ██ ██ ██ ██ ██ ██ ██ ██▀▀ ▀█▄
2215
- ▀████▀ ██ ██ ██████ ██ ██ ██ ██████ █████▀
2216
- */
2217
- benchmark : function( diff ) {
2218
- return ( ' (' + ( new Date().getTime() - diff.getTime() ) + ' ms)' );
2219
- },
2220
- // deprecated ts.log
2221
- log : function() {
2222
- console.log( arguments );
2223
- },
2224
- debug : function(c, name) {
2225
- return c && (
2226
- c.debug === true ||
2227
- typeof c.debug === 'string' && c.debug.indexOf(name) > -1
2228
- );
2229
- },
2230
-
2231
- // $.isEmptyObject from jQuery v1.4
2232
- isEmptyObject : function( obj ) {
2233
- /*jshint forin: false */
2234
- for ( var name in obj ) {
2235
- return false;
2236
- }
2237
- return true;
2238
- },
2239
-
2240
- isValueInArray : function( column, arry ) {
2241
- var indx,
2242
- len = arry && arry.length || 0;
2243
- for ( indx = 0; indx < len; indx++ ) {
2244
- if ( arry[ indx ][ 0 ] === column ) {
2245
- return indx;
2246
- }
2247
- }
2248
- return -1;
2249
- },
2250
-
2251
- formatFloat : function( str, table ) {
2252
- if ( typeof str !== 'string' || str === '' ) { return str; }
2253
- // allow using formatFloat without a table; defaults to US number format
2254
- var num,
2255
- usFormat = table && table.config ? table.config.usNumberFormat !== false :
2256
- typeof table !== 'undefined' ? table : true;
2257
- if ( usFormat ) {
2258
- // US Format - 1,234,567.89 -> 1234567.89
2259
- str = str.replace( ts.regex.comma, '' );
2260
- } else {
2261
- // German Format = 1.234.567,89 -> 1234567.89
2262
- // French Format = 1 234 567,89 -> 1234567.89
2263
- str = str.replace( ts.regex.digitNonUS, '' ).replace( ts.regex.comma, '.' );
2264
- }
2265
- if ( ts.regex.digitNegativeTest.test( str ) ) {
2266
- // make (#) into a negative number -> (10) = -10
2267
- str = str.replace( ts.regex.digitNegativeReplace, '-$1' );
2268
- }
2269
- num = parseFloat( str );
2270
- // return the text instead of zero
2271
- return isNaN( num ) ? $.trim( str ) : num;
2272
- },
2273
-
2274
- isDigit : function( str ) {
2275
- // replace all unwanted chars and match
2276
- return isNaN( str ) ?
2277
- ts.regex.digitTest.test( str.toString().replace( ts.regex.digitReplace, '' ) ) :
2278
- str !== '';
2279
- },
2280
-
2281
- // computeTableHeaderCellIndexes from:
2282
- // http://www.javascripttoolbox.com/lib/table/examples.php
2283
- // http://www.javascripttoolbox.com/temp/table_cellindex.html
2284
- computeColumnIndex : function( $rows, c ) {
2285
- var i, j, k, l, cell, cells, rowIndex, rowSpan, colSpan, firstAvailCol,
2286
- // total columns has been calculated, use it to set the matrixrow
2287
- columns = c && c.columns || 0,
2288
- matrix = [],
2289
- matrixrow = new Array( columns );
2290
- for ( i = 0; i < $rows.length; i++ ) {
2291
- cells = $rows[ i ].cells;
2292
- for ( j = 0; j < cells.length; j++ ) {
2293
- cell = cells[ j ];
2294
- rowIndex = i;
2295
- rowSpan = cell.rowSpan || 1;
2296
- colSpan = cell.colSpan || 1;
2297
- if ( typeof matrix[ rowIndex ] === 'undefined' ) {
2298
- matrix[ rowIndex ] = [];
2299
- }
2300
- // Find first available column in the first row
2301
- for ( k = 0; k < matrix[ rowIndex ].length + 1; k++ ) {
2302
- if ( typeof matrix[ rowIndex ][ k ] === 'undefined' ) {
2303
- firstAvailCol = k;
2304
- break;
2305
- }
2306
- }
2307
- // jscs:disable disallowEmptyBlocks
2308
- if ( columns && cell.cellIndex === firstAvailCol ) {
2309
- // don't to anything
2310
- } else if ( cell.setAttribute ) {
2311
- // jscs:enable disallowEmptyBlocks
2312
- // add data-column (setAttribute = IE8+)
2313
- cell.setAttribute( 'data-column', firstAvailCol );
2314
- } else {
2315
- // remove once we drop support for IE7 - 1/12/2016
2316
- $( cell ).attr( 'data-column', firstAvailCol );
2317
- }
2318
- for ( k = rowIndex; k < rowIndex + rowSpan; k++ ) {
2319
- if ( typeof matrix[ k ] === 'undefined' ) {
2320
- matrix[ k ] = [];
2321
- }
2322
- matrixrow = matrix[ k ];
2323
- for ( l = firstAvailCol; l < firstAvailCol + colSpan; l++ ) {
2324
- matrixrow[ l ] = 'x';
2325
- }
2326
- }
2327
- }
2328
- }
2329
- ts.checkColumnCount($rows, matrix, matrixrow.length);
2330
- return matrixrow.length;
2331
- },
2332
-
2333
- checkColumnCount : function($rows, matrix, columns) {
2334
- // this DOES NOT report any tbody column issues, except for the math and
2335
- // and column selector widgets
2336
- var i, len,
2337
- valid = true,
2338
- cells = [];
2339
- for ( i = 0; i < matrix.length; i++ ) {
2340
- // some matrix entries are undefined when testing the footer because
2341
- // it is using the rowIndex property
2342
- if ( matrix[i] ) {
2343
- len = matrix[i].length;
2344
- if ( matrix[i].length !== columns ) {
2345
- valid = false;
2346
- break;
2347
- }
2348
- }
2349
- }
2350
- if ( !valid ) {
2351
- $rows.each( function( indx, el ) {
2352
- var cell = el.parentElement.nodeName;
2353
- if ( cells.indexOf( cell ) < 0 ) {
2354
- cells.push( cell );
2355
- }
2356
- });
2357
- console.error(
2358
- 'Invalid or incorrect number of columns in the ' +
2359
- cells.join( ' or ' ) + '; expected ' + columns +
2360
- ', but found ' + len + ' columns'
2361
- );
2362
- }
2363
- },
2364
-
2365
- // automatically add a colgroup with col elements set to a percentage width
2366
- fixColumnWidth : function( table ) {
2367
- table = $( table )[ 0 ];
2368
- var overallWidth, percent, $tbodies, len, index,
2369
- c = table.config,
2370
- $colgroup = c.$table.children( 'colgroup' );
2371
- // remove plugin-added colgroup, in case we need to refresh the widths
2372
- if ( $colgroup.length && $colgroup.hasClass( ts.css.colgroup ) ) {
2373
- $colgroup.remove();
2374
- }
2375
- if ( c.widthFixed && c.$table.children( 'colgroup' ).length === 0 ) {
2376
- $colgroup = $( '<colgroup class="' + ts.css.colgroup + '">' );
2377
- overallWidth = c.$table.width();
2378
- // only add col for visible columns - fixes #371
2379
- $tbodies = c.$tbodies.find( 'tr:first' ).children( ':visible' );
2380
- len = $tbodies.length;
2381
- for ( index = 0; index < len; index++ ) {
2382
- percent = parseInt( ( $tbodies.eq( index ).width() / overallWidth ) * 1000, 10 ) / 10 + '%';
2383
- $colgroup.append( $( '<col>' ).css( 'width', percent ) );
2384
- }
2385
- c.$table.prepend( $colgroup );
2386
- }
2387
- },
2388
-
2389
- // get sorter, string, empty, etc options for each column from
2390
- // jQuery data, metadata, header option or header class name ('sorter-false')
2391
- // priority = jQuery data > meta > headers option > header class name
2392
- getData : function( header, configHeader, key ) {
2393
- var meta, cl4ss,
2394
- val = '',
2395
- $header = $( header );
2396
- if ( !$header.length ) { return ''; }
2397
- meta = $.metadata ? $header.metadata() : false;
2398
- cl4ss = ' ' + ( $header.attr( 'class' ) || '' );
2399
- if ( typeof $header.data( key ) !== 'undefined' ||
2400
- typeof $header.data( key.toLowerCase() ) !== 'undefined' ) {
2401
- // 'data-lockedOrder' is assigned to 'lockedorder'; but 'data-locked-order' is assigned to 'lockedOrder'
2402
- // 'data-sort-initial-order' is assigned to 'sortInitialOrder'
2403
- val += $header.data( key ) || $header.data( key.toLowerCase() );
2404
- } else if ( meta && typeof meta[ key ] !== 'undefined' ) {
2405
- val += meta[ key ];
2406
- } else if ( configHeader && typeof configHeader[ key ] !== 'undefined' ) {
2407
- val += configHeader[ key ];
2408
- } else if ( cl4ss !== ' ' && cl4ss.match( ' ' + key + '-' ) ) {
2409
- // include sorter class name 'sorter-text', etc; now works with 'sorter-my-custom-parser'
2410
- val = cl4ss.match( new RegExp( '\\s' + key + '-([\\w-]+)' ) )[ 1 ] || '';
2411
- }
2412
- return $.trim( val );
2413
- },
2414
-
2415
- getColumnData : function( table, obj, indx, getCell, $headers ) {
2416
- if ( typeof obj !== 'object' || obj === null ) {
2417
- return obj;
2418
- }
2419
- table = $( table )[ 0 ];
2420
- var $header, key,
2421
- c = table.config,
2422
- $cells = ( $headers || c.$headers ),
2423
- // c.$headerIndexed is not defined initially
2424
- $cell = c.$headerIndexed && c.$headerIndexed[ indx ] ||
2425
- $cells.find( '[data-column="' + indx + '"]:last' );
2426
- if ( typeof obj[ indx ] !== 'undefined' ) {
2427
- return getCell ? obj[ indx ] : obj[ $cells.index( $cell ) ];
2428
- }
2429
- for ( key in obj ) {
2430
- if ( typeof key === 'string' ) {
2431
- $header = $cell
2432
- // header cell with class/id
2433
- .filter( key )
2434
- // find elements within the header cell with cell/id
2435
- .add( $cell.find( key ) );
2436
- if ( $header.length ) {
2437
- return obj[ key ];
2438
- }
2439
- }
2440
- }
2441
- return;
2442
- },
2443
-
2444
- // *** Process table ***
2445
- // add processing indicator
2446
- isProcessing : function( $table, toggle, $headers ) {
2447
- $table = $( $table );
2448
- var c = $table[ 0 ].config,
2449
- // default to all headers
2450
- $header = $headers || $table.find( '.' + ts.css.header );
2451
- if ( toggle ) {
2452
- // don't use sortList if custom $headers used
2453
- if ( typeof $headers !== 'undefined' && c.sortList.length > 0 ) {
2454
- // get headers from the sortList
2455
- $header = $header.filter( function() {
2456
- // get data-column from attr to keep compatibility with jQuery 1.2.6
2457
- return this.sortDisabled ?
2458
- false :
2459
- ts.isValueInArray( parseFloat( $( this ).attr( 'data-column' ) ), c.sortList ) >= 0;
2460
- });
2461
- }
2462
- $table.add( $header ).addClass( ts.css.processing + ' ' + c.cssProcessing );
2463
- } else {
2464
- $table.add( $header ).removeClass( ts.css.processing + ' ' + c.cssProcessing );
2465
- }
2466
- },
2467
-
2468
- // detach tbody but save the position
2469
- // don't use tbody because there are portions that look for a tbody index (updateCell)
2470
- processTbody : function( table, $tb, getIt ) {
2471
- table = $( table )[ 0 ];
2472
- if ( getIt ) {
2473
- table.isProcessing = true;
2474
- $tb.before( '<colgroup class="tablesorter-savemyplace"/>' );
2475
- return $.fn.detach ? $tb.detach() : $tb.remove();
2476
- }
2477
- var holdr = $( table ).find( 'colgroup.tablesorter-savemyplace' );
2478
- $tb.insertAfter( holdr );
2479
- holdr.remove();
2480
- table.isProcessing = false;
2481
- },
2482
-
2483
- clearTableBody : function( table ) {
2484
- $( table )[ 0 ].config.$tbodies.children().detach();
2485
- },
2486
-
2487
- // used when replacing accented characters during sorting
2488
- characterEquivalents : {
2489
- 'a' : '\u00e1\u00e0\u00e2\u00e3\u00e4\u0105\u00e5', // áàâãäąå
2490
- 'A' : '\u00c1\u00c0\u00c2\u00c3\u00c4\u0104\u00c5', // ÁÀÂÃÄĄÅ
2491
- 'c' : '\u00e7\u0107\u010d', // çćč
2492
- 'C' : '\u00c7\u0106\u010c', // ÇĆČ
2493
- 'e' : '\u00e9\u00e8\u00ea\u00eb\u011b\u0119', // éèêëěę
2494
- 'E' : '\u00c9\u00c8\u00ca\u00cb\u011a\u0118', // ÉÈÊËĚĘ
2495
- 'i' : '\u00ed\u00ec\u0130\u00ee\u00ef\u0131', // íìİîïı
2496
- 'I' : '\u00cd\u00cc\u0130\u00ce\u00cf', // ÍÌİÎÏ
2497
- 'o' : '\u00f3\u00f2\u00f4\u00f5\u00f6\u014d', // óòôõöō
2498
- 'O' : '\u00d3\u00d2\u00d4\u00d5\u00d6\u014c', // ÓÒÔÕÖŌ
2499
- 'ss': '\u00df', // ß (s sharp)
2500
- 'SS': '\u1e9e', // ẞ (Capital sharp s)
2501
- 'u' : '\u00fa\u00f9\u00fb\u00fc\u016f', // úùûüů
2502
- 'U' : '\u00da\u00d9\u00db\u00dc\u016e' // ÚÙÛÜŮ
2503
- },
2504
-
2505
- replaceAccents : function( str ) {
2506
- var chr,
2507
- acc = '[',
2508
- eq = ts.characterEquivalents;
2509
- if ( !ts.characterRegex ) {
2510
- ts.characterRegexArray = {};
2511
- for ( chr in eq ) {
2512
- if ( typeof chr === 'string' ) {
2513
- acc += eq[ chr ];
2514
- ts.characterRegexArray[ chr ] = new RegExp( '[' + eq[ chr ] + ']', 'g' );
2515
- }
2516
- }
2517
- ts.characterRegex = new RegExp( acc + ']' );
2518
- }
2519
- if ( ts.characterRegex.test( str ) ) {
2520
- for ( chr in eq ) {
2521
- if ( typeof chr === 'string' ) {
2522
- str = str.replace( ts.characterRegexArray[ chr ], chr );
2523
- }
2524
- }
2525
- }
2526
- return str;
2527
- },
2528
-
2529
- validateOptions : function( c ) {
2530
- var setting, setting2, typ, timer,
2531
- // ignore options containing an array
2532
- ignore = 'headers sortForce sortList sortAppend widgets'.split( ' ' ),
2533
- orig = c.originalSettings;
2534
- if ( orig ) {
2535
- if ( ts.debug(c, 'core') ) {
2536
- timer = new Date();
2537
- }
2538
- for ( setting in orig ) {
2539
- typ = typeof ts.defaults[setting];
2540
- if ( typ === 'undefined' ) {
2541
- console.warn( 'Tablesorter Warning! "table.config.' + setting + '" option not recognized' );
2542
- } else if ( typ === 'object' ) {
2543
- for ( setting2 in orig[setting] ) {
2544
- typ = ts.defaults[setting] && typeof ts.defaults[setting][setting2];
2545
- if ( $.inArray( setting, ignore ) < 0 && typ === 'undefined' ) {
2546
- console.warn( 'Tablesorter Warning! "table.config.' + setting + '.' + setting2 + '" option not recognized' );
2547
- }
2548
- }
2549
- }
2550
- }
2551
- if ( ts.debug(c, 'core') ) {
2552
- console.log( 'validate options time:' + ts.benchmark( timer ) );
2553
- }
2554
- }
2555
- },
2556
-
2557
- // restore headers
2558
- restoreHeaders : function( table ) {
2559
- var index, $cell,
2560
- c = $( table )[ 0 ].config,
2561
- $headers = c.$table.find( c.selectorHeaders ),
2562
- len = $headers.length;
2563
- // don't use c.$headers here in case header cells were swapped
2564
- for ( index = 0; index < len; index++ ) {
2565
- $cell = $headers.eq( index );
2566
- // only restore header cells if it is wrapped
2567
- // because this is also used by the updateAll method
2568
- if ( $cell.find( '.' + ts.css.headerIn ).length ) {
2569
- $cell.html( c.headerContent[ index ] );
2570
- }
2571
- }
2572
- },
2573
-
2574
- destroy : function( table, removeClasses, callback ) {
2575
- table = $( table )[ 0 ];
2576
- if ( !table.hasInitialized ) { return; }
2577
- // remove all widgets
2578
- ts.removeWidget( table, true, false );
2579
- var events,
2580
- $t = $( table ),
2581
- c = table.config,
2582
- $h = $t.find( 'thead:first' ),
2583
- $r = $h.find( 'tr.' + ts.css.headerRow ).removeClass( ts.css.headerRow + ' ' + c.cssHeaderRow ),
2584
- $f = $t.find( 'tfoot:first > tr' ).children( 'th, td' );
2585
- if ( removeClasses === false && $.inArray( 'uitheme', c.widgets ) >= 0 ) {
2586
- // reapply uitheme classes, in case we want to maintain appearance
2587
- $t.triggerHandler( 'applyWidgetId', [ 'uitheme' ] );
2588
- $t.triggerHandler( 'applyWidgetId', [ 'zebra' ] );
2589
- }
2590
- // remove widget added rows, just in case
2591
- $h.find( 'tr' ).not( $r ).remove();
2592
- // disable tablesorter - not using .unbind( namespace ) because namespacing was
2593
- // added in jQuery v1.4.3 - see http://api.jquery.com/event.namespace/
2594
- events = 'sortReset update updateRows updateAll updateHeaders updateCell addRows updateComplete sorton ' +
2595
- 'appendCache updateCache applyWidgetId applyWidgets refreshWidgets removeWidget destroy mouseup mouseleave ' +
2596
- 'keypress sortBegin sortEnd resetToLoadState '.split( ' ' )
2597
- .join( c.namespace + ' ' );
2598
- $t
2599
- .removeData( 'tablesorter' )
2600
- .unbind( events.replace( ts.regex.spaces, ' ' ) );
2601
- c.$headers
2602
- .add( $f )
2603
- .removeClass( [ ts.css.header, c.cssHeader, c.cssAsc, c.cssDesc, ts.css.sortAsc, ts.css.sortDesc, ts.css.sortNone ].join( ' ' ) )
2604
- .removeAttr( 'data-column' )
2605
- .removeAttr( 'aria-label' )
2606
- .attr( 'aria-disabled', 'true' );
2607
- $r
2608
- .find( c.selectorSort )
2609
- .unbind( ( 'mousedown mouseup keypress '.split( ' ' ).join( c.namespace + ' ' ) ).replace( ts.regex.spaces, ' ' ) );
2610
- ts.restoreHeaders( table );
2611
- $t.toggleClass( ts.css.table + ' ' + c.tableClass + ' tablesorter-' + c.theme, removeClasses === false );
2612
- $t.removeClass(c.namespace.slice(1));
2613
- // clear flag in case the plugin is initialized again
2614
- table.hasInitialized = false;
2615
- delete table.config.cache;
2616
- if ( typeof callback === 'function' ) {
2617
- callback( table );
2618
- }
2619
- if ( ts.debug(c, 'core') ) {
2620
- console.log( 'tablesorter has been removed' );
2621
- }
2622
- }
2623
-
2624
- };
2625
-
2626
- $.fn.tablesorter = function( settings ) {
2627
- return this.each( function() {
2628
- var table = this,
2629
- // merge & extend config options
2630
- c = $.extend( true, {}, ts.defaults, settings, ts.instanceMethods );
2631
- // save initial settings
2632
- c.originalSettings = settings;
2633
- // create a table from data (build table widget)
2634
- if ( !table.hasInitialized && ts.buildTable && this.nodeName !== 'TABLE' ) {
2635
- // return the table (in case the original target is the table's container)
2636
- ts.buildTable( table, c );
2637
- } else {
2638
- ts.setup( table, c );
2639
- }
2640
- });
2641
- };
2642
-
2643
- // set up debug logs
2644
- if ( !( window.console && window.console.log ) ) {
2645
- // access $.tablesorter.logs for browsers that don't have a console...
2646
- ts.logs = [];
2647
- /*jshint -W020 */
2648
- console = {};
2649
- console.log = console.warn = console.error = console.table = function() {
2650
- var arg = arguments.length > 1 ? arguments : arguments[0];
2651
- ts.logs[ ts.logs.length ] = { date: Date.now(), log: arg };
2652
- };
2653
- }
2654
-
2655
- // add default parsers
2656
- ts.addParser({
2657
- id : 'no-parser',
2658
- is : function() {
2659
- return false;
2660
- },
2661
- format : function() {
2662
- return '';
2663
- },
2664
- type : 'text'
2665
- });
2666
-
2667
- ts.addParser({
2668
- id : 'text',
2669
- is : function() {
2670
- return true;
2671
- },
2672
- format : function( str, table ) {
2673
- var c = table.config;
2674
- if ( str ) {
2675
- str = $.trim( c.ignoreCase ? str.toLocaleLowerCase() : str );
2676
- str = c.sortLocaleCompare ? ts.replaceAccents( str ) : str;
2677
- }
2678
- return str;
2679
- },
2680
- type : 'text'
2681
- });
2682
-
2683
- ts.regex.nondigit = /[^\w,. \-()]/g;
2684
- ts.addParser({
2685
- id : 'digit',
2686
- is : function( str ) {
2687
- return ts.isDigit( str );
2688
- },
2689
- format : function( str, table ) {
2690
- var num = ts.formatFloat( ( str || '' ).replace( ts.regex.nondigit, '' ), table );
2691
- return str && typeof num === 'number' ? num :
2692
- str ? $.trim( str && table.config.ignoreCase ? str.toLocaleLowerCase() : str ) : str;
2693
- },
2694
- type : 'numeric'
2695
- });
2696
-
2697
- ts.regex.currencyReplace = /[+\-,. ]/g;
2698
- ts.regex.currencyTest = /^\(?\d+[\u00a3$\u20ac\u00a4\u00a5\u00a2?.]|[\u00a3$\u20ac\u00a4\u00a5\u00a2?.]\d+\)?$/;
2699
- ts.addParser({
2700
- id : 'currency',
2701
- is : function( str ) {
2702
- str = ( str || '' ).replace( ts.regex.currencyReplace, '' );
2703
- // test for £$€¤¥¢
2704
- return ts.regex.currencyTest.test( str );
2705
- },
2706
- format : function( str, table ) {
2707
- var num = ts.formatFloat( ( str || '' ).replace( ts.regex.nondigit, '' ), table );
2708
- return str && typeof num === 'number' ? num :
2709
- str ? $.trim( str && table.config.ignoreCase ? str.toLocaleLowerCase() : str ) : str;
2710
- },
2711
- type : 'numeric'
2712
- });
2713
-
2714
- // too many protocols to add them all https://en.wikipedia.org/wiki/URI_scheme
2715
- // now, this regex can be updated before initialization
2716
- ts.regex.urlProtocolTest = /^(https?|ftp|file):\/\//;
2717
- ts.regex.urlProtocolReplace = /(https?|ftp|file):\/\/(www\.)?/;
2718
- ts.addParser({
2719
- id : 'url',
2720
- is : function( str ) {
2721
- return ts.regex.urlProtocolTest.test( str );
2722
- },
2723
- format : function( str ) {
2724
- return str ? $.trim( str.replace( ts.regex.urlProtocolReplace, '' ) ) : str;
2725
- },
2726
- type : 'text'
2727
- });
2728
-
2729
- ts.regex.dash = /-/g;
2730
- ts.regex.isoDate = /^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}/;
2731
- ts.addParser({
2732
- id : 'isoDate',
2733
- is : function( str ) {
2734
- return ts.regex.isoDate.test( str );
2735
- },
2736
- format : function( str ) {
2737
- var date = str ? new Date( str.replace( ts.regex.dash, '/' ) ) : str;
2738
- return date instanceof Date && isFinite( date ) ? date.getTime() : str;
2739
- },
2740
- type : 'numeric'
2741
- });
2742
-
2743
- ts.regex.percent = /%/g;
2744
- ts.regex.percentTest = /(\d\s*?%|%\s*?\d)/;
2745
- ts.addParser({
2746
- id : 'percent',
2747
- is : function( str ) {
2748
- return ts.regex.percentTest.test( str ) && str.length < 15;
2749
- },
2750
- format : function( str, table ) {
2751
- return str ? ts.formatFloat( str.replace( ts.regex.percent, '' ), table ) : str;
2752
- },
2753
- type : 'numeric'
2754
- });
2755
-
2756
- // added image parser to core v2.17.9
2757
- ts.addParser({
2758
- id : 'image',
2759
- is : function( str, table, node, $node ) {
2760
- return $node.find( 'img' ).length > 0;
2761
- },
2762
- format : function( str, table, cell ) {
2763
- return $( cell ).find( 'img' ).attr( table.config.imgAttr || 'alt' ) || str;
2764
- },
2765
- parsed : true, // filter widget flag
2766
- type : 'text'
2767
- });
2768
-
2769
- ts.regex.dateReplace = /(\S)([AP]M)$/i; // used by usLongDate & time parser
2770
- ts.regex.usLongDateTest1 = /^[A-Z]{3,10}\.?\s+\d{1,2},?\s+(\d{4})(\s+\d{1,2}:\d{2}(:\d{2})?(\s+[AP]M)?)?$/i;
2771
- ts.regex.usLongDateTest2 = /^\d{1,2}\s+[A-Z]{3,10}\s+\d{4}/i;
2772
- ts.addParser({
2773
- id : 'usLongDate',
2774
- is : function( str ) {
2775
- // two digit years are not allowed cross-browser
2776
- // Jan 01, 2013 12:34:56 PM or 01 Jan 2013
2777
- return ts.regex.usLongDateTest1.test( str ) || ts.regex.usLongDateTest2.test( str );
2778
- },
2779
- format : function( str ) {
2780
- var date = str ? new Date( str.replace( ts.regex.dateReplace, '$1 $2' ) ) : str;
2781
- return date instanceof Date && isFinite( date ) ? date.getTime() : str;
2782
- },
2783
- type : 'numeric'
2784
- });
2785
-
2786
- // testing for ##-##-#### or ####-##-##, so it's not perfect; time can be included
2787
- ts.regex.shortDateTest = /(^\d{1,2}[\/\s]\d{1,2}[\/\s]\d{4})|(^\d{4}[\/\s]\d{1,2}[\/\s]\d{1,2})/;
2788
- // escaped "-" because JSHint in Firefox was showing it as an error
2789
- ts.regex.shortDateReplace = /[\-.,]/g;
2790
- // XXY covers MDY & DMY formats
2791
- ts.regex.shortDateXXY = /(\d{1,2})[\/\s](\d{1,2})[\/\s](\d{4})/;
2792
- ts.regex.shortDateYMD = /(\d{4})[\/\s](\d{1,2})[\/\s](\d{1,2})/;
2793
- ts.convertFormat = function( dateString, format ) {
2794
- dateString = ( dateString || '' )
2795
- .replace( ts.regex.spaces, ' ' )
2796
- .replace( ts.regex.shortDateReplace, '/' );
2797
- if ( format === 'mmddyyyy' ) {
2798
- dateString = dateString.replace( ts.regex.shortDateXXY, '$3/$1/$2' );
2799
- } else if ( format === 'ddmmyyyy' ) {
2800
- dateString = dateString.replace( ts.regex.shortDateXXY, '$3/$2/$1' );
2801
- } else if ( format === 'yyyymmdd' ) {
2802
- dateString = dateString.replace( ts.regex.shortDateYMD, '$1/$2/$3' );
2803
- }
2804
- var date = new Date( dateString );
2805
- return date instanceof Date && isFinite( date ) ? date.getTime() : '';
2806
- };
2807
-
2808
- ts.addParser({
2809
- id : 'shortDate', // 'mmddyyyy', 'ddmmyyyy' or 'yyyymmdd'
2810
- is : function( str ) {
2811
- str = ( str || '' ).replace( ts.regex.spaces, ' ' ).replace( ts.regex.shortDateReplace, '/' );
2812
- return ts.regex.shortDateTest.test( str );
2813
- },
2814
- format : function( str, table, cell, cellIndex ) {
2815
- if ( str ) {
2816
- var c = table.config,
2817
- $header = c.$headerIndexed[ cellIndex ],
2818
- format = $header.length && $header.data( 'dateFormat' ) ||
2819
- ts.getData( $header, ts.getColumnData( table, c.headers, cellIndex ), 'dateFormat' ) ||
2820
- c.dateFormat;
2821
- // save format because getData can be slow...
2822
- if ( $header.length ) {
2823
- $header.data( 'dateFormat', format );
2824
- }
2825
- return ts.convertFormat( str, format ) || str;
2826
- }
2827
- return str;
2828
- },
2829
- type : 'numeric'
2830
- });
2831
-
2832
- // match 24 hour time & 12 hours time + am/pm - see http://regexr.com/3c3tk
2833
- ts.regex.timeTest = /^(0?[1-9]|1[0-2]):([0-5]\d)(\s[AP]M)$|^((?:[01]\d|[2][0-4]):[0-5]\d)$/i;
2834
- ts.regex.timeMatch = /(0?[1-9]|1[0-2]):([0-5]\d)(\s[AP]M)|((?:[01]\d|[2][0-4]):[0-5]\d)/i;
2835
- ts.addParser({
2836
- id : 'time',
2837
- is : function( str ) {
2838
- return ts.regex.timeTest.test( str );
2839
- },
2840
- format : function( str ) {
2841
- // isolate time... ignore month, day and year
2842
- var temp,
2843
- timePart = ( str || '' ).match( ts.regex.timeMatch ),
2844
- orig = new Date( str ),
2845
- // no time component? default to 00:00 by leaving it out, but only if str is defined
2846
- time = str && ( timePart !== null ? timePart[ 0 ] : '00:00 AM' ),
2847
- date = time ? new Date( '2000/01/01 ' + time.replace( ts.regex.dateReplace, '$1 $2' ) ) : time;
2848
- if ( date instanceof Date && isFinite( date ) ) {
2849
- temp = orig instanceof Date && isFinite( orig ) ? orig.getTime() : 0;
2850
- // if original string was a valid date, add it to the decimal so the column sorts in some kind of order
2851
- // luckily new Date() ignores the decimals
2852
- return temp ? parseFloat( date.getTime() + '.' + orig.getTime() ) : date.getTime();
2853
- }
2854
- return str;
2855
- },
2856
- type : 'numeric'
2857
- });
2858
-
2859
- ts.addParser({
2860
- id : 'metadata',
2861
- is : function() {
2862
- return false;
2863
- },
2864
- format : function( str, table, cell ) {
2865
- var c = table.config,
2866
- p = ( !c.parserMetadataName ) ? 'sortValue' : c.parserMetadataName;
2867
- return $( cell ).metadata()[ p ];
2868
- },
2869
- type : 'numeric'
2870
- });
2871
-
2872
- /*
2873
- ██████ ██████ █████▄ █████▄ ▄████▄
2874
- ▄█▀ ██▄▄ ██▄▄██ ██▄▄██ ██▄▄██
2875
- ▄█▀ ██▀▀ ██▀▀██ ██▀▀█ ██▀▀██
2876
- ██████ ██████ █████▀ ██ ██ ██ ██
2877
- */
2878
- // add default widgets
2879
- ts.addWidget({
2880
- id : 'zebra',
2881
- priority : 90,
2882
- format : function( table, c, wo ) {
2883
- var $visibleRows, $row, count, isEven, tbodyIndex, rowIndex, len,
2884
- child = new RegExp( c.cssChildRow, 'i' ),
2885
- $tbodies = c.$tbodies.add( $( c.namespace + '_extra_table' ).children( 'tbody:not(.' + c.cssInfoBlock + ')' ) );
2886
- for ( tbodyIndex = 0; tbodyIndex < $tbodies.length; tbodyIndex++ ) {
2887
- // loop through the visible rows
2888
- count = 0;
2889
- $visibleRows = $tbodies.eq( tbodyIndex ).children( 'tr:visible' ).not( c.selectorRemove );
2890
- len = $visibleRows.length;
2891
- for ( rowIndex = 0; rowIndex < len; rowIndex++ ) {
2892
- $row = $visibleRows.eq( rowIndex );
2893
- // style child rows the same way the parent row was styled
2894
- if ( !child.test( $row[ 0 ].className ) ) { count++; }
2895
- isEven = ( count % 2 === 0 );
2896
- $row
2897
- .removeClass( wo.zebra[ isEven ? 1 : 0 ] )
2898
- .addClass( wo.zebra[ isEven ? 0 : 1 ] );
2899
- }
2900
- }
2901
- },
2902
- remove : function( table, c, wo, refreshing ) {
2903
- if ( refreshing ) { return; }
2904
- var tbodyIndex, $tbody,
2905
- $tbodies = c.$tbodies,
2906
- toRemove = ( wo.zebra || [ 'even', 'odd' ] ).join( ' ' );
2907
- for ( tbodyIndex = 0; tbodyIndex < $tbodies.length; tbodyIndex++ ) {
2908
- $tbody = ts.processTbody( table, $tbodies.eq( tbodyIndex ), true ); // remove tbody
2909
- $tbody.children().removeClass( toRemove );
2910
- ts.processTbody( table, $tbody, false ); // restore tbody
2911
- }
2912
- }
2913
- });
2914
-
2915
- })( jQuery );
2916
  return jQuery.tablesorter;}));
1
  (function(factory){if (typeof define === 'function' && define.amd){define(['jquery'], factory);} else if (typeof module === 'object' && typeof module.exports === 'object'){module.exports = factory(require('jquery'));} else {factory(jQuery);}}(function(jQuery){
2
+ /*! TableSorter (FORK) v2.31.3 *//*
3
+ * Client-side table sorting with ease!
4
+ * @requires jQuery v1.2.6+
5
+ *
6
+ * Copyright (c) 2007 Christian Bach
7
+ * fork maintained by Rob Garrison
8
+ *
9
+ * Examples and original docs at: http://tablesorter.com
10
+ * Dual licensed under the MIT and GPL licenses:
11
+ * http://www.opensource.org/licenses/mit-license.php
12
+ * http://www.gnu.org/licenses/gpl.html
13
+ *
14
+ * @type jQuery
15
+ * @name tablesorter (FORK)
16
+ * @cat Plugins/Tablesorter
17
+ * @author Christian Bach - christian.bach@polyester.se
18
+ * @contributor Rob Garrison - https://github.com/Mottie/tablesorter
19
+ * @docs (fork) - https://mottie.github.io/tablesorter/docs/
20
+ */
21
+ /*jshint browser:true, jquery:true, unused:false, expr: true */
22
+ ;( function( $ ) {
23
+ 'use strict';
24
+ var ts = $.tablesorter = {
25
+
26
+ version : '2.31.3',
27
+
28
+ parsers : [],
29
+ widgets : [],
30
+ defaults : {
31
+
32
+ // *** appearance
33
+ theme : 'default', // adds tablesorter-{theme} to the table for styling
34
+ widthFixed : false, // adds colgroup to fix widths of columns
35
+ showProcessing : false, // show an indeterminate timer icon in the header when the table is sorted or filtered.
36
+
37
+ headerTemplate : '{content}',// header layout template (HTML ok); {content} = innerHTML, {icon} = <i/> // class from cssIcon
38
+ onRenderTemplate : null, // function( index, template ) { return template; }, // template is a string
39
+ onRenderHeader : null, // function( index ) {}, // nothing to return
40
+
41
+ // *** functionality
42
+ cancelSelection : true, // prevent text selection in the header
43
+ tabIndex : true, // add tabindex to header for keyboard accessibility
44
+ dateFormat : 'mmddyyyy', // other options: 'ddmmyyy' or 'yyyymmdd'
45
+ sortMultiSortKey : 'shiftKey', // key used to select additional columns
46
+ sortResetKey : 'ctrlKey', // key used to remove sorting on a column
47
+ usNumberFormat : true, // false for German '1.234.567,89' or French '1 234 567,89'
48
+ delayInit : false, // if false, the parsed table contents will not update until the first sort
49
+ serverSideSorting: false, // if true, server-side sorting should be performed because client-side sorting will be disabled, but the ui and events will still be used.
50
+ resort : true, // default setting to trigger a resort after an 'update', 'addRows', 'updateCell', etc has completed
51
+
52
+ // *** sort options
53
+ headers : {}, // set sorter, string, empty, locked order, sortInitialOrder, filter, etc.
54
+ ignoreCase : true, // ignore case while sorting
55
+ sortForce : null, // column(s) first sorted; always applied
56
+ sortList : [], // Initial sort order; applied initially; updated when manually sorted
57
+ sortAppend : null, // column(s) sorted last; always applied
58
+ sortStable : false, // when sorting two rows with exactly the same content, the original sort order is maintained
59
+
60
+ sortInitialOrder : 'asc', // sort direction on first click
61
+ sortLocaleCompare: false, // replace equivalent character (accented characters)
62
+ sortReset : false, // third click on the header will reset column to default - unsorted
63
+ sortRestart : false, // restart sort to 'sortInitialOrder' when clicking on previously unsorted columns
64
+
65
+ emptyTo : 'bottom', // sort empty cell to bottom, top, none, zero, emptyMax, emptyMin
66
+ stringTo : 'max', // sort strings in numerical column as max, min, top, bottom, zero
67
+ duplicateSpan : true, // colspan cells in the tbody will have duplicated content in the cache for each spanned column
68
+ textExtraction : 'basic', // text extraction method/function - function( node, table, cellIndex ) {}
69
+ textAttribute : 'data-text',// data-attribute that contains alternate cell text (used in default textExtraction function)
70
+ textSorter : null, // choose overall or specific column sorter function( a, b, direction, table, columnIndex ) [alt: ts.sortText]
71
+ numberSorter : null, // choose overall numeric sorter function( a, b, direction, maxColumnValue )
72
+
73
+ // *** widget options
74
+ initWidgets : true, // apply widgets on tablesorter initialization
75
+ widgetClass : 'widget-{name}', // table class name template to match to include a widget
76
+ widgets : [], // method to add widgets, e.g. widgets: ['zebra']
77
+ widgetOptions : {
78
+ zebra : [ 'even', 'odd' ] // zebra widget alternating row class names
79
+ },
80
+
81
+ // *** callbacks
82
+ initialized : null, // function( table ) {},
83
+
84
+ // *** extra css class names
85
+ tableClass : '',
86
+ cssAsc : '',
87
+ cssDesc : '',
88
+ cssNone : '',
89
+ cssHeader : '',
90
+ cssHeaderRow : '',
91
+ cssProcessing : '', // processing icon applied to header during sort/filter
92
+
93
+ cssChildRow : 'tablesorter-childRow', // class name indiciating that a row is to be attached to its parent
94
+ cssInfoBlock : 'tablesorter-infoOnly', // don't sort tbody with this class name (only one class name allowed here!)
95
+ cssNoSort : 'tablesorter-noSort', // class name added to element inside header; clicking on it won't cause a sort
96
+ cssIgnoreRow : 'tablesorter-ignoreRow',// header row to ignore; cells within this row will not be added to c.$headers
97
+
98
+ cssIcon : 'tablesorter-icon', // if this class does not exist, the {icon} will not be added from the headerTemplate
99
+ cssIconNone : '', // class name added to the icon when there is no column sort
100
+ cssIconAsc : '', // class name added to the icon when the column has an ascending sort
101
+ cssIconDesc : '', // class name added to the icon when the column has a descending sort
102
+ cssIconDisabled : '', // class name added to the icon when the column has a disabled sort
103
+
104
+ // *** events
105
+ pointerClick : 'click',
106
+ pointerDown : 'mousedown',
107
+ pointerUp : 'mouseup',
108
+
109
+ // *** selectors
110
+ selectorHeaders : '> thead th, > thead td',
111
+ selectorSort : 'th, td', // jQuery selector of content within selectorHeaders that is clickable to trigger a sort
112
+ selectorRemove : '.remove-me',
113
+
114
+ // *** advanced
115
+ debug : false,
116
+
117
+ // *** Internal variables
118
+ headerList: [],
119
+ empties: {},
120
+ strings: {},
121
+ parsers: [],
122
+
123
+ // *** parser options for validator; values must be falsy!
124
+ globalize: 0,
125
+ imgAttr: 0
126
+
127
+ // removed: widgetZebra: { css: ['even', 'odd'] }
128
+
129
+ },
130
+
131
+ // internal css classes - these will ALWAYS be added to
132
+ // the table and MUST only contain one class name - fixes #381
133
+ css : {
134
+ table : 'tablesorter',
135
+ cssHasChild: 'tablesorter-hasChildRow',
136
+ childRow : 'tablesorter-childRow',
137
+ colgroup : 'tablesorter-colgroup',
138
+ header : 'tablesorter-header',
139
+ headerRow : 'tablesorter-headerRow',
140
+ headerIn : 'tablesorter-header-inner',
141
+ icon : 'tablesorter-icon',
142
+ processing : 'tablesorter-processing',
143
+ sortAsc : 'tablesorter-headerAsc',
144
+ sortDesc : 'tablesorter-headerDesc',
145
+ sortNone : 'tablesorter-headerUnSorted'
146
+ },
147
+
148
+ // labels applied to sortable headers for accessibility (aria) support
149
+ language : {
150
+ sortAsc : 'Ascending sort applied, ',
151
+ sortDesc : 'Descending sort applied, ',
152
+ sortNone : 'No sort applied, ',
153
+ sortDisabled : 'sorting is disabled',
154
+ nextAsc : 'activate to apply an ascending sort',
155
+ nextDesc : 'activate to apply a descending sort',
156
+ nextNone : 'activate to remove the sort'
157
+ },
158
+
159
+ regex : {
160
+ templateContent : /\{content\}/g,
161
+ templateIcon : /\{icon\}/g,
162
+ templateName : /\{name\}/i,
163
+ spaces : /\s+/g,
164
+ nonWord : /\W/g,
165
+ formElements : /(input|select|button|textarea)/i,
166
+
167
+ // *** sort functions ***
168
+ // regex used in natural sort
169
+ // chunk/tokenize numbers & letters
170
+ chunk : /(^([+\-]?(?:\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?)?$|^0x[0-9a-f]+$|\d+)/gi,
171
+ // replace chunks @ ends
172
+ chunks : /(^\\0|\\0$)/,
173
+ hex : /^0x[0-9a-f]+$/i,
174
+
175
+ // *** formatFloat ***
176
+ comma : /,/g,
177
+ digitNonUS : /[\s|\.]/g,
178
+ digitNegativeTest : /^\s*\([.\d]+\)/,
179
+ digitNegativeReplace : /^\s*\(([.\d]+)\)/,
180
+
181
+ // *** isDigit ***
182
+ digitTest : /^[\-+(]?\d+[)]?$/,
183
+ digitReplace : /[,.'"\s]/g
184
+
185
+ },
186
+
187
+ // digit sort, text location
188
+ string : {
189
+ max : 1,
190
+ min : -1,
191
+ emptymin : 1,
192
+ emptymax : -1,
193
+ zero : 0,
194
+ none : 0,
195
+ 'null' : 0,
196
+ top : true,
197
+ bottom : false
198
+ },
199
+
200
+ keyCodes : {
201
+ enter : 13
202
+ },
203
+
204
+ // placeholder date parser data (globalize)
205
+ dates : {},
206
+
207
+ // These methods can be applied on table.config instance
208
+ instanceMethods : {},
209
+
210
+ /*
211
+ ▄█████ ██████ ██████ ██ ██ █████▄
212
+ ▀█▄ ██▄▄ ██ ██ ██ ██▄▄██
213
+ ▀█▄ ██▀▀ ██ ██ ██ ██▀▀▀
214
+ █████▀ ██████ ██ ▀████▀ ██
215
+ */
216
+
217
+ setup : function( table, c ) {
218
+ // if no thead or tbody, or tablesorter is already present, quit
219
+ if ( !table || !table.tHead || table.tBodies.length === 0 || table.hasInitialized === true ) {
220
+ if ( ts.debug(c, 'core') ) {
221
+ if ( table.hasInitialized ) {
222
+ console.warn( 'Stopping initialization. Tablesorter has already been initialized' );
223
+ } else {
224
+ console.error( 'Stopping initialization! No table, thead or tbody', table );
225
+ }
226
+ }
227
+ return;
228
+ }
229
+
230
+ var tmp = '',
231
+ $table = $( table ),
232
+ meta = $.metadata;
233
+ // initialization flag
234
+ table.hasInitialized = false;
235
+ // table is being processed flag
236
+ table.isProcessing = true;
237
+ // make sure to store the config object
238
+ table.config = c;
239
+ // save the settings where they read
240
+ $.data( table, 'tablesorter', c );
241
+ if ( ts.debug(c, 'core') ) {
242
+ console[ console.group ? 'group' : 'log' ]( 'Initializing tablesorter v' + ts.version );
243
+ $.data( table, 'startoveralltimer', new Date() );
244
+ }
245
+
246
+ // removing this in version 3 (only supports jQuery 1.7+)
247
+ c.supportsDataObject = ( function( version ) {
248
+ version[ 0 ] = parseInt( version[ 0 ], 10 );
249
+ return ( version[ 0 ] > 1 ) || ( version[ 0 ] === 1 && parseInt( version[ 1 ], 10 ) >= 4 );
250
+ })( $.fn.jquery.split( '.' ) );
251
+ // ensure case insensitivity
252
+ c.emptyTo = c.emptyTo.toLowerCase();
253
+ c.stringTo = c.stringTo.toLowerCase();
254
+ c.last = { sortList : [], clickedIndex : -1 };
255
+ // add table theme class only if there isn't already one there
256
+ if ( !/tablesorter\-/.test( $table.attr( 'class' ) ) ) {
257
+ tmp = ( c.theme !== '' ? ' tablesorter-' + c.theme : '' );
258
+ }
259
+
260
+ // give the table a unique id, which will be used in namespace binding
261
+ if ( !c.namespace ) {
262
+ c.namespace = '.tablesorter' + Math.random().toString( 16 ).slice( 2 );
263
+ } else {
264
+ // make sure namespace starts with a period & doesn't have weird characters
265
+ c.namespace = '.' + c.namespace.replace( ts.regex.nonWord, '' );
266
+ }
267
+
268
+ c.table = table;
269
+ c.$table = $table
270
+ // add namespace to table to allow bindings on extra elements to target
271
+ // the parent table (e.g. parser-input-select)
272
+ .addClass( ts.css.table + ' ' + c.tableClass + tmp + ' ' + c.namespace.slice(1) )
273
+ .attr( 'role', 'grid' );
274
+ c.$headers = $table.find( c.selectorHeaders );
275
+
276
+ c.$table.children().children( 'tr' ).attr( 'role', 'row' );
277
+ c.$tbodies = $table.children( 'tbody:not(.' + c.cssInfoBlock + ')' ).attr({
278
+ 'aria-live' : 'polite',
279
+ 'aria-relevant' : 'all'
280
+ });
281
+ if ( c.$table.children( 'caption' ).length ) {
282
+ tmp = c.$table.children( 'caption' )[ 0 ];
283
+ if ( !tmp.id ) { tmp.id = c.namespace.slice( 1 ) + 'caption'; }
284
+ c.$table.attr( 'aria-labelledby', tmp.id );
285
+ }
286
+ c.widgetInit = {}; // keep a list of initialized widgets
287
+ // change textExtraction via data-attribute
288
+ c.textExtraction = c.$table.attr( 'data-text-extraction' ) || c.textExtraction || 'basic';
289
+ // build headers
290
+ ts.buildHeaders( c );
291
+ // fixate columns if the users supplies the fixedWidth option
292
+ // do this after theme has been applied
293
+ ts.fixColumnWidth( table );
294
+ // add widgets from class name
295
+ ts.addWidgetFromClass( table );
296
+ // add widget options before parsing (e.g. grouping widget has parser settings)
297
+ ts.applyWidgetOptions( table );
298
+ // try to auto detect column type, and store in tables config
299
+ ts.setupParsers( c );
300
+ // start total row count at zero
301
+ c.totalRows = 0;
302
+ // only validate options while debugging. See #1528
303
+ if (c.debug) {
304
+ ts.validateOptions( c );
305
+ }
306
+ // build the cache for the tbody cells
307
+ // delayInit will delay building the cache until the user starts a sort
308
+ if ( !c.delayInit ) { ts.buildCache( c ); }
309
+ // bind all header events and methods
310
+ ts.bindEvents( table, c.$headers, true );
311
+ ts.bindMethods( c );
312
+ // get sort list from jQuery data or metadata
313
+ // in jQuery < 1.4, an error occurs when calling $table.data()
314
+ if ( c.supportsDataObject && typeof $table.data().sortlist !== 'undefined' ) {
315
+ c.sortList = $table.data().sortlist;
316
+ } else if ( meta && ( $table.metadata() && $table.metadata().sortlist ) ) {
317
+ c.sortList = $table.metadata().sortlist;
318
+ }
319
+ // apply widget init code
320
+ ts.applyWidget( table, true );
321
+ // if user has supplied a sort list to constructor
322
+ if ( c.sortList.length > 0 ) {
323
+ // save sortList before any sortAppend is added
324
+ c.last.sortList = c.sortList;
325
+ ts.sortOn( c, c.sortList, {}, !c.initWidgets );
326
+ } else {
327
+ ts.setHeadersCss( c );
328
+ if ( c.initWidgets ) {
329
+ // apply widget format
330
+ ts.applyWidget( table, false );
331
+ }
332
+ }
333
+
334
+ // show processesing icon
335
+ if ( c.showProcessing ) {
336
+ $table
337
+ .unbind( 'sortBegin' + c.namespace + ' sortEnd' + c.namespace )
338
+ .bind( 'sortBegin' + c.namespace + ' sortEnd' + c.namespace, function( e ) {
339
+ clearTimeout( c.timerProcessing );
340
+ ts.isProcessing( table );
341
+ if ( e.type === 'sortBegin' ) {
342
+ c.timerProcessing = setTimeout( function() {
343
+ ts.isProcessing( table, true );
344
+ }, 500 );
345
+ }
346
+ });
347
+ }
348
+
349
+ // initialized
350
+ table.hasInitialized = true;
351
+ table.isProcessing = false;
352
+ if ( ts.debug(c, 'core') ) {
353
+ console.log( 'Overall initialization time:' + ts.benchmark( $.data( table, 'startoveralltimer' ) ) );
354
+ if ( ts.debug(c, 'core') && console.groupEnd ) { console.groupEnd(); }
355
+ }
356
+ $table.triggerHandler( 'tablesorter-initialized', table );
357
+ if ( typeof c.initialized === 'function' ) {
358
+ c.initialized( table );
359
+ }
360
+ },
361
+
362
+ bindMethods : function( c ) {
363
+ var $table = c.$table,
364
+ namespace = c.namespace,
365
+ events = ( 'sortReset update updateRows updateAll updateHeaders addRows updateCell updateComplete ' +
366
+ 'sorton appendCache updateCache applyWidgetId applyWidgets refreshWidgets destroy mouseup ' +
367
+ 'mouseleave ' ).split( ' ' )
368
+ .join( namespace + ' ' );
369
+ // apply easy methods that trigger bound events
370
+ $table
371
+ .unbind( events.replace( ts.regex.spaces, ' ' ) )
372
+ .bind( 'sortReset' + namespace, function( e, callback ) {
373
+ e.stopPropagation();
374
+ // using this.config to ensure functions are getting a non-cached version of the config
375
+ ts.sortReset( this.config, function( table ) {
376
+ if (table.isApplyingWidgets) {
377
+ // multiple triggers in a row... filterReset, then sortReset - see #1361
378
+ // wait to update widgets
379
+ setTimeout( function() {
380
+ ts.applyWidget( table, '', callback );
381
+ }, 100 );
382
+ } else {
383
+ ts.applyWidget( table, '', callback );
384
+ }
385
+ });
386
+ })
387
+ .bind( 'updateAll' + namespace, function( e, resort, callback ) {
388
+ e.stopPropagation();
389
+ ts.updateAll( this.config, resort, callback );
390
+ })
391
+ .bind( 'update' + namespace + ' updateRows' + namespace, function( e, resort, callback ) {
392
+ e.stopPropagation();
393
+ ts.update( this.config, resort, callback );
394
+ })
395
+ .bind( 'updateHeaders' + namespace, function( e, callback ) {
396
+ e.stopPropagation();
397
+ ts.updateHeaders( this.config, callback );
398
+ })
399
+ .bind( 'updateCell' + namespace, function( e, cell, resort, callback ) {
400
+ e.stopPropagation();
401
+ ts.updateCell( this.config, cell, resort, callback );
402
+ })
403
+ .bind( 'addRows' + namespace, function( e, $row, resort, callback ) {
404
+ e.stopPropagation();
405
+ ts.addRows( this.config, $row, resort, callback );
406
+ })
407
+ .bind( 'updateComplete' + namespace, function() {
408
+ this.isUpdating = false;
409
+ })
410
+ .bind( 'sorton' + namespace, function( e, list, callback, init ) {
411
+ e.stopPropagation();
412
+ ts.sortOn( this.config, list, callback, init );
413
+ })
414
+ .bind( 'appendCache' + namespace, function( e, callback, init ) {
415
+ e.stopPropagation();
416
+ ts.appendCache( this.config, init );
417
+ if ( $.isFunction( callback ) ) {
418
+ callback( this );
419
+ }
420
+ })
421
+ // $tbodies variable is used by the tbody sorting widget
422
+ .bind( 'updateCache' + namespace, function( e, callback, $tbodies ) {
423
+ e.stopPropagation();
424
+ ts.updateCache( this.config, callback, $tbodies );
425
+ })
426
+ .bind( 'applyWidgetId' + namespace, function( e, id ) {
427
+ e.stopPropagation();
428
+ ts.applyWidgetId( this, id );
429
+ })
430
+ .bind( 'applyWidgets' + namespace, function( e, callback ) {
431
+ e.stopPropagation();
432
+ // apply widgets (false = not initializing)
433
+ ts.applyWidget( this, false, callback );
434
+ })
435
+ .bind( 'refreshWidgets' + namespace, function( e, all, dontapply ) {
436
+ e.stopPropagation();
437
+ ts.refreshWidgets( this, all, dontapply );
438
+ })
439
+ .bind( 'removeWidget' + namespace, function( e, name, refreshing ) {
440
+ e.stopPropagation();
441
+ ts.removeWidget( this, name, refreshing );
442
+ })
443
+ .bind( 'destroy' + namespace, function( e, removeClasses, callback ) {
444
+ e.stopPropagation();
445
+ ts.destroy( this, removeClasses, callback );
446
+ })
447
+ .bind( 'resetToLoadState' + namespace, function( e ) {
448
+ e.stopPropagation();
449
+ // remove all widgets
450
+ ts.removeWidget( this, true, false );
451
+ var tmp = $.extend( true, {}, c.originalSettings );
452
+ // restore original settings; this clears out current settings, but does not clear
453
+ // values saved to storage.
454
+ c = $.extend( true, {}, ts.defaults, tmp );
455
+ c.originalSettings = tmp;
456
+ this.hasInitialized = false;
457
+ // setup the entire table again
458
+ ts.setup( this, c );
459
+ });
460
+ },
461
+
462
+ bindEvents : function( table, $headers, core ) {
463
+ table = $( table )[ 0 ];
464
+ var tmp,
465
+ c = table.config,
466
+ namespace = c.namespace,
467
+ downTarget = null;
468
+ if ( core !== true ) {
469
+ $headers.addClass( namespace.slice( 1 ) + '_extra_headers' );
470
+ tmp = ts.getClosest( $headers, 'table' );
471
+ if ( tmp.length && tmp[ 0 ].nodeName === 'TABLE' && tmp[ 0 ] !== table ) {
472
+ $( tmp[ 0 ] ).addClass( namespace.slice( 1 ) + '_extra_table' );
473
+ }
474
+ }
475
+ tmp = ( c.pointerDown + ' ' + c.pointerUp + ' ' + c.pointerClick + ' sort keyup ' )
476
+ .replace( ts.regex.spaces, ' ' )
477
+ .split( ' ' )
478
+ .join( namespace + ' ' );
479
+ // apply event handling to headers and/or additional headers (stickyheaders, scroller, etc)
480
+ $headers
481
+ // http://stackoverflow.com/questions/5312849/jquery-find-self;
482
+ .find( c.selectorSort )
483
+ .add( $headers.filter( c.selectorSort ) )
484
+ .unbind( tmp )
485
+ .bind( tmp, function( e, external ) {
486
+ var $cell, cell, temp,
487
+ $target = $( e.target ),
488
+ // wrap event type in spaces, so the match doesn't trigger on inner words
489
+ type = ' ' + e.type + ' ';
490
+ // only recognize left clicks
491
+ if ( ( ( e.which || e.button ) !== 1 && !type.match( ' ' + c.pointerClick + ' | sort | keyup ' ) ) ||
492
+ // allow pressing enter
493
+ ( type === ' keyup ' && e.which !== ts.keyCodes.enter ) ||
494
+ // allow triggering a click event (e.which is undefined) & ignore physical clicks
495
+ ( type.match( ' ' + c.pointerClick + ' ' ) && typeof e.which !== 'undefined' ) ) {
496
+ return;
497
+ }
498
+ // ignore mouseup if mousedown wasn't on the same target
499
+ if ( type.match( ' ' + c.pointerUp + ' ' ) && downTarget !== e.target && external !== true ) {
500
+ return;
501
+ }
502
+ // set target on mousedown
503
+ if ( type.match( ' ' + c.pointerDown + ' ' ) ) {
504
+ downTarget = e.target;
505
+ // preventDefault needed or jQuery v1.3.2 and older throws an
506
+ // "Uncaught TypeError: handler.apply is not a function" error
507
+ temp = $target.jquery.split( '.' );
508
+ if ( temp[ 0 ] === '1' && temp[ 1 ] < 4 ) { e.preventDefault(); }
509
+ return;
510
+ }
511
+ downTarget = null;
512
+ $cell = ts.getClosest( $( this ), '.' + ts.css.header );
513
+ // prevent sort being triggered on form elements
514
+ if ( ts.regex.formElements.test( e.target.nodeName ) ||
515
+ // nosort class name, or elements within a nosort container
516
+ $target.hasClass( c.cssNoSort ) || $target.parents( '.' + c.cssNoSort ).length > 0 ||
517
+ // disabled cell directly clicked
518
+ $cell.hasClass( 'sorter-false' ) ||
519
+ // elements within a button
520
+ $target.parents( 'button' ).length > 0 ) {
521
+ return !c.cancelSelection;
522
+ }
523
+ if ( c.delayInit && ts.isEmptyObject( c.cache ) ) {
524
+ ts.buildCache( c );
525
+ }
526
+ // use column index from data-attribute or index of current row; fixes #1116
527
+ c.last.clickedIndex = $cell.attr( 'data-column' ) || $cell.index();
528
+ cell = c.$headerIndexed[ c.last.clickedIndex ][0];
529
+ if ( cell && !cell.sortDisabled ) {
530
+ ts.initSort( c, cell, e );
531
+ }
532
+ });
533
+ if ( c.cancelSelection ) {
534
+ // cancel selection
535
+ $headers
536
+ .attr( 'unselectable', 'on' )
537
+ .bind( 'selectstart', false )
538
+ .css({
539
+ 'user-select' : 'none',
540
+ 'MozUserSelect' : 'none' // not needed for jQuery 1.8+
541
+ });
542
+ }
543
+ },
544
+
545
+ buildHeaders : function( c ) {
546
+ var $temp, icon, timer, indx;
547
+ c.headerList = [];
548
+ c.headerContent = [];
549
+ c.sortVars = [];
550
+ if ( ts.debug(c, 'core') ) {
551
+ timer = new Date();
552
+ }
553
+ // children tr in tfoot - see issue #196 & #547
554
+ // don't pass table.config to computeColumnIndex here - widgets (math) pass it to "quickly" index tbody cells
555
+ c.columns = ts.computeColumnIndex( c.$table.children( 'thead, tfoot' ).children( 'tr' ) );
556
+ // add icon if cssIcon option exists
557
+ icon = c.cssIcon ?
558
+ '<i class="' + ( c.cssIcon === ts.css.icon ? ts.css.icon : c.cssIcon + ' ' + ts.css.icon ) + '"></i>' :
559
+ '';
560
+ // redefine c.$headers here in case of an updateAll that replaces or adds an entire header cell - see #683
561
+ c.$headers = $( $.map( c.$table.find( c.selectorHeaders ), function( elem, index ) {
562
+ var configHeaders, header, column, template, tmp,
563
+ $elem = $( elem );
564
+ // ignore cell (don't add it to c.$headers) if row has ignoreRow class
565
+ if ( ts.getClosest( $elem, 'tr' ).hasClass( c.cssIgnoreRow ) ) { return; }
566
+ // transfer data-column to element if not th/td - #1459
567
+ if ( !/(th|td)/i.test( elem.nodeName ) ) {
568
+ tmp = ts.getClosest( $elem, 'th, td' );
569
+ $elem.attr( 'data-column', tmp.attr( 'data-column' ) );
570
+ }
571
+ // make sure to get header cell & not column indexed cell
572
+ configHeaders = ts.getColumnData( c.table, c.headers, index, true );
573
+ // save original header content
574
+ c.headerContent[ index ] = $elem.html();
575
+ // if headerTemplate is empty, don't reformat the header cell
576
+ if ( c.headerTemplate !== '' && !$elem.find( '.' + ts.css.headerIn ).length ) {
577
+ // set up header template
578
+ template = c.headerTemplate
579
+ .replace( ts.regex.templateContent, $elem.html() )
580
+ .replace( ts.regex.templateIcon, $elem.find( '.' + ts.css.icon ).length ? '' : icon );
581
+ if ( c.onRenderTemplate ) {
582
+ header = c.onRenderTemplate.apply( $elem, [ index, template ] );
583
+ // only change t if something is returned
584
+ if ( header && typeof header === 'string' ) {
585
+ template = header;
586
+ }
587
+ }
588
+ $elem.html( '<div class="' + ts.css.headerIn + '">' + template + '</div>' ); // faster than wrapInner
589
+ }
590
+ if ( c.onRenderHeader ) {
591
+ c.onRenderHeader.apply( $elem, [ index, c, c.$table ] );
592
+ }
593
+ column = parseInt( $elem.attr( 'data-column' ), 10 );
594
+ elem.column = column;
595
+ tmp = ts.getOrder( ts.getData( $elem, configHeaders, 'sortInitialOrder' ) || c.sortInitialOrder );
596
+ // this may get updated numerous times if there are multiple rows
597
+ c.sortVars[ column ] = {
598
+ count : -1, // set to -1 because clicking on the header automatically adds one
599
+ order : tmp ?
600
+ ( c.sortReset ? [ 1, 0, 2 ] : [ 1, 0 ] ) : // desc, asc, unsorted
601
+ ( c.sortReset ? [ 0, 1, 2 ] : [ 0, 1 ] ), // asc, desc, unsorted
602
+ lockedOrder : false,
603
+ sortedBy : ''
604
+ };
605
+ tmp = ts.getData( $elem, configHeaders, 'lockedOrder' ) || false;
606
+ if ( typeof tmp !== 'undefined' && tmp !== false ) {
607
+ c.sortVars[ column ].lockedOrder = true;
608
+ c.sortVars[ column ].order = ts.getOrder( tmp ) ? [ 1, 1 ] : [ 0, 0 ];
609
+ }
610
+ // add cell to headerList
611
+ c.headerList[ index ] = elem;
612
+ $elem.addClass( ts.css.header + ' ' + c.cssHeader );
613
+ // add to parent in case there are multiple rows
614
+ ts.getClosest( $elem, 'tr' )
615
+ .addClass( ts.css.headerRow + ' ' + c.cssHeaderRow )
616
+ .attr( 'role', 'row' );
617
+ // allow keyboard cursor to focus on element
618
+ if ( c.tabIndex ) {
619
+ $elem.attr( 'tabindex', 0 );
620
+ }
621
+ return elem;
622
+ }) );
623
+ // cache headers per column
624
+ c.$headerIndexed = [];
625
+ for ( indx = 0; indx < c.columns; indx++ ) {
626
+ // colspan in header making a column undefined
627
+ if ( ts.isEmptyObject( c.sortVars[ indx ] ) ) {
628
+ c.sortVars[ indx ] = {};
629
+ }
630
+ // Use c.$headers.parent() in case selectorHeaders doesn't point to the th/td
631
+ $temp = c.$headers.filter( '[data-column="' + indx + '"]' );
632
+ // target sortable column cells, unless there are none, then use non-sortable cells
633
+ // .last() added in jQuery 1.4; use .filter(':last') to maintain compatibility with jQuery v1.2.6
634
+ c.$headerIndexed[ indx ] = $temp.length ?
635
+ $temp.not( '.sorter-false' ).length ?
636
+ $temp.not( '.sorter-false' ).filter( ':last' ) :
637
+ $temp.filter( ':last' ) :
638
+ $();
639
+ }
640
+ c.$table.find( c.selectorHeaders ).attr({
641
+ scope: 'col',
642
+ role : 'columnheader'
643
+ });
644
+ // enable/disable sorting
645
+ ts.updateHeader( c );
646
+ if ( ts.debug(c, 'core') ) {
647
+ console.log( 'Built headers:' + ts.benchmark( timer ) );
648
+ console.log( c.$headers );
649
+ }
650
+ },
651
+
652
+ // Use it to add a set of methods to table.config which will be available for all tables.
653
+ // This should be done before table initialization
654
+ addInstanceMethods : function( methods ) {
655
+ $.extend( ts.instanceMethods, methods );
656
+ },
657
+
658
+ /*
659
+ █████▄ ▄████▄ █████▄ ▄█████ ██████ █████▄ ▄█████
660
+ ██▄▄██ ██▄▄██ ██▄▄██ ▀█▄ ██▄▄ ██▄▄██ ▀█▄
661
+ ██▀▀▀ ██▀▀██ ██▀██ ▀█▄ ██▀▀ ██▀██ ▀█▄
662
+ ██ ██ ██ ██ ██ █████▀ ██████ ██ ██ █████▀
663
+ */
664
+ setupParsers : function( c, $tbodies ) {
665
+ var rows, list, span, max, colIndex, indx, header, configHeaders,
666
+ noParser, parser, extractor, time, tbody, len,
667
+ table = c.table,
668
+ tbodyIndex = 0,
669
+ debug = ts.debug(c, 'core'),
670
+ debugOutput = {};
671
+ // update table bodies in case we start with an empty table
672
+ c.$tbodies = c.$table.children( 'tbody:not(.' + c.cssInfoBlock + ')' );
673
+ tbody = typeof $tbodies === 'undefined' ? c.$tbodies : $tbodies;
674
+ len = tbody.length;
675
+ if ( len === 0 ) {
676
+ return debug ? console.warn( 'Warning: *Empty table!* Not building a parser cache' ) : '';
677
+ } else if ( debug ) {
678
+ time = new Date();
679
+ console[ console.group ? 'group' : 'log' ]( 'Detecting parsers for each column' );
680
+ }
681
+ list = {
682
+ extractors: [],
683
+ parsers: []
684
+ };
685
+ while ( tbodyIndex < len ) {
686
+ rows = tbody[ tbodyIndex ].rows;
687
+ if ( rows.length ) {
688
+ colIndex = 0;
689
+ max = c.columns;
690
+ for ( indx = 0; indx < max; indx++ ) {
691
+ header = c.$headerIndexed[ colIndex ];
692
+ if ( header && header.length ) {
693
+ // get column indexed table cell; adding true parameter fixes #1362 but
694
+ // it would break backwards compatibility...
695
+ configHeaders = ts.getColumnData( table, c.headers, colIndex ); // , true );
696
+ // get column parser/extractor
697
+ extractor = ts.getParserById( ts.getData( header, configHeaders, 'extractor' ) );
698
+ parser = ts.getParserById( ts.getData( header, configHeaders, 'sorter' ) );
699
+ noParser = ts.getData( header, configHeaders, 'parser' ) === 'false';
700
+ // empty cells behaviour - keeping emptyToBottom for backwards compatibility
701
+ c.empties[colIndex] = (
702
+ ts.getData( header, configHeaders, 'empty' ) ||
703
+ c.emptyTo || ( c.emptyToBottom ? 'bottom' : 'top' ) ).toLowerCase();
704
+ // text strings behaviour in numerical sorts
705
+ c.strings[colIndex] = (
706
+ ts.getData( header, configHeaders, 'string' ) ||
707
+ c.stringTo ||
708
+ 'max' ).toLowerCase();
709
+ if ( noParser ) {
710
+ parser = ts.getParserById( 'no-parser' );
711
+ }
712
+ if ( !extractor ) {
713
+ // For now, maybe detect someday
714
+ extractor = false;
715
+ }
716
+ if ( !parser ) {
717
+ parser = ts.detectParserForColumn( c, rows, -1, colIndex );
718
+ }
719
+ if ( debug ) {
720
+ debugOutput[ '(' + colIndex + ') ' + header.text() ] = {
721
+ parser : parser.id,
722
+ extractor : extractor ? extractor.id : 'none',
723
+ string : c.strings[ colIndex ],
724
+ empty : c.empties[ colIndex ]
725
+ };
726
+ }
727
+ list.parsers[ colIndex ] = parser;
728
+ list.extractors[ colIndex ] = extractor;
729
+ span = header[ 0 ].colSpan - 1;
730
+ if ( span > 0 ) {
731
+ colIndex += span;
732
+ max += span;
733
+ while ( span + 1 > 0 ) {
734
+ // set colspan columns to use the same parsers & extractors
735
+ list.parsers[ colIndex - span ] = parser;
736
+ list.extractors[ colIndex - span ] = extractor;
737
+ span--;
738
+ }
739
+ }
740
+ }
741
+ colIndex++;
742
+ }
743
+ }
744
+ tbodyIndex += ( list.parsers.length ) ? len : 1;
745
+ }
746
+ if ( debug ) {
747
+ if ( !ts.isEmptyObject( debugOutput ) ) {
748
+ console[ console.table ? 'table' : 'log' ]( debugOutput );
749
+ } else {
750
+ console.warn( ' No parsers detected!' );
751
+ }
752
+ console.log( 'Completed detecting parsers' + ts.benchmark( time ) );
753
+ if ( console.groupEnd ) { console.groupEnd(); }
754
+ }
755
+ c.parsers = list.parsers;
756
+ c.extractors = list.extractors;
757
+ },
758
+
759
+ addParser : function( parser ) {
760
+ var indx,
761
+ len = ts.parsers.length,
762
+ add = true;
763
+ for ( indx = 0; indx < len; indx++ ) {
764
+ if ( ts.parsers[ indx ].id.toLowerCase() === parser.id.toLowerCase() ) {
765
+ add = false;
766
+ }
767
+ }
768
+ if ( add ) {
769
+ ts.parsers[ ts.parsers.length ] = parser;
770
+ }
771
+ },
772
+
773
+ getParserById : function( name ) {
774
+ /*jshint eqeqeq:false */ // eslint-disable-next-line eqeqeq
775
+ if ( name == 'false' ) { return false; }
776
+ var indx,
777
+ len = ts.parsers.length;
778
+ for ( indx = 0; indx < len; indx++ ) {
779
+ if ( ts.parsers[ indx ].id.toLowerCase() === ( name.toString() ).toLowerCase() ) {
780
+ return ts.parsers[ indx ];
781
+ }
782
+ }
783
+ return false;
784
+ },
785
+
786
+ detectParserForColumn : function( c, rows, rowIndex, cellIndex ) {
787
+ var cur, $node, row,
788
+ indx = ts.parsers.length,
789
+ node = false,
790
+ nodeValue = '',
791
+ debug = ts.debug(c, 'core'),
792
+ keepLooking = true;
793
+ while ( nodeValue === '' && keepLooking ) {
794
+ rowIndex++;
795
+ row = rows[ rowIndex ];
796
+ // stop looking after 50 empty rows
797
+ if ( row && rowIndex < 50 ) {
798
+ if ( row.className.indexOf( ts.cssIgnoreRow ) < 0 ) {
799
+ node = rows[ rowIndex ].cells[ cellIndex ];
800
+ nodeValue = ts.getElementText( c, node, cellIndex );
801
+ $node = $( node );
802
+ if ( debug ) {
803
+ console.log( 'Checking if value was empty on row ' + rowIndex + ', column: ' +
804
+ cellIndex + ': "' + nodeValue + '"' );
805
+ }
806
+ }
807
+ } else {
808
+ keepLooking = false;
809
+ }
810
+ }
811
+ while ( --indx >= 0 ) {
812
+ cur = ts.parsers[ indx ];
813
+ // ignore the default text parser because it will always be true
814
+ if ( cur && cur.id !== 'text' && cur.is && cur.is( nodeValue, c.table, node, $node ) ) {
815
+ return cur;
816
+ }
817
+ }
818
+ // nothing found, return the generic parser (text)
819
+ return ts.getParserById( 'text' );
820
+ },
821
+
822
+ getElementText : function( c, node, cellIndex ) {
823
+ if ( !node ) { return ''; }
824
+ var tmp,
825
+ extract = c.textExtraction || '',
826
+ // node could be a jquery object
827
+ // http://jsperf.com/jquery-vs-instanceof-jquery/2
828
+ $node = node.jquery ? node : $( node );
829
+ if ( typeof extract === 'string' ) {
830
+ // check data-attribute first when set to 'basic'; don't use node.innerText - it's really slow!
831
+ // http://www.kellegous.com/j/2013/02/27/innertext-vs-textcontent/
832
+ if ( extract === 'basic' && typeof ( tmp = $node.attr( c.textAttribute ) ) !== 'undefined' ) {
833
+ return $.trim( tmp );
834
+ }
835
+ return $.trim( node.textContent || $node.text() );
836
+ } else {
837
+ if ( typeof extract === 'function' ) {
838
+ return $.trim( extract( $node[ 0 ], c.table, cellIndex ) );
839
+ } else if ( typeof ( tmp = ts.getColumnData( c.table, extract, cellIndex ) ) === 'function' ) {
840
+ return $.trim( tmp( $node[ 0 ], c.table, cellIndex ) );
841
+ }
842
+ }
843
+ // fallback
844
+ return $.trim( $node[ 0 ].textContent || $node.text() );
845
+ },
846
+
847
+ // centralized function to extract/parse cell contents
848
+ getParsedText : function( c, cell, colIndex, txt ) {
849
+ if ( typeof txt === 'undefined' ) {
850
+ txt = ts.getElementText( c, cell, colIndex );
851
+ }
852
+ // if no parser, make sure to return the txt
853
+ var val = '' + txt,
854
+ parser = c.parsers[ colIndex ],
855
+ extractor = c.extractors[ colIndex ];
856
+ if ( parser ) {
857
+ // do extract before parsing, if there is one
858
+ if ( extractor && typeof extractor.format === 'function' ) {
859
+ txt = extractor.format( txt, c.table, cell, colIndex );
860
+ }
861
+ // allow parsing if the string is empty, previously parsing would change it to zero,
862
+ // in case the parser needs to extract data from the table cell attributes
863
+ val = parser.id === 'no-parser' ? '' :
864
+ // make sure txt is a string (extractor may have converted it)
865
+ parser.format( '' + txt, c.table, cell, colIndex );
866
+ if ( c.ignoreCase && typeof val === 'string' ) {
867
+ val = val.toLowerCase();
868
+ }
869
+ }
870
+ return val;
871
+ },
872
+
873
+ /*
874
+ ▄████▄ ▄████▄ ▄████▄ ██ ██ ██████
875
+ ██ ▀▀ ██▄▄██ ██ ▀▀ ██▄▄██ ██▄▄
876
+ ██ ▄▄ ██▀▀██ ██ ▄▄ ██▀▀██ ██▀▀
877
+ ▀████▀ ██ ██ ▀████▀ ██ ██ ██████
878
+ */
879
+ buildCache : function( c, callback, $tbodies ) {
880
+ var cache, val, txt, rowIndex, colIndex, tbodyIndex, $tbody, $row,
881
+ cols, $cells, cell, cacheTime, totalRows, rowData, prevRowData,
882
+ colMax, span, cacheIndex, hasParser, max, len, index,
883
+ table = c.table,
884
+ parsers = c.parsers,
885
+ debug = ts.debug(c, 'core');
886
+ // update tbody variable
887
+ c.$tbodies = c.$table.children( 'tbody:not(.' + c.cssInfoBlock + ')' );
888
+ $tbody = typeof $tbodies === 'undefined' ? c.$tbodies : $tbodies,
889
+ c.cache = {};
890
+ c.totalRows = 0;
891
+ // if no parsers found, return - it's an empty table.
892
+ if ( !parsers ) {
893
+ return debug ? console.warn( 'Warning: *Empty table!* Not building a cache' ) : '';
894
+ }
895
+ if ( debug ) {
896
+ cacheTime = new Date();
897
+ }
898
+ // processing icon
899
+ if ( c.showProcessing ) {
900
+ ts.isProcessing( table, true );
901
+ }
902
+ for ( tbodyIndex = 0; tbodyIndex < $tbody.length; tbodyIndex++ ) {
903
+ colMax = []; // column max value per tbody
904
+ cache = c.cache[ tbodyIndex ] = {
905
+ normalized: [] // array of normalized row data; last entry contains 'rowData' above
906
+ // colMax: # // added at the end
907
+ };
908
+
909
+ totalRows = ( $tbody[ tbodyIndex ] && $tbody[ tbodyIndex ].rows.length ) || 0;
910
+ for ( rowIndex = 0; rowIndex < totalRows; ++rowIndex ) {
911
+ rowData = {
912
+ // order: original row order #
913
+ // $row : jQuery Object[]
914
+ child: [], // child row text (filter widget)
915
+ raw: [] // original row text
916
+ };
917
+ /** Add the table data to main data array */
918
+ $row = $( $tbody[ tbodyIndex ].rows[ rowIndex ] );
919
+ cols = [];
920
+ // ignore "remove-me" rows
921
+ if ( $row.hasClass( c.selectorRemove.slice(1) ) ) {
922
+ continue;
923
+ }
924
+ // if this is a child row, add it to the last row's children and continue to the next row
925
+ // ignore child row class, if it is the first row
926
+ if ( $row.hasClass( c.cssChildRow ) && rowIndex !== 0 ) {
927
+ len = cache.normalized.length - 1;
928
+ prevRowData = cache.normalized[ len ][ c.columns ];
929
+ prevRowData.$row = prevRowData.$row.add( $row );
930
+ // add 'hasChild' class name to parent row
931
+ if ( !$row.prev().hasClass( c.cssChildRow ) ) {
932
+ $row.prev().addClass( ts.css.cssHasChild );
933
+ }
934
+ // save child row content (un-parsed!)
935
+ $cells = $row.children( 'th, td' );
936
+ len = prevRowData.child.length;
937
+ prevRowData.child[ len ] = [];
938
+ // child row content does not account for colspans/rowspans; so indexing may be off
939
+ cacheIndex = 0;
940
+ max = c.columns;
941
+ for ( colIndex = 0; colIndex < max; colIndex++ ) {
942
+ cell = $cells[ colIndex ];
943
+ if ( cell ) {
944
+ prevRowData.child[ len ][ colIndex ] = ts.getParsedText( c, cell, colIndex );
945
+ span = $cells[ colIndex ].colSpan - 1;
946
+ if ( span > 0 ) {
947
+ cacheIndex += span;
948
+ max += span;
949
+ }
950
+ }
951
+ cacheIndex++;
952
+ }
953
+ // go to the next for loop
954
+ continue;
955
+ }
956
+ rowData.$row = $row;
957
+ rowData.order = rowIndex; // add original row position to rowCache
958
+ cacheIndex = 0;
959
+ max = c.columns;
960
+ for ( colIndex = 0; colIndex < max; ++colIndex ) {
961
+ cell = $row[ 0 ].cells[ colIndex ];
962
+ if ( cell && cacheIndex < c.columns ) {
963
+ hasParser = typeof parsers[ cacheIndex ] !== 'undefined';
964
+ if ( !hasParser && debug ) {
965
+ console.warn( 'No parser found for row: ' + rowIndex + ', column: ' + colIndex +
966
+ '; cell containing: "' + $(cell).text() + '"; does it have a header?' );
967
+ }
968
+ val = ts.getElementText( c, cell, cacheIndex );
969
+ rowData.raw[ cacheIndex ] = val; // save original row text
970
+ // save raw column text even if there is no parser set
971
+ txt = ts.getParsedText( c, cell, cacheIndex, val );
972
+ cols[ cacheIndex ] = txt;
973
+ if ( hasParser && ( parsers[ cacheIndex ].type || '' ).toLowerCase() === 'numeric' ) {
974
+ // determine column max value (ignore sign)
975
+ colMax[ cacheIndex ] = Math.max( Math.abs( txt ) || 0, colMax[ cacheIndex ] || 0 );
976
+ }
977
+ // allow colSpan in tbody
978
+ span = cell.colSpan - 1;
979
+ if ( span > 0 ) {
980
+ index = 0;
981
+ while ( index <= span ) {
982
+ // duplicate text (or not) to spanned columns
983
+ // instead of setting duplicate span to empty string, use textExtraction to try to get a value
984
+ // see http://stackoverflow.com/q/36449711/145346
985
+ txt = c.duplicateSpan || index === 0 ?
986
+ txt :
987
+ typeof c.textExtraction !== 'string' ?
988
+ ts.getElementText( c, cell, cacheIndex + index ) || '' :
989
+ '';
990
+ rowData.raw[ cacheIndex + index ] = txt;
991
+ cols[ cacheIndex + index ] = txt;
992
+ index++;
993
+ }
994
+ cacheIndex += span;
995
+ max += span;
996
+ }
997
+ }
998
+ cacheIndex++;
999
+ }
1000
+ // ensure rowData is always in the same location (after the last column)
1001
+ cols[ c.columns ] = rowData;
1002
+ cache.normalized[ cache.normalized.length ] = cols;
1003
+ }
1004
+ cache.colMax = colMax;
1005
+ // total up rows, not including child rows
1006
+ c.totalRows += cache.normalized.length;
1007
+
1008
+ }
1009
+ if ( c.showProcessing ) {
1010
+ ts.isProcessing( table ); // remove processing icon
1011
+ }
1012
+ if ( debug ) {
1013
+ len = Math.min( 5, c.cache[ 0 ].normalized.length );
1014
+ console[ console.group ? 'group' : 'log' ]( 'Building cache for ' + c.totalRows +
1015
+ ' rows (showing ' + len + ' rows in log) and ' + c.columns + ' columns' +
1016
+ ts.benchmark( cacheTime ) );
1017
+ val = {};
1018
+ for ( colIndex = 0; colIndex < c.columns; colIndex++ ) {
1019
+ for ( cacheIndex = 0; cacheIndex < len; cacheIndex++ ) {
1020
+ if ( !val[ 'row: ' + cacheIndex ] ) {
1021
+ val[ 'row: ' + cacheIndex ] = {};
1022
+ }
1023
+ val[ 'row: ' + cacheIndex ][ c.$headerIndexed[ colIndex ].text() ] =
1024
+ c.cache[ 0 ].normalized[ cacheIndex ][ colIndex ];
1025
+ }
1026
+ }
1027
+ console[ console.table ? 'table' : 'log' ]( val );
1028
+ if ( console.groupEnd ) { console.groupEnd(); }
1029
+ }
1030
+ if ( $.isFunction( callback ) ) {
1031
+ callback( table );
1032
+ }
1033
+ },
1034
+
1035
+ getColumnText : function( table, column, callback, rowFilter ) {
1036
+ table = $( table )[0];
1037
+ var tbodyIndex, rowIndex, cache, row, tbodyLen, rowLen, raw, parsed, $cell, result,
1038
+ hasCallback = typeof callback === 'function',
1039
+ allColumns = column === 'all',
1040
+ data = { raw : [], parsed: [], $cell: [] },
1041
+ c = table.config;
1042
+ if ( ts.isEmptyObject( c ) ) {
1043
+ if ( ts.debug(c, 'core') ) {
1044
+ console.warn( 'No cache found - aborting getColumnText function!' );
1045
+ }
1046
+ } else {
1047
+ tbodyLen = c.$tbodies.length;
1048
+ for ( tbodyIndex = 0; tbodyIndex < tbodyLen; tbodyIndex++ ) {
1049
+ cache = c.cache[ tbodyIndex ].normalized;
1050
+ rowLen = cache.length;
1051
+ for ( rowIndex = 0; rowIndex < rowLen; rowIndex++ ) {
1052
+ row = cache[ rowIndex ];
1053
+ if ( rowFilter && !row[ c.columns ].$row.is( rowFilter ) ) {
1054
+ continue;
1055
+ }
1056
+ result = true;
1057
+ parsed = ( allColumns ) ? row.slice( 0, c.columns ) : row[ column ];
1058
+ row = row[ c.columns ];
1059
+ raw = ( allColumns ) ? row.raw : row.raw[ column ];
1060
+ $cell = ( allColumns ) ? row.$row.children() : row.$row.children().eq( column );
1061
+ if ( hasCallback ) {
1062
+ result = callback({
1063
+ tbodyIndex : tbodyIndex,
1064
+ rowIndex : rowIndex,
1065
+ parsed : parsed,
1066
+ raw : raw,
1067
+ $row : row.$row,
1068
+ $cell : $cell
1069
+ });
1070
+ }
1071
+ if ( result !== false ) {
1072
+ data.parsed[ data.parsed.length ] = parsed;
1073
+ data.raw[ data.raw.length ] = raw;
1074
+ data.$cell[ data.$cell.length ] = $cell;
1075
+ }
1076
+ }
1077
+ }
1078
+ // return everything
1079
+ return data;
1080
+ }
1081
+ },
1082
+
1083
+ /*
1084
+ ██ ██ █████▄ █████▄ ▄████▄ ██████ ██████
1085
+ ██ ██ ██▄▄██ ██ ██ ██▄▄██ ██ ██▄▄
1086
+ ██ ██ ██▀▀▀ ██ ██ ██▀▀██ ██ ██▀▀
1087
+ ▀████▀ ██ █████▀ ██ ██ ██ ██████
1088
+ */
1089
+ setHeadersCss : function( c ) {
1090
+ var indx, column,
1091
+ list = c.sortList,
1092
+ len = list.length,
1093
+ none = ts.css.sortNone + ' ' + c.cssNone,
1094
+ css = [ ts.css.sortAsc + ' ' + c.cssAsc, ts.css.sortDesc + ' ' + c.cssDesc ],
1095
+ cssIcon = [ c.cssIconAsc, c.cssIconDesc, c.cssIconNone ],
1096
+ aria = [ 'ascending', 'descending' ],
1097
+ updateColumnSort = function($el, index) {
1098
+ $el
1099
+ .removeClass( none )
1100
+ .addClass( css[ index ] )
1101
+ .attr( 'aria-sort', aria[ index ] )
1102
+ .find( '.' + ts.css.icon )
1103
+ .removeClass( cssIcon[ 2 ] )
1104
+ .addClass( cssIcon[ index ] );
1105
+ },
1106
+ // find the footer
1107
+ $extras = c.$table
1108
+ .find( 'tfoot tr' )
1109
+ .children( 'td, th' )
1110
+ .add( $( c.namespace + '_extra_headers' ) )
1111
+ .removeClass( css.join( ' ' ) ),
1112
+ // remove all header information
1113
+ $sorted = c.$headers
1114
+ .add( $( 'thead ' + c.namespace + '_extra_headers' ) )
1115
+ .removeClass( css.join( ' ' ) )
1116
+ .addClass( none )
1117
+ .attr( 'aria-sort', 'none' )
1118
+ .find( '.' + ts.css.icon )
1119
+ .removeClass( cssIcon.join( ' ' ) )
1120
+ .end();
1121
+ // add css none to all sortable headers
1122
+ $sorted
1123
+ .not( '.sorter-false' )
1124
+ .find( '.' + ts.css.icon )
1125
+ .addClass( cssIcon[ 2 ] );
1126
+ // add disabled css icon class
1127
+ if ( c.cssIconDisabled ) {
1128
+ $sorted
1129
+ .filter( '.sorter-false' )
1130
+ .find( '.' + ts.css.icon )
1131
+ .addClass( c.cssIconDisabled );
1132
+ }
1133
+ for ( indx = 0; indx < len; indx++ ) {
1134
+ // direction = 2 means reset!
1135
+ if ( list[ indx ][ 1 ] !== 2 ) {
1136
+ // multicolumn sorting updating - see #1005
1137
+ // .not(function() {}) needs jQuery 1.4
1138
+ // filter(function(i, el) {}) <- el is undefined in jQuery v1.2.6
1139
+ $sorted = c.$headers.filter( function( i ) {
1140
+ // only include headers that are in the sortList (this includes colspans)
1141
+ var include = true,
1142
+ $el = c.$headers.eq( i ),
1143
+ col = parseInt( $el.attr( 'data-column' ), 10 ),
1144
+ end = col + ts.getClosest( $el, 'th, td' )[0].colSpan;
1145
+ for ( ; col < end; col++ ) {
1146
+ include = include ? include || ts.isValueInArray( col, c.sortList ) > -1 : false;
1147
+ }
1148
+ return include;
1149
+ });
1150
+
1151
+ // choose the :last in case there are nested columns
1152
+ $sorted = $sorted
1153
+ .not( '.sorter-false' )
1154
+ .filter( '[data-column="' + list[ indx ][ 0 ] + '"]' + ( len === 1 ? ':last' : '' ) );
1155
+ if ( $sorted.length ) {
1156
+ for ( column = 0; column < $sorted.length; column++ ) {
1157
+ if ( !$sorted[ column ].sortDisabled ) {
1158
+ updateColumnSort( $sorted.eq( column ), list[ indx ][ 1 ] );
1159
+ }
1160
+ }
1161
+ }
1162
+ // add sorted class to footer & extra headers, if they exist
1163
+ if ( $extras.length ) {
1164
+ updateColumnSort( $extras.filter( '[data-column="' + list[ indx ][ 0 ] + '"]' ), list[ indx ][ 1 ] );
1165
+ }
1166
+ }
1167
+ }
1168
+ // add verbose aria labels
1169
+ len = c.$headers.length;
1170
+ for ( indx = 0; indx < len; indx++ ) {
1171
+ ts.setColumnAriaLabel( c, c.$headers.eq( indx ) );
1172
+ }
1173
+ },
1174
+
1175
+ getClosest : function( $el, selector ) {
1176
+ // jQuery v1.2.6 doesn't have closest()
1177
+ if ( $.fn.closest ) {
1178
+ return $el.closest( selector );
1179
+ }
1180
+ return $el.is( selector ) ?
1181
+ $el :
1182
+ $el.parents( selector ).filter( ':first' );
1183
+ },
1184
+
1185
+ // nextSort (optional), lets you disable next sort text
1186
+ setColumnAriaLabel : function( c, $header, nextSort ) {
1187
+ if ( $header.length ) {
1188
+ var column = parseInt( $header.attr( 'data-column' ), 10 ),
1189
+ vars = c.sortVars[ column ],
1190
+ tmp = $header.hasClass( ts.css.sortAsc ) ?
1191
+ 'sortAsc' :
1192
+ $header.hasClass( ts.css.sortDesc ) ? 'sortDesc' : 'sortNone',
1193
+ txt = $.trim( $header.text() ) + ': ' + ts.language[ tmp ];
1194
+ if ( $header.hasClass( 'sorter-false' ) || nextSort === false ) {
1195
+ txt += ts.language.sortDisabled;
1196
+ } else {
1197
+ tmp = ( vars.count + 1 ) % vars.order.length;
1198
+ nextSort = vars.order[ tmp ];
1199
+ // if nextSort
1200
+ txt += ts.language[ nextSort === 0 ? 'nextAsc' : nextSort === 1 ? 'nextDesc' : 'nextNone' ];
1201
+ }
1202
+ $header.attr( 'aria-label', txt );
1203
+ if (vars.sortedBy) {
1204
+ $header.attr( 'data-sortedBy', vars.sortedBy );
1205
+ } else {
1206
+ $header.removeAttr('data-sortedBy');
1207
+ }
1208
+ }
1209
+ },
1210
+
1211
+ updateHeader : function( c ) {
1212
+ var index, isDisabled, $header, col,
1213
+ table = c.table,
1214
+ len = c.$headers.length;
1215
+ for ( index = 0; index < len; index++ ) {
1216
+ $header = c.$headers.eq( index );
1217
+ col = ts.getColumnData( table, c.headers, index, true );
1218
+ // add 'sorter-false' class if 'parser-false' is set
1219
+ isDisabled = ts.getData( $header, col, 'sorter' ) === 'false' || ts.getData( $header, col, 'parser' ) === 'false';
1220
+ ts.setColumnSort( c, $header, isDisabled );
1221
+ }
1222
+ },
1223
+
1224
+ setColumnSort : function( c, $header, isDisabled ) {
1225
+ var id = c.table.id;
1226
+ $header[ 0 ].sortDisabled = isDisabled;
1227
+ $header[ isDisabled ? 'addClass' : 'removeClass' ]( 'sorter-false' )
1228
+ .attr( 'aria-disabled', '' + isDisabled );
1229
+ // disable tab index on disabled cells
1230
+ if ( c.tabIndex ) {
1231
+ if ( isDisabled ) {
1232
+ $header.removeAttr( 'tabindex' );
1233
+ } else {
1234
+ $header.attr( 'tabindex', '0' );
1235
+ }
1236
+ }
1237
+ // aria-controls - requires table ID
1238
+ if ( id ) {
1239
+ if ( isDisabled ) {
1240
+ $header.removeAttr( 'aria-controls' );
1241
+ } else {
1242
+ $header.attr( 'aria-controls', id );
1243
+ }
1244
+ }
1245
+ },
1246
+
1247
+ updateHeaderSortCount : function( c, list ) {
1248
+ var col, dir, group, indx, primary, temp, val, order,
1249
+ sortList = list || c.sortList,
1250
+ len = sortList.length;
1251
+ c.sortList = [];
1252
+ for ( indx = 0; indx < len; indx++ ) {
1253
+ val = sortList[ indx ];
1254
+ // ensure all sortList values are numeric - fixes #127
1255
+ col = parseInt( val[ 0 ], 10 );
1256
+ // prevents error if sorton array is wrong
1257
+ if ( col < c.columns ) {
1258
+
1259
+ // set order if not already defined - due to colspan header without associated header cell
1260
+ // adding this check prevents a javascript error
1261
+ if ( !c.sortVars[ col ].order ) {
1262
+ if ( ts.getOrder( c.sortInitialOrder ) ) {
1263
+ order = c.sortReset ? [ 1, 0, 2 ] : [ 1, 0 ];
1264
+ } else {
1265
+ order = c.sortReset ? [ 0, 1, 2 ] : [ 0, 1 ];
1266
+ }
1267
+ c.sortVars[ col ].order = order;
1268
+ c.sortVars[ col ].count = 0;
1269
+ }
1270
+
1271
+ order = c.sortVars[ col ].order;
1272
+ dir = ( '' + val[ 1 ] ).match( /^(1|d|s|o|n)/ );
1273
+ dir = dir ? dir[ 0 ] : '';
1274
+ // 0/(a)sc (default), 1/(d)esc, (s)ame, (o)pposite, (n)ext
1275
+ switch ( dir ) {
1276
+ case '1' : case 'd' : // descending
1277
+ dir = 1;
1278
+ break;
1279
+ case 's' : // same direction (as primary column)
1280
+ // if primary sort is set to 's', make it ascending
1281
+ dir = primary || 0;
1282
+ break;
1283
+ case 'o' :
1284
+ temp = order[ ( primary || 0 ) % order.length ];
1285
+ // opposite of primary column; but resets if primary resets
1286
+ dir = temp === 0 ? 1 : temp === 1 ? 0 : 2;
1287
+ break;
1288
+ case 'n' :
1289
+ dir = order[ ( ++c.sortVars[ col ].count ) % order.length ];
1290
+ break;
1291
+ default : // ascending
1292
+ dir = 0;
1293
+ break;
1294
+ }
1295
+ primary = indx === 0 ? dir : primary;
1296
+ group = [ col, parseInt( dir, 10 ) || 0 ];
1297
+ c.sortList[ c.sortList.length ] = group;
1298
+ dir = $.inArray( group[ 1 ], order ); // fixes issue #167
1299
+ c.sortVars[ col ].count = dir >= 0 ? dir : group[ 1 ] % order.length;
1300
+ }
1301
+ }
1302
+ },
1303
+
1304
+ updateAll : function( c, resort, callback ) {
1305
+ var table = c.table;
1306
+ table.isUpdating = true;
1307
+ ts.refreshWidgets( table, true, true );
1308
+ ts.buildHeaders( c );
1309
+ ts.bindEvents( table, c.$headers, true );
1310
+ ts.bindMethods( c );
1311
+ ts.commonUpdate( c, resort, callback );
1312
+ },
1313
+
1314
+ update : function( c, resort, callback ) {
1315
+ var table = c.table;
1316
+ table.isUpdating = true;
1317
+ // update sorting (if enabled/disabled)
1318
+ ts.updateHeader( c );
1319
+ ts.commonUpdate( c, resort, callback );
1320
+ },
1321
+
1322
+ // simple header update - see #989
1323
+ updateHeaders : function( c, callback ) {
1324
+ c.table.isUpdating = true;
1325
+ ts.buildHeaders( c );
1326
+ ts.bindEvents( c.table, c.$headers, true );
1327
+ ts.resortComplete( c, callback );
1328
+ },
1329
+
1330
+ updateCell : function( c, cell, resort, callback ) {
1331
+ // updateCell for child rows is a mess - we'll ignore them for now
1332
+ // eventually I'll break out the "update" row cache code to make everything consistent
1333
+ if ( $( cell ).closest( 'tr' ).hasClass( c.cssChildRow ) ) {
1334
+ console.warn('Tablesorter Warning! "updateCell" for child row content has been disabled, use "update" instead');
1335
+ return;
1336
+ }
1337
+ if ( ts.isEmptyObject( c.cache ) ) {
1338
+ // empty table, do an update instead - fixes #1099
1339
+ ts.updateHeader( c );
1340
+ ts.commonUpdate( c, resort, callback );
1341
+ return;
1342
+ }
1343
+ c.table.isUpdating = true;
1344
+ c.$table.find( c.selectorRemove ).remove();
1345
+ // get position from the dom
1346
+ var tmp, indx, row, icell, cache, len,
1347
+ $tbodies = c.$tbodies,
1348
+ $cell = $( cell ),
1349
+ // update cache - format: function( s, table, cell, cellIndex )
1350
+ // no closest in jQuery v1.2.6
1351
+ tbodyIndex = $tbodies.index( ts.getClosest( $cell, 'tbody' ) ),
1352
+ tbcache = c.cache[ tbodyIndex ],
1353
+ $row = ts.getClosest( $cell, 'tr' );
1354
+ cell = $cell[ 0 ]; // in case cell is a jQuery object
1355
+ // tbody may not exist if update is initialized while tbody is removed for processing
1356
+ if ( $tbodies.length && tbodyIndex >= 0 ) {
1357
+ row = $tbodies.eq( tbodyIndex ).find( 'tr' ).not( '.' + c.cssChildRow ).index( $row );
1358
+ cache = tbcache.normalized[ row ];
1359
+ len = $row[ 0 ].cells.length;
1360
+ if ( len !== c.columns ) {
1361
+ // colspan in here somewhere!
1362
+ icell = 0;
1363
+ tmp = false;
1364
+ for ( indx = 0; indx < len; indx++ ) {
1365
+ if ( !tmp && $row[ 0 ].cells[ indx ] !== cell ) {
1366
+ icell += $row[ 0 ].cells[ indx ].colSpan;
1367
+ } else {
1368
+ tmp = true;
1369
+ }
1370
+ }
1371
+ } else {
1372
+ icell = $cell.index();
1373
+ }
1374
+ tmp = ts.getElementText( c, cell, icell ); // raw
1375
+ cache[ c.columns ].raw[ icell ] = tmp;
1376
+ tmp = ts.getParsedText( c, cell, icell, tmp );
1377
+ cache[ icell ] = tmp; // parsed
1378
+ if ( ( c.parsers[ icell ].type || '' ).toLowerCase() === 'numeric' ) {
1379
+ // update column max value (ignore sign)
1380
+ tbcache.colMax[ icell ] = Math.max( Math.abs( tmp ) || 0, tbcache.colMax[ icell ] || 0 );
1381
+ }
1382
+ tmp = resort !== 'undefined' ? resort : c.resort;
1383
+ if ( tmp !== false ) {
1384
+ // widgets will be reapplied
1385
+ ts.checkResort( c, tmp, callback );
1386
+ } else {
1387
+ // don't reapply widgets is resort is false, just in case it causes
1388
+ // problems with element focus
1389
+ ts.resortComplete( c, callback );
1390
+ }
1391
+ } else {
1392
+ if ( ts.debug(c, 'core') ) {
1393
+ console.error( 'updateCell aborted, tbody missing or not within the indicated table' );
1394
+ }
1395
+ c.table.isUpdating = false;
1396
+ }
1397
+ },
1398
+
1399
+ addRows : function( c, $row, resort, callback ) {
1400
+ var txt, val, tbodyIndex, rowIndex, rows, cellIndex, len, order,
1401
+ cacheIndex, rowData, cells, cell, span,
1402
+ // allow passing a row string if only one non-info tbody exists in the table
1403
+ valid = typeof $row === 'string' && c.$tbodies.length === 1 && /<tr/.test( $row || '' ),
1404
+ table = c.table;
1405
+ if ( valid ) {
1406
+ $row = $( $row );
1407
+ c.$tbodies.append( $row );
1408
+ } else if (
1409
+ !$row ||
1410
+ // row is a jQuery object?
1411
+ !( $row instanceof $ ) ||
1412
+ // row contained in the table?
1413
+ ( ts.getClosest( $row, 'table' )[ 0 ] !== c.table )
1414
+ ) {
1415
+ if ( ts.debug(c, 'core') ) {
1416
+ console.error( 'addRows method requires (1) a jQuery selector reference to rows that have already ' +
1417
+ 'been added to the table, or (2) row HTML string to be added to a table with only one tbody' );
1418
+ }
1419
+ return false;
1420
+ }
1421
+ table.isUpdating = true;
1422
+ if ( ts.isEmptyObject( c.cache ) ) {
1423
+ // empty table, do an update instead - fixes #450
1424
+ ts.updateHeader( c );
1425
+ ts.commonUpdate( c, resort, callback );
1426
+ } else {
1427
+ rows = $row.filter( 'tr' ).attr( 'role', 'row' ).length;
1428
+ tbodyIndex = c.$tbodies.index( $row.parents( 'tbody' ).filter( ':first' ) );
1429
+ // fixes adding rows to an empty table - see issue #179
1430
+ if ( !( c.parsers && c.parsers.length ) ) {
1431
+ ts.setupParsers( c );
1432
+ }
1433
+ // add each row
1434
+ for ( rowIndex = 0; rowIndex < rows; rowIndex++ ) {
1435
+ cacheIndex = 0;
1436
+ len = $row[ rowIndex ].cells.length;
1437
+ order = c.cache[ tbodyIndex ].normalized.length;
1438
+ cells = [];
1439
+ rowData = {
1440
+ child : [],
1441
+ raw : [],
1442
+ $row : $row.eq( rowIndex ),
1443
+ order : order
1444
+ };
1445
+ // add each cell
1446
+ for ( cellIndex = 0; cellIndex < len; cellIndex++ ) {
1447
+ cell = $row[ rowIndex ].cells[ cellIndex ];
1448
+ txt = ts.getElementText( c, cell, cacheIndex );
1449
+ rowData.raw[ cacheIndex ] = txt;
1450
+ val = ts.getParsedText( c, cell, cacheIndex, txt );
1451
+ cells[ cacheIndex ] = val;
1452
+ if ( ( c.parsers[ cacheIndex ].type || '' ).toLowerCase() === 'numeric' ) {
1453
+ // update column max value (ignore sign)
1454
+ c.cache[ tbodyIndex ].colMax[ cacheIndex ] =
1455
+ Math.max( Math.abs( val ) || 0, c.cache[ tbodyIndex ].colMax[ cacheIndex ] || 0 );
1456
+ }
1457
+ span = cell.colSpan - 1;
1458
+ if ( span > 0 ) {
1459
+ cacheIndex += span;
1460
+ }
1461
+ cacheIndex++;
1462
+ }
1463
+ // add the row data to the end
1464
+ cells[ c.columns ] = rowData;
1465
+ // update cache
1466
+ c.cache[ tbodyIndex ].normalized[ order ] = cells;
1467
+ }
1468
+ // resort using current settings
1469
+ ts.checkResort( c, resort, callback );
1470
+ }
1471
+ },
1472
+
1473
+ updateCache : function( c, callback, $tbodies ) {
1474
+ // rebuild parsers
1475
+ if ( !( c.parsers && c.parsers.length ) ) {
1476
+ ts.setupParsers( c, $tbodies );
1477
+ }
1478
+ // rebuild the cache map
1479
+ ts.buildCache( c, callback, $tbodies );
1480
+ },
1481
+
1482
+ // init flag (true) used by pager plugin to prevent widget application
1483
+ // renamed from appendToTable
1484
+ appendCache : function( c, init ) {
1485
+ var parsed, totalRows, $tbody, $curTbody, rowIndex, tbodyIndex, appendTime,
1486
+ table = c.table,
1487
+ $tbodies = c.$tbodies,
1488
+ rows = [],
1489
+ cache = c.cache;
1490
+ // empty table - fixes #206/#346
1491
+ if ( ts.isEmptyObject( cache ) ) {
1492
+ // run pager appender in case the table was just emptied
1493
+ return c.appender ? c.appender( table, rows ) :
1494
+ table.isUpdating ? c.$table.triggerHandler( 'updateComplete', table ) : ''; // Fixes #532
1495
+ }
1496
+ if ( ts.debug(c, 'core') ) {
1497
+ appendTime = new Date();
1498
+ }
1499
+ for ( tbodyIndex = 0; tbodyIndex < $tbodies.length; tbodyIndex++ ) {
1500
+ $tbody = $tbodies.eq( tbodyIndex );
1501
+ if ( $tbody.length ) {
1502
+ // detach tbody for manipulation
1503
+ $curTbody = ts.processTbody( table, $tbody, true );
1504
+ parsed = cache[ tbodyIndex ].normalized;
1505
+ totalRows = parsed.length;
1506
+ for ( rowIndex = 0; rowIndex < totalRows; rowIndex++ ) {
1507
+ rows[rows.length] = parsed[ rowIndex ][ c.columns ].$row;
1508
+ // removeRows used by the pager plugin; don't render if using ajax - fixes #411
1509
+ if ( !c.appender || ( c.pager && !c.pager.removeRows && !c.pager.ajax ) ) {
1510
+ $curTbody.append( parsed[ rowIndex ][ c.columns ].$row );
1511
+ }
1512
+ }
1513
+ // restore tbody
1514
+ ts.processTbody( table, $curTbody, false );
1515
+ }
1516
+ }
1517
+ if ( c.appender ) {
1518
+ c.appender( table, rows );
1519
+ }
1520
+ if ( ts.debug(c, 'core') ) {
1521
+ console.log( 'Rebuilt table' + ts.benchmark( appendTime ) );
1522
+ }
1523
+ // apply table widgets; but not before ajax completes
1524
+ if ( !init && !c.appender ) {
1525
+ ts.applyWidget( table );
1526
+ }
1527
+ if ( table.isUpdating ) {
1528
+ c.$table.triggerHandler( 'updateComplete', table );
1529
+ }
1530
+ },
1531
+
1532
+ commonUpdate : function( c, resort, callback ) {
1533
+ // remove rows/elements before update
1534
+ c.$table.find( c.selectorRemove ).remove();
1535
+ // rebuild parsers
1536
+ ts.setupParsers( c );
1537
+ // rebuild the cache map
1538
+ ts.buildCache( c );
1539
+ ts.checkResort( c, resort, callback );
1540
+ },
1541
+
1542
+ /*
1543
+ ▄█████ ▄████▄ █████▄ ██████ ██ █████▄ ▄████▄
1544
+ ▀█▄ ██ ██ ██▄▄██ ██ ██ ██ ██ ██ ▄▄▄
1545
+ ▀█▄ ██ ██ ██▀██ ██ ██ ██ ██ ██ ▀██
1546
+ █████▀ ▀████▀ ██ ██ ██ ██ ██ ██ ▀████▀
1547
+ */
1548
+ initSort : function( c, cell, event ) {
1549
+ if ( c.table.isUpdating ) {
1550
+ // let any updates complete before initializing a sort
1551
+ return setTimeout( function() {
1552
+ ts.initSort( c, cell, event );
1553
+ }, 50 );
1554
+ }
1555
+
1556
+ var arry, indx, headerIndx, dir, temp, tmp, $header,
1557
+ notMultiSort = !event[ c.sortMultiSortKey ],
1558
+ table = c.table,
1559
+ len = c.$headers.length,
1560
+ th = ts.getClosest( $( cell ), 'th, td' ),
1561
+ col = parseInt( th.attr( 'data-column' ), 10 ),
1562
+ sortedBy = event.type === 'mouseup' ? 'user' : event.type,
1563
+ order = c.sortVars[ col ].order;
1564
+ th = th[0];
1565
+ // Only call sortStart if sorting is enabled
1566
+ c.$table.triggerHandler( 'sortStart', table );
1567
+ // get current column sort order
1568
+ tmp = ( c.sortVars[ col ].count + 1 ) % order.length;
1569
+ c.sortVars[ col ].count = event[ c.sortResetKey ] ? 2 : tmp;
1570
+ // reset all sorts on non-current column - issue #30
1571
+ if ( c.sortRestart ) {
1572
+ for ( headerIndx = 0; headerIndx < len; headerIndx++ ) {
1573
+ $header = c.$headers.eq( headerIndx );
1574
+ tmp = parseInt( $header.attr( 'data-column' ), 10 );
1575
+ // only reset counts on columns that weren't just clicked on and if not included in a multisort
1576
+ if ( col !== tmp && ( notMultiSort || $header.hasClass( ts.css.sortNone ) ) ) {
1577
+ c.sortVars[ tmp ].count = -1;
1578
+ }
1579
+ }
1580
+ }
1581
+ // user only wants to sort on one column
1582
+ if ( notMultiSort ) {
1583
+ $.each( c.sortVars, function( i ) {
1584
+ c.sortVars[ i ].sortedBy = '';
1585
+ });
1586
+ // flush the sort list
1587
+ c.sortList = [];
1588
+ c.last.sortList = [];
1589
+ if ( c.sortForce !== null ) {
1590
+ arry = c.sortForce;
1591
+ for ( indx = 0; indx < arry.length; indx++ ) {
1592
+ if ( arry[ indx ][ 0 ] !== col ) {
1593
+ c.sortList[ c.sortList.length ] = arry[ indx ];
1594
+ c.sortVars[ arry[ indx ][ 0 ] ].sortedBy = 'sortForce';
1595
+ }
1596
+ }
1597
+ }
1598
+ // add column to sort list
1599
+ dir = order[ c.sortVars[ col ].count ];
1600
+ if ( dir < 2 ) {
1601
+ c.sortList[ c.sortList.length ] = [ col, dir ];
1602
+ c.sortVars[ col ].sortedBy = sortedBy;
1603
+ // add other columns if header spans across multiple
1604
+ if ( th.colSpan > 1 ) {
1605
+ for ( indx = 1; indx < th.colSpan; indx++ ) {
1606
+ c.sortList[ c.sortList.length ] = [ col + indx, dir ];
1607
+ // update count on columns in colSpan
1608
+ c.sortVars[ col + indx ].count = $.inArray( dir, order );
1609
+ c.sortVars[ col + indx ].sortedBy = sortedBy;
1610
+ }
1611
+ }
1612
+ }
1613
+ // multi column sorting
1614
+ } else {
1615
+ // get rid of the sortAppend before adding more - fixes issue #115 & #523
1616
+ c.sortList = $.extend( [], c.last.sortList );
1617
+
1618
+ // the user has clicked on an already sorted column
1619
+ if ( ts.isValueInArray( col, c.sortList ) >= 0 ) {
1620
+ // reverse the sorting direction
1621
+ c.sortVars[ col ].sortedBy = sortedBy;
1622
+ for ( indx = 0; indx < c.sortList.length; indx++ ) {
1623
+ tmp = c.sortList[ indx ];
1624
+ if ( tmp[ 0 ] === col ) {
1625
+ // order.count seems to be incorrect when compared to cell.count
1626
+ tmp[ 1 ] = order[ c.sortVars[ col ].count ];
1627
+ if ( tmp[1] === 2 ) {
1628
+ c.sortList.splice( indx, 1 );
1629
+ c.sortVars[ col ].count = -1;
1630
+ }
1631
+ }
1632
+ }
1633
+ } else {
1634
+ // add column to sort list array
1635
+ dir = order[ c.sortVars[ col ].count ];
1636
+ c.sortVars[ col ].sortedBy = sortedBy;
1637
+ if ( dir < 2 ) {
1638
+ c.sortList[ c.sortList.length ] = [ col, dir ];
1639
+ // add other columns if header spans across multiple
1640
+ if ( th.colSpan > 1 ) {
1641
+ for ( indx = 1; indx < th.colSpan; indx++ ) {
1642
+ c.sortList[ c.sortList.length ] = [ col + indx, dir ];
1643
+ // update count on columns in colSpan
1644
+ c.sortVars[ col + indx ].count = $.inArray( dir, order );
1645
+ c.sortVars[ col + indx ].sortedBy = sortedBy;
1646
+ }
1647
+ }
1648
+ }
1649
+ }
1650
+ }
1651
+ // save sort before applying sortAppend
1652
+ c.last.sortList = $.extend( [], c.sortList );
1653
+ if ( c.sortList.length && c.sortAppend ) {
1654
+ arry = $.isArray( c.sortAppend ) ? c.sortAppend : c.sortAppend[ c.sortList[ 0 ][ 0 ] ];
1655
+ if ( !ts.isEmptyObject( arry ) ) {
1656
+ for ( indx = 0; indx < arry.length; indx++ ) {
1657
+ if ( arry[ indx ][ 0 ] !== col && ts.isValueInArray( arry[ indx ][ 0 ], c.sortList ) < 0 ) {
1658
+ dir = arry[ indx ][ 1 ];
1659
+ temp = ( '' + dir ).match( /^(a|d|s|o|n)/ );
1660
+ if ( temp ) {
1661
+ tmp = c.sortList[ 0 ][ 1 ];
1662
+ switch ( temp[ 0 ] ) {
1663
+ case 'd' :
1664
+ dir = 1;
1665
+ break;
1666
+ case 's' :
1667
+ dir = tmp;
1668
+ break;
1669
+ case 'o' :
1670
+ dir = tmp === 0 ? 1 : 0;
1671
+ break;
1672
+ case 'n' :
1673
+ dir = ( tmp + 1 ) % order.length;
1674
+ break;
1675
+ default:
1676
+ dir = 0;
1677
+ break;
1678
+ }
1679
+ }
1680
+ c.sortList[ c.sortList.length ] = [ arry[ indx ][ 0 ], dir ];
1681
+ c.sortVars[ arry[ indx ][ 0 ] ].sortedBy = 'sortAppend';
1682
+ }
1683
+ }
1684
+ }
1685
+ }
1686
+ // sortBegin event triggered immediately before the sort
1687
+ c.$table.triggerHandler( 'sortBegin', table );
1688
+ // setTimeout needed so the processing icon shows up
1689
+ setTimeout( function() {
1690
+ // set css for headers
1691
+ ts.setHeadersCss( c );
1692
+ ts.multisort( c );
1693
+ ts.appendCache( c );
1694
+ c.$table.triggerHandler( 'sortBeforeEnd', table );
1695
+ c.$table.triggerHandler( 'sortEnd', table );
1696
+ }, 1 );
1697
+ },
1698
+
1699
+ // sort multiple columns
1700
+ multisort : function( c ) { /*jshint loopfunc:true */
1701
+ var tbodyIndex, sortTime, colMax, rows, tmp,
1702
+ table = c.table,
1703
+ sorter = [],
1704
+ dir = 0,
1705
+ textSorter = c.textSorter || '',
1706
+ sortList = c.sortList,
1707
+ sortLen = sortList.length,
1708
+ len = c.$tbodies.length;
1709
+ if ( c.serverSideSorting || ts.isEmptyObject( c.cache ) ) {
1710
+ // empty table - fixes #206/#346
1711
+ return;
1712
+ }
1713
+ if ( ts.debug(c, 'core') ) { sortTime = new Date(); }
1714
+ // cache textSorter to optimize speed
1715
+ if ( typeof textSorter === 'object' ) {
1716
+ colMax = c.columns;
1717
+ while ( colMax-- ) {
1718
+ tmp = ts.getColumnData( table, textSorter, colMax );
1719
+ if ( typeof tmp === 'function' ) {
1720
+ sorter[ colMax ] = tmp;
1721
+ }
1722
+ }
1723
+ }
1724
+ for ( tbodyIndex = 0; tbodyIndex < len; tbodyIndex++ ) {
1725
+ colMax = c.cache[ tbodyIndex ].colMax;
1726
+ rows = c.cache[ tbodyIndex ].normalized;
1727
+
1728
+ rows.sort( function( a, b ) {
1729
+ var sortIndex, num, col, order, sort, x, y;
1730
+ // rows is undefined here in IE, so don't use it!
1731
+ for ( sortIndex = 0; sortIndex < sortLen; sortIndex++ ) {
1732
+ col = sortList[ sortIndex ][ 0 ];
1733
+ order = sortList[ sortIndex ][ 1 ];
1734
+ // sort direction, true = asc, false = desc
1735
+ dir = order === 0;
1736
+
1737
+ if ( c.sortStable && a[ col ] === b[ col ] && sortLen === 1 ) {
1738
+ return a[ c.columns ].order - b[ c.columns ].order;
1739
+ }
1740
+
1741
+ // fallback to natural sort since it is more robust
1742
+ num = /n/i.test( ts.getSortType( c.parsers, col ) );
1743
+ if ( num && c.strings[ col ] ) {
1744
+ // sort strings in numerical columns
1745
+ if ( typeof ( ts.string[ c.strings[ col ] ] ) === 'boolean' ) {
1746
+ num = ( dir ? 1 : -1 ) * ( ts.string[ c.strings[ col ] ] ? -1 : 1 );
1747
+ } else {
1748
+ num = ( c.strings[ col ] ) ? ts.string[ c.strings[ col ] ] || 0 : 0;
1749
+ }
1750
+ // fall back to built-in numeric sort
1751
+ // var sort = $.tablesorter['sort' + s]( a[col], b[col], dir, colMax[col], table );
1752
+ sort = c.numberSorter ? c.numberSorter( a[ col ], b[ col ], dir, colMax[ col ], table ) :
1753
+ ts[ 'sortNumeric' + ( dir ? 'Asc' : 'Desc' ) ]( a[ col ], b[ col ], num, colMax[ col ], col, c );
1754
+ } else {
1755
+ // set a & b depending on sort direction
1756
+ x = dir ? a : b;
1757
+ y = dir ? b : a;
1758
+ // text sort function
1759
+ if ( typeof textSorter === 'function' ) {
1760
+ // custom OVERALL text sorter
1761
+ sort = textSorter( x[ col ], y[ col ], dir, col, table );
1762
+ } else if ( typeof sorter[ col ] === 'function' ) {
1763
+ // custom text sorter for a SPECIFIC COLUMN
1764
+ sort = sorter[ col ]( x[ col ], y[ col ], dir, col, table );
1765
+ } else {
1766
+ // fall back to natural sort
1767
+ sort = ts[ 'sortNatural' + ( dir ? 'Asc' : 'Desc' ) ]( a[ col ] || '', b[ col ] || '', col, c );
1768
+ }
1769
+ }
1770
+ if ( sort ) { return sort; }
1771
+ }
1772
+ return a[ c.columns ].order - b[ c.columns ].order;
1773
+ });
1774
+ }
1775
+ if ( ts.debug(c, 'core') ) {
1776
+ console.log( 'Applying sort ' + sortList.toString() + ts.benchmark( sortTime ) );
1777
+ }
1778
+ },
1779
+
1780
+ resortComplete : function( c, callback ) {
1781
+ if ( c.table.isUpdating ) {
1782
+ c.$table.triggerHandler( 'updateComplete', c.table );
1783
+ }
1784
+ if ( $.isFunction( callback ) ) {
1785
+ callback( c.table );
1786
+ }
1787
+ },
1788
+
1789
+ checkResort : function( c, resort, callback ) {
1790
+ var sortList = $.isArray( resort ) ? resort : c.sortList,
1791
+ // if no resort parameter is passed, fallback to config.resort (true by default)
1792
+ resrt = typeof resort === 'undefined' ? c.resort : resort;
1793
+ // don't try to resort if the table is still processing
1794
+ // this will catch spamming of the updateCell method
1795
+ if ( resrt !== false && !c.serverSideSorting && !c.table.isProcessing ) {
1796
+ if ( sortList.length ) {
1797
+ ts.sortOn( c, sortList, function() {
1798
+ ts.resortComplete( c, callback );
1799
+ }, true );
1800
+ } else {
1801
+ ts.sortReset( c, function() {
1802
+ ts.resortComplete( c, callback );
1803
+ ts.applyWidget( c.table, false );
1804
+ } );
1805
+ }
1806
+ } else {
1807
+ ts.resortComplete( c, callback );
1808
+ ts.applyWidget( c.table, false );
1809
+ }
1810
+ },
1811
+
1812
+ sortOn : function( c, list, callback, init ) {
1813
+ var indx,
1814
+ table = c.table;
1815
+ c.$table.triggerHandler( 'sortStart', table );
1816
+ for (indx = 0; indx < c.columns; indx++) {
1817
+ c.sortVars[ indx ].sortedBy = ts.isValueInArray( indx, list ) > -1 ? 'sorton' : '';
1818
+ }
1819
+ // update header count index
1820
+ ts.updateHeaderSortCount( c, list );
1821
+ // set css for headers
1822
+ ts.setHeadersCss( c );
1823
+ // fixes #346
1824
+ if ( c.delayInit && ts.isEmptyObject( c.cache ) ) {
1825
+ ts.buildCache( c );
1826
+ }
1827
+ c.$table.triggerHandler( 'sortBegin', table );
1828
+ // sort the table and append it to the dom
1829
+ ts.multisort( c );
1830
+ ts.appendCache( c, init );
1831
+ c.$table.triggerHandler( 'sortBeforeEnd', table );
1832
+ c.$table.triggerHandler( 'sortEnd', table );
1833
+ ts.applyWidget( table );
1834
+ if ( $.isFunction( callback ) ) {
1835
+ callback( table );
1836
+ }
1837
+ },
1838
+
1839
+ sortReset : function( c, callback ) {
1840
+ c.sortList = [];
1841
+ var indx;
1842
+ for (indx = 0; indx < c.columns; indx++) {
1843
+ c.sortVars[ indx ].count = -1;
1844
+ c.sortVars[ indx ].sortedBy = '';
1845
+ }
1846
+ ts.setHeadersCss( c );
1847
+ ts.multisort( c );
1848
+ ts.appendCache( c );
1849
+ if ( $.isFunction( callback ) ) {
1850
+ callback( c.table );
1851
+ }
1852
+ },
1853
+
1854
+ getSortType : function( parsers, column ) {
1855
+ return ( parsers && parsers[ column ] ) ? parsers[ column ].type || '' : '';
1856
+ },
1857
+
1858
+ getOrder : function( val ) {
1859
+ // look for 'd' in 'desc' order; return true
1860
+ return ( /^d/i.test( val ) || val === 1 );
1861
+ },
1862
+
1863
+ // Natural sort - https://github.com/overset/javascript-natural-sort (date sorting removed)
1864
+ sortNatural : function( a, b ) {
1865
+ if ( a === b ) { return 0; }
1866
+ a = ( a || '' ).toString();
1867
+ b = ( b || '' ).toString();
1868
+ var aNum, bNum, aFloat, bFloat, indx, max,
1869
+ regex = ts.regex;
1870
+ // first try and sort Hex codes
1871
+ if ( regex.hex.test( b ) ) {
1872
+ aNum = parseInt( a.match( regex.hex ), 16 );
1873
+ bNum = parseInt( b.match( regex.hex ), 16 );
1874
+ if ( aNum < bNum ) { return -1; }
1875
+ if ( aNum > bNum ) { return 1; }
1876
+ }
1877
+ // chunk/tokenize
1878
+ aNum = a.replace( regex.chunk, '\\0$1\\0' ).replace( regex.chunks, '' ).split( '\\0' );
1879
+ bNum = b.replace( regex.chunk, '\\0$1\\0' ).replace( regex.chunks, '' ).split( '\\0' );
1880
+ max = Math.max( aNum.length, bNum.length );
1881
+ // natural sorting through split numeric strings and default strings
1882
+ for ( indx = 0; indx < max; indx++ ) {
1883
+ // find floats not starting with '0', string or 0 if not defined
1884
+ aFloat = isNaN( aNum[ indx ] ) ? aNum[ indx ] || 0 : parseFloat( aNum[ indx ] ) || 0;
1885
+ bFloat = isNaN( bNum[ indx ] ) ? bNum[ indx ] || 0 : parseFloat( bNum[ indx ] ) || 0;
1886
+ // handle numeric vs string comparison - number < string - (Kyle Adams)
1887
+ if ( isNaN( aFloat ) !== isNaN( bFloat ) ) { return isNaN( aFloat ) ? 1 : -1; }
1888
+ // rely on string comparison if different types - i.e. '02' < 2 != '02' < '2'
1889
+ if ( typeof aFloat !== typeof bFloat ) {
1890
+ aFloat += '';
1891
+ bFloat += '';
1892
+ }
1893
+ if ( aFloat < bFloat ) { return -1; }
1894
+ if ( aFloat > bFloat ) { return 1; }
1895
+ }
1896
+ return 0;
1897
+ },
1898
+
1899
+ sortNaturalAsc : function( a, b, col, c ) {
1900
+ if ( a === b ) { return 0; }
1901
+ var empty = ts.string[ ( c.empties[ col ] || c.emptyTo ) ];
1902
+ if ( a === '' && empty !== 0 ) { return typeof empty === 'boolean' ? ( empty ? -1 : 1 ) : -empty || -1; }
1903
+ if ( b === '' && empty !== 0 ) { return typeof empty === 'boolean' ? ( empty ? 1 : -1 ) : empty || 1; }
1904
+ return ts.sortNatural( a, b );
1905
+ },
1906
+
1907
+ sortNaturalDesc : function( a, b, col, c ) {
1908
+ if ( a === b ) { return 0; }
1909
+ var empty = ts.string[ ( c.empties[ col ] || c.emptyTo ) ];
1910
+ if ( a === '' && empty !== 0 ) { return typeof empty === 'boolean' ? ( empty ? -1 : 1 ) : empty || 1; }
1911
+ if ( b === '' && empty !== 0 ) { return typeof empty === 'boolean' ? ( empty ? 1 : -1 ) : -empty || -1; }
1912
+ return ts.sortNatural( b, a );
1913
+ },
1914
+
1915
+ // basic alphabetical sort
1916
+ sortText : function( a, b ) {
1917
+ return a > b ? 1 : ( a < b ? -1 : 0 );
1918
+ },
1919
+
1920
+ // return text string value by adding up ascii value
1921
+ // so the text is somewhat sorted when using a digital sort
1922
+ // this is NOT an alphanumeric sort
1923
+ getTextValue : function( val, num, max ) {
1924
+ if ( max ) {
1925
+ // make sure the text value is greater than the max numerical value (max)
1926
+ var indx,
1927
+ len = val ? val.length : 0,
1928
+ n = max + num;
1929
+ for ( indx = 0; indx < len; indx++ ) {
1930
+ n += val.charCodeAt( indx );
1931
+ }
1932
+ return num * n;
1933
+ }
1934
+ return 0;
1935
+ },
1936
+
1937
+ sortNumericAsc : function( a, b, num, max, col, c ) {
1938
+ if ( a === b ) { return 0; }
1939
+ var empty = ts.string[ ( c.empties[ col ] || c.emptyTo ) ];
1940
+ if ( a === '' && empty !== 0 ) { return typeof empty === 'boolean' ? ( empty ? -1 : 1 ) : -empty || -1; }
1941
+ if ( b === '' && empty !== 0 ) { return typeof empty === 'boolean' ? ( empty ? 1 : -1 ) : empty || 1; }
1942
+ if ( isNaN( a ) ) { a = ts.getTextValue( a, num, max ); }
1943
+ if ( isNaN( b ) ) { b = ts.getTextValue( b, num, max ); }
1944
+ return a - b;
1945
+ },
1946
+
1947
+ sortNumericDesc : function( a, b, num, max, col, c ) {
1948
+ if ( a === b ) { return 0; }
1949
+ var empty = ts.string[ ( c.empties[ col ] || c.emptyTo ) ];
1950
+ if ( a === '' && empty !== 0 ) { return typeof empty === 'boolean' ? ( empty ? -1 : 1 ) : empty || 1; }
1951
+ if ( b === '' && empty !== 0 ) { return typeof empty === 'boolean' ? ( empty ? 1 : -1 ) : -empty || -1; }
1952
+ if ( isNaN( a ) ) { a = ts.getTextValue( a, num, max ); }
1953
+ if ( isNaN( b ) ) { b = ts.getTextValue( b, num, max ); }
1954
+ return b - a;
1955
+ },
1956
+
1957
+ sortNumeric : function( a, b ) {
1958
+ return a - b;
1959
+ },
1960
+
1961
+ /*
1962
+ ██ ██ ██ ██ █████▄ ▄████▄ ██████ ██████ ▄█████
1963
+ ██ ██ ██ ██ ██ ██ ██ ▄▄▄ ██▄▄ ██ ▀█▄
1964
+ ██ ██ ██ ██ ██ ██ ██ ▀██ ██▀▀ ██ ▀█▄
1965
+ ███████▀ ██ █████▀ ▀████▀ ██████ ██ █████▀
1966
+ */
1967
+ addWidget : function( widget ) {
1968
+ if ( widget.id && !ts.isEmptyObject( ts.getWidgetById( widget.id ) ) ) {
1969
+ console.warn( '"' + widget.id + '" widget was loaded more than once!' );
1970
+ }
1971
+ ts.widgets[ ts.widgets.length ] = widget;
1972
+ },
1973
+
1974
+ hasWidget : function( $table, name ) {
1975
+ $table = $( $table );
1976
+ return $table.length && $table[ 0 ].config && $table[ 0 ].config.widgetInit[ name ] || false;
1977
+ },
1978
+
1979
+ getWidgetById : function( name ) {
1980
+ var indx, widget,
1981
+ len = ts.widgets.length;
1982
+ for ( indx = 0; indx < len; indx++ ) {
1983
+ widget = ts.widgets[ indx ];
1984
+ if ( widget && widget.id && widget.id.toLowerCase() === name.toLowerCase() ) {
1985
+ return widget;
1986
+ }
1987
+ }
1988
+ },
1989
+
1990
+ applyWidgetOptions : function( table ) {
1991
+ var indx, widget, wo,
1992
+ c = table.config,
1993
+ len = c.widgets.length;
1994
+ if ( len ) {
1995
+ for ( indx = 0; indx < len; indx++ ) {
1996
+ widget = ts.getWidgetById( c.widgets[ indx ] );
1997
+ if ( widget && widget.options ) {
1998
+ wo = $.extend( true, {}, widget.options );
1999
+ c.widgetOptions = $.extend( true, wo, c.widgetOptions );
2000
+ // add widgetOptions to defaults for option validator
2001
+ $.extend( true, ts.defaults.widgetOptions, widget.options );
2002
+ }
2003
+ }
2004
+ }
2005
+ },
2006
+
2007
+ addWidgetFromClass : function( table ) {
2008
+ var len, indx,
2009
+ c = table.config,
2010
+ // look for widgets to apply from table class
2011
+ // don't match from 'ui-widget-content'; use \S instead of \w to include widgets
2012
+ // with dashes in the name, e.g. "widget-test-2" extracts out "test-2"
2013
+ regex = '^' + c.widgetClass.replace( ts.regex.templateName, '(\\S+)+' ) + '$',
2014
+ widgetClass = new RegExp( regex, 'g' ),
2015
+ // split up table class (widget id's can include dashes) - stop using match
2016
+ // otherwise only one widget gets extracted, see #1109
2017
+ widgets = ( table.className || '' ).split( ts.regex.spaces );
2018
+ if ( widgets.length ) {
2019
+ len = widgets.length;
2020
+ for ( indx = 0; indx < len; indx++ ) {
2021
+ if ( widgets[ indx ].match( widgetClass ) ) {
2022
+ c.widgets[ c.widgets.length ] = widgets[ indx ].replace( widgetClass, '$1' );
2023
+ }
2024
+ }
2025
+ }
2026
+ },
2027
+
2028
+ applyWidgetId : function( table, id, init ) {
2029
+ table = $(table)[0];
2030
+ var applied, time, name,
2031
+ c = table.config,
2032
+ wo = c.widgetOptions,
2033
+ debug = ts.debug(c, 'core'),
2034
+ widget = ts.getWidgetById( id );
2035
+ if ( widget ) {
2036
+ name = widget.id;
2037
+ applied = false;
2038
+ // add widget name to option list so it gets reapplied after sorting, filtering, etc
2039
+ if ( $.inArray( name, c.widgets ) < 0 ) {
2040
+ c.widgets[ c.widgets.length ] = name;
2041
+ }
2042
+ if ( debug ) { time = new Date(); }
2043
+
2044
+ if ( init || !( c.widgetInit[ name ] ) ) {
2045
+ // set init flag first to prevent calling init more than once (e.g. pager)
2046
+ c.widgetInit[ name ] = true;
2047
+ if ( table.hasInitialized ) {
2048
+ // don't reapply widget options on tablesorter init
2049
+ ts.applyWidgetOptions( table );
2050
+ }
2051
+ if ( typeof widget.init === 'function' ) {
2052
+ applied = true;
2053
+ if ( debug ) {
2054
+ console[ console.group ? 'group' : 'log' ]( 'Initializing ' + name + ' widget' );
2055
+ }
2056
+ widget.init( table, widget, c, wo );
2057
+ }
2058
+ }
2059
+ if ( !init && typeof widget.format === 'function' ) {
2060
+ applied = true;
2061
+ if ( debug ) {
2062
+ console[ console.group ? 'group' : 'log' ]( 'Updating ' + name + ' widget' );
2063
+ }
2064
+ widget.format( table, c, wo, false );
2065
+ }
2066
+ if ( debug ) {
2067
+ if ( applied ) {
2068
+ console.log( 'Completed ' + ( init ? 'initializing ' : 'applying ' ) + name + ' widget' + ts.benchmark( time ) );
2069
+ if ( console.groupEnd ) { console.groupEnd(); }
2070
+ }
2071
+ }
2072
+ }
2073
+ },
2074
+
2075
+ applyWidget : function( table, init, callback ) {
2076
+ table = $( table )[ 0 ]; // in case this is called externally
2077
+ var indx, len, names, widget, time,
2078
+ c = table.config,
2079
+ debug = ts.debug(c, 'core'),
2080
+ widgets = [];
2081
+ // prevent numerous consecutive widget applications
2082
+ if ( init !== false && table.hasInitialized && ( table.isApplyingWidgets || table.isUpdating ) ) {
2083
+ return;
2084
+ }
2085
+ if ( debug ) { time = new Date(); }
2086
+ ts.addWidgetFromClass( table );
2087
+ // prevent "tablesorter-ready" from firing multiple times in a row
2088
+ clearTimeout( c.timerReady );
2089
+ if ( c.widgets.length ) {
2090
+ table.isApplyingWidgets = true;
2091
+ // ensure unique widget ids
2092
+ c.widgets = $.grep( c.widgets, function( val, index ) {
2093
+ return $.inArray( val, c.widgets ) === index;
2094
+ });
2095
+ names = c.widgets || [];
2096
+ len = names.length;
2097
+ // build widget array & add priority as needed
2098
+ for ( indx = 0; indx < len; indx++ ) {
2099
+ widget = ts.getWidgetById( names[ indx ] );
2100
+ if ( widget && widget.id ) {
2101
+ // set priority to 10 if not defined
2102
+ if ( !widget.priority ) { widget.priority = 10; }
2103
+ widgets[ indx ] = widget;
2104
+ } else if ( debug ) {
2105
+ console.warn( '"' + names[ indx ] + '" was enabled, but the widget code has not been loaded!' );
2106
+ }
2107
+ }
2108
+ // sort widgets by priority
2109
+ widgets.sort( function( a, b ) {
2110
+ return a.priority < b.priority ? -1 : a.priority === b.priority ? 0 : 1;
2111
+ });
2112
+ // add/update selected widgets
2113
+ len = widgets.length;
2114
+ if ( debug ) {
2115
+ console[ console.group ? 'group' : 'log' ]( 'Start ' + ( init ? 'initializing' : 'applying' ) + ' widgets' );
2116
+ }
2117
+ for ( indx = 0; indx < len; indx++ ) {
2118
+ widget = widgets[ indx ];
2119
+ if ( widget && widget.id ) {
2120
+ ts.applyWidgetId( table, widget.id, init );
2121
+ }
2122
+ }
2123
+ if ( debug && console.groupEnd ) { console.groupEnd(); }
2124
+ }
2125
+ c.timerReady = setTimeout( function() {
2126
+ table.isApplyingWidgets = false;
2127
+ $.data( table, 'lastWidgetApplication', new Date() );
2128
+ c.$table.triggerHandler( 'tablesorter-ready' );
2129
+ // callback executed on init only
2130
+ if ( !init && typeof callback === 'function' ) {
2131
+ callback( table );
2132
+ }
2133
+ if ( debug ) {
2134
+ widget = c.widgets.length;
2135
+ console.log( 'Completed ' +
2136
+ ( init === true ? 'initializing ' : 'applying ' ) + widget +
2137
+ ' widget' + ( widget !== 1 ? 's' : '' ) + ts.benchmark( time ) );
2138
+ }
2139
+ }, 10 );
2140
+ },
2141
+
2142
+ removeWidget : function( table, name, refreshing ) {
2143
+ table = $( table )[ 0 ];
2144
+ var index, widget, indx, len,
2145
+ c = table.config;
2146
+ // if name === true, add all widgets from $.tablesorter.widgets
2147
+ if ( name === true ) {
2148
+ name = [];
2149
+ len = ts.widgets.length;
2150
+ for ( indx = 0; indx < len; indx++ ) {
2151
+ widget = ts.widgets[ indx ];
2152
+ if ( widget && widget.id ) {
2153
+ name[ name.length ] = widget.id;
2154
+ }
2155
+ }
2156
+ } else {
2157
+ // name can be either an array of widgets names,
2158
+ // or a space/comma separated list of widget names
2159
+ name = ( $.isArray( name ) ? name.join( ',' ) : name || '' ).toLowerCase().split( /[\s,]+/ );
2160
+ }
2161
+ len = name.length;
2162
+ for ( index = 0; index < len; index++ ) {
2163
+ widget = ts.getWidgetById( name[ index ] );
2164
+ indx = $.inArray( name[ index ], c.widgets );
2165
+ // don't remove the widget from config.widget if refreshing
2166
+ if ( indx >= 0 && refreshing !== true ) {
2167
+ c.widgets.splice( indx, 1 );
2168
+ }
2169
+ if ( widget && widget.remove ) {
2170
+ if ( ts.debug(c, 'core') ) {
2171
+ console.log( ( refreshing ? 'Refreshing' : 'Removing' ) + ' "' + name[ index ] + '" widget' );
2172
+ }
2173
+ widget.remove( table, c, c.widgetOptions, refreshing );
2174
+ c.widgetInit[ name[ index ] ] = false;
2175
+ }
2176
+ }
2177
+ c.$table.triggerHandler( 'widgetRemoveEnd', table );
2178
+ },
2179
+
2180
+ refreshWidgets : function( table, doAll, dontapply ) {
2181
+ table = $( table )[ 0 ]; // see issue #243
2182
+ var indx, widget,
2183
+ c = table.config,
2184
+ curWidgets = c.widgets,
2185
+ widgets = ts.widgets,
2186
+ len = widgets.length,
2187
+ list = [],
2188
+ callback = function( table ) {
2189
+ $( table ).triggerHandler( 'refreshComplete' );
2190
+ };
2191
+ // remove widgets not defined in config.widgets, unless doAll is true
2192
+ for ( indx = 0; indx < len; indx++ ) {
2193
+ widget = widgets[ indx ];
2194
+ if ( widget && widget.id && ( doAll || $.inArray( widget.id, curWidgets ) < 0 ) ) {
2195
+ list[ list.length ] = widget.id;
2196
+ }
2197
+ }
2198
+ ts.removeWidget( table, list.join( ',' ), true );
2199
+ if ( dontapply !== true ) {
2200
+ // call widget init if
2201
+ ts.applyWidget( table, doAll || false, callback );
2202
+ if ( doAll ) {
2203
+ // apply widget format
2204
+ ts.applyWidget( table, false, callback );
2205
+ }
2206
+ } else {
2207
+ callback( table );
2208
+ }
2209
+ },
2210
+
2211
+ /*
2212
+ ██ ██ ██████ ██ ██ ██ ██████ ██ ██████ ▄█████
2213
+ ██ ██ ██ ██ ██ ██ ██ ██ ██▄▄ ▀█▄
2214
+ ██ ██ ██ ██ ██ ██ ██ ██ ██▀▀ ▀█▄
2215
+ ▀████▀ ██ ██ ██████ ██ ██ ██ ██████ █████▀
2216
+ */
2217
+ benchmark : function( diff ) {
2218
+ return ( ' (' + ( new Date().getTime() - diff.getTime() ) + ' ms)' );
2219
+ },
2220
+ // deprecated ts.log
2221
+ log : function() {
2222
+ console.log( arguments );
2223
+ },
2224
+ debug : function(c, name) {
2225
+ return c && (
2226
+ c.debug === true ||
2227
+ typeof c.debug === 'string' && c.debug.indexOf(name) > -1
2228
+ );
2229
+ },
2230
+
2231
+ // $.isEmptyObject from jQuery v1.4
2232
+ isEmptyObject : function( obj ) {
2233
+ /*jshint forin: false */
2234
+ for ( var name in obj ) {
2235
+ return false;
2236
+ }
2237
+ return true;
2238
+ },
2239
+
2240
+ isValueInArray : function( column, arry ) {
2241
+ var indx,
2242
+ len = arry && arry.length || 0;
2243
+ for ( indx = 0; indx < len; indx++ ) {
2244
+ if ( arry[ indx ][ 0 ] === column ) {
2245
+ return indx;
2246
+ }
2247
+ }
2248
+ return -1;
2249
+ },
2250
+
2251
+ formatFloat : function( str, table ) {
2252
+ if ( typeof str !== 'string' || str === '' ) { return str; }
2253
+ // allow using formatFloat without a table; defaults to US number format
2254
+ var num,
2255
+ usFormat = table && table.config ? table.config.usNumberFormat !== false :
2256
+ typeof table !== 'undefined' ? table : true;
2257
+ if ( usFormat ) {
2258
+ // US Format - 1,234,567.89 -> 1234567.89
2259
+ str = str.replace( ts.regex.comma, '' );
2260
+ } else {
2261
+ // German Format = 1.234.567,89 -> 1234567.89
2262
+ // French Format = 1 234 567,89 -> 1234567.89
2263
+ str = str.replace( ts.regex.digitNonUS, '' ).replace( ts.regex.comma, '.' );
2264
+ }
2265
+ if ( ts.regex.digitNegativeTest.test( str ) ) {
2266
+ // make (#) into a negative number -> (10) = -10
2267
+ str = str.replace( ts.regex.digitNegativeReplace, '-$1' );
2268
+ }
2269
+ num = parseFloat( str );
2270
+ // return the text instead of zero
2271
+ return isNaN( num ) ? $.trim( str ) : num;
2272
+ },
2273
+
2274
+ isDigit : function( str ) {
2275
+ // replace all unwanted chars and match
2276
+ return isNaN( str ) ?
2277
+ ts.regex.digitTest.test( str.toString().replace( ts.regex.digitReplace, '' ) ) :
2278
+ str !== '';
2279
+ },
2280
+
2281
+ // computeTableHeaderCellIndexes from:
2282
+ // http://www.javascripttoolbox.com/lib/table/examples.php
2283
+ // http://www.javascripttoolbox.com/temp/table_cellindex.html
2284
+ computeColumnIndex : function( $rows, c ) {
2285
+ var i, j, k, l, cell, cells, rowIndex, rowSpan, colSpan, firstAvailCol,
2286
+ // total columns has been calculated, use it to set the matrixrow
2287
+ columns = c && c.columns || 0,
2288
+ matrix = [],
2289
+ matrixrow = new Array( columns );
2290
+ for ( i = 0; i < $rows.length; i++ ) {
2291
+ cells = $rows[ i ].cells;
2292
+ for ( j = 0; j < cells.length; j++ ) {
2293
+ cell = cells[ j ];
2294
+ rowIndex = i;
2295
+ rowSpan = cell.rowSpan || 1;
2296
+ colSpan = cell.colSpan || 1;
2297
+ if ( typeof matrix[ rowIndex ] === 'undefined' ) {
2298
+ matrix[ rowIndex ] = [];
2299
+ }
2300
+ // Find first available column in the first row
2301
+ for ( k = 0; k < matrix[ rowIndex ].length + 1; k++ ) {
2302
+ if ( typeof matrix[ rowIndex ][ k ] === 'undefined' ) {
2303
+ firstAvailCol = k;
2304
+ break;
2305
+ }
2306
+ }
2307
+ // jscs:disable disallowEmptyBlocks
2308
+ if ( columns && cell.cellIndex === firstAvailCol ) {
2309
+ // don't to anything
2310
+ } else if ( cell.setAttribute ) {
2311
+ // jscs:enable disallowEmptyBlocks
2312
+ // add data-column (setAttribute = IE8+)
2313
+ cell.setAttribute( 'data-column', firstAvailCol );
2314
+ } else {
2315
+ // remove once we drop support for IE7 - 1/12/2016
2316
+ $( cell ).attr( 'data-column', firstAvailCol );
2317
+ }
2318
+ for ( k = rowIndex; k < rowIndex + rowSpan; k++ ) {
2319
+ if ( typeof matrix[ k ] === 'undefined' ) {
2320
+ matrix[ k ] = [];
2321
+ }
2322
+ matrixrow = matrix[ k ];
2323
+ for ( l = firstAvailCol; l < firstAvailCol + colSpan; l++ ) {
2324
+ matrixrow[ l ] = 'x';
2325
+ }
2326
+ }
2327
+ }
2328
+ }
2329
+ ts.checkColumnCount($rows, matrix, matrixrow.length);
2330
+ return matrixrow.length;
2331
+ },
2332
+
2333
+ checkColumnCount : function($rows, matrix, columns) {
2334
+ // this DOES NOT report any tbody column issues, except for the math and
2335
+ // and column selector widgets
2336
+ var i, len,
2337
+ valid = true,
2338
+ cells = [];
2339
+ for ( i = 0; i < matrix.length; i++ ) {
2340
+ // some matrix entries are undefined when testing the footer because
2341
+ // it is using the rowIndex property
2342
+ if ( matrix[i] ) {
2343
+ len = matrix[i].length;
2344
+ if ( matrix[i].length !== columns ) {
2345
+ valid = false;
2346
+ break;
2347
+ }
2348
+ }
2349
+ }
2350
+ if ( !valid ) {
2351
+ $rows.each( function( indx, el ) {
2352
+ var cell = el.parentElement.nodeName;
2353
+ if ( cells.indexOf( cell ) < 0 ) {
2354
+ cells.push( cell );
2355
+ }
2356
+ });
2357
+ console.error(
2358
+ 'Invalid or incorrect number of columns in the ' +
2359
+ cells.join( ' or ' ) + '; expected ' + columns +
2360
+ ', but found ' + len + ' columns'
2361
+ );
2362
+ }
2363
+ },
2364
+
2365
+ // automatically add a colgroup with col elements set to a percentage width
2366
+ fixColumnWidth : function( table ) {
2367
+ table = $( table )[ 0 ];
2368
+ var overallWidth, percent, $tbodies, len, index,
2369
+ c = table.config,
2370
+ $colgroup = c.$table.children( 'colgroup' );
2371
+ // remove plugin-added colgroup, in case we need to refresh the widths
2372
+ if ( $colgroup.length && $colgroup.hasClass( ts.css.colgroup ) ) {
2373
+ $colgroup.remove();
2374
+ }
2375
+ if ( c.widthFixed && c.$table.children( 'colgroup' ).length === 0 ) {
2376
+ $colgroup = $( '<colgroup class="' + ts.css.colgroup + '">' );
2377
+ overallWidth = c.$table.width();
2378
+ // only add col for visible columns - fixes #371
2379
+ $tbodies = c.$tbodies.find( 'tr:first' ).children( ':visible' );
2380
+ len = $tbodies.length;
2381
+ for ( index = 0; index < len; index++ ) {
2382
+ percent = parseInt( ( $tbodies.eq( index ).width() / overallWidth ) * 1000, 10 ) / 10 + '%';
2383
+ $colgroup.append( $( '<col>' ).css( 'width', percent ) );
2384
+ }
2385
+ c.$table.prepend( $colgroup );
2386
+ }
2387
+ },
2388
+
2389
+ // get sorter, string, empty, etc options for each column from
2390
+ // jQuery data, metadata, header option or header class name ('sorter-false')
2391
+ // priority = jQuery data > meta > headers option > header class name
2392
+ getData : function( header, configHeader, key ) {
2393
+ var meta, cl4ss,
2394
+ val = '',
2395
+ $header = $( header );
2396
+ if ( !$header.length ) { return ''; }
2397
+ meta = $.metadata ? $header.metadata() : false;
2398
+ cl4ss = ' ' + ( $header.attr( 'class' ) || '' );
2399
+ if ( typeof $header.data( key ) !== 'undefined' ||
2400
+ typeof $header.data( key.toLowerCase() ) !== 'undefined' ) {
2401
+ // 'data-lockedOrder' is assigned to 'lockedorder'; but 'data-locked-order' is assigned to 'lockedOrder'
2402
+ // 'data-sort-initial-order' is assigned to 'sortInitialOrder'
2403
+ val += $header.data( key ) || $header.data( key.toLowerCase() );
2404
+ } else if ( meta && typeof meta[ key ] !== 'undefined' ) {
2405
+ val += meta[ key ];
2406
+ } else if ( configHeader && typeof configHeader[ key ] !== 'undefined' ) {
2407
+ val += configHeader[ key ];
2408
+ } else if ( cl4ss !== ' ' && cl4ss.match( ' ' + key + '-' ) ) {
2409
+ // include sorter class name 'sorter-text', etc; now works with 'sorter-my-custom-parser'
2410
+ val = cl4ss.match( new RegExp( '\\s' + key + '-([\\w-]+)' ) )[ 1 ] || '';
2411
+ }
2412
+ return $.trim( val );
2413
+ },
2414
+
2415
+ getColumnData : function( table, obj, indx, getCell, $headers ) {
2416
+ if ( typeof obj !== 'object' || obj === null ) {
2417
+ return obj;
2418
+ }
2419
+ table = $( table )[ 0 ];
2420
+ var $header, key,
2421
+ c = table.config,
2422
+ $cells = ( $headers || c.$headers ),
2423
+ // c.$headerIndexed is not defined initially
2424
+ $cell = c.$headerIndexed && c.$headerIndexed[ indx ] ||
2425
+ $cells.find( '[data-column="' + indx + '"]:last' );
2426
+ if ( typeof obj[ indx ] !== 'undefined' ) {
2427
+ return getCell ? obj[ indx ] : obj[ $cells.index( $cell ) ];
2428
+ }
2429
+ for ( key in obj ) {
2430
+ if ( typeof key === 'string' ) {
2431
+ $header = $cell
2432
+ // header cell with class/id
2433
+ .filter( key )
2434
+ // find elements within the header cell with cell/id
2435
+ .add( $cell.find( key ) );
2436
+ if ( $header.length ) {
2437
+ return obj[ key ];
2438
+ }
2439
+ }
2440
+ }
2441
+ return;
2442
+ },
2443
+
2444
+ // *** Process table ***
2445
+ // add processing indicator
2446
+ isProcessing : function( $table, toggle, $headers ) {
2447
+ $table = $( $table );
2448
+ var c = $table[ 0 ].config,
2449
+ // default to all headers
2450
+ $header = $headers || $table.find( '.' + ts.css.header );
2451
+ if ( toggle ) {
2452
+ // don't use sortList if custom $headers used
2453
+ if ( typeof $headers !== 'undefined' && c.sortList.length > 0 ) {
2454
+ // get headers from the sortList
2455
+ $header = $header.filter( function() {
2456
+ // get data-column from attr to keep compatibility with jQuery 1.2.6
2457
+ return this.sortDisabled ?
2458
+ false :
2459
+ ts.isValueInArray( parseFloat( $( this ).attr( 'data-column' ) ), c.sortList ) >= 0;
2460
+ });
2461
+ }
2462
+ $table.add( $header ).addClass( ts.css.processing + ' ' + c.cssProcessing );
2463
+ } else {
2464
+ $table.add( $header ).removeClass( ts.css.processing + ' ' + c.cssProcessing );
2465
+ }
2466
+ },
2467
+
2468
+ // detach tbody but save the position
2469
+ // don't use tbody because there are portions that look for a tbody index (updateCell)
2470
+ processTbody : function( table, $tb, getIt ) {
2471
+ table = $( table )[ 0 ];
2472
+ if ( getIt ) {
2473
+ table.isProcessing = true;
2474
+ $tb.before( '<colgroup class="tablesorter-savemyplace"/>' );
2475
+ return $.fn.detach ? $tb.detach() : $tb.remove();
2476
+ }
2477
+ var holdr = $( table ).find( 'colgroup.tablesorter-savemyplace' );
2478
+ $tb.insertAfter( holdr );
2479
+ holdr.remove();
2480
+ table.isProcessing = false;
2481
+ },
2482
+
2483
+ clearTableBody : function( table ) {
2484
+ $( table )[ 0 ].config.$tbodies.children().detach();
2485
+ },
2486
+
2487
+ // used when replacing accented characters during sorting
2488
+ characterEquivalents : {
2489
+ 'a' : '\u00e1\u00e0\u00e2\u00e3\u00e4\u0105\u00e5', // áàâãäąå
2490
+ 'A' : '\u00c1\u00c0\u00c2\u00c3\u00c4\u0104\u00c5', // ÁÀÂÃÄĄÅ
2491
+ 'c' : '\u00e7\u0107\u010d', // çćč
2492
+ 'C' : '\u00c7\u0106\u010c', // ÇĆČ
2493
+ 'e' : '\u00e9\u00e8\u00ea\u00eb\u011b\u0119', // éèêëěę
2494
+ 'E' : '\u00c9\u00c8\u00ca\u00cb\u011a\u0118', // ÉÈÊËĚĘ
2495
+ 'i' : '\u00ed\u00ec\u0130\u00ee\u00ef\u0131', // íìİîïı
2496
+ 'I' : '\u00cd\u00cc\u0130\u00ce\u00cf', // ÍÌİÎÏ
2497
+ 'o' : '\u00f3\u00f2\u00f4\u00f5\u00f6\u014d', // óòôõöō
2498
+ 'O' : '\u00d3\u00d2\u00d4\u00d5\u00d6\u014c', // ÓÒÔÕÖŌ
2499
+ 'ss': '\u00df', // ß (s sharp)
2500
+ 'SS': '\u1e9e', // ẞ (Capital sharp s)
2501
+ 'u' : '\u00fa\u00f9\u00fb\u00fc\u016f', // úùûüů
2502
+ 'U' : '\u00da\u00d9\u00db\u00dc\u016e' // ÚÙÛÜŮ
2503
+ },
2504
+
2505
+ replaceAccents : function( str ) {
2506
+ var chr,
2507
+ acc = '[',
2508
+ eq = ts.characterEquivalents;
2509
+ if ( !ts.characterRegex ) {
2510
+ ts.characterRegexArray = {};
2511
+ for ( chr in eq ) {
2512
+ if ( typeof chr === 'string' ) {
2513
+ acc += eq[ chr ];
2514
+ ts.characterRegexArray[ chr ] = new RegExp( '[' + eq[ chr ] + ']', 'g' );
2515
+ }
2516
+ }
2517
+ ts.characterRegex = new RegExp( acc + ']' );
2518
+ }
2519
+ if ( ts.characterRegex.test( str ) ) {
2520
+ for ( chr in eq ) {
2521
+ if ( typeof chr === 'string' ) {
2522
+ str = str.replace( ts.characterRegexArray[ chr ], chr );
2523
+ }
2524
+ }
2525
+ }
2526
+ return str;
2527
+ },
2528
+
2529
+ validateOptions : function( c ) {
2530
+ var setting, setting2, typ, timer,
2531
+ // ignore options containing an array
2532
+ ignore = 'headers sortForce sortList sortAppend widgets'.split( ' ' ),
2533
+ orig = c.originalSettings;
2534
+ if ( orig ) {
2535
+ if ( ts.debug(c, 'core') ) {
2536
+ timer = new Date();
2537
+ }
2538
+ for ( setting in orig ) {
2539
+ typ = typeof ts.defaults[setting];
2540
+ if ( typ === 'undefined' ) {
2541
+ console.warn( 'Tablesorter Warning! "table.config.' + setting + '" option not recognized' );
2542
+ } else if ( typ === 'object' ) {
2543
+ for ( setting2 in orig[setting] ) {
2544
+ typ = ts.defaults[setting] && typeof ts.defaults[setting][setting2];
2545
+ if ( $.inArray( setting, ignore ) < 0 && typ === 'undefined' ) {
2546
+ console.warn( 'Tablesorter Warning! "table.config.' + setting + '.' + setting2 + '" option not recognized' );
2547
+ }
2548
+ }
2549
+ }
2550
+ }
2551
+ if ( ts.debug(c, 'core') ) {
2552
+ console.log( 'validate options time:' + ts.benchmark( timer ) );
2553
+ }
2554
+ }
2555
+ },
2556
+
2557
+ // restore headers
2558
+ restoreHeaders : function( table ) {
2559
+ var index, $cell,
2560
+ c = $( table )[ 0 ].config,
2561
+ $headers = c.$table.find( c.selectorHeaders ),
2562
+ len = $headers.length;
2563
+ // don't use c.$headers here in case header cells were swapped
2564
+ for ( index = 0; index < len; index++ ) {
2565
+ $cell = $headers.eq( index );
2566
+ // only restore header cells if it is wrapped
2567
+ // because this is also used by the updateAll method
2568
+ if ( $cell.find( '.' + ts.css.headerIn ).length ) {
2569
+ $cell.html( c.headerContent[ index ] );
2570
+ }
2571
+ }
2572
+ },
2573
+
2574
+ destroy : function( table, removeClasses, callback ) {
2575
+ table = $( table )[ 0 ];
2576
+ if ( !table.hasInitialized ) { return; }
2577
+ // remove all widgets
2578
+ ts.removeWidget( table, true, false );
2579
+ var events,
2580
+ $t = $( table ),
2581
+ c = table.config,
2582
+ $h = $t.find( 'thead:first' ),
2583
+ $r = $h.find( 'tr.' + ts.css.headerRow ).removeClass( ts.css.headerRow + ' ' + c.cssHeaderRow ),
2584
+ $f = $t.find( 'tfoot:first > tr' ).children( 'th, td' );
2585
+ if ( removeClasses === false && $.inArray( 'uitheme', c.widgets ) >= 0 ) {
2586
+ // reapply uitheme classes, in case we want to maintain appearance
2587
+ $t.triggerHandler( 'applyWidgetId', [ 'uitheme' ] );
2588
+ $t.triggerHandler( 'applyWidgetId', [ 'zebra' ] );
2589
+ }
2590
+ // remove widget added rows, just in case
2591
+ $h.find( 'tr' ).not( $r ).remove();
2592
+ // disable tablesorter - not using .unbind( namespace ) because namespacing was
2593
+ // added in jQuery v1.4.3 - see http://api.jquery.com/event.namespace/
2594
+ events = 'sortReset update updateRows updateAll updateHeaders updateCell addRows updateComplete sorton ' +
2595
+ 'appendCache updateCache applyWidgetId applyWidgets refreshWidgets removeWidget destroy mouseup mouseleave ' +
2596
+ 'keypress sortBegin sortEnd resetToLoadState '.split( ' ' )
2597
+ .join( c.namespace + ' ' );
2598
+ $t
2599
+ .removeData( 'tablesorter' )
2600
+ .unbind( events.replace( ts.regex.spaces, ' ' ) );
2601
+ c.$headers
2602
+ .add( $f )
2603
+ .removeClass( [ ts.css.header, c.cssHeader, c.cssAsc, c.cssDesc, ts.css.sortAsc, ts.css.sortDesc, ts.css.sortNone ].join( ' ' ) )
2604
+ .removeAttr( 'data-column' )
2605
+ .removeAttr( 'aria-label' )
2606
+ .attr( 'aria-disabled', 'true' );
2607
+ $r
2608
+ .find( c.selectorSort )
2609
+ .unbind( ( 'mousedown mouseup keypress '.split( ' ' ).join( c.namespace + ' ' ) ).replace( ts.regex.spaces, ' ' ) );
2610
+ ts.restoreHeaders( table );
2611
+ $t.toggleClass( ts.css.table + ' ' + c.tableClass + ' tablesorter-' + c.theme, removeClasses === false );
2612
+ $t.removeClass(c.namespace.slice(1));
2613
+ // clear flag in case the plugin is initialized again
2614
+ table.hasInitialized = false;
2615
+ delete table.config.cache;
2616
+ if ( typeof callback === 'function' ) {
2617
+ callback( table );
2618
+ }
2619
+ if ( ts.debug(c, 'core') ) {
2620
+ console.log( 'tablesorter has been removed' );
2621
+ }
2622
+ }
2623
+
2624
+ };
2625
+
2626
+ $.fn.tablesorter = function( settings ) {
2627
+ return this.each( function() {
2628
+ var table = this,
2629
+ // merge & extend config options
2630
+ c = $.extend( true, {}, ts.defaults, settings, ts.instanceMethods );
2631
+ // save initial settings
2632
+ c.originalSettings = settings;
2633
+ // create a table from data (build table widget)
2634
+ if ( !table.hasInitialized && ts.buildTable && this.nodeName !== 'TABLE' ) {
2635
+ // return the table (in case the original target is the table's container)
2636
+ ts.buildTable( table, c );
2637
+ } else {
2638
+ ts.setup( table, c );
2639
+ }
2640
+ });
2641
+ };
2642
+
2643
+ // set up debug logs
2644
+ if ( !( window.console && window.console.log ) ) {
2645
+ // access $.tablesorter.logs for browsers that don't have a console...
2646
+ ts.logs = [];
2647
+ /*jshint -W020 */
2648
+ console = {};
2649
+ console.log = console.warn = console.error = console.table = function() {
2650
+ var arg = arguments.length > 1 ? arguments : arguments[0];
2651
+ ts.logs[ ts.logs.length ] = { date: Date.now(), log: arg };
2652
+ };
2653
+ }
2654
+
2655
+ // add default parsers
2656
+ ts.addParser({
2657
+ id : 'no-parser',
2658
+ is : function() {
2659
+ return false;
2660
+ },
2661
+ format : function() {
2662
+ return '';
2663
+ },
2664
+ type : 'text'
2665
+ });
2666
+
2667
+ ts.addParser({
2668
+ id : 'text',
2669
+ is : function() {
2670
+ return true;
2671
+ },
2672
+ format : function( str, table ) {
2673
+ var c = table.config;
2674
+ if ( str ) {
2675
+ str = $.trim( c.ignoreCase ? str.toLocaleLowerCase() : str );
2676
+ str = c.sortLocaleCompare ? ts.replaceAccents( str ) : str;
2677
+ }
2678
+ return str;
2679
+ },
2680
+ type : 'text'
2681
+ });
2682
+
2683
+ ts.regex.nondigit = /[^\w,. \-()]/g;
2684
+ ts.addParser({
2685
+ id : 'digit',
2686
+ is : function( str ) {
2687
+ return ts.isDigit( str );
2688
+ },
2689
+ format : function( str, table ) {
2690
+ var num = ts.formatFloat( ( str || '' ).replace( ts.regex.nondigit, '' ), table );
2691
+ return str && typeof num === 'number' ? num :
2692
+ str ? $.trim( str && table.config.ignoreCase ? str.toLocaleLowerCase() : str ) : str;
2693
+ },
2694
+ type : 'numeric'
2695
+ });
2696
+
2697
+ ts.regex.currencyReplace = /[+\-,. ]/g;
2698
+ ts.regex.currencyTest = /^\(?\d+[\u00a3$\u20ac\u00a4\u00a5\u00a2?.]|[\u00a3$\u20ac\u00a4\u00a5\u00a2?.]\d+\)?$/;
2699
+ ts.addParser({
2700
+ id : 'currency',
2701
+ is : function( str ) {
2702
+ str = ( str || '' ).replace( ts.regex.currencyReplace, '' );
2703
+ // test for £$€¤¥¢
2704
+ return ts.regex.currencyTest.test( str );
2705
+ },
2706
+ format : function( str, table ) {
2707
+ var num = ts.formatFloat( ( str || '' ).replace( ts.regex.nondigit, '' ), table );
2708
+ return str && typeof num === 'number' ? num :
2709
+ str ? $.trim( str && table.config.ignoreCase ? str.toLocaleLowerCase() : str ) : str;
2710
+ },
2711
+ type : 'numeric'
2712
+ });
2713
+
2714
+ // too many protocols to add them all https://en.wikipedia.org/wiki/URI_scheme
2715
+ // now, this regex can be updated before initialization
2716
+ ts.regex.urlProtocolTest = /^(https?|ftp|file):\/\//;
2717
+ ts.regex.urlProtocolReplace = /(https?|ftp|file):\/\/(www\.)?/;
2718
+ ts.addParser({
2719
+ id : 'url',
2720
+ is : function( str ) {
2721
+ return ts.regex.urlProtocolTest.test( str );
2722
+ },
2723
+ format : function( str ) {
2724
+ return str ? $.trim( str.replace( ts.regex.urlProtocolReplace, '' ) ) : str;
2725
+ },
2726
+ type : 'text'
2727
+ });
2728
+
2729
+ ts.regex.dash = /-/g;
2730
+ ts.regex.isoDate = /^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}/;
2731
+ ts.addParser({
2732
+ id : 'isoDate',
2733
+ is : function( str ) {
2734
+ return ts.regex.isoDate.test( str );
2735
+ },
2736
+ format : function( str ) {
2737
+ var date = str ? new Date( str.replace( ts.regex.dash, '/' ) ) : str;
2738
+ return date instanceof Date && isFinite( date ) ? date.getTime() : str;
2739
+ },
2740
+ type : 'numeric'
2741
+ });
2742
+
2743
+ ts.regex.percent = /%/g;
2744
+ ts.regex.percentTest = /(\d\s*?%|%\s*?\d)/;
2745
+ ts.addParser({
2746
+ id : 'percent',
2747
+ is : function( str ) {
2748
+ return ts.regex.percentTest.test( str ) && str.length < 15;
2749
+ },
2750
+ format : function( str, table ) {
2751
+ return str ? ts.formatFloat( str.replace( ts.regex.percent, '' ), table ) : str;
2752
+ },
2753
+ type : 'numeric'
2754
+ });
2755
+
2756
+ // added image parser to core v2.17.9
2757
+ ts.addParser({
2758
+ id : 'image',
2759
+ is : function( str, table, node, $node ) {
2760
+ return $node.find( 'img' ).length > 0;
2761
+ },
2762
+ format : function( str, table, cell ) {
2763
+ return $( cell ).find( 'img' ).attr( table.config.imgAttr || 'alt' ) || str;
2764
+ },
2765
+ parsed : true, // filter widget flag
2766
+ type : 'text'
2767
+ });
2768
+
2769
+ ts.regex.dateReplace = /(\S)([AP]M)$/i; // used by usLongDate & time parser
2770
+ ts.regex.usLongDateTest1 = /^[A-Z]{3,10}\.?\s+\d{1,2},?\s+(\d{4})(\s+\d{1,2}:\d{2}(:\d{2})?(\s+[AP]M)?)?$/i;
2771
+ ts.regex.usLongDateTest2 = /^\d{1,2}\s+[A-Z]{3,10}\s+\d{4}/i;
2772
+ ts.addParser({
2773
+ id : 'usLongDate',
2774
+ is : function( str ) {
2775
+ // two digit years are not allowed cross-browser
2776
+ // Jan 01, 2013 12:34:56 PM or 01 Jan 2013
2777
+ return ts.regex.usLongDateTest1.test( str ) || ts.regex.usLongDateTest2.test( str );
2778
+ },
2779
+ format : function( str ) {
2780
+ var date = str ? new Date( str.replace( ts.regex.dateReplace, '$1 $2' ) ) : str;
2781
+ return date instanceof Date && isFinite( date ) ? date.getTime() : str;
2782
+ },
2783
+ type : 'numeric'
2784
+ });
2785
+
2786
+ // testing for ##-##-#### or ####-##-##, so it's not perfect; time can be included
2787
+ ts.regex.shortDateTest = /(^\d{1,2}[\/\s]\d{1,2}[\/\s]\d{4})|(^\d{4}[\/\s]\d{1,2}[\/\s]\d{1,2})/;
2788
+ // escaped "-" because JSHint in Firefox was showing it as an error
2789
+ ts.regex.shortDateReplace = /[\-.,]/g;
2790
+ // XXY covers MDY & DMY formats
2791
+ ts.regex.shortDateXXY = /(\d{1,2})[\/\s](\d{1,2})[\/\s](\d{4})/;
2792
+ ts.regex.shortDateYMD = /(\d{4})[\/\s](\d{1,2})[\/\s](\d{1,2})/;
2793
+ ts.convertFormat = function( dateString, format ) {
2794
+ dateString = ( dateString || '' )
2795
+ .replace( ts.regex.spaces, ' ' )
2796
+ .replace( ts.regex.shortDateReplace, '/' );
2797
+ if ( format === 'mmddyyyy' ) {
2798
+ dateString = dateString.replace( ts.regex.shortDateXXY, '$3/$1/$2' );
2799
+ } else if ( format === 'ddmmyyyy' ) {
2800
+ dateString = dateString.replace( ts.regex.shortDateXXY, '$3/$2/$1' );
2801
+ } else if ( format === 'yyyymmdd' ) {
2802
+ dateString = dateString.replace( ts.regex.shortDateYMD, '$1/$2/$3' );
2803
+ }
2804
+ var date = new Date( dateString );
2805
+ return date instanceof Date && isFinite( date ) ? date.getTime() : '';
2806
+ };
2807
+
2808
+ ts.addParser({
2809
+ id : 'shortDate', // 'mmddyyyy', 'ddmmyyyy' or 'yyyymmdd'
2810
+ is : function( str ) {
2811
+ str = ( str || '' ).replace( ts.regex.spaces, ' ' ).replace( ts.regex.shortDateReplace, '/' );
2812
+ return ts.regex.shortDateTest.test( str );
2813
+ },
2814
+ format : function( str, table, cell, cellIndex ) {
2815
+ if ( str ) {
2816
+ var c = table.config,
2817
+ $header = c.$headerIndexed[ cellIndex ],
2818
+ format = $header.length && $header.data( 'dateFormat' ) ||
2819
+ ts.getData( $header, ts.getColumnData( table, c.headers, cellIndex ), 'dateFormat' ) ||
2820
+ c.dateFormat;
2821
+ // save format because getData can be slow...
2822
+ if ( $header.length ) {
2823
+ $header.data( 'dateFormat', format );
2824
+ }
2825
+ return ts.convertFormat( str, format ) || str;
2826
+ }
2827
+ return str;
2828
+ },
2829
+ type : 'numeric'
2830
+ });
2831
+
2832
+ // match 24 hour time & 12 hours time + am/pm - see http://regexr.com/3c3tk
2833
+ ts.regex.timeTest = /^(0?[1-9]|1[0-2]):([0-5]\d)(\s[AP]M)$|^((?:[01]\d|[2][0-4]):[0-5]\d)$/i;
2834
+ ts.regex.timeMatch = /(0?[1-9]|1[0-2]):([0-5]\d)(\s[AP]M)|((?:[01]\d|[2][0-4]):[0-5]\d)/i;
2835
+ ts.addParser({
2836
+ id : 'time',
2837
+ is : function( str ) {
2838
+ return ts.regex.timeTest.test( str );
2839
+ },
2840
+ format : function( str ) {
2841
+ // isolate time... ignore month, day and year
2842
+ var temp,
2843
+ timePart = ( str || '' ).match( ts.regex.timeMatch ),
2844
+ orig = new Date( str ),
2845
+ // no time component? default to 00:00 by leaving it out, but only if str is defined
2846
+ time = str && ( timePart !== null ? timePart[ 0 ] : '00:00 AM' ),
2847
+ date = time ? new Date( '2000/01/01 ' + time.replace( ts.regex.dateReplace, '$1 $2' ) ) : time;
2848
+ if ( date instanceof Date && isFinite( date ) ) {
2849
+ temp = orig instanceof Date && isFinite( orig ) ? orig.getTime() : 0;
2850
+ // if original string was a valid date, add it to the decimal so the column sorts in some kind of order
2851
+ // luckily new Date() ignores the decimals
2852
+ return temp ? parseFloat( date.getTime() + '.' + orig.getTime() ) : date.getTime();
2853
+ }
2854
+ return str;
2855
+ },
2856
+ type : 'numeric'
2857
+ });
2858
+
2859
+ ts.addParser({
2860
+ id : 'metadata',
2861
+ is : function() {
2862
+ return false;
2863
+ },
2864
+ format : function( str, table, cell ) {
2865
+ var c = table.config,
2866
+ p = ( !c.parserMetadataName ) ? 'sortValue' : c.parserMetadataName;
2867
+ return $( cell ).metadata()[ p ];
2868
+ },
2869
+ type : 'numeric'
2870
+ });
2871
+
2872
+ /*
2873
+ ██████ ██████ █████▄ █████▄ ▄████▄
2874
+ ▄█▀ ██▄▄ ██▄▄██ ██▄▄██ ██▄▄██
2875
+ ▄█▀ ██▀▀ ██▀▀██ ██▀▀█ ██▀▀██
2876
+ ██████ ██████ █████▀ ██ ██ ██ ██
2877
+ */
2878
+ // add default widgets
2879
+ ts.addWidget({
2880
+ id : 'zebra',
2881
+ priority : 90,
2882
+ format : function( table, c, wo ) {
2883
+ var $visibleRows, $row, count, isEven, tbodyIndex, rowIndex, len,
2884
+ child = new RegExp( c.cssChildRow, 'i' ),
2885
+ $tbodies = c.$tbodies.add( $( c.namespace + '_extra_table' ).children( 'tbody:not(.' + c.cssInfoBlock + ')' ) );
2886
+ for ( tbodyIndex = 0; tbodyIndex < $tbodies.length; tbodyIndex++ ) {
2887
+ // loop through the visible rows
2888
+ count = 0;
2889
+ $visibleRows = $tbodies.eq( tbodyIndex ).children( 'tr:visible' ).not( c.selectorRemove );
2890
+ len = $visibleRows.length;
2891
+ for ( rowIndex = 0; rowIndex < len; rowIndex++ ) {
2892
+ $row = $visibleRows.eq( rowIndex );
2893
+ // style child rows the same way the parent row was styled
2894
+ if ( !child.test( $row[ 0 ].className ) ) { count++; }
2895
+ isEven = ( count % 2 === 0 );
2896
+ $row
2897
+ .removeClass( wo.zebra[ isEven ? 1 : 0 ] )
2898
+ .addClass( wo.zebra[ isEven ? 0 : 1 ] );
2899
+ }
2900
+ }
2901
+ },
2902
+ remove : function( table, c, wo, refreshing ) {
2903
+ if ( refreshing ) { return; }
2904
+ var tbodyIndex, $tbody,
2905
+ $tbodies = c.$tbodies,
2906
+ toRemove = ( wo.zebra || [ 'even', 'odd' ] ).join( ' ' );
2907
+ for ( tbodyIndex = 0; tbodyIndex < $tbodies.length; tbodyIndex++ ) {
2908
+ $tbody = ts.processTbody( table, $tbodies.eq( tbodyIndex ), true ); // remove tbody
2909
+ $tbody.children().removeClass( toRemove );
2910
+ ts.processTbody( table, $tbody, false ); // restore tbody
2911
+ }
2912
+ }
2913
+ });
2914
+
2915
+ })( jQuery );
2916
  return jQuery.tablesorter;}));
js/tablesorter/jquery.tablesorter.min.js CHANGED
@@ -1 +1 @@
1
- !function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){return function(A){"use strict";var L=A.tablesorter={version:"2.31.2",parsers:[],widgets:[],defaults:{theme:"default",widthFixed:!1,showProcessing:!1,headerTemplate:"{content}",onRenderTemplate:null,onRenderHeader:null,cancelSelection:!0,tabIndex:!0,dateFormat:"mmddyyyy",sortMultiSortKey:"shiftKey",sortResetKey:"ctrlKey",usNumberFormat:!0,delayInit:!1,serverSideSorting:!1,resort:!0,headers:{},ignoreCase:!0,sortForce:null,sortList:[],sortAppend:null,sortStable:!1,sortInitialOrder:"asc",sortLocaleCompare:!1,sortReset:!1,sortRestart:!1,emptyTo:"bottom",stringTo:"max",duplicateSpan:!0,textExtraction:"basic",textAttribute:"data-text",textSorter:null,numberSorter:null,initWidgets:!0,widgetClass:"widget-{name}",widgets:[],widgetOptions:{zebra:["even","odd"]},initialized:null,tableClass:"",cssAsc:"",cssDesc:"",cssNone:"",cssHeader:"",cssHeaderRow:"",cssProcessing:"",cssChildRow:"tablesorter-childRow",cssInfoBlock:"tablesorter-infoOnly",cssNoSort:"tablesorter-noSort",cssIgnoreRow:"tablesorter-ignoreRow",cssIcon:"tablesorter-icon",cssIconNone:"",cssIconAsc:"",cssIconDesc:"",cssIconDisabled:"",pointerClick:"click",pointerDown:"mousedown",pointerUp:"mouseup",selectorHeaders:"> thead th, > thead td",selectorSort:"th, td",selectorRemove:".remove-me",debug:!1,headerList:[],empties:{},strings:{},parsers:[],globalize:0,imgAttr:0},css:{table:"tablesorter",cssHasChild:"tablesorter-hasChildRow",childRow:"tablesorter-childRow",colgroup:"tablesorter-colgroup",header:"tablesorter-header",headerRow:"tablesorter-headerRow",headerIn:"tablesorter-header-inner",icon:"tablesorter-icon",processing:"tablesorter-processing",sortAsc:"tablesorter-headerAsc",sortDesc:"tablesorter-headerDesc",sortNone:"tablesorter-headerUnSorted"},language:{sortAsc:"Ascending sort applied, ",sortDesc:"Descending sort applied, ",sortNone:"No sort applied, ",sortDisabled:"sorting is disabled",nextAsc:"activate to apply an ascending sort",nextDesc:"activate to apply a descending sort",nextNone:"activate to remove the sort"},regex:{templateContent:/\{content\}/g,templateIcon:/\{icon\}/g,templateName:/\{name\}/i,spaces:/\s+/g,nonWord:/\W/g,formElements:/(input|select|button|textarea)/i,chunk:/(^([+\-]?(?:\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?)?$|^0x[0-9a-f]+$|\d+)/gi,chunks:/(^\\0|\\0$)/,hex:/^0x[0-9a-f]+$/i,comma:/,/g,digitNonUS:/[\s|\.]/g,digitNegativeTest:/^\s*\([.\d]+\)/,digitNegativeReplace:/^\s*\(([.\d]+)\)/,digitTest:/^[\-+(]?\d+[)]?$/,digitReplace:/[,.'"\s]/g},string:{max:1,min:-1,emptymin:1,emptymax:-1,zero:0,none:0,"null":0,top:!0,bottom:!1},keyCodes:{enter:13},dates:{},instanceMethods:{},setup:function(t,r){if(t&&t.tHead&&0!==t.tBodies.length&&!0!==t.hasInitialized){var e,o="",s=A(t),a=A.metadata;t.hasInitialized=!1,t.isProcessing=!0,t.config=r,A.data(t,"tablesorter",r),L.debug(r,"core")&&(console[console.group?"group":"log"]("Initializing tablesorter v"+L.version),A.data(t,"startoveralltimer",new Date)),r.supportsDataObject=((e=A.fn.jquery.split("."))[0]=parseInt(e[0],10),1<e[0]||1===e[0]&&4<=parseInt(e[1],10)),r.emptyTo=r.emptyTo.toLowerCase(),r.stringTo=r.stringTo.toLowerCase(),r.last={sortList:[],clickedIndex:-1},/tablesorter\-/.test(s.attr("class"))||(o=""!==r.theme?" tablesorter-"+r.theme:""),r.namespace?r.namespace="."+r.namespace.replace(L.regex.nonWord,""):r.namespace=".tablesorter"+Math.random().toString(16).slice(2),r.table=t,r.$table=s.addClass(L.css.table+" "+r.tableClass+o+" "+r.namespace.slice(1)).attr("role","grid"),r.$headers=s.find(r.selectorHeaders),r.$table.children().children("tr").attr("role","row"),r.$tbodies=s.children("tbody:not(."+r.cssInfoBlock+")").attr({"aria-live":"polite","aria-relevant":"all"}),r.$table.children("caption").length&&((o=r.$table.children("caption")[0]).id||(o.id=r.namespace.slice(1)+"caption"),r.$table.attr("aria-labelledby",o.id)),r.widgetInit={},r.textExtraction=r.$table.attr("data-text-extraction")||r.textExtraction||"basic",L.buildHeaders(r),L.fixColumnWidth(t),L.addWidgetFromClass(t),L.applyWidgetOptions(t),L.setupParsers(r),r.totalRows=0,r.debug&&L.validateOptions(r),r.delayInit||L.buildCache(r),L.bindEvents(t,r.$headers,!0),L.bindMethods(r),r.supportsDataObject&&void 0!==s.data().sortlist?r.sortList=s.data().sortlist:a&&s.metadata()&&s.metadata().sortlist&&(r.sortList=s.metadata().sortlist),L.applyWidget(t,!0),0<r.sortList.length?(r.last.sortList=r.sortList,L.sortOn(r,r.sortList,{},!r.initWidgets)):(L.setHeadersCss(r),r.initWidgets&&L.applyWidget(t,!1)),r.showProcessing&&s.unbind("sortBegin"+r.namespace+" sortEnd"+r.namespace).bind("sortBegin"+r.namespace+" sortEnd"+r.namespace,function(e){clearTimeout(r.timerProcessing),L.isProcessing(t),"sortBegin"===e.type&&(r.timerProcessing=setTimeout(function(){L.isProcessing(t,!0)},500))}),t.hasInitialized=!0,t.isProcessing=!1,L.debug(r,"core")&&(console.log("Overall initialization time:"+L.benchmark(A.data(t,"startoveralltimer"))),L.debug(r,"core")&&console.groupEnd&&console.groupEnd()),s.triggerHandler("tablesorter-initialized",t),"function"==typeof r.initialized&&r.initialized(t)}else L.debug(r,"core")&&(t.hasInitialized?console.warn("Stopping initialization. Tablesorter has already been initialized"):console.error("Stopping initialization! No table, thead or tbody",t))},bindMethods:function(r){var e=r.$table,t=r.namespace,o="sortReset update updateRows updateAll updateHeaders addRows updateCell updateComplete sorton appendCache updateCache applyWidgetId applyWidgets refreshWidgets destroy mouseup mouseleave ".split(" ").join(t+" ");e.unbind(o.replace(L.regex.spaces," ")).bind("sortReset"+t,function(e,t){e.stopPropagation(),L.sortReset(this.config,function(e){e.isApplyingWidgets?setTimeout(function(){L.applyWidget(e,"",t)},100):L.applyWidget(e,"",t)})}).bind("updateAll"+t,function(e,t,r){e.stopPropagation(),L.updateAll(this.config,t,r)}).bind("update"+t+" updateRows"+t,function(e,t,r){e.stopPropagation(),L.update(this.config,t,r)}).bind("updateHeaders"+t,function(e,t){e.stopPropagation(),L.updateHeaders(this.config,t)}).bind("updateCell"+t,function(e,t,r,o){e.stopPropagation(),L.updateCell(this.config,t,r,o)}).bind("addRows"+t,function(e,t,r,o){e.stopPropagation(),L.addRows(this.config,t,r,o)}).bind("updateComplete"+t,function(){this.isUpdating=!1}).bind("sorton"+t,function(e,t,r,o){e.stopPropagation(),L.sortOn(this.config,t,r,o)}).bind("appendCache"+t,function(e,t,r){e.stopPropagation(),L.appendCache(this.config,r),A.isFunction(t)&&t(this)}).bind("updateCache"+t,function(e,t,r){e.stopPropagation(),L.updateCache(this.config,t,r)}).bind("applyWidgetId"+t,function(e,t){e.stopPropagation(),L.applyWidgetId(this,t)}).bind("applyWidgets"+t,function(e,t){e.stopPropagation(),L.applyWidget(this,!1,t)}).bind("refreshWidgets"+t,function(e,t,r){e.stopPropagation(),L.refreshWidgets(this,t,r)}).bind("removeWidget"+t,function(e,t,r){e.stopPropagation(),L.removeWidget(this,t,r)}).bind("destroy"+t,function(e,t,r){e.stopPropagation(),L.destroy(this,t,r)}).bind("resetToLoadState"+t,function(e){e.stopPropagation(),L.removeWidget(this,!0,!1);var t=A.extend(!0,{},r.originalSettings);(r=A.extend(!0,{},L.defaults,t)).originalSettings=t,this.hasInitialized=!1,L.setup(this,r)})},bindEvents:function(e,t,r){var o,i=(e=A(e)[0]).config,s=i.namespace,d=null;!0!==r&&(t.addClass(s.slice(1)+"_extra_headers"),(o=L.getClosest(t,"table")).length&&"TABLE"===o[0].nodeName&&o[0]!==e&&A(o[0]).addClass(s.slice(1)+"_extra_table")),o=(i.pointerDown+" "+i.pointerUp+" "+i.pointerClick+" sort keyup ").replace(L.regex.spaces," ").split(" ").join(s+" "),t.find(i.selectorSort).add(t.filter(i.selectorSort)).unbind(o).bind(o,function(e,t){var r,o,s,a=A(e.target),n=" "+e.type+" ";if(!(1!==(e.which||e.button)&&!n.match(" "+i.pointerClick+" | sort | keyup ")||" keyup "===n&&e.which!==L.keyCodes.enter||n.match(" "+i.pointerClick+" ")&&void 0!==e.which||n.match(" "+i.pointerUp+" ")&&d!==e.target&&!0!==t)){if(n.match(" "+i.pointerDown+" "))return d=e.target,void("1"===(s=a.jquery.split("."))[0]&&s[1]<4&&e.preventDefault());if(d=null,r=L.getClosest(A(this),"."+L.css.header),L.regex.formElements.test(e.target.nodeName)||a.hasClass(i.cssNoSort)||0<a.parents("."+i.cssNoSort).length||r.hasClass("sorter-false")||0<a.parents("button").length)return!i.cancelSelection;i.delayInit&&L.isEmptyObject(i.cache)&&L.buildCache(i),i.last.clickedIndex=r.attr("data-column")||r.index(),(o=i.$headerIndexed[i.last.clickedIndex][0])&&!o.sortDisabled&&L.initSort(i,o,e)}}),i.cancelSelection&&t.attr("unselectable","on").bind("selectstart",!1).css({"user-select":"none",MozUserSelect:"none"})},buildHeaders:function(d){var e,l,t,r;for(d.headerList=[],d.headerContent=[],d.sortVars=[],L.debug(d,"core")&&(t=new Date),d.columns=L.computeColumnIndex(d.$table.children("thead, tfoot").children("tr")),l=d.cssIcon?'<i class="'+(d.cssIcon===L.css.icon?L.css.icon:d.cssIcon+" "+L.css.icon)+'"></i>':"",d.$headers=A(A.map(d.$table.find(d.selectorHeaders),function(e,t){var r,o,s,a,n,i=A(e);if(!L.getClosest(i,"tr").hasClass(d.cssIgnoreRow))return/(th|td)/i.test(e.nodeName)||(n=L.getClosest(i,"th, td"),i.attr("data-column",n.attr("data-column"))),r=L.getColumnData(d.table,d.headers,t,!0),d.headerContent[t]=i.html(),""===d.headerTemplate||i.find("."+L.css.headerIn).length||(a=d.headerTemplate.replace(L.regex.templateContent,i.html()).replace(L.regex.templateIcon,i.find("."+L.css.icon).length?"":l),d.onRenderTemplate&&(o=d.onRenderTemplate.apply(i,[t,a]))&&"string"==typeof o&&(a=o),i.html('<div class="'+L.css.headerIn+'">'+a+"</div>")),d.onRenderHeader&&d.onRenderHeader.apply(i,[t,d,d.$table]),s=parseInt(i.attr("data-column"),10),e.column=s,n=L.getOrder(L.getData(i,r,"sortInitialOrder")||d.sortInitialOrder),d.sortVars[s]={count:-1,order:n?d.sortReset?[1,0,2]:[1,0]:d.sortReset?[0,1,2]:[0,1],lockedOrder:!1,sortedBy:""},void 0!==(n=L.getData(i,r,"lockedOrder")||!1)&&!1!==n&&(d.sortVars[s].lockedOrder=!0,d.sortVars[s].order=L.getOrder(n)?[1,1]:[0,0]),d.headerList[t]=e,i.addClass(L.css.header+" "+d.cssHeader),L.getClosest(i,"tr").addClass(L.css.headerRow+" "+d.cssHeaderRow).attr("role","row"),d.tabIndex&&i.attr("tabindex",0),e})),d.$headerIndexed=[],r=0;r<d.columns;r++)L.isEmptyObject(d.sortVars[r])&&(d.sortVars[r]={}),e=d.$headers.filter('[data-column="'+r+'"]'),d.$headerIndexed[r]=e.length?e.not(".sorter-false").length?e.not(".sorter-false").filter(":last"):e.filter(":last"):A();d.$table.find(d.selectorHeaders).attr({scope:"col",role:"columnheader"}),L.updateHeader(d),L.debug(d,"core")&&(console.log("Built headers:"+L.benchmark(t)),console.log(d.$headers))},addInstanceMethods:function(e){A.extend(L.instanceMethods,e)},setupParsers:function(e,t){var r,o,s,a,n,i,d,l,c,g,p,u,f,h,m=e.table,b=0,y=L.debug(e,"core"),w={};if(e.$tbodies=e.$table.children("tbody:not(."+e.cssInfoBlock+")"),0===(h=(f=void 0===t?e.$tbodies:t).length))return y?console.warn("Warning: *Empty table!* Not building a parser cache"):"";for(y&&(u=new Date,console[console.group?"group":"log"]("Detecting parsers for each column")),o={extractors:[],parsers:[]};b<h;){if((r=f[b].rows).length)for(n=0,a=e.columns,i=0;i<a;i++){if((d=e.$headerIndexed[n])&&d.length&&(l=L.getColumnData(m,e.headers,n),p=L.getParserById(L.getData(d,l,"extractor")),g=L.getParserById(L.getData(d,l,"sorter")),c="false"===L.getData(d,l,"parser"),e.empties[n]=(L.getData(d,l,"empty")||e.emptyTo||(e.emptyToBottom?"bottom":"top")).toLowerCase(),e.strings[n]=(L.getData(d,l,"string")||e.stringTo||"max").toLowerCase(),c&&(g=L.getParserById("no-parser")),p=p||!1,g=g||L.detectParserForColumn(e,r,-1,n),y&&(w["("+n+") "+d.text()]={parser:g.id,extractor:p?p.id:"none",string:e.strings[n],empty:e.empties[n]}),o.parsers[n]=g,o.extractors[n]=p,0<(s=d[0].colSpan-1)))for(n+=s,a+=s;0<s+1;)o.parsers[n-s]=g,o.extractors[n-s]=p,s--;n++}b+=o.parsers.length?h:1}y&&(L.isEmptyObject(w)?console.warn(" No parsers detected!"):console[console.table?"table":"log"](w),console.log("Completed detecting parsers"+L.benchmark(u)),console.groupEnd&&console.groupEnd()),e.parsers=o.parsers,e.extractors=o.extractors},addParser:function(e){var t,r=L.parsers.length,o=!0;for(t=0;t<r;t++)L.parsers[t].id.toLowerCase()===e.id.toLowerCase()&&(o=!1);o&&(L.parsers[L.parsers.length]=e)},getParserById:function(e){if("false"==e)return!1;var t,r=L.parsers.length;for(t=0;t<r;t++)if(L.parsers[t].id.toLowerCase()===e.toString().toLowerCase())return L.parsers[t];return!1},detectParserForColumn:function(e,t,r,o){for(var s,a,n,i=L.parsers.length,d=!1,l="",c=L.debug(e,"core"),g=!0;""===l&&g;)(n=t[++r])&&r<50?n.className.indexOf(L.cssIgnoreRow)<0&&(d=t[r].cells[o],l=L.getElementText(e,d,o),a=A(d),c&&console.log("Checking if value was empty on row "+r+", column: "+o+': "'+l+'"')):g=!1;for(;0<=--i;)if((s=L.parsers[i])&&"text"!==s.id&&s.is&&s.is(l,e.table,d,a))return s;return L.getParserById("text")},getElementText:function(e,t,r){if(!t)return"";var o,s=e.textExtraction||"",a=t.jquery?t:A(t);return"string"==typeof s?"basic"===s&&void 0!==(o=a.attr(e.textAttribute))?A.trim(o):A.trim(t.textContent||a.text()):"function"==typeof s?A.trim(s(a[0],e.table,r)):"function"==typeof(o=L.getColumnData(e.table,s,r))?A.trim(o(a[0],e.table,r)):A.trim(a[0].textContent||a.text())},getParsedText:function(e,t,r,o){void 0===o&&(o=L.getElementText(e,t,r));var s=""+o,a=e.parsers[r],n=e.extractors[r];return a&&(n&&"function"==typeof n.format&&(o=n.format(o,e.table,t,r)),s="no-parser"===a.id?"":a.format(""+o,e.table,t,r),e.ignoreCase&&"string"==typeof s&&(s=s.toLowerCase())),s},buildCache:function(e,t,r){var o,s,a,n,i,d,l,c,g,p,u,f,h,m,b,y,w,x,v,C,$,I,D=e.table,R=e.parsers,T=L.debug(e,"core");if(e.$tbodies=e.$table.children("tbody:not(."+e.cssInfoBlock+")"),l=void 0===r?e.$tbodies:r,e.cache={},e.totalRows=0,!R)return T?console.warn("Warning: *Empty table!* Not building a cache"):"";for(T&&(f=new Date),e.showProcessing&&L.isProcessing(D,!0),d=0;d<l.length;d++){for(y=[],o=e.cache[d]={normalized:[]},h=l[d]&&l[d].rows.length||0,n=0;n<h;++n)if(m={child:[],raw:[]},g=[],!(c=A(l[d].rows[n])).hasClass(e.selectorRemove.slice(1)))if(c.hasClass(e.cssChildRow)&&0!==n)for($=o.normalized.length-1,(b=o.normalized[$][e.columns]).$row=b.$row.add(c),c.prev().hasClass(e.cssChildRow)||c.prev().addClass(L.css.cssHasChild),p=c.children("th, td"),$=b.child.length,b.child[$]=[],x=0,C=e.columns,i=0;i<C;i++)(u=p[i])&&(b.child[$][i]=L.getParsedText(e,u,i),0<(w=p[i].colSpan-1)&&(x+=w,C+=w)),x++;else{for(m.$row=c,m.order=n,x=0,C=e.columns,i=0;i<C;++i){if((u=c[0].cells[i])&&x<e.columns&&(!(v=void 0!==R[x])&&T&&console.warn("No parser found for row: "+n+", column: "+i+'; cell containing: "'+A(u).text()+'"; does it have a header?'),s=L.getElementText(e,u,x),m.raw[x]=s,a=L.getParsedText(e,u,x,s),g[x]=a,v&&"numeric"===(R[x].type||"").toLowerCase()&&(y[x]=Math.max(Math.abs(a)||0,y[x]||0)),0<(w=u.colSpan-1))){for(I=0;I<=w;)a=e.duplicateSpan||0===I?s:"string"!=typeof e.textExtraction&&L.getElementText(e,u,x+I)||"",m.raw[x+I]=a,g[x+I]=a,I++;x+=w,C+=w}x++}g[e.columns]=m,o.normalized[o.normalized.length]=g}o.colMax=y,e.totalRows+=o.normalized.length}if(e.showProcessing&&L.isProcessing(D),T){for($=Math.min(5,e.cache[0].normalized.length),console[console.group?"group":"log"]("Building cache for "+e.totalRows+" rows (showing "+$+" rows in log) and "+e.columns+" columns"+L.benchmark(f)),s={},i=0;i<e.columns;i++)for(x=0;x<$;x++)s["row: "+x]||(s["row: "+x]={}),s["row: "+x][e.$headerIndexed[i].text()]=e.cache[0].normalized[x][i];console[console.table?"table":"log"](s),console.groupEnd&&console.groupEnd()}A.isFunction(t)&&t(D)},getColumnText:function(e,t,r,o){var s,a,n,i,d,l,c,g,p,u,f="function"==typeof r,h="all"===t,m={raw:[],parsed:[],$cell:[]},b=(e=A(e)[0]).config;if(!L.isEmptyObject(b)){for(d=b.$tbodies.length,s=0;s<d;s++)for(l=(n=b.cache[s].normalized).length,a=0;a<l;a++)i=n[a],o&&!i[b.columns].$row.is(o)||(u=!0,g=h?i.slice(0,b.columns):i[t],i=i[b.columns],c=h?i.raw:i.raw[t],p=h?i.$row.children():i.$row.children().eq(t),f&&(u=r({tbodyIndex:s,rowIndex:a,parsed:g,raw:c,$row:i.$row,$cell:p})),!1!==u&&(m.parsed[m.parsed.length]=g,m.raw[m.raw.length]=c,m.$cell[m.$cell.length]=p));return m}L.debug(b,"core")&&console.warn("No cache found - aborting getColumnText function!")},setHeadersCss:function(a){function e(e,t){e.removeClass(n).addClass(i[t]).attr("aria-sort",l[t]).find("."+L.css.icon).removeClass(d[2]).addClass(d[t])}var t,r,o=a.sortList,s=o.length,n=L.css.sortNone+" "+a.cssNone,i=[L.css.sortAsc+" "+a.cssAsc,L.css.sortDesc+" "+a.cssDesc],d=[a.cssIconAsc,a.cssIconDesc,a.cssIconNone],l=["ascending","descending"],c=a.$table.find("tfoot tr").children("td, th").add(A(a.namespace+"_extra_headers")).removeClass(i.join(" ")),g=a.$headers.add(A("thead "+a.namespace+"_extra_headers")).removeClass(i.join(" ")).addClass(n).attr("aria-sort","none").find("."+L.css.icon).removeClass(d.join(" ")).end();for(g.not(".sorter-false").find("."+L.css.icon).addClass(d[2]),a.cssIconDisabled&&g.filter(".sorter-false").find("."+L.css.icon).addClass(a.cssIconDisabled),t=0;t<s;t++)if(2!==o[t][1]){if((g=(g=a.$headers.filter(function(e){for(var t=!0,r=a.$headers.eq(e),o=parseInt(r.attr("data-column"),10),s=o+L.getClosest(r,"th, td")[0].colSpan;o<s;o++)t=!!t&&(t||-1<L.isValueInArray(o,a.sortList));return t})).not(".sorter-false").filter('[data-column="'+o[t][0]+'"]'+(1===s?":last":""))).length)for(r=0;r<g.length;r++)g[r].sortDisabled||e(g.eq(r),o[t][1]);c.length&&e(c.filter('[data-column="'+o[t][0]+'"]'),o[t][1])}for(s=a.$headers.length,t=0;t<s;t++)L.setColumnAriaLabel(a,a.$headers.eq(t))},getClosest:function(e,t){return A.fn.closest?e.closest(t):e.is(t)?e:e.parents(t).filter(":first")},setColumnAriaLabel:function(e,t,r){if(t.length){var o=parseInt(t.attr("data-column"),10),s=e.sortVars[o],a=t.hasClass(L.css.sortAsc)?"sortAsc":t.hasClass(L.css.sortDesc)?"sortDesc":"sortNone",n=A.trim(t.text())+": "+L.language[a];t.hasClass("sorter-false")||!1===r?n+=L.language.sortDisabled:(a=(s.count+1)%s.order.length,r=s.order[a],n+=L.language[0===r?"nextAsc":1===r?"nextDesc":"nextNone"]),t.attr("aria-label",n),s.sortedBy?t.attr("data-sortedBy",s.sortedBy):t.removeAttr("data-sortedBy")}},updateHeader:function(e){var t,r,o,s,a=e.table,n=e.$headers.length;for(t=0;t<n;t++)o=e.$headers.eq(t),s=L.getColumnData(a,e.headers,t,!0),r="false"===L.getData(o,s,"sorter")||"false"===L.getData(o,s,"parser"),L.setColumnSort(e,o,r)},setColumnSort:function(e,t,r){var o=e.table.id;t[0].sortDisabled=r,t[r?"addClass":"removeClass"]("sorter-false").attr("aria-disabled",""+r),e.tabIndex&&(r?t.removeAttr("tabindex"):t.attr("tabindex","0")),o&&(r?t.removeAttr("aria-controls"):t.attr("aria-controls",o))},updateHeaderSortCount:function(e,t){var r,o,s,a,n,i,d,l,c=t||e.sortList,g=c.length;for(e.sortList=[],a=0;a<g;a++)if(d=c[a],(r=parseInt(d[0],10))<e.columns){switch(e.sortVars[r].order||(l=L.getOrder(e.sortInitialOrder)?e.sortReset?[1,0,2]:[1,0]:e.sortReset?[0,1,2]:[0,1],e.sortVars[r].order=l,e.sortVars[r].count=0),l=e.sortVars[r].order,o=(o=(""+d[1]).match(/^(1|d|s|o|n)/))?o[0]:""){case"1":case"d":o=1;break;case"s":o=n||0;break;case"o":o=0===(i=l[(n||0)%l.length])?1:1===i?0:2;break;case"n":o=l[++e.sortVars[r].count%l.length];break;default:o=0}n=0===a?o:n,s=[r,parseInt(o,10)||0],e.sortList[e.sortList.length]=s,o=A.inArray(s[1],l),e.sortVars[r].count=0<=o?o:s[1]%l.length}},updateAll:function(e,t,r){var o=e.table;o.isUpdating=!0,L.refreshWidgets(o,!0,!0),L.buildHeaders(e),L.bindEvents(o,e.$headers,!0),L.bindMethods(e),L.commonUpdate(e,t,r)},update:function(e,t,r){e.table.isUpdating=!0,L.updateHeader(e),L.commonUpdate(e,t,r)},updateHeaders:function(e,t){e.table.isUpdating=!0,L.buildHeaders(e),L.bindEvents(e.table,e.$headers,!0),L.resortComplete(e,t)},updateCell:function(e,t,r,o){if(A(t).closest("tr").hasClass(e.cssChildRow))console.warn('Tablesorter Warning! "updateCell" for child row content has been disabled, use "update" instead');else{if(L.isEmptyObject(e.cache))return L.updateHeader(e),void L.commonUpdate(e,r,o);e.table.isUpdating=!0,e.$table.find(e.selectorRemove).remove();var s,a,n,i,d,l,c=e.$tbodies,g=A(t),p=c.index(L.getClosest(g,"tbody")),u=e.cache[p],f=L.getClosest(g,"tr");if(t=g[0],c.length&&0<=p){if(n=c.eq(p).find("tr").not("."+e.cssChildRow).index(f),d=u.normalized[n],(l=f[0].cells.length)!==e.columns)for(s=!1,a=i=0;a<l;a++)s||f[0].cells[a]===t?s=!0:i+=f[0].cells[a].colSpan;else i=g.index();s=L.getElementText(e,t,i),d[e.columns].raw[i]=s,s=L.getParsedText(e,t,i,s),d[i]=s,"numeric"===(e.parsers[i].type||"").toLowerCase()&&(u.colMax[i]=Math.max(Math.abs(s)||0,u.colMax[i]||0)),!1!==(s="undefined"!==r?r:e.resort)?L.checkResort(e,s,o):L.resortComplete(e,o)}else L.debug(e,"core")&&console.error("updateCell aborted, tbody missing or not within the indicated table"),e.table.isUpdating=!1}},addRows:function(e,t,r,o){var s,a,n,i,d,l,c,g,p,u,f,h,m,b="string"==typeof t&&1===e.$tbodies.length&&/<tr/.test(t||""),y=e.table;if(b)t=A(t),e.$tbodies.append(t);else if(!(t&&t instanceof A&&L.getClosest(t,"table")[0]===e.table))return L.debug(e,"core")&&console.error("addRows method requires (1) a jQuery selector reference to rows that have already been added to the table, or (2) row HTML string to be added to a table with only one tbody"),!1;if(y.isUpdating=!0,L.isEmptyObject(e.cache))L.updateHeader(e),L.commonUpdate(e,r,o);else{for(d=t.filter("tr").attr("role","row").length,n=e.$tbodies.index(t.parents("tbody").filter(":first")),e.parsers&&e.parsers.length||L.setupParsers(e),i=0;i<d;i++){for(p=0,c=t[i].cells.length,g=e.cache[n].normalized.length,f=[],u={child:[],raw:[],$row:t.eq(i),order:g},l=0;l<c;l++)h=t[i].cells[l],s=L.getElementText(e,h,p),u.raw[p]=s,a=L.getParsedText(e,h,p,s),f[p]=a,"numeric"===(e.parsers[p].type||"").toLowerCase()&&(e.cache[n].colMax[p]=Math.max(Math.abs(a)||0,e.cache[n].colMax[p]||0)),0<(m=h.colSpan-1)&&(p+=m),p++;f[e.columns]=u,e.cache[n].normalized[g]=f}L.checkResort(e,r,o)}},updateCache:function(e,t,r){e.parsers&&e.parsers.length||L.setupParsers(e,r),L.buildCache(e,t,r)},appendCache:function(e,t){var r,o,s,a,n,i,d,l=e.table,c=e.$tbodies,g=[],p=e.cache;if(L.isEmptyObject(p))return e.appender?e.appender(l,g):l.isUpdating?e.$table.triggerHandler("updateComplete",l):"";for(L.debug(e,"core")&&(d=new Date),i=0;i<c.length;i++)if((s=c.eq(i)).length){for(a=L.processTbody(l,s,!0),o=(r=p[i].normalized).length,n=0;n<o;n++)g[g.length]=r[n][e.columns].$row,e.appender&&(!e.pager||e.pager.removeRows||e.pager.ajax)||a.append(r[n][e.columns].$row);L.processTbody(l,a,!1)}e.appender&&e.appender(l,g),L.debug(e,"core")&&console.log("Rebuilt table"+L.benchmark(d)),t||e.appender||L.applyWidget(l),l.isUpdating&&e.$table.triggerHandler("updateComplete",l)},commonUpdate:function(e,t,r){e.$table.find(e.selectorRemove).remove(),L.setupParsers(e),L.buildCache(e),L.checkResort(e,t,r)},initSort:function(t,e,r){if(t.table.isUpdating)return setTimeout(function(){L.initSort(t,e,r)},50);var o,s,a,n,i,d,l,c=!r[t.sortMultiSortKey],g=t.table,p=t.$headers.length,u=L.getClosest(A(e),"th, td"),f=parseInt(u.attr("data-column"),10),h="mouseup"===r.type?"user":r.type,m=t.sortVars[f].order;if(u=u[0],t.$table.triggerHandler("sortStart",g),d=(t.sortVars[f].count+1)%m.length,t.sortVars[f].count=r[t.sortResetKey]?2:d,t.sortRestart)for(a=0;a<p;a++)l=t.$headers.eq(a),f!==(d=parseInt(l.attr("data-column"),10))&&(c||l.hasClass(L.css.sortNone))&&(t.sortVars[d].count=-1);if(c){if(A.each(t.sortVars,function(e){t.sortVars[e].sortedBy=""}),t.sortList=[],t.last.sortList=[],null!==t.sortForce)for(o=t.sortForce,s=0;s<o.length;s++)o[s][0]!==f&&(t.sortList[t.sortList.length]=o[s],t.sortVars[o[s][0]].sortedBy="sortForce");if((n=m[t.sortVars[f].count])<2&&(t.sortList[t.sortList.length]=[f,n],t.sortVars[f].sortedBy=h,1<u.colSpan))for(s=1;s<u.colSpan;s++)t.sortList[t.sortList.length]=[f+s,n],t.sortVars[f+s].count=A.inArray(n,m),t.sortVars[f+s].sortedBy=h}else if(t.sortList=A.extend([],t.last.sortList),0<=L.isValueInArray(f,t.sortList))for(t.sortVars[f].sortedBy=h,s=0;s<t.sortList.length;s++)(d=t.sortList[s])[0]===f&&(d[1]=m[t.sortVars[f].count],2===d[1]&&(t.sortList.splice(s,1),t.sortVars[f].count=-1));else if(n=m[t.sortVars[f].count],t.sortVars[f].sortedBy=h,n<2&&(t.sortList[t.sortList.length]=[f,n],1<u.colSpan))for(s=1;s<u.colSpan;s++)t.sortList[t.sortList.length]=[f+s,n],t.sortVars[f+s].count=A.inArray(n,m),t.sortVars[f+s].sortedBy=h;if(t.last.sortList=A.extend([],t.sortList),t.sortList.length&&t.sortAppend&&(o=A.isArray(t.sortAppend)?t.sortAppend:t.sortAppend[t.sortList[0][0]],!L.isEmptyObject(o)))for(s=0;s<o.length;s++)if(o[s][0]!==f&&L.isValueInArray(o[s][0],t.sortList)<0){if(i=(""+(n=o[s][1])).match(/^(a|d|s|o|n)/))switch(d=t.sortList[0][1],i[0]){case"d":n=1;break;case"s":n=d;break;case"o":n=0===d?1:0;break;case"n":n=(d+1)%m.length;break;default:n=0}t.sortList[t.sortList.length]=[o[s][0],n],t.sortVars[o[s][0]].sortedBy="sortAppend"}t.$table.triggerHandler("sortBegin",g),setTimeout(function(){L.setHeadersCss(t),L.multisort(t),L.appendCache(t),t.$table.triggerHandler("sortBeforeEnd",g),t.$table.triggerHandler("sortEnd",g)},1)},multisort:function(l){var e,t,c,r,g=l.table,p=[],u=0,f=l.textSorter||"",h=l.sortList,m=h.length,o=l.$tbodies.length;if(!l.serverSideSorting&&!L.isEmptyObject(l.cache)){if(L.debug(l,"core")&&(t=new Date),"object"==typeof f)for(c=l.columns;c--;)"function"==typeof(r=L.getColumnData(g,f,c))&&(p[c]=r);for(e=0;e<o;e++)c=l.cache[e].colMax,l.cache[e].normalized.sort(function(e,t){var r,o,s,a,n,i,d;for(r=0;r<m;r++){if(s=h[r][0],a=h[r][1],u=0===a,l.sortStable&&e[s]===t[s]&&1===m)return e[l.columns].order-t[l.columns].order;if(n=(o=/n/i.test(L.getSortType(l.parsers,s)))&&l.strings[s]?(o="boolean"==typeof L.string[l.strings[s]]?(u?1:-1)*(L.string[l.strings[s]]?-1:1):l.strings[s]&&L.string[l.strings[s]]||0,l.numberSorter?l.numberSorter(e[s],t[s],u,c[s],g):L["sortNumeric"+(u?"Asc":"Desc")](e[s],t[s],o,c[s],s,l)):(i=u?e:t,d=u?t:e,"function"==typeof f?f(i[s],d[s],u,s,g):"function"==typeof p[s]?p[s](i[s],d[s],u,s,g):L["sortNatural"+(u?"Asc":"Desc")](e[s]||"",t[s]||"",s,l)))return n}return e[l.columns].order-t[l.columns].order});L.debug(l,"core")&&console.log("Applying sort "+h.toString()+L.benchmark(t))}},resortComplete:function(e,t){e.table.isUpdating&&e.$table.triggerHandler("updateComplete",e.table),A.isFunction(t)&&t(e.table)},checkResort:function(e,t,r){var o=A.isArray(t)?t:e.sortList;!1===(void 0===t?e.resort:t)||e.serverSideSorting||e.table.isProcessing?(L.resortComplete(e,r),L.applyWidget(e.table,!1)):o.length?L.sortOn(e,o,function(){L.resortComplete(e,r)},!0):L.sortReset(e,function(){L.resortComplete(e,r),L.applyWidget(e.table,!1)})},sortOn:function(e,t,r,o){var s,a=e.table;for(e.$table.triggerHandler("sortStart",a),s=0;s<e.columns;s++)e.sortVars[s].sortedBy=-1<L.isValueInArray(s,t)?"sorton":"";L.updateHeaderSortCount(e,t),L.setHeadersCss(e),e.delayInit&&L.isEmptyObject(e.cache)&&L.buildCache(e),e.$table.triggerHandler("sortBegin",a),L.multisort(e),L.appendCache(e,o),e.$table.triggerHandler("sortBeforeEnd",a),e.$table.triggerHandler("sortEnd",a),L.applyWidget(a),A.isFunction(r)&&r(a)},sortReset:function(e,t){var r;for(e.sortList=[],r=0;r<e.columns;r++)e.sortVars[r].count=-1,e.sortVars[r].sortedBy="";L.setHeadersCss(e),L.multisort(e),L.appendCache(e),A.isFunction(t)&&t(e.table)},getSortType:function(e,t){return e&&e[t]&&e[t].type||""},getOrder:function(e){return/^d/i.test(e)||1===e},sortNatural:function(e,t){if(e===t)return 0;e=(e||"").toString(),t=(t||"").toString();var r,o,s,a,n,i,d=L.regex;if(d.hex.test(t)){if((r=parseInt(e.match(d.hex),16))<(o=parseInt(t.match(d.hex),16)))return-1;if(o<r)return 1}for(r=e.replace(d.chunk,"\\0$1\\0").replace(d.chunks,"").split("\\0"),o=t.replace(d.chunk,"\\0$1\\0").replace(d.chunks,"").split("\\0"),i=Math.max(r.length,o.length),n=0;n<i;n++){if(s=isNaN(r[n])?r[n]||0:parseFloat(r[n])||0,a=isNaN(o[n])?o[n]||0:parseFloat(o[n])||0,isNaN(s)!==isNaN(a))return isNaN(s)?1:-1;if(typeof s!=typeof a&&(s+="",a+=""),s<a)return-1;if(a<s)return 1}return 0},sortNaturalAsc:function(e,t,r,o){if(e===t)return 0;var s=L.string[o.empties[r]||o.emptyTo];return""===e&&0!==s?"boolean"==typeof s?s?-1:1:-s||-1:""===t&&0!==s?"boolean"==typeof s?s?1:-1:s||1:L.sortNatural(e,t)},sortNaturalDesc:function(e,t,r,o){if(e===t)return 0;var s=L.string[o.empties[r]||o.emptyTo];return""===e&&0!==s?"boolean"==typeof s?s?-1:1:s||1:""===t&&0!==s?"boolean"==typeof s?s?1:-1:-s||-1:L.sortNatural(t,e)},sortText:function(e,t){return t<e?1:e<t?-1:0},getTextValue:function(e,t,r){if(r){var o,s=e?e.length:0,a=r+t;for(o=0;o<s;o++)a+=e.charCodeAt(o);return t*a}return 0},sortNumericAsc:function(e,t,r,o,s,a){if(e===t)return 0;var n=L.string[a.empties[s]||a.emptyTo];return""===e&&0!==n?"boolean"==typeof n?n?-1:1:-n||-1:""===t&&0!==n?"boolean"==typeof n?n?1:-1:n||1:(isNaN(e)&&(e=L.getTextValue(e,r,o)),isNaN(t)&&(t=L.getTextValue(t,r,o)),e-t)},sortNumericDesc:function(e,t,r,o,s,a){if(e===t)return 0;var n=L.string[a.empties[s]||a.emptyTo];return""===e&&0!==n?"boolean"==typeof n?n?-1:1:n||1:""===t&&0!==n?"boolean"==typeof n?n?1:-1:-n||-1:(isNaN(e)&&(e=L.getTextValue(e,r,o)),isNaN(t)&&(t=L.getTextValue(t,r,o)),t-e)},sortNumeric:function(e,t){return e-t},addWidget:function(e){e.id&&!L.isEmptyObject(L.getWidgetById(e.id))&&console.warn('"'+e.id+'" widget was loaded more than once!'),L.widgets[L.widgets.length]=e},hasWidget:function(e,t){return(e=A(e)).length&&e[0].config&&e[0].config.widgetInit[t]||!1},getWidgetById:function(e){var t,r,o=L.widgets.length;for(t=0;t<o;t++)if((r=L.widgets[t])&&r.id&&r.id.toLowerCase()===e.toLowerCase())return r},applyWidgetOptions:function(e){var t,r,o,s=e.config,a=s.widgets.length;if(a)for(t=0;t<a;t++)(r=L.getWidgetById(s.widgets[t]))&&r.options&&(o=A.extend(!0,{},r.options),s.widgetOptions=A.extend(!0,o,s.widgetOptions),A.extend(!0,L.defaults.widgetOptions,r.options))},addWidgetFromClass:function(e){var t,r,o=e.config,s="^"+o.widgetClass.replace(L.regex.templateName,"(\\S+)+")+"$",a=new RegExp(s,"g"),n=(e.className||"").split(L.regex.spaces);if(n.length)for(t=n.length,r=0;r<t;r++)n[r].match(a)&&(o.widgets[o.widgets.length]=n[r].replace(a,"$1"))},applyWidgetId:function(e,t,r){var o,s,a,n=(e=A(e)[0]).config,i=n.widgetOptions,d=L.debug(n,"core"),l=L.getWidgetById(t);l&&(a=l.id,o=!1,A.inArray(a,n.widgets)<0&&(n.widgets[n.widgets.length]=a),d&&(s=new Date),!r&&n.widgetInit[a]||(n.widgetInit[a]=!0,e.hasInitialized&&L.applyWidgetOptions(e),"function"==typeof l.init&&(o=!0,d&&console[console.group?"group":"log"]("Initializing "+a+" widget"),l.init(e,l,n,i))),r||"function"!=typeof l.format||(o=!0,d&&console[console.group?"group":"log"]("Updating "+a+" widget"),l.format(e,n,i,!1)),d&&o&&(console.log("Completed "+(r?"initializing ":"applying ")+a+" widget"+L.benchmark(s)),console.groupEnd&&console.groupEnd()))},applyWidget:function(e,t,r){var o,s,a,n,i,d=(e=A(e)[0]).config,l=L.debug(d,"core"),c=[];if(!1===t||!e.hasInitialized||!e.isApplyingWidgets&&!e.isUpdating){if(l&&(i=new Date),L.addWidgetFromClass(e),clearTimeout(d.timerReady),d.widgets.length){for(e.isApplyingWidgets=!0,d.widgets=A.grep(d.widgets,function(e,t){return A.inArray(e,d.widgets)===t}),s=(a=d.widgets||[]).length,o=0;o<s;o++)(n=L.getWidgetById(a[o]))&&n.id?(n.priority||(n.priority=10),c[o]=n):l&&console.warn('"'+a[o]+'" was enabled, but the widget code has not been loaded!');for(c.sort(function(e,t){return e.priority<t.priority?-1:e.priority===t.priority?0:1}),s=c.length,l&&console[console.group?"group":"log"]("Start "+(t?"initializing":"applying")+" widgets"),o=0;o<s;o++)(n=c[o])&&n.id&&L.applyWidgetId(e,n.id,t);l&&console.groupEnd&&console.groupEnd()}d.timerReady=setTimeout(function(){e.isApplyingWidgets=!1,A.data(e,"lastWidgetApplication",new Date),d.$table.triggerHandler("tablesorter-ready"),t||"function"!=typeof r||r(e),l&&(n=d.widgets.length,console.log("Completed "+(!0===t?"initializing ":"applying ")+n+" widget"+(1!==n?"s":"")+L.benchmark(i)))},10)}},removeWidget:function(e,t,r){var o,s,a,n,i=(e=A(e)[0]).config;if(!0===t)for(t=[],n=L.widgets.length,a=0;a<n;a++)(s=L.widgets[a])&&s.id&&(t[t.length]=s.id);else t=(A.isArray(t)?t.join(","):t||"").toLowerCase().split(/[\s,]+/);for(n=t.length,o=0;o<n;o++)s=L.getWidgetById(t[o]),0<=(a=A.inArray(t[o],i.widgets))&&!0!==r&&i.widgets.splice(a,1),s&&s.remove&&(L.debug(i,"core")&&console.log((r?"Refreshing":"Removing")+' "'+t[o]+'" widget'),s.remove(e,i,i.widgetOptions,r),i.widgetInit[t[o]]=!1);i.$table.triggerHandler("widgetRemoveEnd",e)},refreshWidgets:function(e,t,r){function o(e){A(e).triggerHandler("refreshComplete")}var s,a,n=(e=A(e)[0]).config.widgets,i=L.widgets,d=i.length,l=[];for(s=0;s<d;s++)(a=i[s])&&a.id&&(t||A.inArray(a.id,n)<0)&&(l[l.length]=a.id);L.removeWidget(e,l.join(","),!0),!0!==r?(L.applyWidget(e,t||!1,o),t&&L.applyWidget(e,!1,o)):o(e)},benchmark:function(e){return" ("+((new Date).getTime()-e.getTime())+" ms)"},log:function(){console.log(arguments)},debug:function(e,t){return e&&(!0===e.debug||"string"==typeof e.debug&&-1<e.debug.indexOf(t))},isEmptyObject:function(e){for(var t in e)return!1;return!0},isValueInArray:function(e,t){var r,o=t&&t.length||0;for(r=0;r<o;r++)if(t[r][0]===e)return r;return-1},formatFloat:function(e,t){return"string"!=typeof e||""===e?e:(e=(t&&t.config?!1!==t.config.usNumberFormat:void 0===t||t)?e.replace(L.regex.comma,""):e.replace(L.regex.digitNonUS,"").replace(L.regex.comma,"."),L.regex.digitNegativeTest.test(e)&&(e=e.replace(L.regex.digitNegativeReplace,"-$1")),r=parseFloat(e),isNaN(r)?A.trim(e):r);var r},isDigit:function(e){return isNaN(e)?L.regex.digitTest.test(e.toString().replace(L.regex.digitReplace,"")):""!==e},computeColumnIndex:function(e,t){var r,o,s,a,n,i,d,l,c,g,p=t&&t.columns||0,u=[],f=new Array(p);for(r=0;r<e.length;r++)for(i=e[r].cells,o=0;o<i.length;o++){for(d=r,l=(n=i[o]).rowSpan||1,c=n.colSpan||1,void 0===u[d]&&(u[d]=[]),s=0;s<u[d].length+1;s++)if(void 0===u[d][s]){g=s;break}for(p&&n.cellIndex===g||(n.setAttribute?n.setAttribute("data-column",g):A(n).attr("data-column",g)),s=d;s<d+l;s++)for(void 0===u[s]&&(u[s]=[]),f=u[s],a=g;a<g+c;a++)f[a]="x"}return L.checkColumnCount(e,u,f.length),f.length},checkColumnCount:function(e,t,r){var o,s,a=!0,n=[];for(o=0;o<t.length;o++)if(t[o]&&(s=t[o].length,t[o].length!==r)){a=!1;break}a||(e.each(function(e,t){var r=t.parentElement.nodeName;n.indexOf(r)<0&&n.push(r)}),console.error("Invalid or incorrect number of columns in the "+n.join(" or ")+"; expected "+r+", but found "+s+" columns"))},fixColumnWidth:function(e){var t,r,o,s,a,n=(e=A(e)[0]).config,i=n.$table.children("colgroup");if(i.length&&i.hasClass(L.css.colgroup)&&i.remove(),n.widthFixed&&0===n.$table.children("colgroup").length){for(i=A('<colgroup class="'+L.css.colgroup+'">'),t=n.$table.width(),s=(o=n.$tbodies.find("tr:first").children(":visible")).length,a=0;a<s;a++)r=parseInt(o.eq(a).width()/t*1e3,10)/10+"%",i.append(A("<col>").css("width",r));n.$table.prepend(i)}},getData:function(e,t,r){var o,s,a="",n=A(e);return n.length?(o=!!A.metadata&&n.metadata(),s=" "+(n.attr("class")||""),void 0!==n.data(r)||void 0!==n.data(r.toLowerCase())?a+=n.data(r)||n.data(r.toLowerCase()):o&&void 0!==o[r]?a+=o[r]:t&&void 0!==t[r]?a+=t[r]:" "!==s&&s.match(" "+r+"-")&&(a=s.match(new RegExp("\\s"+r+"-([\\w-]+)"))[1]||""),A.trim(a)):""},getColumnData:function(e,t,r,o,s){if("object"!=typeof t||null===t)return t;var a,n=(e=A(e)[0]).config,i=s||n.$headers,d=n.$headerIndexed&&n.$headerIndexed[r]||i.find('[data-column="'+r+'"]:last');if(void 0!==t[r])return o?t[r]:t[i.index(d)];for(a in t)if("string"==typeof a&&d.filter(a).add(d.find(a)).length)return t[a]},isProcessing:function(e,t,r){var o=(e=A(e))[0].config,s=r||e.find("."+L.css.header);t?(void 0!==r&&0<o.sortList.length&&(s=s.filter(function(){return!this.sortDisabled&&0<=L.isValueInArray(parseFloat(A(this).attr("data-column")),o.sortList)})),e.add(s).addClass(L.css.processing+" "+o.cssProcessing)):e.add(s).removeClass(L.css.processing+" "+o.cssProcessing)},processTbody:function(e,t,r){if(e=A(e)[0],r)return e.isProcessing=!0,t.before('<colgroup class="tablesorter-savemyplace"/>'),A.fn.detach?t.detach():t.remove();var o=A(e).find("colgroup.tablesorter-savemyplace");t.insertAfter(o),o.remove(),e.isProcessing=!1},clearTableBody:function(e){A(e)[0].config.$tbodies.children().detach()},characterEquivalents:{a:"áàâãäąå",A:"ÁÀÂÃÄĄÅ",c:"çćč",C:"ÇĆČ",e:"éèêëěę",E:"ÉÈÊËĚĘ",i:"íìİîïı",I:"ÍÌİÎÏ",o:"óòôõöō",O:"ÓÒÔÕÖŌ",ss:"ß",SS:"ẞ",u:"úùûüů",U:"ÚÙÛÜŮ"},replaceAccents:function(e){var t,r="[",o=L.characterEquivalents;if(!L.characterRegex){for(t in L.characterRegexArray={},o)"string"==typeof t&&(r+=o[t],L.characterRegexArray[t]=new RegExp("["+o[t]+"]","g"));L.characterRegex=new RegExp(r+"]")}if(L.characterRegex.test(e))for(t in o)"string"==typeof t&&(e=e.replace(L.characterRegexArray[t],t));return e},validateOptions:function(e){var t,r,o,s,a="headers sortForce sortList sortAppend widgets".split(" "),n=e.originalSettings;if(n){for(t in L.debug(e,"core")&&(s=new Date),n)if("undefined"===(o=typeof L.defaults[t]))console.warn('Tablesorter Warning! "table.config.'+t+'" option not recognized');else if("object"===o)for(r in n[t])o=L.defaults[t]&&typeof L.defaults[t][r],A.inArray(t,a)<0&&"undefined"===o&&console.warn('Tablesorter Warning! "table.config.'+t+"."+r+'" option not recognized');L.debug(e,"core")&&console.log("validate options time:"+L.benchmark(s))}},restoreHeaders:function(e){var t,r,o=A(e)[0].config,s=o.$table.find(o.selectorHeaders),a=s.length;for(t=0;t<a;t++)(r=s.eq(t)).find("."+L.css.headerIn).length&&r.html(o.headerContent[t])},destroy:function(e,t,r){if((e=A(e)[0]).hasInitialized){L.removeWidget(e,!0,!1);var o,s=A(e),a=e.config,n=s.find("thead:first"),i=n.find("tr."+L.css.headerRow).removeClass(L.css.headerRow+" "+a.cssHeaderRow),d=s.find("tfoot:first > tr").children("th, td");!1===t&&0<=A.inArray("uitheme",a.widgets)&&(s.triggerHandler("applyWidgetId",["uitheme"]),s.triggerHandler("applyWidgetId",["zebra"])),n.find("tr").not(i).remove(),o="sortReset update updateRows updateAll updateHeaders updateCell addRows updateComplete sorton appendCache updateCache applyWidgetId applyWidgets refreshWidgets removeWidget destroy mouseup mouseleave "+"keypress sortBegin sortEnd resetToLoadState ".split(" ").join(a.namespace+" "),s.removeData("tablesorter").unbind(o.replace(L.regex.spaces," ")),a.$headers.add(d).removeClass([L.css.header,a.cssHeader,a.cssAsc,a.cssDesc,L.css.sortAsc,L.css.sortDesc,L.css.sortNone].join(" ")).removeAttr("data-column").removeAttr("aria-label").attr("aria-disabled","true"),i.find(a.selectorSort).unbind("mousedown mouseup keypress ".split(" ").join(a.namespace+" ").replace(L.regex.spaces," ")),L.restoreHeaders(e),s.toggleClass(L.css.table+" "+a.tableClass+" tablesorter-"+a.theme,!1===t),s.removeClass(a.namespace.slice(1)),e.hasInitialized=!1,delete e.config.cache,"function"==typeof r&&r(e),L.debug(a,"core")&&console.log("tablesorter has been removed")}}};A.fn.tablesorter=function(t){return this.each(function(){var e=A.extend(!0,{},L.defaults,t,L.instanceMethods);e.originalSettings=t,!this.hasInitialized&&L.buildTable&&"TABLE"!==this.nodeName?L.buildTable(this,e):L.setup(this,e)})},window.console&&window.console.log||(L.logs=[],console={},console.log=console.warn=console.error=console.table=function(){var e=1<arguments.length?arguments:arguments[0];L.logs[L.logs.length]={date:Date.now(),log:e}}),L.addParser({id:"no-parser",is:function(){return!1},format:function(){return""},type:"text"}),L.addParser({id:"text",is:function(){return!0},format:function(e,t){var r=t.config;return e&&(e=A.trim(r.ignoreCase?e.toLocaleLowerCase():e),e=r.sortLocaleCompare?L.replaceAccents(e):e),e},type:"text"}),L.regex.nondigit=/[^\w,. \-()]/g,L.addParser({id:"digit",is:function(e){return L.isDigit(e)},format:function(e,t){var r=L.formatFloat((e||"").replace(L.regex.nondigit,""),t);return e&&"number"==typeof r?r:e?A.trim(e&&t.config.ignoreCase?e.toLocaleLowerCase():e):e},type:"numeric"}),L.regex.currencyReplace=/[+\-,. ]/g,L.regex.currencyTest=/^\(?\d+[\u00a3$\u20ac\u00a4\u00a5\u00a2?.]|[\u00a3$\u20ac\u00a4\u00a5\u00a2?.]\d+\)?$/,L.addParser({id:"currency",is:function(e){return e=(e||"").replace(L.regex.currencyReplace,""),L.regex.currencyTest.test(e)},format:function(e,t){var r=L.formatFloat((e||"").replace(L.regex.nondigit,""),t);return e&&"number"==typeof r?r:e?A.trim(e&&t.config.ignoreCase?e.toLocaleLowerCase():e):e},type:"numeric"}),L.regex.urlProtocolTest=/^(https?|ftp|file):\/\//,L.regex.urlProtocolReplace=/(https?|ftp|file):\/\/(www\.)?/,L.addParser({id:"url",is:function(e){return L.regex.urlProtocolTest.test(e)},format:function(e){return e?A.trim(e.replace(L.regex.urlProtocolReplace,"")):e},type:"text"}),L.regex.dash=/-/g,L.regex.isoDate=/^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}/,L.addParser({id:"isoDate",is:function(e){return L.regex.isoDate.test(e)},format:function(e){var t=e?new Date(e.replace(L.regex.dash,"/")):e;return t instanceof Date&&isFinite(t)?t.getTime():e},type:"numeric"}),L.regex.percent=/%/g,L.regex.percentTest=/(\d\s*?%|%\s*?\d)/,L.addParser({id:"percent",is:function(e){return L.regex.percentTest.test(e)&&e.length<15},format:function(e,t){return e?L.formatFloat(e.replace(L.regex.percent,""),t):e},type:"numeric"}),L.addParser({id:"image",is:function(e,t,r,o){return 0<o.find("img").length},format:function(e,t,r){return A(r).find("img").attr(t.config.imgAttr||"alt")||e},parsed:!0,type:"text"}),L.regex.dateReplace=/(\S)([AP]M)$/i,L.regex.usLongDateTest1=/^[A-Z]{3,10}\.?\s+\d{1,2},?\s+(\d{4})(\s+\d{1,2}:\d{2}(:\d{2})?(\s+[AP]M)?)?$/i,L.regex.usLongDateTest2=/^\d{1,2}\s+[A-Z]{3,10}\s+\d{4}/i,L.addParser({id:"usLongDate",is:function(e){return L.regex.usLongDateTest1.test(e)||L.regex.usLongDateTest2.test(e)},format:function(e){var t=e?new Date(e.replace(L.regex.dateReplace,"$1 $2")):e;return t instanceof Date&&isFinite(t)?t.getTime():e},type:"numeric"}),L.regex.shortDateTest=/(^\d{1,2}[\/\s]\d{1,2}[\/\s]\d{4})|(^\d{4}[\/\s]\d{1,2}[\/\s]\d{1,2})/,L.regex.shortDateReplace=/[\-.,]/g,L.regex.shortDateXXY=/(\d{1,2})[\/\s](\d{1,2})[\/\s](\d{4})/,L.regex.shortDateYMD=/(\d{4})[\/\s](\d{1,2})[\/\s](\d{1,2})/,L.convertFormat=function(e,t){e=(e||"").replace(L.regex.spaces," ").replace(L.regex.shortDateReplace,"/"),"mmddyyyy"===t?e=e.replace(L.regex.shortDateXXY,"$3/$1/$2"):"ddmmyyyy"===t?e=e.replace(L.regex.shortDateXXY,"$3/$2/$1"):"yyyymmdd"===t&&(e=e.replace(L.regex.shortDateYMD,"$1/$2/$3"));var r=new Date(e);return r instanceof Date&&isFinite(r)?r.getTime():""},L.addParser({id:"shortDate",is:function(e){return e=(e||"").replace(L.regex.spaces," ").replace(L.regex.shortDateReplace,"/"),L.regex.shortDateTest.test(e)},format:function(e,t,r,o){if(e){var s=t.config,a=s.$headerIndexed[o],n=a.length&&a.data("dateFormat")||L.getData(a,L.getColumnData(t,s.headers,o),"dateFormat")||s.dateFormat;return a.length&&a.data("dateFormat",n),L.convertFormat(e,n)||e}return e},type:"numeric"}),L.regex.timeTest=/^(0?[1-9]|1[0-2]):([0-5]\d)(\s[AP]M)$|^((?:[01]\d|[2][0-4]):[0-5]\d)$/i,L.regex.timeMatch=/(0?[1-9]|1[0-2]):([0-5]\d)(\s[AP]M)|((?:[01]\d|[2][0-4]):[0-5]\d)/i,L.addParser({id:"time",is:function(e){return L.regex.timeTest.test(e)},format:function(e){var t=(e||"").match(L.regex.timeMatch),r=new Date(e),o=e&&(null!==t?t[0]:"00:00 AM"),s=o?new Date("2000/01/01 "+o.replace(L.regex.dateReplace,"$1 $2")):o;return s instanceof Date&&isFinite(s)?(r instanceof Date&&isFinite(r)?r.getTime():0)?parseFloat(s.getTime()+"."+r.getTime()):s.getTime():e},type:"numeric"}),L.addParser({id:"metadata",is:function(){return!1},format:function(e,t,r){var o=t.config,s=o.parserMetadataName?o.parserMetadataName:"sortValue";return A(r).metadata()[s]},type:"numeric"}),L.addWidget({id:"zebra",priority:90,format:function(e,t,r){var o,s,a,n,i,d,l,c=new RegExp(t.cssChildRow,"i"),g=t.$tbodies.add(A(t.namespace+"_extra_table").children("tbody:not(."+t.cssInfoBlock+")"));for(i=0;i<g.length;i++)for(a=0,l=(o=g.eq(i).children("tr:visible").not(t.selectorRemove)).length,d=0;d<l;d++)s=o.eq(d),c.test(s[0].className)||a++,n=a%2==0,s.removeClass(r.zebra[n?1:0]).addClass(r.zebra[n?0:1])},remove:function(e,t,r,o){if(!o){var s,a,n=t.$tbodies,i=(r.zebra||["even","odd"]).join(" ");for(s=0;s<n.length;s++)(a=L.processTbody(e,n.eq(s),!0)).children().removeClass(i),L.processTbody(e,a,!1)}}})}(e),e.tablesorter});
1
+ !function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){return function(A){"use strict";var L=A.tablesorter={version:"2.31.3",parsers:[],widgets:[],defaults:{theme:"default",widthFixed:!1,showProcessing:!1,headerTemplate:"{content}",onRenderTemplate:null,onRenderHeader:null,cancelSelection:!0,tabIndex:!0,dateFormat:"mmddyyyy",sortMultiSortKey:"shiftKey",sortResetKey:"ctrlKey",usNumberFormat:!0,delayInit:!1,serverSideSorting:!1,resort:!0,headers:{},ignoreCase:!0,sortForce:null,sortList:[],sortAppend:null,sortStable:!1,sortInitialOrder:"asc",sortLocaleCompare:!1,sortReset:!1,sortRestart:!1,emptyTo:"bottom",stringTo:"max",duplicateSpan:!0,textExtraction:"basic",textAttribute:"data-text",textSorter:null,numberSorter:null,initWidgets:!0,widgetClass:"widget-{name}",widgets:[],widgetOptions:{zebra:["even","odd"]},initialized:null,tableClass:"",cssAsc:"",cssDesc:"",cssNone:"",cssHeader:"",cssHeaderRow:"",cssProcessing:"",cssChildRow:"tablesorter-childRow",cssInfoBlock:"tablesorter-infoOnly",cssNoSort:"tablesorter-noSort",cssIgnoreRow:"tablesorter-ignoreRow",cssIcon:"tablesorter-icon",cssIconNone:"",cssIconAsc:"",cssIconDesc:"",cssIconDisabled:"",pointerClick:"click",pointerDown:"mousedown",pointerUp:"mouseup",selectorHeaders:"> thead th, > thead td",selectorSort:"th, td",selectorRemove:".remove-me",debug:!1,headerList:[],empties:{},strings:{},parsers:[],globalize:0,imgAttr:0},css:{table:"tablesorter",cssHasChild:"tablesorter-hasChildRow",childRow:"tablesorter-childRow",colgroup:"tablesorter-colgroup",header:"tablesorter-header",headerRow:"tablesorter-headerRow",headerIn:"tablesorter-header-inner",icon:"tablesorter-icon",processing:"tablesorter-processing",sortAsc:"tablesorter-headerAsc",sortDesc:"tablesorter-headerDesc",sortNone:"tablesorter-headerUnSorted"},language:{sortAsc:"Ascending sort applied, ",sortDesc:"Descending sort applied, ",sortNone:"No sort applied, ",sortDisabled:"sorting is disabled",nextAsc:"activate to apply an ascending sort",nextDesc:"activate to apply a descending sort",nextNone:"activate to remove the sort"},regex:{templateContent:/\{content\}/g,templateIcon:/\{icon\}/g,templateName:/\{name\}/i,spaces:/\s+/g,nonWord:/\W/g,formElements:/(input|select|button|textarea)/i,chunk:/(^([+\-]?(?:\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?)?$|^0x[0-9a-f]+$|\d+)/gi,chunks:/(^\\0|\\0$)/,hex:/^0x[0-9a-f]+$/i,comma:/,/g,digitNonUS:/[\s|\.]/g,digitNegativeTest:/^\s*\([.\d]+\)/,digitNegativeReplace:/^\s*\(([.\d]+)\)/,digitTest:/^[\-+(]?\d+[)]?$/,digitReplace:/[,.'"\s]/g},string:{max:1,min:-1,emptymin:1,emptymax:-1,zero:0,none:0,"null":0,top:!0,bottom:!1},keyCodes:{enter:13},dates:{},instanceMethods:{},setup:function(t,r){if(t&&t.tHead&&0!==t.tBodies.length&&!0!==t.hasInitialized){var e,o="",s=A(t),a=A.metadata;t.hasInitialized=!1,t.isProcessing=!0,t.config=r,A.data(t,"tablesorter",r),L.debug(r,"core")&&(console[console.group?"group":"log"]("Initializing tablesorter v"+L.version),A.data(t,"startoveralltimer",new Date)),r.supportsDataObject=((e=A.fn.jquery.split("."))[0]=parseInt(e[0],10),1<e[0]||1===e[0]&&4<=parseInt(e[1],10)),r.emptyTo=r.emptyTo.toLowerCase(),r.stringTo=r.stringTo.toLowerCase(),r.last={sortList:[],clickedIndex:-1},/tablesorter\-/.test(s.attr("class"))||(o=""!==r.theme?" tablesorter-"+r.theme:""),r.namespace?r.namespace="."+r.namespace.replace(L.regex.nonWord,""):r.namespace=".tablesorter"+Math.random().toString(16).slice(2),r.table=t,r.$table=s.addClass(L.css.table+" "+r.tableClass+o+" "+r.namespace.slice(1)).attr("role","grid"),r.$headers=s.find(r.selectorHeaders),r.$table.children().children("tr").attr("role","row"),r.$tbodies=s.children("tbody:not(."+r.cssInfoBlock+")").attr({"aria-live":"polite","aria-relevant":"all"}),r.$table.children("caption").length&&((o=r.$table.children("caption")[0]).id||(o.id=r.namespace.slice(1)+"caption"),r.$table.attr("aria-labelledby",o.id)),r.widgetInit={},r.textExtraction=r.$table.attr("data-text-extraction")||r.textExtraction||"basic",L.buildHeaders(r),L.fixColumnWidth(t),L.addWidgetFromClass(t),L.applyWidgetOptions(t),L.setupParsers(r),r.totalRows=0,r.debug&&L.validateOptions(r),r.delayInit||L.buildCache(r),L.bindEvents(t,r.$headers,!0),L.bindMethods(r),r.supportsDataObject&&void 0!==s.data().sortlist?r.sortList=s.data().sortlist:a&&s.metadata()&&s.metadata().sortlist&&(r.sortList=s.metadata().sortlist),L.applyWidget(t,!0),0<r.sortList.length?(r.last.sortList=r.sortList,L.sortOn(r,r.sortList,{},!r.initWidgets)):(L.setHeadersCss(r),r.initWidgets&&L.applyWidget(t,!1)),r.showProcessing&&s.unbind("sortBegin"+r.namespace+" sortEnd"+r.namespace).bind("sortBegin"+r.namespace+" sortEnd"+r.namespace,function(e){clearTimeout(r.timerProcessing),L.isProcessing(t),"sortBegin"===e.type&&(r.timerProcessing=setTimeout(function(){L.isProcessing(t,!0)},500))}),t.hasInitialized=!0,t.isProcessing=!1,L.debug(r,"core")&&(console.log("Overall initialization time:"+L.benchmark(A.data(t,"startoveralltimer"))),L.debug(r,"core")&&console.groupEnd&&console.groupEnd()),s.triggerHandler("tablesorter-initialized",t),"function"==typeof r.initialized&&r.initialized(t)}else L.debug(r,"core")&&(t.hasInitialized?console.warn("Stopping initialization. Tablesorter has already been initialized"):console.error("Stopping initialization! No table, thead or tbody",t))},bindMethods:function(r){var e=r.$table,t=r.namespace,o="sortReset update updateRows updateAll updateHeaders addRows updateCell updateComplete sorton appendCache updateCache applyWidgetId applyWidgets refreshWidgets destroy mouseup mouseleave ".split(" ").join(t+" ");e.unbind(o.replace(L.regex.spaces," ")).bind("sortReset"+t,function(e,t){e.stopPropagation(),L.sortReset(this.config,function(e){e.isApplyingWidgets?setTimeout(function(){L.applyWidget(e,"",t)},100):L.applyWidget(e,"",t)})}).bind("updateAll"+t,function(e,t,r){e.stopPropagation(),L.updateAll(this.config,t,r)}).bind("update"+t+" updateRows"+t,function(e,t,r){e.stopPropagation(),L.update(this.config,t,r)}).bind("updateHeaders"+t,function(e,t){e.stopPropagation(),L.updateHeaders(this.config,t)}).bind("updateCell"+t,function(e,t,r,o){e.stopPropagation(),L.updateCell(this.config,t,r,o)}).bind("addRows"+t,function(e,t,r,o){e.stopPropagation(),L.addRows(this.config,t,r,o)}).bind("updateComplete"+t,function(){this.isUpdating=!1}).bind("sorton"+t,function(e,t,r,o){e.stopPropagation(),L.sortOn(this.config,t,r,o)}).bind("appendCache"+t,function(e,t,r){e.stopPropagation(),L.appendCache(this.config,r),A.isFunction(t)&&t(this)}).bind("updateCache"+t,function(e,t,r){e.stopPropagation(),L.updateCache(this.config,t,r)}).bind("applyWidgetId"+t,function(e,t){e.stopPropagation(),L.applyWidgetId(this,t)}).bind("applyWidgets"+t,function(e,t){e.stopPropagation(),L.applyWidget(this,!1,t)}).bind("refreshWidgets"+t,function(e,t,r){e.stopPropagation(),L.refreshWidgets(this,t,r)}).bind("removeWidget"+t,function(e,t,r){e.stopPropagation(),L.removeWidget(this,t,r)}).bind("destroy"+t,function(e,t,r){e.stopPropagation(),L.destroy(this,t,r)}).bind("resetToLoadState"+t,function(e){e.stopPropagation(),L.removeWidget(this,!0,!1);var t=A.extend(!0,{},r.originalSettings);(r=A.extend(!0,{},L.defaults,t)).originalSettings=t,this.hasInitialized=!1,L.setup(this,r)})},bindEvents:function(e,t,r){var o,i=(e=A(e)[0]).config,s=i.namespace,d=null;!0!==r&&(t.addClass(s.slice(1)+"_extra_headers"),(o=L.getClosest(t,"table")).length&&"TABLE"===o[0].nodeName&&o[0]!==e&&A(o[0]).addClass(s.slice(1)+"_extra_table")),o=(i.pointerDown+" "+i.pointerUp+" "+i.pointerClick+" sort keyup ").replace(L.regex.spaces," ").split(" ").join(s+" "),t.find(i.selectorSort).add(t.filter(i.selectorSort)).unbind(o).bind(o,function(e,t){var r,o,s,a=A(e.target),n=" "+e.type+" ";if(!(1!==(e.which||e.button)&&!n.match(" "+i.pointerClick+" | sort | keyup ")||" keyup "===n&&e.which!==L.keyCodes.enter||n.match(" "+i.pointerClick+" ")&&void 0!==e.which||n.match(" "+i.pointerUp+" ")&&d!==e.target&&!0!==t)){if(n.match(" "+i.pointerDown+" "))return d=e.target,void("1"===(s=a.jquery.split("."))[0]&&s[1]<4&&e.preventDefault());if(d=null,r=L.getClosest(A(this),"."+L.css.header),L.regex.formElements.test(e.target.nodeName)||a.hasClass(i.cssNoSort)||0<a.parents("."+i.cssNoSort).length||r.hasClass("sorter-false")||0<a.parents("button").length)return!i.cancelSelection;i.delayInit&&L.isEmptyObject(i.cache)&&L.buildCache(i),i.last.clickedIndex=r.attr("data-column")||r.index(),(o=i.$headerIndexed[i.last.clickedIndex][0])&&!o.sortDisabled&&L.initSort(i,o,e)}}),i.cancelSelection&&t.attr("unselectable","on").bind("selectstart",!1).css({"user-select":"none",MozUserSelect:"none"})},buildHeaders:function(d){var e,l,t,r;for(d.headerList=[],d.headerContent=[],d.sortVars=[],L.debug(d,"core")&&(t=new Date),d.columns=L.computeColumnIndex(d.$table.children("thead, tfoot").children("tr")),l=d.cssIcon?'<i class="'+(d.cssIcon===L.css.icon?L.css.icon:d.cssIcon+" "+L.css.icon)+'"></i>':"",d.$headers=A(A.map(d.$table.find(d.selectorHeaders),function(e,t){var r,o,s,a,n,i=A(e);if(!L.getClosest(i,"tr").hasClass(d.cssIgnoreRow))return/(th|td)/i.test(e.nodeName)||(n=L.getClosest(i,"th, td"),i.attr("data-column",n.attr("data-column"))),r=L.getColumnData(d.table,d.headers,t,!0),d.headerContent[t]=i.html(),""===d.headerTemplate||i.find("."+L.css.headerIn).length||(a=d.headerTemplate.replace(L.regex.templateContent,i.html()).replace(L.regex.templateIcon,i.find("."+L.css.icon).length?"":l),d.onRenderTemplate&&(o=d.onRenderTemplate.apply(i,[t,a]))&&"string"==typeof o&&(a=o),i.html('<div class="'+L.css.headerIn+'">'+a+"</div>")),d.onRenderHeader&&d.onRenderHeader.apply(i,[t,d,d.$table]),s=parseInt(i.attr("data-column"),10),e.column=s,n=L.getOrder(L.getData(i,r,"sortInitialOrder")||d.sortInitialOrder),d.sortVars[s]={count:-1,order:n?d.sortReset?[1,0,2]:[1,0]:d.sortReset?[0,1,2]:[0,1],lockedOrder:!1,sortedBy:""},void 0!==(n=L.getData(i,r,"lockedOrder")||!1)&&!1!==n&&(d.sortVars[s].lockedOrder=!0,d.sortVars[s].order=L.getOrder(n)?[1,1]:[0,0]),d.headerList[t]=e,i.addClass(L.css.header+" "+d.cssHeader),L.getClosest(i,"tr").addClass(L.css.headerRow+" "+d.cssHeaderRow).attr("role","row"),d.tabIndex&&i.attr("tabindex",0),e})),d.$headerIndexed=[],r=0;r<d.columns;r++)L.isEmptyObject(d.sortVars[r])&&(d.sortVars[r]={}),e=d.$headers.filter('[data-column="'+r+'"]'),d.$headerIndexed[r]=e.length?e.not(".sorter-false").length?e.not(".sorter-false").filter(":last"):e.filter(":last"):A();d.$table.find(d.selectorHeaders).attr({scope:"col",role:"columnheader"}),L.updateHeader(d),L.debug(d,"core")&&(console.log("Built headers:"+L.benchmark(t)),console.log(d.$headers))},addInstanceMethods:function(e){A.extend(L.instanceMethods,e)},setupParsers:function(e,t){var r,o,s,a,n,i,d,l,c,g,p,u,f,h,m=e.table,b=0,y=L.debug(e,"core"),w={};if(e.$tbodies=e.$table.children("tbody:not(."+e.cssInfoBlock+")"),0===(h=(f=void 0===t?e.$tbodies:t).length))return y?console.warn("Warning: *Empty table!* Not building a parser cache"):"";for(y&&(u=new Date,console[console.group?"group":"log"]("Detecting parsers for each column")),o={extractors:[],parsers:[]};b<h;){if((r=f[b].rows).length)for(n=0,a=e.columns,i=0;i<a;i++){if((d=e.$headerIndexed[n])&&d.length&&(l=L.getColumnData(m,e.headers,n),p=L.getParserById(L.getData(d,l,"extractor")),g=L.getParserById(L.getData(d,l,"sorter")),c="false"===L.getData(d,l,"parser"),e.empties[n]=(L.getData(d,l,"empty")||e.emptyTo||(e.emptyToBottom?"bottom":"top")).toLowerCase(),e.strings[n]=(L.getData(d,l,"string")||e.stringTo||"max").toLowerCase(),c&&(g=L.getParserById("no-parser")),p=p||!1,g=g||L.detectParserForColumn(e,r,-1,n),y&&(w["("+n+") "+d.text()]={parser:g.id,extractor:p?p.id:"none",string:e.strings[n],empty:e.empties[n]}),o.parsers[n]=g,o.extractors[n]=p,0<(s=d[0].colSpan-1)))for(n+=s,a+=s;0<s+1;)o.parsers[n-s]=g,o.extractors[n-s]=p,s--;n++}b+=o.parsers.length?h:1}y&&(L.isEmptyObject(w)?console.warn(" No parsers detected!"):console[console.table?"table":"log"](w),console.log("Completed detecting parsers"+L.benchmark(u)),console.groupEnd&&console.groupEnd()),e.parsers=o.parsers,e.extractors=o.extractors},addParser:function(e){var t,r=L.parsers.length,o=!0;for(t=0;t<r;t++)L.parsers[t].id.toLowerCase()===e.id.toLowerCase()&&(o=!1);o&&(L.parsers[L.parsers.length]=e)},getParserById:function(e){if("false"==e)return!1;var t,r=L.parsers.length;for(t=0;t<r;t++)if(L.parsers[t].id.toLowerCase()===e.toString().toLowerCase())return L.parsers[t];return!1},detectParserForColumn:function(e,t,r,o){for(var s,a,n,i=L.parsers.length,d=!1,l="",c=L.debug(e,"core"),g=!0;""===l&&g;)(n=t[++r])&&r<50?n.className.indexOf(L.cssIgnoreRow)<0&&(d=t[r].cells[o],l=L.getElementText(e,d,o),a=A(d),c&&console.log("Checking if value was empty on row "+r+", column: "+o+': "'+l+'"')):g=!1;for(;0<=--i;)if((s=L.parsers[i])&&"text"!==s.id&&s.is&&s.is(l,e.table,d,a))return s;return L.getParserById("text")},getElementText:function(e,t,r){if(!t)return"";var o,s=e.textExtraction||"",a=t.jquery?t:A(t);return"string"==typeof s?"basic"===s&&void 0!==(o=a.attr(e.textAttribute))?A.trim(o):A.trim(t.textContent||a.text()):"function"==typeof s?A.trim(s(a[0],e.table,r)):"function"==typeof(o=L.getColumnData(e.table,s,r))?A.trim(o(a[0],e.table,r)):A.trim(a[0].textContent||a.text())},getParsedText:function(e,t,r,o){void 0===o&&(o=L.getElementText(e,t,r));var s=""+o,a=e.parsers[r],n=e.extractors[r];return a&&(n&&"function"==typeof n.format&&(o=n.format(o,e.table,t,r)),s="no-parser"===a.id?"":a.format(""+o,e.table,t,r),e.ignoreCase&&"string"==typeof s&&(s=s.toLowerCase())),s},buildCache:function(e,t,r){var o,s,a,n,i,d,l,c,g,p,u,f,h,m,b,y,w,x,v,C,$,I,D=e.table,R=e.parsers,T=L.debug(e,"core");if(e.$tbodies=e.$table.children("tbody:not(."+e.cssInfoBlock+")"),l=void 0===r?e.$tbodies:r,e.cache={},e.totalRows=0,!R)return T?console.warn("Warning: *Empty table!* Not building a cache"):"";for(T&&(f=new Date),e.showProcessing&&L.isProcessing(D,!0),d=0;d<l.length;d++){for(y=[],o=e.cache[d]={normalized:[]},h=l[d]&&l[d].rows.length||0,n=0;n<h;++n)if(m={child:[],raw:[]},g=[],!(c=A(l[d].rows[n])).hasClass(e.selectorRemove.slice(1)))if(c.hasClass(e.cssChildRow)&&0!==n)for($=o.normalized.length-1,(b=o.normalized[$][e.columns]).$row=b.$row.add(c),c.prev().hasClass(e.cssChildRow)||c.prev().addClass(L.css.cssHasChild),p=c.children("th, td"),$=b.child.length,b.child[$]=[],x=0,C=e.columns,i=0;i<C;i++)(u=p[i])&&(b.child[$][i]=L.getParsedText(e,u,i),0<(w=p[i].colSpan-1)&&(x+=w,C+=w)),x++;else{for(m.$row=c,m.order=n,x=0,C=e.columns,i=0;i<C;++i){if((u=c[0].cells[i])&&x<e.columns&&(!(v=void 0!==R[x])&&T&&console.warn("No parser found for row: "+n+", column: "+i+'; cell containing: "'+A(u).text()+'"; does it have a header?'),s=L.getElementText(e,u,x),m.raw[x]=s,a=L.getParsedText(e,u,x,s),g[x]=a,v&&"numeric"===(R[x].type||"").toLowerCase()&&(y[x]=Math.max(Math.abs(a)||0,y[x]||0)),0<(w=u.colSpan-1))){for(I=0;I<=w;)a=e.duplicateSpan||0===I?a:"string"!=typeof e.textExtraction&&L.getElementText(e,u,x+I)||"",m.raw[x+I]=a,g[x+I]=a,I++;x+=w,C+=w}x++}g[e.columns]=m,o.normalized[o.normalized.length]=g}o.colMax=y,e.totalRows+=o.normalized.length}if(e.showProcessing&&L.isProcessing(D),T){for($=Math.min(5,e.cache[0].normalized.length),console[console.group?"group":"log"]("Building cache for "+e.totalRows+" rows (showing "+$+" rows in log) and "+e.columns+" columns"+L.benchmark(f)),s={},i=0;i<e.columns;i++)for(x=0;x<$;x++)s["row: "+x]||(s["row: "+x]={}),s["row: "+x][e.$headerIndexed[i].text()]=e.cache[0].normalized[x][i];console[console.table?"table":"log"](s),console.groupEnd&&console.groupEnd()}A.isFunction(t)&&t(D)},getColumnText:function(e,t,r,o){var s,a,n,i,d,l,c,g,p,u,f="function"==typeof r,h="all"===t,m={raw:[],parsed:[],$cell:[]},b=(e=A(e)[0]).config;if(!L.isEmptyObject(b)){for(d=b.$tbodies.length,s=0;s<d;s++)for(l=(n=b.cache[s].normalized).length,a=0;a<l;a++)i=n[a],o&&!i[b.columns].$row.is(o)||(u=!0,g=h?i.slice(0,b.columns):i[t],i=i[b.columns],c=h?i.raw:i.raw[t],p=h?i.$row.children():i.$row.children().eq(t),f&&(u=r({tbodyIndex:s,rowIndex:a,parsed:g,raw:c,$row:i.$row,$cell:p})),!1!==u&&(m.parsed[m.parsed.length]=g,m.raw[m.raw.length]=c,m.$cell[m.$cell.length]=p));return m}L.debug(b,"core")&&console.warn("No cache found - aborting getColumnText function!")},setHeadersCss:function(a){function e(e,t){e.removeClass(n).addClass(i[t]).attr("aria-sort",l[t]).find("."+L.css.icon).removeClass(d[2]).addClass(d[t])}var t,r,o=a.sortList,s=o.length,n=L.css.sortNone+" "+a.cssNone,i=[L.css.sortAsc+" "+a.cssAsc,L.css.sortDesc+" "+a.cssDesc],d=[a.cssIconAsc,a.cssIconDesc,a.cssIconNone],l=["ascending","descending"],c=a.$table.find("tfoot tr").children("td, th").add(A(a.namespace+"_extra_headers")).removeClass(i.join(" ")),g=a.$headers.add(A("thead "+a.namespace+"_extra_headers")).removeClass(i.join(" ")).addClass(n).attr("aria-sort","none").find("."+L.css.icon).removeClass(d.join(" ")).end();for(g.not(".sorter-false").find("."+L.css.icon).addClass(d[2]),a.cssIconDisabled&&g.filter(".sorter-false").find("."+L.css.icon).addClass(a.cssIconDisabled),t=0;t<s;t++)if(2!==o[t][1]){if((g=(g=a.$headers.filter(function(e){for(var t=!0,r=a.$headers.eq(e),o=parseInt(r.attr("data-column"),10),s=o+L.getClosest(r,"th, td")[0].colSpan;o<s;o++)t=!!t&&(t||-1<L.isValueInArray(o,a.sortList));return t})).not(".sorter-false").filter('[data-column="'+o[t][0]+'"]'+(1===s?":last":""))).length)for(r=0;r<g.length;r++)g[r].sortDisabled||e(g.eq(r),o[t][1]);c.length&&e(c.filter('[data-column="'+o[t][0]+'"]'),o[t][1])}for(s=a.$headers.length,t=0;t<s;t++)L.setColumnAriaLabel(a,a.$headers.eq(t))},getClosest:function(e,t){return A.fn.closest?e.closest(t):e.is(t)?e:e.parents(t).filter(":first")},setColumnAriaLabel:function(e,t,r){if(t.length){var o=parseInt(t.attr("data-column"),10),s=e.sortVars[o],a=t.hasClass(L.css.sortAsc)?"sortAsc":t.hasClass(L.css.sortDesc)?"sortDesc":"sortNone",n=A.trim(t.text())+": "+L.language[a];t.hasClass("sorter-false")||!1===r?n+=L.language.sortDisabled:(a=(s.count+1)%s.order.length,r=s.order[a],n+=L.language[0===r?"nextAsc":1===r?"nextDesc":"nextNone"]),t.attr("aria-label",n),s.sortedBy?t.attr("data-sortedBy",s.sortedBy):t.removeAttr("data-sortedBy")}},updateHeader:function(e){var t,r,o,s,a=e.table,n=e.$headers.length;for(t=0;t<n;t++)o=e.$headers.eq(t),s=L.getColumnData(a,e.headers,t,!0),r="false"===L.getData(o,s,"sorter")||"false"===L.getData(o,s,"parser"),L.setColumnSort(e,o,r)},setColumnSort:function(e,t,r){var o=e.table.id;t[0].sortDisabled=r,t[r?"addClass":"removeClass"]("sorter-false").attr("aria-disabled",""+r),e.tabIndex&&(r?t.removeAttr("tabindex"):t.attr("tabindex","0")),o&&(r?t.removeAttr("aria-controls"):t.attr("aria-controls",o))},updateHeaderSortCount:function(e,t){var r,o,s,a,n,i,d,l,c=t||e.sortList,g=c.length;for(e.sortList=[],a=0;a<g;a++)if(d=c[a],(r=parseInt(d[0],10))<e.columns){switch(e.sortVars[r].order||(l=L.getOrder(e.sortInitialOrder)?e.sortReset?[1,0,2]:[1,0]:e.sortReset?[0,1,2]:[0,1],e.sortVars[r].order=l,e.sortVars[r].count=0),l=e.sortVars[r].order,o=(o=(""+d[1]).match(/^(1|d|s|o|n)/))?o[0]:""){case"1":case"d":o=1;break;case"s":o=n||0;break;case"o":o=0===(i=l[(n||0)%l.length])?1:1===i?0:2;break;case"n":o=l[++e.sortVars[r].count%l.length];break;default:o=0}n=0===a?o:n,s=[r,parseInt(o,10)||0],e.sortList[e.sortList.length]=s,o=A.inArray(s[1],l),e.sortVars[r].count=0<=o?o:s[1]%l.length}},updateAll:function(e,t,r){var o=e.table;o.isUpdating=!0,L.refreshWidgets(o,!0,!0),L.buildHeaders(e),L.bindEvents(o,e.$headers,!0),L.bindMethods(e),L.commonUpdate(e,t,r)},update:function(e,t,r){e.table.isUpdating=!0,L.updateHeader(e),L.commonUpdate(e,t,r)},updateHeaders:function(e,t){e.table.isUpdating=!0,L.buildHeaders(e),L.bindEvents(e.table,e.$headers,!0),L.resortComplete(e,t)},updateCell:function(e,t,r,o){if(A(t).closest("tr").hasClass(e.cssChildRow))console.warn('Tablesorter Warning! "updateCell" for child row content has been disabled, use "update" instead');else{if(L.isEmptyObject(e.cache))return L.updateHeader(e),void L.commonUpdate(e,r,o);e.table.isUpdating=!0,e.$table.find(e.selectorRemove).remove();var s,a,n,i,d,l,c=e.$tbodies,g=A(t),p=c.index(L.getClosest(g,"tbody")),u=e.cache[p],f=L.getClosest(g,"tr");if(t=g[0],c.length&&0<=p){if(n=c.eq(p).find("tr").not("."+e.cssChildRow).index(f),d=u.normalized[n],(l=f[0].cells.length)!==e.columns)for(s=!1,a=i=0;a<l;a++)s||f[0].cells[a]===t?s=!0:i+=f[0].cells[a].colSpan;else i=g.index();s=L.getElementText(e,t,i),d[e.columns].raw[i]=s,s=L.getParsedText(e,t,i,s),d[i]=s,"numeric"===(e.parsers[i].type||"").toLowerCase()&&(u.colMax[i]=Math.max(Math.abs(s)||0,u.colMax[i]||0)),!1!==(s="undefined"!==r?r:e.resort)?L.checkResort(e,s,o):L.resortComplete(e,o)}else L.debug(e,"core")&&console.error("updateCell aborted, tbody missing or not within the indicated table"),e.table.isUpdating=!1}},addRows:function(e,t,r,o){var s,a,n,i,d,l,c,g,p,u,f,h,m,b="string"==typeof t&&1===e.$tbodies.length&&/<tr/.test(t||""),y=e.table;if(b)t=A(t),e.$tbodies.append(t);else if(!(t&&t instanceof A&&L.getClosest(t,"table")[0]===e.table))return L.debug(e,"core")&&console.error("addRows method requires (1) a jQuery selector reference to rows that have already been added to the table, or (2) row HTML string to be added to a table with only one tbody"),!1;if(y.isUpdating=!0,L.isEmptyObject(e.cache))L.updateHeader(e),L.commonUpdate(e,r,o);else{for(d=t.filter("tr").attr("role","row").length,n=e.$tbodies.index(t.parents("tbody").filter(":first")),e.parsers&&e.parsers.length||L.setupParsers(e),i=0;i<d;i++){for(p=0,c=t[i].cells.length,g=e.cache[n].normalized.length,f=[],u={child:[],raw:[],$row:t.eq(i),order:g},l=0;l<c;l++)h=t[i].cells[l],s=L.getElementText(e,h,p),u.raw[p]=s,a=L.getParsedText(e,h,p,s),f[p]=a,"numeric"===(e.parsers[p].type||"").toLowerCase()&&(e.cache[n].colMax[p]=Math.max(Math.abs(a)||0,e.cache[n].colMax[p]||0)),0<(m=h.colSpan-1)&&(p+=m),p++;f[e.columns]=u,e.cache[n].normalized[g]=f}L.checkResort(e,r,o)}},updateCache:function(e,t,r){e.parsers&&e.parsers.length||L.setupParsers(e,r),L.buildCache(e,t,r)},appendCache:function(e,t){var r,o,s,a,n,i,d,l=e.table,c=e.$tbodies,g=[],p=e.cache;if(L.isEmptyObject(p))return e.appender?e.appender(l,g):l.isUpdating?e.$table.triggerHandler("updateComplete",l):"";for(L.debug(e,"core")&&(d=new Date),i=0;i<c.length;i++)if((s=c.eq(i)).length){for(a=L.processTbody(l,s,!0),o=(r=p[i].normalized).length,n=0;n<o;n++)g[g.length]=r[n][e.columns].$row,e.appender&&(!e.pager||e.pager.removeRows||e.pager.ajax)||a.append(r[n][e.columns].$row);L.processTbody(l,a,!1)}e.appender&&e.appender(l,g),L.debug(e,"core")&&console.log("Rebuilt table"+L.benchmark(d)),t||e.appender||L.applyWidget(l),l.isUpdating&&e.$table.triggerHandler("updateComplete",l)},commonUpdate:function(e,t,r){e.$table.find(e.selectorRemove).remove(),L.setupParsers(e),L.buildCache(e),L.checkResort(e,t,r)},initSort:function(t,e,r){if(t.table.isUpdating)return setTimeout(function(){L.initSort(t,e,r)},50);var o,s,a,n,i,d,l,c=!r[t.sortMultiSortKey],g=t.table,p=t.$headers.length,u=L.getClosest(A(e),"th, td"),f=parseInt(u.attr("data-column"),10),h="mouseup"===r.type?"user":r.type,m=t.sortVars[f].order;if(u=u[0],t.$table.triggerHandler("sortStart",g),d=(t.sortVars[f].count+1)%m.length,t.sortVars[f].count=r[t.sortResetKey]?2:d,t.sortRestart)for(a=0;a<p;a++)l=t.$headers.eq(a),f!==(d=parseInt(l.attr("data-column"),10))&&(c||l.hasClass(L.css.sortNone))&&(t.sortVars[d].count=-1);if(c){if(A.each(t.sortVars,function(e){t.sortVars[e].sortedBy=""}),t.sortList=[],t.last.sortList=[],null!==t.sortForce)for(o=t.sortForce,s=0;s<o.length;s++)o[s][0]!==f&&(t.sortList[t.sortList.length]=o[s],t.sortVars[o[s][0]].sortedBy="sortForce");if((n=m[t.sortVars[f].count])<2&&(t.sortList[t.sortList.length]=[f,n],t.sortVars[f].sortedBy=h,1<u.colSpan))for(s=1;s<u.colSpan;s++)t.sortList[t.sortList.length]=[f+s,n],t.sortVars[f+s].count=A.inArray(n,m),t.sortVars[f+s].sortedBy=h}else if(t.sortList=A.extend([],t.last.sortList),0<=L.isValueInArray(f,t.sortList))for(t.sortVars[f].sortedBy=h,s=0;s<t.sortList.length;s++)(d=t.sortList[s])[0]===f&&(d[1]=m[t.sortVars[f].count],2===d[1]&&(t.sortList.splice(s,1),t.sortVars[f].count=-1));else if(n=m[t.sortVars[f].count],t.sortVars[f].sortedBy=h,n<2&&(t.sortList[t.sortList.length]=[f,n],1<u.colSpan))for(s=1;s<u.colSpan;s++)t.sortList[t.sortList.length]=[f+s,n],t.sortVars[f+s].count=A.inArray(n,m),t.sortVars[f+s].sortedBy=h;if(t.last.sortList=A.extend([],t.sortList),t.sortList.length&&t.sortAppend&&(o=A.isArray(t.sortAppend)?t.sortAppend:t.sortAppend[t.sortList[0][0]],!L.isEmptyObject(o)))for(s=0;s<o.length;s++)if(o[s][0]!==f&&L.isValueInArray(o[s][0],t.sortList)<0){if(i=(""+(n=o[s][1])).match(/^(a|d|s|o|n)/))switch(d=t.sortList[0][1],i[0]){case"d":n=1;break;case"s":n=d;break;case"o":n=0===d?1:0;break;case"n":n=(d+1)%m.length;break;default:n=0}t.sortList[t.sortList.length]=[o[s][0],n],t.sortVars[o[s][0]].sortedBy="sortAppend"}t.$table.triggerHandler("sortBegin",g),setTimeout(function(){L.setHeadersCss(t),L.multisort(t),L.appendCache(t),t.$table.triggerHandler("sortBeforeEnd",g),t.$table.triggerHandler("sortEnd",g)},1)},multisort:function(l){var e,t,c,r,g=l.table,p=[],u=0,f=l.textSorter||"",h=l.sortList,m=h.length,o=l.$tbodies.length;if(!l.serverSideSorting&&!L.isEmptyObject(l.cache)){if(L.debug(l,"core")&&(t=new Date),"object"==typeof f)for(c=l.columns;c--;)"function"==typeof(r=L.getColumnData(g,f,c))&&(p[c]=r);for(e=0;e<o;e++)c=l.cache[e].colMax,l.cache[e].normalized.sort(function(e,t){var r,o,s,a,n,i,d;for(r=0;r<m;r++){if(s=h[r][0],a=h[r][1],u=0===a,l.sortStable&&e[s]===t[s]&&1===m)return e[l.columns].order-t[l.columns].order;if(n=(o=/n/i.test(L.getSortType(l.parsers,s)))&&l.strings[s]?(o="boolean"==typeof L.string[l.strings[s]]?(u?1:-1)*(L.string[l.strings[s]]?-1:1):l.strings[s]&&L.string[l.strings[s]]||0,l.numberSorter?l.numberSorter(e[s],t[s],u,c[s],g):L["sortNumeric"+(u?"Asc":"Desc")](e[s],t[s],o,c[s],s,l)):(i=u?e:t,d=u?t:e,"function"==typeof f?f(i[s],d[s],u,s,g):"function"==typeof p[s]?p[s](i[s],d[s],u,s,g):L["sortNatural"+(u?"Asc":"Desc")](e[s]||"",t[s]||"",s,l)))return n}return e[l.columns].order-t[l.columns].order});L.debug(l,"core")&&console.log("Applying sort "+h.toString()+L.benchmark(t))}},resortComplete:function(e,t){e.table.isUpdating&&e.$table.triggerHandler("updateComplete",e.table),A.isFunction(t)&&t(e.table)},checkResort:function(e,t,r){var o=A.isArray(t)?t:e.sortList;!1===(void 0===t?e.resort:t)||e.serverSideSorting||e.table.isProcessing?(L.resortComplete(e,r),L.applyWidget(e.table,!1)):o.length?L.sortOn(e,o,function(){L.resortComplete(e,r)},!0):L.sortReset(e,function(){L.resortComplete(e,r),L.applyWidget(e.table,!1)})},sortOn:function(e,t,r,o){var s,a=e.table;for(e.$table.triggerHandler("sortStart",a),s=0;s<e.columns;s++)e.sortVars[s].sortedBy=-1<L.isValueInArray(s,t)?"sorton":"";L.updateHeaderSortCount(e,t),L.setHeadersCss(e),e.delayInit&&L.isEmptyObject(e.cache)&&L.buildCache(e),e.$table.triggerHandler("sortBegin",a),L.multisort(e),L.appendCache(e,o),e.$table.triggerHandler("sortBeforeEnd",a),e.$table.triggerHandler("sortEnd",a),L.applyWidget(a),A.isFunction(r)&&r(a)},sortReset:function(e,t){var r;for(e.sortList=[],r=0;r<e.columns;r++)e.sortVars[r].count=-1,e.sortVars[r].sortedBy="";L.setHeadersCss(e),L.multisort(e),L.appendCache(e),A.isFunction(t)&&t(e.table)},getSortType:function(e,t){return e&&e[t]&&e[t].type||""},getOrder:function(e){return/^d/i.test(e)||1===e},sortNatural:function(e,t){if(e===t)return 0;e=(e||"").toString(),t=(t||"").toString();var r,o,s,a,n,i,d=L.regex;if(d.hex.test(t)){if((r=parseInt(e.match(d.hex),16))<(o=parseInt(t.match(d.hex),16)))return-1;if(o<r)return 1}for(r=e.replace(d.chunk,"\\0$1\\0").replace(d.chunks,"").split("\\0"),o=t.replace(d.chunk,"\\0$1\\0").replace(d.chunks,"").split("\\0"),i=Math.max(r.length,o.length),n=0;n<i;n++){if(s=isNaN(r[n])?r[n]||0:parseFloat(r[n])||0,a=isNaN(o[n])?o[n]||0:parseFloat(o[n])||0,isNaN(s)!==isNaN(a))return isNaN(s)?1:-1;if(typeof s!=typeof a&&(s+="",a+=""),s<a)return-1;if(a<s)return 1}return 0},sortNaturalAsc:function(e,t,r,o){if(e===t)return 0;var s=L.string[o.empties[r]||o.emptyTo];return""===e&&0!==s?"boolean"==typeof s?s?-1:1:-s||-1:""===t&&0!==s?"boolean"==typeof s?s?1:-1:s||1:L.sortNatural(e,t)},sortNaturalDesc:function(e,t,r,o){if(e===t)return 0;var s=L.string[o.empties[r]||o.emptyTo];return""===e&&0!==s?"boolean"==typeof s?s?-1:1:s||1:""===t&&0!==s?"boolean"==typeof s?s?1:-1:-s||-1:L.sortNatural(t,e)},sortText:function(e,t){return t<e?1:e<t?-1:0},getTextValue:function(e,t,r){if(r){var o,s=e?e.length:0,a=r+t;for(o=0;o<s;o++)a+=e.charCodeAt(o);return t*a}return 0},sortNumericAsc:function(e,t,r,o,s,a){if(e===t)return 0;var n=L.string[a.empties[s]||a.emptyTo];return""===e&&0!==n?"boolean"==typeof n?n?-1:1:-n||-1:""===t&&0!==n?"boolean"==typeof n?n?1:-1:n||1:(isNaN(e)&&(e=L.getTextValue(e,r,o)),isNaN(t)&&(t=L.getTextValue(t,r,o)),e-t)},sortNumericDesc:function(e,t,r,o,s,a){if(e===t)return 0;var n=L.string[a.empties[s]||a.emptyTo];return""===e&&0!==n?"boolean"==typeof n?n?-1:1:n||1:""===t&&0!==n?"boolean"==typeof n?n?1:-1:-n||-1:(isNaN(e)&&(e=L.getTextValue(e,r,o)),isNaN(t)&&(t=L.getTextValue(t,r,o)),t-e)},sortNumeric:function(e,t){return e-t},addWidget:function(e){e.id&&!L.isEmptyObject(L.getWidgetById(e.id))&&console.warn('"'+e.id+'" widget was loaded more than once!'),L.widgets[L.widgets.length]=e},hasWidget:function(e,t){return(e=A(e)).length&&e[0].config&&e[0].config.widgetInit[t]||!1},getWidgetById:function(e){var t,r,o=L.widgets.length;for(t=0;t<o;t++)if((r=L.widgets[t])&&r.id&&r.id.toLowerCase()===e.toLowerCase())return r},applyWidgetOptions:function(e){var t,r,o,s=e.config,a=s.widgets.length;if(a)for(t=0;t<a;t++)(r=L.getWidgetById(s.widgets[t]))&&r.options&&(o=A.extend(!0,{},r.options),s.widgetOptions=A.extend(!0,o,s.widgetOptions),A.extend(!0,L.defaults.widgetOptions,r.options))},addWidgetFromClass:function(e){var t,r,o=e.config,s="^"+o.widgetClass.replace(L.regex.templateName,"(\\S+)+")+"$",a=new RegExp(s,"g"),n=(e.className||"").split(L.regex.spaces);if(n.length)for(t=n.length,r=0;r<t;r++)n[r].match(a)&&(o.widgets[o.widgets.length]=n[r].replace(a,"$1"))},applyWidgetId:function(e,t,r){var o,s,a,n=(e=A(e)[0]).config,i=n.widgetOptions,d=L.debug(n,"core"),l=L.getWidgetById(t);l&&(a=l.id,o=!1,A.inArray(a,n.widgets)<0&&(n.widgets[n.widgets.length]=a),d&&(s=new Date),!r&&n.widgetInit[a]||(n.widgetInit[a]=!0,e.hasInitialized&&L.applyWidgetOptions(e),"function"==typeof l.init&&(o=!0,d&&console[console.group?"group":"log"]("Initializing "+a+" widget"),l.init(e,l,n,i))),r||"function"!=typeof l.format||(o=!0,d&&console[console.group?"group":"log"]("Updating "+a+" widget"),l.format(e,n,i,!1)),d&&o&&(console.log("Completed "+(r?"initializing ":"applying ")+a+" widget"+L.benchmark(s)),console.groupEnd&&console.groupEnd()))},applyWidget:function(e,t,r){var o,s,a,n,i,d=(e=A(e)[0]).config,l=L.debug(d,"core"),c=[];if(!1===t||!e.hasInitialized||!e.isApplyingWidgets&&!e.isUpdating){if(l&&(i=new Date),L.addWidgetFromClass(e),clearTimeout(d.timerReady),d.widgets.length){for(e.isApplyingWidgets=!0,d.widgets=A.grep(d.widgets,function(e,t){return A.inArray(e,d.widgets)===t}),s=(a=d.widgets||[]).length,o=0;o<s;o++)(n=L.getWidgetById(a[o]))&&n.id?(n.priority||(n.priority=10),c[o]=n):l&&console.warn('"'+a[o]+'" was enabled, but the widget code has not been loaded!');for(c.sort(function(e,t){return e.priority<t.priority?-1:e.priority===t.priority?0:1}),s=c.length,l&&console[console.group?"group":"log"]("Start "+(t?"initializing":"applying")+" widgets"),o=0;o<s;o++)(n=c[o])&&n.id&&L.applyWidgetId(e,n.id,t);l&&console.groupEnd&&console.groupEnd()}d.timerReady=setTimeout(function(){e.isApplyingWidgets=!1,A.data(e,"lastWidgetApplication",new Date),d.$table.triggerHandler("tablesorter-ready"),t||"function"!=typeof r||r(e),l&&(n=d.widgets.length,console.log("Completed "+(!0===t?"initializing ":"applying ")+n+" widget"+(1!==n?"s":"")+L.benchmark(i)))},10)}},removeWidget:function(e,t,r){var o,s,a,n,i=(e=A(e)[0]).config;if(!0===t)for(t=[],n=L.widgets.length,a=0;a<n;a++)(s=L.widgets[a])&&s.id&&(t[t.length]=s.id);else t=(A.isArray(t)?t.join(","):t||"").toLowerCase().split(/[\s,]+/);for(n=t.length,o=0;o<n;o++)s=L.getWidgetById(t[o]),0<=(a=A.inArray(t[o],i.widgets))&&!0!==r&&i.widgets.splice(a,1),s&&s.remove&&(L.debug(i,"core")&&console.log((r?"Refreshing":"Removing")+' "'+t[o]+'" widget'),s.remove(e,i,i.widgetOptions,r),i.widgetInit[t[o]]=!1);i.$table.triggerHandler("widgetRemoveEnd",e)},refreshWidgets:function(e,t,r){function o(e){A(e).triggerHandler("refreshComplete")}var s,a,n=(e=A(e)[0]).config.widgets,i=L.widgets,d=i.length,l=[];for(s=0;s<d;s++)(a=i[s])&&a.id&&(t||A.inArray(a.id,n)<0)&&(l[l.length]=a.id);L.removeWidget(e,l.join(","),!0),!0!==r?(L.applyWidget(e,t||!1,o),t&&L.applyWidget(e,!1,o)):o(e)},benchmark:function(e){return" ("+((new Date).getTime()-e.getTime())+" ms)"},log:function(){console.log(arguments)},debug:function(e,t){return e&&(!0===e.debug||"string"==typeof e.debug&&-1<e.debug.indexOf(t))},isEmptyObject:function(e){for(var t in e)return!1;return!0},isValueInArray:function(e,t){var r,o=t&&t.length||0;for(r=0;r<o;r++)if(t[r][0]===e)return r;return-1},formatFloat:function(e,t){return"string"!=typeof e||""===e?e:(e=(t&&t.config?!1!==t.config.usNumberFormat:void 0===t||t)?e.replace(L.regex.comma,""):e.replace(L.regex.digitNonUS,"").replace(L.regex.comma,"."),L.regex.digitNegativeTest.test(e)&&(e=e.replace(L.regex.digitNegativeReplace,"-$1")),r=parseFloat(e),isNaN(r)?A.trim(e):r);var r},isDigit:function(e){return isNaN(e)?L.regex.digitTest.test(e.toString().replace(L.regex.digitReplace,"")):""!==e},computeColumnIndex:function(e,t){var r,o,s,a,n,i,d,l,c,g,p=t&&t.columns||0,u=[],f=new Array(p);for(r=0;r<e.length;r++)for(i=e[r].cells,o=0;o<i.length;o++){for(d=r,l=(n=i[o]).rowSpan||1,c=n.colSpan||1,void 0===u[d]&&(u[d]=[]),s=0;s<u[d].length+1;s++)if(void 0===u[d][s]){g=s;break}for(p&&n.cellIndex===g||(n.setAttribute?n.setAttribute("data-column",g):A(n).attr("data-column",g)),s=d;s<d+l;s++)for(void 0===u[s]&&(u[s]=[]),f=u[s],a=g;a<g+c;a++)f[a]="x"}return L.checkColumnCount(e,u,f.length),f.length},checkColumnCount:function(e,t,r){var o,s,a=!0,n=[];for(o=0;o<t.length;o++)if(t[o]&&(s=t[o].length,t[o].length!==r)){a=!1;break}a||(e.each(function(e,t){var r=t.parentElement.nodeName;n.indexOf(r)<0&&n.push(r)}),console.error("Invalid or incorrect number of columns in the "+n.join(" or ")+"; expected "+r+", but found "+s+" columns"))},fixColumnWidth:function(e){var t,r,o,s,a,n=(e=A(e)[0]).config,i=n.$table.children("colgroup");if(i.length&&i.hasClass(L.css.colgroup)&&i.remove(),n.widthFixed&&0===n.$table.children("colgroup").length){for(i=A('<colgroup class="'+L.css.colgroup+'">'),t=n.$table.width(),s=(o=n.$tbodies.find("tr:first").children(":visible")).length,a=0;a<s;a++)r=parseInt(o.eq(a).width()/t*1e3,10)/10+"%",i.append(A("<col>").css("width",r));n.$table.prepend(i)}},getData:function(e,t,r){var o,s,a="",n=A(e);return n.length?(o=!!A.metadata&&n.metadata(),s=" "+(n.attr("class")||""),void 0!==n.data(r)||void 0!==n.data(r.toLowerCase())?a+=n.data(r)||n.data(r.toLowerCase()):o&&void 0!==o[r]?a+=o[r]:t&&void 0!==t[r]?a+=t[r]:" "!==s&&s.match(" "+r+"-")&&(a=s.match(new RegExp("\\s"+r+"-([\\w-]+)"))[1]||""),A.trim(a)):""},getColumnData:function(e,t,r,o,s){if("object"!=typeof t||null===t)return t;var a,n=(e=A(e)[0]).config,i=s||n.$headers,d=n.$headerIndexed&&n.$headerIndexed[r]||i.find('[data-column="'+r+'"]:last');if(void 0!==t[r])return o?t[r]:t[i.index(d)];for(a in t)if("string"==typeof a&&d.filter(a).add(d.find(a)).length)return t[a]},isProcessing:function(e,t,r){var o=(e=A(e))[0].config,s=r||e.find("."+L.css.header);t?(void 0!==r&&0<o.sortList.length&&(s=s.filter(function(){return!this.sortDisabled&&0<=L.isValueInArray(parseFloat(A(this).attr("data-column")),o.sortList)})),e.add(s).addClass(L.css.processing+" "+o.cssProcessing)):e.add(s).removeClass(L.css.processing+" "+o.cssProcessing)},processTbody:function(e,t,r){if(e=A(e)[0],r)return e.isProcessing=!0,t.before('<colgroup class="tablesorter-savemyplace"/>'),A.fn.detach?t.detach():t.remove();var o=A(e).find("colgroup.tablesorter-savemyplace");t.insertAfter(o),o.remove(),e.isProcessing=!1},clearTableBody:function(e){A(e)[0].config.$tbodies.children().detach()},characterEquivalents:{a:"áàâãäąå",A:"ÁÀÂÃÄĄÅ",c:"çćč",C:"ÇĆČ",e:"éèêëěę",E:"ÉÈÊËĚĘ",i:"íìİîïı",I:"ÍÌİÎÏ",o:"óòôõöō",O:"ÓÒÔÕÖŌ",ss:"ß",SS:"ẞ",u:"úùûüů",U:"ÚÙÛÜŮ"},replaceAccents:function(e){var t,r="[",o=L.characterEquivalents;if(!L.characterRegex){for(t in L.characterRegexArray={},o)"string"==typeof t&&(r+=o[t],L.characterRegexArray[t]=new RegExp("["+o[t]+"]","g"));L.characterRegex=new RegExp(r+"]")}if(L.characterRegex.test(e))for(t in o)"string"==typeof t&&(e=e.replace(L.characterRegexArray[t],t));return e},validateOptions:function(e){var t,r,o,s,a="headers sortForce sortList sortAppend widgets".split(" "),n=e.originalSettings;if(n){for(t in L.debug(e,"core")&&(s=new Date),n)if("undefined"===(o=typeof L.defaults[t]))console.warn('Tablesorter Warning! "table.config.'+t+'" option not recognized');else if("object"===o)for(r in n[t])o=L.defaults[t]&&typeof L.defaults[t][r],A.inArray(t,a)<0&&"undefined"===o&&console.warn('Tablesorter Warning! "table.config.'+t+"."+r+'" option not recognized');L.debug(e,"core")&&console.log("validate options time:"+L.benchmark(s))}},restoreHeaders:function(e){var t,r,o=A(e)[0].config,s=o.$table.find(o.selectorHeaders),a=s.length;for(t=0;t<a;t++)(r=s.eq(t)).find("."+L.css.headerIn).length&&r.html(o.headerContent[t])},destroy:function(e,t,r){if((e=A(e)[0]).hasInitialized){L.removeWidget(e,!0,!1);var o,s=A(e),a=e.config,n=s.find("thead:first"),i=n.find("tr."+L.css.headerRow).removeClass(L.css.headerRow+" "+a.cssHeaderRow),d=s.find("tfoot:first > tr").children("th, td");!1===t&&0<=A.inArray("uitheme",a.widgets)&&(s.triggerHandler("applyWidgetId",["uitheme"]),s.triggerHandler("applyWidgetId",["zebra"])),n.find("tr").not(i).remove(),o="sortReset update updateRows updateAll updateHeaders updateCell addRows updateComplete sorton appendCache updateCache applyWidgetId applyWidgets refreshWidgets removeWidget destroy mouseup mouseleave "+"keypress sortBegin sortEnd resetToLoadState ".split(" ").join(a.namespace+" "),s.removeData("tablesorter").unbind(o.replace(L.regex.spaces," ")),a.$headers.add(d).removeClass([L.css.header,a.cssHeader,a.cssAsc,a.cssDesc,L.css.sortAsc,L.css.sortDesc,L.css.sortNone].join(" ")).removeAttr("data-column").removeAttr("aria-label").attr("aria-disabled","true"),i.find(a.selectorSort).unbind("mousedown mouseup keypress ".split(" ").join(a.namespace+" ").replace(L.regex.spaces," ")),L.restoreHeaders(e),s.toggleClass(L.css.table+" "+a.tableClass+" tablesorter-"+a.theme,!1===t),s.removeClass(a.namespace.slice(1)),e.hasInitialized=!1,delete e.config.cache,"function"==typeof r&&r(e),L.debug(a,"core")&&console.log("tablesorter has been removed")}}};A.fn.tablesorter=function(t){return this.each(function(){var e=A.extend(!0,{},L.defaults,t,L.instanceMethods);e.originalSettings=t,!this.hasInitialized&&L.buildTable&&"TABLE"!==this.nodeName?L.buildTable(this,e):L.setup(this,e)})},window.console&&window.console.log||(L.logs=[],console={},console.log=console.warn=console.error=console.table=function(){var e=1<arguments.length?arguments:arguments[0];L.logs[L.logs.length]={date:Date.now(),log:e}}),L.addParser({id:"no-parser",is:function(){return!1},format:function(){return""},type:"text"}),L.addParser({id:"text",is:function(){return!0},format:function(e,t){var r=t.config;return e&&(e=A.trim(r.ignoreCase?e.toLocaleLowerCase():e),e=r.sortLocaleCompare?L.replaceAccents(e):e),e},type:"text"}),L.regex.nondigit=/[^\w,. \-()]/g,L.addParser({id:"digit",is:function(e){return L.isDigit(e)},format:function(e,t){var r=L.formatFloat((e||"").replace(L.regex.nondigit,""),t);return e&&"number"==typeof r?r:e?A.trim(e&&t.config.ignoreCase?e.toLocaleLowerCase():e):e},type:"numeric"}),L.regex.currencyReplace=/[+\-,. ]/g,L.regex.currencyTest=/^\(?\d+[\u00a3$\u20ac\u00a4\u00a5\u00a2?.]|[\u00a3$\u20ac\u00a4\u00a5\u00a2?.]\d+\)?$/,L.addParser({id:"currency",is:function(e){return e=(e||"").replace(L.regex.currencyReplace,""),L.regex.currencyTest.test(e)},format:function(e,t){var r=L.formatFloat((e||"").replace(L.regex.nondigit,""),t);return e&&"number"==typeof r?r:e?A.trim(e&&t.config.ignoreCase?e.toLocaleLowerCase():e):e},type:"numeric"}),L.regex.urlProtocolTest=/^(https?|ftp|file):\/\//,L.regex.urlProtocolReplace=/(https?|ftp|file):\/\/(www\.)?/,L.addParser({id:"url",is:function(e){return L.regex.urlProtocolTest.test(e)},format:function(e){return e?A.trim(e.replace(L.regex.urlProtocolReplace,"")):e},type:"text"}),L.regex.dash=/-/g,L.regex.isoDate=/^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}/,L.addParser({id:"isoDate",is:function(e){return L.regex.isoDate.test(e)},format:function(e){var t=e?new Date(e.replace(L.regex.dash,"/")):e;return t instanceof Date&&isFinite(t)?t.getTime():e},type:"numeric"}),L.regex.percent=/%/g,L.regex.percentTest=/(\d\s*?%|%\s*?\d)/,L.addParser({id:"percent",is:function(e){return L.regex.percentTest.test(e)&&e.length<15},format:function(e,t){return e?L.formatFloat(e.replace(L.regex.percent,""),t):e},type:"numeric"}),L.addParser({id:"image",is:function(e,t,r,o){return 0<o.find("img").length},format:function(e,t,r){return A(r).find("img").attr(t.config.imgAttr||"alt")||e},parsed:!0,type:"text"}),L.regex.dateReplace=/(\S)([AP]M)$/i,L.regex.usLongDateTest1=/^[A-Z]{3,10}\.?\s+\d{1,2},?\s+(\d{4})(\s+\d{1,2}:\d{2}(:\d{2})?(\s+[AP]M)?)?$/i,L.regex.usLongDateTest2=/^\d{1,2}\s+[A-Z]{3,10}\s+\d{4}/i,L.addParser({id:"usLongDate",is:function(e){return L.regex.usLongDateTest1.test(e)||L.regex.usLongDateTest2.test(e)},format:function(e){var t=e?new Date(e.replace(L.regex.dateReplace,"$1 $2")):e;return t instanceof Date&&isFinite(t)?t.getTime():e},type:"numeric"}),L.regex.shortDateTest=/(^\d{1,2}[\/\s]\d{1,2}[\/\s]\d{4})|(^\d{4}[\/\s]\d{1,2}[\/\s]\d{1,2})/,L.regex.shortDateReplace=/[\-.,]/g,L.regex.shortDateXXY=/(\d{1,2})[\/\s](\d{1,2})[\/\s](\d{4})/,L.regex.shortDateYMD=/(\d{4})[\/\s](\d{1,2})[\/\s](\d{1,2})/,L.convertFormat=function(e,t){e=(e||"").replace(L.regex.spaces," ").replace(L.regex.shortDateReplace,"/"),"mmddyyyy"===t?e=e.replace(L.regex.shortDateXXY,"$3/$1/$2"):"ddmmyyyy"===t?e=e.replace(L.regex.shortDateXXY,"$3/$2/$1"):"yyyymmdd"===t&&(e=e.replace(L.regex.shortDateYMD,"$1/$2/$3"));var r=new Date(e);return r instanceof Date&&isFinite(r)?r.getTime():""},L.addParser({id:"shortDate",is:function(e){return e=(e||"").replace(L.regex.spaces," ").replace(L.regex.shortDateReplace,"/"),L.regex.shortDateTest.test(e)},format:function(e,t,r,o){if(e){var s=t.config,a=s.$headerIndexed[o],n=a.length&&a.data("dateFormat")||L.getData(a,L.getColumnData(t,s.headers,o),"dateFormat")||s.dateFormat;return a.length&&a.data("dateFormat",n),L.convertFormat(e,n)||e}return e},type:"numeric"}),L.regex.timeTest=/^(0?[1-9]|1[0-2]):([0-5]\d)(\s[AP]M)$|^((?:[01]\d|[2][0-4]):[0-5]\d)$/i,L.regex.timeMatch=/(0?[1-9]|1[0-2]):([0-5]\d)(\s[AP]M)|((?:[01]\d|[2][0-4]):[0-5]\d)/i,L.addParser({id:"time",is:function(e){return L.regex.timeTest.test(e)},format:function(e){var t=(e||"").match(L.regex.timeMatch),r=new Date(e),o=e&&(null!==t?t[0]:"00:00 AM"),s=o?new Date("2000/01/01 "+o.replace(L.regex.dateReplace,"$1 $2")):o;return s instanceof Date&&isFinite(s)?(r instanceof Date&&isFinite(r)?r.getTime():0)?parseFloat(s.getTime()+"."+r.getTime()):s.getTime():e},type:"numeric"}),L.addParser({id:"metadata",is:function(){return!1},format:function(e,t,r){var o=t.config,s=o.parserMetadataName?o.parserMetadataName:"sortValue";return A(r).metadata()[s]},type:"numeric"}),L.addWidget({id:"zebra",priority:90,format:function(e,t,r){var o,s,a,n,i,d,l,c=new RegExp(t.cssChildRow,"i"),g=t.$tbodies.add(A(t.namespace+"_extra_table").children("tbody:not(."+t.cssInfoBlock+")"));for(i=0;i<g.length;i++)for(a=0,l=(o=g.eq(i).children("tr:visible").not(t.selectorRemove)).length,d=0;d<l;d++)s=o.eq(d),c.test(s[0].className)||a++,n=a%2==0,s.removeClass(r.zebra[n?1:0]).addClass(r.zebra[n?0:1])},remove:function(e,t,r,o){if(!o){var s,a,n=t.$tbodies,i=(r.zebra||["even","odd"]).join(" ");for(s=0;s<n.length;s++)(a=L.processTbody(e,n.eq(s),!0)).children().removeClass(i),L.processTbody(e,a,!1)}}})}(e),e.tablesorter});
js/tablesorter/jquery.tablesorter.widgets.js CHANGED
@@ -1,397 +1,397 @@
1
- /*! tablesorter (FORK) - updated 2019-12-01 (v2.31.2)*/
2
  /* Includes widgets ( storage,uitheme,columns,filter,stickyHeaders,resizable,saveSort ) */
3
  (function(factory){if (typeof define === 'function' && define.amd){define(['jquery'], factory);} else if (typeof module === 'object' && typeof module.exports === 'object'){module.exports = factory(require('jquery'));} else {factory(jQuery);}}(function(jQuery) {
4
- /*! Widget: storage - updated 2018-03-18 (v2.30.0) */
5
- /*global JSON:false */
6
- ;(function ($, window, document) {
7
- 'use strict';
8
-
9
- var ts = $.tablesorter || {};
10
-
11
- // update defaults for validator; these values must be falsy!
12
- $.extend(true, ts.defaults, {
13
- fixedUrl: '',
14
- widgetOptions: {
15
- storage_fixedUrl: '',
16
- storage_group: '',
17
- storage_page: '',
18
- storage_storageType: '',
19
- storage_tableId: '',
20
- storage_useSessionStorage: ''
21
- }
22
- });
23
-
24
- // *** Store data in local storage, with a cookie fallback ***
25
- /* IE7 needs JSON library for JSON.stringify - (http://caniuse.com/#search=json)
26
- if you need it, then include https://github.com/douglascrockford/JSON-js
27
-
28
- $.parseJSON is not available is jQuery versions older than 1.4.1, using older
29
- versions will only allow storing information for one page at a time
30
-
31
- // *** Save data (JSON format only) ***
32
- // val must be valid JSON... use http://jsonlint.com/ to ensure it is valid
33
- var val = { "mywidget" : "data1" }; // valid JSON uses double quotes
34
- // $.tablesorter.storage(table, key, val);
35
- $.tablesorter.storage(table, 'tablesorter-mywidget', val);
36
-
37
- // *** Get data: $.tablesorter.storage(table, key); ***
38
- v = $.tablesorter.storage(table, 'tablesorter-mywidget');
39
- // val may be empty, so also check for your data
40
- val = (v && v.hasOwnProperty('mywidget')) ? v.mywidget : '';
41
- alert(val); // 'data1' if saved, or '' if not
42
- */
43
- ts.storage = function(table, key, value, options) {
44
- table = $(table)[0];
45
- var cookieIndex, cookies, date,
46
- hasStorage = false,
47
- values = {},
48
- c = table.config,
49
- wo = c && c.widgetOptions,
50
- debug = ts.debug(c, 'storage'),
51
- storageType = (
52
- ( options && options.storageType ) || ( wo && wo.storage_storageType )
53
- ).toString().charAt(0).toLowerCase(),
54
- // deprecating "useSessionStorage"; any storageType setting overrides it
55
- session = storageType ? '' :
56
- ( options && options.useSessionStorage ) || ( wo && wo.storage_useSessionStorage ),
57
- $table = $(table),
58
- // id from (1) options ID, (2) table 'data-table-group' attribute, (3) widgetOptions.storage_tableId,
59
- // (4) table ID, then (5) table index
60
- id = options && options.id ||
61
- $table.attr( options && options.group || wo && wo.storage_group || 'data-table-group') ||
62
- wo && wo.storage_tableId || table.id || $('.tablesorter').index( $table ),
63
- // url from (1) options url, (2) table 'data-table-page' attribute, (3) widgetOptions.storage_fixedUrl,
64
- // (4) table.config.fixedUrl (deprecated), then (5) window location path
65
- url = options && options.url ||
66
- $table.attr(options && options.page || wo && wo.storage_page || 'data-table-page') ||
67
- wo && wo.storage_fixedUrl || c && c.fixedUrl || window.location.pathname;
68
-
69
- // skip if using cookies
70
- if (storageType !== 'c') {
71
- storageType = (storageType === 's' || session) ? 'sessionStorage' : 'localStorage';
72
- // https://gist.github.com/paulirish/5558557
73
- if (storageType in window) {
74
- try {
75
- window[storageType].setItem('_tmptest', 'temp');
76
- hasStorage = true;
77
- window[storageType].removeItem('_tmptest');
78
- } catch (error) {
79
- console.warn( storageType + ' is not supported in this browser' );
80
- }
81
- }
82
- }
83
- if (debug) {
84
- console.log('Storage >> Using', hasStorage ? storageType : 'cookies');
85
- }
86
- // *** get value ***
87
- if ($.parseJSON) {
88
- if (hasStorage) {
89
- values = $.parseJSON( window[storageType][key] || 'null' ) || {};
90
- } else {
91
- // old browser, using cookies
92
- cookies = document.cookie.split(/[;\s|=]/);
93
- // add one to get from the key to the value
94
- cookieIndex = $.inArray(key, cookies) + 1;
95
- values = (cookieIndex !== 0) ? $.parseJSON(cookies[cookieIndex] || 'null') || {} : {};
96
- }
97
- }
98
- // allow value to be an empty string too
99
- if (typeof value !== 'undefined' && window.JSON && JSON.hasOwnProperty('stringify')) {
100
- // add unique identifiers = url pathname > table ID/index on page > data
101
- if (!values[url]) {
102
- values[url] = {};
103
- }
104
- values[url][id] = value;
105
- // *** set value ***
106
- if (hasStorage) {
107
- window[storageType][key] = JSON.stringify(values);
108
- } else {
109
- date = new Date();
110
- date.setTime(date.getTime() + (31536e+6)); // 365 days
111
- document.cookie = key + '=' + (JSON.stringify(values)).replace(/\"/g, '\"') + '; expires=' + date.toGMTString() + '; path=/';
112
- }
113
- } else {
114
- return values && values[url] ? values[url][id] : '';
115
- }
116
- };
117
-
118
- })(jQuery, window, document);
119
-
120
- /*! Widget: uitheme - updated 2018-03-18 (v2.30.0) */
121
- ;(function ($) {
122
- 'use strict';
123
- var ts = $.tablesorter || {};
124
-
125
- ts.themes = {
126
- 'bootstrap' : {
127
- table : 'table table-bordered table-striped',
128
- caption : 'caption',
129
- // header class names
130
- header : 'bootstrap-header', // give the header a gradient background (theme.bootstrap_2.css)
131
- sortNone : '',
132
- sortAsc : '',
133
- sortDesc : '',
134
- active : '', // applied when column is sorted
135
- hover : '', // custom css required - a defined bootstrap style may not override other classes
136
- // icon class names
137
- icons : '', // add 'bootstrap-icon-white' to make them white; this icon class is added to the <i> in the header
138
- iconSortNone : 'bootstrap-icon-unsorted', // class name added to icon when column is not sorted
139
- iconSortAsc : 'glyphicon glyphicon-chevron-up', // class name added to icon when column has ascending sort
140
- iconSortDesc : 'glyphicon glyphicon-chevron-down', // class name added to icon when column has descending sort
141
- filterRow : '', // filter row class
142
- footerRow : '',
143
- footerCells : '',
144
- even : '', // even row zebra striping
145
- odd : '' // odd row zebra striping
146
- },
147
- 'jui' : {
148
- table : 'ui-widget ui-widget-content ui-corner-all', // table classes
149
- caption : 'ui-widget-content',
150
- // header class names
151
- header : 'ui-widget-header ui-corner-all ui-state-default', // header classes
152
- sortNone : '',
153
- sortAsc : '',
154
- sortDesc : '',
155
- active : 'ui-state-active', // applied when column is sorted
156
- hover : 'ui-state-hover', // hover class
157
- // icon class names
158
- icons : 'ui-icon', // icon class added to the <i> in the header
159
- iconSortNone : 'ui-icon-carat-2-n-s ui-icon-caret-2-n-s', // class name added to icon when column is not sorted
160
- iconSortAsc : 'ui-icon-carat-1-n ui-icon-caret-1-n', // class name added to icon when column has ascending sort
161
- iconSortDesc : 'ui-icon-carat-1-s ui-icon-caret-1-s', // class name added to icon when column has descending sort
162
- filterRow : '',
163
- footerRow : '',
164
- footerCells : '',
165
- even : 'ui-widget-content', // even row zebra striping
166
- odd : 'ui-state-default' // odd row zebra striping
167
- }
168
- };
169
-
170
- $.extend(ts.css, {
171
- wrapper : 'tablesorter-wrapper' // ui theme & resizable
172
- });
173
-
174
- ts.addWidget({
175
- id: 'uitheme',
176
- priority: 10,
177
- format: function(table, c, wo) {
178
- var i, tmp, hdr, icon, time, $header, $icon, $tfoot, $h, oldtheme, oldremove, oldIconRmv, hasOldTheme,
179
- themesAll = ts.themes,
180
- $table = c.$table.add( $( c.namespace + '_extra_table' ) ),
181
- $headers = c.$headers.add( $( c.namespace + '_extra_headers' ) ),
182
- theme = c.theme || 'jui',
183
- themes = themesAll[theme] || {},
184
- remove = $.trim( [ themes.sortNone, themes.sortDesc, themes.sortAsc, themes.active ].join( ' ' ) ),
185
- iconRmv = $.trim( [ themes.iconSortNone, themes.iconSortDesc, themes.iconSortAsc ].join( ' ' ) ),
186
- debug = ts.debug(c, 'uitheme');
187
- if (debug) { time = new Date(); }
188
- // initialization code - run once
189
- if (!$table.hasClass('tablesorter-' + theme) || c.theme !== c.appliedTheme || !wo.uitheme_applied) {
190
- wo.uitheme_applied = true;
191
- oldtheme = themesAll[c.appliedTheme] || {};
192
- hasOldTheme = !$.isEmptyObject(oldtheme);
193
- oldremove = hasOldTheme ? [ oldtheme.sortNone, oldtheme.sortDesc, oldtheme.sortAsc, oldtheme.active ].join( ' ' ) : '';
194
- oldIconRmv = hasOldTheme ? [ oldtheme.iconSortNone, oldtheme.iconSortDesc, oldtheme.iconSortAsc ].join( ' ' ) : '';
195
- if (hasOldTheme) {
196
- wo.zebra[0] = $.trim( ' ' + wo.zebra[0].replace(' ' + oldtheme.even, '') );
197
- wo.zebra[1] = $.trim( ' ' + wo.zebra[1].replace(' ' + oldtheme.odd, '') );
198
- c.$tbodies.children().removeClass( [ oldtheme.even, oldtheme.odd ].join(' ') );
199
- }
200
- // update zebra stripes
201
- if (themes.even) { wo.zebra[0] += ' ' + themes.even; }
202
- if (themes.odd) { wo.zebra[1] += ' ' + themes.odd; }
203
- // add caption style
204
- $table.children('caption')
205
- .removeClass(oldtheme.caption || '')
206
- .addClass(themes.caption);
207
- // add table/footer class names
208
- $tfoot = $table
209
- // remove other selected themes
210
- .removeClass( (c.appliedTheme ? 'tablesorter-' + (c.appliedTheme || '') : '') + ' ' + (oldtheme.table || '') )
211
- .addClass('tablesorter-' + theme + ' ' + (themes.table || '')) // add theme widget class name
212
- .children('tfoot');
213
- c.appliedTheme = c.theme;
214
-
215
- if ($tfoot.length) {
216
- $tfoot
217
- // if oldtheme.footerRow or oldtheme.footerCells are undefined, all class names are removed
218
- .children('tr').removeClass(oldtheme.footerRow || '').addClass(themes.footerRow)
219
- .children('th, td').removeClass(oldtheme.footerCells || '').addClass(themes.footerCells);
220
- }
221
- // update header classes
222
- $headers
223
- .removeClass( (hasOldTheme ? [ oldtheme.header, oldtheme.hover, oldremove ].join(' ') : '') || '' )
224
- .addClass(themes.header)
225
- .not('.sorter-false')
226
- .unbind('mouseenter.tsuitheme mouseleave.tsuitheme')
227
- .bind('mouseenter.tsuitheme mouseleave.tsuitheme', function(event) {
228
- // toggleClass with switch added in jQuery 1.3
229
- $(this)[ event.type === 'mouseenter' ? 'addClass' : 'removeClass' ](themes.hover || '');
230
- });
231
-
232
- $headers.each(function() {
233
- var $this = $(this);
234
- if (!$this.find('.' + ts.css.wrapper).length) {
235
- // Firefox needs this inner div to position the icon & resizer correctly
236
- $this.wrapInner('<div class="' + ts.css.wrapper + '" style="position:relative;height:100%;width:100%"></div>');
237
- }
238
- });
239
- if (c.cssIcon) {
240
- // if c.cssIcon is '', then no <i> is added to the header
241
- $headers
242
- .find('.' + ts.css.icon)
243
- .removeClass(hasOldTheme ? [ oldtheme.icons, oldIconRmv ].join(' ') : '')
244
- .addClass(themes.icons || '');
245
- }
246
- // filter widget initializes after uitheme
247
- if (ts.hasWidget( c.table, 'filter' )) {
248
- tmp = function() {
249
- $table.children('thead').children('.' + ts.css.filterRow)
250
- .removeClass(hasOldTheme ? oldtheme.filterRow || '' : '')
251
- .addClass(themes.filterRow || '');
252
- };
253
- if (wo.filter_initialized) {
254
- tmp();
255
- } else {
256
- $table.one('filterInit', function() {
257
- tmp();
258
- });
259
- }
260
- }
261
- }
262
- for (i = 0; i < c.columns; i++) {
263
- $header = c.$headers
264
- .add($(c.namespace + '_extra_headers'))
265
- .not('.sorter-false')
266
- .filter('[data-column="' + i + '"]');
267
- $icon = (ts.css.icon) ? $header.find('.' + ts.css.icon) : $();
268
- $h = $headers.not('.sorter-false').filter('[data-column="' + i + '"]:last');
269
- if ($h.length) {
270
- $header.removeClass(remove);
271
- $icon.removeClass(iconRmv);
272
- if ($h[0].sortDisabled) {
273
- // no sort arrows for disabled columns!
274
- $icon.removeClass(themes.icons || '');
275
- } else {
276
- hdr = themes.sortNone;
277
- icon = themes.iconSortNone;
278
- if ($h.hasClass(ts.css.sortAsc)) {
279
- hdr = [ themes.sortAsc, themes.active ].join(' ');
280
- icon = themes.iconSortAsc;
281
- } else if ($h.hasClass(ts.css.sortDesc)) {
282
- hdr = [ themes.sortDesc, themes.active ].join(' ');
283
- icon = themes.iconSortDesc;
284
- }
285
- $header.addClass(hdr);
286
- $icon.addClass(icon || '');
287
- }
288
- }
289
- }
290
- if (debug) {
291
- console.log('uitheme >> Applied ' + theme + ' theme' + ts.benchmark(time));
292
- }
293
- },
294
- remove: function(table, c, wo, refreshing) {
295
- if (!wo.uitheme_applied) { return; }
296
- var $table = c.$table,
297
- theme = c.appliedTheme || 'jui',
298
- themes = ts.themes[ theme ] || ts.themes.jui,
299
- $headers = $table.children('thead').children(),
300
- remove = themes.sortNone + ' ' + themes.sortDesc + ' ' + themes.sortAsc,
301
- iconRmv = themes.iconSortNone + ' ' + themes.iconSortDesc + ' ' + themes.iconSortAsc;
302
- $table.removeClass('tablesorter-' + theme + ' ' + themes.table);
303
- wo.uitheme_applied = false;
304
- if (refreshing) { return; }
305
- $table.find(ts.css.header).removeClass(themes.header);
306
- $headers
307
- .unbind('mouseenter.tsuitheme mouseleave.tsuitheme') // remove hover
308
- .removeClass(themes.hover + ' ' + remove + ' ' + themes.active)
309
- .filter('.' + ts.css.filterRow)
310
- .removeClass(themes.filterRow);
311
- $headers.find('.' + ts.css.icon).removeClass(themes.icons + ' ' + iconRmv);
312
- }
313
- });
314
-
315
- })(jQuery);
316
-
317
- /*! Widget: columns - updated 5/24/2017 (v2.28.11) */
318
- ;(function ($) {
319
- 'use strict';
320
- var ts = $.tablesorter || {};
321
-
322
- ts.addWidget({
323
- id: 'columns',
324
- priority: 65,
325
- options : {
326
- columns : [ 'primary', 'secondary', 'tertiary' ]
327
- },
328
- format: function(table, c, wo) {
329
- var $tbody, tbodyIndex, $rows, rows, $row, $cells, remove, indx,
330
- $table = c.$table,
331
- $tbodies = c.$tbodies,
332
- sortList = c.sortList,
333
- len = sortList.length,
334
- // removed c.widgetColumns support
335
- css = wo && wo.columns || [ 'primary', 'secondary', 'tertiary' ],
336
- last = css.length - 1;
337
- remove = css.join(' ');
338
- // check if there is a sort (on initialization there may not be one)
339
- for (tbodyIndex = 0; tbodyIndex < $tbodies.length; tbodyIndex++ ) {
340
- $tbody = ts.processTbody(table, $tbodies.eq(tbodyIndex), true); // detach tbody
341
- $rows = $tbody.children('tr');
342
- // loop through the visible rows
343
- $rows.each(function() {
344
- $row = $(this);
345
- if (this.style.display !== 'none') {
346
- // remove all columns class names
347
- $cells = $row.children().removeClass(remove);
348
- // add appropriate column class names
349
- if (sortList && sortList[0]) {
350
- // primary sort column class
351
- $cells.eq(sortList[0][0]).addClass(css[0]);
352
- if (len > 1) {
353
- for (indx = 1; indx < len; indx++) {
354
- // secondary, tertiary, etc sort column classes
355
- $cells.eq(sortList[indx][0]).addClass( css[indx] || css[last] );
356
- }
357
- }
358
- }
359
- }
360
- });
361
- ts.processTbody(table, $tbody, false);
362
- }
363
- // add classes to thead and tfoot
364
- rows = wo.columns_thead !== false ? [ 'thead tr' ] : [];
365
- if (wo.columns_tfoot !== false) {
366
- rows.push('tfoot tr');
367
- }
368
- if (rows.length) {
369
- $rows = $table.find( rows.join(',') ).children().removeClass(remove);
370
- if (len) {
371
- for (indx = 0; indx < len; indx++) {
372
- // add primary. secondary, tertiary, etc sort column classes
373
- $rows.filter('[data-column="' + sortList[indx][0] + '"]').addClass(css[indx] || css[last]);
374
- }
375
- }
376
- }
377
- },
378
- remove: function(table, c, wo) {
379
- var tbodyIndex, $tbody,
380
- $tbodies = c.$tbodies,
381
- remove = (wo.columns || [ 'primary', 'secondary', 'tertiary' ]).join(' ');
382
- c.$headers.removeClass(remove);
383
- c.$table.children('tfoot').children('tr').children('th, td').removeClass(remove);
384
- for (tbodyIndex = 0; tbodyIndex < $tbodies.length; tbodyIndex++ ) {
385
- $tbody = ts.processTbody(table, $tbodies.eq(tbodyIndex), true); // remove tbody
386
- $tbody.children('tr').each(function() {
387
- $(this).children().removeClass(remove);
388
- });
389
- ts.processTbody(table, $tbody, false); // restore tbody
390
- }
391
- }
392
- });
393
-
394
- })(jQuery);
395
 
396
  /*! Widget: filter - updated 2018-03-18 (v2.30.0) *//*
397
  * Requires tablesorter v2.8+ and jQuery 1.7+
@@ -2352,827 +2352,827 @@
2352
 
2353
  })( jQuery );
2354
 
2355
- /*! Widget: stickyHeaders - updated 9/27/2017 (v2.29.0) *//*
2356
- * Requires tablesorter v2.8+ and jQuery 1.4.3+
2357
- * by Rob Garrison
2358
- */
2359
- ;(function ($, window) {
2360
- 'use strict';
2361
- var ts = $.tablesorter || {};
2362
-
2363
- $.extend(ts.css, {
2364
- sticky : 'tablesorter-stickyHeader', // stickyHeader
2365
- stickyVis : 'tablesorter-sticky-visible',
2366
- stickyHide: 'tablesorter-sticky-hidden',
2367
- stickyWrap: 'tablesorter-sticky-wrapper'
2368
- });
2369
-
2370
- // Add a resize event to table headers
2371
- ts.addHeaderResizeEvent = function(table, disable, settings) {
2372
- table = $(table)[0]; // make sure we're using a dom element
2373
- if ( !table.config ) { return; }
2374
- var defaults = {
2375
- timer : 250
2376
- },
2377
- options = $.extend({}, defaults, settings),
2378
- c = table.config,
2379
- wo = c.widgetOptions,
2380
- checkSizes = function( triggerEvent ) {
2381
- var index, headers, $header, sizes, width, height,
2382
- len = c.$headers.length;
2383
- wo.resize_flag = true;
2384
- headers = [];
2385
- for ( index = 0; index < len; index++ ) {
2386
- $header = c.$headers.eq( index );
2387
- sizes = $header.data( 'savedSizes' ) || [ 0, 0 ]; // fixes #394
2388
- width = $header[0].offsetWidth;
2389
- height = $header[0].offsetHeight;
2390
- if ( width !== sizes[0] || height !== sizes[1] ) {
2391
- $header.data( 'savedSizes', [ width, height ] );
2392
- headers.push( $header[0] );
2393
- }
2394
- }
2395
- if ( headers.length && triggerEvent !== false ) {
2396
- c.$table.triggerHandler( 'resize', [ headers ] );
2397
- }
2398
- wo.resize_flag = false;
2399
- };
2400
- clearInterval(wo.resize_timer);
2401
- if (disable) {
2402
- wo.resize_flag = false;
2403
- return false;
2404
- }
2405
- checkSizes( false );
2406
- wo.resize_timer = setInterval(function() {
2407
- if (wo.resize_flag) { return; }
2408
- checkSizes();
2409
- }, options.timer);
2410
- };
2411
-
2412
- function getStickyOffset(c, wo) {
2413
- var $el = isNaN(wo.stickyHeaders_offset) ? $(wo.stickyHeaders_offset) : [];
2414
- return $el.length ?
2415
- $el.height() || 0 :
2416
- parseInt(wo.stickyHeaders_offset, 10) || 0;
2417
- }
2418
-
2419
- // Sticky headers based on this awesome article:
2420
- // http://css-tricks.com/13465-persistent-headers/
2421
- // and https://github.com/jmosbech/StickyTableHeaders by Jonas Mosbech
2422
- // **************************
2423
- ts.addWidget({
2424
- id: 'stickyHeaders',
2425
- priority: 54, // sticky widget must be initialized after the filter & before pager widget!
2426
- options: {
2427
- stickyHeaders : '', // extra class name added to the sticky header row
2428
- stickyHeaders_appendTo : null, // jQuery selector or object to phycially attach the sticky headers
2429
- stickyHeaders_attachTo : null, // jQuery selector or object to attach scroll listener to (overridden by xScroll & yScroll settings)
2430
- stickyHeaders_xScroll : null, // jQuery selector or object to monitor horizontal scroll position (defaults: xScroll > attachTo > window)
2431
- stickyHeaders_yScroll : null, // jQuery selector or object to monitor vertical scroll position (defaults: yScroll > attachTo > window)
2432
- stickyHeaders_offset : 0, // number or jquery selector targeting the position:fixed element
2433
- stickyHeaders_filteredToTop: true, // scroll table top into view after filtering
2434
- stickyHeaders_cloneId : '-sticky', // added to table ID, if it exists
2435
- stickyHeaders_addResizeEvent : true, // trigger 'resize' event on headers
2436
- stickyHeaders_includeCaption : true, // if false and a caption exist, it won't be included in the sticky header
2437
- stickyHeaders_zIndex : 2 // The zIndex of the stickyHeaders, allows the user to adjust this to their needs
2438
- },
2439
- format: function(table, c, wo) {
2440
- // filter widget doesn't initialize on an empty table. Fixes #449
2441
- if ( c.$table.hasClass('hasStickyHeaders') || ($.inArray('filter', c.widgets) >= 0 && !c.$table.hasClass('hasFilters')) ) {
2442
- return;
2443
- }
2444
- var index, len, $t,
2445
- $table = c.$table,
2446
- // add position: relative to attach element, hopefully it won't cause trouble.
2447
- $attach = $(wo.stickyHeaders_attachTo || wo.stickyHeaders_appendTo),
2448
- namespace = c.namespace + 'stickyheaders ',
2449
- // element to watch for the scroll event
2450
- $yScroll = $(wo.stickyHeaders_yScroll || wo.stickyHeaders_attachTo || window),
2451
- $xScroll = $(wo.stickyHeaders_xScroll || wo.stickyHeaders_attachTo || window),
2452
- $thead = $table.children('thead:first'),
2453
- $header = $thead.children('tr').not('.sticky-false').children(),
2454
- $tfoot = $table.children('tfoot'),
2455
- stickyOffset = getStickyOffset(c, wo),
2456
- // is this table nested? If so, find parent sticky header wrapper (div, not table)
2457
- $nestedSticky = $table.parent().closest('.' + ts.css.table).hasClass('hasStickyHeaders') ?
2458
- $table.parent().closest('table.tablesorter')[0].config.widgetOptions.$sticky.parent() : [],
2459
- nestedStickyTop = $nestedSticky.length ? $nestedSticky.height() : 0,
2460
- // clone table, then wrap to make sticky header
2461
- $stickyTable = wo.$sticky = $table.clone()
2462
- .addClass('containsStickyHeaders ' + ts.css.sticky + ' ' + wo.stickyHeaders + ' ' + c.namespace.slice(1) + '_extra_table' )
2463
- .wrap('<div class="' + ts.css.stickyWrap + '">'),
2464
- $stickyWrap = $stickyTable.parent()
2465
- .addClass(ts.css.stickyHide)
2466
- .css({
2467
- position : $attach.length ? 'absolute' : 'fixed',
2468
- padding : parseInt( $stickyTable.parent().parent().css('padding-left'), 10 ),
2469
- top : stickyOffset + nestedStickyTop,
2470
- left : 0,
2471
- visibility : 'hidden',
2472
- zIndex : wo.stickyHeaders_zIndex || 2
2473
- }),
2474
- $stickyThead = $stickyTable.children('thead:first'),
2475
- $stickyCells,
2476
- laststate = '',
2477
- setWidth = function($orig, $clone) {
2478
- var index, width, border, $cell, $this,
2479
- $cells = $orig.filter(':visible'),
2480
- len = $cells.length;
2481
- for ( index = 0; index < len; index++ ) {
2482
- $cell = $clone.filter(':visible').eq(index);
2483
- $this = $cells.eq(index);
2484
- // code from https://github.com/jmosbech/StickyTableHeaders
2485
- if ($this.css('box-sizing') === 'border-box') {
2486
- width = $this.outerWidth();
2487
- } else {
2488
- if ($cell.css('border-collapse') === 'collapse') {
2489
- if (window.getComputedStyle) {
2490
- width = parseFloat( window.getComputedStyle($this[0], null).width );
2491
- } else {
2492
- // ie8 only
2493
- border = parseFloat( $this.css('border-width') );
2494
- width = $this.outerWidth() - parseFloat( $this.css('padding-left') ) - parseFloat( $this.css('padding-right') ) - border;
2495
- }
2496
- } else {
2497
- width = $this.width();
2498
- }
2499
- }
2500
- $cell.css({
2501
- 'width': width,
2502
- 'min-width': width,
2503
- 'max-width': width
2504
- });
2505
- }
2506
- },
2507
- getLeftPosition = function(yWindow) {
2508
- if (yWindow === false && $nestedSticky.length) {
2509
- return $table.position().left;
2510
- }
2511
- return $attach.length ?
2512
- parseInt($attach.css('padding-left'), 10) || 0 :
2513
- $table.offset().left - parseInt($table.css('margin-left'), 10) - $(window).scrollLeft();
2514
- },
2515
- resizeHeader = function() {
2516
- $stickyWrap.css({
2517
- left : getLeftPosition(),
2518
- width: $table.outerWidth()
2519
- });
2520
- setWidth( $table, $stickyTable );
2521
- setWidth( $header, $stickyCells );
2522
- },
2523
- scrollSticky = function( resizing ) {
2524
- if (!$table.is(':visible')) { return; } // fixes #278
2525
- // Detect nested tables - fixes #724
2526
- nestedStickyTop = $nestedSticky.length ? $nestedSticky.offset().top - $yScroll.scrollTop() + $nestedSticky.height() : 0;
2527
- var tmp,
2528
- offset = $table.offset(),
2529
- stickyOffset = getStickyOffset(c, wo),
2530
- yWindow = $.isWindow( $yScroll[0] ), // $.isWindow needs jQuery 1.4.3
2531
- yScroll = yWindow ?
2532
- $yScroll.scrollTop() :
2533
- // use parent sticky position if nested AND inside of a scrollable element - see #1512
2534
- $nestedSticky.length ? parseInt($nestedSticky[0].style.top, 10) : $yScroll.offset().top,
2535
- attachTop = $attach.length ? yScroll : $yScroll.scrollTop(),
2536
- captionHeight = wo.stickyHeaders_includeCaption ? 0 : $table.children( 'caption' ).height() || 0,
2537
- scrollTop = attachTop + stickyOffset + nestedStickyTop - captionHeight,
2538
- tableHeight = $table.height() - ($stickyWrap.height() + ($tfoot.height() || 0)) - captionHeight,
2539
- isVisible = ( scrollTop > offset.top ) && ( scrollTop < offset.top + tableHeight ) ? 'visible' : 'hidden',
2540
- state = isVisible === 'visible' ? ts.css.stickyVis : ts.css.stickyHide,
2541
- needsUpdating = !$stickyWrap.hasClass( state ),
2542
- cssSettings = { visibility : isVisible };
2543
- if ($attach.length) {
2544
- // attached sticky headers always need updating
2545
- needsUpdating = true;
2546
- cssSettings.top = yWindow ? scrollTop - $attach.offset().top : $attach.scrollTop();
2547
- }
2548
- // adjust when scrolling horizontally - fixes issue #143
2549
- tmp = getLeftPosition(yWindow);
2550
- if (tmp !== parseInt($stickyWrap.css('left'), 10)) {
2551
- needsUpdating = true;
2552
- cssSettings.left = tmp;
2553
- }
2554
- cssSettings.top = ( cssSettings.top || 0 ) +
2555
- // If nested AND inside of a scrollable element, only add parent sticky height
2556
- (!yWindow && $nestedSticky.length ? $nestedSticky.height() : stickyOffset + nestedStickyTop);
2557
- if (needsUpdating) {
2558
- $stickyWrap
2559
- .removeClass( ts.css.stickyVis + ' ' + ts.css.stickyHide )
2560
- .addClass( state )
2561
- .css(cssSettings);
2562
- }
2563
- if (isVisible !== laststate || resizing) {
2564
- // make sure the column widths match
2565
- resizeHeader();
2566
- laststate = isVisible;
2567
- }
2568
- };
2569
- // only add a position relative if a position isn't already defined
2570
- if ($attach.length && !$attach.css('position')) {
2571
- $attach.css('position', 'relative');
2572
- }
2573
- // fix clone ID, if it exists - fixes #271
2574
- if ($stickyTable.attr('id')) { $stickyTable[0].id += wo.stickyHeaders_cloneId; }
2575
- // clear out cloned table, except for sticky header
2576
- // include caption & filter row (fixes #126 & #249) - don't remove cells to get correct cell indexing
2577
- $stickyTable.find('> thead:gt(0), tr.sticky-false').hide();
2578
- $stickyTable.find('> tbody, > tfoot').remove();
2579
- $stickyTable.find('caption').toggle(wo.stickyHeaders_includeCaption);
2580
- // issue #172 - find td/th in sticky header
2581
- $stickyCells = $stickyThead.children().children();
2582
- $stickyTable.css({ height:0, width:0, margin: 0 });
2583
- // remove resizable block
2584
- $stickyCells.find('.' + ts.css.resizer).remove();
2585
- // update sticky header class names to match real header after sorting
2586
- $table
2587
- .addClass('hasStickyHeaders')
2588
- .bind('pagerComplete' + namespace, function() {
2589
- resizeHeader();
2590
- });
2591
-
2592
- ts.bindEvents(table, $stickyThead.children().children('.' + ts.css.header));
2593
-
2594
- if (wo.stickyHeaders_appendTo) {
2595
- $(wo.stickyHeaders_appendTo).append( $stickyWrap );
2596
- } else {
2597
- // add stickyheaders AFTER the table. If the table is selected by ID, the original one (first) will be returned.
2598
- $table.after( $stickyWrap );
2599
- }
2600
-
2601
- // onRenderHeader is defined, we need to do something about it (fixes #641)
2602
- if (c.onRenderHeader) {
2603
- $t = $stickyThead.children('tr').children();
2604
- len = $t.length;
2605
- for ( index = 0; index < len; index++ ) {
2606
- // send second parameter
2607
- c.onRenderHeader.apply( $t.eq( index ), [ index, c, $stickyTable ] );
2608
- }
2609
- }
2610
- // make it sticky!
2611
- $xScroll.add($yScroll)
2612
- .unbind( ('scroll resize '.split(' ').join( namespace )).replace(/\s+/g, ' ') )
2613
- .bind('scroll resize '.split(' ').join( namespace ), function( event ) {
2614
- scrollSticky( event.type === 'resize' );
2615
- });
2616
- c.$table
2617
- .unbind('stickyHeadersUpdate' + namespace)
2618
- .bind('stickyHeadersUpdate' + namespace, function() {
2619
- scrollSticky( true );
2620
- });
2621
-
2622
- if (wo.stickyHeaders_addResizeEvent) {
2623
- ts.addHeaderResizeEvent(table);
2624
- }
2625
-
2626
- // look for filter widget
2627
- if ($table.hasClass('hasFilters') && wo.filter_columnFilters) {
2628
- // scroll table into view after filtering, if sticky header is active - #482
2629
- $table.bind('filterEnd' + namespace, function() {
2630
- // $(':focus') needs jQuery 1.6+
2631
- var $td = $(document.activeElement).closest('td'),
2632
- column = $td.parent().children().index($td);
2633
- // only scroll if sticky header is active
2634
- if ($stickyWrap.hasClass(ts.css.stickyVis) && wo.stickyHeaders_filteredToTop) {
2635
- // scroll to original table (not sticky clone)
2636
- window.scrollTo(0, $table.position().top);
2637
- // give same input/select focus; check if c.$filters exists; fixes #594
2638
- if (column >= 0 && c.$filters) {
2639
- c.$filters.eq(column).find('a, select, input').filter(':visible').focus();
2640
- }
2641
- }
2642
- });
2643
- ts.filter.bindSearch( $table, $stickyCells.find('.' + ts.css.filter) );
2644
- // support hideFilters
2645
- if (wo.filter_hideFilters) {
2646
- ts.filter.hideFilters(c, $stickyTable);
2647
- }
2648
- }
2649
-
2650
- // resize table (Firefox)
2651
- if (wo.stickyHeaders_addResizeEvent) {
2652
- $table.bind('resize' + c.namespace + 'stickyheaders', function() {
2653
- resizeHeader();
2654
- });
2655
- }
2656
-
2657
- // make sure sticky is visible if page is partially scrolled
2658
- scrollSticky( true );
2659
- $table.triggerHandler('stickyHeadersInit');
2660
-
2661
- },
2662
- remove: function(table, c, wo) {
2663
- var namespace = c.namespace + 'stickyheaders ';
2664
- c.$table
2665
- .removeClass('hasStickyHeaders')
2666
- .unbind( ('pagerComplete resize filterEnd stickyHeadersUpdate '.split(' ').join(namespace)).replace(/\s+/g, ' ') )
2667
- .next('.' + ts.css.stickyWrap).remove();
2668
- if (wo.$sticky && wo.$sticky.length) { wo.$sticky.remove(); } // remove cloned table
2669
- $(window)
2670
- .add(wo.stickyHeaders_xScroll)
2671
- .add(wo.stickyHeaders_yScroll)
2672
- .add(wo.stickyHeaders_attachTo)
2673
- .unbind( ('scroll resize '.split(' ').join(namespace)).replace(/\s+/g, ' ') );
2674
- ts.addHeaderResizeEvent(table, true);
2675
- }
2676
- });
2677
-
2678
- })(jQuery, window);
2679
-
2680
- /*! Widget: resizable - updated 2018-03-26 (v2.30.2) */
2681
- /*jshint browser:true, jquery:true, unused:false */
2682
- ;(function ($, window) {
2683
- 'use strict';
2684
- var ts = $.tablesorter || {};
2685
-
2686
- $.extend(ts.css, {
2687
- resizableContainer : 'tablesorter-resizable-container',
2688
- resizableHandle : 'tablesorter-resizable-handle',
2689
- resizableNoSelect : 'tablesorter-disableSelection',
2690
- resizableStorage : 'tablesorter-resizable'
2691
- });
2692
-
2693
- // Add extra scroller css
2694
- $(function() {
2695
- var s = '<style>' +
2696
- 'body.' + ts.css.resizableNoSelect + ' { -ms-user-select: none; -moz-user-select: -moz-none;' +
2697
- '-khtml-user-select: none; -webkit-user-select: none; user-select: none; }' +
2698
- '.' + ts.css.resizableContainer + ' { position: relative; height: 1px; }' +
2699
- // make handle z-index > than stickyHeader z-index, so the handle stays above sticky header
2700
- '.' + ts.css.resizableHandle + ' { position: absolute; display: inline-block; width: 8px;' +
2701
- 'top: 1px; cursor: ew-resize; z-index: 3; user-select: none; -moz-user-select: none; }' +
2702
- '</style>';
2703
- $('head').append(s);
2704
- });
2705
-
2706
- ts.resizable = {
2707
- init : function( c, wo ) {
2708
- if ( c.$table.hasClass( 'hasResizable' ) ) { return; }
2709
- c.$table.addClass( 'hasResizable' );
2710
-
2711
- var noResize, $header, column, storedSizes, tmp,
2712
- $table = c.$table,
2713
- $parent = $table.parent(),
2714
- marginTop = parseInt( $table.css( 'margin-top' ), 10 ),
2715
-
2716
- // internal variables
2717
- vars = wo.resizable_vars = {
2718
- useStorage : ts.storage && wo.resizable !== false,
2719
- $wrap : $parent,
2720
- mouseXPosition : 0,
2721
- $target : null,
2722
- $next : null,
2723
- overflow : $parent.css('overflow') === 'auto' ||
2724
- $parent.css('overflow') === 'scroll' ||
2725
- $parent.css('overflow-x') === 'auto' ||
2726
- $parent.css('overflow-x') === 'scroll',
2727
- storedSizes : []
2728
- };
2729
-
2730
- // set default widths
2731
- ts.resizableReset( c.table, true );
2732
-
2733
- // now get measurements!
2734
- vars.tableWidth = $table.width();
2735
- // attempt to autodetect
2736
- vars.fullWidth = Math.abs( $parent.width() - vars.tableWidth ) < 20;
2737
-
2738
- /*
2739
- // Hacky method to determine if table width is set to 'auto'
2740
- // http://stackoverflow.com/a/20892048/145346
2741
- if ( !vars.fullWidth ) {
2742
- tmp = $table.width();
2743
- $header = $table.wrap('<span>').parent(); // temp variable
2744
- storedSizes = parseInt( $table.css( 'margin-left' ), 10 ) || 0;
2745
- $table.css( 'margin-left', storedSizes + 50 );
2746
- vars.tableWidth = $header.width() > tmp ? 'auto' : tmp;
2747
- $table.css( 'margin-left', storedSizes ? storedSizes : '' );
2748
- $header = null;
2749
- $table.unwrap('<span>');
2750
- }
2751
- */
2752
-
2753
- if ( vars.useStorage && vars.overflow ) {
2754
- // save table width
2755
- ts.storage( c.table, 'tablesorter-table-original-css-width', vars.tableWidth );
2756
- tmp = ts.storage( c.table, 'tablesorter-table-resized-width' ) || 'auto';
2757
- ts.resizable.setWidth( $table, tmp, true );
2758
- }
2759
- wo.resizable_vars.storedSizes = storedSizes = ( vars.useStorage ?
2760
- ts.storage( c.table, ts.css.resizableStorage ) :
2761
- [] ) || [];
2762
- ts.resizable.setWidths( c, wo, storedSizes );
2763
- ts.resizable.updateStoredSizes( c, wo );
2764
-
2765
- wo.$resizable_container = $( '<div class="' + ts.css.resizableContainer + '">' )
2766
- .css({ top : marginTop })
2767
- .insertBefore( $table );
2768
- // add container
2769
- for ( column = 0; column < c.columns; column++ ) {
2770
- $header = c.$headerIndexed[ column ];
2771
- tmp = ts.getColumnData( c.table, c.headers, column );
2772
- noResize = ts.getData( $header, tmp, 'resizable' ) === 'false';
2773
- if ( !noResize ) {
2774
- $( '<div class="' + ts.css.resizableHandle + '">' )
2775
- .appendTo( wo.$resizable_container )
2776
- .attr({
2777
- 'data-column' : column,
2778
- 'unselectable' : 'on'
2779
- })
2780
- .data( 'header', $header )
2781
- .bind( 'selectstart', false );
2782
- }
2783
- }
2784
- ts.resizable.bindings( c, wo );
2785
- },
2786
-
2787
- updateStoredSizes : function( c, wo ) {
2788
- var column, $header,
2789
- len = c.columns,
2790
- vars = wo.resizable_vars;
2791
- vars.storedSizes = [];
2792
- for ( column = 0; column < len; column++ ) {
2793
- $header = c.$headerIndexed[ column ];
2794
- vars.storedSizes[ column ] = $header.is(':visible') ? $header.width() : 0;
2795
- }
2796
- },
2797
-
2798
- setWidth : function( $el, width, overflow ) {
2799
- // overflow tables need min & max width set as well
2800
- $el.css({
2801
- 'width' : width,
2802
- 'min-width' : overflow ? width : '',
2803
- 'max-width' : overflow ? width : ''
2804
- });
2805
- },
2806
-
2807
- setWidths : function( c, wo, storedSizes ) {
2808
- var column, $temp,
2809
- vars = wo.resizable_vars,
2810
- $extra = $( c.namespace + '_extra_headers' ),
2811
- $col = c.$table.children( 'colgroup' ).children( 'col' );
2812
- storedSizes = storedSizes || vars.storedSizes || [];
2813
- // process only if table ID or url match
2814
- if ( storedSizes.length ) {
2815
- for ( column = 0; column < c.columns; column++ ) {
2816
- // set saved resizable widths
2817
- ts.resizable.setWidth( c.$headerIndexed[ column ], storedSizes[ column ], vars.overflow );
2818
- if ( $extra.length ) {
2819
- // stickyHeaders needs to modify min & max width as well
2820
- $temp = $extra.eq( column ).add( $col.eq( column ) );
2821
- ts.resizable.setWidth( $temp, storedSizes[ column ], vars.overflow );
2822
- }
2823
- }
2824
- $temp = $( c.namespace + '_extra_table' );
2825
- if ( $temp.length && !ts.hasWidget( c.table, 'scroller' ) ) {
2826
- ts.resizable.setWidth( $temp, c.$table.outerWidth(), vars.overflow );
2827
- }
2828
- }
2829
- },
2830
-
2831
- setHandlePosition : function( c, wo ) {
2832
- var startPosition,
2833
- tableHeight = c.$table.height(),
2834
- $handles = wo.$resizable_container.children(),
2835
- handleCenter = Math.floor( $handles.width() / 2 );
2836
-
2837
- if ( ts.hasWidget( c.table, 'scroller' ) ) {
2838
- tableHeight = 0;
2839
- c.$table.closest( '.' + ts.css.scrollerWrap ).children().each(function() {
2840
- var $this = $(this);
2841
- // center table has a max-height set
2842
- tableHeight += $this.filter('[style*="height"]').length ? $this.height() : $this.children('table').height();
2843
- });
2844
- }
2845
-
2846
- if ( !wo.resizable_includeFooter && c.$table.children('tfoot').length ) {
2847
- tableHeight -= c.$table.children('tfoot').height();
2848
- }
2849
- // subtract out table left position from resizable handles. Fixes #864
2850
- // jQuery v3.3.0+ appears to include the start position with the $header.position().left; see #1544
2851
- startPosition = parseFloat($.fn.jquery) >= 3.3 ? 0 : c.$table.position().left;
2852
- $handles.each( function() {
2853
- var $this = $(this),
2854
- column = parseInt( $this.attr( 'data-column' ), 10 ),
2855
- columns = c.columns - 1,
2856
- $header = $this.data( 'header' );
2857
- if ( !$header ) { return; } // see #859
2858
- if (
2859
- !$header.is(':visible') ||
2860
- ( !wo.resizable_addLastColumn && ts.resizable.checkVisibleColumns(c, column) )
2861
- ) {
2862
- $this.hide();
2863
- } else if ( column < columns || column === columns && wo.resizable_addLastColumn ) {
2864
- $this.css({
2865
- display: 'inline-block',
2866
- height : tableHeight,
2867
- left : $header.position().left - startPosition + $header.outerWidth() - handleCenter
2868
- });
2869
- }
2870
- });
2871
- },
2872
-
2873
- // Fixes #1485
2874
- checkVisibleColumns: function( c, column ) {
2875
- var i,
2876
- len = 0;
2877
- for ( i = column + 1; i < c.columns; i++ ) {
2878
- len += c.$headerIndexed[i].is( ':visible' ) ? 1 : 0;
2879
- }
2880
- return len === 0;
2881
- },
2882
-
2883
- // prevent text selection while dragging resize bar
2884
- toggleTextSelection : function( c, wo, toggle ) {
2885
- var namespace = c.namespace + 'tsresize';
2886
- wo.resizable_vars.disabled = toggle;
2887
- $( 'body' ).toggleClass( ts.css.resizableNoSelect, toggle );
2888
- if ( toggle ) {
2889
- $( 'body' )
2890
- .attr( 'unselectable', 'on' )
2891
- .bind( 'selectstart' + namespace, false );
2892
- } else {
2893
- $( 'body' )
2894
- .removeAttr( 'unselectable' )
2895
- .unbind( 'selectstart' + namespace );
2896
- }
2897
- },
2898
-
2899
- bindings : function( c, wo ) {
2900
- var namespace = c.namespace + 'tsresize';
2901
- wo.$resizable_container.children().bind( 'mousedown', function( event ) {
2902
- // save header cell and mouse position
2903
- var column,
2904
- vars = wo.resizable_vars,
2905
- $extras = $( c.namespace + '_extra_headers' ),
2906
- $header = $( event.target ).data( 'header' );
2907
-
2908
- column = parseInt( $header.attr( 'data-column' ), 10 );
2909
- vars.$target = $header = $header.add( $extras.filter('[data-column="' + column + '"]') );
2910
- vars.target = column;
2911
-
2912
- // if table is not as wide as it's parent, then resize the table
2913
- vars.$next = event.shiftKey || wo.resizable_targetLast ?
2914
- $header.parent().children().not( '.resizable-false' ).filter( ':last' ) :
2915
- $header.nextAll( ':not(.resizable-false)' ).eq( 0 );
2916
-
2917
- column = parseInt( vars.$next.attr( 'data-column' ), 10 );
2918
- vars.$next = vars.$next.add( $extras.filter('[data-column="' + column + '"]') );
2919
- vars.next = column;
2920
-
2921
- vars.mouseXPosition = event.pageX;
2922
- ts.resizable.updateStoredSizes( c, wo );
2923
- ts.resizable.toggleTextSelection(c, wo, true );
2924
- });
2925
-
2926
- $( document )
2927
- .bind( 'mousemove' + namespace, function( event ) {
2928
- var vars = wo.resizable_vars;
2929
- // ignore mousemove if no mousedown
2930
- if ( !vars.disabled || vars.mouseXPosition === 0 || !vars.$target ) { return; }
2931
- if ( wo.resizable_throttle ) {
2932
- clearTimeout( vars.timer );
2933
- vars.timer = setTimeout( function() {
2934
- ts.resizable.mouseMove( c, wo, event );
2935
- }, isNaN( wo.resizable_throttle ) ? 5 : wo.resizable_throttle );
2936
- } else {
2937
- ts.resizable.mouseMove( c, wo, event );
2938
- }
2939
- })
2940
- .bind( 'mouseup' + namespace, function() {
2941
- if (!wo.resizable_vars.disabled) { return; }
2942
- ts.resizable.toggleTextSelection( c, wo, false );
2943
- ts.resizable.stopResize( c, wo );
2944
- ts.resizable.setHandlePosition( c, wo );
2945
- });
2946
-
2947
- // resizeEnd event triggered by scroller widget
2948
- $( window ).bind( 'resize' + namespace + ' resizeEnd' + namespace, function() {
2949
- ts.resizable.setHandlePosition( c, wo );
2950
- });
2951
-
2952
- // right click to reset columns to default widths
2953
- c.$table
2954
- .bind( 'columnUpdate pagerComplete resizableUpdate '.split( ' ' ).join( namespace + ' ' ), function() {
2955
- ts.resizable.setHandlePosition( c, wo );
2956
- })
2957
- .bind( 'resizableReset' + namespace, function() {
2958
- ts.resizableReset( c.table );
2959
- })
2960
- .find( 'thead:first' )
2961
- .add( $( c.namespace + '_extra_table' ).find( 'thead:first' ) )
2962
- .bind( 'contextmenu' + namespace, function() {
2963
- // $.isEmptyObject() needs jQuery 1.4+; allow right click if already reset
2964
- var allowClick = wo.resizable_vars.storedSizes.length === 0;
2965
- ts.resizableReset( c.table );
2966
- ts.resizable.setHandlePosition( c, wo );
2967
- wo.resizable_vars.storedSizes = [];
2968
- return allowClick;
2969
- });
2970
-
2971
- },
2972
-
2973
- mouseMove : function( c, wo, event ) {
2974
- if ( wo.resizable_vars.mouseXPosition === 0 || !wo.resizable_vars.$target ) { return; }
2975
- // resize columns
2976
- var column,
2977
- total = 0,
2978
- vars = wo.resizable_vars,
2979
- $next = vars.$next,
2980
- tar = vars.storedSizes[ vars.target ],
2981
- leftEdge = event.pageX - vars.mouseXPosition;
2982
- if ( vars.overflow ) {
2983
- if ( tar + leftEdge > 0 ) {
2984
- vars.storedSizes[ vars.target ] += leftEdge;
2985
- ts.resizable.setWidth( vars.$target, vars.storedSizes[ vars.target ], true );
2986
- // update the entire table width
2987
- for ( column = 0; column < c.columns; column++ ) {
2988
- total += vars.storedSizes[ column ];
2989
- }
2990
- ts.resizable.setWidth( c.$table.add( $( c.namespace + '_extra_table' ) ), total );
2991
- }
2992
- if ( !$next.length ) {
2993
- // if expanding right-most column, scroll the wrapper
2994
- vars.$wrap[0].scrollLeft = c.$table.width();
2995
- }
2996
- } else if ( vars.fullWidth ) {
2997
- vars.storedSizes[ vars.target ] += leftEdge;
2998
- vars.storedSizes[ vars.next ] -= leftEdge;
2999
- ts.resizable.setWidths( c, wo );
3000
- } else {
3001
- vars.storedSizes[ vars.target ] += leftEdge;
3002
- ts.resizable.setWidths( c, wo );
3003
- }
3004
- vars.mouseXPosition = event.pageX;
3005
- // dynamically update sticky header widths
3006
- c.$table.triggerHandler('stickyHeadersUpdate');
3007
- },
3008
-
3009
- stopResize : function( c, wo ) {
3010
- var vars = wo.resizable_vars;
3011
- ts.resizable.updateStoredSizes( c, wo );
3012
- if ( vars.useStorage ) {
3013
- // save all column widths
3014
- ts.storage( c.table, ts.css.resizableStorage, vars.storedSizes );
3015
- ts.storage( c.table, 'tablesorter-table-resized-width', c.$table.width() );
3016
- }
3017
- vars.mouseXPosition = 0;
3018
- vars.$target = vars.$next = null;
3019
- // will update stickyHeaders, just in case, see #912
3020
- c.$table.triggerHandler('stickyHeadersUpdate');
3021
- c.$table.triggerHandler('resizableComplete');
3022
- }
3023
- };
3024
-
3025
- // this widget saves the column widths if
3026
- // $.tablesorter.storage function is included
3027
- // **************************
3028
- ts.addWidget({
3029
- id: 'resizable',
3030
- priority: 40,
3031
- options: {
3032
- resizable : true, // save column widths to storage
3033
- resizable_addLastColumn : false,
3034
- resizable_includeFooter: true,
3035
- resizable_widths : [],
3036
- resizable_throttle : false, // set to true (5ms) or any number 0-10 range
3037
- resizable_targetLast : false
3038
- },
3039
- init: function(table, thisWidget, c, wo) {
3040
- ts.resizable.init( c, wo );
3041
- },
3042
- format: function( table, c, wo ) {
3043
- ts.resizable.setHandlePosition( c, wo );
3044
- },
3045
- remove: function( table, c, wo, refreshing ) {
3046
- if (wo.$resizable_container) {
3047
- var namespace = c.namespace + 'tsresize';
3048
- c.$table.add( $( c.namespace + '_extra_table' ) )
3049
- .removeClass('hasResizable')
3050
- .children( 'thead' )
3051
- .unbind( 'contextmenu' + namespace );
3052
-
3053
- wo.$resizable_container.remove();
3054
- ts.resizable.toggleTextSelection( c, wo, false );
3055
- ts.resizableReset( table, refreshing );
3056
- $( document ).unbind( 'mousemove' + namespace + ' mouseup' + namespace );
3057
- }
3058
- }
3059
- });
3060
-
3061
- ts.resizableReset = function( table, refreshing ) {
3062
- $( table ).each(function() {
3063
- var index, $t,
3064
- c = this.config,
3065
- wo = c && c.widgetOptions,
3066
- vars = wo.resizable_vars;
3067
- if ( table && c && c.$headerIndexed.length ) {
3068
- // restore the initial table width
3069
- if ( vars.overflow && vars.tableWidth ) {
3070
- ts.resizable.setWidth( c.$table, vars.tableWidth, true );
3071
- if ( vars.useStorage ) {
3072
- ts.storage( table, 'tablesorter-table-resized-width', vars.tableWidth );
3073
- }
3074
- }
3075
- for ( index = 0; index < c.columns; index++ ) {
3076
- $t = c.$headerIndexed[ index ];
3077
- if ( wo.resizable_widths && wo.resizable_widths[ index ] ) {
3078
- ts.resizable.setWidth( $t, wo.resizable_widths[ index ], vars.overflow );
3079
- } else if ( !$t.hasClass( 'resizable-false' ) ) {
3080
- // don't clear the width of any column that is not resizable
3081
- ts.resizable.setWidth( $t, '', vars.overflow );
3082
- }
3083
- }
3084
-
3085
- // reset stickyHeader widths
3086
- c.$table.triggerHandler( 'stickyHeadersUpdate' );
3087
- if ( ts.storage && !refreshing ) {
3088
- ts.storage( this, ts.css.resizableStorage, [] );
3089
- }
3090
- }
3091
- });
3092
- };
3093
-
3094
- })( jQuery, window );
3095
-
3096
- /*! Widget: saveSort - updated 2018-03-19 (v2.30.1) *//*
3097
- * Requires tablesorter v2.16+
3098
- * by Rob Garrison
3099
- */
3100
- ;(function ($) {
3101
- 'use strict';
3102
- var ts = $.tablesorter || {};
3103
-
3104
- function getStoredSortList(c) {
3105
- var stored = ts.storage( c.table, 'tablesorter-savesort' );
3106
- return (stored && stored.hasOwnProperty('sortList') && $.isArray(stored.sortList)) ? stored.sortList : [];
3107
- }
3108
-
3109
- function sortListChanged(c, sortList) {
3110
- return (sortList || getStoredSortList(c)).join(',') !== c.sortList.join(',');
3111
- }
3112
-
3113
- // this widget saves the last sort only if the
3114
- // saveSort widget option is true AND the
3115
- // $.tablesorter.storage function is included
3116
- // **************************
3117
- ts.addWidget({
3118
- id: 'saveSort',
3119
- priority: 20,
3120
- options: {
3121
- saveSort : true
3122
- },
3123
- init: function(table, thisWidget, c, wo) {
3124
- // run widget format before all other widgets are applied to the table
3125
- thisWidget.format(table, c, wo, true);
3126
- },
3127
- format: function(table, c, wo, init) {
3128
- var time,
3129
- $table = c.$table,
3130
- saveSort = wo.saveSort !== false, // make saveSort active/inactive; default to true
3131
- sortList = { 'sortList' : c.sortList },
3132
- debug = ts.debug(c, 'saveSort');
3133
- if (debug) {
3134
- time = new Date();
3135
- }
3136
- if ($table.hasClass('hasSaveSort')) {
3137
- if (saveSort && table.hasInitialized && ts.storage && sortListChanged(c)) {
3138
- ts.storage( table, 'tablesorter-savesort', sortList );
3139
- if (debug) {
3140
- console.log('saveSort >> Saving last sort: ' + c.sortList + ts.benchmark(time));
3141
- }
3142
- }
3143
- } else {
3144
- // set table sort on initial run of the widget
3145
- $table.addClass('hasSaveSort');
3146
- sortList = '';
3147
- // get data
3148
- if (ts.storage) {
3149
- sortList = getStoredSortList(c);
3150
- if (debug) {
3151
- console.log('saveSort >> Last sort loaded: "' + sortList + '"' + ts.benchmark(time));
3152
- }
3153
- $table.bind('saveSortReset', function(event) {
3154
- event.stopPropagation();
3155
- ts.storage( table, 'tablesorter-savesort', '' );
3156
- });
3157
- }
3158
- // init is true when widget init is run, this will run this widget before all other widgets have initialized
3159
- // this method allows using this widget in the original tablesorter plugin; but then it will run all widgets twice.
3160
- if (init && sortList && sortList.length > 0) {
3161
- c.sortList = sortList;
3162
- } else if (table.hasInitialized && sortList && sortList.length > 0) {
3163
- // update sort change
3164
- if (sortListChanged(c, sortList)) {
3165
- ts.sortOn(c, sortList);
3166
- }
3167
- }
3168
- }
3169
- },
3170
- remove: function(table, c) {
3171
- c.$table.removeClass('hasSaveSort');
3172
- // clear storage
3173
- if (ts.storage) { ts.storage( table, 'tablesorter-savesort', '' ); }
3174
- }
3175
- });
3176
-
3177
- })(jQuery);
1
+ /*! tablesorter (FORK) - updated 2020-03-03 (v2.31.3)*/
2
  /* Includes widgets ( storage,uitheme,columns,filter,stickyHeaders,resizable,saveSort ) */
3
  (function(factory){if (typeof define === 'function' && define.amd){define(['jquery'], factory);} else if (typeof module === 'object' && typeof module.exports === 'object'){module.exports = factory(require('jquery'));} else {factory(jQuery);}}(function(jQuery) {
4
+ /*! Widget: storage - updated 2018-03-18 (v2.30.0) */
5
+ /*global JSON:false */
6
+ ;(function ($, window, document) {
7
+ 'use strict';
8
+
9
+ var ts = $.tablesorter || {};
10
+
11
+ // update defaults for validator; these values must be falsy!
12
+ $.extend(true, ts.defaults, {
13
+ fixedUrl: '',
14
+ widgetOptions: {
15
+ storage_fixedUrl: '',
16
+ storage_group: '',
17
+ storage_page: '',
18
+ storage_storageType: '',
19
+ storage_tableId: '',
20
+ storage_useSessionStorage: ''
21
+ }
22
+ });
23
+
24
+ // *** Store data in local storage, with a cookie fallback ***
25
+ /* IE7 needs JSON library for JSON.stringify - (http://caniuse.com/#search=json)
26
+ if you need it, then include https://github.com/douglascrockford/JSON-js
27
+
28
+ $.parseJSON is not available is jQuery versions older than 1.4.1, using older
29
+ versions will only allow storing information for one page at a time
30
+
31
+ // *** Save data (JSON format only) ***
32
+ // val must be valid JSON... use http://jsonlint.com/ to ensure it is valid
33
+ var val = { "mywidget" : "data1" }; // valid JSON uses double quotes
34
+ // $.tablesorter.storage(table, key, val);
35
+ $.tablesorter.storage(table, 'tablesorter-mywidget', val);
36
+
37
+ // *** Get data: $.tablesorter.storage(table, key); ***
38
+ v = $.tablesorter.storage(table, 'tablesorter-mywidget');
39
+ // val may be empty, so also check for your data
40
+ val = (v && v.hasOwnProperty('mywidget')) ? v.mywidget : '';
41
+ alert(val); // 'data1' if saved, or '' if not
42
+ */
43
+ ts.storage = function(table, key, value, options) {
44
+ table = $(table)[0];
45
+ var cookieIndex, cookies, date,
46
+ hasStorage = false,
47
+ values = {},
48
+ c = table.config,
49
+ wo = c && c.widgetOptions,
50
+ debug = ts.debug(c, 'storage'),
51
+ storageType = (
52
+ ( options && options.storageType ) || ( wo && wo.storage_storageType )
53
+ ).toString().charAt(0).toLowerCase(),
54
+ // deprecating "useSessionStorage"; any storageType setting overrides it
55
+ session = storageType ? '' :
56
+ ( options && options.useSessionStorage ) || ( wo && wo.storage_useSessionStorage ),
57
+ $table = $(table),
58
+ // id from (1) options ID, (2) table 'data-table-group' attribute, (3) widgetOptions.storage_tableId,
59
+ // (4) table ID, then (5) table index
60
+ id = options && options.id ||
61
+ $table.attr( options && options.group || wo && wo.storage_group || 'data-table-group') ||
62
+ wo && wo.storage_tableId || table.id || $('.tablesorter').index( $table ),
63
+ // url from (1) options url, (2) table 'data-table-page' attribute, (3) widgetOptions.storage_fixedUrl,
64
+ // (4) table.config.fixedUrl (deprecated), then (5) window location path
65
+ url = options && options.url ||
66
+ $table.attr(options && options.page || wo && wo.storage_page || 'data-table-page') ||
67
+ wo && wo.storage_fixedUrl || c && c.fixedUrl || window.location.pathname;
68
+
69
+ // skip if using cookies
70
+ if (storageType !== 'c') {
71
+ storageType = (storageType === 's' || session) ? 'sessionStorage' : 'localStorage';
72
+ // https://gist.github.com/paulirish/5558557
73
+ if (storageType in window) {
74
+ try {
75
+ window[storageType].setItem('_tmptest', 'temp');
76
+ hasStorage = true;
77
+ window[storageType].removeItem('_tmptest');
78
+ } catch (error) {
79
+ console.warn( storageType + ' is not supported in this browser' );
80
+ }
81
+ }
82
+ }
83
+ if (debug) {
84
+ console.log('Storage >> Using', hasStorage ? storageType : 'cookies');
85
+ }
86
+ // *** get value ***
87
+ if ($.parseJSON) {
88
+ if (hasStorage) {
89
+ values = $.parseJSON( window[storageType][key] || 'null' ) || {};
90
+ } else {
91
+ // old browser, using cookies
92
+ cookies = document.cookie.split(/[;\s|=]/);
93
+ // add one to get from the key to the value
94
+ cookieIndex = $.inArray(key, cookies) + 1;
95
+ values = (cookieIndex !== 0) ? $.parseJSON(cookies[cookieIndex] || 'null') || {} : {};
96
+ }
97
+ }
98
+ // allow value to be an empty string too
99
+ if (typeof value !== 'undefined' && window.JSON && JSON.hasOwnProperty('stringify')) {
100
+ // add unique identifiers = url pathname > table ID/index on page > data
101
+ if (!values[url]) {
102
+ values[url] = {};
103
+ }
104
+ values[url][id] = value;
105
+ // *** set value ***
106
+ if (hasStorage) {
107
+ window[storageType][key] = JSON.stringify(values);
108
+ } else {
109
+ date = new Date();
110
+ date.setTime(date.getTime() + (31536e+6)); // 365 days
111
+ document.cookie = key + '=' + (JSON.stringify(values)).replace(/\"/g, '\"') + '; expires=' + date.toGMTString() + '; path=/';
112
+ }
113
+ } else {
114
+ return values && values[url] ? values[url][id] : '';
115
+ }
116
+ };
117
+
118
+ })(jQuery, window, document);
119
+
120
+ /*! Widget: uitheme - updated 2018-03-18 (v2.30.0) */
121
+ ;(function ($) {
122
+ 'use strict';
123
+ var ts = $.tablesorter || {};
124
+
125
+ ts.themes = {
126
+ 'bootstrap' : {
127
+ table : 'table table-bordered table-striped',
128
+ caption : 'caption',
129
+ // header class names
130
+ header : 'bootstrap-header', // give the header a gradient background (theme.bootstrap_2.css)
131
+ sortNone : '',
132
+ sortAsc : '',
133
+ sortDesc : '',
134
+ active : '', // applied when column is sorted
135
+ hover : '', // custom css required - a defined bootstrap style may not override other classes
136
+ // icon class names
137
+ icons : '', // add 'bootstrap-icon-white' to make them white; this icon class is added to the <i> in the header
138
+ iconSortNone : 'bootstrap-icon-unsorted', // class name added to icon when column is not sorted
139
+ iconSortAsc : 'glyphicon glyphicon-chevron-up', // class name added to icon when column has ascending sort
140
+ iconSortDesc : 'glyphicon glyphicon-chevron-down', // class name added to icon when column has descending sort
141
+ filterRow : '', // filter row class
142
+ footerRow : '',
143
+ footerCells : '',
144
+ even : '', // even row zebra striping
145
+ odd : '' // odd row zebra striping
146
+ },
147
+ 'jui' : {
148
+ table : 'ui-widget ui-widget-content ui-corner-all', // table classes
149
+ caption : 'ui-widget-content',
150
+ // header class names
151
+ header : 'ui-widget-header ui-corner-all ui-state-default', // header classes
152
+ sortNone : '',
153
+ sortAsc : '',
154
+ sortDesc : '',
155
+ active : 'ui-state-active', // applied when column is sorted
156
+ hover : 'ui-state-hover', // hover class
157
+ // icon class names
158
+ icons : 'ui-icon', // icon class added to the <i> in the header
159
+ iconSortNone : 'ui-icon-carat-2-n-s ui-icon-caret-2-n-s', // class name added to icon when column is not sorted
160
+ iconSortAsc : 'ui-icon-carat-1-n ui-icon-caret-1-n', // class name added to icon when column has ascending sort
161
+ iconSortDesc : 'ui-icon-carat-1-s ui-icon-caret-1-s', // class name added to icon when column has descending sort
162
+ filterRow : '',
163
+ footerRow : '',
164
+ footerCells : '',
165
+ even : 'ui-widget-content', // even row zebra striping
166
+ odd : 'ui-state-default' // odd row zebra striping
167
+ }
168
+ };
169
+
170
+ $.extend(ts.css, {
171
+ wrapper : 'tablesorter-wrapper' // ui theme & resizable
172
+ });
173
+
174
+ ts.addWidget({
175
+ id: 'uitheme',
176
+ priority: 10,
177
+ format: function(table, c, wo) {
178
+ var i, tmp, hdr, icon, time, $header, $icon, $tfoot, $h, oldtheme, oldremove, oldIconRmv, hasOldTheme,
179
+ themesAll = ts.themes,
180
+ $table = c.$table.add( $( c.namespace + '_extra_table' ) ),
181
+ $headers = c.$headers.add( $( c.namespace + '_extra_headers' ) ),
182
+ theme = c.theme || 'jui',
183
+ themes = themesAll[theme] || {},
184
+ remove = $.trim( [ themes.sortNone, themes.sortDesc, themes.sortAsc, themes.active ].join( ' ' ) ),
185
+ iconRmv = $.trim( [ themes.iconSortNone, themes.iconSortDesc, themes.iconSortAsc ].join( ' ' ) ),
186
+ debug = ts.debug(c, 'uitheme');
187
+ if (debug) { time = new Date(); }
188
+ // initialization code - run once
189
+ if (!$table.hasClass('tablesorter-' + theme) || c.theme !== c.appliedTheme || !wo.uitheme_applied) {
190
+ wo.uitheme_applied = true;
191
+ oldtheme = themesAll[c.appliedTheme] || {};
192
+ hasOldTheme = !$.isEmptyObject(oldtheme);
193
+ oldremove = hasOldTheme ? [ oldtheme.sortNone, oldtheme.sortDesc, oldtheme.sortAsc, oldtheme.active ].join( ' ' ) : '';
194
+ oldIconRmv = hasOldTheme ? [ oldtheme.iconSortNone, oldtheme.iconSortDesc, oldtheme.iconSortAsc ].join( ' ' ) : '';
195
+ if (hasOldTheme) {
196
+ wo.zebra[0] = $.trim( ' ' + wo.zebra[0].replace(' ' + oldtheme.even, '') );
197
+ wo.zebra[1] = $.trim( ' ' + wo.zebra[1].replace(' ' + oldtheme.odd, '') );
198
+ c.$tbodies.children().removeClass( [ oldtheme.even, oldtheme.odd ].join(' ') );
199
+ }
200
+ // update zebra stripes
201
+ if (themes.even) { wo.zebra[0] += ' ' + themes.even; }
202
+ if (themes.odd) { wo.zebra[1] += ' ' + themes.odd; }
203
+ // add caption style
204
+ $table.children('caption')
205
+ .removeClass(oldtheme.caption || '')
206
+ .addClass(themes.caption);
207
+ // add table/footer class names
208
+ $tfoot = $table
209
+ // remove other selected themes
210
+ .removeClass( (c.appliedTheme ? 'tablesorter-' + (c.appliedTheme || '') : '') + ' ' + (oldtheme.table || '') )
211
+ .addClass('tablesorter-' + theme + ' ' + (themes.table || '')) // add theme widget class name
212
+ .children('tfoot');
213
+ c.appliedTheme = c.theme;
214
+
215
+ if ($tfoot.length) {
216
+ $tfoot
217
+ // if oldtheme.footerRow or oldtheme.footerCells are undefined, all class names are removed
218
+ .children('tr').removeClass(oldtheme.footerRow || '').addClass(themes.footerRow)
219
+ .children('th, td').removeClass(oldtheme.footerCells || '').addClass(themes.footerCells);
220
+ }
221
+ // update header classes
222
+ $headers
223
+ .removeClass( (hasOldTheme ? [ oldtheme.header, oldtheme.hover, oldremove ].join(' ') : '') || '' )
224
+ .addClass(themes.header)
225
+ .not('.sorter-false')
226
+ .unbind('mouseenter.tsuitheme mouseleave.tsuitheme')
227
+ .bind('mouseenter.tsuitheme mouseleave.tsuitheme', function(event) {
228
+ // toggleClass with switch added in jQuery 1.3
229
+ $(this)[ event.type === 'mouseenter' ? 'addClass' : 'removeClass' ](themes.hover || '');
230
+ });
231
+
232
+ $headers.each(function() {
233
+ var $this = $(this);
234
+ if (!$this.find('.' + ts.css.wrapper).length) {
235
+ // Firefox needs this inner div to position the icon & resizer correctly
236
+ $this.wrapInner('<div class="' + ts.css.wrapper + '" style="position:relative;height:100%;width:100%"></div>');
237
+ }
238
+ });
239
+ if (c.cssIcon) {
240
+ // if c.cssIcon is '', then no <i> is added to the header
241
+ $headers
242
+ .find('.' + ts.css.icon)
243
+ .removeClass(hasOldTheme ? [ oldtheme.icons, oldIconRmv ].join(' ') : '')
244
+ .addClass(themes.icons || '');
245
+ }
246
+ // filter widget initializes after uitheme
247
+ if (ts.hasWidget( c.table, 'filter' )) {
248
+ tmp = function() {
249
+ $table.children('thead').children('.' + ts.css.filterRow)
250
+ .removeClass(hasOldTheme ? oldtheme.filterRow || '' : '')
251
+ .addClass(themes.filterRow || '');
252
+ };
253
+ if (wo.filter_initialized) {
254
+ tmp();
255
+ } else {
256
+ $table.one('filterInit', function() {
257
+ tmp();
258
+ });
259
+ }
260
+ }
261
+ }
262
+ for (i = 0; i < c.columns; i++) {
263
+ $header = c.$headers
264
+ .add($(c.namespace + '_extra_headers'))
265
+ .not('.sorter-false')
266
+ .filter('[data-column="' + i + '"]');
267
+ $icon = (ts.css.icon) ? $header.find('.' + ts.css.icon) : $();
268
+ $h = $headers.not('.sorter-false').filter('[data-column="' + i + '"]:last');
269
+ if ($h.length) {
270
+ $header.removeClass(remove);
271
+ $icon.removeClass(iconRmv);
272
+ if ($h[0].sortDisabled) {
273
+ // no sort arrows for disabled columns!
274
+ $icon.removeClass(themes.icons || '');
275
+ } else {
276
+ hdr = themes.sortNone;
277
+ icon = themes.iconSortNone;
278
+ if ($h.hasClass(ts.css.sortAsc)) {
279
+ hdr = [ themes.sortAsc, themes.active ].join(' ');
280
+ icon = themes.iconSortAsc;
281
+ } else if ($h.hasClass(ts.css.sortDesc)) {
282
+ hdr = [ themes.sortDesc, themes.active ].join(' ');
283
+ icon = themes.iconSortDesc;
284
+ }
285
+ $header.addClass(hdr);
286
+ $icon.addClass(icon || '');
287
+ }
288
+ }
289
+ }
290
+ if (debug) {
291
+ console.log('uitheme >> Applied ' + theme + ' theme' + ts.benchmark(time));
292
+ }
293
+ },
294
+ remove: function(table, c, wo, refreshing) {
295
+ if (!wo.uitheme_applied) { return; }
296
+ var $table = c.$table,
297
+ theme = c.appliedTheme || 'jui',
298
+ themes = ts.themes[ theme ] || ts.themes.jui,
299
+ $headers = $table.children('thead').children(),
300
+ remove = themes.sortNone + ' ' + themes.sortDesc + ' ' + themes.sortAsc,
301
+ iconRmv = themes.iconSortNone + ' ' + themes.iconSortDesc + ' ' + themes.iconSortAsc;
302
+ $table.removeClass('tablesorter-' + theme + ' ' + themes.table);
303
+ wo.uitheme_applied = false;
304
+ if (refreshing) { return; }
305
+ $table.find(ts.css.header).removeClass(themes.header);
306
+ $headers
307
+ .unbind('mouseenter.tsuitheme mouseleave.tsuitheme') // remove hover
308
+ .removeClass(themes.hover + ' ' + remove + ' ' + themes.active)
309
+ .filter('.' + ts.css.filterRow)
310
+ .removeClass(themes.filterRow);
311
+ $headers.find('.' + ts.css.icon).removeClass(themes.icons + ' ' + iconRmv);
312
+ }
313
+ });
314
+
315
+ })(jQuery);
316
+
317
+ /*! Widget: columns - updated 5/24/2017 (v2.28.11) */
318
+ ;(function ($) {
319
+ 'use strict';
320
+ var ts = $.tablesorter || {};
321
+
322
+ ts.addWidget({
323
+ id: 'columns',
324
+ priority: 65,
325
+ options : {
326
+ columns : [ 'primary', 'secondary', 'tertiary' ]
327
+ },
328
+ format: function(table, c, wo) {
329
+ var $tbody, tbodyIndex, $rows, rows, $row, $cells, remove, indx,
330
+ $table = c.$table,
331
+ $tbodies = c.$tbodies,
332
+ sortList = c.sortList,
333
+ len = sortList.length,
334
+ // removed c.widgetColumns support
335
+ css = wo && wo.columns || [ 'primary', 'secondary', 'tertiary' ],
336
+ last = css.length - 1;
337
+ remove = css.join(' ');
338
+ // check if there is a sort (on initialization there may not be one)
339
+ for (tbodyIndex = 0; tbodyIndex < $tbodies.length; tbodyIndex++ ) {
340
+ $tbody = ts.processTbody(table, $tbodies.eq(tbodyIndex), true); // detach tbody
341
+ $rows = $tbody.children('tr');
342
+ // loop through the visible rows
343
+ $rows.each(function() {
344
+ $row = $(this);
345
+ if (this.style.display !== 'none') {
346
+ // remove all columns class names
347
+ $cells = $row.children().removeClass(remove);
348
+ // add appropriate column class names
349
+ if (sortList && sortList[0]) {
350
+ // primary sort column class
351
+ $cells.eq(sortList[0][0]).addClass(css[0]);
352
+ if (len > 1) {
353
+ for (indx = 1; indx < len; indx++) {
354
+ // secondary, tertiary, etc sort column classes
355
+ $cells.eq(sortList[indx][0]).addClass( css[indx] || css[last] );
356
+ }
357
+ }
358
+ }
359
+ }
360
+ });
361
+ ts.processTbody(table, $tbody, false);
362
+ }
363
+ // add classes to thead and tfoot
364
+ rows = wo.columns_thead !== false ? [ 'thead tr' ] : [];
365
+ if (wo.columns_tfoot !== false) {
366
+ rows.push('tfoot tr');
367
+ }
368
+ if (rows.length) {
369
+ $rows = $table.find( rows.join(',') ).children().removeClass(remove);
370
+ if (len) {
371
+ for (indx = 0; indx < len; indx++) {
372
+ // add primary. secondary, tertiary, etc sort column classes
373
+ $rows.filter('[data-column="' + sortList[indx][0] + '"]').addClass(css[indx] || css[last]);
374
+ }
375
+ }
376
+ }
377
+ },
378
+ remove: function(table, c, wo) {
379
+ var tbodyIndex, $tbody,
380
+ $tbodies = c.$tbodies,
381
+ remove = (wo.columns || [ 'primary', 'secondary', 'tertiary' ]).join(' ');
382
+ c.$headers.removeClass(remove);
383
+ c.$table.children('tfoot').children('tr').children('th, td').removeClass(remove);
384
+ for (tbodyIndex = 0; tbodyIndex < $tbodies.length; tbodyIndex++ ) {
385
+ $tbody = ts.processTbody(table, $tbodies.eq(tbodyIndex), true); // remove tbody
386
+ $tbody.children('tr').each(function() {
387
+ $(this).children().removeClass(remove);
388
+ });
389
+ ts.processTbody(table, $tbody, false); // restore tbody
390
+ }
391
+ }
392
+ });
393
+
394
+ })(jQuery);
395
 
396
  /*! Widget: filter - updated 2018-03-18 (v2.30.0) *//*
397
  * Requires tablesorter v2.8+ and jQuery 1.7+
2352
 
2353
  })( jQuery );
2354
 
2355
+ /*! Widget: stickyHeaders - updated 9/27/2017 (v2.29.0) *//*
2356
+ * Requires tablesorter v2.8+ and jQuery 1.4.3+
2357
+ * by Rob Garrison
2358
+ */
2359
+ ;(function ($, window) {
2360
+ 'use strict';
2361
+ var ts = $.tablesorter || {};
2362
+
2363
+ $.extend(ts.css, {
2364
+ sticky : 'tablesorter-stickyHeader', // stickyHeader
2365
+ stickyVis : 'tablesorter-sticky-visible',
2366
+ stickyHide: 'tablesorter-sticky-hidden',
2367
+ stickyWrap: 'tablesorter-sticky-wrapper'
2368
+ });
2369
+
2370
+ // Add a resize event to table headers
2371
+ ts.addHeaderResizeEvent = function(table, disable, settings) {
2372
+ table = $(table)[0]; // make sure we're using a dom element
2373
+ if ( !table.config ) { return; }
2374
+ var defaults = {
2375
+ timer : 250
2376
+ },
2377
+ options = $.extend({}, defaults, settings),
2378
+ c = table.config,
2379
+ wo = c.widgetOptions,
2380
+ checkSizes = function( triggerEvent ) {
2381
+ var index, headers, $header, sizes, width, height,
2382
+ len = c.$headers.length;
2383
+ wo.resize_flag = true;
2384
+ headers = [];
2385
+ for ( index = 0; index < len; index++ ) {
2386
+ $header = c.$headers.eq( index );
2387
+ sizes = $header.data( 'savedSizes' ) || [ 0, 0 ]; // fixes #394
2388
+ width = $header[0].offsetWidth;
2389
+ height = $header[0].offsetHeight;
2390
+ if ( width !== sizes[0] || height !== sizes[1] ) {
2391
+ $header.data( 'savedSizes', [ width, height ] );
2392
+ headers.push( $header[0] );
2393
+ }
2394
+ }
2395
+ if ( headers.length && triggerEvent !== false ) {
2396
+ c.$table.triggerHandler( 'resize', [ headers ] );
2397
+ }
2398
+ wo.resize_flag = false;
2399
+ };
2400
+ clearInterval(wo.resize_timer);
2401
+ if (disable) {
2402
+ wo.resize_flag = false;
2403
+ return false;
2404
+ }
2405
+ checkSizes( false );
2406
+ wo.resize_timer = setInterval(function() {
2407
+ if (wo.resize_flag) { return; }
2408
+ checkSizes();
2409
+ }, options.timer);
2410
+ };
2411
+
2412
+ function getStickyOffset(c, wo) {
2413
+ var $el = isNaN(wo.stickyHeaders_offset) ? $(wo.stickyHeaders_offset) : [];
2414
+ return $el.length ?
2415
+ $el.height() || 0 :
2416
+ parseInt(wo.stickyHeaders_offset, 10) || 0;
2417
+ }
2418
+
2419
+ // Sticky headers based on this awesome article:
2420
+ // http://css-tricks.com/13465-persistent-headers/
2421
+ // and https://github.com/jmosbech/StickyTableHeaders by Jonas Mosbech
2422
+ // **************************
2423
+ ts.addWidget({
2424
+ id: 'stickyHeaders',
2425
+ priority: 54, // sticky widget must be initialized after the filter & before pager widget!
2426
+ options: {
2427
+ stickyHeaders : '', // extra class name added to the sticky header row
2428
+ stickyHeaders_appendTo : null, // jQuery selector or object to phycially attach the sticky headers
2429
+ stickyHeaders_attachTo : null, // jQuery selector or object to attach scroll listener to (overridden by xScroll & yScroll settings)
2430
+ stickyHeaders_xScroll : null, // jQuery selector or object to monitor horizontal scroll position (defaults: xScroll > attachTo > window)
2431
+ stickyHeaders_yScroll : null, // jQuery selector or object to monitor vertical scroll position (defaults: yScroll > attachTo > window)
2432
+ stickyHeaders_offset : 0, // number or jquery selector targeting the position:fixed element
2433
+ stickyHeaders_filteredToTop: true, // scroll table top into view after filtering
2434
+ stickyHeaders_cloneId : '-sticky', // added to table ID, if it exists
2435
+ stickyHeaders_addResizeEvent : true, // trigger 'resize' event on headers
2436
+ stickyHeaders_includeCaption : true, // if false and a caption exist, it won't be included in the sticky header
2437
+ stickyHeaders_zIndex : 2 // The zIndex of the stickyHeaders, allows the user to adjust this to their needs
2438
+ },
2439
+ format: function(table, c, wo) {
2440
+ // filter widget doesn't initialize on an empty table. Fixes #449
2441
+ if ( c.$table.hasClass('hasStickyHeaders') || ($.inArray('filter', c.widgets) >= 0 && !c.$table.hasClass('hasFilters')) ) {
2442
+ return;
2443
+ }
2444
+ var index, len, $t,
2445
+ $table = c.$table,
2446
+ // add position: relative to attach element, hopefully it won't cause trouble.
2447
+ $attach = $(wo.stickyHeaders_attachTo || wo.stickyHeaders_appendTo),
2448
+ namespace = c.namespace + 'stickyheaders ',
2449
+ // element to watch for the scroll event
2450
+ $yScroll = $(wo.stickyHeaders_yScroll || wo.stickyHeaders_attachTo || window),
2451
+ $xScroll = $(wo.stickyHeaders_xScroll || wo.stickyHeaders_attachTo || window),
2452
+ $thead = $table.children('thead:first'),
2453
+ $header = $thead.children('tr').not('.sticky-false').children(),
2454
+ $tfoot = $table.children('tfoot'),
2455
+ stickyOffset = getStickyOffset(c, wo),
2456
+ // is this table nested? If so, find parent sticky header wrapper (div, not table)
2457
+ $nestedSticky = $table.parent().closest('.' + ts.css.table).hasClass('hasStickyHeaders') ?
2458
+ $table.parent().closest('table.tablesorter')[0].config.widgetOptions.$sticky.parent() : [],
2459
+ nestedStickyTop = $nestedSticky.length ? $nestedSticky.height() : 0,
2460
+ // clone table, then wrap to make sticky header
2461
+ $stickyTable = wo.$sticky = $table.clone()
2462
+ .addClass('containsStickyHeaders ' + ts.css.sticky + ' ' + wo.stickyHeaders + ' ' + c.namespace.slice(1) + '_extra_table' )
2463
+ .wrap('<div class="' + ts.css.stickyWrap + '">'),
2464
+ $stickyWrap = $stickyTable.parent()
2465
+ .addClass(ts.css.stickyHide)
2466
+ .css({
2467
+ position : $attach.length ? 'absolute' : 'fixed',
2468
+ padding : parseInt( $stickyTable.parent().parent().css('padding-left'), 10 ),
2469
+ top : stickyOffset + nestedStickyTop,
2470
+ left : 0,
2471
+ visibility : 'hidden',
2472
+ zIndex : wo.stickyHeaders_zIndex || 2
2473
+ }),
2474
+ $stickyThead = $stickyTable.children('thead:first'),
2475
+ $stickyCells,
2476
+ laststate = '',
2477
+ setWidth = function($orig, $clone) {
2478
+ var index, width, border, $cell, $this,
2479
+ $cells = $orig.filter(':visible'),
2480
+ len = $cells.length;
2481
+ for ( index = 0; index < len; index++ ) {
2482
+ $cell = $clone.filter(':visible').eq(index);
2483
+ $this = $cells.eq(index);
2484
+ // code from https://github.com/jmosbech/StickyTableHeaders
2485
+ if ($this.css('box-sizing') === 'border-box') {
2486
+ width = $this.outerWidth();
2487
+ } else {
2488
+ if ($cell.css('border-collapse') === 'collapse') {
2489
+ if (window.getComputedStyle) {
2490
+ width = parseFloat( window.getComputedStyle($this[0], null).width );
2491
+ } else {
2492
+ // ie8 only
2493
+ border = parseFloat( $this.css('border-width') );
2494
+ width = $this.outerWidth() - parseFloat( $this.css('padding-left') ) - parseFloat( $this.css('padding-right') ) - border;
2495
+ }
2496
+ } else {
2497
+ width = $this.width();
2498
+ }
2499
+ }
2500
+ $cell.css({
2501
+ 'width': width,
2502
+ 'min-width': width,
2503
+ 'max-width': width
2504
+ });
2505
+ }
2506
+ },
2507
+ getLeftPosition = function(yWindow) {
2508
+ if (yWindow === false && $nestedSticky.length) {
2509
+ return $table.position().left;
2510
+ }
2511
+ return $attach.length ?
2512
+ parseInt($attach.css('padding-left'), 10) || 0 :
2513
+ $table.offset().left - parseInt($table.css('margin-left'), 10) - $(window).scrollLeft();
2514
+ },
2515
+ resizeHeader = function() {
2516
+ $stickyWrap.css({
2517
+ left : getLeftPosition(),
2518
+ width: $table.outerWidth()
2519
+ });
2520
+ setWidth( $table, $stickyTable );
2521
+ setWidth( $header, $stickyCells );
2522
+ },
2523
+ scrollSticky = function( resizing ) {
2524
+ if (!$table.is(':visible')) { return; } // fixes #278
2525
+ // Detect nested tables - fixes #724
2526
+ nestedStickyTop = $nestedSticky.length ? $nestedSticky.offset().top - $yScroll.scrollTop() + $nestedSticky.height() : 0;
2527
+ var tmp,
2528
+ offset = $table.offset(),
2529
+ stickyOffset = getStickyOffset(c, wo),
2530
+ yWindow = $.isWindow( $yScroll[0] ), // $.isWindow needs jQuery 1.4.3
2531
+ yScroll = yWindow ?
2532
+ $yScroll.scrollTop() :
2533
+ // use parent sticky position if nested AND inside of a scrollable element - see #1512
2534
+ $nestedSticky.length ? parseInt($nestedSticky[0].style.top, 10) : $yScroll.offset().top,
2535
+ attachTop = $attach.length ? yScroll : $yScroll.scrollTop(),
2536
+ captionHeight = wo.stickyHeaders_includeCaption ? 0 : $table.children( 'caption' ).height() || 0,
2537
+ scrollTop = attachTop + stickyOffset + nestedStickyTop - captionHeight,
2538
+ tableHeight = $table.height() - ($stickyWrap.height() + ($tfoot.height() || 0)) - captionHeight,
2539
+ isVisible = ( scrollTop > offset.top ) && ( scrollTop < offset.top + tableHeight ) ? 'visible' : 'hidden',
2540
+ state = isVisible === 'visible' ? ts.css.stickyVis : ts.css.stickyHide,
2541
+ needsUpdating = !$stickyWrap.hasClass( state ),
2542
+ cssSettings = { visibility : isVisible };
2543
+ if ($attach.length) {
2544
+ // attached sticky headers always need updating
2545
+ needsUpdating = true;
2546
+ cssSettings.top = yWindow ? scrollTop - $attach.offset().top : $attach.scrollTop();
2547
+ }
2548
+ // adjust when scrolling horizontally - fixes issue #143
2549
+ tmp = getLeftPosition(yWindow);
2550
+ if (tmp !== parseInt($stickyWrap.css('left'), 10)) {
2551
+ needsUpdating = true;
2552
+ cssSettings.left = tmp;
2553
+ }
2554
+ cssSettings.top = ( cssSettings.top || 0 ) +
2555
+ // If nested AND inside of a scrollable element, only add parent sticky height
2556
+ (!yWindow && $nestedSticky.length ? $nestedSticky.height() : stickyOffset + nestedStickyTop);
2557
+ if (needsUpdating) {
2558
+ $stickyWrap
2559
+ .removeClass( ts.css.stickyVis + ' ' + ts.css.stickyHide )
2560
+ .addClass( state )
2561
+ .css(cssSettings);
2562
+ }
2563
+ if (isVisible !== laststate || resizing) {
2564
+ // make sure the column widths match
2565
+ resizeHeader();
2566
+ laststate = isVisible;
2567
+ }
2568
+ };
2569
+ // only add a position relative if a position isn't already defined
2570
+ if ($attach.length && !$attach.css('position')) {
2571
+ $attach.css('position', 'relative');
2572
+ }
2573
+ // fix clone ID, if it exists - fixes #271
2574
+ if ($stickyTable.attr('id')) { $stickyTable[0].id += wo.stickyHeaders_cloneId; }
2575
+ // clear out cloned table, except for sticky header
2576
+ // include caption & f